import {
Select,
SelectTrigger,
SelectValue,
SelectIcon,
SelectPopup,
SelectList,
SelectItem,
SelectItemText,
SelectItemIndicator,
} from "@/registry/pure-ui/ui/select";
const languages = {
javascript: "JavaScript",
typescript: "TypeScript",
python: "Python",
java: "Java",
csharp: "C#",
php: "PHP",
cpp: "C++",
rust: "Rust",
go: "Go",
swift: "Swift",
};
type Language = keyof typeof languages;
const values = Object.keys(languages) as Language[];
function renderValue(value: Language[]) {
if (value.length === 0) {
return "Select languages...";
}
const firstLanguage = languages[value[0]];
const additionalLanguages =
value.length > 1 ? ` (+${value.length - 1} more)` : "";
return firstLanguage + additionalLanguages;
}
export function SelectMultipleSelectionDemo() {
return (
<Select multiple defaultValue={["javascript", "typescript"]}>
<SelectTrigger className="min-w-66 h-fit">
<SelectValue>{renderValue}</SelectValue>
<SelectIcon className="flex items-center self-center">
<ChevronUpDownIcon />
</SelectIcon>
</SelectTrigger>
<SelectPopup>
<SelectList>
{values.map((value) => {
return (
<SelectItem key={value} value={value}>
<SelectItemText className="col-start-2 flex flex-col items-start gap-0.5">
<span className="text-sm leading-6">{languages[value]}</span>
</SelectItemText>
<SelectItemIndicator className="col-start-1 flex items-center self-start relative top-[0.4em]">
<CheckIcon className="size-3" />
</SelectItemIndicator>
</SelectItem>
);
})}
</SelectList>
</SelectPopup>
</Select>
);
}
function ChevronUpDownIcon(props: React.ComponentProps<"svg">) {
return (
<svg
width="8"
height="12"
viewBox="0 0 8 12"
fill="none"
stroke="currentcolor"
strokeWidth="1.5"
{...props}
>
<path d="M0.5 4.5L4 1.5L7.5 4.5" />
<path d="M0.5 7.5L4 10.5L7.5 7.5" />
</svg>
);
}
function CheckIcon(props: React.ComponentProps<"svg">) {
return (
<svg
fill="currentcolor"
width="10"
height="10"
viewBox="0 0 10 10"
{...props}
>
<path d="M9.1603 1.12218C9.50684 1.34873 9.60427 1.81354 9.37792 2.16038L5.13603 8.66012C5.01614 8.8438 4.82192 8.96576 4.60451 8.99384C4.3871 9.02194 4.1683 8.95335 4.00574 8.80615L1.24664 6.30769C0.939709 6.02975 0.916013 5.55541 1.19372 5.24822C1.47142 4.94102 1.94536 4.91731 2.2523 5.19524L4.36085 7.10461L8.12299 1.33999C8.34934 0.993152 8.81376 0.895638 9.1603 1.12218Z" />
</svg>
);
}