render = render =>
__SECRET_INTERNALS('elements', String(render), {
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),
}).element