1import { html, state, effect, repeat } from '@beforesemicolon/markup'2 3const [todos, setTodos] = state(4 JSON.parse(localStorage.getItem('todos') ?? '[]')5)6 7effect(() => {8 localStorage.setItem('todos', JSON.stringify(todos()))9})10 11const addTodo = () => {12 const text = window.prompt('What needs doing?')?.trim()13 14 if (text) setTodos((prev) => [...prev, { text, done: false }])15}16 17const toggle = (i) =>18 setTodos(todos().map((t, idx) => (idx === i ? { ...t, done: !t.done } : t)))19 20html`21 <button type="button" onclick="${addTodo}">Add</button>22 <ul>23 ${repeat(24 todos,25 (todo, i) => html`26 <li27 class="${todo.done ? 'done' : ''}"28 onclick="${() => toggle(i)}"29 >30 ${todo.text}31 </li>32 `33 )}34 </ul>35`.render(document.querySelector('#app'))