diff --git a/examples/todo.ds b/examples/todo.ds new file mode 100644 index 0000000..63a65c2 --- /dev/null +++ b/examples/todo.ds @@ -0,0 +1,40 @@ +-- DreamStack Todo App +-- Showcases: push, len, for-in, string interpolation, array access, streaming +-- Stream to phone: dreamstack stream examples/todo.ds --relay ws://YOUR_IP:9100 + +let todos = ["Learn DreamStack", "Build something cool", "Ship it"] +let done = [0, 0, 0] +let input_text = "" +let next_id = 3 +let filter_mode = "all" + +-- Derived counts +let total = len(todos) + +-- Stream: any device on the network can view / interact +stream todo on "ws://localhost:9100" { mode: signal } + +view app = + column [ + text "DreamStack Todos" + text "{total} items" + + -- Add new todo + row [ + input "" { bind: input_text, placeholder: "What needs to be done?" } + button "Add" { click: push(todos, input_text) } + ] + + -- Todo list + for item, i in todos -> + row [ + button (if done[i] then "✅" else "⬜") { click: done[i] = (if done[i] then 0 else 1) } + text (if done[i] then " ̶{item}̶" else item) + ] + + -- Controls + row [ + text "{total} items" + button "Clear All" { click: todos = [] } + ] + ]