@zeix/ui-element
Version:
UIElement - a HTML-first library for reactive Web Components
38 lines (33 loc) • 709 B
text/typescript
import {
type Component,
RESET,
asString,
component,
fromEvents,
requireDescendant,
setText,
toggleAttribute,
} from '../../..'
export type FormCheckboxProps = {
readonly checked: boolean
label: string
}
export default component(
'form-checkbox',
{
checked: fromEvents(el => el.querySelector('input')?.checked, 'input', {
change: ({ target }) => target.checked,
}),
label: asString(RESET),
},
(el, { first }) => {
requireDescendant(el, 'input[type="checkbox"]')
requireDescendant(el, '.label')
return [toggleAttribute('checked'), first('.label', setText('label'))]
},
)
declare global {
interface HTMLElementTagNameMap {
'form-checkbox': Component<FormCheckboxProps>
}
}