
Tags trigger pre-populated with multiple TagsValue badges on initial load.
@shadcnblocks
example/tags/tags-composition-1.tsx
"use client";
import { Check } from "lucide-react";
import { useState } from "react";
import { cn } from "cn";
import {
Tags,
TagsContent,
TagsGroup,
TagsInput,
TagsItem,
TagsList,
TagsTrigger,
TagsValue,
} from "@/components/kibo-ui/tags";
export const title = "Pre-selected tags";
const tags = [
{ value: "urgent", label: "Urgent" },
{ value: "review", label: "Needs review" },
{ value: "approved", label: "Approved" },
{ value: "archived", label: "Archived" },
];
const Example = () => {
const [selected, setSelected] = useState<string[]>(["urgent", "review"]);
const toggle = (value: string) => {
setSelected((current) =>
current.includes(value)
? current.filter((item) => item !== value)
: [...current, value],
);
};
const remove = (value: string) => {
setSelected((current) => current.filter((item) => item !== value));
};
return (
<div className="w-full max-w-lg">
<Tags>
<TagsTrigger>
{selected.map((value) => {
const tag = tags.find((item) => item.value === value);
return (
<TagsValue key={value} onRemove={() => remove(value)}>
{tag?.label ?? value}
</TagsValue>
);
})}
</TagsTrigger>
<TagsContent>
<TagsInput placeholder="Add or remove tags..." />
<TagsList>
<TagsGroup heading="Status">
{tags.map((tag) => (
<TagsItem
key={tag.value}
value={tag.value}
onSelect={() => toggle(tag.value)}
>
<Check
className={cn(
"size-4",
selected.includes(tag.value)
? "opacity-100"
: "opacity-0",
)}
/>
{tag.label}
</TagsItem>
))}
</TagsGroup>
</TagsList>
</TagsContent>
</Tags>
</div>
);
};
export default Example;






























