UNPKG

ivt

Version:

Ivt Components Library

1 lines 31.3 kB
{"version":3,"file":"multi-select-ILUAJeKL.mjs","sources":["../../src/components/ui/multi-select/multi-select.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { CheckIcon, ChevronsUpDownIcon, WandSparkles, XIcon } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Badge, type BadgeVariants } from \"@/components/ui/badge\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n\tCommand,\n\tCommandEmpty,\n\tCommandGroup,\n\tCommandInput,\n\tCommandItem,\n\tCommandList,\n\tCommandSeparator,\n} from \"@/components/ui/command\";\nimport { Label } from \"@/components/ui/label\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"@/components/ui/popover\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"@/components/ui/tooltip\";\nimport { cn } from \"@/lib/utils\";\nimport { removeSpecialCharacters } from \"@/utils/string\";\n\n/**\n * Variants for the multi-select component to handle different styles.\n * Uses class-variance-authority (cva) to define different styles based on \"variant\" prop.\n */\nconst multiSelectVariants = cva(\"m-1 transition ease-in-out delay-150 duration-300\", {\n\tvariants: {\n\t\tvariant: {\n\t\t\tdefault: \"border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80\",\n\t\t\tsecondary: \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n\t\t\tdestructive:\n\t\t\t\t\"border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80\",\n\t\t\tpositive:\n\t\t\t\t\"border-transparent bg-positive text-positive-foreground shadow hover:bg-positive/80\",\n\t\t\twarning: \"border-transparent bg-warning text-warning-foreground shadow hover:bg-warning/80\",\n\t\t\tinfo: \"border-transparent bg-info text-info-foreground shadow hover:bg-info/80\",\n\t\t\toutline: \"text-foreground bg-transparent hover:bg-transparent border\",\n\t\t},\n\t\tsubtle: {\n\t\t\ttrue: \"\",\n\t\t\tfalse: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"default\",\n\t},\n});\n\n/**\n * Props for MultiSelect component\n */\ninterface MultiSelectProps\n\textends React.ButtonHTMLAttributes<HTMLButtonElement>,\n\t\tVariantProps<typeof multiSelectVariants> {\n\t/**\n\t * An array of option objects to be displayed in the multi-select component.\n\t * Each option object has a label, value, and an optional icon.\n\t */\n\toptions: {\n\t\t/** The text to display for the option. */\n\t\tlabel: string;\n\t\t/** The unique value associated with the option. */\n\t\tvalue: string;\n\t\t/** Optional icon component to display alongside the option. */\n\t\ticon?: React.ComponentType<{ className?: string }>;\n\t}[];\n\n\t/**\n\t * Callback function triggered when the selected values change.\n\t * Receives an array of the new selected values.\n\t */\n\tonValueChange: (value: string[]) => void;\n\n\t/** The value of the input when controlled. */\n\tvalue?: string[];\n\n\t/** The default selected values when the component mounts. */\n\tdefaultValue?: string[];\n\n\t/**\n\t * Placeholder text to be displayed when no values are selected.\n\t * Optional, defaults to \"Select options\".\n\t */\n\tplaceholder?: string;\n\n\t/**\n\t * Animation duration in seconds for the visual effects (e.g., bouncing badges).\n\t * Optional, defaults to 0 (no animation).\n\t */\n\tanimation?: number;\n\n\t/**\n\t * Maximum number of items to display. Extra selected items will be summarized.\n\t * Optional, defaults to 3.\n\t */\n\tmaxCount?: number;\n\n\t/**\n\t * The modality of the popover. When set to true, interaction with outside elements\n\t * will be disabled and only popover content will be visible to screen readers.\n\t * Optional, defaults to false.\n\t */\n\tmodalPopover?: boolean;\n\n\t/**\n\t * If true, renders the multi-select component as a child of another component.\n\t * Optional, defaults to false.\n\t */\n\tasChild?: boolean;\n\n\t/**\n\t * Additional class names to apply custom styles to the multi-select component.\n\t * Optional, can be used to add custom styles.\n\t */\n\tclassName?: string;\n\tlabel?: string | React.ReactNode;\n\tdescription?: string;\n\tsubtle?: boolean;\n\tfocusOnSelect?: boolean;\n\tid?: string;\n\tmessageEmpty?: string;\n\tsearchPlaceholder?: string;\n\tgroupHeading?: string;\n\tnormalizeSearch?: boolean;\n}\n\nexport const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(\n\t(\n\t\t{\n\t\t\toptions,\n\t\t\tonValueChange,\n\t\t\tvariant,\n\t\t\tdefaultValue = [],\n\t\t\tplaceholder = \"Selecione um item...\",\n\t\t\tanimation = 0,\n\t\t\tmaxCount = 3,\n\t\t\tmodalPopover = false,\n\t\t\tasChild = false,\n\t\t\tclassName,\n\t\t\tlabel,\n\t\t\tdescription,\n\t\t\tsubtle = false,\n\t\t\tvalue: controlledValue,\n\t\t\tmessageEmpty = \"Nenhum resultado encontrado.\",\n\t\t\tsearchPlaceholder = \"Buscar...\",\n\t\t\tgroupHeading,\n\t\t\tnormalizeSearch = false,\n\t\t\tfocusOnSelect = true,\n\t\t\tid,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst inputRef = React.useRef<HTMLInputElement>(null);\n\t\tconst generatedId = React.useId();\n\t\tconst inputId = id || generatedId;\n\n\t\tconst [selectedValues, setSelectedValues] = React.useState<string[]>(\n\t\t\tcontrolledValue || defaultValue,\n\t\t);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (controlledValue) {\n\t\t\t\tsetSelectedValues(controlledValue);\n\t\t\t}\n\t\t}, [controlledValue]);\n\n\t\tconst [isPopoverOpen, setIsPopoverOpen] = React.useState(false);\n\t\tconst [isAnimating, setIsAnimating] = React.useState(false);\n\t\tconst [isShiftOn, setIsShiftOn] = React.useState(false);\n\t\tconst [inputValue, setInputValue] = React.useState(\"\");\n\n\t\tconst normalize = React.useCallback(\n\t\t\t(text: string) =>\n\t\t\t\tnormalizeSearch ? removeSpecialCharacters(text).toLowerCase() : text.toLowerCase(),\n\t\t\t[normalizeSearch],\n\t\t);\n\n\t\tconst filteredOptions = React.useMemo(() => {\n\t\t\tconst normalizedSearch = normalize(inputValue);\n\n\t\t\treturn options.filter((option) => normalize(option.label).includes(normalizedSearch));\n\t\t}, [options, inputValue, normalize]);\n\n\t\tconst handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\t\tif (event.key === \"Enter\") {\n\t\t\t\tsetIsPopoverOpen(true);\n\t\t\t}\n\t\t};\n\n\t\tconst toggleOption = (option: string) => {\n\t\t\tconst newSelectedValues = selectedValues.includes(option)\n\t\t\t\t? selectedValues.filter((value) => value !== option)\n\t\t\t\t: [...selectedValues, option];\n\t\t\tsetSelectedValues(newSelectedValues);\n\t\t\tonValueChange(newSelectedValues);\n\t\t};\n\n\t\tconst toggleInterval = (index: number) => {\n\t\t\tif (selectedValues.length < 1) return;\n\n\t\t\tconst lastIndex = options.findIndex((o) => o.value === selectedValues.at(-1));\n\t\t\tconst start = Math.min(lastIndex, index);\n\t\t\tconst end = Math.max(lastIndex, index) + 1;\n\t\t\tconst rangeValues = options.slice(start, end).map((o) => o.value);\n\t\t\tconst areAllSelected = rangeValues.every((v) => selectedValues.includes(v));\n\t\t\tconst newSelectedValues = areAllSelected\n\t\t\t\t? selectedValues.filter((v) => !rangeValues.includes(v))\n\t\t\t\t: [...new Set([...selectedValues, ...rangeValues])];\n\t\t\tsetSelectedValues(newSelectedValues);\n\t\t\tonValueChange(newSelectedValues);\n\t\t};\n\n\t\tconst handleClear = () => {\n\t\t\tsetSelectedValues([]);\n\t\t\tonValueChange([]);\n\t\t};\n\n\t\tconst handleTogglePopover = () => {\n\t\t\tsetIsPopoverOpen((prev) => !prev);\n\t\t};\n\n\t\tconst clearExtraOptions = () => {\n\t\t\tconst newSelectedValues = selectedValues.slice(0, maxCount);\n\t\t\tsetSelectedValues(newSelectedValues);\n\t\t\tonValueChange(newSelectedValues);\n\t\t};\n\n\t\tconst toggleAll = () => {\n\t\t\tif (selectedValues.length === options.length) {\n\t\t\t\thandleClear();\n\t\t\t} else {\n\t\t\t\tconst allValues = options.map((option) => option.value);\n\t\t\t\tsetSelectedValues(allValues);\n\t\t\t\tonValueChange(allValues);\n\t\t\t}\n\t\t};\n\n\t\tconst subtleStyles = (variant: BadgeVariants) => {\n\t\t\tif (variant === \"default\") {\n\t\t\t\treturn \"border-transparent bg-accent text-primary hover:bg-accent/80\";\n\t\t\t}\n\t\t\tif (variant === \"destructive\") {\n\t\t\t\treturn \"border-transparent bg-destructive-foreground text-destructive hover:bg-destructive-foreground/80\";\n\t\t\t}\n\t\t\tif (variant === \"positive\") {\n\t\t\t\treturn \"border-transparent bg-positive-foreground text-positive hover:bg-positive-foreground/80\";\n\t\t\t}\n\t\t\tif (variant === \"warning\") {\n\t\t\t\treturn \"border-transparent bg-warning-foreground text-warning hover:bg-warning-foreground/80\";\n\t\t\t}\n\t\t\tif (variant === \"info\") {\n\t\t\t\treturn \"border-transparent bg-info-foreground text-info hover:bg-info-foreground/80\";\n\t\t\t}\n\n\t\t\treturn \"\";\n\t\t};\n\n\t\tconst finalSubtleStyles = subtleStyles(variant);\n\n\t\treturn (\n\t\t\t<div className=\"font-lato space-y-2\">\n\t\t\t\t{label && (\n\t\t\t\t\t<Label htmlFor={inputId} className=\"text-foreground text-sm font-medium gap-0\">\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</Label>\n\t\t\t\t)}\n\n\t\t\t\t<Popover open={isPopoverOpen} onOpenChange={setIsPopoverOpen} modal={modalPopover}>\n\t\t\t\t\t<PopoverTrigger asChild>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tonClick={handleTogglePopover}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\taria-expanded={isPopoverOpen}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex h-auto min-h-9 w-full items-center justify-between rounded-md border bg-inherit px-3 py-2 hover:bg-inherit [&_svg]:pointer-events-auto\",\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{selectedValues.length > 0 ? (\n\t\t\t\t\t\t\t\t<div className=\"flex w-full items-center justify-between\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex flex-wrap items-center\">\n\t\t\t\t\t\t\t\t\t\t{selectedValues.slice(0, maxCount).map((value) => {\n\t\t\t\t\t\t\t\t\t\t\tconst option = options.find((o) => o.value === value);\n\t\t\t\t\t\t\t\t\t\t\tconst IconComponent = option?.icon;\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"px-1\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tisAnimating ? \"animate-bounce\" : \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmultiSelectVariants({ variant }),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsubtle && finalSubtleStyles,\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ animationDuration: `${animation}s` }}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{IconComponent && <IconComponent className=\"mr-2 h-4 w-4\" />}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{option?.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/* biome-ignore lint/a11y/useKeyWithClickEvents: clear button action */}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/* biome-ignore lint/a11y/noStaticElementInteractions: clear button action */}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleOption(value);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<XIcon className=\"ml-2 size-3\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t{selectedValues.length > maxCount && (\n\t\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-foreground border-foreground/1 bg-transparent px-1 hover:bg-transparent\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tisAnimating ? \"animate-bounce\" : \"\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tmultiSelectVariants({ variant }),\n\t\t\t\t\t\t\t\t\t\t\t\t\tsubtle && finalSubtleStyles,\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{ animationDuration: `${animation}s` }}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{`+ ${selectedValues.length - maxCount} itens`}\n\t\t\t\t\t\t\t\t\t\t\t\t{/* biome-ignore lint/a11y/useKeyWithClickEvents: clear button action */}\n\t\t\t\t\t\t\t\t\t\t\t\t{/* biome-ignore lint/a11y/noStaticElementInteractions: clear button action */}\n\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclearExtraOptions();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<XIcon className=\"ml-2 size-3\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t\t\t\t\t\t<TooltipProvider>\n\t\t\t\t\t\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t<TooltipTrigger>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/* biome-ignore lint/a11y/useKeyWithClickEvents: clear button action */}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/* biome-ignore lint/a11y/noStaticElementInteractions: clear button action */}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleClear();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"cursor-pointer\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<XIcon className=\"text-muted-foreground h-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</TooltipTrigger>\n\t\t\t\t\t\t\t\t\t\t\t\t<TooltipContent>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"text-xs\">Limpar tudo</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</TooltipContent>\n\t\t\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t\t\t</TooltipProvider>\n\n\t\t\t\t\t\t\t\t\t\t<Separator orientation=\"vertical\" className=\"flex h-full min-h-6\" />\n\t\t\t\t\t\t\t\t\t\t<ChevronsUpDownIcon className=\"text-muted-foreground h-4 cursor-pointer\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<div className=\"flex w-full items-center justify-between\">\n\t\t\t\t\t\t\t\t\t<span className=\"text-muted-foreground\">{placeholder}</span>\n\t\t\t\t\t\t\t\t\t<ChevronsUpDownIcon className=\"text-muted-foreground h-4 cursor-pointer\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</PopoverTrigger>\n\t\t\t\t\t<PopoverContent\n\t\t\t\t\t\tclassName=\"w-auto p-0\"\n\t\t\t\t\t\talign=\"start\"\n\t\t\t\t\t\tonEscapeKeyDown={() => setIsPopoverOpen(false)}\n\t\t\t\t\t\tonKeyDown={(event) => {\n\t\t\t\t\t\t\tevent.key === \"Shift\" ? setIsShiftOn(true) : null;\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonKeyUp={(event) => {\n\t\t\t\t\t\t\tevent.key === \"Shift\" ? setIsShiftOn(false) : null;\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Command shouldFilter={false}>\n\t\t\t\t\t\t\t<CommandInput\n\t\t\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\t\t\tonValueChange={setInputValue}\n\t\t\t\t\t\t\t\tonKeyDown={handleInputKeyDown}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<CommandList>\n\t\t\t\t\t\t\t\t{filteredOptions.length === 0 ? (\n\t\t\t\t\t\t\t\t\t<CommandEmpty>{messageEmpty}</CommandEmpty>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<CommandGroup heading={groupHeading}>\n\t\t\t\t\t\t\t\t\t\t<CommandItem\n\t\t\t\t\t\t\t\t\t\t\tkey=\"all\"\n\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\ttoggleAll();\n\t\t\t\t\t\t\t\t\t\t\t\tif (focusOnSelect) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tinputRef.current?.focus();\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"flex cursor-pointer items-center justify-between\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span>(Selecionar tudo)</span>\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedValues.length === options.length\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: \"opacity-50 [&_svg]:invisible\",\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<CheckIcon className=\"text-foreground h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t</CommandItem>\n\t\t\t\t\t\t\t\t\t\t{filteredOptions.map((option) => {\n\t\t\t\t\t\t\t\t\t\t\tconst isSelected = selectedValues.includes(option.value);\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<CommandItem\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={option.value}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (isShiftOn) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst originalIndex = options.findIndex(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(o) => o.value === option.value,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleInterval(originalIndex);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleOption(option.value);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (focusOnSelect) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinputRef.current?.focus();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"flex cursor-pointer items-center justify-between\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{option.icon && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<option.icon className=\"text-muted-foreground mr-2 h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{option.label}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div className={cn(isSelected ? \"\" : \"opacity-50 [&_svg]:invisible\")}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CheckIcon className=\"text-foreground h-4 w-4\" />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t</CommandItem>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t</CommandGroup>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<CommandSeparator />\n\t\t\t\t\t\t\t</CommandList>\n\t\t\t\t\t\t</Command>\n\t\t\t\t\t</PopoverContent>\n\t\t\t\t\t{animation > 0 && selectedValues.length > 0 && (\n\t\t\t\t\t\t<WandSparkles\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"text-foreground bg-background my-2 h-3 w-3 cursor-pointer\",\n\t\t\t\t\t\t\t\tisAnimating ? \"\" : \"text-muted-foreground\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tonClick={() => setIsAnimating(!isAnimating)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</Popover>\n\n\t\t\t\t{description && <p className=\"text-muted-foreground text-sm\">{description}</p>}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nMultiSelect.displayName = \"MultiSelect\";\n"],"names":["multiSelectVariants","cva","variants","variant","default","secondary","destructive","positive","warning","info","outline","subtle","true","false","defaultVariants","MultiSelect","React","forwardRef","options","onValueChange","defaultValue","placeholder","animation","maxCount","modalPopover","asChild","className","label","description","value","controlledValue","messageEmpty","searchPlaceholder","groupHeading","normalizeSearch","focusOnSelect","id","props","ref","inputRef","useRef","generatedId","useId","inputId","selectedValues","setSelectedValues","useState","useEffect","isPopoverOpen","setIsPopoverOpen","isAnimating","setIsAnimating","isShiftOn","setIsShiftOn","inputValue","setInputValue","normalize","useCallback","text","removeSpecialCharacters","toLowerCase","filteredOptions","useMemo","normalizedSearch","filter","option","includes","handleInputKeyDown","event","key","toggleOption","newSelectedValues","toggleInterval","index","length","lastIndex","findIndex","o","at","start","Math","min","end","max","rangeValues","slice","map","areAllSelected","every","v","Set","handleClear","handleTogglePopover","prev","clearExtraOptions","toggleAll","allValues","subtleStyles","finalSubtleStyles","div","Label","htmlFor","Popover","open","onOpenChange","modal","PopoverTrigger","Button","onClick","aria-expanded","cn","find","IconComponent","icon","Badge","style","animationDuration","stopPropagation","XIcon","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","span","Separator","orientation","ChevronsUpDownIcon","PopoverContent","align","onEscapeKeyDown","onKeyDown","onKeyUp","Command","shouldFilter","CommandInput","CommandList","CommandEmpty","CommandGroup","heading","CommandItem","onSelect","current","focus","CheckIcon","isSelected","originalIndex","CommandSeparator","WandSparkles","p","displayName"],"mappings":"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"}