@camunda/design-system 0.51.0 → 0.52.0

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 (92) hide show
  1. package/dist/carbon-compat/accordion.js +1 -1
  2. package/dist/carbon-compat/c3-data-table.js +1 -1
  3. package/dist/carbon-compat/code-snippet.js +1 -1
  4. package/dist/carbon-compat/loading.js +1 -1
  5. package/dist/carbon-compat/menu-button.d.ts.map +1 -1
  6. package/dist/carbon-compat/menu-button.js +1 -1
  7. package/dist/carbon-compat/menu-button.js.map +1 -1
  8. package/dist/carbon-compat/overflow-menu.d.ts +2 -2
  9. package/dist/carbon-compat/overflow-menu.d.ts.map +1 -1
  10. package/dist/carbon-compat/overflow-menu.js +29 -13
  11. package/dist/carbon-compat/overflow-menu.js.map +1 -1
  12. package/dist/carbon-compat/search.js +1 -1
  13. package/dist/carbon-compat/table-expand.js +1 -1
  14. package/dist/src/components/ui/alert.d.ts +1 -1
  15. package/dist/src/components/ui/alert.js +1 -1
  16. package/dist/src/components/ui/app-sidebar.d.ts.map +1 -1
  17. package/dist/src/components/ui/app-sidebar.js +3 -3
  18. package/dist/src/components/ui/app-sidebar.js.map +1 -1
  19. package/dist/src/components/ui/avatar.js +1 -1
  20. package/dist/src/components/ui/breadcrumb.js +1 -1
  21. package/dist/src/components/ui/button.js +1 -1
  22. package/dist/src/components/ui/calendar.js +1 -1
  23. package/dist/src/components/ui/card.js +1 -1
  24. package/dist/src/components/ui/checkbox.js +1 -1
  25. package/dist/src/components/ui/choice-card.js +1 -1
  26. package/dist/src/components/ui/code-block.js +1 -1
  27. package/dist/src/components/ui/combobox.d.ts +20 -4
  28. package/dist/src/components/ui/combobox.d.ts.map +1 -1
  29. package/dist/src/components/ui/combobox.js +70 -21
  30. package/dist/src/components/ui/combobox.js.map +1 -1
  31. package/dist/src/components/ui/command.js +1 -1
  32. package/dist/src/components/ui/data-table.js +1 -1
  33. package/dist/src/components/ui/date-picker.js +1 -1
  34. package/dist/src/components/ui/date-range-picker.js +1 -1
  35. package/dist/src/components/ui/dialog.js +1 -1
  36. package/dist/src/components/ui/dropdown.js +1 -1
  37. package/dist/src/components/ui/file-uploader.js +1 -1
  38. package/dist/src/components/ui/inline-edit.js +1 -1
  39. package/dist/src/components/ui/link.d.ts +13 -0
  40. package/dist/src/components/ui/link.d.ts.map +1 -0
  41. package/dist/src/components/ui/link.js +65 -0
  42. package/dist/src/components/ui/link.js.map +1 -0
  43. package/dist/src/components/ui/multi-select.d.ts +17 -2
  44. package/dist/src/components/ui/multi-select.d.ts.map +1 -1
  45. package/dist/src/components/ui/multi-select.js +71 -15
  46. package/dist/src/components/ui/multi-select.js.map +1 -1
  47. package/dist/src/components/ui/nav-breadcrumb.js +1 -1
  48. package/dist/src/components/ui/nav-icon.assignability.js +1 -1
  49. package/dist/src/components/ui/notifications.js +1 -1
  50. package/dist/src/components/ui/radio-group.js +1 -1
  51. package/dist/src/components/ui/scorecard.js +1 -1
  52. package/dist/src/components/ui/search-input.js +1 -1
  53. package/dist/src/components/ui/select.js +1 -1
  54. package/dist/src/components/ui/sheet.js +1 -1
  55. package/dist/src/components/ui/sidebar-provider.js +1 -1
  56. package/dist/src/components/ui/split-button.js +1 -1
  57. package/dist/src/components/ui/stepper.js +1 -1
  58. package/dist/src/components/ui/toast.js +1 -1
  59. package/dist/src/components/ui/tree-view.js +1 -1
  60. package/dist/src/components/ui/user-menu.js +1 -1
  61. package/dist/src/examples/agent-control-plane-processes/DashboardPage.js +1 -1
  62. package/dist/src/examples/project-detail/ProjectDetailPage.js +1 -1
  63. package/dist/src/examples/shared/AppShell.js +1 -1
  64. package/dist/src/examples/shared/DateRangePopover.js +1 -1
  65. package/dist/src/examples/shared/agent-control-plane-nav.js +1 -1
  66. package/dist/src/examples/shared/console-nav.js +1 -1
  67. package/dist/src/examples/shared/cost-nav.js +1 -1
  68. package/dist/src/icons/camunda-app-icons.d.ts.map +1 -1
  69. package/dist/src/icons/camunda-app-icons.js +1 -1
  70. package/dist/src/icons/camunda-app-icons.js.map +1 -1
  71. package/dist/src/icons/index.d.ts +1 -0
  72. package/dist/src/icons/index.d.ts.map +1 -1
  73. package/dist/src/icons/index.js +2 -0
  74. package/dist/src/icons/index.js.map +1 -1
  75. package/dist/src/icons/lucide.assignability.d.ts +2 -0
  76. package/dist/src/icons/lucide.assignability.d.ts.map +1 -0
  77. package/dist/src/icons/lucide.assignability.js +11 -0
  78. package/dist/src/icons/lucide.assignability.js.map +1 -0
  79. package/dist/src/icons/lucide.d.ts +2 -0
  80. package/dist/src/icons/lucide.d.ts.map +1 -0
  81. package/dist/src/icons/lucide.js +11 -0
  82. package/dist/src/icons/lucide.js.map +1 -0
  83. package/dist/src/icons/registry.d.ts +13 -13
  84. package/dist/src/icons/registry.d.ts.map +1 -1
  85. package/dist/src/icons/registry.js +14 -14
  86. package/dist/src/icons/registry.js.map +1 -1
  87. package/dist/src/index.d.ts +1 -0
  88. package/dist/src/index.d.ts.map +1 -1
  89. package/dist/src/index.js +1 -0
  90. package/dist/src/index.js.map +1 -1
  91. package/dist/styles.css +3 -9
  92. package/package.json +9 -2
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { Popover as PopoverPrimitive } from "radix-ui";
5
- import { CheckIcon, ChevronDownIcon } from "lucide-react";
5
+ import { CheckIcon, ChevronDownIcon } from "../../icons/lucide.js";
6
6
  import { useVirtualizer } from "@tanstack/react-virtual";
