@corvu/utils
Version:
Utilities for corvu
55 lines (53 loc) • 1.62 kB
JSX
import {
access
} from "../chunk/U42ECMND.jsx";
// src/create/style.ts
import { createEffect, onCleanup } from "solid-js";
var activeStyles = /* @__PURE__ */ new Map();
var createStyle = (props) => {
createEffect(() => {
const style = access(props.style) ?? {};
const properties = access(props.properties) ?? [];
const originalStyles = {};
for (const key in style) {
originalStyles[key] = props.element.style[key];
}
const activeStyle = activeStyles.get(props.key);
if (activeStyle) {
activeStyle.activeCount++;
} else {
activeStyles.set(props.key, {
activeCount: 1,
originalStyles,
properties: properties.map((property) => property.key)
});
}
Object.assign(props.element.style, props.style);
for (const property of properties) {
props.element.style.setProperty(property.key, property.value);
}
onCleanup(() => {
const activeStyle2 = activeStyles.get(props.key);
if (!activeStyle2) return;
if (activeStyle2.activeCount !== 1) {
activeStyle2.activeCount--;
return;
}
activeStyles.delete(props.key);
for (const [key, value] of Object.entries(activeStyle2.originalStyles)) {
props.element.style[key] = value;
}
for (const property of activeStyle2.properties) {
props.element.style.removeProperty(property);
}
if (props.element.style.length === 0) {
props.element.removeAttribute("style");
}
props.cleanup?.();
});
});
};
var style_default = createStyle;
export {
style_default as default
};