import { useStorage } from '@/hooks/use-storage' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Badge } from '@/components/ui/badge' import { useState } from 'react' import { Database } from '@phosphor-icons/react' import copy from '@/data/storage-example.json' interface Todo { id: string text: string completed: boolean createdAt: number } type HeaderProps = { title: string description: string } const StorageExampleHeader = ({ title, description }: HeaderProps) => (

{title}

{description}

) type CounterCardProps = { counter: number onIncrement: () => void } const CounterCard = ({ counter, onIncrement }: CounterCardProps) => ( {copy.counter.title}
{counter}

{copy.counter.helper}

) type TodoListCardProps = { todos: Todo[] newTodoText: string onTodoTextChange: (value: string) => void onAddTodo: () => void onToggleTodo: (id: string) => void onDeleteTodo: (id: string) => void } const TodoListCard = ({ todos, newTodoText, onTodoTextChange, onAddTodo, onToggleTodo, onDeleteTodo, }: TodoListCardProps) => ( {copy.todo.title}
onTodoTextChange(e.target.value)} placeholder={copy.todo.placeholder} onKeyDown={(e) => e.key === 'Enter' && onAddTodo()} />
{todos.length === 0 ? (

{copy.todo.emptyState}

) : ( todos.map((todo) => (
onToggleTodo(todo.id)} className="w-4 h-4" /> {todo.text}
)) )}

{copy.todo.footer}

) const HowItWorksCard = () => ( {copy.howItWorks.title}
{copy.howItWorks.steps.map((step) => (

{step.title}

{step.description}

))}

{copy.howItWorks.codeExampleTitle}

{copy.howItWorks.codeSample}
) export function StorageExample() { const [newTodoText, setNewTodoText] = useState('') const [todos, setTodos] = useStorage('example-todos', []) const [counter, setCounter] = useStorage('example-counter', 0) const addTodo = () => { if (!newTodoText.trim()) return setTodos((current) => [ ...current, { id: Date.now().toString(), text: newTodoText, completed: false, createdAt: Date.now(), }, ]) setNewTodoText('') } const toggleTodo = (id: string) => { setTodos((current) => current.map((todo) => (todo.id === id ? { ...todo, completed: !todo.completed } : todo)) ) } const deleteTodo = (id: string) => { setTodos((current) => current.filter((todo) => todo.id !== id)) } const incrementCounter = () => { setCounter((current) => current + 1) } return (
) }