@zag-js/solid
Version:
The solid.js wrapper for zag
62 lines (61 loc) • 1.64 kB
JavaScript
// src/normalize-props.ts
import { createNormalizer } from "@zag-js/types";
import { isNumber, isObject, isString } from "@zag-js/utils";
var eventMap = {
onFocus: "onFocusIn",
onBlur: "onFocusOut",
onDoubleClick: "onDblClick",
onChange: "onInput",
defaultChecked: "checked",
defaultValue: "value",
htmlFor: "for",
className: "class"
};
var format = (v) => v.startsWith("--") ? v : hyphenateStyleName(v);
function toSolidProp(prop) {
return prop in eventMap ? eventMap[prop] : prop;
}
var normalizeProps = createNormalizer((props) => {
const normalized = {};
for (const key in props) {
const value = props[key];
if (key === "readOnly" && value === false) {
continue;
}
if (key === "style" && isObject(value)) {
normalized["style"] = cssify(value);
continue;
}
if (key === "children") {
if (isString(value)) {
normalized["textContent"] = value;
}
continue;
}
normalized[toSolidProp(key)] = value;
}
return normalized;
});
function cssify(style) {
let css = {};
for (const property in style) {
const value = style[property];
if (!isString(value) && !isNumber(value)) continue;
css[format(property)] = value;
}
return css;
}
var uppercasePattern = /[A-Z]/g;
var msPattern = /^ms-/;
function toHyphenLower(match) {
return "-" + match.toLowerCase();
}
var cache = {};
function hyphenateStyleName(name) {
if (cache.hasOwnProperty(name)) return cache[name];
const hName = name.replace(uppercasePattern, toHyphenLower);
return cache[name] = msPattern.test(hName) ? "-" + hName : hName;
}
export {
normalizeProps
};