@eightshift/ui-components 5.6.0 → 6.0.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 (150) hide show
  1. package/dist/{Button-BhEIfWLY.js → Button-BXjXzdW_.js} +13 -13
  2. package/dist/{Dialog-B8p4Ymh7.js → Dialog-D8bjn-nh.js} +404 -77
  3. package/dist/{FieldError-B8BgFmIQ.js → FieldError-DwBG6m1U.js} +2 -2
  4. package/dist/{FocusScope-B5vxRkHm.js → FocusScope-BMk5oZCk.js} +8 -8
  5. package/dist/{Heading-B5aEynOM.js → Heading-BmRX4BRL.js} +3 -3
  6. package/dist/{Hidden-rE6uR-lr.js → Hidden-Rfj-STx7.js} +4 -4
  7. package/dist/{Input-8yja_IHC.js → Input-CNNksOWg.js} +11 -11
  8. package/dist/{Label-DWVaNd2E.js → Label-D8a3eYb-.js} +4 -4
  9. package/dist/{List-Bll1lQEW.js → List-BGHOoFf0.js} +8 -8
  10. package/dist/{ListBox-CEpKw7yC.js → ListBox-Dd37zMvs.js} +40 -41
  11. package/dist/{OverlayArrow-DDfa8khI.js → OverlayArrow-DokC40S3.js} +6 -6
  12. package/dist/{PortalProvider---wyKpMr.js → PortalProvider-CHPnqDSH.js} +2 -2
  13. package/dist/RadioGroup-BVFvITWO.js +371 -0
  14. package/dist/{SearchField-D6mPli0i.js → SearchField-CHYnN-jt.js} +16 -16
  15. package/dist/{SelectionManager-D77bfEbg.js → SelectionManager-N8X7T_4D.js} +44 -46
  16. package/dist/{SharedElementTransition-BjRNHsjx.js → SharedElementTransition-BDT84GtD.js} +3 -3
  17. package/dist/{Slider-DfU6bRtH.js → Slider-CL5CM9S8.js} +23 -23
  18. package/dist/{Text-AxKZjtFm.js → Text-ztX6G1zR.js} +3 -3
  19. package/dist/{VisuallyHidden-CgnIuZJ2.js → VisuallyHidden-DTUuKFiI.js} +4 -4
  20. package/dist/assets/style-admin.css +12156 -2
  21. package/dist/assets/style-editor.css +12156 -2
  22. package/dist/assets/style.css +12162 -2
  23. package/dist/assets/wp-overrides/allow-full-width-blocks.css +6 -0
  24. package/dist/assets/wp-overrides/fix-label-text-case.css +29 -0
  25. package/dist/assets/wp-overrides/increase-sidebar-width.css +4 -0
  26. package/dist/assets/wp-overrides/make-block-messages-nicer.css +155 -0
  27. package/dist/assets/wp-overrides/replace-fonts.css +8 -0
  28. package/dist/assets/wp-overrides/restyle-tooltips.css +194 -0
  29. package/dist/assets/wp-overrides/round-corners.css +200 -0
  30. package/dist/assets/wp-overrides/unify-button-sizes.css +5 -0
  31. package/dist/clsx-DgYk2OaC.js +16 -0
  32. package/dist/{Color-WxFE7lQB.js → color-swatch-CFIuSPcO.js} +124 -6
  33. package/dist/components/animated-visibility/animated-visibility.js +25 -17
  34. package/dist/components/base-control/base-control.js +8 -5
  35. package/dist/components/base-control/container.js +204 -0
  36. package/dist/components/breakpoint-preview/breakpoint-preview.js +0 -1
  37. package/dist/components/button/button.js +249 -155
  38. package/dist/components/checkbox/checkbox.js +96 -37
  39. package/dist/components/color-pickers/color-picker.js +16 -7
  40. package/dist/components/color-pickers/color-swatch.js +5 -57
  41. package/dist/components/color-pickers/gradient-editor.js +161 -138
  42. package/dist/components/color-pickers/solid-color-picker.js +308 -206
  43. package/dist/components/component-toggle/component-toggle.js +12 -8
  44. package/dist/components/container-panel/container-panel.js +54 -31
  45. package/dist/components/draggable/draggable-handle.js +8 -7
  46. package/dist/components/draggable/draggable.js +2 -2
  47. package/dist/components/draggable-list/draggable-list-item.js +21 -12
  48. package/dist/components/draggable-list/draggable-list.js +19 -21
  49. package/dist/components/expandable/expandable.js +56 -28
  50. package/dist/components/index.js +7 -21
  51. package/dist/components/input-field/input-field.js +112 -35
  52. package/dist/components/item-collection/item-collection.js +1 -1
  53. package/dist/components/link-input/link-input.js +181 -121
  54. package/dist/components/matrix-align/matrix-align.js +54 -21
  55. package/dist/components/menu/menu.js +26 -34
  56. package/dist/components/modal/modal.js +31 -28
  57. package/dist/components/notice/notice.js +45 -28
  58. package/dist/components/number-picker/number-picker.js +151 -101
  59. package/dist/components/option-select/option-select.js +40 -4
  60. package/dist/components/options-panel/options-panel.js +52 -25
  61. package/dist/components/placeholders/file-picker-shell.js +10 -10
  62. package/dist/components/placeholders/file-placeholder.js +14 -6
  63. package/dist/components/placeholders/image-placeholder.js +14 -4
  64. package/dist/components/placeholders/media-placeholder.js +11 -4
  65. package/dist/components/popover/popover.js +14 -11
  66. package/dist/components/portal-provider/portal-provider.js +1 -1
  67. package/dist/components/radio/radio.js +118 -429
  68. package/dist/components/repeater/repeater-item.js +7 -10
  69. package/dist/components/repeater/repeater.js +9 -15
  70. package/dist/components/responsive/mini-responsive.js +53 -62
  71. package/dist/components/responsive/responsive-legacy.js +1 -2
  72. package/dist/components/responsive/responsive.js +27 -28
  73. package/dist/components/responsive-preview/responsive-preview.js +1 -2
  74. package/dist/components/rich-label/rich-label.js +5 -5
  75. package/dist/components/select/async-multi-select.js +467 -100
  76. package/dist/components/select/{v2/async-select.js → async-select.js} +182 -106
  77. package/dist/components/select/multi-select.js +437 -83
  78. package/dist/components/select/shared.js +14 -42
  79. package/dist/components/select/single-select.js +349 -54
  80. package/dist/components/slider/column-config-slider.js +138 -45
  81. package/dist/components/slider/slider.js +265 -205
  82. package/dist/components/slider/utils.js +32 -1
  83. package/dist/components/smart-image/smart-image.js +27 -6
  84. package/dist/components/smart-image/worker-inline.js +1 -1
  85. package/dist/components/spacer/spacer.js +2 -2
  86. package/dist/components/tabs/tabs.js +370 -101
  87. package/dist/components/toggle/switch.js +174 -39
  88. package/dist/components/toggle/toggle.js +6 -3
  89. package/dist/components/toggle-button/toggle-button.js +140 -56
  90. package/dist/components/tooltip/tooltip.js +27 -26
  91. package/dist/{context-DMOmz986.js → context-BQvmiUqb.js} +3 -3
  92. package/dist/{default-i18n-DBm-GqWM.js → default-i18n-CnQeC5Pl.js} +10 -10
  93. package/dist/{general-6STKQIrk.js → general-B6pOveVp.js} +13 -12
  94. package/dist/icons/icons.js +28 -9
  95. package/dist/icons/jsx-svg.js +1 -1
  96. package/dist/icons/spinner.js +3 -1
  97. package/dist/{index-Dq3gT5pW.js → index-BHpUy2Ix.js} +1 -1
  98. package/dist/{index-DjyEH0Gg.js → index-oFgxU4zs.js} +6 -4
  99. package/dist/index.js +6 -20
  100. package/dist/proxy-0B6wWuDe.js +7409 -0
  101. package/dist/{react-jsx-parser.min-VUl-CuCv.js → react-jsx-parser.min-B_hvYYa1.js} +5 -5
  102. package/dist/{Select-CHzjZxXy.js → shared-DwjRce5e.js} +170 -36
  103. package/dist/{textSelection-DbCKqaw8.js → textSelection-CwHUtNVX.js} +1 -1
  104. package/dist/{useButton-B2EaQJT_.js → useButton-DdZrS1Kz.js} +3 -3
  105. package/dist/{useEvent-BifIGnVS.js → useEvent-BD7Olibq.js} +1 -1
  106. package/dist/{useFilter-BPcJ-Jzv.js → useFilter-bhxeEDg8.js} +1 -1
  107. package/dist/{useFocusRing-Cgm0R4Cf.js → useFocusRing-D3b7Kh4P.js} +1 -1
  108. package/dist/{useFormReset-yV9VVy9R.js → useFormReset-WUv2PdFO.js} +1 -1
  109. package/dist/{useFormValidation-CeNsUGWK.js → useFormValidation-DQeXkyLm.js} +2 -2
  110. package/dist/{useHover-BRDW3y7-.js → useHover-Bycb7BsD.js} +7 -7
  111. package/dist/{useLabel-C8umX0gk.js → useLabel-Bnv4-T24.js} +2 -2
  112. package/dist/{useLabels-Cdxi6JSa.js → useLabels-B49ptFDX.js} +1 -1
  113. package/dist/{useListState-DZycqxCn.js → useListState-ZKhRO8ML.js} +1 -1
  114. package/dist/{useLocalizedStringFormatter-eaZiN2tE.js → useLocalizedStringFormatter-NETP-8H8.js} +1 -1
  115. package/dist/{useNumberField-CEA9Q4w_.js → useNumberField-D2fUHql3.js} +10 -10
  116. package/dist/{useNumberFormatter-BCmkV-7c.js → useNumberFormatter-DGvuRCn7.js} +1 -1
  117. package/dist/{usePress-BCEPS3hl.js → usePress-B8OteQMu.js} +6 -6
  118. package/dist/{useSingleSelectListState-BFZEfeqI.js → useSingleSelectListState-BBTu4shO.js} +2 -2
  119. package/dist/{useToggle-DNoP2bvV.js → useToggle-BZhaYwZl.js} +4 -4
  120. package/dist/{useToggleState-CzN79ary.js → useToggleState-VkXJjsru.js} +1 -1
  121. package/dist/utilities/general.js +2 -2
  122. package/dist/utilities/hash.js +30 -0
  123. package/dist/utilities/index.js +4 -6
  124. package/dist/{utils-cvK1vxO7.js → utils-DGpXyJOJ.js} +29 -42
  125. package/dist/workers/image-analysis.worker.js +3 -3
  126. package/package.json +26 -23
  127. package/dist/ColorSwatch-xVS3rMYS.js +0 -66
  128. package/dist/Select-ef7c0426.esm-BJmjGGzK.js +0 -2474
  129. package/dist/Separator-DcqCdD4k.js +0 -344
  130. package/dist/_commonjsHelpers-BhWcALO8.js +0 -38
  131. package/dist/assets/wp-font-enhancements.css +0 -2
  132. package/dist/assets/wp-ui-enhancements.css +0 -2
  133. package/dist/components/select/async-single-select.js +0 -138
  134. package/dist/components/select/custom-select-default-components.js +0 -38
  135. package/dist/components/select/multi-select-components.js +0 -8
  136. package/dist/components/select/react-select-component-wrappers.js +0 -90
  137. package/dist/components/select/styles.js +0 -49
  138. package/dist/components/select/v2/async-multi-select.js +0 -433
  139. package/dist/components/select/v2/multi-select.js +0 -404
  140. package/dist/components/select/v2/shared.js +0 -69
  141. package/dist/components/select/v2/single-select.js +0 -358
  142. package/dist/index-641ee5b8.esm-DiwvO-RP.js +0 -3139
  143. package/dist/modifiers.esm-BuJQPI1X.js +0 -31
  144. package/dist/multi-select-components-B3KuDyYd.js +0 -3744
  145. package/dist/react-select-async.esm-_4pk-41v.js +0 -107
  146. package/dist/react-select.esm-BeuAkAyY.js +0 -15
  147. package/dist/sha256-C56UDWfQ.js +0 -533
  148. package/dist/useDragAndDrop-DUXKDS0N.js +0 -3925
  149. package/dist/wp/wp-font-enhancements.js +0 -1
  150. package/dist/wp/wp-ui-enhancements.js +0 -1
