@clickhouse/click-ui 0.10.0-rc1 → 0.10.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 (179) hide show
  1. package/dist/cjs/click-ui.css +6 -0
  2. package/dist/cjs/components/Assets/Flags/Austria.cjs +47 -0
  3. package/dist/cjs/components/Assets/Flags/Austria.cjs.map +1 -0
  4. package/dist/cjs/components/Assets/Flags/Bahrain.cjs +47 -0
  5. package/dist/cjs/components/Assets/Flags/Bahrain.cjs.map +1 -0
  6. package/dist/cjs/components/Assets/Flags/Belgium.cjs +62 -0
  7. package/dist/cjs/components/Assets/Flags/Belgium.cjs.map +1 -0
  8. package/dist/cjs/components/Assets/Flags/Canada.cjs +13 -21
  9. package/dist/cjs/components/Assets/Flags/Canada.cjs.map +1 -1
  10. package/dist/cjs/components/Assets/Flags/Chile.cjs +92 -0
  11. package/dist/cjs/components/Assets/Flags/Chile.cjs.map +1 -0
  12. package/dist/cjs/components/Assets/Flags/China.cjs +47 -0
  13. package/dist/cjs/components/Assets/Flags/China.cjs.map +1 -0
  14. package/dist/cjs/components/Assets/Flags/Denmark.cjs +54 -0
  15. package/dist/cjs/components/Assets/Flags/Denmark.cjs.map +1 -0
  16. package/dist/cjs/components/Assets/Flags/Finland.cjs +54 -0
  17. package/dist/cjs/components/Assets/Flags/Finland.cjs.map +1 -0
  18. package/dist/cjs/components/Assets/Flags/France.cjs +26 -17
  19. package/dist/cjs/components/Assets/Flags/France.cjs.map +1 -1
  20. package/dist/cjs/components/Assets/Flags/Greece.cjs +128 -0
  21. package/dist/cjs/components/Assets/Flags/Greece.cjs.map +1 -0
  22. package/dist/cjs/components/Assets/Flags/Indonesia.cjs +14 -14
  23. package/dist/cjs/components/Assets/Flags/Indonesia.cjs.map +1 -1
  24. package/dist/cjs/components/Assets/Flags/Ireland.cjs +10 -10
  25. package/dist/cjs/components/Assets/Flags/Ireland.cjs.map +1 -1
  26. package/dist/cjs/components/Assets/Flags/Italy.cjs +63 -0
  27. package/dist/cjs/components/Assets/Flags/Italy.cjs.map +1 -0
  28. package/dist/cjs/components/Assets/Flags/Malaysia.cjs +2 -2
  29. package/dist/cjs/components/Assets/Flags/Malaysia.cjs.map +1 -1
  30. package/dist/cjs/components/Assets/Flags/Mexico.cjs +8 -8
  31. package/dist/cjs/components/Assets/Flags/Mexico.cjs.map +1 -1
  32. package/dist/cjs/components/Assets/Flags/New-Zealand.cjs +553 -0
  33. package/dist/cjs/components/Assets/Flags/New-Zealand.cjs.map +1 -0
  34. package/dist/cjs/components/Assets/Flags/Norway.cjs +68 -0
  35. package/dist/cjs/components/Assets/Flags/Norway.cjs.map +1 -0
  36. package/dist/cjs/components/Assets/Flags/Poland.cjs +55 -0
  37. package/dist/cjs/components/Assets/Flags/Poland.cjs.map +1 -0
  38. package/dist/cjs/components/Assets/Flags/Qatar.cjs +47 -0
  39. package/dist/cjs/components/Assets/Flags/Qatar.cjs.map +1 -0
  40. package/dist/cjs/components/Assets/Flags/Saudi-Arabia.cjs +176 -0
  41. package/dist/cjs/components/Assets/Flags/Saudi-Arabia.cjs.map +1 -0
  42. package/dist/cjs/components/Assets/Flags/Singapore.cjs +12 -12
  43. package/dist/cjs/components/Assets/Flags/Singapore.cjs.map +1 -1
  44. package/dist/cjs/components/Assets/Flags/Spain.cjs +4447 -0
  45. package/dist/cjs/components/Assets/Flags/Spain.cjs.map +1 -0
  46. package/dist/cjs/components/Assets/Flags/Sweden.cjs +11 -11
  47. package/dist/cjs/components/Assets/Flags/Sweden.cjs.map +1 -1
  48. package/dist/cjs/components/Assets/Flags/Switzerland.cjs +30 -21
  49. package/dist/cjs/components/Assets/Flags/Switzerland.cjs.map +1 -1
  50. package/dist/cjs/components/Assets/Flags/Taiwan.cjs +5 -5
  51. package/dist/cjs/components/Assets/Flags/Taiwan.cjs.map +1 -1
  52. package/dist/cjs/components/Assets/Flags/Thailand.cjs +62 -0
  53. package/dist/cjs/components/Assets/Flags/Thailand.cjs.map +1 -0
  54. package/dist/cjs/components/Assets/Flags/United-Arab-Emirates.cjs +20 -20
  55. package/dist/cjs/components/Assets/Flags/United-Arab-Emirates.cjs.map +1 -1
  56. package/dist/cjs/components/Assets/Flags/United-States.cjs +2 -2
  57. package/dist/cjs/components/Assets/Flags/United-States.cjs.map +1 -1
  58. package/dist/cjs/components/Assets/Flags/system/FlagsDark.cjs +32 -0
  59. package/dist/cjs/components/Assets/Flags/system/FlagsDark.cjs.map +1 -1
  60. package/dist/cjs/components/Assets/Flags/system/FlagsLight.cjs +32 -0
  61. package/dist/cjs/components/Assets/Flags/system/FlagsLight.cjs.map +1 -1
  62. package/dist/cjs/components/DatePicker/Common.cjs +1 -1
  63. package/dist/cjs/components/DatePicker/Common.cjs.map +1 -1
  64. package/dist/cjs/components/DatePicker/DateRangePicker.cjs +1 -1
  65. package/dist/cjs/components/DatePicker/DateRangePicker.cjs.map +1 -1
  66. package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs +12 -8
  67. package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs.map +1 -1
  68. package/dist/cjs/components/DatePicker/utils.cjs +22 -6
  69. package/dist/cjs/components/DatePicker/utils.cjs.map +1 -1
  70. package/dist/cjs/components/GenericMenu/GenericMenu.css +2 -0
  71. package/dist/cjs/components/Select/common/InternalSelect.cjs +147 -193
  72. package/dist/cjs/components/Select/common/InternalSelect.cjs.map +1 -1
  73. package/dist/cjs/components/Select/common/SelectComponents.css +4 -0
  74. package/dist/cjs/components/Select/common/SelectComponents.module.css.cjs +1 -0
  75. package/dist/cjs/components/Select/common/SelectComponents.module.css.cjs.map +1 -1
  76. package/dist/esm/click-ui.css +6 -0
  77. package/dist/esm/components/Assets/Flags/Austria.js +43 -0
  78. package/dist/esm/components/Assets/Flags/Austria.js.map +1 -0
  79. package/dist/esm/components/Assets/Flags/Bahrain.js +43 -0
  80. package/dist/esm/components/Assets/Flags/Bahrain.js.map +1 -0
  81. package/dist/esm/components/Assets/Flags/Belgium.js +58 -0
  82. package/dist/esm/components/Assets/Flags/Belgium.js.map +1 -0
  83. package/dist/esm/components/Assets/Flags/Canada.js +13 -21
  84. package/dist/esm/components/Assets/Flags/Canada.js.map +1 -1
  85. package/dist/esm/components/Assets/Flags/Chile.js +88 -0
  86. package/dist/esm/components/Assets/Flags/Chile.js.map +1 -0
  87. package/dist/esm/components/Assets/Flags/China.js +43 -0
  88. package/dist/esm/components/Assets/Flags/China.js.map +1 -0
  89. package/dist/esm/components/Assets/Flags/Denmark.js +50 -0
  90. package/dist/esm/components/Assets/Flags/Denmark.js.map +1 -0
  91. package/dist/esm/components/Assets/Flags/Finland.js +50 -0
  92. package/dist/esm/components/Assets/Flags/Finland.js.map +1 -0
  93. package/dist/esm/components/Assets/Flags/France.js +26 -17
  94. package/dist/esm/components/Assets/Flags/France.js.map +1 -1
  95. package/dist/esm/components/Assets/Flags/Greece.js +124 -0
  96. package/dist/esm/components/Assets/Flags/Greece.js.map +1 -0
  97. package/dist/esm/components/Assets/Flags/Indonesia.js +14 -14
  98. package/dist/esm/components/Assets/Flags/Indonesia.js.map +1 -1
  99. package/dist/esm/components/Assets/Flags/Ireland.js +10 -10
  100. package/dist/esm/components/Assets/Flags/Ireland.js.map +1 -1
  101. package/dist/esm/components/Assets/Flags/Italy.js +59 -0
  102. package/dist/esm/components/Assets/Flags/Italy.js.map +1 -0
  103. package/dist/esm/components/Assets/Flags/Malaysia.js +2 -2
  104. package/dist/esm/components/Assets/Flags/Malaysia.js.map +1 -1
  105. package/dist/esm/components/Assets/Flags/Mexico.js +8 -8
  106. package/dist/esm/components/Assets/Flags/Mexico.js.map +1 -1
  107. package/dist/esm/components/Assets/Flags/New-Zealand.js +549 -0
  108. package/dist/esm/components/Assets/Flags/New-Zealand.js.map +1 -0
  109. package/dist/esm/components/Assets/Flags/Norway.js +64 -0
  110. package/dist/esm/components/Assets/Flags/Norway.js.map +1 -0
  111. package/dist/esm/components/Assets/Flags/Poland.js +51 -0
  112. package/dist/esm/components/Assets/Flags/Poland.js.map +1 -0
  113. package/dist/esm/components/Assets/Flags/Qatar.js +43 -0
  114. package/dist/esm/components/Assets/Flags/Qatar.js.map +1 -0
  115. package/dist/esm/components/Assets/Flags/Saudi-Arabia.js +172 -0
  116. package/dist/esm/components/Assets/Flags/Saudi-Arabia.js.map +1 -0
  117. package/dist/esm/components/Assets/Flags/Singapore.js +12 -12
  118. package/dist/esm/components/Assets/Flags/Singapore.js.map +1 -1
  119. package/dist/esm/components/Assets/Flags/Spain.js +4443 -0
  120. package/dist/esm/components/Assets/Flags/Spain.js.map +1 -0
  121. package/dist/esm/components/Assets/Flags/Sweden.js +11 -11
  122. package/dist/esm/components/Assets/Flags/Sweden.js.map +1 -1
  123. package/dist/esm/components/Assets/Flags/Switzerland.js +30 -21
  124. package/dist/esm/components/Assets/Flags/Switzerland.js.map +1 -1
  125. package/dist/esm/components/Assets/Flags/Taiwan.js +5 -5
  126. package/dist/esm/components/Assets/Flags/Taiwan.js.map +1 -1
  127. package/dist/esm/components/Assets/Flags/Thailand.js +58 -0
  128. package/dist/esm/components/Assets/Flags/Thailand.js.map +1 -0
  129. package/dist/esm/components/Assets/Flags/United-Arab-Emirates.js +20 -20
  130. package/dist/esm/components/Assets/Flags/United-Arab-Emirates.js.map +1 -1
  131. package/dist/esm/components/Assets/Flags/United-States.js +2 -2
  132. package/dist/esm/components/Assets/Flags/United-States.js.map +1 -1
  133. package/dist/esm/components/Assets/Flags/system/FlagsDark.js +34 -2
  134. package/dist/esm/components/Assets/Flags/system/FlagsDark.js.map +1 -1
  135. package/dist/esm/components/Assets/Flags/system/FlagsLight.js +34 -2
  136. package/dist/esm/components/Assets/Flags/system/FlagsLight.js.map +1 -1
  137. package/dist/esm/components/DatePicker/Common.js +2 -2
  138. package/dist/esm/components/DatePicker/Common.js.map +1 -1
  139. package/dist/esm/components/DatePicker/DateRangePicker.js +2 -2
  140. package/dist/esm/components/DatePicker/DateRangePicker.js.map +1 -1
  141. package/dist/esm/components/DatePicker/DateTimeRangePicker.js +13 -9
  142. package/dist/esm/components/DatePicker/DateTimeRangePicker.js.map +1 -1
  143. package/dist/esm/components/DatePicker/utils.js +20 -5
  144. package/dist/esm/components/DatePicker/utils.js.map +1 -1
  145. package/dist/esm/components/GenericMenu/GenericMenu.css +2 -0
  146. package/dist/esm/components/Select/common/InternalSelect.js +148 -194
  147. package/dist/esm/components/Select/common/InternalSelect.js.map +1 -1
  148. package/dist/esm/components/Select/common/SelectComponents.css +4 -0
  149. package/dist/esm/components/Select/common/SelectComponents.module.css.js +1 -0
  150. package/dist/esm/components/Select/common/SelectComponents.module.css.js.map +1 -1
  151. package/dist/types/components/Assets/Flags/Austria.d.ts +3 -0
  152. package/dist/types/components/Assets/Flags/Bahrain.d.ts +3 -0
  153. package/dist/types/components/Assets/Flags/Belgium.d.ts +3 -0
  154. package/dist/types/components/Assets/Flags/Canada.d.ts +1 -2
  155. package/dist/types/components/Assets/Flags/Chile.d.ts +3 -0
  156. package/dist/types/components/Assets/Flags/China.d.ts +3 -0
  157. package/dist/types/components/Assets/Flags/Denmark.d.ts +3 -0
  158. package/dist/types/components/Assets/Flags/Finland.d.ts +3 -0
  159. package/dist/types/components/Assets/Flags/France.d.ts +1 -2
  160. package/dist/types/components/Assets/Flags/Greece.d.ts +3 -0
  161. package/dist/types/components/Assets/Flags/Indonesia.d.ts +1 -2
  162. package/dist/types/components/Assets/Flags/Ireland.d.ts +1 -2
  163. package/dist/types/components/Assets/Flags/Italy.d.ts +3 -0
  164. package/dist/types/components/Assets/Flags/New-Zealand.d.ts +3 -0
  165. package/dist/types/components/Assets/Flags/Norway.d.ts +3 -0
  166. package/dist/types/components/Assets/Flags/Poland.d.ts +3 -0
  167. package/dist/types/components/Assets/Flags/Qatar.d.ts +3 -0
  168. package/dist/types/components/Assets/Flags/Saudi-Arabia.d.ts +3 -0
  169. package/dist/types/components/Assets/Flags/Singapore.d.ts +1 -2
  170. package/dist/types/components/Assets/Flags/Spain.d.ts +3 -0
  171. package/dist/types/components/Assets/Flags/Sweden.d.ts +1 -2
  172. package/dist/types/components/Assets/Flags/Switzerland.d.ts +1 -2
  173. package/dist/types/components/Assets/Flags/Thailand.d.ts +3 -0
  174. package/dist/types/components/Assets/Flags/United-Arab-Emirates.d.ts +2 -3
  175. package/dist/types/components/Assets/Flags/system/types.d.ts +1 -1
  176. package/dist/types/components/DatePicker/utils.d.ts +3 -2
  177. package/dist/types/components/Select/common/index.d.ts +1 -1
  178. package/dist/types/components/Select/common/types.d.ts +0 -6
  179. package/package.json +1 -1
