@eightshift/ui-components 5.0.9 → 5.1.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 (83) hide show
  1. package/dist/{Collection-uTAXq9Br.js → Collection-BRJOMbOa.js} +12 -7
  2. package/dist/{Dialog-CmAxaSUv.js → Dialog-D6EdDPeu.js} +8 -8
  3. package/dist/{useFormValidation-Dy0PXJg5.js → Form-Bnyyv3Im.js} +6 -4
  4. package/dist/{Group-DDPhPPTQ.js → Group-LBogWgyp.js} +2 -2
  5. package/dist/{Input-BmDS8Juy.js → Input-DfSBLhDx.js} +1 -1
  6. package/dist/List-BLeHBkfx.js +590 -0
  7. package/dist/{ListBox-_nDFq8-H.js → ListBox-BY3gwI8c.js} +3 -3
  8. package/dist/Select-BebwUgKB.js +764 -0
  9. package/dist/Separator-CTQWg_HO.js +1111 -0
  10. package/dist/TextField-o2U-uBWv.js +133 -0
  11. package/dist/assets/style-admin.css +268 -150
  12. package/dist/assets/style-editor.css +268 -150
  13. package/dist/assets/style.css +268 -150
  14. package/dist/assets/wp-font-enhancements.css +1 -1
  15. package/dist/assets/wp-ui-enhancements.css +1 -1
  16. package/dist/components/breakpoint-preview/breakpoint-preview.js +3 -4
  17. package/dist/components/button/button.js +3 -3
  18. package/dist/components/checkbox/checkbox.js +1 -2
  19. package/dist/components/color-pickers/color-picker.js +7 -9
  20. package/dist/components/color-pickers/color-swatch.js +1 -1
  21. package/dist/components/color-pickers/gradient-editor.js +19 -25
  22. package/dist/components/color-pickers/solid-color-picker.js +27 -27
  23. package/dist/components/component-toggle/component-toggle.js +1 -1
  24. package/dist/components/draggable/draggable-handle.js +2 -2
  25. package/dist/components/draggable/draggable.js +5 -5
  26. package/dist/components/draggable-list/draggable-list-item.js +2 -2
  27. package/dist/components/draggable-list/draggable-list.js +5 -5
  28. package/dist/components/expandable/expandable.js +1 -1
  29. package/dist/components/index.js +5 -5
  30. package/dist/components/input-field/input-field.js +13 -129
  31. package/dist/components/item-collection/item-collection.js +1 -1
  32. package/dist/components/link-input/link-input.js +1463 -17
  33. package/dist/components/matrix-align/matrix-align.js +11 -14
  34. package/dist/components/menu/menu.js +4 -8
  35. package/dist/components/modal/modal.js +3 -3
  36. package/dist/components/number-picker/number-picker.js +9 -10
  37. package/dist/components/option-select/option-select.js +140 -156
  38. package/dist/components/placeholders/file-placeholder.js +1 -1
  39. package/dist/components/placeholders/image-placeholder.js +3 -3
  40. package/dist/components/placeholders/media-placeholder.js +2 -2
  41. package/dist/components/popover/popover.js +10 -5
  42. package/dist/components/radio/radio.js +4 -5
  43. package/dist/components/repeater/repeater-item.js +1 -1
  44. package/dist/components/repeater/repeater.js +6 -6
  45. package/dist/components/responsive/mini-responsive.js +45 -47
  46. package/dist/components/responsive/responsive-legacy.js +51 -55
  47. package/dist/components/responsive/responsive.js +47 -49
  48. package/dist/components/responsive-preview/responsive-preview.js +12 -15
  49. package/dist/components/select/async-multi-select.js +4 -4
  50. package/dist/components/select/async-single-select.js +1 -1
  51. package/dist/components/select/multi-select-components.js +1 -1
  52. package/dist/components/select/multi-select.js +4 -4
  53. package/dist/components/select/shared.js +2 -2
  54. package/dist/components/select/single-select.js +1 -1
  55. package/dist/components/select/styles.js +3 -3
  56. package/dist/components/select/v2/async-select.js +215 -158
  57. package/dist/components/select/v2/shared.js +29 -20
  58. package/dist/components/select/v2/single-select.js +202 -851
  59. package/dist/components/slider/column-config-slider.js +2 -2
  60. package/dist/components/slider/slider.js +2 -2
  61. package/dist/components/slider/utils.js +1 -1
  62. package/dist/components/tabs/tabs.js +7 -8
  63. package/dist/components/toggle/switch.js +4 -3
  64. package/dist/components/toggle-button/toggle-button.js +1 -1
  65. package/dist/{default-i18n-CT_oS1Fy.js → default-i18n-OFa3zAyB.js} +5 -9
  66. package/dist/icons/jsx-svg.js +35 -5
  67. package/dist/index.js +4 -4
  68. package/dist/{multi-select-components-Sp-JEFEX.js → multi-select-components-BcKzA24f.js} +3 -3
  69. package/dist/{react-jsx-parser.min-DZCiis5V.js → react-jsx-parser.min-LF707GK8.js} +312 -332
  70. package/dist/useAsyncList-fLtZMvJO.js +420 -0
  71. package/dist/useFilter-BR5z1A4Q.js +50 -0
  72. package/dist/{useListState-9Hq_FiRF.js → useListState-BrZ2XvDS.js} +1 -1
  73. package/dist/{useNumberField-D0u2bh8g.js → useNumberField-y0dLc_6m.js} +2 -2
  74. package/dist/{useSingleSelectListState-DqhemUIh.js → useSingleSelectListState-Bh46cRXs.js} +1 -1
  75. package/dist/utilities/array-helpers.js +4 -7
  76. package/dist/utilities/es-dash.js +21 -3
  77. package/dist/utilities/index.js +2 -1
  78. package/dist/utilities/text-helpers.js +3 -3
  79. package/package.json +9 -9
  80. package/dist/ComboBox-BANSEKnb.js +0 -1915
  81. package/dist/Form-Cq3fu75_.js +0 -5
  82. package/dist/List-CZMUbkFU.js +0 -593
  83. package/dist/Separator-BN3mjL6q.js +0 -332
