@arbidocs/blocks 0.4.26 → 0.4.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/README.md +17 -0
  2. package/dist/agents/index.cjs +224 -212
  3. package/dist/agents/index.js +6 -6
  4. package/dist/agents/tasks/TaskRowMenu.d.ts +4 -1
  5. package/dist/agents/tasks/TaskRunsDialog.d.ts +3 -1
  6. package/dist/agents/tasks/taskRows.d.ts +2 -0
  7. package/dist/agents/workflows/WorkflowDocumentsField.d.ts +12 -0
  8. package/dist/agents/workflows/index.d.ts +2 -0
  9. package/dist/agents/workflows/workspaceScope.d.ts +18 -0
  10. package/dist/chat/ChatPage.d.ts +1 -1
  11. package/dist/chat/chat-page-types.d.ts +12 -1
  12. package/dist/chat/index.cjs +180 -180
  13. package/dist/chat/index.js +5 -5
  14. package/dist/{chunk-CPJBU5XQ.js → chunk-3NZR6PAG.js} +8 -120
  15. package/dist/chunk-3NZR6PAG.js.map +1 -0
  16. package/dist/chunk-4XJZ6AAY.js +407 -0
  17. package/dist/chunk-4XJZ6AAY.js.map +1 -0
  18. package/dist/{chunk-UOLMFC5K.js → chunk-6YVI74BC.js} +498 -108
  19. package/dist/chunk-6YVI74BC.js.map +1 -0
  20. package/dist/{chunk-5LUI4G5R.js → chunk-BV7FEMSI.js} +3 -3
  21. package/dist/{chunk-5LUI4G5R.js.map → chunk-BV7FEMSI.js.map} +1 -1
  22. package/dist/{chunk-ZEIOREJY.js → chunk-EHXSBH6U.js} +37 -6
  23. package/dist/chunk-EHXSBH6U.js.map +1 -0
  24. package/dist/chunk-EYPPB5CY.cjs +85 -0
  25. package/dist/chunk-EYPPB5CY.cjs.map +1 -0
  26. package/dist/{chunk-LZ4O2JPP.cjs → chunk-FRRDPYBR.cjs} +8 -123
  27. package/dist/chunk-FRRDPYBR.cjs.map +1 -0
  28. package/dist/chunk-KF4EC5XU.js +68 -0
  29. package/dist/chunk-KF4EC5XU.js.map +1 -0
  30. package/dist/{chunk-DHMAJ5LC.cjs → chunk-NSZAHL23.cjs} +158 -39
  31. package/dist/chunk-NSZAHL23.cjs.map +1 -0
  32. package/dist/{chunk-MLI6MCIE.js → chunk-QMUI2MGT.js} +155 -39
  33. package/dist/chunk-QMUI2MGT.js.map +1 -0
  34. package/dist/chunk-S5HZBXZA.cjs +430 -0
  35. package/dist/chunk-S5HZBXZA.cjs.map +1 -0
  36. package/dist/{chunk-JCVZKCXC.cjs → chunk-TLQQV7WW.cjs} +37 -6
  37. package/dist/chunk-TLQQV7WW.cjs.map +1 -0
  38. package/dist/{chunk-NNH7N62N.cjs → chunk-VMCOH3AY.cjs} +497 -105
  39. package/dist/chunk-VMCOH3AY.cjs.map +1 -0
  40. package/dist/{chunk-JLPYOPCX.js → chunk-WSJVHSGN.js} +225 -36
  41. package/dist/chunk-WSJVHSGN.js.map +1 -0
  42. package/dist/{chunk-TO4FAMQP.cjs → chunk-XKSFJYOD.cjs} +3 -3
  43. package/dist/{chunk-TO4FAMQP.cjs.map → chunk-XKSFJYOD.cjs.map} +1 -1
  44. package/dist/{chunk-J22DXUJY.cjs → chunk-ZHLMDJCO.cjs} +226 -34
  45. package/dist/chunk-ZHLMDJCO.cjs.map +1 -0
  46. package/dist/connect/docx.cjs +26 -8
  47. package/dist/connect/docx.cjs.map +1 -1
  48. package/dist/connect/docx.d.ts +1 -0
  49. package/dist/connect/docx.js +24 -7
  50. package/dist/connect/docx.js.map +1 -1
  51. package/dist/connect/index.cjs +281 -39
  52. package/dist/connect/index.cjs.map +1 -1
  53. package/dist/connect/index.d.ts +4 -0
  54. package/dist/connect/index.js +261 -23
  55. package/dist/connect/index.js.map +1 -1
  56. package/dist/connection/ConnectedAgentChatPanel.d.ts +7 -0
  57. package/dist/connection/ConnectedNativeDocxEditor.d.ts +2 -1
  58. package/dist/connection/ConnectedSkillUpload.d.ts +2 -0
  59. package/dist/connection/ConnectedStreamedWordArtifact.d.ts +4 -0
  60. package/dist/connection/ConnectedTaskAccessRequest.d.ts +4 -0
  61. package/dist/connection/ai.d.ts +4 -1
  62. package/dist/connection/useConnectedWorkNotifications.d.ts +21 -0
  63. package/dist/docx/DocxMentions.d.ts +9 -2
  64. package/dist/docx/NativeDocxEditor.d.ts +11 -3
  65. package/dist/docx/StreamedWordArtifact.d.ts +15 -0
  66. package/dist/docx/index.cjs +16 -8
  67. package/dist/docx/index.d.ts +3 -2
  68. package/dist/docx/index.js +2 -2
  69. package/dist/docx/streamWordDocument.d.ts +12 -0
  70. package/dist/facts/index.cjs +2 -2
  71. package/dist/facts/index.js +2 -2
  72. package/dist/files/index.cjs +5 -5
  73. package/dist/files/index.js +5 -5
  74. package/dist/home/index.cjs +1 -1
  75. package/dist/home/index.js +1 -1
  76. package/dist/index.cjs +953 -941
  77. package/dist/index.js +20 -20
  78. package/dist/settings/index.cjs +44 -234
  79. package/dist/settings/index.cjs.map +1 -1
  80. package/dist/settings/index.js +8 -204
  81. package/dist/settings/index.js.map +1 -1
  82. package/dist/shell/index.cjs +26 -26
  83. package/dist/shell/index.js +4 -4
  84. package/dist/studio/index.cjs +7 -6
  85. package/dist/studio/index.cjs.map +1 -1
  86. package/dist/studio/index.js +5 -4
  87. package/dist/studio/index.js.map +1 -1
  88. package/dist/workspaces/index.cjs +1 -1
  89. package/dist/workspaces/index.js +1 -1
  90. package/package.json +3 -3
  91. package/src/docx/styles.css +13 -0
  92. package/dist/chunk-5TRALRWN.js +0 -42
  93. package/dist/chunk-5TRALRWN.js.map +0 -1
  94. package/dist/chunk-CPJBU5XQ.js.map +0 -1
  95. package/dist/chunk-CQCC7LE7.js +0 -210
  96. package/dist/chunk-CQCC7LE7.js.map +0 -1
  97. package/dist/chunk-DHMAJ5LC.cjs.map +0 -1
  98. package/dist/chunk-EUOGPUMJ.cjs +0 -59
  99. package/dist/chunk-EUOGPUMJ.cjs.map +0 -1
  100. package/dist/chunk-J22DXUJY.cjs.map +0 -1
  101. package/dist/chunk-JCVZKCXC.cjs.map +0 -1
  102. package/dist/chunk-JLPYOPCX.js.map +0 -1
  103. package/dist/chunk-LZ4O2JPP.cjs.map +0 -1
  104. package/dist/chunk-MLI6MCIE.js.map +0 -1
  105. package/dist/chunk-NNH7N62N.cjs.map +0 -1
  106. package/dist/chunk-RFIBUWLF.cjs +0 -232
  107. package/dist/chunk-RFIBUWLF.cjs.map +0 -1
  108. package/dist/chunk-UOLMFC5K.js.map +0 -1
  109. package/dist/chunk-ZEIOREJY.js.map +0 -1
