{ "name": "badge-overflow-interactive-demo", "type": "registry:example", "dependencies": [ "lucide-react" ], "registryDependencies": [ "badge", "badge-overflow", "button", "input" ], "files": [ { "path": "examples/badge-overflow-interactive-demo.tsx", "type": "registry:example", "content": "\"use client\";\n\nimport { X } from \"lucide-react\";\nimport * as React from \"react\";\nimport { Badge } from \"@/registry/bases/base/ui/badge\";\nimport { BadgeOverflow } from \"@/registry/bases/base/ui/badge-overflow\";\nimport { Button } from \"@/registry/bases/base/ui/button\";\nimport { Input } from \"@/registry/bases/base/ui/input\";\n\ninterface Tag {\n label: string;\n value: string;\n}\n\nexport default function BadgeOverflowInteractiveDemo() {\n const [tags, setTags] = React.useState([\n { label: \"React\", value: \"react\" },\n { label: \"TypeScript\", value: \"typescript\" },\n { label: \"Next.js\", value: \"nextjs\" },\n { label: \"Tailwind CSS\", value: \"tailwindcss\" },\n { label: \"Shadcn UI\", value: \"shadcn-ui\" },\n { label: \"Radix UI\", value: \"radix-ui\" },\n { label: \"Zustand\", value: \"zustand\" },\n { label: \"React Query\", value: \"react-query\" },\n { label: \"Prisma\", value: \"prisma\" },\n { label: \"PostgreSQL\", value: \"postgresql\" },\n { label: \"MySQL\", value: \"mysql\" },\n { label: \"MongoDB\", value: \"mongodb\" },\n ]);\n const [input, setInput] = React.useState(\"\");\n\n const onInputChange = React.useCallback(\n (event: React.ChangeEvent) => {\n setInput(event.target.value);\n },\n [],\n );\n\n const onTagAdd = React.useCallback(() => {\n if (input.trim()) {\n setTags([\n ...tags,\n {\n label: input.trim(),\n value: input.trim(),\n },\n ]);\n setInput(\"\");\n }\n }, [input, tags]);\n\n const onTagRemove = React.useCallback(\n (value: string) => {\n setTags(tags.filter((tag) => tag.value !== value));\n },\n [tags],\n );\n\n const onKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n onTagAdd();\n }\n },\n [onTagAdd],\n );\n\n return (\n
\n
\n

Tags with Overflow

\n
\n tag.label}\n lineCount={2}\n renderBadge={(tag, label) => (\n onTagRemove(tag.value)}\n >\n {label}\n \n \n )}\n renderOverflow={(count) => (\n \n +{count} more\n \n )}\n />\n
\n
\n
\n \n \n
\n
\n

Click on a badge to remove it.

\n

Resize the container to see overflow behavior.

\n
\n
\n );\n}\n", "target": "" } ] }