@@ -15,7 +15,6 @@ const GenericMenu = require('../../GenericMenu/index.cjs');
15
15
  const IconWrapper = require('../../IconWrapper/index.cjs');
16
16
  const useInputModality = require('../../../hooks/internal/useInputModality.cjs');
17
17
  const cva = require('../../../lib/cva.cjs');
18
- const getTextFromNodes = require('../../../lib/getTextFromNodes.cjs');
19
18
  const PortalContext = require('../../../providers/PortalContext.cjs');
20
19
  const FormRoot = require('../../FormContainer/FormRoot.cjs');
21
20
  const FormElementContainer = require('../../FormContainer/FormElementContainer.cjs');
@@ -89,36 +88,18 @@ const NoOptionsDisplay = ({
89
88
  }
90
89
  );
91
90
  };
92
- const childrenToComboboxItemArray = (children, callback, heading) => {
91
+ const childrenToNormalizedOptions = (children, register) => {
93
92
  return react.Children.toArray(children).flatMap((child) => {
94
93
  if (react.isValidElement(child) && child && typeof child === "object") {
95
94
  const type = child.type;
96
95
  if (type.displayName === "Select.Group") {
97
- const groupChildren = child.props.children;
98
- return childrenToComboboxItemArray(
99
- groupChildren,
100
- callback,
101
- getTextFromNodes.getTextFromNodes(child.props.heading).toLowerCase()
102
- );
96
+ return childrenToNormalizedOptions(child.props.children, register);
103
97
  } else if (type.displayName === "Select.Item") {
104
- const title = getTextFromNodes.getTextFromNodes(child).toLowerCase();
105
- const value = child.props.value;
106
- const disabled = child.props.disabled;
107
- callback({
108
- disabled,
109
- value,
110
- title,
111
- heading,
112
- nodeProps: child.props
113
- });
114
- return {
115
- disabled,
116
- value,
117
- title,
118
- heading
119
- };
98
+ const { value, disabled } = child.props;
99
+ register(value, child.props);
100
+ return { value, disabled };
120
101
  } else if ("props" in child && child.props.children) {
121
- return childrenToComboboxItemArray(child.props.children, callback, heading);
102
+ return childrenToNormalizedOptions(child.props.children, register);
122
103
  }
123
104
  }
124
105
  return [];
@@ -159,100 +140,70 @@ const InternalSelect = ({
159
140
  const defaultId = react.useId();
160
141
  const [search, setSearch] = react.useState("");
161
142
  const [highlighted, setHighlighted] = react.useState();
162
- const visibleList = react.useRef([]);
163
- const navigatable = react.useRef([]);
143
+ const [searchSource, setSearchSource] = react.useState(() => /* @__PURE__ */ new Map());
164
144
  const valueNode = react.useRef(/* @__PURE__ */ new Map());
165
- const [isInitialized, setInitialized] = react.useState(false);
166
- const [list, setList] = react.useState([]);
167
- const updateElements = react.useCallback(
168
- ({ disabled: disabled2, value, title, heading, nodeProps }) => {
169
- if (title.includes(search) || heading?.includes(search)) {
170
- visibleList.current.push(value);
171
- if (!disabled2) {
172
- navigatable.current.push(value);
173
- }
174
- }
175
- valueNode.current.set(value, nodeProps);
176
- },
177
- [search]
178
- );
179
- const onUpdateSearch = react.useCallback(
180
- (search2) => {
181
- setSearch(search2);
182
- let hasHighlightedValue = false;
183
- const visibleItemsList = [];
184
- const navigatableList = [];
185
- const searchLowerCase = search2.toLowerCase();
186
- list.forEach((item) => {
187
- if (item.title.includes(searchLowerCase) || item.heading?.includes(searchLowerCase)) {
188
- if (item.value === highlighted) {
189
- hasHighlightedValue = true;
190
- }
191
- visibleItemsList.push(item.value);
192
- if (!item.disabled) {
193
- navigatableList.push(item.value);
194
- }
145
+ const registerValueNode = react.useCallback((value, nodeProps) => {
146
+ valueNode.current.set(value, nodeProps);
147
+ }, []);
148
+ const normalizedOptions = react.useMemo(() => {
149
+ if (options) {
150
+ return options.flatMap((option) => {
151
+ if ("options" in option) {
152
+ return (option.options ?? []).map((item) => {
153
+ registerValueNode(item.value, item);
154
+ return { value: item.value, disabled: item.disabled };
155
+ });
195
156
  }
157
+ registerValueNode(option.value, option);
158
+ return { value: option.value, disabled: option.disabled };
196
159
  });
197
- navigatable.current = navigatableList;
198
- visibleList.current = visibleItemsList;
199
- if (!hasHighlightedValue) {
200
- setHighlighted(navigatableList[0] ?? null);
160
+ } else if (children) {
161
+ return childrenToNormalizedOptions(children, registerValueNode);
162
+ }
163
+ return [];
164
+ }, [children, options, registerValueNode]);
165
+ const listNode = react.useRef(null);
166
+ const captureSearchSource = react.useCallback(() => {
167
+ const root = listNode.current;
168
+ if (!root) {
169
+ return;
170
+ }
171
+ const next = /* @__PURE__ */ new Map();
172
+ root.querySelectorAll("[cui-select-item][data-value]").forEach((el) => {
173
+ const value = el.getAttribute("data-value");
174
+ if (value === null) {
175
+ return;
201
176
  }
202
- },
203
- [highlighted, list]
177
+ const group = el.closest("[cui-select-group]");
178
+ const heading = group?.querySelector("[cui-select-group-name]")?.textContent ?? "";
179
+ next.set(value, `${el.textContent ?? ""} ${heading}`.toLowerCase());
180
+ });
181
+ setSearchSource(next);
182
+ }, []);
183
+ const onSearchChange = (next) => {
184
+ if (search === "" && next !== "") {
185
+ captureSearchSource();
186
+ }
187
+ setSearch(next);
188
+ };
189
+ const matchedOptions = react.useMemo(() => {
190
+ if (search === "") {
191
+ return normalizedOptions;
192
+ }
193
+ const searchLowerCase = search.toLowerCase();
194
+ return normalizedOptions.filter(
195
+ (item) => (searchSource.get(item.value) ?? "").includes(searchLowerCase)
196
+ );
197
+ }, [search, normalizedOptions, searchSource]);
198
+ const visibleValues = react.useMemo(
199
+ () => new Set(matchedOptions.map((o) => o.value)),
200
+ [matchedOptions]
204
201
  );
205
- const updateList = react.useCallback(
206
- (children2, options2) => {
207
- const lowerCasedSearch = search.toLowerCase();
208
- if (options2) {
209
- setList(
210
- options2.flatMap((option) => {
211
- if ("options" in option) {
212
- const heading = getTextFromNodes.getTextFromNodes(option.heading).toLowerCase();
213
- return (option.options ?? []).map((item) => {
214
- valueNode.current.set(item.value, item);
215
- const title = getTextFromNodes.getTextFromNodes(item.label).toLowerCase();
216
- if (title.includes(lowerCasedSearch) || heading?.includes(lowerCasedSearch)) {
217
- visibleList.current.push(item.value);
218
- if (!disabled) {
219
- navigatable.current.push(item.value);
220
- }
221
- }
222
- return {
223
- heading,
224
- disabled: item.disabled,
225
- value: item.value,
226
- title
227
- };
228
- });
229
- } else {
230
- valueNode.current.set(option.value, option);
231
- const title = getTextFromNodes.getTextFromNodes(option.label).toLowerCase();
232
- if (title.includes(lowerCasedSearch)) {
233
- visibleList.current.push(option.value);
234
- if (!disabled) {
235
- navigatable.current.push(option.value);
236
- }
237
- }
238
- return {
239
- disabled: option.disabled,
240
- value: option.value,
241
- title: getTextFromNodes.getTextFromNodes(option.label)
242
- };
243
- }
244
- })
245
- );
246
- } else if (children2) {
247
- setList(childrenToComboboxItemArray(children2, updateElements));
248
- }
249
- },
250
- [disabled, search, updateElements]
202
+ const navigableValues = react.useMemo(
203
+ () => matchedOptions.filter((o) => !o.disabled).map((o) => o.value),
204
+ [matchedOptions]
251
205
  );
252
- react.useEffect(() => {
253
- updateList(children, options);
254
- setInitialized(true);
255
- }, [children, options, updateList]);
206
+ const effectiveHighlight = highlighted && navigableValues.includes(highlighted) ? highlighted : navigableValues[0];
256
207
  const inputRef = react.useRef(null);
257
208
  const inputModalityProps = useInputModality.useInputModality();
258
209
  const portalContainer = PortalContext.useResolvedPortalContainer(container);
@@ -260,41 +211,41 @@ const InternalSelect = ({
260
211
  inputRef.current?.focus();
261
212
  };
262
213
  const clearSearch = () => {
263
- onUpdateSearch("");
214
+ setSearch("");
264
215
  };
265
216
  const onKeyDown = (e) => {
266
217
  if (!e.defaultPrevented) {
267
218
  if (e.key === "Enter") {
268
219
  e.preventDefault();
269
- if (highlighted) {
270
- onSelect(highlighted, void 0, e);
271
- } else if (visibleList.current.length === 0 && allowCreateOption) {
220
+ if (effectiveHighlight) {
221
+ onSelect(effectiveHighlight, void 0, e);
222
+ } else if (matchedOptions.length === 0 && allowCreateOption) {
272
223
  onSelect(search, "custom", e);
273
224
  }
274
225
  } else if (["ArrowUp", "ArrowDown", "Home", "End"].includes(e.key)) {
275
226
  e.preventDefault();
276
- let nextHighlightedValue = highlighted;
277
- const highlightedIndex = navigatable.current.findIndex(
278
- (value) => value === highlighted
227
+ let nextHighlightedValue = effectiveHighlight;
228
+ const highlightedIndex = navigableValues.findIndex(
229
+ (value) => value === effectiveHighlight
279
230
  );
280
231
  if (e.key === "ArrowUp") {
281
232
  if (highlightedIndex === 0) {
282
- nextHighlightedValue = navigatable.current[navigatable.current.length - 1];
233
+ nextHighlightedValue = navigableValues[navigableValues.length - 1];
283
234
  } else {
284
- nextHighlightedValue = navigatable.current[highlightedIndex - 1];
235
+ nextHighlightedValue = navigableValues[highlightedIndex - 1];
285
236
  }
286
237
  } else if (e.key === "ArrowDown") {
287
238
  e.preventDefault();
288
- if (highlightedIndex === navigatable.current.length - 1) {
289
- nextHighlightedValue = navigatable.current[0];
239
+ if (highlightedIndex === navigableValues.length - 1) {
240
+ nextHighlightedValue = navigableValues[0];
290
241
  } else {
291
- nextHighlightedValue = navigatable.current[highlightedIndex + 1];
242
+ nextHighlightedValue = navigableValues[highlightedIndex + 1];
292
243
  }
293
244
  } else if (e.key === "End") {
294
245
  e.preventDefault();
295
- nextHighlightedValue = navigatable.current[navigatable.current.length - 1];
246
+ nextHighlightedValue = navigableValues[navigableValues.length - 1];
296
247
  } else if (e.key === "Home") {
297
- nextHighlightedValue = navigatable.current[0];
248
+ nextHighlightedValue = navigableValues[0];
298
249
  e.preventDefault();
299
250
  }
300
251
  setHighlighted(nextHighlightedValue);
@@ -302,21 +253,19 @@ const InternalSelect = ({
302
253
  }
303
254
  };
304
255
  const isHidden = react.useCallback(
305
- (value) => {
306
- return !visibleList.current.includes(value ?? "");
307
- },
308
- [visibleList]
256
+ (value) => !visibleValues.has(value ?? ""),
257
+ [visibleValues]
309
258
  );
310
259
  const optionContextValue = react.useMemo(() => {
311
260
  return {
312
261
  search,
313
262
  updateHighlighted: setHighlighted,
314
- highlighted,
263
+ highlighted: effectiveHighlight,
315
264
  isHidden,
316
265
  onSelect,
317
266
  selectedValues
318
267
  };
319
- }, [search, highlighted, isHidden, onSelect, selectedValues]);
268
+ }, [search, effectiveHighlight, isHidden, onSelect, selectedValues]);
320
269
  const onCreateOption = (e) => {
321
270
  e.preventDefault();
322
271
  e.stopPropagation();
@@ -349,7 +298,7 @@ const InternalSelect = ({
349
298
  "data-testid": "select-trigger",
350
299
  ...triggerProps,
351
300
  children: [
352
- isInitialized && /* @__PURE__ */ jsxRuntime.jsx(SelectComponents.SelectValue, { children: selectedValues.length === 0 ? placeholder : multiple ? /* @__PURE__ */ jsxRuntime.jsx(
301
+ /* @__PURE__ */ jsxRuntime.jsx(SelectComponents.SelectValue, { children: selectedValues.length === 0 ? placeholder : multiple ? /* @__PURE__ */ jsxRuntime.jsx(
353
302
  MultiSelectValue.MultiSelectValue,
354
303
  {
355
304
  disabled: disabled ?? false,
@@ -384,7 +333,7 @@ const InternalSelect = ({
384
333
  form,
385
334
  value: selectedValues,
386
335
  onChange: () => null,
387
- children: list.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
336
+ children: normalizedOptions.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
388
337
  "option",
389
338
  {
390
339
  value: item.value,
@@ -402,10 +351,7 @@ const InternalSelect = ({
402
351
  sideOffset: 5,
403
352
  onFocus,
404
353
  onCloseAutoFocus: () => {
405
- onUpdateSearch("");
406
- },
407
- onOpenAutoFocus: () => {
408
- setHighlighted(visibleList.current[0]);
354
+ setSearch("");
409
355
  },
410
356
  align: "start",
411
357
  $useFullWidthItems: useFullWidthItems,
@@ -417,7 +363,7 @@ const InternalSelect = ({
417
363
  {
418
364
  ref: inputRef,
419
365
  value: search,
420
- onChange: (e) => onUpdateSearch(e.target.value),
366
+ onChange: (e) => onSearchChange(e.target.value),
421
367
  "data-testid": "select-search-input",
422
368
  onKeyDown,
423
369
  $showSearch: showSearch
@@ -438,54 +384,61 @@ const InternalSelect = ({
438
384
  }
439
385
  )
440
386
  ] }),
441
- /* @__PURE__ */ jsxRuntime.jsx(SelectComponents.SelectListContent, { $maxHeight: maxHeight, children: /* @__PURE__ */ jsxRuntime.jsx(OptionContext.OptionContext.Provider, { value: optionContextValue, children: options && options.length > 0 ? options.map((props2, index) => {
442
- if ("options" in props2) {
443
- const { options: itemList = [], ...groupProps } = props2;
444
- return /* @__PURE__ */ jsxRuntime.jsx(
445
- SelectGroup,
446
- {
447
- ...groupProps,
448
- children: itemList.map((itemProps, itemIndex) => {
449
- if (checkbox) {
450
- return /* @__PURE__ */ jsxRuntime.jsx(
451
- MultiSelectCheckboxItem,
452
- {
453
- ...itemProps
454
- },
455
- `select-${id}-group-${index}-item-${itemIndex}`
456
- );
457
- }
387
+ /* @__PURE__ */ jsxRuntime.jsx(
388
+ SelectComponents.SelectListContent,
389
+ {
390
+ ref: listNode,
391
+ $maxHeight: maxHeight,
392
+ children: /* @__PURE__ */ jsxRuntime.jsx(OptionContext.OptionContext.Provider, { value: optionContextValue, children: options && options.length > 0 ? options.map((props2, index) => {
393
+ if ("options" in props2) {
394
+ const { options: itemList = [], ...groupProps } = props2;
395
+ return /* @__PURE__ */ jsxRuntime.jsx(
396
+ SelectGroup,
397
+ {
398
+ ...groupProps,
399
+ children: itemList.map((itemProps, itemIndex) => {
400
+ if (checkbox) {
401
+ return /* @__PURE__ */ jsxRuntime.jsx(
402
+ MultiSelectCheckboxItem,
403
+ {
404
+ ...itemProps
405
+ },
406
+ `select-${id}-group-${index}-item-${itemIndex}`
407
+ );
408
+ }
409
+ return /* @__PURE__ */ jsxRuntime.jsx(
410
+ SelectItem,
411
+ {
412
+ ...itemProps
413
+ },
414
+ `select-${id}-group-${index}-item-${itemIndex}`
415
+ );
416
+ })
417
+ },
418
+ `select-${id}-group-${index}`
419
+ );
420
+ } else {
421
+ if (checkbox) {
458
422
  return /* @__PURE__ */ jsxRuntime.jsx(
459
- SelectItem,
423
+ MultiSelectCheckboxItem,
460
424
  {
461
- ...itemProps
425
+ ...props2
462
426
  },
463
- `select-${id}-group-${index}-item-${itemIndex}`
427
+ `select-${id}-item-${index}`
464
428
  );
465
- })
466
- },
467
- `select-${id}-group-${index}`
468
- );
469
- } else {
470
- if (checkbox) {
471
- return /* @__PURE__ */ jsxRuntime.jsx(
472
- MultiSelectCheckboxItem,
473
- {
474
- ...props2
475
- },
476
- `select-${id}-item-${index}`
477
- );
478
- }
479
- return /* @__PURE__ */ jsxRuntime.jsx(
480
- SelectItem,
481
- {
482
- ...props2
483
- },
484
- `select-${id}-item-${index}`
485
- );
429
+ }
430
+ return /* @__PURE__ */ jsxRuntime.jsx(
431
+ SelectItem,
432
+ {
433
+ ...props2
434
+ },
435
+ `select-${id}-item-${index}`
436
+ );
437
+ }
438
+ }) : children })
486
439
  }
487
- }) : children }) }),
488
- visibleList.current.length === 0 && (allowCreateOption || !!noAvailableOptions) && /* @__PURE__ */ jsxRuntime.jsx(
440
+ ),
441
+ matchedOptions.length === 0 && (allowCreateOption || !!noAvailableOptions) && /* @__PURE__ */ jsxRuntime.jsx(
489
442
  NoOptionsDisplay,
490
443
  {
491
444
  allowCreateOption,
@@ -525,10 +478,11 @@ const SelectGroup = react.forwardRef(
525
478
  SelectComponents.SelectGroupContainer,
526
479
  {
527
480
  ...props,
481
+ "cui-select-group": "",
528
482
  ref: mergeRefs.mergeRefs([
529
483
  forwardedRef,
530
484
  (node) => {
531
- const hidden = node?.querySelectorAll("[cui-select-item]").length === 0;
485
+ const hidden = node?.querySelectorAll("[cui-select-item]:not([hidden])").length === 0;
532
486
  if (hidden) {
533
487
  node?.setAttribute("hidden", "");
534
488
  } else {
@@ -538,7 +492,7 @@ const SelectGroup = react.forwardRef(
538
492
  }
539
493
  ]),
540
494
  children: [
541
- /* @__PURE__ */ jsxRuntime.jsx(SelectComponents.SelectGroupName, { children: heading }),
495
+ /* @__PURE__ */ jsxRuntime.jsx(SelectComponents.SelectGroupName, { "cui-select-group-name": "", children: heading }),
542
496
  /* @__PURE__ */ jsxRuntime.jsx(SelectComponents.SelectGroupContent, { children })
543
497
  ]
544
498
  }
@@ -577,15 +531,15 @@ const SelectItem = react.forwardRef(
577
531
  updateHighlighted(value);
578
532
  }
579
533
  };
580
- if (isHidden(value)) {
581
- return null;
582
- }
534
+ const hidden = isHidden(value);
583
535
  const isChecked = selectedValues.includes(value);
584
536
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
585
537
  /* @__PURE__ */ jsxRuntime.jsxs(
586
538
  GenericMenu.GenericMenuItem,
587
539
  {
588
540
  ...props,
541
+ hidden,
542
+ className: cva.cn(SelectComponents.selectStyles["select-item"], props.className),
589
543
  "data-value": value,
590
544
  onClick: onSelectValue,
591
545
  onMouseOver,
@@ -622,7 +576,7 @@ const SelectItem = react.forwardRef(
622
576
  ]
623
577
  }
624
578
  ),
625
- separator && /* @__PURE__ */ jsxRuntime.jsx(Separator.Separator, { size: "sm" })
579
+ separator && !hidden && /* @__PURE__ */ jsxRuntime.jsx(Separator.Separator, { size: "sm" })
626
580
  ] });
627
581
  }
628
582
  );
@@ -659,15 +613,15 @@ const MultiSelectCheckboxItem = react.forwardRef(
659
613
  updateHighlighted(value);
660
614
  }
661
615
  };
662
- if (isHidden(value)) {
663
- return null;
664
- }
616
+ const hidden = isHidden(value);
665
617
  const isChecked = selectedValues.includes(value);
666
618
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
667
619
  /* @__PURE__ */ jsxRuntime.jsx(
668
620
  GenericMenu.GenericMenuItem,
669
621
  {
670
622
  ...props,
623
+ hidden,
624
+ className: cva.cn(SelectComponents.selectStyles["select-item"], props.className),
671
625
  "data-value": value,
672
626
  onClick: handleMenuItemClick,
673
627
  onMouseOver: handleMenuItemMouseOver,
@@ -711,7 +665,7 @@ const MultiSelectCheckboxItem = react.forwardRef(
711
665
  )
712
666
  }
713
667
  ),
714
- separator && /* @__PURE__ */ jsxRuntime.jsx(Separator.Separator, { size: "sm" })
668
+ separator && !hidden && /* @__PURE__ */ jsxRuntime.jsx(Separator.Separator, { size: "sm" })
715
669
  ] });
716
670
  }
717
671
  );