woby
Version:
A high-performance framework with fine-grained observable/signal-based reactivity for building rich applications.
59 lines (58 loc) • 2.49 kB
JavaScript
;
require("./fragment-DZv7GBzl.cjs");
const wrap_clone_element = require("./wrap_clone_element-C4XivH3I.cjs");
const setters = require("./setters-CyO2VUT6.cjs");
const createElement = (component, _props, ..._children) => {
const children = _children.length > 1 ? _children : _children.length > 0 ? _children[0] : void 0;
const hasChildren = !setters.isVoidChild(children);
const { ...rest } = _props ?? {};
if (hasChildren && setters.isObject(_props) && "children" in _props) {
throw new Error('Providing "children" both as a prop and as rest arguments is forbidden');
}
if (setters.isFunction(component)) {
const props = hasChildren ? { ..._props, children } : _props;
return wrap_clone_element.wrapElement(() => {
return setters.untrack(() => component.call(component, props));
});
} else if (setters.isString(component)) {
const isSVG = setters.isSVGElement(component);
const createNode = isSVG ? setters.createSVGNode : setters.createHTMLNode;
return wrap_clone_element.wrapElement(() => {
const child = createNode(component);
if (isSVG) child["isSVG"] = true;
const stack = new Error();
setters.untrack(() => {
if (_props) {
setters.setProps(child, _props, stack);
}
if (hasChildren) {
setters.setChild(child, children, setters.FragmentUtils.make(), stack);
}
});
return child;
});
} else if (setters.isNode(component)) {
return wrap_clone_element.wrapElement(() => component);
} else {
throw new Error("Invalid component");
}
};
function jsx(component, props, ...children) {
if (typeof children === "string")
return wrap_clone_element.wrapCloneElement(createElement(component, props ?? {}, children), component, props);
if (!props) props = {};
if (typeof children === "string")
Object.assign(props, { children });
return wrap_clone_element.wrapCloneElement(createElement(component, props, props == null ? void 0 : props.key), component, props);
}
const jsxDEV = (component, props, key, isStatic, source, self) => {
if (key)
Object.assign(props, { key });
return wrap_clone_element.wrapCloneElement(createElement(component, props), component, props);
};
const getMeta = (target) => target == null ? void 0 : target[setters.SYMBOL_CLONE];
exports.createElement = createElement;
exports.getMeta = getMeta;
exports.jsx = jsx;
exports.jsxDEV = jsxDEV;
//# sourceMappingURL=runtime-BkkHnWaw.cjs.map