{ "name": "action-bar-demo", "type": "registry:example", "dependencies": [ "lucide-react" ], "registryDependencies": [ "action-bar", "checkbox" ], "files": [ { "path": "examples/action-bar-demo.tsx", "type": "registry:example", "content": "\"use client\";\n\nimport { Copy, Trash2, X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport {\n ActionBar,\n ActionBarClose,\n ActionBarGroup,\n ActionBarItem,\n ActionBarSelection,\n ActionBarSeparator,\n} from \"@/registry/bases/base/ui/action-bar\";\nimport { Checkbox } from \"@/registry/bases/base/ui/checkbox\";\nimport { Label } from \"@/registry/bases/base/ui/label\";\n\ninterface Task {\n id: string;\n name: string;\n}\n\nexport default function ActionBarDemo() {\n const [tasks, setTasks] = React.useState([\n { id: crypto.randomUUID(), name: \"Weekly Status Report\" },\n { id: crypto.randomUUID(), name: \"Client Invoice Review\" },\n { id: crypto.randomUUID(), name: \"Product Roadmap\" },\n { id: crypto.randomUUID(), name: \"Team Standup Notes\" },\n ]);\n const [selectedTaskIds, setSelectedTaskIds] = React.useState>(\n new Set(),\n );\n\n const open = selectedTaskIds.size > 0;\n\n const onOpenChange = React.useCallback((open: boolean) => {\n if (!open) {\n setSelectedTaskIds(new Set());\n }\n }, []);\n\n const onItemSelect = React.useCallback(\n (id: string, checked: boolean) => {\n const newSelected = new Set(selectedTaskIds);\n if (checked) {\n newSelected.add(id);\n } else {\n newSelected.delete(id);\n }\n setSelectedTaskIds(newSelected);\n },\n [selectedTaskIds],\n );\n\n const onDuplicate = React.useCallback(() => {\n const selectedItems = tasks.filter((task) => selectedTaskIds.has(task.id));\n const duplicates = selectedItems.map((task) => ({\n ...task,\n id: crypto.randomUUID(),\n name: `${task.name} (copy)`,\n }));\n setTasks([...tasks, ...duplicates]);\n setSelectedTaskIds(new Set());\n }, [tasks, selectedTaskIds]);\n\n const onDelete = React.useCallback(() => {\n setTasks(tasks.filter((task) => !selectedTaskIds.has(task.id)));\n setSelectedTaskIds(new Set());\n }, [tasks, selectedTaskIds]);\n\n return (\n
\n

Tasks

\n
\n {tasks.map((task) => (\n \n \n onItemSelect(task.id, checked === true)\n }\n />\n {task.name}\n \n ))}\n
\n\n \n \n {selectedTaskIds.size} selected\n \n \n \n \n \n \n \n \n \n Duplicate\n \n \n \n Delete\n \n \n \n
\n );\n}\n", "target": "" } ] }