UNPKG

ivt

Version:

Ivt Components Library

1 lines 36.6 kB
{"version":3,"file":"index.mjs","sources":["../../src/components/ui/auto-complete-multi-select/AutoCompleteMultiSelect.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { CheckIcon, ChevronsUpDown, WandSparkles, XIcon } from \"lucide-react\";\nimport * as React from \"react\";\nimport { useDebouncedCallback } from \"use-debounce\";\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\";\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\nexport interface Option {\n\t/** The text to display for the option. */\n\tlabel: string;\n\t/** The unique value associated with the option. */\n\tvalue: string;\n\t/** Optional icon component to display alongside the option. */\n\ticon?: React.ComponentType<{ className?: string }>;\n}\n\n/**\n * Props for AutoCompleteMultiSelectIVT component\n */\ninterface AutoCompleteMultiSelectProps extends VariantProps<typeof multiSelectVariants> {\n\t/**\n\t * An array of currently selected option objects.\n\t * Each option object has a label, value, and an optional icon.\n\t * Optional, defaults to empty array.\n\t */\n\tselectedOptions?: Option[];\n\n\t/**\n\t * Callback function triggered when the selected values change.\n\t * Receives an array of the new selected option objects.\n\t */\n\tonChange: (options: Option[]) => void;\n\n\t/**\n\t * Async function to fetch options based on search term.\n\t * Returns a promise with an array of option objects.\n\t */\n\tfetchOptions: (term: string) => Promise<Option[]>;\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 * Placeholder text for the search input.\n\t * Optional, defaults to \"Buscar...\".\n\t */\n\tsearchPlaceholder?: string;\n\n\t/**\n\t * Message to be displayed when no results are found.\n\t * Optional, defaults to \"Nenhum item encontrado.\".\n\t */\n\tmessageEmpty?: 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 * 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\n\t/**\n\t * Label for the component.\n\t */\n\tlabel?: string | React.ReactNode;\n\n\t/**\n\t * Description text displayed below the component.\n\t */\n\tdescription?: string;\n\n\t/**\n\t * Whether to use subtle variant styling.\n\t */\n\tsubtle?: boolean;\n\n\t/**\n\t * Whether to focus on select actions.\n\t * Optional, defaults to true.\n\t */\n\tfocusOnSelect?: boolean;\n\n\t/**\n\t * Unique identifier for the component.\n\t */\n\tid?: string;\n\n\t/**\n\t * Callback function triggered when there's an error fetching options.\n\t */\n\tonError?: (error: unknown) => void;\n}\n\nexport const AutoCompleteMultiSelect = React.forwardRef<\n\tHTMLButtonElement,\n\tAutoCompleteMultiSelectProps\n>(\n\t(\n\t\t{\n\t\t\tselectedOptions = [],\n\t\t\tonChange,\n\t\t\tfetchOptions,\n\t\t\tvariant,\n\t\t\tplaceholder = \"Select options\",\n\t\t\tsearchPlaceholder = \"Buscar...\",\n\t\t\tmessageEmpty = \"Nenhum resultado encontrado.\",\n\t\t\tanimation = 0,\n\t\t\tmaxCount = 3,\n\t\t\tmodalPopover = false,\n\t\t\tclassName,\n\t\t\tlabel,\n\t\t\tdescription,\n\t\t\tsubtle = false,\n\t\t\tfocusOnSelect = true,\n\t\t\tid,\n\t\t\tonError,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst inputRef = React.useRef<HTMLInputElement>(null);\n\t\tconst lastClickedIndexRef = React.useRef<number>(-1);\n\t\tconst isShiftPressedRef = React.useRef<boolean>(false);\n\t\tconst generatedId = React.useId();\n\t\tconst inputId = id || generatedId;\n\n\t\t// Estado interno para resposta imediata\n\t\tconst [internalSelected, setInternalSelected] =\n\t\t\tReact.useState<typeof selectedOptions>(selectedOptions);\n\t\tconst [isPopoverOpen, setIsPopoverOpen] = React.useState(false);\n\t\tconst [isAnimating, setIsAnimating] = React.useState(false);\n\t\tconst [inputValue, setInputValue] = React.useState(\"\");\n\t\tconst [options, setOptions] = React.useState<typeof selectedOptions>([]);\n\t\tconst [loading, setLoading] = React.useState(false);\n\n\t\t// Sincroniza estado interno quando selectedOptions muda (do pai)\n\t\tReact.useEffect(() => {\n\t\t\tsetInternalSelected(selectedOptions);\n\t\t}, [selectedOptions]);\n\n\t\t// Listener global para detectar Shift\n\t\tReact.useEffect(() => {\n\t\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\t\tif (e.key === \"Shift\") {\n\t\t\t\t\tisShiftPressedRef.current = true;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst handleKeyUp = (e: KeyboardEvent) => {\n\t\t\t\tif (e.key === \"Shift\") {\n\t\t\t\t\tisShiftPressedRef.current = false;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\twindow.addEventListener(\"keydown\", handleKeyDown);\n\t\t\twindow.addEventListener(\"keyup\", handleKeyUp);\n\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"keydown\", handleKeyDown);\n\t\t\t\twindow.removeEventListener(\"keyup\", handleKeyUp);\n\t\t\t};\n\t\t}, []);\n\n\t\t// Busca assíncrona com debounce (do AutoComplete)\n\t\tconst debouncedFetch = useDebouncedCallback(async (term: string) => {\n\t\t\tif (!term.trim()) {\n\t\t\t\tsetOptions([]);\n\t\t\t\tsetLoading(false);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetLoading(true);\n\t\t\ttry {\n\t\t\t\tconst result = await fetchOptions(term);\n\t\t\t\tsetOptions(result);\n\t\t\t} catch (err) {\n\t\t\t\tif (onError) {\n\t\t\t\t\tonError(err);\n\t\t\t\t}\n\t\t\t\tsetOptions([]);\n\t\t\t} finally {\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t}, 500);\n\n\t\tconst handleInputChange = (value: string) => {\n\t\t\tsetInputValue(value);\n\t\t\tif (value.trim() === \"\") {\n\t\t\t\tsetOptions([]);\n\t\t\t\tsetLoading(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetLoading(true);\n\t\t\tdebouncedFetch(value);\n\t\t};\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: (typeof internalSelected)[number], index: number) => {\n\t\t\t// Normaliza para string para comparação\n\t\t\tconst optionValueStr = String(option.value);\n\t\t\tconst isSelected = internalSelected.find((o) => String(o.value) === optionValueStr);\n\t\t\tconst newSelectedOptions = isSelected\n\t\t\t\t? internalSelected.filter((value) => String(value.value) !== optionValueStr)\n\t\t\t\t: [...internalSelected, option];\n\n\t\t\t// Atualiza estado interno IMEDIATAMENTE\n\t\t\tsetInternalSelected(newSelectedOptions);\n\n\t\t\t// Notifica o pai\n\t\t\tonChange(newSelectedOptions);\n\n\t\t\t// Armazena o índice do último clique\n\t\t\tlastClickedIndexRef.current = index;\n\t\t};\n\n\t\tconst removeOption = (option: (typeof internalSelected)[number]) => {\n\t\t\t// Normaliza para string para comparação\n\t\t\tconst optionValueStr = String(option.value);\n\t\t\tconst newSelectedOptions = internalSelected.filter(\n\t\t\t\t(value) => String(value.value) !== optionValueStr,\n\t\t\t);\n\t\t\tsetInternalSelected(newSelectedOptions);\n\t\t\tonChange(newSelectedOptions);\n\t\t};\n\n\t\tconst toggleInterval = (index: number) => {\n\t\t\t// Se não houver último clique registrado, apenas seleciona o item atual\n\t\t\tif (lastClickedIndexRef.current === -1 || internalSelected.length < 1) {\n\t\t\t\ttoggleOption(options[index], index);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst lastIndex = lastClickedIndexRef.current;\n\t\t\tconst start = Math.min(lastIndex, index);\n\t\t\tconst end = Math.max(lastIndex, index) + 1;\n\t\t\tconst rangeOptions = options.slice(start, end);\n\t\t\tconst rangeValuesStr = rangeOptions.map((o) => String(o.value));\n\n\t\t\tconst areAllSelected = rangeValuesStr.every((v) =>\n\t\t\t\tinternalSelected.some((opt) => String(opt.value) === v),\n\t\t\t);\n\n\t\t\tif (areAllSelected) {\n\t\t\t\t// Desselecionar todos os itens do intervalo\n\t\t\t\tconst newSelectedOptions = internalSelected.filter(\n\t\t\t\t\t(v) => !rangeValuesStr.includes(String(v.value)),\n\t\t\t\t);\n\t\t\t\tsetInternalSelected(newSelectedOptions);\n\t\t\t\tonChange(newSelectedOptions);\n\t\t\t} else {\n\t\t\t\t// Adicionar todos os itens do intervalo sem duplicados\n\t\t\t\tconst existingValuesStr = new Set(internalSelected.map((opt) => String(opt.value)));\n\t\t\t\tconst newOptions = rangeOptions.filter((opt) => !existingValuesStr.has(String(opt.value)));\n\t\t\t\tconst newSelectedOptions = [...internalSelected, ...newOptions];\n\t\t\t\tsetInternalSelected(newSelectedOptions);\n\t\t\t\tonChange(newSelectedOptions);\n\t\t\t}\n\n\t\t\t// Atualiza o último índice clicado\n\t\t\tlastClickedIndexRef.current = index;\n\t\t};\n\n\t\tconst handleClear = () => {\n\t\t\tsetInternalSelected([]);\n\t\t\tonChange([]);\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 newSelectedOptions = internalSelected.slice(0, maxCount);\n\t\t\tsetInternalSelected(newSelectedOptions);\n\t\t\tonChange(newSelectedOptions);\n\t\t};\n\n\t\tconst toggleAll = () => {\n\t\t\tif (internalSelected.length === options.length) {\n\t\t\t\thandleClear();\n\t\t\t} else {\n\t\t\t\tsetInternalSelected(options);\n\t\t\t\tonChange(options);\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\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\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\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-4 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{internalSelected.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{internalSelected.slice(0, maxCount).map((value) => {\n\t\t\t\t\t\t\t\t\t\t\tconst option = 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.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<XIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"ml-2 size-3 cursor-pointer\"\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\tremoveOption(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/>\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{internalSelected.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{`+ ${internalSelected.length - maxCount} itens`}\n\t\t\t\t\t\t\t\t\t\t\t\t<XIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"ml-2 size-3 cursor-pointer\"\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/>\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 gap-1\">\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<XIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"text-muted-foreground h-4 cursor-pointer\"\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/>\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\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<ChevronsUpDown 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<ChevronsUpDown 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\tonOpenAutoFocus={(e) => {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t// Foca no input sem causar scroll\n\t\t\t\t\t\t\tinputRef.current?.focus({ preventScroll: true });\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={handleInputChange}\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<CommandEmpty>\n\t\t\t\t\t\t\t\t\t{loading\n\t\t\t\t\t\t\t\t\t\t? \"Carregando...\"\n\t\t\t\t\t\t\t\t\t\t: inputValue.trim() === \"\"\n\t\t\t\t\t\t\t\t\t\t\t? \"Digite algo para buscar...\"\n\t\t\t\t\t\t\t\t\t\t\t: messageEmpty}\n\t\t\t\t\t\t\t\t</CommandEmpty>\n\t\t\t\t\t\t\t\t{options.length > 0 && (\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t<CommandGroup>\n\t\t\t\t\t\t\t\t\t\t\t<CommandItem\n\t\t\t\t\t\t\t\t\t\t\t\tkey=\"all\"\n\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\ttoggleAll();\n\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\tinputRef.current?.focus({ preventScroll: true });\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}}\n\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>\n\t\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\t<div\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\tinternalSelected.length === options.length\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\t: \"opacity-50 [&_svg]:invisible\",\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>\n\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</div>\n\t\t\t\t\t\t\t\t\t\t\t</CommandItem>\n\t\t\t\t\t\t\t\t\t\t\t{options.map((option, index) => {\n\t\t\t\t\t\t\t\t\t\t\t\t// Comparação convertendo AMBOS para string\n\t\t\t\t\t\t\t\t\t\t\t\tconst optionValueStr = String(option.value);\n\t\t\t\t\t\t\t\t\t\t\t\tconst isSelected = internalSelected.some(\n\t\t\t\t\t\t\t\t\t\t\t\t\t(opt) => String(opt.value) === optionValueStr,\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\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\t\tkey={`${option.value}-${isSelected}`}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={option.value}\n\t\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\t\t// Usa o ref que é atualizado pelos event listeners globais\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconst isShiftPressed = isShiftPressedRef.current;\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (isShiftPressed) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttoggleInterval(index);\n\t\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\t\ttoggleOption(option, index);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\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\t\t// Foca sem causar scroll\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinputRef.current?.focus({ preventScroll: true });\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}}\n\t\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\t>\n\t\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\t{option.icon && (\n\t\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\t)}\n\t\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\t</div>\n\t\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\t<CheckIcon className=\"text-foreground h-4 w-4\" />\n\t\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</CommandItem>\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</CommandGroup>\n\t\t\t\t\t\t\t\t\t\t<CommandSeparator />\n\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t)}\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 && internalSelected.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\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\nAutoCompleteMultiSelect.displayName = \"AutoCompleteMultiSelect\";\n"],"names":["multiSelectVariants","cva","variants","variant","default","secondary","destructive","positive","warning","info","outline","subtle","true","false","defaultVariants","AutoCompleteMultiSelect","React","forwardRef","selectedOptions","onChange","fetchOptions","placeholder","searchPlaceholder","messageEmpty","animation","maxCount","modalPopover","className","label","description","focusOnSelect","id","onError","ref","inputRef","useRef","lastClickedIndexRef","isShiftPressedRef","generatedId","useId","inputId","internalSelected","setInternalSelected","useState","isPopoverOpen","setIsPopoverOpen","isAnimating","setIsAnimating","inputValue","setInputValue","options","setOptions","loading","setLoading","useEffect","handleKeyDown","e","key","current","handleKeyUp","window","addEventListener","removeEventListener","debouncedFetch","useDebouncedCallback","term","trim","result","err","handleInputChange","value","handleInputKeyDown","event","toggleOption","option","index","optionValueStr","String","isSelected","find","o","newSelectedOptions","filter","removeOption","toggleInterval","length","lastIndex","start","Math","min","end","max","rangeOptions","slice","rangeValuesStr","map","areAllSelected","every","v","some","opt","includes","existingValuesStr","Set","newOptions","has","handleClear","handleTogglePopover","prev","clearExtraOptions","toggleAll","subtleStyles","finalSubtleStyles","div","Label","htmlFor","Popover","open","onOpenChange","modal","PopoverTrigger","asChild","Button","onClick","aria-expanded","cn","IconComponent","icon","Badge","style","animationDuration","XIcon","stopPropagation","TooltipProvider","Tooltip","TooltipTrigger","TooltipContent","span","Separator","orientation","ChevronsUpDown","PopoverContent","align","onEscapeKeyDown","onOpenAutoFocus","preventDefault","focus","preventScroll","Command","shouldFilter","CommandInput","onValueChange","onKeyDown","CommandList","CommandEmpty","CommandGroup","CommandItem","onSelect","CheckIcon","isShiftPressed","CommandSeparator","WandSparkles","p","displayName"],"mappings":"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"}