@@ -1,20 +1,21 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { _ as __ } from "../../../default-i18n-CT_oS1Fy.js";
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { _ as __ } from "../../../default-i18n-OFa3zAyB.js";
3
+ import { BaseControl } from "../../base-control/base-control.js";
4
+ import { b as $d2f53cda644affe3$export$2f2b9559550c7bbc, c as $440f4836bcb56932$export$b94867ecbd698f21 } from "../../../Separator-CTQWg_HO.js";
3
5
  import { $ as $d2b4bc8c273e7be6$export$353f5b6fc5456de1 } from "../../../Button-DH22t_SM.js";
4
- import { $ as $f86e6c1ec7da6ebb$export$bc3384a35de93d66, a as $d01f2c01039c0eec$export$72b9695b8216309a, b as $d01f2c01039c0eec$export$c02625b26074192c } from "../../../ComboBox-BANSEKnb.js";
5
- import { $ as $3985021b0ad6602f$export$f5b8910cec6cf069 } from "../../../Input-BmDS8Juy.js";
6
+ import { $ as $3985021b0ad6602f$export$f5b8910cec6cf069 } from "../../../Input-DfSBLhDx.js";
6
7
  import { $ as $01b77f81d0f07f68$export$b04be29aa201d4f5 } from "../../../Label-JS_ob-kh.js";
7
- import { $ as $eed445e0843c11d0$export$41f133550aa26f48 } from "../../../ListBox-_nDFq8-H.js";
8
- import { $ as $07b14b47974efb58$export$5b6b19405a83ff9d } from "../../../Dialog-CmAxaSUv.js";
9
- import { $ as $514c0188e459b4c0$export$5f1af8db9871e1d6 } from "../../../Text-BuJgePCv.js";
8
+ import { $ as $eed445e0843c11d0$export$41f133550aa26f48 } from "../../../ListBox-BY3gwI8c.js";
9
+ import { e as $07b14b47974efb58$export$5b6b19405a83ff9d } from "../../../Dialog-D6EdDPeu.js";
10
+ import { $ as $82d7e5349645de74$export$ef9b1a59e592288f, a as $82d7e5349645de74$export$e288731fd71264f0, b as $82d7e5349645de74$export$ef445b55be0601bd } from "../../../Select-BebwUgKB.js";
11
+ import { useRef, useEffect, cloneElement, useContext } from "react";
12
+ import { icons } from "../../../icons/icons.js";
13
+ import "../../../react-jsx-parser.min-LF707GK8.js";
10
14
  import { OptionItemBase } from "./shared.js";
11
15
  import { RichLabel } from "../../rich-label/rich-label.js";
12
- import { BaseControl } from "../../base-control/base-control.js";
13
- import { useEffect, useRef, cloneElement, useContext } from "react";
14
- import { icons } from "../../../icons/icons.js";
15
- import "../../../react-jsx-parser.min-DZCiis5V.js";
16
16
  import { unescapeHTML } from "../../../utilities/text-helpers.js";
17
17
  import { c as clsx } from "../../../utils-CZt7LCbO.js";