7
7
  import { cn } from "../../lib/utils.js";
8
8
  import { C4Provider } from "./c4-provider.js";
@@ -18,14 +18,16 @@ function defaultEmptyIndicator(allowCustomValue, query) {
18
18
  }
19
19
  // Mounted only when popover is open. Arrow-key nav is limited to DOM-visible items;
20
20
  // primary UX is type-to-filter + click/Enter. Does not depend on cmdk.
21
- function VirtualList({ items, selectedValue, filterValue, onFilterChange, onSelect, allowCustomValue, onCommitCustomValue, searchPlaceholder, emptyIndicator, }) {
21
+ function VirtualList({ items, selectedValue, filterValue, onFilterChange, onSelect, allowCustomValue, onCommitCustomValue, searchPlaceholder, emptyIndicator, externalFiltering, }) {
22
22
  const inputRef = React.useRef(null);
23
23
  React.useEffect(() => {
24
24
  inputRef.current?.focus();
25
25
  }, []);
26
- const filtered = React.useMemo(() => filterValue
27
- ? items.filter((o) => o.label.toLowerCase().includes(filterValue.toLowerCase()))
28
- : items, [items, filterValue]);
26
+ const filtered = React.useMemo(() => externalFiltering
27
+ ? items
28
+ : filterValue
29
+ ? items.filter((o) => o.label.toLowerCase().includes(filterValue.toLowerCase()))
30
+ : items, [items, filterValue, externalFiltering]);
29
31
  const listRef = React.useRef(null);
30
32
  // eslint-disable-next-line react-hooks/incompatible-library
31
33
  const virtualizer = useVirtualizer({
@@ -74,7 +76,7 @@ function VirtualList({ items, selectedValue, filterValue, onFilterChange, onSele
74
76
  }, children: [_jsx(CheckIcon, { className: cn("size-4 shrink-0", isSelected ? "opacity-100" : "opacity-0"), "aria-hidden": "true" }), option.label] }, vItem.key));
75
77
  }) }) }))] }));
76
78
  }
