@uipath/apollo-wind 2.52.3 → 2.53.1

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 (58) hide show
  1. package/dist/components/forms/field-renderer.cjs +42 -3
  2. package/dist/components/forms/field-renderer.js +42 -3
  3. package/dist/components/forms/string-list-field.cjs +3 -0
  4. package/dist/components/forms/string-list-field.js +3 -0
  5. package/dist/components/ui/button.cjs +1 -1
  6. package/dist/components/ui/button.js +1 -1
  7. package/dist/components/ui/checkbox.cjs +1 -1
  8. package/dist/components/ui/checkbox.js +1 -1
  9. package/dist/components/ui/combobox.cjs +70 -51
  10. package/dist/components/ui/combobox.d.ts +12 -0
  11. package/dist/components/ui/combobox.js +72 -53
  12. package/dist/components/ui/date-picker.cjs +102 -62
  13. package/dist/components/ui/date-picker.d.ts +28 -0
  14. package/dist/components/ui/date-picker.js +103 -63
  15. package/dist/components/ui/datetime-picker.cjs +90 -72
  16. package/dist/components/ui/datetime-picker.d.ts +12 -2
  17. package/dist/components/ui/datetime-picker.js +92 -74
  18. package/dist/components/ui/file-upload.cjs +21 -8
  19. package/dist/components/ui/file-upload.d.ts +7 -0
  20. package/dist/components/ui/file-upload.js +22 -9
  21. package/dist/components/ui/form-field.cjs +3 -3
  22. package/dist/components/ui/form-field.d.ts +11 -0
  23. package/dist/components/ui/form-field.js +3 -3
  24. package/dist/components/ui/index.cjs +16 -16
  25. package/dist/components/ui/input-group.cjs +0 -2
  26. package/dist/components/ui/input-group.d.ts +1 -1
  27. package/dist/components/ui/input-group.js +0 -2
  28. package/dist/components/ui/input.cjs +0 -2
  29. package/dist/components/ui/input.js +0 -2
  30. package/dist/components/ui/lockable-value-field/lockable-value-field.cjs +1 -1
  31. package/dist/components/ui/lockable-value-field/lockable-value-field.js +1 -1
  32. package/dist/components/ui/multi-select.cjs +125 -112
  33. package/dist/components/ui/multi-select.d.ts +7 -0
  34. package/dist/components/ui/multi-select.js +126 -113
  35. package/dist/components/ui/prompt-editor/prompt-editor.cjs +0 -2
  36. package/dist/components/ui/prompt-editor/prompt-editor.js +0 -2
  37. package/dist/components/ui/radio-group.cjs +2 -2
  38. package/dist/components/ui/radio-group.js +2 -2
  39. package/dist/components/ui/search.cjs +3 -1
  40. package/dist/components/ui/search.d.ts +4 -0
  41. package/dist/components/ui/search.js +3 -1
  42. package/dist/components/ui/select.cjs +33 -12
  43. package/dist/components/ui/select.d.ts +10 -1
  44. package/dist/components/ui/select.js +35 -14
  45. package/dist/components/ui/slider.cjs +7 -2
  46. package/dist/components/ui/slider.js +7 -2
  47. package/dist/components/ui/switch.cjs +1 -1
  48. package/dist/components/ui/switch.js +1 -1
  49. package/dist/components/ui/textarea.cjs +30 -11
  50. package/dist/components/ui/textarea.d.ts +7 -0
  51. package/dist/components/ui/textarea.js +32 -13
  52. package/dist/components/ui/tooltip.cjs +1 -1
  53. package/dist/components/ui/tooltip.js +1 -1
  54. package/dist/index.cjs +4 -1
  55. package/dist/index.d.ts +5 -1
  56. package/dist/index.js +2 -2
  57. package/dist/styles.css +112 -24
  58. package/package.json +1 -1