18
+ import { $ as $f86e6c1ec7da6ebb$export$bc3384a35de93d66 } from "../../../useAsyncList-fLtZMvJO.js";
18
19
  /**
19
20
  * Select menu with async loading.
20
21
  *
@@ -35,16 +36,18 @@ import { c as clsx } from "../../../utils-CZt7LCbO.js";
35
36
  * @param {string} [props.placeholder] - Placeholder text to show when no value is selected.
36
37
  * @param {JSX.Element} [props.customMenuOption] - If provided, replaces the default item in the dropdown menu. `({ value: string, label: string, subtitle: string, metadata: any }) => JSX.Element`
37
38
  * @param {JSX.Element} [props.customValueDisplay] - If provided, replaces the default current value display of each selected item. `({ value: string, label: string, subtitle: string, metadata: any }) => JSX.Element`
39
+ * @param {JSX.Element} [props.customDropdownArrow] - If provided, replaces the default dropdown arrow indicator.
38
40
  * @param {Function} [props.processLoadedOptions] - Allows modifying (filtering, grouping, ...) options output after the items have been dynamically fetched. Must include `label`, `value`, and `id` keys in the output, additional fields can be added as required.
39
41
  * @param {string} props.className - Classes to pass to the select menu.
42
+ * @param {boolean} [props.noMinWidth=false] - If `true`, the select menu will not have a minimum width.
40
43
  * @param {boolean} [props.hidden] - If `true`, the component is not rendered.
41
44
  *
42
- * @returns {JSX.Element} The __ExperimentalAsyncSelect component.
45
+ * @returns {JSX.Element} The AsyncSelectNext component.
43
46
  *
44
47
  * @example
45
48
  * const [value, setValue] = useState(null);
46
49
  *
47
- * <__ExperimentalAsyncSelect
50
+ * <AsyncSelectNext
48
51
  * label='Select items'
49
52
  * fetchUrl={(searchText) => `https://api.example.com/items?q=${searchText}`}
50
53
  * value={value}
@@ -55,7 +58,7 @@ import { c as clsx } from "../../../utils-CZt7LCbO.js";
55
58
  *
56
59
  * @preserve
57
60
  */
