{ "name": "editable-todo-list-demo", "type": "registry:example", "dependencies": [ "lucide-react" ], "registryDependencies": [ "editable", "checkbox" ], "files": [ { "path": "examples/editable-todo-list-demo.tsx", "type": "registry:example", "content": "\"use client\";\n\nimport { Edit, Trash2 } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"@/registry/bases/base/ui/button\";\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\";\nimport {\n Editable,\n EditableArea,\n EditableInput,\n EditablePreview,\n EditableTrigger,\n} from \"@/registry/bases/base/ui/editable\";\n\ninterface Todo {\n id: string;\n text: string;\n completed: boolean;\n}\n\nexport default function EditableTodoListDemo() {\n const [todos, setTodos] = React.useState([\n { id: \"1\", text: \"Ollie\", completed: false },\n { id: \"2\", text: \"Kickflip\", completed: false },\n { id: \"3\", text: \"360 flip\", completed: false },\n { id: \"4\", text: \"540 flip\", completed: false },\n ]);\n\n const onDeleteTodo = React.useCallback((id: string) => {\n setTodos((prev) => prev.filter((todo) => todo.id !== id));\n }, []);\n\n const onToggleTodo = React.useCallback((id: string) => {\n setTodos((prev) =>\n prev.map((todo) =>\n todo.id === id ? { ...todo, completed: !todo.completed } : todo,\n ),\n );\n }, []);\n\n const onUpdateTodo = React.useCallback((id: string, newText: string) => {\n setTodos((prev) =>\n prev.map((todo) => (todo.id === id ? { ...todo, text: newText } : todo)),\n );\n }, []);\n\n return (\n
\n Tricks to learn\n {todos.map((todo) => (\n \n onToggleTodo(todo.id)}\n />\n onUpdateTodo(todo.id, value)}\n className=\"flex flex-1 flex-row items-center gap-1.5\"\n >\n \n \n \n \n }\n >\n \n \n \n onDeleteTodo(todo.id)}\n >\n \n \n
\n ))}\n \n );\n}\n", "target": "" } ] }