All files / src/internal/client/dom/blocks css-props.js

94.73% Statements 36/38
83.33% Branches 5/6
100% Functions 1/1
94.44% Lines 34/36

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 372x 2x 2x 2x 2x 2x 2x 2x 2x 2x 1x 1x 1x 1x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x 2x     2x 2x 2x 2x 2x 2x 2x 2x 2x  
import { hydrating, set_hydrate_nodes } from '../hydration.js';
import { render_effect } from '../../reactivity/effects.js';
 
/**
 * @param {HTMLDivElement | SVGGElement} element
 * @param {() => Record<string, string>} get_styles
 * @returns {void}
 */
export function css_props(element, get_styles) {
	if (hydrating) {
		set_hydrate_nodes(
			/** @type {import('#client').TemplateNode[]} */ ([...element.childNodes]).slice(0, -1)
		);
	}
 
	render_effect(() => {
		render_effect(() => {
			var styles = get_styles();
 
			for (var key in styles) {
				var value = styles[key];
 
				if (value) {
					element.style.setProperty(key, value);
				} else {
					element.style.removeProperty(key);
				}
			}
		});
 
		return () => {
			// TODO use `teardown` instead of creating a nested effect, post-https://github.com/sveltejs/svelte/pull/11936
			element.remove();
		};
	});
}