render = (render, keyOrElement) =>
__SECRET_INTERNALS("elements", String(render), keyOrElement, {
init: (state) => {
const element = DOM.element("div");
return {
renderer: () => state.render(state.public),
id: __SECRET_CREATE_ID(),
element,
root: ReactDOM.createRoot(element),
public: {
useSetter: (setterOrValue, deps) =>
typeof setterOrValue === "function"
? useEffect(
() =>
state.public.setValue(
setterOrValue(state.public.getValue())
),
deps
)
: useEffect(() => state.public.setValue(setterOrValue), [
setterOrValue
]),
getValue: () => state.element.value,
setValue: (value) => {
state.element.value = value;
state.element.dispatchEvent(new CustomEvent("input"));
}
}
};
},
update: { render },
effect: (state) => state.root.render(createElement(state.renderer)),
return: (state) => state.element
})