@@ -1,22 +1,22 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { _ as __ } from "../../../default-i18n-DBm-GqWM.js";
3
- import { BaseControl } from "../../base-control/base-control.js";
4
- import { $ as $d2f53cda644affe3$export$2f2b9559550c7bbc, a as $440f4836bcb56932$export$b94867ecbd698f21 } from "../../../SearchField-D6mPli0i.js";
5
- import { $ as $d2b4bc8c273e7be6$export$353f5b6fc5456de1 } from "../../../Button-BhEIfWLY.js";
6
- import { $ as $3985021b0ad6602f$export$f5b8910cec6cf069 } from "../../../Input-8yja_IHC.js";
7
- import { $ as $01b77f81d0f07f68$export$b04be29aa201d4f5 } from "../../../Label-DWVaNd2E.js";
8
- import { $ as $eed445e0843c11d0$export$41f133550aa26f48 } from "../../../ListBox-CEpKw7yC.js";
9
- import { e as $07b14b47974efb58$export$5b6b19405a83ff9d } from "../../../Dialog-B8p4Ymh7.js";
10
- import { $ as $82d7e5349645de74$export$ef9b1a59e592288f, a as $82d7e5349645de74$export$e288731fd71264f0, b as $82d7e5349645de74$export$ef445b55be0601bd } from "../../../Select-CHzjZxXy.js";
11
- import { useRef, useEffect, cloneElement, useContext } from "react";
12
- import { icons } from "../../../icons/icons.js";
13
- import "../../../react-jsx-parser.min-VUl-CuCv.js";
14
- import { OptionItemBase } from "./shared.js";
15
- import { RichLabel } from "../../rich-label/rich-label.js";
16
- import { unescapeHTML } from "../../../utilities/text-helpers.js";
17
- import "../../../sha256-C56UDWfQ.js";
18
- import { c as clsx } from "../../../utils-cvK1vxO7.js";
19
- import { $ as $f86e6c1ec7da6ebb$export$bc3384a35de93d66 } from "../../../useAsyncList-D52mQcrH.js";
2
+ import { _ as __ } from "../../default-i18n-CnQeC5Pl.js";
3
+ import { BaseControl } from "../base-control/base-control.js";
4
+ import { $ as $d2f53cda644affe3$export$2f2b9559550c7bbc, a as $440f4836bcb56932$export$b94867ecbd698f21 } from "../../SearchField-CHYnN-jt.js";
5
+ import { $ as $d2b4bc8c273e7be6$export$353f5b6fc5456de1 } from "../../Button-BXjXzdW_.js";
6
+ import { $ as $3985021b0ad6602f$export$f5b8910cec6cf069 } from "../../Input-CNNksOWg.js";
7
+ import { $ as $01b77f81d0f07f68$export$b04be29aa201d4f5 } from "../../Label-D8a3eYb-.js";
8
+ import { $ as $eed445e0843c11d0$export$41f133550aa26f48 } from "../../ListBox-Dd37zMvs.js";
9
+ import { $ as $07b14b47974efb58$export$5b6b19405a83ff9d } from "../../Dialog-D8bjn-nh.js";
10
+ import { $ as $82d7e5349645de74$export$ef9b1a59e592288f, a as $82d7e5349645de74$export$e288731fd71264f0, S as SelectClearButton, O as OptionItemBase } from "../../shared-DwjRce5e.js";
11
+ import { useRef, cloneElement } from "react";
12
+ import { icons } from "../../icons/icons.js";
13
+ import "../../react-jsx-parser.min-B_hvYYa1.js";
14
+ import { Spinner } from "../../icons/spinner.js";
15
+ import { RichLabel } from "../rich-label/rich-label.js";
16
+ import { unescapeHTML } from "../../utilities/text-helpers.js";
17
+ import { c as cva } from "../../index-BHpUy2Ix.js";
18
+ import { c as clsx } from "../../clsx-DgYk2OaC.js";
19
+ import { $ as $f86e6c1ec7da6ebb$export$bc3384a35de93d66 } from "../../useAsyncList-D52mQcrH.js";
20
20
  /**
21
21
  * Select menu with async loading.
22
22
  *
@@ -47,9 +47,14 @@ import { $ as $f86e6c1ec7da6ebb$export$bc3384a35de93d66 } from "../../../useAsyn
47
47
  * @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`
48
48
  * @param {JSX.Element} [props.customDropdownArrow] - If provided, replaces the default dropdown arrow indicator.
49
49
  * @param {string} props.className - Classes to pass to the select menu.
50
+ * @param {boolean} [props.flat] - If `true`, component will look more flat. Useful for nested layer of controls.
51
+ * @param {SelectSize} [props.size='default'] - Sets the size of the input field.
50
52
  * @param {boolean} [props.noMinWidth=false] - If `true`, the select menu will not have a minimum width.
53
+ * @param {string[]} [props.extraItemProps] - List of props to include to the option items.
51
54
  * @param {boolean} [props.hidden] - If `true`, the component is not rendered.
52
55
  *
56
+ * @typedef {'small' | 'medium' | 'default' | 'large'} SelectSize
57
+ *
53
58
  * @returns {JSX.Element} The AsyncSelectNext component.
54
59
  *
55
60
  * @example
@@ -66,7 +71,7 @@ import { $ as $f86e6c1ec7da6ebb$export$bc3384a35de93d66 } from "../../../useAsyn
66
71
  *
67
72
  * @preserve
68
73
  */
