const choo = require('choo') const html = require('choo/html') const app = choo() app.model({ state: { title: 'existing text', isValid: true, isEditing: false }, reducers: { update: (data, state) => { return { title: data, isValid: data.length > 5 && data.length < 15 } }, focus: (data, state) => { return { isEditing: data } }, capitalize: (data, state) => { return { title: state.title.toUpperCase() } } } }) const mainView = (state, prev, send) => html`
element.value = state.title} oninput=${event => send('update', event.target.value)} ${state.isEditing ? 'data-value' : 'value'}=${state.title} onfocus=${event => send('focus', true)} onblur=${event => send('focus', false)} />
` app.router((route) => [ route('/', mainView) ]) const tree = app.start() document.body.appendChild(tree)