render = (render, keyOrElement) =>
__SECRET_INTERNALS('elements', String(render), keyOrElement, {
init: state => ({
renderer: () => state.render(state.public),
id: __SECRET_CREATE_ID(),
element: DOM.element('div'),
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 =>
ReactDOM.render(createElement(state.renderer), state.element),
return: state => state.element
})