69
- const AsyncSelectNext = (props) => {
74
+ const AsyncSelect = (props) => {
70
75
  const {
71
76
  label,
72
77
  help,
@@ -93,12 +98,16 @@ const AsyncSelectNext = (props) => {
93
98
  getIcon,
94
99
  getSubtitle,
95
100
  getData = (data) => data,
101
+ extraItemProps,
96
102
  hidden,
103
+ flat,
104
+ size = "default",
97
105
  noMinWidth = false,
98
106
  ...rest
99
107
  } = props;
100
108
  const list = $f86e6c1ec7da6ebb$export$bc3384a35de93d66({
101
- getKey: (item) => item.value,
109
+ initialSelectedKeys: value?.value ? [value?.value] : [],
110
+ getKey: (item) => item?.value,
102
111
  async load({ signal, filterText }) {
103
112
  let json = [];
104
113
  if (fetchFunction) {
@@ -110,7 +119,7 @@ const AsyncSelectNext = (props) => {
110
119
  }
111
120
  const output = json?.map((item, index) => {
112
121
  const id = getValue?.(item) ?? index;
113
- const entry = { label: unescapeHTML(getLabel?.(item) ?? ""), value: id };
122
+ const entry = { ...item, label: unescapeHTML(getLabel?.(item) ?? ""), value: id };
114
123
  if (getMeta) {
115
124
  entry.meta = getMeta(item);
116
125
  }
@@ -119,51 +128,118 @@ const AsyncSelectNext = (props) => {
119
128
  }
120
129
  return entry;
121
130
  });
122
- if (value && value?.value && (filterText ?? "").length < 1 && output.length > 0 && !output?.find((item) => item.value === value?.value)) {
131
+ if (filterText.length > 0) {
123
132
  return {
124
- items: [value, ...output.slice(0, -1)],
125
- selectedKeys: [value?.value]
133
+ items: output
126
134
  };
127
135
  }
136
+ let extra = [];
137
+ if (value && !output?.find((item) => item.value === value?.value)) {
138
+ extra = [value];
139
+ output.pop();
140
+ }
128
141
  return {
129
- items: output
142
+ items: [...extra, ...output]
130
143
  };
131
144
  }
132
145
  });
133
146
  const ref = useRef();
134
- useEffect(() => {
135
- if (value?.value && !list.getItem(value?.value)) {
136
- list.items[0] = value;
137
- }
138
- list.setSelectedKeys(value?.value ? [value.value] : []);
139
- list.setFilterText("");
140
- }, [value?.value]);
141
147
  if (hidden) {
142
148
  return null;
143
149
  }
150
+ const selectClass = cva(
151
+ [
152
+ "es:relative",
153
+ "es:flex es:items-center es:gap-px",
154
+ "es:leading-none",
155
+ "es:rounded-lg es:hover:rounded-xl es:has-focus-visible:rounded-2xl es:group-open:rounded-2xl",
156
+ "es:transition-plus",
157
+ "es:any-focus:outline-hidden",
158
+ "es:inset-ring",
159
+ "es:has-focus-visible:ring-2 es:has-focus-visible:ring-accent-500/30",
160
+ "es:has-focus-visible:text-accent-950 es:has-focus-visible:inset-ring-accent-500",
161
+ clearable && "es:pr-8",
162
+ "es:focus:placeholder:text-surface-400",
163
+ !noMinWidth && "es:min-w-48",
164
+ !inline && "es:w-fill",
165
+ className
166
+ ],
167
+ {
168
+ variants: {
169
+ size: {
170
+ small: ["es:min-h-8", "es:px-2.5"],
171
+ medium: ["es:min-h-9", "es:px-3"],
172
+ default: ["es:min-h-10", "es:px-3"],
173
+ large: ["es:min-h-12", "es:px-4"]
174
+ },
175
+ disabled: {
176
+ false: "es:selection:bg-surface-100 es:selection:text-accent-800",
177
+ true: "es:selection:bg-secondary-200 es:selection:text-secondary-600"
178
+ }
179
+ },
180
+ compoundVariants: [
181
+ {
182
+ flat: false,
183
+ disabled: false,
184
+ class: [
185
+ "es:bg-white",
186
+ "es:bg-linear-to-b es:from-secondary-100/0 es:to-secondary-100/50 es:from-25%",
187
+ "es:hover:from-surface-100/0 es:hover:to-surface-100/50",
188
+ "es:inset-ring-secondary-400/50 es:hover:inset-ring-surface-300 es:focus:inset-ring-surface-400",
189
+ "es:inset-shadow-sm es:inset-shadow-secondary-100/50",
190
+ "es:hover:placeholder:text-surface-400",
191
+ "es:placeholder:text-secondary-400",
192
+ "es:shadow-xs es:shadow-black/5"
193
+ ]
194
+ },
195
+ {
196
+ flat: true,
197
+ disabled: false,
198
+ class: [
199
+ "es:inset-ring-secondary-100",
200
+ "es:focus:text-accent-950",
201
+ "es:placeholder:text-secondary-500/80",
202
+ "es:bg-secondary-100 es:focus:bg-surface-50",
203
+ "es:inset-ring-secondary-200/15 es:hover:inset-ring-secondary-200/65 es:focus:inset-ring-surface-200"
204
+ ]
205
+ },
206
+ { disabled: true, class: ["es:bg-secondary-50 es:inset-ring-secondary-200 es:text-secondary-400"] },
207
+ { readOnly: true, flat: false, class: ["es:bg-secondary-50 es:inset-ring-secondary-300 es:text-secondary-400"] },
208
+ { readOnly: true, flat: true, class: ["es:bg-secondary-50 es:inset-ring-secondary-300/60 es:text-secondary-400"] }
209
+ ],
210
+ defaultVariants: { disabled: false, flat: false, size: "default" }
211
+ }
212
+ );
213
+ const handleSelectionChange = (selected) => {
214
+ list.filterText = "";
215
+ if (selected === null || selected === void 0) {
216
+ onChange(null);
217
+ return;
218
+ }
219
+ const item = list.items.find((item2) => item2.value === selected);
220
+ if (!item) {
221
+ onChange(null);
222
+ return;
223
+ }
224
+ if (item && "id" in item) {
225
+ delete item.id;
226
+ }
227
+ onChange({
228
+ label: item?.label,
229
+ value: item?.value,
230
+ subtitle: item?.subtitle,
231
+ meta: item?.meta
232
+ });
233
+ };
144
234
  return /* @__PURE__ */ jsx(
145
235
  $82d7e5349645de74$export$ef9b1a59e592288f,
146
236
  {
147
237
  isDisabled: disabled,
148
- selectedKey: value?.value ?? null,
149
- onSelectionChange: (selected) => {
150
- list.filterText = "";
151
- if (selected === null || selected === void 0) {
152
- onChange(null);
153
- return;
154
- }
155
- const item = list.items.find((item2) => item2.value === selected);
156
- if (!item) {
157
- onChange(null);
158
- return;
159
- }
160
- if (item && "id" in item) {
161
- delete item.id;
162
- }
163
- onChange(item);
164
- },
238
+ value: value?.value ?? null,
239
+ onChange: (selected) => handleSelectionChange(selected),
165
240
  placeholder,
166
241
  ...rest,
242
+ className: clsx("es:group es:w-fill", rest?.className),
167
243
  children: /* @__PURE__ */ jsxs(
168
244
  BaseControl,
169
245
  {
@@ -178,27 +254,18 @@ const AsyncSelectNext = (props) => {
178
254
  /* @__PURE__ */ jsxs(
179
255
  "div",
180
256
  {
181
- className: clsx(
182
- "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",
183
- "es:h-9 es:rounded-10 es:border es:border-secondary-300 es:bg-white es:text-sm es:shadow-sm es:transition",
184
- "es:inset-ring es:inset-ring-secondary-100",
185
- "es:any-focus:outline-hidden",
186
- !noMinWidth && "es:min-w-48",
187
- !inline && "es:w-full",
188
- disabled && "es:select-none es:shadow-none!",
189
- "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",
190
- className
191
- ),
257
+ className: selectClass({ disabled, flat, size }),
192
258
  ref,
193
259
  children: [
194
260
  /* @__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: [
195
- /* @__PURE__ */ jsx($82d7e5349645de74$export$e288731fd71264f0, { children: ({ selectedItem }) => {
196
- if (!value?.value) {
197
- return /* @__PURE__ */ jsx("span", { className: "es:pointer-events-none es:pr-6 es:text-sm es:text-secondary-500", children: placeholder });
198
- }
199
- if (customValueDisplay) {
261
+ /* @__PURE__ */ jsx($82d7e5349645de74$export$e288731fd71264f0, { children: ({ isPlaceholder, selectedItems }) => {
262
+ const [selectedItem] = selectedItems;
263
+ if (!isPlaceholder && selectedItem && customValueDisplay) {
200
264
  return customValueDisplay(selectedItem);
201
265
  }
266
+ if (!selectedItem) {
267
+ return /* @__PURE__ */ jsx("span", { className: "es:select-none es:pointer-events-none es:text-sm es:text-surface-500", children: placeholder });
268
+ }
202
269
  let icon2 = getIcon ? getIcon(selectedItem) : selectedItem?.icon ?? null;
203
270
  if (typeof selectedItem?.icon === "string") {
204
271
  icon2 = icons?.[selectedItem.icon] ?? null;
@@ -207,21 +274,23 @@ const AsyncSelectNext = (props) => {
207
274
  RichLabel,
208
275
  {
209
276
  icon: icon2,
210
- label: /* @__PURE__ */ jsx("span", { className: "es:line-clamp-1", children: selectedItem?.label }),
211
- subtitle: /* @__PURE__ */ jsx("span", { className: "es:line-clamp-1", children: selectedItem?.subtitle }),
212
- className: clsx("es:pr-6 es:grow es:w-full", disabled && "es:grayscale es:pointer-events-none"),
213
- iconClassName: "es:pointer-events-none es:select-none"
277
+ label: selectedItem?.label,
278
+ subtitle: selectedItem?.subtitle,
279
+ className: clsx("es:grow es:w-full", disabled && "es:grayscale es:pointer-events-none"),
280
+ iconClassName: "es:pointer-events-none es:select-none",
281
+ labelClassName: "es:line-clamp-1",
282
+ subtitleClassName: "es:line-clamp-1"
214
283
  }
215
284
  );
216
285
  } }),
217
286
  /* @__PURE__ */ jsxs(
218
287
  "div",
219
288
  {
220
- 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"),
289
+ className: clsx("es:absolute es:bottom-0 es:right-3 es:top-0 es:my-auto es:flex es:items-center", disabled ? "es:text-secondary-300" : "es:text-secondary-500"),
221
290
  "aria-hidden": "true",
222
291
  children: [
223
- !customDropdownArrow && cloneElement(icons.dropdownCaretAlt, {
224
- className: "es:w-4 es:group-aria-expanded:-scale-y-100 es:transition-transform es:duration-200"
292
+ !customDropdownArrow && cloneElement(icons.dropdownCaret, {
293
+ className: "es:w-4 es:stroke-[1.2] es:group-aria-expanded:-scale-y-100 es:transition-transform es:duration-200"
225
294
  }),
226
295
  customDropdownArrow && /* @__PURE__ */ jsx(
227
296
  "div",
@@ -243,15 +312,27 @@ const AsyncSelectNext = (props) => {
243
312
  $07b14b47974efb58$export$5b6b19405a83ff9d,
244
313
  {
245
314
  className: ({ isEntering, isExiting }) => clsx(
246
- "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",
247
- "es:any-focus:outline-hidden",
248
- "es:motion-safe:motion-duration-200 es:motion-safe:motion-ease-spring-bouncy",
315
+ "es:w-(--trigger-width) es:min-w-72",
316
+ "es:outline-hidden",
317
+ "es:rounded-t-3xl",
318
+ "es:overflow-clip es:grid es:grid-cols-1",
319
+ "es:grid-rows-[auto_minmax(0,1fr)]",
320
+ "es:has-last-selected:rounded-b-20!",
321
+ "es:inset-ring es:inset-ring-surface-500/10",
322
+ "es:inset-shadow-sm es:inset-shadow-white/30",
323
+ !list?.items?.length ? "es:bg-surface-50/50" : "es:bg-surface-300/50",
324
+ !list?.items?.length ? "es:backdrop-blur-sm" : "es:backdrop-blur-md",
325
+ !list?.items?.length ? "es:backdrop-brightness-105" : "es:backdrop-brightness-110",
326
+ list.isLoading || !list?.items?.length ? "es:rounded-b-3xl" : "es:rounded-b-xl",
327
+ "es:backdrop-saturate-125",
328
+ "es:shadow-lg es:shadow-black/10",
329
+ "es:transition-plus",
330
+ "es:motion-duration-300 es:motion-ease-spring-bouncy",
249
331
  "es:placement-bottom:origin-top-left es:placement-top:origin-bottom-left",
250
- "es:placement-left:origin-right es:placement-right:origin-left",
251
- isEntering && "es:motion-safe:motion-scale-in-95 es:motion-opacity-in-0",
252
- 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%]",
253
- isExiting && "es:motion-safe:motion-scale-out-95 es:motion-opacity-out-0",
254
- 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%]"
332
+ isEntering && "es:motion-scale-x-in-95 es:motion-scale-y-in-85 es:motion-opacity-in-0 es:motion-blur-in-[2px]",
333
+ isEntering && "es:placement-top:motion-translate-y-in-[0.5rem] es:placement-bottom:motion-translate-y-in-[-0.5rem]",
334
+ isExiting && "es:motion-scale-x-out-95 es:motion-scale-y-out-85 es:motion-opacity-out-0 es:motion-blur-out-xs",
335
+ isExiting && "es:placement-top:motion-translate-y-out-[0.5rem] es:placement-bottom:motion-translate-y-out-[-0.5rem]"
255
336
  ),
256
337
  placement: "bottom left",
257
338
  maxHeight: 300,
@@ -266,14 +347,19 @@ const AsyncSelectNext = (props) => {
266
347
  $440f4836bcb56932$export$b94867ecbd698f21,
267
348
  {
268
349
  "aria-label": __("Search", "eightshift-ui-components"),
269
- className: "es:flex es:items-center es:bg-secondary-100 es:m-2 es:rounded-lg es:relative es:placeholder:text-secondary-500",
270
- autoFocus: true,
350
+ className: "es:flex es:items-center es:relative",
271
351
  children: [
272
352
  /* @__PURE__ */ jsx(
273
353
  $3985021b0ad6602f$export$f5b8910cec6cf069,
274
354
  {
275
355
  placeholder: __("Search...", "eightshift-ui-components"),
276
- 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"
356
+ className: clsx(
357
+ "es:peer es:size-full es:h-9.5 es:outline-hidden es:pl-3.5 es:pr-9 es:shadow-none es:text-13 es:placeholder:text-surface-500 es:[&::-webkit-search-cancel-button]:hidden",
358
+ "es:bg-accent-900/8 es:m-1.5 es:rounded-3xl es:border-none",
359
+ "es:inset-ring es:inset-ring-accent-950/7 es:focus:inset-ring-accent-950/20",
360
+ "es:text-accent-950 es:placeholder:text-accent-700/50",
361
+ "es:transition"
362
+ )
277
363
  }
278
364
  ),
279
365
  /* @__PURE__ */ jsx(
@@ -281,8 +367,8 @@ const AsyncSelectNext = (props) => {
281
367
  {
282
368
  "aria-label": __("Clear", "eightshift-ui-components"),
283
369
  className: clsx(
284
- "es:absolute es:right-2 es:top-0 es:bottom-0 es:my-auto",
285
- "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",
370
+ "es:absolute es:right-3 es:top-0 es:bottom-0 es:my-auto es:border-none es:bg-transparent",
371
+ "es:flex es:size-7 es:items-center es:justify-center es:rounded-3xl es:text-sm es:text-surface-700 es:transition es:hover:bg-accent-50 es:hover:text-accent-800 es:any-focus:outline-hidden es:focus:ring-2 es:focus:ring-accent-500/50 es:disabled:text-secondary-300 es:cursor-pointer",
286
372
  "es:peer-placeholder-shown:opacity-0"
287
373
  ),
288
374
  children: icons.clearAlt
@@ -291,13 +377,17 @@ const AsyncSelectNext = (props) => {
291
377
  ]
292
378
  }
293
379
  ),
294
- /* @__PURE__ */ jsx("div", { className: "es:w-full es:h-px es:bg-secondary-200 es:shrink-0" }),
295
- 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 es:motion-preset-spin es:motion-duration-1500" }) }),
380
+ list.isLoading && /* @__PURE__ */ jsx("div", { className: "es:p-3 es:min-h-16 es:flex es:items-center es:justify-center", children: /* @__PURE__ */ jsx(Spinner, {}) }),
296
381
  /* @__PURE__ */ jsx(
297
382
  $eed445e0843c11d0$export$41f133550aa26f48,
298
383
  {
299
- className: clsx("es:space-y-0.5 es:p-1 es:any-focus:outline-hidden es:min-h-16", list.isLoading && "es:hidden", list?.items?.length > 0 && "es:overflow-y-auto"),
384
+ className: clsx("es:space-y-0.75 es:p-1.5 es:pt-0 es:any-focus:outline-hidden es:h-full es:overflow-y-auto es:rounded-t-xl", list?.isLoading && "es:hidden"),
300
385
  items: list.items,
386
+ selectedKeys: list.selectedKeys,
387
+ onSelectionChange: (selected) => {
388
+ list.setSelectedKeys(selected);
389
+ handleSelectionChange(selected);
390
+ },
301
391
  renderEmptyState: () => /* @__PURE__ */ jsx(
302
392
  RichLabel,
303
393
  {
@@ -319,6 +409,7 @@ const AsyncSelectNext = (props) => {
319
409
  {
320
410
  id: item?.value,
321
411
  className: item?.className,
412
+ selectIndicator: true,
322
413
  children: [
323
414
  customMenuOption && customMenuOption(item),
324
415
  !customMenuOption && /* @__PURE__ */ jsx(
@@ -327,6 +418,8 @@ const AsyncSelectNext = (props) => {
327
418
  icon: icon2,
328
419
  label: item?.label,
329
420
  subtitle: item?.subtitle,
421
+ labelClassName: "es:line-clamp-1",
422
+ subtitleClassName: "es:line-clamp-1",
330
423
  noColor: true
331
424
  }
332
425
  )
@@ -347,23 +440,6 @@ const AsyncSelectNext = (props) => {
347
440
  }
348
441
  );
349
442
  };
350
- const SelectClearButton = () => {
351
- const state = useContext($82d7e5349645de74$export$ef445b55be0601bd);
352
- const isEmpty = state?.selectedKey === null;
353
- return /* @__PURE__ */ jsx(
354
- $d2b4bc8c273e7be6$export$353f5b6fc5456de1,
355
- {
356
- "aria-label": __("Clear value", "eightshift-ui-components"),
357
- className: clsx(
358
- "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",
359
- isEmpty ? "es:hidden" : "es:flex"
360
- ),
361
- onPress: () => state?.setSelectedKey(null),
362
- slot: null,
363
- children: icons.clearAlt
364
- }
365
- );
366
- };
367
443
  export {
368
- AsyncSelectNext
444
+ AsyncSelect
369
445
  };