@@ -30,7 +30,7 @@ var __webpack_modules__ = {
30
30
  "@/components/ui/calendar" (module) {
31
31
  module.exports = require("./calendar.cjs");
32
32
  },
33
- "@/components/ui/card" (module) {
33
+ "./card" (module) {
34
34
  module.exports = require("./card.cjs");
35
35
  },
36
36
  "./chart" (module) {
@@ -39,13 +39,13 @@ var __webpack_modules__ = {
39
39
  "@/components/ui/checkbox" (module) {
40
40
  module.exports = require("./checkbox.cjs");
41
41
  },
42
- "@/components/ui/collapsible" (module) {
42
+ "./collapsible" (module) {
43
43
  module.exports = require("./collapsible.cjs");
44
44
  },
45
45
  "./combobox" (module) {
46
46
  module.exports = require("./combobox.cjs");
47
47
  },
48
- "@/components/ui/command" (module) {
48
+ "./command" (module) {
49
49
  module.exports = require("./command.cjs");
50
50
  },
51
51
  "@/components/ui/context-menu" (module) {
@@ -60,7 +60,7 @@ var __webpack_modules__ = {
60
60
  "./datetime-picker" (module) {
61
61
  module.exports = require("./datetime-picker.cjs");
62
62
  },
63
- "@/components/ui/dialog" (module) {
63
+ "./dialog" (module) {
64
64
  module.exports = require("./dialog.cjs");
65
65
  },
66
66
  "./drawer" (module) {
@@ -69,7 +69,7 @@ var __webpack_modules__ = {
69
69
  "@/components/ui/dropdown-menu" (module) {
70
70
  module.exports = require("./dropdown-menu.cjs");
71
71
  },
72
- "./editable-cell" (module) {
72
+ "@/components/ui/editable-cell" (module) {
73
73
  module.exports = require("./editable-cell.cjs");
74
74
  },
75
75
  "./empty-state" (module) {
@@ -87,7 +87,7 @@ var __webpack_modules__ = {
87
87
  "@/components/ui/info-tooltip" (module) {
88
88
  module.exports = require("./info-tooltip.cjs");
89
89
  },
90
- "@/components/ui/input-group" (module) {
90
+ "./input-group" (module) {
91
91
  module.exports = require("./input-group.cjs");
92
92
  },
93
93
  "@/components/ui/input" (module) {
@@ -162,13 +162,13 @@ var __webpack_modules__ = {
162
162
  "./switch" (module) {
163
163
  module.exports = require("./switch.cjs");
164
164
  },
165
- "./table" (module) {
165
+ "@/components/ui/table" (module) {
166
166
  module.exports = require("./table.cjs");
167
167
  },
168
168
  "./tabs" (module) {
169
169
  module.exports = require("./tabs.cjs");
170
170
  },
171
- "@/components/ui/textarea" (module) {
171
+ "./textarea" (module) {
172
172
  module.exports = require("./textarea.cjs");
173
173
  },
174
174
  "./toggle-group" (module) {
@@ -303,7 +303,7 @@ var __webpack_exports__ = {};
303
303
  "default"
304
304
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_calendar__rspack_import_9[__rspack_import_key];
305
305
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
306
- var _card__rspack_import_10 = __webpack_require__("@/components/ui/card");
306
+ var _card__rspack_import_10 = __webpack_require__("./card");
307
307
  var __rspack_reexport = {};
308
308
  for(const __rspack_import_key in _card__rspack_import_10)if ([
309
309
  "TreeView",
@@ -324,7 +324,7 @@ var __webpack_exports__ = {};
324
324
  "default"
325
325
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_checkbox__rspack_import_12[__rspack_import_key];
326
326
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
327
- var _collapsible__rspack_import_13 = __webpack_require__("@/components/ui/collapsible");
327
+ var _collapsible__rspack_import_13 = __webpack_require__("./collapsible");
328
328
  var __rspack_reexport = {};
329
329
  for(const __rspack_import_key in _collapsible__rspack_import_13)if ([
330
330
  "TreeView",
@@ -338,7 +338,7 @@ var __webpack_exports__ = {};
338
338
  "default"
339
339
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_combobox__rspack_import_14[__rspack_import_key];
340
340
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
341
- var _command__rspack_import_15 = __webpack_require__("@/components/ui/command");
341
+ var _command__rspack_import_15 = __webpack_require__("./command");
342
342
  var __rspack_reexport = {};
343
343
  for(const __rspack_import_key in _command__rspack_import_15)if ([
344
344
  "TreeView",
@@ -373,7 +373,7 @@ var __webpack_exports__ = {};
373
373
  "default"
374
374
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_datetime_picker__rspack_import_19[__rspack_import_key];
375
375
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
376
- var _dialog__rspack_import_20 = __webpack_require__("@/components/ui/dialog");
376
+ var _dialog__rspack_import_20 = __webpack_require__("./dialog");
377
377
  var __rspack_reexport = {};
378
378
  for(const __rspack_import_key in _dialog__rspack_import_20)if ([
379
379
  "TreeView",
@@ -394,7 +394,7 @@ var __webpack_exports__ = {};
394
394
  "default"
395
395
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_dropdown_menu__rspack_import_22[__rspack_import_key];
396
396
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
397
- var _editable_cell__rspack_import_23 = __webpack_require__("./editable-cell");
397
+ var _editable_cell__rspack_import_23 = __webpack_require__("@/components/ui/editable-cell");
398
398
  var __rspack_reexport = {};
399
399
  for(const __rspack_import_key in _editable_cell__rspack_import_23)if ([
400
400
  "TreeView",
@@ -443,7 +443,7 @@ var __webpack_exports__ = {};
443
443
  "default"
444
444
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_input__rspack_import_29[__rspack_import_key];
445
445
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
446
- var _input_group__rspack_import_30 = __webpack_require__("@/components/ui/input-group");
446
+ var _input_group__rspack_import_30 = __webpack_require__("./input-group");
447
447
  var __rspack_reexport = {};
448
448
  for(const __rspack_import_key in _input_group__rspack_import_30)if ([
449
449
  "TreeView",
@@ -611,7 +611,7 @@ var __webpack_exports__ = {};
611
611
  "default"
612
612
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_switch__rspack_import_53[__rspack_import_key];
613
613
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
614
- var _table__rspack_import_54 = __webpack_require__("./table");
614
+ var _table__rspack_import_54 = __webpack_require__("@/components/ui/table");
615
615
  var __rspack_reexport = {};
616
616
  for(const __rspack_import_key in _table__rspack_import_54)if ([
617
617
  "TreeView",
@@ -625,7 +625,7 @@ var __webpack_exports__ = {};
625
625
  "default"
626
626
  ].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_tabs__rspack_import_55[__rspack_import_key];
627
627
  __webpack_require__.d(__webpack_exports__, __rspack_reexport);
628
- var _textarea__rspack_import_56 = __webpack_require__("@/components/ui/textarea");
628
+ var _textarea__rspack_import_56 = __webpack_require__("./textarea");
629
629
  var __rspack_reexport = {};
630
630
  for(const __rspack_import_key in _textarea__rspack_import_56)if ([
631
631
  "TreeView",
@@ -57,8 +57,6 @@ const InputGroup = /*#__PURE__*/ external_react_namespaceObject.forwardRef(({ cl
57
57
  }),
58
58
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_form_field_cjs_namespaceObject.FormFieldError, {
59
59
  id: validationId,
60
- "data-slot": "input-group-error",
61
- className: "mt-1",
62
60
  children: error
63
61
  })
64
62
  ]
@@ -27,7 +27,7 @@ declare const InputGroupText: React.ForwardRefExoticComponent<InputGroupTextProp
27
27
  export interface InputGroupInputProps extends Omit<InputProps, 'variant' | 'size' | 'error' | 'errorId'> {
28
28
  }
29
29
  declare const InputGroupInput: React.ForwardRefExoticComponent<InputGroupInputProps & React.RefAttributes<HTMLInputElement>>;
30
- export interface InputGroupTextareaProps extends Omit<TextareaProps, 'variant'> {
30
+ export interface InputGroupTextareaProps extends Omit<TextareaProps, 'variant' | 'error' | 'errorId'> {
31
31
  }
32
32
  declare const InputGroupTextarea: React.ForwardRefExoticComponent<Omit<InputGroupTextareaProps, "ref"> & React.RefAttributes<HTMLTextAreaElement>>;
33
33
  export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea, };
@@ -24,8 +24,6 @@ const InputGroup = /*#__PURE__*/ forwardRef(({ className, error, errorId, varian
24
24
  }),
25
25
  /*#__PURE__*/ jsx(FormFieldError, {
26
26
  id: validationId,
27
- "data-slot": "input-group-error",
28
- className: "mt-1",
29
27
  children: error
30
28
  })
31
29
  ]
@@ -52,8 +52,6 @@ const Input = /*#__PURE__*/ external_react_namespaceObject.forwardRef(({ 'aria-d
52
52
  }),
53
53
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_form_field_cjs_namespaceObject.FormFieldError, {
54
54
  id: validationId,
55
- "data-slot": "input-error",
56
- className: "mt-1",
57
55
  children: error
58
56
  })
59
57
  ]
@@ -24,8 +24,6 @@ const Input = /*#__PURE__*/ forwardRef(({ 'aria-describedby': ariaDescribedBy, '
24
24
  }),
25
25
  /*#__PURE__*/ jsx(FormFieldError, {
26
26
  id: validationId,
27
- "data-slot": "input-error",
28
- className: "mt-1",
29
27
  children: error
30
28
  })
31
29
  ]
@@ -97,7 +97,7 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
97
97
  const hasMoreActions = Boolean(more?.onRefresh || !locked && more?.onClear);
98
98
  const lockedDisplayValue = (0, external_utils_cjs_namespaceObject.getLockedDisplayValue)(fieldType, value, options);
99
99
  return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
100
- className: (0, index_cjs_namespaceObject.cn)('@container group flex flex-col gap-1.5', className),
100
+ className: (0, index_cjs_namespaceObject.cn)('@container group flex flex-col gap-1.5 [&>[data-slot=form-field-error]]:mt-0', className),
101
101
  children: [
102
102
  /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(field_header_cjs_namespaceObject.FieldHeader, {
103
103
  label: label,
@@ -69,7 +69,7 @@ function LockableValueField({ value = '', onValueChange, onValueBlur, locked = t
69
69
  const hasMoreActions = Boolean(more?.onRefresh || !locked && more?.onClear);
70
70
  const lockedDisplayValue = getLockedDisplayValue(fieldType, value, options);
71
71
  return /*#__PURE__*/ jsxs("div", {
72
- className: cn('@container group flex flex-col gap-1.5', className),
72
+ className: cn('@container group flex flex-col gap-1.5 [&>[data-slot=form-field-error]]:mt-0', className),
73
73
  children: [
74
74
  /*#__PURE__*/ jsx(FieldHeader, {
75
75
  label: label,
@@ -35,8 +35,15 @@ const external_checkbox_cjs_namespaceObject = require("./checkbox.cjs");
35
35
  const external_command_cjs_namespaceObject = require("./command.cjs");
36
36
  const external_popover_cjs_namespaceObject = require("./popover.cjs");
37
37
  const index_cjs_namespaceObject = require("../../lib/index.cjs");
38
- const MultiSelect = /*#__PURE__*/ external_react_namespaceObject.forwardRef(({ id, options, selected, onChange, placeholder = 'Select items...', emptyMessage = 'No items found.', className, maxSelected, disabled = false, searchPlaceholder = 'Search...', clearAllText, onBlur, 'aria-invalid': ariaInvalid, 'aria-describedby': ariaDescribedBy, 'aria-errormessage': ariaErrorMessage }, ref)=>{
38
+ const external_form_field_cjs_namespaceObject = require("./form-field.cjs");
39
+ const MultiSelect = /*#__PURE__*/ external_react_namespaceObject.forwardRef(({ id, options, selected, onChange, placeholder = 'Select items...', emptyMessage = 'No items found.', className, maxSelected, disabled = false, searchPlaceholder = 'Search...', clearAllText, onBlur, error, errorId, 'aria-invalid': ariaInvalid, 'aria-describedby': ariaDescribedBy, 'aria-errormessage': ariaErrorMessage }, ref)=>{
39
40
  const [open, setOpen] = external_react_namespaceObject.useState(false);
41
+ const generatedId = external_react_namespaceObject.useId();
42
+ const validationId = errorId ?? `${id ?? `multi-select-${generatedId.replace(/:/g, '')}`}-error`;
43
+ const describedBy = [
44
+ ariaDescribedBy,
45
+ error ? validationId : void 0
46
+ ].filter(Boolean).join(' ');
40
47
  const handleUnselect = (value)=>{
41
48
  onChange(selected.filter((s)=>s !== value));
42
49
  };
@@ -53,129 +60,135 @@ const MultiSelect = /*#__PURE__*/ external_react_namespaceObject.forwardRef(({ i
53
60
  const handleClearAll = ()=>{
54
61
  onChange([]);
55
62
  };
56
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
63
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
57
64
  ref: ref,
58
65
  "data-slot": "multi-select",
59
66
  className: (0, index_cjs_namespaceObject.cn)('relative', className),
60
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.Popover, {
61
- open: open,
62
- onOpenChange: (nextOpen)=>{
63
- setOpen(nextOpen);
64
- if (!nextOpen && open) onBlur?.();
65
- },
66
- children: [
67
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverTrigger, {
68
- asChild: true,
69
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_button_cjs_namespaceObject.Button, {
70
- id: id,
71
- variant: "outline",
72
- role: "combobox",
73
- "aria-expanded": open,
74
- "aria-invalid": ariaInvalid,
75
- "aria-describedby": ariaDescribedBy,
76
- "aria-errormessage": ariaErrorMessage,
77
- "aria-label": id ? void 0 : selected.length > 0 ? `${selected.length} ${1 === selected.length ? 'item' : 'items'} selected` : placeholder,
78
- className: (0, index_cjs_namespaceObject.cn)('w-full justify-between future:rounded-xl future:border-0 future:bg-surface-overlay future:px-4 future:gap-4 future:hover:bg-surface-hover future:font-normal future:text-foreground future:focus-visible:ring-offset-2 future:focus-visible:ring-offset-background', selected.length > 0 ? 'h-auto min-h-10' : 'h-10'),
79
- disabled: disabled,
67
+ children: [
68
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.Popover, {
69
+ open: open,
70
+ onOpenChange: (nextOpen)=>{
71
+ setOpen(nextOpen);
72
+ if (!nextOpen && open) onBlur?.();
73
+ },
74
+ children: [
75
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_popover_cjs_namespaceObject.PopoverTrigger, {
76
+ asChild: true,
77
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_button_cjs_namespaceObject.Button, {
78
+ id: id,
79
+ variant: "outline",
80
+ role: "combobox",
81
+ "aria-expanded": open,
82
+ "aria-invalid": error ? true : ariaInvalid,
83
+ "aria-describedby": describedBy || void 0,
84
+ "aria-errormessage": error ? validationId : ariaErrorMessage,
85
+ "aria-label": id ? void 0 : selected.length > 0 ? `${selected.length} ${1 === selected.length ? 'item' : 'items'} selected` : placeholder,
86
+ className: (0, index_cjs_namespaceObject.cn)('w-full justify-between future:rounded-xl future:border-0 future:bg-surface-overlay future:px-4 future:gap-4 future:hover:bg-surface-hover future:font-normal future:text-foreground future:focus-visible:ring-offset-2 future:focus-visible:ring-offset-background', selected.length > 0 ? 'h-auto min-h-10' : 'h-10'),
87
+ disabled: disabled,
88
+ children: [
89
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
90
+ className: "flex flex-wrap gap-1 flex-1",
91
+ children: 0 === selected.length ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
92
+ className: "text-foreground-muted",
93
+ children: placeholder
94
+ }) : selected.map((value)=>{
95
+ const option = options.find((opt)=>opt.value === value);
96
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_badge_cjs_namespaceObject.Badge, {
97
+ variant: "secondary",
98
+ className: "mr-1 future:bg-surface-raised future:hover:bg-surface-raised",
99
+ onClick: (e)=>{
100
+ e.stopPropagation();
101
+ handleUnselect(value);
102
+ },
103
+ children: [
104
+ option?.label,
105
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("button", {
106
+ type: "button",
107
+ "aria-label": `Remove ${option?.label}`,
108
+ className: "ml-1 rounded-full outline-none ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2 cursor-pointer bg-transparent border-0 p-0 inline-flex items-center",
109
+ onMouseDown: (e)=>{
110
+ e.preventDefault();
111
+ e.stopPropagation();
112
+ },
113
+ onClick: (e)=>{
114
+ e.preventDefault();
115
+ e.stopPropagation();
116
+ handleUnselect(value);
117
+ },
118
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_lucide_react_namespaceObject.X, {
119
+ className: "h-3 w-3 text-muted-foreground hover:text-foreground"
120
+ })
121
+ })
122
+ ]
123
+ }, value);
124
+ })
125
+ }),
126
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_lucide_react_namespaceObject.ChevronsUpDown, {
127
+ className: "h-4 w-4 shrink-0 opacity-50"
128
+ })
129
+ ]
130
+ })
131
+ }),
132
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.PopoverContent, {
133
+ className: "w-[--radix-popover-trigger-width] p-0",
134
+ align: "start",
80
135
  children: [
81
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
82
- className: "flex flex-wrap gap-1 flex-1",
83
- children: 0 === selected.length ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
84
- className: "text-foreground-muted",
85
- children: placeholder
86
- }) : selected.map((value)=>{
87
- const option = options.find((opt)=>opt.value === value);
88
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_badge_cjs_namespaceObject.Badge, {
89
- variant: "secondary",
90
- className: "mr-1 future:bg-surface-raised future:hover:bg-surface-raised",
91
- onClick: (e)=>{
92
- e.stopPropagation();
93
- handleUnselect(value);
94
- },
136
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.Command, {
137
+ children: [
138
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandInput, {
139
+ placeholder: searchPlaceholder
140
+ }),
141
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandList, {
95
142
  children: [
96
- option?.label,
97
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("button", {
98
- type: "button",
99
- "aria-label": `Remove ${option?.label}`,
100
- className: "ml-1 rounded-full outline-none ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2 cursor-pointer bg-transparent border-0 p-0 inline-flex items-center",
101
- onMouseDown: (e)=>{
102
- e.preventDefault();
103
- e.stopPropagation();
104
- },
105
- onClick: (e)=>{
106
- e.preventDefault();
107
- e.stopPropagation();
108
- handleUnselect(value);
109
- },
110
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_lucide_react_namespaceObject.X, {
111
- className: "h-3 w-3 text-muted-foreground hover:text-foreground"
143
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandEmpty, {
144
+ children: emptyMessage
145
+ }),
146
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandGroup, {
147
+ children: options.map((option)=>{
148
+ const isSelected = selected.includes(option.value);
149
+ const isDisabled = void 0 !== maxSelected && selected.length >= maxSelected && !isSelected;
150
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandItem, {
151
+ onSelect: ()=>{
152
+ if (!isDisabled) handleSelect(option.value);
153
+ },
154
+ disabled: isDisabled,
155
+ className: (0, index_cjs_namespaceObject.cn)('group', isDisabled && 'opacity-50 cursor-not-allowed'),
156
+ children: [
157
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_checkbox_cjs_namespaceObject.Checkbox, {
158
+ checked: isSelected,
159
+ className: "mr-2 pointer-events-none group-hover:border-muted-foreground",
160
+ tabIndex: -1
161
+ }),
162
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
163
+ children: option.label
164
+ })
165
+ ]
166
+ }, option.value);
112
167
  })
113
168
  })
114
169
  ]
115
- }, value);
116
- })
170
+ })
171
+ ]
117
172
  }),
118
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_lucide_react_namespaceObject.ChevronsUpDown, {
119
- className: "h-4 w-4 shrink-0 opacity-50"
173
+ selected.length > 0 && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
174
+ className: "border-t p-2",
175
+ children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button, {
176
+ variant: "ghost",
177
+ size: "sm",
178
+ className: "w-full",
179
+ onClick: handleClearAll,
180
+ children: 'function' == typeof clearAllText ? clearAllText(selected.length) : clearAllText || `Clear all (${selected.length})`
181
+ })
120
182
  })
121
183
  ]
122
184
  })
123
- }),
124
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_popover_cjs_namespaceObject.PopoverContent, {
125
- className: "w-[--radix-popover-trigger-width] p-0",
126
- align: "start",
127
- children: [
128
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.Command, {
129
- children: [
130
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandInput, {
131
- placeholder: searchPlaceholder
132
- }),
133
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandList, {
134
- children: [
135
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandEmpty, {
136
- children: emptyMessage
137
- }),
138
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_command_cjs_namespaceObject.CommandGroup, {
139
- children: options.map((option)=>{
140
- const isSelected = selected.includes(option.value);
141
- const isDisabled = void 0 !== maxSelected && selected.length >= maxSelected && !isSelected;
142
- return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)(external_command_cjs_namespaceObject.CommandItem, {
143
- onSelect: ()=>{
144
- if (!isDisabled) handleSelect(option.value);
145
- },
146
- disabled: isDisabled,
147
- className: (0, index_cjs_namespaceObject.cn)('group', isDisabled && 'opacity-50 cursor-not-allowed'),
148
- children: [
149
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_checkbox_cjs_namespaceObject.Checkbox, {
150
- checked: isSelected,
151
- className: "mr-2 pointer-events-none group-hover:border-muted-foreground",
152
- tabIndex: -1
153
- }),
154
- /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("span", {
155
- children: option.label
156
- })
157
- ]
158
- }, option.value);
159
- })
160
- })
161
- ]
162
- })
163
- ]
164
- }),
165
- selected.length > 0 && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
166
- className: "border-t p-2",
167
- children: /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_button_cjs_namespaceObject.Button, {
168
- variant: "ghost",
169
- size: "sm",
170
- className: "w-full",
171
- onClick: handleClearAll,
172
- children: 'function' == typeof clearAllText ? clearAllText(selected.length) : clearAllText || `Clear all (${selected.length})`
173
- })
174
- })
175
- ]
176
- })
177
- ]
178
- })
185
+ ]
186
+ }),
187
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_form_field_cjs_namespaceObject.FormFieldError, {
188
+ id: validationId,
189
+ children: error
190
+ })
191
+ ]
179
192
  });
180
193
  });
181
194
  MultiSelect.displayName = 'MultiSelect';
@@ -17,6 +17,13 @@ export interface MultiSelectProps {
17
17
  clearAllText?: string | ((count: number) => string);
18
18
  /** Called when the multi-select popover closes after being opened. */
19
19
  onBlur?: () => void;
20
+ /**
21
+ * Field-specific feedback rendered immediately below the trigger.
22
+ * Keep the message focused on what went wrong and how to resolve it.
23
+ */
24
+ error?: React.ReactNode;
25
+ /** Optional id for the inline validation message. */
26
+ errorId?: string;
20
27
  'aria-invalid'?: React.AriaAttributes['aria-invalid'];
21
28
  'aria-describedby'?: string;
22
29
  'aria-errormessage'?: string;