@@ -1,210 +0,0 @@
1
- "use client";
2
- import * as React from 'react';
3
- import { ChevronDown, CheckIcon, WandSparkles } from 'lucide-react';
4
- import { Popover, PopoverTrigger, Button, cn, PopoverContent, Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandSeparator, Separator } from '@arbidocs/react/ui';
5
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
-
7
- // src/settings/MultiSelect.tsx
8
- var MultiSelect = React.forwardRef(
9
- ({
10
- data,
11
- value,
12
- onChange,
13
- searchValue,
14
- onSearchChange,
15
- placeholder = "Select options",
16
- searchable = false,
17
- clearable = false,
18
- size = "md",
19
- autoFocus = false,
20
- onDropdownOpen,
21
- onDropdownClose,
22
- renderOption,
23
- animation = 0,
24
- modalPopover = false,
25
- className,
26
- ...props
27
- }, ref) => {
28
- const [isPopoverOpen, setIsPopoverOpen] = React.useState(false);
29
- const [internalSearchValue, setInternalSearchValue] = React.useState("");
30
- const currentSearchValue = searchValue ?? internalSearchValue;
31
- React.useEffect(() => {
32
- if (isPopoverOpen && onDropdownOpen) {
33
- onDropdownOpen();
34
- } else if (!isPopoverOpen && onDropdownClose) {
35
- onDropdownClose();
36
- }
37
- }, [isPopoverOpen, onDropdownOpen, onDropdownClose]);
38
- React.useEffect(() => {
39
- if (autoFocus) {
40
- setIsPopoverOpen(true);
41
- }
42
- }, [autoFocus]);
43
- const handleSearchValueChange = (newValue) => {
44
- if (onSearchChange) {
45
- onSearchChange(newValue);
46
- } else {
47
- setInternalSearchValue(newValue);
48
- }
49
- };
50
- const getSizeClasses = () => {
51
- switch (size) {
52
- case "sm":
53
- return "min-h-8 text-sm";
54
- case "lg":
55
- return "min-h-12 text-base";
56
- default:
57
- return "min-h-10 text-sm";
58
- }
59
- };
60
- const handleInputKeyDown = (event) => {
61
- if (event.key === "Enter") {
62
- setIsPopoverOpen(true);
63
- } else if (event.key === "Backspace" && !event.currentTarget.value) {
64
- const newSelectedValues = [...value];
65
- newSelectedValues.pop();
66
- onChange(newSelectedValues);
67
- }
68
- };
69
- const toggleOption = (optionValue) => {
70
- const newSelectedValues = value.includes(optionValue) ? value.filter((v) => v !== optionValue) : [...value, optionValue];
71
- onChange(newSelectedValues);
72
- };
73
- const handleClear = () => {
74
- onChange([]);
75
- };
76
- const toggleAll = () => {
77
- if (value.length === data.length) {
78
- handleClear();
79
- } else {
80
- const allValues = data.map((option) => option.value);
81
- onChange(allValues);
82
- }
83
- };
84
- return /* @__PURE__ */ jsxs(Popover, { open: isPopoverOpen, onOpenChange: setIsPopoverOpen, modal: modalPopover, children: [
85
- /* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
86
- Button,
87
- {
88
- ref,
89
- ...props,
90
- variant: "outline",
91
- className: cn(
92
- "flex w-full p-1 rounded-md border h-auto items-center justify-between bg-background hover:bg-accent [&_svg]:pointer-events-auto",
93
- getSizeClasses(),
94
- className
95
- ),
96
- "data-testid": "multi-select-trigger",
97
- children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between w-full mx-auto", children: [
98
- /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground mx-3", children: placeholder }),
99
- /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 cursor-pointer text-muted-foreground mx-2" })
100
- ] })
101
- }
102
- ) }),
103
- /* @__PURE__ */ jsx(
104
- PopoverContent,
105
- {
106
- className: "w-[var(--radix-popover-trigger-width)] p-0",
107
- align: "start",
108
- side: "bottom",
109
- sideOffset: 4,
110
- children: /* @__PURE__ */ jsxs(Command, { shouldFilter: true, children: [
111
- searchable && /* @__PURE__ */ jsx(
112
- CommandInput,
113
- {
114
- placeholder: "Search...",
115
- value: currentSearchValue,
116
- onValueChange: handleSearchValueChange,
117
- onKeyDown: handleInputKeyDown,
118
- autoFocus
119
- }
120
- ),
121
- /* @__PURE__ */ jsxs(CommandList, { children: [
122
- /* @__PURE__ */ jsx(CommandEmpty, { children: "No results found." }),
123
- /* @__PURE__ */ jsxs(CommandGroup, { children: [
124
- /* @__PURE__ */ jsxs(
125
- CommandItem,
126
- {
127
- onSelect: toggleAll,
128
- className: "cursor-pointer",
129
- "data-testid": "multi-select-all-option",
130
- children: [
131
- /* @__PURE__ */ jsx(
132
- "div",
133
- {
134
- className: cn(
135
- "mr-2 flex h-4 w-4 items-center justify-center rounded-sm border border-primary",
136
- value.length === data.length ? "bg-primary text-primary-foreground" : "opacity-50 [&_svg]:invisible"
137
- ),
138
- children: /* @__PURE__ */ jsx(CheckIcon, { className: "h-4 w-4" })
139
- }
140
- ),
141
- /* @__PURE__ */ jsx("span", { children: "(Select All)" })
142
- ]
143
- },
144
- "all"
145
- ),
146
- data.map((option) => {
147
- const isSelected = value.includes(option.value);
148
- return /* @__PURE__ */ jsx(
149
- CommandItem,
150
- {
151
- value: option.label,
152
- onSelect: () => toggleOption(option.value),
153
- className: "cursor-pointer",
154
- "data-testid": `multi-select-option-${option.value}`,
155
- children: renderOption ? renderOption({ option, checked: isSelected }) : /* @__PURE__ */ jsxs(Fragment, { children: [
156
- /* @__PURE__ */ jsx(
157
- "div",
158
- {
159
- className: cn(
160
- "mr-2 flex h-4 w-4 items-center justify-center rounded-sm border border-primary",
161
- isSelected ? "bg-primary text-primary-foreground" : "opacity-50 [&_svg]:invisible"
162
- ),
163
- children: /* @__PURE__ */ jsx(CheckIcon, { className: "h-4 w-4" })
164
- }
165
- ),
166
- option.icon && /* @__PURE__ */ jsx(option.icon, { className: "mr-2 h-4 w-4 text-muted-foreground" }),
167
- /* @__PURE__ */ jsx("span", { children: option.label })
168
- ] })
169
- },
170
- option.value
171
- );
172
- })
173
- ] }),
174
- /* @__PURE__ */ jsx(CommandSeparator, {}),
175
- /* @__PURE__ */ jsx(CommandGroup, { children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
176
- clearable && value.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
177
- /* @__PURE__ */ jsx(
178
- CommandItem,
179
- {
180
- onSelect: handleClear,
181
- className: "flex-1 justify-center cursor-pointer",
182
- "data-testid": "multi-select-clear-button",
183
- children: "Clear"
184
- }
185
- ),
186
- /* @__PURE__ */ jsx(Separator, { orientation: "vertical", className: "flex min-h-6 h-full" })
187
- ] }),
188
- /* @__PURE__ */ jsx(
189
- CommandItem,
190
- {
191
- onSelect: () => setIsPopoverOpen(false),
192
- className: "flex-1 justify-center cursor-pointer max-w-full",
193
- "data-testid": "multi-select-close-button",
194
- children: "Close"
195
- }
196
- )
197
- ] }) })
198
- ] })
199
- ] })
200
- }
201
- ),
202
- animation > 0 && value.length > 0 && /* @__PURE__ */ jsx(WandSparkles, { className: "cursor-pointer my-2 text-muted-foreground bg-background w-3 h-3" })
203
- ] });
204
- }
205
- );
206
- MultiSelect.displayName = "MultiSelect";
207
-
208
- export { MultiSelect };
209
- //# sourceMappingURL=chunk-CQCC7LE7.js.map
210
- //# sourceMappingURL=chunk-CQCC7LE7.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/settings/MultiSelect.tsx"],"names":[],"mappings":"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","file":"chunk-CQCC7LE7.js","sourcesContent":["import * as React from 'react'\nimport { CheckIcon, ChevronDown, WandSparkles } from 'lucide-react'\n\nimport {\n Button,\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Separator,\n cn,\n} from '@arbidocs/react/ui'\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 */\n\n/**\n * Props for MultiSelect component\n */\ninterface MultiSelectProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange'> {\n /**\n * An array of option objects to be displayed in the multi-select component.\n * Each option object has a label, value, and an optional icon.\n */\n data: {\n /** The text to display for the option. */\n label: string\n /** The unique value associated with the option. */\n value: string\n /** Optional icon component to display alongside the option. */\n icon?: React.ComponentType<{ className?: string }>\n }[]\n\n /**\n * Current selected values.\n */\n value: string[]\n\n /**\n * Callback function triggered when the selected values change.\n * Receives an array of the new selected values.\n */\n onChange: (value: string[]) => void\n\n /**\n * Current search value for filtering options.\n */\n searchValue?: string\n\n /**\n * Callback function triggered when the search value changes.\n */\n onSearchChange?: (value: string) => void\n\n /**\n * Placeholder text to be displayed when no values are selected.\n * Optional, defaults to \"Select options\".\n */\n placeholder?: string\n\n /**\n * Whether the component is searchable.\n */\n searchable?: boolean\n\n /**\n * Whether the component is clearable.\n */\n clearable?: boolean\n\n /**\n * Size of the component.\n */\n size?: 'sm' | 'md' | 'lg'\n\n /**\n * Whether the component should auto focus.\n */\n autoFocus?: boolean\n\n /**\n * Callback triggered when dropdown opens.\n */\n onDropdownOpen?: () => void\n\n /**\n * Callback triggered when dropdown closes.\n */\n onDropdownClose?: () => void\n\n /**\n * Custom render function for options.\n */\n renderOption?: (params: {\n option: { label: string; value: string; icon?: React.ComponentType<{ className?: string }> }\n checked: boolean\n }) => React.ReactNode\n\n /**\n * Animation duration in seconds for the visual effects (e.g., bouncing badges).\n * Optional, defaults to 0 (no animation).\n */\n animation?: number\n\n /**\n * Maximum number of items to display. Extra selected items will be summarized.\n * Optional, defaults to 3.\n */\n maxCount?: number\n\n /**\n * The modality of the popover. When set to true, interaction with outside elements\n * will be disabled and only popover content will be visible to screen readers.\n * Optional, defaults to false.\n */\n modalPopover?: boolean\n\n /**\n * If true, renders the multi-select component as a child of another component.\n * Optional, defaults to false.\n */\n asChild?: boolean\n\n /**\n * Additional class names to apply custom styles to the multi-select component.\n * Optional, can be used to add custom styles.\n */\n className?: string\n}\n\nexport const MultiSelect = React.forwardRef<HTMLButtonElement, MultiSelectProps>(\n (\n {\n data,\n value,\n onChange,\n searchValue,\n onSearchChange,\n placeholder = 'Select options',\n searchable = false,\n clearable = false,\n size = 'md',\n autoFocus = false,\n onDropdownOpen,\n onDropdownClose,\n renderOption,\n animation = 0,\n modalPopover = false,\n className,\n ...props\n },\n ref\n ) => {\n const [isPopoverOpen, setIsPopoverOpen] = React.useState(false)\n const [internalSearchValue, setInternalSearchValue] = React.useState('')\n\n const currentSearchValue = searchValue ?? internalSearchValue\n\n React.useEffect(() => {\n if (isPopoverOpen && onDropdownOpen) {\n onDropdownOpen()\n } else if (!isPopoverOpen && onDropdownClose) {\n onDropdownClose()\n }\n }, [isPopoverOpen, onDropdownOpen, onDropdownClose])\n\n // Handle autoFocus - open dropdown immediately when component mounts\n React.useEffect(() => {\n if (autoFocus) {\n setIsPopoverOpen(true)\n }\n }, [autoFocus])\n\n const handleSearchValueChange = (newValue: string) => {\n if (onSearchChange) {\n onSearchChange(newValue)\n } else {\n setInternalSearchValue(newValue)\n }\n }\n\n const getSizeClasses = () => {\n switch (size) {\n case 'sm':\n return 'min-h-8 text-sm'\n case 'lg':\n return 'min-h-12 text-base'\n default:\n return 'min-h-10 text-sm'\n }\n }\n\n const handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n setIsPopoverOpen(true)\n } else if (event.key === 'Backspace' && !event.currentTarget.value) {\n const newSelectedValues = [...value]\n newSelectedValues.pop()\n onChange(newSelectedValues)\n }\n }\n\n const toggleOption = (optionValue: string) => {\n const newSelectedValues = value.includes(optionValue)\n ? value.filter((v) => v !== optionValue)\n : [...value, optionValue]\n onChange(newSelectedValues)\n }\n\n const handleClear = () => {\n onChange([])\n }\n\n const toggleAll = () => {\n if (value.length === data.length) {\n handleClear()\n } else {\n const allValues = data.map((option) => option.value)\n onChange(allValues)\n }\n }\n\n return (\n <Popover open={isPopoverOpen} onOpenChange={setIsPopoverOpen} modal={modalPopover}>\n <PopoverTrigger asChild>\n <Button\n ref={ref}\n {...props}\n variant=\"outline\"\n className={cn(\n 'flex w-full p-1 rounded-md border h-auto items-center justify-between bg-background hover:bg-accent [&_svg]:pointer-events-auto',\n getSizeClasses(),\n className\n )}\n data-testid=\"multi-select-trigger\"\n >\n <div className=\"flex items-center justify-between w-full mx-auto\">\n <span className=\"text-sm text-muted-foreground mx-3\">{placeholder}</span>\n <ChevronDown className=\"h-4 cursor-pointer text-muted-foreground mx-2\" />\n </div>\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className=\"w-[var(--radix-popover-trigger-width)] p-0\"\n align=\"start\"\n side=\"bottom\"\n sideOffset={4}\n >\n <Command shouldFilter={true}>\n {searchable && (\n <CommandInput\n placeholder=\"Search...\"\n value={currentSearchValue}\n onValueChange={handleSearchValueChange}\n onKeyDown={handleInputKeyDown}\n autoFocus={autoFocus}\n />\n )}\n <CommandList>\n <CommandEmpty>No results found.</CommandEmpty>\n <CommandGroup>\n <CommandItem\n key=\"all\"\n onSelect={toggleAll}\n className=\"cursor-pointer\"\n data-testid=\"multi-select-all-option\"\n >\n <div\n className={cn(\n 'mr-2 flex h-4 w-4 items-center justify-center rounded-sm border border-primary',\n value.length === data.length\n ? 'bg-primary text-primary-foreground'\n : 'opacity-50 [&_svg]:invisible'\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\n </div>\n <span>(Select All)</span>\n </CommandItem>\n {data.map((option) => {\n const isSelected = value.includes(option.value)\n return (\n <CommandItem\n key={option.value}\n value={option.label}\n onSelect={() => toggleOption(option.value)}\n className=\"cursor-pointer\"\n data-testid={`multi-select-option-${option.value}`}\n >\n {renderOption ? (\n renderOption({ option, checked: isSelected })\n ) : (\n <>\n <div\n className={cn(\n 'mr-2 flex h-4 w-4 items-center justify-center rounded-sm border border-primary',\n isSelected\n ? 'bg-primary text-primary-foreground'\n : 'opacity-50 [&_svg]:invisible'\n )}\n >\n <CheckIcon className=\"h-4 w-4\" />\n </div>\n {option.icon && (\n <option.icon className=\"mr-2 h-4 w-4 text-muted-foreground\" />\n )}\n <span>{option.label}</span>\n </>\n )}\n </CommandItem>\n )\n })}\n </CommandGroup>\n <CommandSeparator />\n <CommandGroup>\n <div className=\"flex items-center justify-between\">\n {clearable && value.length > 0 && (\n <>\n <CommandItem\n onSelect={handleClear}\n className=\"flex-1 justify-center cursor-pointer\"\n data-testid=\"multi-select-clear-button\"\n >\n Clear\n </CommandItem>\n <Separator orientation=\"vertical\" className=\"flex min-h-6 h-full\" />\n </>\n )}\n <CommandItem\n onSelect={() => setIsPopoverOpen(false)}\n className=\"flex-1 justify-center cursor-pointer max-w-full\"\n data-testid=\"multi-select-close-button\"\n >\n Close\n </CommandItem>\n </div>\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n {animation > 0 && value.length > 0 && (\n <WandSparkles className=\"cursor-pointer my-2 text-muted-foreground bg-background w-3 h-3\" />\n )}\n </Popover>\n )\n }\n)\n\nMultiSelect.displayName = 'MultiSelect'\n"]}