58
- const __ExperimentalAsyncSelect = (props) => {
61
+ const AsyncSelectNext = (props) => {
59
62
  const {
60
63
  label,
61
64
  help,
@@ -69,9 +72,10 @@ const __ExperimentalAsyncSelect = (props) => {
69
72
  disabled = false,
70
73
  clearable = false,
71
74
  className,
72
- placeholder,
75
+ placeholder = __("Select...", "eightshift-ui-components"),
73
76
  customMenuOption,
74
77
  customValueDisplay,
78
+ customDropdownArrow,
75
79
  processLoadedOptions = (options) => options,
76
80
  fetchUrl,
77
81
  fetchConfig = {},
@@ -82,17 +86,17 @@ const __ExperimentalAsyncSelect = (props) => {
82
86
  getSubtitle,
83
87
  getData = (data) => data,
84
88
  hidden,
89
+ noMinWidth = false,
85
90
  ...rest
86
91
  } = props;
87
- let list = $f86e6c1ec7da6ebb$export$bc3384a35de93d66({
88
- // initialFilterText: value?.label,
89
- async load({ signal, filterText: rawFilterText }) {
90
- let filterText = rawFilterText.trim();
92
+ const list = $f86e6c1ec7da6ebb$export$bc3384a35de93d66({
93
+ getKey: (item) => item.value,
94
+ async load({ signal, filterText }) {
91
95
  const res = await fetch(fetchUrl(filterText), { ...fetchConfig, signal });
92
- const json = getData(await res.json());
93
- const output = json == null ? void 0 : json.map((item) => {
94
- const id = getValue(item);
95
- const entry = { label: unescapeHTML(getLabel(item)), value: id };
96
+ const json = processLoadedOptions(getData(await res.json()));
97
+ const output = json?.map((item, index) => {
98
+ const id = getValue?.(item) ?? index;
99
+ const entry = { label: unescapeHTML(getLabel?.(item) ?? ""), value: id };
96
100
  if (getMeta) {
97
101
  entry.meta = getMeta(item);
98
102
  }
@@ -101,197 +105,250 @@ const __ExperimentalAsyncSelect = (props) => {
101
105
  }
102
106
  return entry;
103
107
  });
108
+ if (value && value?.value && (filterText ?? "").length < 1 && output.length > 0 && !output?.find((item) => item.value === value?.value)) {
109
+ return {
110
+ items: [value, ...output.slice(0, -1)],
111
+ selectedKeys: [value?.value]
112
+ };
113
+ }
104
114
  return {
105
115
  items: output
106
116
  };
107
117
  }
108
118
  });
109
- let listItems = [...list.items];
110
- if (value == null ? void 0 : value.value) {
111
- const selectedIndex = listItems.findIndex((item) => item.value === (value == null ? void 0 : value.value));
112
- if (selectedIndex === -1) {
113
- listItems = [{ ...value }, ...listItems];
114
- }
115
- }
119
+ const ref = useRef();
116
120
  useEffect(() => {
117
- if (list.filterText !== (value == null ? void 0 : value.label)) {
118
- list.setFilterText(value == null ? void 0 : value.label);
121
+ if (value?.value && !list.getItem(value?.value)) {
122
+ list.items[0] = value;
119
123
  }
120
- if (!value && list.filterText) {
121
- list.setFilterText("");
122
- }
123
- }, [value]);
124
- const ref = useRef();
124
+ list.setSelectedKeys(value?.value ? [value.value] : []);
125
+ list.setFilterText("");
126
+ }, [value?.value]);
125
127
  if (hidden) {
126
128
  return null;
127
129
  }
128
- return /* @__PURE__ */ jsxs(
129
- $d01f2c01039c0eec$export$72b9695b8216309a,
130
+ return /* @__PURE__ */ jsx(
131
+ $82d7e5349645de74$export$ef9b1a59e592288f,
130
132
  {
133
+ isDisabled: disabled,
134
+ selectedKey: value?.value ?? null,
131
135
  onSelectionChange: (selected) => {
136
+ list.filterText = "";
132
137
  if (selected === null || selected === void 0) {
133
138
  onChange(null);
134
- list.setFilterText("");
135
- return;
136
- }
137
- if (selected === (value == null ? void 0 : value.value) || list.filterText === (value == null ? void 0 : value.label)) {
138
139
  return;
139
140
  }
140
- const item = (list == null ? void 0 : list.getItem(selected)) ?? listItems.find((item2) => item2.value === selected);
141
+ const item = list.items.find((item2) => item2.value === selected);
141
142
  if (!item) {
142
143
  onChange(null);
143
- list.setFilterText("");
144
144
  return;
145
145
  }
146
- list.setFilterText(item.label);
146
+ if (item && "id" in item) {
147
+ delete item.id;
148
+ }
147
149
  onChange(item);
148
150
  },
149
- allowsCustomValue: false,
150
- allowsEmptyCollection: true,
151
- selectedKey: (value == null ? void 0 : value.value) ?? null,
152
- inputValue: list.filterText,
153
- onInputChange: list.setFilterText,
154
- items: listItems,
155
- isDisabled: disabled,
156
- menuTrigger: "focus",
151
+ placeholder,
157
152
  ...rest,
158
- children: [
159
- /* @__PURE__ */ jsx(
160
- BaseControl,
161
- {
162
- icon,
163
- label,
164
- subtitle,
165
- help,
166
- actions,
167
- labelAs: $01b77f81d0f07f68$export$b04be29aa201d4f5,
168
- inline,
169
- children: /* @__PURE__ */ jsxs(
153
+ children: /* @__PURE__ */ jsxs(
154
+ BaseControl,
155
+ {
156
+ label,
157
+ icon,
158
+ subtitle,
159
+ actions,
160
+ help,
161
+ inline,
162
+ labelAs: $01b77f81d0f07f68$export$b04be29aa201d4f5,
163
+ children: [
164
+ /* @__PURE__ */ jsxs(
170
165
  "div",
171
166
  {
172
167
  className: clsx(
173
- "es:relative es:flex es:max-w-80 es:items-center es:gap-1 es:p-1 es:focus-visible:outline-hidden es:focus-visible:ring-2 es:focus-visible:ring-accent-500/50",
168
+ "es:relative es:flex es:items-center es:gap-1 es:px-1.5 es:focus-visible:outline-hidden es:focus-visible:ring-2 es:focus-visible:ring-accent-500/50",
174
169
  "es:h-9 es:rounded-10 es:border es:border-secondary-300 es:bg-white es:text-sm es:shadow-sm es:transition",
170
+ "es:inset-ring es:inset-ring-secondary-100",
175
171
  "es:any-focus:outline-hidden",
172
+ !noMinWidth && "es:min-w-48",
176
173
  !inline && "es:w-full",
177
- disabled && "es:select-none",
178
- "es:has-[[aria-haspopup=listbox][data-focus-visible=true],[aria-autocomplete=list][data-focus-visible=true]]:border-accent-500 es:has-[[aria-haspopup=listbox][data-focus-visible=true],[aria-autocomplete=list][data-focus-visible=true]]:ring-2 es:has-[[aria-haspopup=listbox][data-focus-visible=true],[aria-autocomplete=list][data-focus-visible=true]]:ring-accent-500/50"
174
+ disabled && "es:select-none es:shadow-none!",
175
+ "es:has-[[aria-haspopup=listbox][data-focus-visible=true],[aria-autocomplete=list][data-focus-visible=true]]:border-accent-500 es:has-[[aria-haspopup=listbox][data-focus-visible=true],[aria-autocomplete=list][data-focus-visible=true]]:ring-2 es:has-[[aria-haspopup=listbox][data-focus-visible=true],[aria-autocomplete=list][data-focus-visible=true]]:ring-accent-500/50",
176
+ className
179
177
  ),
180
178
  ref,
181
179
  children: [
182
- /* @__PURE__ */ jsx(
183
- $3985021b0ad6602f$export$f5b8910cec6cf069,
184
- {
185
- className: clsx(
186
- "es:peer es:h-6 es:w-full es:grow es:rounded-sm es:p-1 es:pr-6 es:text-sm es:text-transparent es:transition",
187
- "es:focus:text-current es:any-focus:outline-hidden",
188
- "es:selection:bg-accent-500/20 es:selection:text-accent-950",
189
- disabled && "es:bg-transparent es:text-secondary-400 es:selection:bg-transparent es:selection:text-transparent"
190
- ),
191
- placeholder: placeholder ?? __("Select...", "eightshift-ui-components")
192
- }
193
- ),
194
- value && /* @__PURE__ */ jsxs(
195
- "div",
196
- {
197
- className: clsx(
198
- "es:pointer-events-none es:absolute es:bottom-0 es:left-2 es:top-0 es:my-auto es:flex es:select-none es:items-center es:overflow-hidden",
199
- "es:has-[svg]:left-1 es:peer-data-[focused=true]:invisible es:peer-disabled:opacity-40",
200
- clearable ? "es:right-16" : "es:right-6"
201
- ),
202
- children: [
203
- customValueDisplay && customValueDisplay(value),
204
- !customValueDisplay && /* @__PURE__ */ jsx(
205
- RichLabel,
206
- {
207
- icon: getIcon(value),
208
- label: value == null ? void 0 : value.label,
209
- subtitle: value == null ? void 0 : value.subtitle,
210
- className: "es:[&_span]:overflow-hidden es:[&_span]:text-ellipsis es:[&_span]:text-nowrap"
211
- }
212
- )
213
- ]
214
- }
215
- ),
216
- clearable && /* @__PURE__ */ jsx(ClearButton, { disabled }),
217
- /* @__PURE__ */ jsx($d2b4bc8c273e7be6$export$353f5b6fc5456de1, { className: clsx("es:group es:absolute es:bottom-0 es:right-0 es:top-0 es:my-auto es:size-6", disabled ? "es:text-secondary-300" : "es:text-secondary-500"), children: cloneElement(icons.dropdownCaretAlt, {
218
- className: "es:w-4 es:group-aria-expanded:-scale-y-100 es:transition-transform es:duration-200",
219
- "aria-hidden": true
220
- }) })
180
+ /* @__PURE__ */ jsxs($d2b4bc8c273e7be6$export$353f5b6fc5456de1, { className: "es:any-focus:outline-hidden es:text-start es:size-full es:inline-block es:group es:overflow-x-clip", children: [
181
+ /* @__PURE__ */ jsx($82d7e5349645de74$export$e288731fd71264f0, { children: ({ selectedItem }) => {
182
+ if (!value?.value) {
183
+ return /* @__PURE__ */ jsx("span", { className: "es:pointer-events-none es:pr-6 es:text-sm es:text-secondary-500", children: placeholder });
184
+ }
185
+ if (customValueDisplay) {
186
+ return customValueDisplay(selectedItem);
187
+ }
188
+ let icon2 = getIcon ? getIcon(selectedItem) : selectedItem?.icon ?? null;
189
+ if (typeof selectedItem?.icon === "string") {
190
+ icon2 = icons?.[selectedItem.icon] ?? null;
191
+ }
192
+ return /* @__PURE__ */ jsx(
193
+ RichLabel,
194
+ {
195
+ icon: icon2,
196
+ label: /* @__PURE__ */ jsx("span", { className: "es:line-clamp-1", children: selectedItem?.label }),
197
+ subtitle: /* @__PURE__ */ jsx("span", { className: "es:line-clamp-1", children: selectedItem?.subtitle }),
198
+ className: clsx("es:pr-6 es:grow es:w-full", disabled && "es:grayscale es:pointer-events-none"),
199
+ iconClassName: "es:pointer-events-none es:select-none"
200
+ }
201
+ );
202
+ } }),
203
+ /* @__PURE__ */ jsxs(
204
+ "div",
205
+ {
206
+ className: clsx("es:absolute es:bottom-0 es:right-1 es:top-0 es:my-auto es:flex es:items-center", disabled ? "es:text-secondary-300" : "es:text-secondary-500"),
207
+ "aria-hidden": "true",
208
+ children: [
209
+ !customDropdownArrow && cloneElement(icons.dropdownCaretAlt, {
210
+ className: "es:w-4 es:group-aria-expanded:-scale-y-100 es:transition-transform es:duration-200"
211
+ }),
212
+ customDropdownArrow && /* @__PURE__ */ jsx(
213
+ "div",
214
+ {
215
+ "aria-hidden": "true",
216
+ className: "es:group-aria-expanded:-scale-y-100 es:transition-transform es:duration-200",
217
+ children: customDropdownArrow
218
+ }
219
+ )
220
+ ]
221
+ }
222
+ )
223
+ ] }),
224
+ clearable && /* @__PURE__ */ jsx(SelectClearButton, {})
221
225
  ]
222
226
  }
223
- )
224
- }
225
- ),
226
- /* @__PURE__ */ jsxs(
227
- $07b14b47974efb58$export$5b6b19405a83ff9d,
228
- {
229
- className: ({ isEntering, isExiting }) => clsx(
230
- "es:flex es:w-80 es:min-w-9 es:max-w-80 es:flex-col es:overflow-x-hidden es:rounded-lg es:border es:border-secondary-200 es:bg-white es:text-sm es:shadow-lg",
231
- "es:any-focus:outline-hidden",
232
- isEntering && "es:motion-safe:motion-preset-slide-down-sm es:motion-safe:motion-duration-300 es:motion-reduce:motion-preset-fade-md",
233
- isExiting && "es:not-motion-reduce:motion-translate-y-out-[-2.5%] es:motion-opacity-out-0 es:motion-duration-200"
234
227
  ),
235
- placement: "bottom left",
236
- triggerRef: ref,
237
- children: [
238
- !list.isLoading && list.items.length > 0 && /* @__PURE__ */ jsx($eed445e0843c11d0$export$41f133550aa26f48, { className: "es:space-y-0.5 es:p-1 es:any-focus:outline-hidden", children: (item) => {
239
- return /* @__PURE__ */ jsxs(
240
- OptionItemBase,
228
+ /* @__PURE__ */ jsx(
229
+ $07b14b47974efb58$export$5b6b19405a83ff9d,
230
+ {
231
+ className: ({ isEntering, isExiting }) => clsx(
232
+ "es:flex es:w-76 es:min-w-9 es:max-w-76 es:flex-col es:overflow-hidden es:rounded-2xl es:border es:border-secondary-200 es:bg-white es:text-sm es:shadow-xl es:inset-ring es:inset-ring-secondary-100",
233
+ "es:any-focus:outline-hidden",
234
+ "es:motion-safe:motion-duration-200 es:motion-safe:motion-ease-spring-bouncy",
235
+ "es:placement-bottom:origin-top-left es:placement-top:origin-bottom-left",
236
+ "es:placement-left:origin-right es:placement-right:origin-left",
237
+ isEntering && "es:motion-safe:motion-scale-in-95 es:motion-opacity-in-0",
238
+ isEntering && "es:motion-safe:placement-top:motion-translate-y-in-[5%] es:motion-safe:placement-bottom:motion-translate-y-in-[-5%] es:motion-safe:placement-left:motion-translate-x-in-[5%] es:motion-safe:placement-right:motion-translate-x-in-[-5%]",
239
+ isExiting && "es:motion-safe:motion-scale-out-95 es:motion-opacity-out-0",
240
+ isExiting && "es:motion-safe:placement-top:motion-translate-y-out-[5%] es:motion-safe:placement-bottom:motion-translate-y-out-[-5%] es:motion-safe:placement-left:motion-translate-x-out-[5%] es:motion-safe:placement-right:motion-translate-x-out-[-5%]"
241
+ ),
242
+ placement: "bottom left",
243
+ triggerRef: ref,
244
+ children: /* @__PURE__ */ jsxs(
245
+ $d2f53cda644affe3$export$2f2b9559550c7bbc,
241
246
  {
242
- id: item.value,
243
- className: item == null ? void 0 : item.className,
247
+ inputValue: list.filterText,
248
+ onInputChange: list.setFilterText,
244
249
  children: [
245
- customMenuOption && customMenuOption(item),
246
- !customMenuOption && /* @__PURE__ */ jsx(
247
- RichLabel,
250
+ /* @__PURE__ */ jsxs(
251
+ $440f4836bcb56932$export$b94867ecbd698f21,
252
+ {
253
+ "aria-label": __("Search", "eightshift-ui-components"),
254
+ className: "es:flex es:items-center es:bg-secondary-100 es:m-2 es:rounded-lg es:relative es:placeholder:text-secondary-500",
255
+ autoFocus: true,
256
+ children: [
257
+ /* @__PURE__ */ jsx(
258
+ $3985021b0ad6602f$export$f5b8910cec6cf069,
259
+ {
260
+ placeholder: __("Search...", "eightshift-ui-components"),
261
+ className: "es:peer es:size-full es:h-9 es:outline-hidden es:shadow-none es:px-2.5 es:text-sm es:py-0 es:[&::-webkit-search-cancel-button]:hidden"
262
+ }
263
+ ),
264
+ /* @__PURE__ */ jsx(
265
+ $d2b4bc8c273e7be6$export$353f5b6fc5456de1,
266
+ {
267
+ "aria-label": __("Clear", "eightshift-ui-components"),
268
+ className: clsx(
269
+ "es:absolute es:right-2 es:top-0 es:bottom-0 es:my-auto",
270
+ "es:flex es:size-6 es:items-center es:justify-center es:rounded es:text-sm es:text-secondary-600 es:transition es:hover:bg-red-50 es:hover:text-red-900 es:any-focus:outline-hidden es:focus:ring-2 es:focus:ring-accent-500/50 es:disabled:text-secondary-300 es:cursor-pointer",
271
+ "es:peer-placeholder-shown:opacity-0"
272
+ ),
273
+ children: icons.clearAlt
274
+ }
275
+ )
276
+ ]
277
+ }
278
+ ),
279
+ /* @__PURE__ */ jsx("div", { className: "es:w-full es:h-px es:bg-secondary-200 es:shrink-0" }),
280
+ list.isLoading && /* @__PURE__ */ jsx("div", { className: "es:p-3 es:min-h-16 es:flex es:items-center es:justify-center", children: cloneElement(icons.loader, { className: "es:text-accent-600! es:size-5.5 es:motion-preset-spin es:motion-duration-1500" }) }),
281
+ /* @__PURE__ */ jsx(
282
+ $eed445e0843c11d0$export$41f133550aa26f48,
248
283
  {
249
- icon: (item == null ? void 0 : item.icon) ?? getIcon(item),
250
- label: item == null ? void 0 : item.label,
251
- subtitle: item.subtitle
284
+ className: clsx("es:space-y-0.5 es:p-1 es:any-focus:outline-hidden es:overflow-y-auto es:max-h-72", list.isLoading && "es:hidden"),
285
+ items: list.items,
286
+ renderEmptyState: () => /* @__PURE__ */ jsx(
287
+ RichLabel,
288
+ {
289
+ icon: icons.searchEmpty,
290
+ label: __("No results", "eightshift-ui-components"),
291
+ subtitle: __("Try a different search term", "eightshift-ui-components"),
292
+ className: "es:min-h-14 es:p-2 es:w-fit es:mx-auto es:motion-preset-slide-up es:motion-ease-spring-bouncy es:motion-duration-200",
293
+ iconClassName: "es:text-accent-700 es:icon:size-7!",
294
+ noColor: true
295
+ }
296
+ ),
297
+ children: (item) => {
298
+ let icon2 = getIcon ? getIcon(item) : item?.icon ?? null;
299
+ if (typeof item?.icon === "string") {
300
+ icon2 = icons?.[item.icon] ?? null;
301
+ }
302
+ return /* @__PURE__ */ jsxs(
303
+ OptionItemBase,
304
+ {
305
+ id: item.value,
306
+ className: item?.className,
307
+ children: [
308
+ customMenuOption && customMenuOption(item),
309
+ !customMenuOption && /* @__PURE__ */ jsx(
310
+ RichLabel,
311
+ {
312
+ icon: icon2,
313
+ label: item?.label,
314
+ subtitle: item.subtitle,
315
+ noColor: true
316
+ }
317
+ )
318
+ ]
319
+ }
320
+ );
321
+ }
252
322
  }
253
323
  )
254
324
  ]
255
325
  }
256
- );
257
- } }),
258
- list.isLoading && cloneElement(icons.loader, { className: "es:mx-auto es:my-4 es:animate-spin es:size-5.5 es:text-accent-700" }),
259
- !list.isLoading && list.items.length === 0 && /* @__PURE__ */ jsx("div", { className: "es:flex es:p-2", children: /* @__PURE__ */ jsxs(
260
- $514c0188e459b4c0$export$5f1af8db9871e1d6,
261
- {
262
- slot: "errorMessage",
263
- className: clsx("es:flex es:w-full es:items-center es:gap-1 es:rounded es:text-amber-950"),
264
- children: [
265
- icons.searchEmpty,
266
- __("Nothing found", "eightshift-ui-components")
267
- ]
268
- }
269
- ) })
270
- ]
271
- }
272
- )
273
- ]
326
+ )
327
+ }
328
+ )
329
+ ]
330
+ }
331
+ )
274
332
  }
275
333
  );
276
334
  };
277
- const ClearButton = ({ disabled }) => {
278
- const state = useContext($d01f2c01039c0eec$export$c02625b26074192c);
279
- const isEmpty = (state == null ? void 0 : state.selectedKey) === null || (state == null ? void 0 : state.inputValue) === "";
335
+ const SelectClearButton = () => {
336
+ const state = useContext($82d7e5349645de74$export$ef445b55be0601bd);
337
+ const isEmpty = state?.selectedKey === null;
280
338
  return /* @__PURE__ */ jsx(
281
339
  $d2b4bc8c273e7be6$export$353f5b6fc5456de1,
282
340
  {
283
341
  "aria-label": __("Clear value", "eightshift-ui-components"),
284
342
  className: clsx(
285
- "es:mr-7 es:flex es:h-6 es:w-8 es:items-center es:justify-center es:rounded es:text-sm es:text-secondary-600 es:transition es:hover:bg-red-50 es:hover:text-red-900 es:any-focus:outline-hidden es:focus:ring-2 es:focus:ring-accent-500/50 es:disabled:text-secondary-300 es:cursor-pointer",
343
+ "es:mr-6 es:flex es:h-6 es:w-8 es:items-center es:justify-center es:rounded es:text-sm es:text-secondary-600 es:transition es:hover:bg-red-50 es:hover:text-red-900 es:any-focus:outline-hidden es:focus:ring-2 es:focus:ring-accent-500/50 es:disabled:text-secondary-300 es:cursor-pointer",
286
344
  isEmpty ? "es:hidden" : "es:flex"
287
345
  ),
288
- onPress: () => state == null ? void 0 : state.setSelectedKey(null),
346
+ onPress: () => state?.setSelectedKey(null),
289
347
  slot: null,
290
- isDisabled: disabled || isEmpty,
291
348
  children: icons.clearAlt
292
349
  }
293
350
  );
294
351
  };
295
352
  export {
296
- __ExperimentalAsyncSelect
353
+ AsyncSelectNext
297
354
  };
@@ -1,24 +1,33 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { a as $eed445e0843c11d0$export$a11e76429ed99b4 } from "../../../ListBox-_nDFq8-H.js";
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { a as $eed445e0843c11d0$export$a11e76429ed99b4 } from "../../../ListBox-BY3gwI8c.js";
3
3
  import { c as clsx } from "../../../utils-CZt7LCbO.js";
4
- const OptionItemBase = (props) => {
5
- var _a;
6
- return /* @__PURE__ */ jsx(
7
- $eed445e0843c11d0$export$a11e76429ed99b4,
8
- {
9
- ...props,
10
- textValue: (_a = props == null ? void 0 : props.value) == null ? void 0 : _a.label,
11
- className: clsx(
12
- "es:flex es:min-h-9 es:select-none es:items-center es:gap-1 es:rounded es:p-2 es:transition",
13
- "es:any-focus:outline-hidden",
14
- "es:hover:bg-secondary-100 es:hover:outline-hidden",
15
- "selected:es:bg-accent-600/15 selected:es:text-accent-950",
16
- "es:focus-visible:bg-secondary-100 es:focus-visible:outline-hidden",
17
- "es:active:bg-accent-700/15"
18
- )
19
- }
20
- );
21
- };
4
+ const OptionItemBase = (props) => /* @__PURE__ */ jsxs(
5
+ $eed445e0843c11d0$export$a11e76429ed99b4,
6
+ {
7
+ ...props,
8
+ textValue: props?.value?.label,
9
+ className: "es:group es:any-focus:outline-hidden es:motion-preset-slide-down es:motion-ease-spring-bouncy es:motion-duration-200",
10
+ children: [
11
+ props.extraPre,
12
+ /* @__PURE__ */ jsx(
13
+ "div",
14
+ {
15
+ className: clsx(
16
+ "es:flex es:min-h-9 es:select-none es:items-center es:gap-1 es:rounded-xl es:px-2 es:py-1.5 es:transition es:scroll-m-1",
17
+ "es:group-any-focus:outline-hidden es:overflow-clip",
18
+ "es:group-not-selected:hover:bg-secondary-100 es:group-not-selected:hover:outline-hidden",
19
+ "es:group-selected:bg-accent-600/15 es:group-selected:text-accent-950",
20
+ "es:group-selected:group-focus-visible:inset-ring es:group-selected:group-focus-visible:inset-ring-accent-600/30",
21
+ "es:group-not-selected:group-focus-visible:bg-secondary-100 es:group-not-selected:group-focus-visible:outline-hidden",
22
+ "es:group-active:bg-accent-700/15"
23
+ ),
24
+ children: props.children
25
+ }
26
+ ),
27
+ props.extraAfter
28
+ ]
29
+ }
30
+ );
22
31
  export {
23
32
  OptionItemBase
24
33
  };