hello-world.ts ts

import {
	type Component,
	RESET,
	asString,
	component,
	on,
	requireDescendant,
	setText,
} from '../../..'

export type HelloWorldProps = {
	name: string
}

export default component(
	'hello-world',
	{
		name: asString(RESET),
	},
	(el, { first }) => {
		requireDescendant(el, 'span')

		return [
			first(
				'input',
				on('input', e => {
					el.name = (e.target as HTMLInputElement).value || RESET
				}),
			),
			first('span', setText('name')),
		]
	},
)

declare global {
	interface HTMLElementTagNameMap {
		'hello-world': Component<HelloWorldProps>
	}
}