@noema/hyle
Version:
48 lines • 2.08 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { assignInlineVars } from '@vanilla-extract/dynamic';
import clsx from 'clsx';
import { useMemo } from 'react';
import { categorizeProps, resolveValue } from './utils.js';
export function hyle(element, sprinkles, hyleStyle) {
return (props) => {
const { className, style, inlineVars, ...allProps } = props;
const Comp = element;
const processedProps = useMemo(() => {
const { sprinkled, primitive, shorthands, rest } = categorizeProps(allProps, sprinkles.properties, hyleStyle);
const vars = {};
const styleClassNames = [];
for (const [key, value] of Object.entries(primitive)) {
if (value === null) {
continue;
}
const cssVar = hyleStyle.styles[key];
vars[cssVar] = resolveValue(key, value);
styleClassNames.push(hyleStyle.classNames[key]);
}
for (const [shorthand, value] of Object.entries(shorthands)) {
if (value === null) {
continue;
}
const properties = hyleStyle.shorthands?.[shorthand] || [];
for (const prop of properties) {
if (prop in hyleStyle.styles) {
const cssVar = hyleStyle.styles[prop];
vars[cssVar] = resolveValue(prop, value);
styleClassNames.push(hyleStyle.classNames[prop]);
}
}
}
return {
style: {
...style,
...assignInlineVars(inlineVars ?? {}),
...assignInlineVars(vars),
},
className: clsx(sprinkles(sprinkled), hyleStyle.baseClassName, styleClassNames, className),
...rest,
};
}, [allProps, className, style, inlineVars]);
return _jsx(Comp, { ...processedProps });
};
}
//# sourceMappingURL=hyle.js.map