77
- function Combobox({ options, value: controlledValue, defaultValue, onValueChange, onInputChange, allowCustomValue = false, direction = "bottom", placeholder = "Select an option…", searchPlaceholder = "Search…", sortFn = defaultSortFn, emptyIndicator, size = "default", disabled = false, virtualized = false, className, ...rest }) {
79
+ function Combobox({ options, value: controlledValue, defaultValue, onValueChange, onInputChange, allowCustomValue = false, externalFiltering = false, direction = "bottom", placeholder = "Select an option…", searchPlaceholder = "Search…", sortFn = defaultSortFn, emptyIndicator, size = "default", disabled = false, virtualized = false, className, ...rest }) {
78
80
  if (process.env.NODE_ENV === "development" &&
79
81
  !virtualized &&
80
82
  options.length > 500) {
@@ -108,22 +110,59 @@ function Combobox({ options, value: controlledValue, defaultValue, onValueChange
108
110
  }, [open]);
109
111
  const isControlled = controlledValue !== undefined;
110
112
  const selected = isControlled ? controlledValue : internalValue;
111
- const sorted = React.useMemo(() => [...options].sort(sortFn), [options, sortFn]);
112
- const selectedOption = sorted.find((o) => o.value === selected);
113
+ // The server's rank order (under `externalFiltering`) is trusted as-is;
114
+ // otherwise apply `sortFn` (alphabetical by default).
115
+ const orderedOptions = React.useMemo(() => (externalFiltering ? options : [...options].sort(sortFn)), [options, sortFn, externalFiltering]);
116
+ // Accumulates label lookups across renders instead of reading only the
117
+ // current `options` (mirrors MultiSelect's `optionLabelMap` fix for the
118
+ // same defect, camunda/design-system#537): under `externalFiltering`,
119
+ // `options` is only the current query's result page, so a value selected
120
+ // on a prior query would otherwise lose its label — and with it, the
121
+ // trigger's entire "something is selected" state — the moment it drops off
122
+ // the page. Known labels are never evicted, so this is also safe (a no-op)
123
+ // for the non-external, fully-loaded `options` case. Uses the
124
+ // React-sanctioned "adjust state during render" pattern so the merged map
125
+ // is available on this same render.
126
+ const [labelCache, setLabelCache] = React.useState(() => new Map());
127
+ const mergedLabelMap = new Map(labelCache);
128
+ for (const o of options) {
129
+ mergedLabelMap.set(o.value, o.label);
130
+ }
131
+ let labelMapChanged = mergedLabelMap.size !== labelCache.size;
132
+ if (!labelMapChanged) {
133
+ for (const [key, label] of mergedLabelMap) {
134
+ if (labelCache.get(key) !== label) {
135
+ labelMapChanged = true;
136
+ break;
137
+ }
138
+ }
139
+ }
140
+ const optionLabelMap = labelMapChanged ? mergedLabelMap : labelCache;
141
+ if (labelMapChanged) {
142
+ setLabelCache(mergedLabelMap);
143
+ }
144
+ const cachedLabel = selected !== undefined ? optionLabelMap.get(selected) : undefined;
113
145
  // `selected` is empty string, not just `undefined`, for the "nothing
114
146
  // selected yet" case in controlled usages that follow the
115
147
  // `value ?? ""` pattern (this component's own flagship example) — an
116
148
  // empty string must NOT be treated as a committed custom value, or the
117
149
  // trigger renders blank instead of the placeholder on first render.
118
- const isCustomValue = Boolean(allowCustomValue && selected && !selectedOption);
119
- const hasValue = Boolean(selectedOption) || isCustomValue;
120
- const triggerLabel = selectedOption?.label ?? (isCustomValue ? selected : placeholder);
150
+ const isCustomValue = Boolean(allowCustomValue && selected && cachedLabel === undefined);
151
+ const hasValue = Boolean(cachedLabel) || isCustomValue;
152
+ const triggerLabel = cachedLabel ?? (isCustomValue ? selected : placeholder);
121
153
  const filteredCount = React.useMemo(() => {
154
+ // Under `externalFiltering`, "no matches" means the server's current
155
+ // result page is empty — a client-side substring recount over that same
156
+ // page would be redundant and, worse, diverge from it (e.g. if the
157
+ // server matches on a field other than `label`).
158
+ if (externalFiltering)
159
+ return options.length;
122
160
  if (!filterValue)
123
- return sorted.length;
161
+ return orderedOptions.length;
124
162
  const query = filterValue.toLowerCase();
125
- return sorted.filter((o) => o.label.toLowerCase().includes(query)).length;
126
- }, [sorted, filterValue]);
163
+ return orderedOptions.filter((o) => o.label.toLowerCase().includes(query))
164
+ .length;
165
+ }, [orderedOptions, filterValue, externalFiltering, options.length]);
127
166
  const resolvedEmptyIndicator = emptyIndicator ?? defaultEmptyIndicator(allowCustomValue, filterValue);
128
167
  function commitValue(next) {
129
168
  if (!isControlled)
@@ -144,10 +183,14 @@ function Combobox({ options, value: controlledValue, defaultValue, onValueChange
144
183
  else if (allowCustomValue && filterValue && filterValue !== selected) {
145
184
  commitValue(filterValue);
146
185
  }
147
- setFilterValue("");
186
+ // Route the reset through handleInputChange (not a bare
187
+ // setFilterValue) so `onInputChange` observes the reset too — see its
188
+ // broadened contract on the prop's own JSDoc. Applies to every close
189
+ // path (Escape, outside click, blur), not just this one.
190
+ handleInputChange("");
148
191
  }
149
192
  else if (isCustomValue && selected !== undefined) {
150
- setFilterValue(selected);
193
+ handleInputChange(selected);
151
194
  }
152
195
  setOpen(nextOpen);
153
196
  }
@@ -157,12 +200,18 @@ function Combobox({ options, value: controlledValue, defaultValue, onValueChange
157
200
  setInternalValue(next);
158
201
  onValueChange?.(next);
159
202
  setOpen(false);
160
- setFilterValue("");
203
+ // A selection closes the popover through a path separate from
204
+ // handleOpenChange (Radix's onOpenChange is only invoked for its own
205
+ // dismiss gestures, not this explicit setOpen(false)) — reset here too,
206
+ // or a server-search consumer's state stays stale after every pick.
207
+ handleInputChange("");
161
208
  }
162
209
  function handleCommitCustomValue(text) {
163
210
  commitValue(text);
164
211
  setOpen(false);
165
- setFilterValue("");
212
+ // Same reasoning as handleSelect: this close path bypasses
213
+ // handleOpenChange too.
214
+ handleInputChange("");
166
215
  }
167
216
  function handleCommandKeyDown(e) {
168
217
  if (e.key === "Tab") {
@@ -184,14 +233,14 @@ function Combobox({ options, value: controlledValue, defaultValue, onValueChange
184
233
  handleCommitCustomValue(filterValue);
185
234
  }
186
235
  }
187
- return (_jsxs(PopoverPrimitive.Root, { open: open, onOpenChange: handleOpenChange, children: [_jsx(PopoverPrimitive.Trigger, { asChild: true, children: _jsxs("button", { ...rest, "data-slot": "combobox", "data-size": size, type: "button", role: "combobox", "aria-expanded": open, "aria-haspopup": "listbox", "aria-disabled": disabled ? "true" : undefined, disabled: disabled, className: cn("flex w-fit min-w-0 items-center justify-between gap-2 rounded-lg border border-input bg-input-background px-3 py-2 text-sm whitespace-nowrap transition-all duration-200 outline-none select-none", "focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/20 dark:focus-visible:ring-ring/40", "disabled:cursor-not-allowed disabled:opacity-50", "aria-invalid:border-danger-action-default aria-invalid:ring-3 aria-invalid:ring-danger-action-default/20 dark:aria-invalid:border-danger-action-default/50 dark:aria-invalid:ring-danger-action-default/40", "data-[size=default]:h-9 data-[size=sm]:h-8", !hasValue && "text-muted-foreground", className), children: [_jsx("span", { className: "truncate", children: triggerLabel }), _jsx(ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 opacity-50", "aria-hidden": "true" })] }) }), _jsx(PopoverPrimitive.Portal, { children: _jsx(C4Provider, { children: _jsx(PopoverPrimitive.Content, { "data-slot": "combobox-content", align: "start", side: direction, sideOffset: 4, className: cn("z-50 w-[--radix-popover-trigger-width] p-0 rounded-lg border border-input bg-popover text-popover-foreground shadow-md ring-1 ring-border outline-hidden", "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", "data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95", "data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95"), children: virtualized ? (open && (_jsx(VirtualList, { items: sorted, selectedValue: selected, filterValue: filterValue, onFilterChange: handleInputChange, onSelect: handleSelect, allowCustomValue: allowCustomValue, onCommitCustomValue: handleCommitCustomValue, searchPlaceholder: searchPlaceholder, emptyIndicator: resolvedEmptyIndicator }))) : (_jsxs(Command, { onKeyDown: handleCommandKeyDown, filter: (value, search) => {
188
- const option = sorted.find((o) => o.value === value);
236
+ return (_jsxs(PopoverPrimitive.Root, { open: open, onOpenChange: handleOpenChange, children: [_jsx(PopoverPrimitive.Trigger, { asChild: true, children: _jsxs("button", { ...rest, "data-slot": "combobox", "data-size": size, type: "button", role: "combobox", "aria-expanded": open, "aria-haspopup": "listbox", "aria-disabled": disabled ? "true" : undefined, disabled: disabled, className: cn("flex w-fit min-w-0 items-center justify-between gap-2 rounded-lg border border-input bg-input-background px-3 py-2 text-sm whitespace-nowrap transition-all duration-200 outline-none select-none", "focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/20 dark:focus-visible:ring-ring/40", "disabled:cursor-not-allowed disabled:opacity-50", "aria-invalid:border-danger-action-default aria-invalid:ring-3 aria-invalid:ring-danger-action-default/20 dark:aria-invalid:border-danger-action-default/50 dark:aria-invalid:ring-danger-action-default/40", "data-[size=default]:h-9 data-[size=sm]:h-8", !hasValue && "text-muted-foreground", className), children: [_jsx("span", { className: "truncate", children: triggerLabel }), _jsx(ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 opacity-50", "aria-hidden": "true" })] }) }), _jsx(PopoverPrimitive.Portal, { children: _jsx(C4Provider, { children: _jsx(PopoverPrimitive.Content, { "data-slot": "combobox-content", align: "start", side: direction, sideOffset: 4, className: cn("z-50 w-[--radix-popover-trigger-width] p-0 rounded-lg border border-input bg-popover text-popover-foreground shadow-md ring-1 ring-border outline-hidden", "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", "data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95", "data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95"), children: virtualized ? (open && (_jsx(VirtualList, { items: orderedOptions, selectedValue: selected, filterValue: filterValue, onFilterChange: handleInputChange, onSelect: handleSelect, allowCustomValue: allowCustomValue, onCommitCustomValue: handleCommitCustomValue, searchPlaceholder: searchPlaceholder, emptyIndicator: resolvedEmptyIndicator, externalFiltering: externalFiltering }))) : (_jsxs(Command, { shouldFilter: !externalFiltering, onKeyDown: handleCommandKeyDown, filter: (value, search) => {
237
+ const option = orderedOptions.find((o) => o.value === value);
189
238
  return option?.label
190
239
  .toLowerCase()
191
240
  .includes(search.toLowerCase())
192
241
  ? 1
193
242
  : 0;
194
- }, children: [_jsx(CommandInput, { placeholder: searchPlaceholder, "aria-label": searchPlaceholder, value: filterValue, onValueChange: handleInputChange }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: resolvedEmptyIndicator }), _jsx(CommandGroup, { children: sorted.map((option) => (_jsxs(CommandItem, { value: option.value, disabled: option.disabled, onSelect: handleSelect, className: "gap-2", children: [_jsx(CheckIcon, { className: cn("size-4 shrink-0", selected === option.value
243
+ }, children: [_jsx(CommandInput, { placeholder: searchPlaceholder, "aria-label": searchPlaceholder, value: filterValue, onValueChange: handleInputChange }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: resolvedEmptyIndicator }), _jsx(CommandGroup, { children: orderedOptions.map((option) => (_jsxs(CommandItem, { value: option.value, disabled: option.disabled, onSelect: handleSelect, className: "gap-2", children: [_jsx(CheckIcon, { className: cn("size-4 shrink-0", selected === option.value
195
244
  ? "opacity-100"
196
245
  : "opacity-0"), "aria-hidden": "true" }), option.label] }, option.value))) })] })] })) }) }) })] }));
197
246
  }
@@ -1 +1 @@
1
- {"version":3,"file":"combobox.js","sourceRoot":"","sources":["../../../../src/components/ui/combobox.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"combobox.js","sourceRoot":"","sources":["../../../../src/components/ui/combobox.tsx"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { Command as CommandPrimitive } from "cmdk";
5
- import { SearchIcon } from "lucide-react";
5
+ import { SearchIcon } from "../../icons/lucide.js";
6
6
  import { cn } from "../../lib/utils.js";
7
7
  import { withRef } from "../../lib/with-ref.js";
8
8
  function Command({ className, ...props }) {
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { flexRender, getCoreRowModel, getExpandedRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table";
5
- import { ChevronDown, ChevronRight, ChevronsUpDown, ChevronUp, MoreVertical, } from "lucide-react";
5
+ import { ChevronDown, ChevronRight, ChevronsUpDown, ChevronUp, MoreVertical, } from "../../icons/lucide.js";
6
6
  import { cn, renderIconNode } from "../../lib/utils.js";
7
7
  import { typographyVariants } from "./typography.js";
8
8
  import { Button } from "./button.js";
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { format as formatDate } from "date-fns";
5
- import { CalendarIcon } from "lucide-react";
5
+ import { CalendarIcon } from "../../icons/lucide.js";
6
6
  import { cn } from "../../lib/utils.js";
7
7
  import { withRef } from "../../lib/with-ref.js";
8
8
  import { Button } from "./button.js";
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { format as formatDate } from "date-fns";
5
- import { CalendarIcon, XIcon } from "lucide-react";
5
+ import { CalendarIcon, XIcon } from "../../icons/lucide.js";
6
6
  import { cn } from "../../lib/utils.js";
7
7
  import { withRef } from "../../lib/with-ref.js";
8
8
  import { Button } from "./button.js";
@@ -7,7 +7,7 @@ import { cn } from "../../lib/utils.js";
7
7
  import { composeCloseAutoFocus, composeOpenAutoFocus, useDialogFocusReturn, } from "../../lib/focus-visible-on-close.js";
8
8
  import { C4Provider } from "./c4-provider.js";
9
9
  import { Button } from "../ui/button.js";
10
- import { XIcon } from "lucide-react";
10
+ import { XIcon } from "../../icons/lucide.js";
11
11
  import { typographyVariants } from "./typography.js";
12
12
  function Dialog({ ...props }) {
13
13
  return _jsx(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
@@ -2,7 +2,7 @@
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
5
- import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react";
5
+ import { CheckIcon, ChevronRightIcon, CircleIcon } from "../../icons/lucide.js";
6
6
  import { cn } from "../../lib/utils.js";
7
7
  import { composeCloseAutoFocus, useDialogFocusReturn, } from "../../lib/focus-visible-on-close.js";
8
8
  import { C4Provider } from "./c4-provider.js";
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  // 1. Imports
3
3
  import * as React from "react";
4
4
  import { cva } from "class-variance-authority";
5
- import { CheckCircle2, Loader2, UploadCloud, X, XCircle } from "lucide-react";
5
+ import { CheckCircle2, Loader2, UploadCloud, X, XCircle } from "../../icons/lucide.js";
6
6
  import { cn } from "../../lib/utils.js";
7
7
  import { Text } from "./typography.js";
8
8
  import { Button, buttonVariants } from "./button.js";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { Check, Pencil } from "lucide-react";
4
+ import { Check, Pencil } from "../../icons/lucide.js";
5
5
  import { cn } from "../../lib/utils.js";
6
6
  import { Button } from "./button.js";
7
7
  import { Input } from "./input.js";
@@ -0,0 +1,13 @@
1
+ import * as React from "react";
2
+ declare const linkVariants: (props?: ({
3
+ inline?: boolean | null | undefined;
4
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5
+ type LinkProps = React.ComponentProps<"a"> & {
6
+ asChild?: boolean;
7
+ inline?: boolean;
8
+ disabled?: boolean;
9
+ };
10
+ declare const Link: React.ForwardRefExoticComponent<Omit<LinkProps, "ref"> & React.RefAttributes<HTMLAnchorElement>>;
11
+ export { Link, linkVariants };
12
+ export type { LinkProps };
13
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/link.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,QAAA,MAAM,YAAY;;8EAcjB,CAAC;AAEF,KAAK,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAmEF,QAAA,MAAM,IAAI,kGAAkD,CAAC;AAE7D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;AAC9B,YAAY,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cva } from "class-variance-authority";
4
+ import { Slot } from "radix-ui";
5
+ import { cn } from "../../lib/utils.js";
6
+ import { withRef } from "../../lib/with-ref.js";
7
+ const linkVariants = cva("text-info-action-default underline-offset-4 outline-none focus-visible:ring-2 focus-visible:ring-ring aria-disabled:opacity-50", {
8
+ variants: {
9
+ inline: {
10
+ true: "inline underline",
11
+ false: "inline-flex items-center gap-1.5 whitespace-nowrap text-sm hover:underline focus-visible:underline [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
12
+ },
13
+ },
14
+ defaultVariants: {
15
+ inline: false,
16
+ },
17
+ });
18
+ function LinkImpl({ ref, className, inline = false, asChild = false, disabled = false, href, target, rel, role, tabIndex, onClick, ...props }) {
19
+ const Comp = asChild ? Slot.Root : "a";
20
+ const resolvedRel = rel ?? (target === "_blank" ? "noopener" : undefined);
21
+ // Disabled semantics (stripped href, aria-disabled, blocked click) apply to
22
+ // the native <a> we render directly. `asChild` hands rendering to a Radix
23
+ // Slot around a consumer-supplied element (e.g. a router Link), whose own
24
+ // href/onClick wins the prop merge and would still navigate — same class of
25
+ // gap as Button's `loading && !asChild`. Disabling a slotted child is the
26
+ // consumer's responsibility.
27
+ const isDisabled = disabled && !asChild;
28
+ const handleClick = (event) => {
29
+ if (isDisabled) {
30
+ event.preventDefault();
31
+ return;
32
+ }
33
+ onClick?.(event);
34
+ };
35
+ // Built as a plain object rather than written out as JSX attributes so an
36
+ // unset value is an absent key, not an explicit `undefined`. On the native
37
+ // <a> both forms render identically, but with `asChild` an explicit
38
+ // `undefined` still clones onto the child element via Radix Slot and can
39
+ // shadow a value the child computes internally (e.g. a router Link
40
+ // deriving `href` from its own `to` prop) if the child spreads its own
41
+ // rest props after that value.
42
+ const attrs = {};
43
+ if (isDisabled) {
44
+ attrs.href = undefined;
45
+ attrs.role = "link";
46
+ attrs["aria-disabled"] = true;
47
+ attrs.tabIndex = 0;
48
+ }
49
+ else {
50
+ if (href !== undefined)
51
+ attrs.href = href;
52
+ if (role !== undefined)
53
+ attrs.role = role;
54
+ if (tabIndex !== undefined)
55
+ attrs.tabIndex = tabIndex;
56
+ }
57
+ if (target !== undefined)
58
+ attrs.target = target;
59
+ if (resolvedRel !== undefined)
60
+ attrs.rel = resolvedRel;
61
+ return (_jsx(Comp, { ref: ref, "data-slot": "link", className: cn(linkVariants({ inline, className })), ...props, ...attrs, onClick: handleClick }));
62
+ }
63
+ const Link = withRef(LinkImpl);
64
+ export { Link, linkVariants };
65
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.js","sourceRoot":"","sources":["../../../../src/components/ui/link.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,YAAY,GAAG,GAAG,CACtB,gIAAgI,EAChI;IACE,QAAQ,EAAE;QACR,MAAM,EAAE;YACN,IAAI,EAAE,kBAAkB;YACxB,KAAK,EACH,sLAAsL;SACzL;KACF;IACD,eAAe,EAAE;QACf,MAAM,EAAE,KAAK;KACd;CACF,CACF,CAAC;AAQF,SAAS,QAAQ,CAAC,EAChB,GAAG,EACH,SAAS,EACT,MAAM,GAAG,KAAK,EACd,OAAO,GAAG,KAAK,EACf,QAAQ,GAAG,KAAK,EAChB,IAAI,EACJ,MAAM,EACN,GAAG,EACH,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,GAAG,KAAK,EACE;IACV,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACvC,MAAM,WAAW,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1E,4EAA4E;IAC5E,0EAA0E;IAC1E,0EAA0E;IAC1E,4EAA4E;IAC5E,0EAA0E;IAC1E,6BAA6B;IAC7B,MAAM,UAAU,GAAG,QAAQ,IAAI,CAAC,OAAO,CAAC;IAExC,MAAM,WAAW,GAAG,CAAC,KAA0C,EAAE,EAAE;QACjE,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,0EAA0E;IAC1E,2EAA2E;IAC3E,oEAAoE;IACpE,yEAAyE;IACzE,mEAAmE;IACnE,uEAAuE;IACvE,+BAA+B;IAC/B,MAAM,KAAK,GAA8B,EAAE,CAAC;IAC5C,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;QACvB,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;QACpB,KAAK,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;QAC9B,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,IAAI,IAAI,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAC1C,IAAI,IAAI,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAC1C,IAAI,QAAQ,KAAK,SAAS;YAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACxD,CAAC;IACD,IAAI,MAAM,KAAK,SAAS;QAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IAChD,IAAI,WAAW,KAAK,SAAS;QAAE,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC;IAEvD,OAAO,CACL,KAAC,IAAI,IACH,GAAG,EAAE,GAAG,eACE,MAAM,EAChB,SAAS,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,KAC9C,KAAK,KACL,KAAK,EACT,OAAO,EAAE,WAAW,GACpB,CACH,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAAG,OAAO,CAA+B,QAAQ,CAAC,CAAC;AAE7D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import * as React from "react";
2
- import { type LucideIcon } from "lucide-react";
2
+ import { type LucideIcon } from "../../icons/lucide.js";
3
3
  export interface MultiSelectOption {
4
4
  label: string;
5
5
  value: string;
@@ -30,7 +30,22 @@ export interface MultiSelectProps {
30
30
  className?: string;
31
31
  "aria-label"?: string;
32
32
  "aria-labelledby"?: string;
33
+ /**
34
+ * Fires on every keystroke in the internal search input with the raw typed
35
+ * text. Named to match the identical-purpose prop on `Combobox`.
36
+ */
37
+ onInputChange?: (value: string) => void;
38
+ /**
39
+ * Trusts `options` as already filtered by the consumer (e.g. a server-side
40
+ * search query) instead of re-filtering it against the typed text with
41
+ * cmdk's internal scorer. Also disables the alphabetical resort — the
42
+ * consumer's `options` order (server rank) is preserved as-is — and forces
43
+ * Select All / Clear All off, because "Clear All" on a partial/paginated
44
+ * `options` page would destroy selections made on pages no longer present
45
+ * in `options`. Defaults to false.
46
+ */
47
+ externalFiltering?: boolean;
33
48
  }
34
- declare function MultiSelect({ options, value: controlledValue, defaultValue, onValueChange, placeholder, searchable, searchPlaceholder, sorted, maxCount, hideSelectAll, closeOnSelect, emptyIndicator, size, disabled, id, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, }: MultiSelectProps): React.JSX.Element;
49
+ declare function MultiSelect({ options, value: controlledValue, defaultValue, onValueChange, placeholder, searchable, searchPlaceholder, sorted, maxCount, hideSelectAll, closeOnSelect, emptyIndicator, size, disabled, id, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, onInputChange, externalFiltering, }: MultiSelectProps): React.JSX.Element;
35
50
  export { MultiSelect };
36
51
  //# sourceMappingURL=multi-select.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"multi-select.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/multi-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAe/C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,EAAE,CAAC;IAClD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qFAAqF;IACrF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAcD,iBAAS,WAAW,CAAC,EACnB,OAAO,EACP,KAAK,EAAE,eAAe,EACtB,YAAY,EACZ,aAAa,EACb,WAA+B,EAC/B,UAAiB,EACjB,iBAA6B,EAC7B,MAAa,EACb,QAAY,EACZ,aAAqB,EACrB,aAAqB,EACrB,cAAc,EACd,IAAgB,EAChB,QAAgB,EAChB,EAAE,EACF,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,GAClC,EAAE,gBAAgB,qBAyTlB;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"multi-select.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/multi-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAe/C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,EAAE,CAAC;IAClD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qFAAqF;IACrF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAcD,iBAAS,WAAW,CAAC,EACnB,OAAO,EACP,KAAK,EAAE,eAAe,EACtB,YAAY,EACZ,aAAa,EACb,WAA+B,EAC/B,UAAiB,EACjB,iBAA6B,EAC7B,MAAa,EACb,QAAY,EACZ,aAAqB,EACrB,aAAqB,EACrB,cAAc,EACd,IAAgB,EAChB,QAAgB,EAChB,EAAE,EACF,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,aAAa,EACb,iBAAyB,GAC1B,EAAE,gBAAgB,qBAuXlB;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -2,8 +2,8 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { Popover as PopoverPrimitive } from "radix-ui";
5
- import { ChevronDownIcon, XIcon, ListChecksIcon } from "lucide-react";
6
- import {} from "lucide-react";
5
+ import { ChevronDownIcon, XIcon, ListChecksIcon } from "../../icons/lucide.js";
6
+ import {} from "../../icons/lucide.js";
7
7
  import { cn } from "../../lib/utils.js";
8
8
  import { Badge } from "./badge.js";
9
9
  import { C4Provider } from "./c4-provider.js";
@@ -15,11 +15,35 @@ function isGroup(item) {
15
15
  function getAllOptions(options) {
16
16
  return options.flatMap((item) => (isGroup(item) ? item.options : [item]));
17
17
  }
18
- function MultiSelect({ options, value: controlledValue, defaultValue, onValueChange, placeholder = "Select options…", searchable = true, searchPlaceholder = "Search…", sorted = true, maxCount = 3, hideSelectAll = false, closeOnSelect = false, emptyIndicator, size = "default", disabled = false, id, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, }) {
18
+ function MultiSelect({ options, value: controlledValue, defaultValue, onValueChange, placeholder = "Select options…", searchable = true, searchPlaceholder = "Search…", sorted = true, maxCount = 3, hideSelectAll = false, closeOnSelect = false, emptyIndicator, size = "default", disabled = false, id, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, onInputChange, externalFiltering = false, }) {
19
19
  const [open, setOpen] = React.useState(false);
20
20
  const [internalValue, setInternalValue] = React.useState(defaultValue ?? []);
21
+ const [searchValue, setSearchValue] = React.useState("");
21
22
  const isControlled = controlledValue !== undefined;
22
23
  const selected = isControlled ? controlledValue : internalValue;
24
+ // Select All/Clear All on a partial (paginated/server-filtered) `options`
25
+ // page would destroy selections made on pages no longer present in
26
+ // `options` — force it off regardless of the literal `hideSelectAll` prop.
27
+ const effectiveHideSelectAll = hideSelectAll || externalFiltering;
28
+ // The consumer's `options` order is the server rank; don't clobber it.
29
+ const effectiveSorted = sorted && !externalFiltering;
30
+ function handleInputChange(next) {
31
+ setSearchValue(next);
32
+ onInputChange?.(next);
33
+ }
34
+ function handleOpenChange(nextOpen) {
35
+ if (disabled)
36
+ return;
37
+ if (!nextOpen) {
38
+ // The search input is controlled (for `onInputChange`), so its value now
39
+ // lives in MultiSelect's own state instead of dying with cmdk's internal
40
+ // state on popover unmount — reset explicitly or a reopen shows the
41
+ // stale query and stale filtered results.
42
+ setSearchValue("");
43
+ onInputChange?.("");
44
+ }
45
+ setOpen(nextOpen);
46
+ }
23
47
  function updateSelected(next) {
24
48
  if (!isControlled) {
25
49
  setInternalValue(next);
@@ -32,7 +56,10 @@ function MultiSelect({ options, value: controlledValue, defaultValue, onValueCha
32
56
  : [...selected, optionValue];
33
57
  updateSelected(next);
34
58
  if (closeOnSelect) {
35
- setOpen(false);
59
+ // Same reasoning as handleTriggerKeyDown: a raw setOpen(false) here
60
+ // never reaches Radix's onOpenChange, so the search-input reset would
61
+ // be skipped and a reopen would show the stale query.
62
+ handleOpenChange(false);
36
63
  }
37
64
  }
38
65
  const allOptions = getAllOptions(options);
@@ -69,28 +96,57 @@ function MultiSelect({ options, value: controlledValue, defaultValue, onValueCha
69
96
  // keyboard-to-click behaviour; drive open state manually (preventDefault
70
97
  // stops Space from scrolling the page).
71
98
  e.preventDefault();
72
- setOpen((prev) => !prev);
99
+ // Route through handleOpenChange, not a raw setOpen closing must
100
+ // still reset the (now-controlled) search input, and Radix's own
101
+ // onOpenChange is only invoked for its own-initiated changes.
102
+ handleOpenChange(!open);
73
103
  return;
74
104
  }
75
105
  if (e.key === "Backspace" && !open && selected.length > 0) {
76
106
  updateSelected(selected.slice(0, -1));
77
107
  }
78
108
  }
79
- const optionLabelMap = React.useMemo(() => {
80
- const map = new Map();
81
- for (const o of getAllOptions(options)) {
82
- map.set(o.value, o.label);
109
+ // Accumulates label lookups across renders instead of rebuilding from the
110
+ // current `options` alone: in `externalFiltering` mode `options` is only
111
+ // the current query's result page, so a value selected on a prior query
112
+ // (e.g. "Alice") would otherwise lose its label the moment the query
113
+ // changes and she drops out of the page (falls back to the raw value/UUID).
114
+ // Known values are never evicted, so this is safe for the non-external
115
+ // (fully-loaded `options`) case too. Uses the React-sanctioned "adjust
116
+ // state during render" pattern (a setState call gated on a diff, not a
117
+ // ref write) so the merged map is available on this same render.
118
+ const [labelCache, setLabelCache] = React.useState(() => new Map());
119
+ const currentOptions = getAllOptions(options);
120
+ const mergedLabelMap = new Map(labelCache);
121
+ for (const o of currentOptions) {
122
+ mergedLabelMap.set(o.value, o.label);
123
+ }
124
+ // Compare the fully-merged result against the cache, not option-by-option
125
+ // against stale intermediate state — an options array with a repeated
126
+ // `value` carrying different labels would otherwise never converge (each
127
+ // render's per-option comparison would flag a "change" even though the
128
+ // last-wins merge always lands on the same final value).
129
+ let labelMapChanged = mergedLabelMap.size !== labelCache.size;
130
+ if (!labelMapChanged) {
131
+ for (const [key, label] of mergedLabelMap) {
132
+ if (labelCache.get(key) !== label) {
133
+ labelMapChanged = true;
134
+ break;
135
+ }
83
136
  }
84
- return map;
85
- }, [options]);
86
- const groupedItems = options.filter(isGroup).map((g) => sorted
137
+ }
138
+ const optionLabelMap = labelMapChanged ? mergedLabelMap : labelCache;
139
+ if (labelMapChanged) {
140
+ setLabelCache(mergedLabelMap);
141
+ }
142
+ const groupedItems = options.filter(isGroup).map((g) => effectiveSorted
87
143
  ? {
88
144
  ...g,
89
145
  options: [...g.options].sort((a, b) => a.label.localeCompare(b.label)),
90
146
  }
91
147
  : g);
92
148
  const rawFlatItems = options.filter((o) => !isGroup(o));
93
- const flatItems = sorted
149
+ const flatItems = effectiveSorted
94
150
  ? [...rawFlatItems].sort((a, b) => a.label.localeCompare(b.label))
95
151
  : rawFlatItems;
96
152
  // Dev-only migration warning (#496). The trigger became a <div role="combobox">,
@@ -108,7 +164,7 @@ function MultiSelect({ options, value: controlledValue, defaultValue, onValueCha
108
164
  "Pass `aria-labelledby` (pointing at the label's id) or `aria-label` to give it an accessible name (#496).");
109
165
  }
110
166
  }, [id, ariaLabel, ariaLabelledBy]);
111
- return (_jsxs(PopoverPrimitive.Root, { open: open, onOpenChange: disabled ? undefined : setOpen, children: [_jsx(PopoverPrimitive.Trigger, { asChild: true, children: _jsxs("div", { ...{
167
+ return (_jsxs(PopoverPrimitive.Root, { open: open, onOpenChange: disabled ? undefined : handleOpenChange, children: [_jsx(PopoverPrimitive.Trigger, { asChild: true, children: _jsxs("div", { ...{
112
168
  type: undefined,
113
169
  }, "data-slot": "multi-select", "data-size": size, id: id, role: "combobox", tabIndex: disabled ? undefined : 0, "aria-expanded": open, "aria-haspopup": "listbox", "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-disabled": disabled ? "true" : undefined, onKeyDown: handleTriggerKeyDown, className: cn("flex w-full min-h-9 flex-wrap items-center gap-1 rounded-lg border border-input bg-input-background px-2 py-1 text-sm text-left transition-all duration-200 outline-none", "focus-visible:border-primary-border-strong dark:focus-visible:border-primary-border-subtle focus-visible:ring-2 focus-visible:ring-ring", "aria-disabled:cursor-not-allowed aria-disabled:opacity-50 aria-disabled:pointer-events-none", "data-[size=sm]:min-h-8", selected.length === 0 && "text-neutral-foreground-subtle", className), children: [selected.length === 0 ? (_jsx("span", { className: "flex-1 truncate", children: placeholder })) : (_jsxs(_Fragment, { children: [visibleChips.map((v) => {
114
170
  const label = optionLabelMap.get(v) ?? v;
@@ -117,7 +173,7 @@ function MultiSelect({ options, value: controlledValue, defaultValue, onValueCha
117
173
  // `pointer-events-auto` restores interactivity inside a Dialog:
118
174
  // the popover portals as a sibling of the dialog, so it inherits
119
175
  // `pointer-events: none` from the scroll-locked <body> (#496).
120
- "pointer-events-auto z-50 w-[--radix-popover-trigger-width] p-0 rounded-lg border border-input bg-popover text-popover-foreground shadow-md ring-1 ring-border outline-hidden", "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", "data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95", "data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95"), children: _jsxs(Command, { children: [searchable && (_jsx(CommandInput, { placeholder: searchPlaceholder, "aria-label": searchPlaceholder })), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: emptyIndicator ?? "No results found" }), !hideSelectAll && (_jsx(CommandGroup, { children: _jsxs(CommandItem, { onSelect: handleSelectAll, className: "gap-2", children: [_jsx(Checkbox, { checked: allSelected, "aria-hidden": "true", tabIndex: -1, className: "pointer-events-none" }), _jsx(ListChecksIcon, { className: "size-4 text-neutral-foreground-subtle", "aria-hidden": "true" }), allSelected ? "Clear All" : "Select All"] }) })), flatItems.length > 0 && (_jsx(CommandGroup, { children: flatItems.map((option) => {
176
+ "pointer-events-auto z-50 w-[--radix-popover-trigger-width] p-0 rounded-lg border border-input bg-popover text-popover-foreground shadow-md ring-1 ring-border outline-hidden", "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", "data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95", "data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95"), children: _jsxs(Command, { shouldFilter: !externalFiltering, children: [searchable && (_jsx(CommandInput, { placeholder: searchPlaceholder, "aria-label": searchPlaceholder, value: searchValue, onValueChange: handleInputChange })), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: emptyIndicator ?? "No results found" }), !effectiveHideSelectAll && (_jsx(CommandGroup, { children: _jsxs(CommandItem, { onSelect: handleSelectAll, className: "gap-2", children: [_jsx(Checkbox, { checked: allSelected, "aria-hidden": "true", tabIndex: -1, className: "pointer-events-none" }), _jsx(ListChecksIcon, { className: "size-4 text-neutral-foreground-subtle", "aria-hidden": "true" }), allSelected ? "Clear All" : "Select All"] }) })), flatItems.length > 0 && (_jsx(CommandGroup, { children: flatItems.map((option) => {
121
177
  const isSelected = selected.includes(option.value);
122
178
  const Icon = option.icon;
123
179
  return (_jsxs(CommandItem, { value: option.value, keywords: [option.label], disabled: option.disabled, onSelect: () => toggleOption(option.value), className: "gap-2", children: [_jsx(Checkbox, { checked: isSelected, "aria-hidden": "true", tabIndex: -1, className: "pointer-events-none" }), Icon && (_jsx(Icon, { className: "size-4 text-neutral-foreground-subtle", "aria-hidden": "true" })), option.label] }, option.value));