import { html, state, effect, repeat } from '@beforesemicolon/markup'
const [todos, setTodos] = state(
JSON.parse(localStorage.getItem('todos') ?? '[]')
)
effect(() => {
localStorage.setItem('todos', JSON.stringify(todos()))
})
const addTodo = () => {
const text = window.prompt('What needs doing?')?.trim()
if (text) setTodos((prev) => [...prev, { text, done: false }])
}
const toggle = (i) =>
setTodos(todos().map((t, idx) => (idx === i ? { ...t, done: !t.done } : t)))
html`
<button type="button" onclick="${addTodo}">Add</button>
<ul>
${repeat(
todos,
(todo, i) => html`
<li
class="${todo.done ? 'done' : ''}"
onclick="${() => toggle(i)}"
>
${todo.text}
</li>
`
)}
</ul>
`.render(document.querySelector('#app'))