@clickhouse/click-ui 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/click-ui.css +4 -0
- package/dist/cjs/components/DatePicker/Common.cjs +1 -1
- package/dist/cjs/components/DatePicker/Common.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/DateRangePicker.cjs +1 -1
- package/dist/cjs/components/DatePicker/DateRangePicker.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs +17 -11
- package/dist/cjs/components/DatePicker/DateTimeRangePicker.cjs.map +1 -1
- package/dist/cjs/components/DatePicker/utils.cjs +23 -6
- package/dist/cjs/components/DatePicker/utils.cjs.map +1 -1
- package/dist/cjs/components/Select/common/InternalSelect.cjs +91 -135
- package/dist/cjs/components/Select/common/InternalSelect.cjs.map +1 -1
- package/dist/cjs/components/Select/common/SelectComponents.css +4 -0
- package/dist/cjs/components/Select/common/SelectComponents.module.css.cjs +1 -0
- package/dist/cjs/components/Select/common/SelectComponents.module.css.cjs.map +1 -1
- package/dist/esm/click-ui.css +4 -0
- package/dist/esm/components/DatePicker/Common.js +2 -2
- package/dist/esm/components/DatePicker/Common.js.map +1 -1
- package/dist/esm/components/DatePicker/DateRangePicker.js +2 -2
- package/dist/esm/components/DatePicker/DateRangePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/DateTimeRangePicker.js +18 -12
- package/dist/esm/components/DatePicker/DateTimeRangePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/utils.js +21 -5
- package/dist/esm/components/DatePicker/utils.js.map +1 -1
- package/dist/esm/components/Select/common/InternalSelect.js +92 -136
- package/dist/esm/components/Select/common/InternalSelect.js.map +1 -1
- package/dist/esm/components/Select/common/SelectComponents.css +4 -0
- package/dist/esm/components/Select/common/SelectComponents.module.css.js +1 -0
- package/dist/esm/components/Select/common/SelectComponents.module.css.js.map +1 -1
- package/dist/types/components/DatePicker/utils.d.ts +3 -2
- package/dist/types/components/Select/common/index.d.ts +1 -1
- package/dist/types/components/Select/common/types.d.ts +0 -6
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { useId, useState, useRef, useCallback,
|
|
2
|
+
import { useId, useState, useRef, useCallback, useMemo, forwardRef, Children, isValidElement } from 'react';
|
|
3
3
|
import { Portal } from '@radix-ui/react-popover';
|
|
4
4
|
import { SelectPopoverRoot, StyledSelectTrigger, SelectValue, HiddenSelectElement, SelectPopoverContent, SelectList, SearchBarContainer, SearchBar, selectStyles, SelectListContent, SelectGroupContainer, SelectGroupName, SelectGroupContent, SelectNoDataContainer, SelectItemDescriptionText } from './SelectComponents.js';
|
|
5
5
|
import { OptionContext } from './OptionContext.js';
|
|
@@ -11,7 +11,6 @@ import { GenericMenuItem } from '../../GenericMenu/index.js';
|
|
|
11
11
|
import { IconWrapper } from '../../IconWrapper/index.js';
|
|
12
12
|
import { useInputModality } from '../../../hooks/internal/useInputModality.js';
|
|
13
13
|
import { cn } from '../../../lib/cva.js';
|
|
14
|
-
import { getTextFromNodes } from '../../../lib/getTextFromNodes.js';
|
|
15
14
|
import { useResolvedPortalContainer } from '../../../providers/PortalContext.js';
|
|
16
15
|
import { FormRoot } from '../../FormContainer/FormRoot.js';
|
|
17
16
|
import { FormElementContainer } from '../../FormContainer/FormElementContainer.js';
|
|
@@ -70,32 +69,24 @@ const NoOptionsDisplay = ({
|
|
|
70
69
|
}
|
|
71
70
|
return /* @__PURE__ */ jsx(SelectNoDataContainer, { onClick: handleNoOptionsClick, $clickable: allowCreateOption, ...containerProps, children: noOptionsNode });
|
|
72
71
|
};
|
|
73
|
-
const
|
|
72
|
+
const childrenToNormalizedOptions = (children, register) => {
|
|
74
73
|
return Children.toArray(children).flatMap((child) => {
|
|
75
74
|
if (isValidElement(child) && child && typeof child === "object") {
|
|
76
75
|
const type = child.type;
|
|
77
76
|
if (type.displayName === "Select.Group") {
|
|
78
|
-
|
|
79
|
-
return childrenToComboboxItemArray(groupChildren, callback, getTextFromNodes(child.props.heading).toLowerCase());
|
|
77
|
+
return childrenToNormalizedOptions(child.props.children, register);
|
|
80
78
|
} else if (type.displayName === "Select.Item") {
|
|
81
|
-
const
|
|
82
|
-
const value = child.props.value;
|
|
83
|
-
const disabled = child.props.disabled;
|
|
84
|
-
callback({
|
|
85
|
-
disabled,
|
|
79
|
+
const {
|
|
86
80
|
value,
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
});
|
|
81
|
+
disabled
|
|
82
|
+
} = child.props;
|
|
83
|
+
register(value, child.props);
|
|
91
84
|
return {
|
|
92
|
-
disabled,
|
|
93
85
|
value,
|
|
94
|
-
|
|
95
|
-
heading
|
|
86
|
+
disabled
|
|
96
87
|
};
|
|
97
88
|
} else if ("props" in child && child.props.children) {
|
|
98
|
-
return
|
|
89
|
+
return childrenToNormalizedOptions(child.props.children, register);
|
|
99
90
|
}
|
|
100
91
|
}
|
|
101
92
|
return [];
|
|
@@ -136,95 +127,68 @@ const InternalSelect = ({
|
|
|
136
127
|
const defaultId = useId();
|
|
137
128
|
const [search, setSearch] = useState("");
|
|
138
129
|
const [highlighted, setHighlighted] = useState();
|
|
139
|
-
const
|
|
140
|
-
const navigatable = useRef([]);
|
|
130
|
+
const [searchSource, setSearchSource] = useState(() => /* @__PURE__ */ new Map());
|
|
141
131
|
const valueNode = useRef(/* @__PURE__ */ new Map());
|
|
142
|
-
const
|
|
143
|
-
const [list, setList] = useState([]);
|
|
144
|
-
const updateElements = useCallback(({
|
|
145
|
-
disabled: disabled2,
|
|
146
|
-
value,
|
|
147
|
-
title,
|
|
148
|
-
heading,
|
|
149
|
-
nodeProps
|
|
150
|
-
}) => {
|
|
151
|
-
if (title.includes(search) || heading?.includes(search)) {
|
|
152
|
-
visibleList.current.push(value);
|
|
153
|
-
if (!disabled2) {
|
|
154
|
-
navigatable.current.push(value);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
132
|
+
const registerValueNode = useCallback((value, nodeProps) => {
|
|
157
133
|
valueNode.current.set(value, nodeProps);
|
|
158
|
-
}, [
|
|
159
|
-
const
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
const visibleItemsList = [];
|
|
163
|
-
const navigatableList = [];
|
|
164
|
-
const searchLowerCase = search2.toLowerCase();
|
|
165
|
-
list.forEach((item) => {
|
|
166
|
-
if (item.title.includes(searchLowerCase) || item.heading?.includes(searchLowerCase)) {
|
|
167
|
-
if (item.value === highlighted) {
|
|
168
|
-
hasHighlightedValue = true;
|
|
169
|
-
}
|
|
170
|
-
visibleItemsList.push(item.value);
|
|
171
|
-
if (!item.disabled) {
|
|
172
|
-
navigatableList.push(item.value);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
navigatable.current = navigatableList;
|
|
177
|
-
visibleList.current = visibleItemsList;
|
|
178
|
-
if (!hasHighlightedValue) {
|
|
179
|
-
setHighlighted(navigatableList[0] ?? null);
|
|
180
|
-
}
|
|
181
|
-
}, [highlighted, list]);
|
|
182
|
-
const updateList = useCallback((children2, options2) => {
|
|
183
|
-
const lowerCasedSearch = search.toLowerCase();
|
|
184
|
-
if (options2) {
|
|
185
|
-
setList(options2.flatMap((option) => {
|
|
134
|
+
}, []);
|
|
135
|
+
const normalizedOptions = useMemo(() => {
|
|
136
|
+
if (options) {
|
|
137
|
+
return options.flatMap((option) => {
|
|
186
138
|
if ("options" in option) {
|
|
187
|
-
const heading = getTextFromNodes(option.heading).toLowerCase();
|
|
188
139
|
return (option.options ?? []).map((item) => {
|
|
189
|
-
|
|
190
|
-
const title = getTextFromNodes(item.label).toLowerCase();
|
|
191
|
-
if (title.includes(lowerCasedSearch) || heading?.includes(lowerCasedSearch)) {
|
|
192
|
-
visibleList.current.push(item.value);
|
|
193
|
-
if (!disabled) {
|
|
194
|
-
navigatable.current.push(item.value);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
140
|
+
registerValueNode(item.value, item);
|
|
197
141
|
return {
|
|
198
|
-
heading,
|
|
199
|
-
disabled: item.disabled,
|
|
200
142
|
value: item.value,
|
|
201
|
-
|
|
143
|
+
disabled: item.disabled
|
|
202
144
|
};
|
|
203
145
|
});
|
|
204
|
-
} else {
|
|
205
|
-
valueNode.current.set(option.value, option);
|
|
206
|
-
const title = getTextFromNodes(option.label).toLowerCase();
|
|
207
|
-
if (title.includes(lowerCasedSearch)) {
|
|
208
|
-
visibleList.current.push(option.value);
|
|
209
|
-
if (!disabled) {
|
|
210
|
-
navigatable.current.push(option.value);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
return {
|
|
214
|
-
disabled: option.disabled,
|
|
215
|
-
value: option.value,
|
|
216
|
-
title: getTextFromNodes(option.label)
|
|
217
|
-
};
|
|
218
146
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
147
|
+
registerValueNode(option.value, option);
|
|
148
|
+
return {
|
|
149
|
+
value: option.value,
|
|
150
|
+
disabled: option.disabled
|
|
151
|
+
};
|
|
152
|
+
});
|
|
153
|
+
} else if (children) {
|
|
154
|
+
return childrenToNormalizedOptions(children, registerValueNode);
|
|
155
|
+
}
|
|
156
|
+
return [];
|
|
157
|
+
}, [children, options, registerValueNode]);
|
|
158
|
+
const listNode = useRef(null);
|
|
159
|
+
const captureSearchSource = useCallback(() => {
|
|
160
|
+
const root = listNode.current;
|
|
161
|
+
if (!root) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
const next = /* @__PURE__ */ new Map();
|
|
165
|
+
root.querySelectorAll("[cui-select-item][data-value]").forEach((el) => {
|
|
166
|
+
const value = el.getAttribute("data-value");
|
|
167
|
+
if (value === null) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const group = el.closest("[cui-select-group]");
|
|
171
|
+
const heading = group?.querySelector("[cui-select-group-name]")?.textContent ?? "";
|
|
172
|
+
next.set(value, `${el.textContent ?? ""} ${heading}`.toLowerCase());
|
|
173
|
+
});
|
|
174
|
+
setSearchSource(next);
|
|
175
|
+
}, []);
|
|
176
|
+
const onSearchChange = (next) => {
|
|
177
|
+
if (search === "" && next !== "") {
|
|
178
|
+
captureSearchSource();
|
|
222
179
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
180
|
+
setSearch(next);
|
|
181
|
+
};
|
|
182
|
+
const matchedOptions = useMemo(() => {
|
|
183
|
+
if (search === "") {
|
|
184
|
+
return normalizedOptions;
|
|
185
|
+
}
|
|
186
|
+
const searchLowerCase = search.toLowerCase();
|
|
187
|
+
return normalizedOptions.filter((item) => (searchSource.get(item.value) ?? "").includes(searchLowerCase));
|
|
188
|
+
}, [search, normalizedOptions, searchSource]);
|
|
189
|
+
const visibleValues = useMemo(() => new Set(matchedOptions.map((o) => o.value)), [matchedOptions]);
|
|
190
|
+
const navigableValues = useMemo(() => matchedOptions.filter((o) => !o.disabled).map((o) => o.value), [matchedOptions]);
|
|
191
|
+
const effectiveHighlight = highlighted && navigableValues.includes(highlighted) ? highlighted : navigableValues[0];
|
|
228
192
|
const inputRef = useRef(null);
|
|
229
193
|
const inputModalityProps = useInputModality();
|
|
230
194
|
const portalContainer = useResolvedPortalContainer(container);
|
|
@@ -232,58 +196,56 @@ const InternalSelect = ({
|
|
|
232
196
|
inputRef.current?.focus();
|
|
233
197
|
};
|
|
234
198
|
const clearSearch = () => {
|
|
235
|
-
|
|
199
|
+
setSearch("");
|
|
236
200
|
};
|
|
237
201
|
const onKeyDown = (e) => {
|
|
238
202
|
if (!e.defaultPrevented) {
|
|
239
203
|
if (e.key === "Enter") {
|
|
240
204
|
e.preventDefault();
|
|
241
|
-
if (
|
|
242
|
-
onSelect(
|
|
243
|
-
} else if (
|
|
205
|
+
if (effectiveHighlight) {
|
|
206
|
+
onSelect(effectiveHighlight, void 0, e);
|
|
207
|
+
} else if (matchedOptions.length === 0 && allowCreateOption) {
|
|
244
208
|
onSelect(search, "custom", e);
|
|
245
209
|
}
|
|
246
210
|
} else if (["ArrowUp", "ArrowDown", "Home", "End"].includes(e.key)) {
|
|
247
211
|
e.preventDefault();
|
|
248
|
-
let nextHighlightedValue =
|
|
249
|
-
const highlightedIndex =
|
|
212
|
+
let nextHighlightedValue = effectiveHighlight;
|
|
213
|
+
const highlightedIndex = navigableValues.findIndex((value) => value === effectiveHighlight);
|
|
250
214
|
if (e.key === "ArrowUp") {
|
|
251
215
|
if (highlightedIndex === 0) {
|
|
252
|
-
nextHighlightedValue =
|
|
216
|
+
nextHighlightedValue = navigableValues[navigableValues.length - 1];
|
|
253
217
|
} else {
|
|
254
|
-
nextHighlightedValue =
|
|
218
|
+
nextHighlightedValue = navigableValues[highlightedIndex - 1];
|
|
255
219
|
}
|
|
256
220
|
} else if (e.key === "ArrowDown") {
|
|
257
221
|
e.preventDefault();
|
|
258
|
-
if (highlightedIndex ===
|
|
259
|
-
nextHighlightedValue =
|
|
222
|
+
if (highlightedIndex === navigableValues.length - 1) {
|
|
223
|
+
nextHighlightedValue = navigableValues[0];
|
|
260
224
|
} else {
|
|
261
|
-
nextHighlightedValue =
|
|
225
|
+
nextHighlightedValue = navigableValues[highlightedIndex + 1];
|
|
262
226
|
}
|
|
263
227
|
} else if (e.key === "End") {
|
|
264
228
|
e.preventDefault();
|
|
265
|
-
nextHighlightedValue =
|
|
229
|
+
nextHighlightedValue = navigableValues[navigableValues.length - 1];
|
|
266
230
|
} else if (e.key === "Home") {
|
|
267
|
-
nextHighlightedValue =
|
|
231
|
+
nextHighlightedValue = navigableValues[0];
|
|
268
232
|
e.preventDefault();
|
|
269
233
|
}
|
|
270
234
|
setHighlighted(nextHighlightedValue);
|
|
271
235
|
}
|
|
272
236
|
}
|
|
273
237
|
};
|
|
274
|
-
const isHidden = useCallback((value) =>
|
|
275
|
-
return !visibleList.current.includes(value ?? "");
|
|
276
|
-
}, [visibleList]);
|
|
238
|
+
const isHidden = useCallback((value) => !visibleValues.has(value ?? ""), [visibleValues]);
|
|
277
239
|
const optionContextValue = useMemo(() => {
|
|
278
240
|
return {
|
|
279
241
|
search,
|
|
280
242
|
updateHighlighted: setHighlighted,
|
|
281
|
-
highlighted,
|
|
243
|
+
highlighted: effectiveHighlight,
|
|
282
244
|
isHidden,
|
|
283
245
|
onSelect,
|
|
284
246
|
selectedValues
|
|
285
247
|
};
|
|
286
|
-
}, [search,
|
|
248
|
+
}, [search, effectiveHighlight, isHidden, onSelect, selectedValues]);
|
|
287
249
|
const onCreateOption = (e) => {
|
|
288
250
|
e.preventDefault();
|
|
289
251
|
e.stopPropagation();
|
|
@@ -295,23 +257,21 @@ const InternalSelect = ({
|
|
|
295
257
|
/* @__PURE__ */ jsxs(FormElementContainer, { children: [
|
|
296
258
|
/* @__PURE__ */ jsxs(SelectPopoverRoot, { open, onOpenChange, modal: true, children: [
|
|
297
259
|
/* @__PURE__ */ jsxs(StyledSelectTrigger, { id: id ?? defaultId, $error: !!error, disabled, "data-testid": "select-trigger", ...triggerProps, children: [
|
|
298
|
-
|
|
260
|
+
/* @__PURE__ */ jsx(SelectValue, { children: selectedValues.length === 0 ? placeholder : multiple ? /* @__PURE__ */ jsx(MultiSelectValue, { disabled: disabled ?? false, onSelect, selectedValues, sortable: !disabled && sortable, valueNode: valueNode.current, onChange }) : /* @__PURE__ */ jsx(SingleSelectValue, { valueNode: checkbox && selectLabel ? {
|
|
299
261
|
label: selectLabel,
|
|
300
262
|
value: selectLabel
|
|
301
263
|
} : valueNode.current.get(selectedValues[0]), value: selectedValues[0] }) }),
|
|
302
264
|
/* @__PURE__ */ jsx(SvgImage, { name: "sort", size: "sm" })
|
|
303
265
|
] }),
|
|
304
|
-
form && /* @__PURE__ */ jsx(HiddenSelectElement, { multiple, name, form, value: selectedValues, onChange: () => null, children:
|
|
266
|
+
form && /* @__PURE__ */ jsx(HiddenSelectElement, { multiple, name, form, value: selectedValues, onChange: () => null, children: normalizedOptions.map((item) => /* @__PURE__ */ jsx("option", { value: item.value, disabled: item.disabled, children: item.value }, item.value)) }),
|
|
305
267
|
/* @__PURE__ */ jsx(Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(SelectPopoverContent, { ...inputModalityProps, sideOffset: 5, onFocus, onCloseAutoFocus: () => {
|
|
306
|
-
|
|
307
|
-
}, onOpenAutoFocus: () => {
|
|
308
|
-
setHighlighted(visibleList.current[0]);
|
|
268
|
+
setSearch("");
|
|
309
269
|
}, align: "start", $useFullWidthItems: useFullWidthItems, $itemCharacterLimit: itemCharacterLimit, children: /* @__PURE__ */ jsxs(SelectList, { children: [
|
|
310
270
|
/* @__PURE__ */ jsxs(SearchBarContainer, { $showSearch: showSearch, children: [
|
|
311
|
-
/* @__PURE__ */ jsx(SearchBar, { ref: inputRef, value: search, onChange: (e) =>
|
|
271
|
+
/* @__PURE__ */ jsx(SearchBar, { ref: inputRef, value: search, onChange: (e) => onSearchChange(e.target.value), "data-testid": "select-search-input", onKeyDown, $showSearch: showSearch }),
|
|
312
272
|
/* @__PURE__ */ jsx(IconButton, { className: cn(selectStyles["search-close"], search.length > 0 && selectStyles["search-close_show-close"]), htmlType: "button", icon: "cross", onClick: clearSearch, "data-testid": "select-search-close", size: "xs" })
|
|
313
273
|
] }),
|
|
314
|
-
/* @__PURE__ */ jsx(SelectListContent, { $maxHeight: maxHeight, children: /* @__PURE__ */ jsx(OptionContext.Provider, { value: optionContextValue, children: options && options.length > 0 ? options.map((props2, index) => {
|
|
274
|
+
/* @__PURE__ */ jsx(SelectListContent, { ref: listNode, $maxHeight: maxHeight, children: /* @__PURE__ */ jsx(OptionContext.Provider, { value: optionContextValue, children: options && options.length > 0 ? options.map((props2, index) => {
|
|
315
275
|
if ("options" in props2) {
|
|
316
276
|
const {
|
|
317
277
|
options: itemList = [],
|
|
@@ -330,7 +290,7 @@ const InternalSelect = ({
|
|
|
330
290
|
return /* @__PURE__ */ jsx(SelectItem, { ...props2 }, `select-${id}-item-${index}`);
|
|
331
291
|
}
|
|
332
292
|
}) : children }) }),
|
|
333
|
-
|
|
293
|
+
matchedOptions.length === 0 && (allowCreateOption || !!noAvailableOptions) && /* @__PURE__ */ jsx(NoOptionsDisplay, { allowCreateOption, search, customText, noAvailableOptions, onCreateOption, onOpenChange, containerProps: props })
|
|
334
294
|
] }) }) })
|
|
335
295
|
] }),
|
|
336
296
|
!!error && error !== true && /* @__PURE__ */ jsx(Error, { children: error })
|
|
@@ -344,8 +304,8 @@ const SelectGroup = forwardRef(({
|
|
|
344
304
|
...props
|
|
345
305
|
}, forwardedRef) => {
|
|
346
306
|
useSearch();
|
|
347
|
-
return /* @__PURE__ */ jsxs(SelectGroupContainer, { ...props, ref: mergeRefs([forwardedRef, (node) => {
|
|
348
|
-
const hidden = node?.querySelectorAll("[cui-select-item]").length === 0;
|
|
307
|
+
return /* @__PURE__ */ jsxs(SelectGroupContainer, { ...props, "cui-select-group": "", ref: mergeRefs([forwardedRef, (node) => {
|
|
308
|
+
const hidden = node?.querySelectorAll("[cui-select-item]:not([hidden])").length === 0;
|
|
349
309
|
if (hidden) {
|
|
350
310
|
node?.setAttribute("hidden", "");
|
|
351
311
|
} else {
|
|
@@ -353,7 +313,7 @@ const SelectGroup = forwardRef(({
|
|
|
353
313
|
}
|
|
354
314
|
node?.setAttribute("aria-hidden", hidden.toString());
|
|
355
315
|
}]), children: [
|
|
356
|
-
/* @__PURE__ */ jsx(SelectGroupName, { children: heading }),
|
|
316
|
+
/* @__PURE__ */ jsx(SelectGroupName, { "cui-select-group-name": "", children: heading }),
|
|
357
317
|
/* @__PURE__ */ jsx(SelectGroupContent, { children })
|
|
358
318
|
] });
|
|
359
319
|
});
|
|
@@ -394,19 +354,17 @@ const SelectItem = forwardRef(({
|
|
|
394
354
|
updateHighlighted(value);
|
|
395
355
|
}
|
|
396
356
|
};
|
|
397
|
-
|
|
398
|
-
return null;
|
|
399
|
-
}
|
|
357
|
+
const hidden = isHidden(value);
|
|
400
358
|
const isChecked = selectedValues.includes(value);
|
|
401
359
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
402
|
-
/* @__PURE__ */ jsxs(GenericMenuItem, { ...props, "data-value": value, onClick: onSelectValue, onMouseOver, ref: forwardedRef, "data-state": isChecked ? "checked" : "unchecked", "data-disabled": disabled ? true : void 0, "data-highlighted": highlighted == value ? "true" : void 0, "cui-select-item": "", children: [
|
|
360
|
+
/* @__PURE__ */ jsxs(GenericMenuItem, { ...props, hidden, className: cn(selectStyles["select-item"], props.className), "data-value": value, onClick: onSelectValue, onMouseOver, ref: forwardedRef, "data-state": isChecked ? "checked" : "unchecked", "data-disabled": disabled ? true : void 0, "data-highlighted": highlighted == value ? "true" : void 0, "cui-select-item": "", children: [
|
|
403
361
|
/* @__PURE__ */ jsx(IconWrapper, { icon, iconDir, gap: "xxs", isResponsive: false, children: label ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
404
362
|
label,
|
|
405
363
|
description && /* @__PURE__ */ jsx(SelectItemDescription, { children: description })
|
|
406
364
|
] }) : children }),
|
|
407
365
|
/* @__PURE__ */ jsx(SvgImage, { className: cn(selectStyles["check-icon"], isChecked && selectStyles["check-icon_show-check"]), name: "check", size: "sm" })
|
|
408
366
|
] }),
|
|
409
|
-
separator && /* @__PURE__ */ jsx(Separator, { size: "sm" })
|
|
367
|
+
separator && !hidden && /* @__PURE__ */ jsx(Separator, { size: "sm" })
|
|
410
368
|
] });
|
|
411
369
|
});
|
|
412
370
|
SelectItem.displayName = "Select.Item";
|
|
@@ -447,19 +405,17 @@ const MultiSelectCheckboxItem = forwardRef(({
|
|
|
447
405
|
updateHighlighted(value);
|
|
448
406
|
}
|
|
449
407
|
};
|
|
450
|
-
|
|
451
|
-
return null;
|
|
452
|
-
}
|
|
408
|
+
const hidden = isHidden(value);
|
|
453
409
|
const isChecked = selectedValues.includes(value);
|
|
454
410
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
455
|
-
/* @__PURE__ */ jsx(GenericMenuItem, { ...props, "data-value": value, onClick: handleMenuItemClick, onMouseOver: handleMenuItemMouseOver, ref: forwardedRef, "data-disabled": disabled ? true : void 0, "data-highlighted": highlighted == value ? "true" : void 0, "data-testid": `multi-select-checkbox-${value}`, "cui-select-item": "", children: /* @__PURE__ */ jsxs(Container, { orientation: "horizontal", gap: "xs", overflow: "hidden", isResponsive: false, children: [
|
|
411
|
+
/* @__PURE__ */ jsx(GenericMenuItem, { ...props, hidden, className: cn(selectStyles["select-item"], props.className), "data-value": value, onClick: handleMenuItemClick, onMouseOver: handleMenuItemMouseOver, ref: forwardedRef, "data-disabled": disabled ? true : void 0, "data-highlighted": highlighted == value ? "true" : void 0, "data-testid": `multi-select-checkbox-${value}`, "cui-select-item": "", children: /* @__PURE__ */ jsxs(Container, { orientation: "horizontal", gap: "xs", overflow: "hidden", isResponsive: false, children: [
|
|
456
412
|
/* @__PURE__ */ jsx(Checkbox, { checked: isChecked, "data-testid": "multi-select-checkbox", disabled, variant: variant ?? "default" }),
|
|
457
413
|
/* @__PURE__ */ jsx(IconWrapper, { icon, iconDir, gap: "xxs", isResponsive: false, children: label ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
458
414
|
label,
|
|
459
415
|
description && /* @__PURE__ */ jsx(SelectItemDescription, { children: description })
|
|
460
416
|
] }) : children })
|
|
461
417
|
] }) }),
|
|
462
|
-
separator && /* @__PURE__ */ jsx(Separator, { size: "sm" })
|
|
418
|
+
separator && !hidden && /* @__PURE__ */ jsx(Separator, { size: "sm" })
|
|
463
419
|
] });
|
|
464
420
|
});
|
|
465
421
|
MultiSelectCheckboxItem.displayName = "Select.Item";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InternalSelect.js","sources":["../../../../../src/components/Select/common/InternalSelect.tsx"],"sourcesContent":["import {\n Children,\n FunctionComponent,\n HTMLAttributes,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n NoAvailableOptionsFactoryProps,\n SelectContainerProps,\n SelectGroupProps,\n SelectItemObject,\n SelectItemProps,\n SelectOptionListItem,\n} from './types';\nimport { Error, FormElementContainer, FormRoot } from '@/components/FormContainer';\nimport { Portal } from '@radix-ui/react-popover';\nimport { Checkbox } from '@/components/Checkbox';\nimport type { CheckboxVariants } from '@/components/Checkbox';\nimport { Container } from '@/components/Container';\nimport { Icon } from '@/components/Icon';\nimport { IconButton } from '@/components/IconButton';\nimport { Label } from '@/components/Label';\nimport { Separator } from '@/components/Separator';\nimport { Text } from '@/components/Text';\nimport type { TextProps } from '@/components/Text';\n\nimport {\n SelectPopoverContent,\n SearchBar,\n SearchBarContainer,\n SelectList,\n SelectListContent,\n SelectPopoverRoot,\n StyledSelectTrigger,\n SelectValue,\n HiddenSelectElement,\n SelectGroupContainer,\n SelectGroupName,\n SelectGroupContent,\n SelectNoDataContainer,\n SelectItemDescriptionText,\n selectStyles,\n} from './SelectComponents';\nimport { OptionContext } from './OptionContext';\nimport { MultiSelectValue } from '../MultiSelectValue';\nimport SingleSelectValue from '../SingleSelectValue';\nimport { useOption, useSearch } from './useOption';\nimport { mergeRefs } from '@/utils/mergeRefs';\nimport { GenericMenuItem } from '@/components/GenericMenu';\nimport { IconWrapper } from '@/components/IconWrapper';\nimport { useInputModality } from '@/hooks/internal';\nimport { cn } from '@/lib/cva';\nimport { getTextFromNodes } from '@/lib/getTextFromNodes';\nimport { useResolvedPortalContainer } from '@/providers/PortalContext';\n\ntype CallbackProps = SelectItemObject & {\n nodeProps: SelectItemProps;\n};\n\ninterface NoOptionsDisplayProps {\n allowCreateOption: boolean;\n search: string;\n customText: string;\n noAvailableOptions: boolean | ((props: NoAvailableOptionsFactoryProps) => ReactNode);\n onCreateOption: (e: MouseEvent<HTMLDivElement>) => void;\n onOpenChange: (open: boolean) => void;\n containerProps?: HTMLAttributes<HTMLDivElement>;\n}\n\nconst NoOptionsDisplay: React.FC<NoOptionsDisplayProps> = ({\n allowCreateOption,\n search,\n customText,\n noAvailableOptions,\n onCreateOption,\n onOpenChange,\n containerProps,\n}) => {\n const getCustomTextWithSearch = (text: string) => text.replaceAll('{search}', search);\n\n const getDefaultMessage = () =>\n `No Options found${search.length > 0 ? ` for \"${search}\" ` : ''}`;\n\n const getNoAvailableOptionsNode = (): ReactNode => {\n if (typeof noAvailableOptions === 'boolean') {\n return noAvailableOptions ? getDefaultMessage() : null;\n }\n\n // ReactNode\n return noAvailableOptions({\n search,\n close: (): void => onOpenChange(false),\n });\n };\n\n // Determine node to render when there are no options\n const hasCustomText = customText.length > 0;\n const hasSearchInput = search.length > 0;\n const shouldShowCreateOption = allowCreateOption && hasSearchInput;\n\n let noOptionsNode: ReactNode = null;\n\n if (shouldShowCreateOption) {\n noOptionsNode = hasCustomText ? getCustomTextWithSearch(customText) : `Add ${search}`;\n } else if (hasCustomText) {\n noOptionsNode = getCustomTextWithSearch(customText);\n } else {\n noOptionsNode = getNoAvailableOptionsNode();\n }\n\n if (!noOptionsNode) {\n return null;\n }\n\n const handleNoOptionsClick = (e: MouseEvent<HTMLDivElement>) => {\n if (shouldShowCreateOption) {\n onCreateOption(e);\n onOpenChange(false);\n }\n };\n\n const isCustomReactNode = typeof noAvailableOptions === 'function';\n if (isCustomReactNode) {\n return (\n <Container\n onClick={handleNoOptionsClick}\n {...containerProps}\n >\n {noOptionsNode}\n </Container>\n );\n }\n\n return (\n <SelectNoDataContainer\n onClick={handleNoOptionsClick}\n $clickable={allowCreateOption}\n {...containerProps}\n >\n {noOptionsNode}\n </SelectNoDataContainer>\n );\n};\n\nconst childrenToComboboxItemArray = (\n children: ReactNode,\n callback: (props: CallbackProps) => void,\n heading?: string\n): SelectItemObject[] => {\n return Children.toArray(children).flatMap(child => {\n if (isValidElement(child) && child && typeof child === 'object') {\n const type = child.type as FunctionComponent;\n if (type.displayName === 'Select.Group') {\n const groupChildren = child.props.children;\n return childrenToComboboxItemArray(\n groupChildren,\n callback,\n getTextFromNodes(child.props.heading).toLowerCase()\n );\n } else if (type.displayName === 'Select.Item') {\n const title = getTextFromNodes(child).toLowerCase();\n const value = child.props.value;\n const disabled = child.props.disabled;\n callback({\n disabled,\n value,\n title,\n heading,\n nodeProps: child.props,\n });\n return {\n disabled,\n value,\n title,\n heading,\n };\n } else if ('props' in child && child.props.children) {\n return childrenToComboboxItemArray(child.props.children, callback, heading);\n }\n }\n return [];\n });\n};\n\nexport const InternalSelect = ({\n label,\n children,\n orientation,\n dir,\n disabled,\n id,\n error,\n value: selectedValues,\n onChange,\n onSelect,\n open,\n onOpenChange,\n name,\n form,\n allowCreateOption = false,\n customText = '',\n options,\n sortable = false,\n placeholder = 'Select an option',\n maxHeight,\n multiple,\n checkbox,\n selectLabel,\n showSearch = false,\n container,\n useFullWidthItems = false,\n itemCharacterLimit = '64ch',\n noAvailableOptions = true,\n triggerProps,\n ...props\n}: SelectContainerProps) => {\n const defaultId = useId();\n const [search, setSearch] = useState('');\n const [highlighted, setHighlighted] = useState<string | undefined>();\n const visibleList = useRef<string[]>([]);\n const navigatable = useRef<string[]>([]);\n const valueNode = useRef<Map<string, SelectItemProps>>(new Map());\n const [isInitialized, setInitialized] = useState(false);\n const [list, setList] = useState<SelectItemObject[]>([]);\n const updateElements = useCallback(\n ({ disabled, value, title, heading, nodeProps }: CallbackProps) => {\n if (title.includes(search) || heading?.includes(search)) {\n visibleList.current.push(value);\n if (!disabled) {\n navigatable.current.push(value);\n }\n }\n valueNode.current.set(value, nodeProps);\n },\n [search]\n );\n const onUpdateSearch = useCallback(\n (search: string) => {\n setSearch(search);\n let hasHighlightedValue = false;\n const visibleItemsList: string[] = [];\n const navigatableList: string[] = [];\n const searchLowerCase = search.toLowerCase();\n list.forEach(item => {\n if (\n item.title.includes(searchLowerCase) ||\n item.heading?.includes(searchLowerCase)\n ) {\n if (item.value === highlighted) {\n hasHighlightedValue = true;\n }\n visibleItemsList.push(item.value);\n if (!item.disabled) {\n navigatableList.push(item.value);\n }\n }\n });\n navigatable.current = navigatableList;\n visibleList.current = visibleItemsList;\n if (!hasHighlightedValue) {\n setHighlighted(navigatableList[0] ?? null);\n }\n },\n [highlighted, list]\n );\n\n const updateList = useCallback(\n (children?: ReactNode, options?: SelectOptionListItem[]) => {\n const lowerCasedSearch = search.toLowerCase();\n if (options) {\n setList(\n options.flatMap(option => {\n if ('options' in option) {\n const heading = getTextFromNodes(option.heading).toLowerCase();\n return (option.options ?? []).map(item => {\n valueNode.current.set(item.value, item);\n const title = getTextFromNodes(item.label).toLowerCase();\n if (\n title.includes(lowerCasedSearch) ||\n heading?.includes(lowerCasedSearch)\n ) {\n visibleList.current.push(item.value);\n if (!disabled) {\n navigatable.current.push(item.value);\n }\n }\n return {\n heading,\n disabled: item.disabled,\n value: item.value,\n title,\n };\n });\n } else {\n valueNode.current.set(option.value, option);\n const title = getTextFromNodes(option.label).toLowerCase();\n if (title.includes(lowerCasedSearch)) {\n visibleList.current.push(option.value);\n if (!disabled) {\n navigatable.current.push(option.value);\n }\n }\n return {\n disabled: option.disabled,\n value: option.value,\n title: getTextFromNodes(option.label),\n };\n }\n })\n );\n } else if (children) {\n setList(childrenToComboboxItemArray(children, updateElements));\n }\n },\n [disabled, search, updateElements]\n );\n\n useEffect(() => {\n updateList(children, options);\n setInitialized(true);\n }, [children, options, updateList]);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const inputModalityProps = useInputModality();\n const portalContainer = useResolvedPortalContainer(container);\n\n const onFocus = () => {\n inputRef.current?.focus();\n };\n\n const clearSearch = () => {\n onUpdateSearch('');\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n if (!e.defaultPrevented) {\n if (e.key === 'Enter') {\n e.preventDefault();\n if (highlighted) {\n onSelect(highlighted, undefined, e);\n } else if (visibleList.current.length === 0 && allowCreateOption) {\n onSelect(search, 'custom', e);\n }\n } else if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(e.key)) {\n e.preventDefault();\n let nextHighlightedValue = highlighted;\n const highlightedIndex = navigatable.current.findIndex(\n value => value === highlighted\n );\n if (e.key === 'ArrowUp') {\n if (highlightedIndex === 0) {\n nextHighlightedValue = navigatable.current[navigatable.current.length - 1];\n } else {\n nextHighlightedValue = navigatable.current[highlightedIndex - 1];\n }\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (highlightedIndex === navigatable.current.length - 1) {\n nextHighlightedValue = navigatable.current[0];\n } else {\n nextHighlightedValue = navigatable.current[highlightedIndex + 1];\n }\n } else if (e.key === 'End') {\n e.preventDefault();\n nextHighlightedValue = navigatable.current[navigatable.current.length - 1];\n } else if (e.key === 'Home') {\n nextHighlightedValue = navigatable.current[0];\n e.preventDefault();\n }\n setHighlighted(nextHighlightedValue);\n }\n }\n };\n const isHidden = useCallback(\n (value?: string) => {\n return !visibleList.current.includes(value ?? '');\n },\n [visibleList]\n );\n\n const optionContextValue = useMemo(() => {\n return {\n search,\n updateHighlighted: setHighlighted,\n highlighted,\n isHidden,\n onSelect,\n selectedValues,\n };\n }, [search, highlighted, isHidden, onSelect, selectedValues]);\n\n const onCreateOption = (e: MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (allowCreateOption) {\n onSelect(search, 'custom', e);\n }\n };\n\n return (\n <FormRoot\n $orientation={orientation}\n $dir={dir}\n $addLabelPadding\n {...props}\n >\n <FormElementContainer>\n <SelectPopoverRoot\n open={open}\n onOpenChange={onOpenChange}\n modal={true}\n >\n <StyledSelectTrigger\n id={id ?? defaultId}\n $error={!!error}\n disabled={disabled}\n data-testid=\"select-trigger\"\n {...triggerProps}\n >\n {isInitialized && (\n <SelectValue>\n {selectedValues.length === 0 ? (\n placeholder\n ) : multiple ? (\n <MultiSelectValue\n disabled={disabled ?? false}\n onSelect={onSelect}\n selectedValues={selectedValues}\n sortable={!disabled && sortable}\n valueNode={valueNode.current}\n onChange={onChange}\n />\n ) : (\n <SingleSelectValue\n valueNode={\n checkbox && selectLabel\n ? { label: selectLabel as string, value: selectLabel as string }\n : valueNode.current.get(selectedValues[0])\n }\n value={selectedValues[0]}\n />\n )}\n </SelectValue>\n )}\n <Icon\n name=\"sort\"\n size=\"sm\"\n />\n </StyledSelectTrigger>\n {form && (\n <HiddenSelectElement\n multiple={multiple}\n name={name}\n form={form}\n value={selectedValues}\n onChange={() => null}\n >\n {list.map(item => (\n <option\n key={item.value}\n value={item.value}\n disabled={item.disabled}\n >\n {item.value}\n </option>\n ))}\n </HiddenSelectElement>\n )}\n <Portal container={portalContainer}>\n <SelectPopoverContent\n {...inputModalityProps}\n sideOffset={5}\n onFocus={onFocus}\n onCloseAutoFocus={() => {\n onUpdateSearch('');\n }}\n onOpenAutoFocus={() => {\n setHighlighted(visibleList.current[0]);\n }}\n align=\"start\"\n $useFullWidthItems={useFullWidthItems}\n $itemCharacterLimit={itemCharacterLimit}\n >\n <SelectList>\n <SearchBarContainer $showSearch={showSearch}>\n <SearchBar\n ref={inputRef}\n value={search}\n onChange={e => onUpdateSearch(e.target.value)}\n data-testid=\"select-search-input\"\n onKeyDown={onKeyDown}\n $showSearch={showSearch}\n />\n <IconButton\n className={cn(\n selectStyles['search-close'],\n search.length > 0 && selectStyles['search-close_show-close']\n )}\n htmlType=\"button\"\n icon=\"cross\"\n onClick={clearSearch}\n data-testid=\"select-search-close\"\n size=\"xs\"\n />\n </SearchBarContainer>\n <SelectListContent $maxHeight={maxHeight}>\n <OptionContext.Provider value={optionContextValue}>\n {options && options.length > 0\n ? options.map((props, index) => {\n if ('options' in props) {\n const { options: itemList = [], ...groupProps } = props;\n return (\n <SelectGroup\n key={`select-${id}-group-${index}`}\n {...groupProps}\n >\n {itemList.map((itemProps, itemIndex) => {\n if (checkbox) {\n return (\n <MultiSelectCheckboxItem\n key={`select-${id}-group-${index}-item-${itemIndex}`}\n {...itemProps}\n />\n );\n }\n return (\n <SelectItem\n key={`select-${id}-group-${index}-item-${itemIndex}`}\n {...itemProps}\n />\n );\n })}\n </SelectGroup>\n );\n } else {\n if (checkbox) {\n return (\n <MultiSelectCheckboxItem\n key={`select-${id}-item-${index}`}\n {...props}\n />\n );\n }\n return (\n <SelectItem\n key={`select-${id}-item-${index}`}\n {...props}\n />\n );\n }\n })\n : children}\n </OptionContext.Provider>\n </SelectListContent>\n {visibleList.current.length === 0 &&\n (allowCreateOption || !!noAvailableOptions) && (\n <NoOptionsDisplay\n allowCreateOption={allowCreateOption}\n search={search}\n customText={customText}\n noAvailableOptions={noAvailableOptions}\n onCreateOption={onCreateOption}\n onOpenChange={onOpenChange}\n containerProps={props}\n />\n )}\n </SelectList>\n </SelectPopoverContent>\n </Portal>\n </SelectPopoverRoot>\n {!!error && error !== true && <Error>{error}</Error>}\n </FormElementContainer>\n {label && (\n <Label\n htmlFor={id ?? defaultId}\n disabled={disabled}\n error={!!error}\n >\n {label}\n </Label>\n )}\n </FormRoot>\n );\n};\n\nexport const SelectGroup = forwardRef<HTMLDivElement, SelectGroupProps>(\n ({ children, heading, ...props }, forwardedRef) => {\n useSearch();\n return (\n <SelectGroupContainer\n {...props}\n ref={mergeRefs([\n forwardedRef,\n node => {\n const hidden = node?.querySelectorAll('[cui-select-item]').length === 0;\n if (hidden) {\n node?.setAttribute('hidden', '');\n } else {\n node?.removeAttribute('hidden');\n }\n node?.setAttribute('aria-hidden', hidden.toString());\n },\n ])}\n >\n <SelectGroupName>{heading}</SelectGroupName>\n <SelectGroupContent>{children}</SelectGroupContent>\n </SelectGroupContainer>\n );\n }\n);\n\nSelectGroup.displayName = 'Select.Group';\n\nexport const SelectItem = forwardRef<HTMLDivElement, SelectItemProps>(\n (\n {\n disabled = false,\n children,\n label,\n description,\n separator,\n onSelect: onSelectProp,\n value = '',\n icon,\n iconDir,\n onMouseOver: onMouseOverProp,\n ...props\n },\n forwardedRef\n ) => {\n const { highlighted, updateHighlighted, isHidden, selectedValues, onSelect } =\n useOption();\n const onSelectValue = (evt: MouseEvent<HTMLElement>) => {\n if (!disabled) {\n onSelect(value, undefined, evt);\n if (typeof onSelectProp == 'function') {\n onSelectProp(value, undefined, evt);\n }\n }\n };\n const onMouseOver = (e: MouseEvent<HTMLDivElement>) => {\n if (onMouseOverProp) {\n onMouseOverProp(e);\n }\n if (!disabled) {\n updateHighlighted(value);\n }\n };\n\n if (isHidden(value)) {\n return null;\n }\n const isChecked = selectedValues.includes(value);\n\n return (\n <>\n <GenericMenuItem\n {...props}\n data-value={value}\n onClick={onSelectValue}\n onMouseOver={onMouseOver}\n ref={forwardedRef}\n data-state={isChecked ? 'checked' : 'unchecked'}\n data-disabled={disabled ? true : undefined}\n data-highlighted={highlighted == value ? 'true' : undefined}\n cui-select-item=\"\"\n >\n <IconWrapper\n icon={icon}\n iconDir={iconDir}\n gap=\"xxs\"\n isResponsive={false}\n >\n {label ? (\n <>\n {label}\n {description && (\n <SelectItemDescription>{description}</SelectItemDescription>\n )}\n </>\n ) : (\n children\n )}\n </IconWrapper>\n <Icon\n className={cn(\n selectStyles['check-icon'],\n isChecked && selectStyles['check-icon_show-check']\n )}\n name=\"check\"\n size=\"sm\"\n />\n </GenericMenuItem>\n {separator && <Separator size=\"sm\" />}\n </>\n );\n }\n);\n\nexport type MultiSelectCheckboxItemProps = SelectItemProps & {\n variant?: CheckboxVariants;\n};\n\nSelectItem.displayName = 'Select.Item';\n\nexport const MultiSelectCheckboxItem = forwardRef<\n HTMLDivElement,\n MultiSelectCheckboxItemProps\n>(\n (\n {\n disabled = false,\n children,\n icon,\n iconDir = 'end',\n label,\n description,\n onMouseOver: onMouseOverProp,\n onSelect: onSelectProp,\n separator,\n value = '',\n variant,\n ...props\n },\n forwardedRef\n ) => {\n const { highlighted, updateHighlighted, isHidden, selectedValues, onSelect } =\n useOption();\n\n const handleMenuItemClick = (evt: MouseEvent<HTMLElement>) => {\n if (!disabled) {\n onSelect(value, undefined, evt);\n\n if (typeof onSelectProp === 'function') {\n onSelectProp(value, undefined, evt);\n }\n }\n };\n\n const handleMenuItemMouseOver = (e: MouseEvent<HTMLDivElement>) => {\n if (onMouseOverProp) {\n onMouseOverProp(e);\n }\n if (!disabled) {\n updateHighlighted(value);\n }\n };\n\n if (isHidden(value)) {\n return null;\n }\n\n const isChecked = selectedValues.includes(value);\n\n return (\n <>\n <GenericMenuItem\n {...props}\n data-value={value}\n onClick={handleMenuItemClick}\n onMouseOver={handleMenuItemMouseOver}\n ref={forwardedRef}\n data-disabled={disabled ? true : undefined}\n data-highlighted={highlighted == value ? 'true' : undefined}\n data-testid={`multi-select-checkbox-${value}`}\n cui-select-item=\"\"\n >\n <Container\n orientation=\"horizontal\"\n gap=\"xs\"\n overflow=\"hidden\"\n isResponsive={false}\n >\n <Checkbox\n checked={isChecked}\n data-testid=\"multi-select-checkbox\"\n disabled={disabled}\n variant={variant ?? 'default'}\n />\n <IconWrapper\n icon={icon}\n iconDir={iconDir}\n gap=\"xxs\"\n isResponsive={false}\n >\n {label ? (\n <>\n {label}\n {description && (\n <SelectItemDescription>{description}</SelectItemDescription>\n )}\n </>\n ) : (\n children\n )}\n </IconWrapper>\n </Container>\n </GenericMenuItem>\n {separator && <Separator size=\"sm\" />}\n </>\n );\n }\n);\n\nMultiSelectCheckboxItem.displayName = 'Select.Item';\n\nexport const SelectItemDescription = forwardRef<HTMLDivElement, TextProps>(\n ({ children, ...props }, ref) => {\n return (\n <Text\n ref={ref}\n component={SelectItemDescriptionText}\n color=\"muted\"\n {...props}\n >\n {children}\n </Text>\n );\n }\n);\n\nSelectItemDescription.displayName = 'Select.ItemDescription';\n"],"names":["NoOptionsDisplay","allowCreateOption","search","customText","noAvailableOptions","onCreateOption","onOpenChange","containerProps","getCustomTextWithSearch","text","replaceAll","getDefaultMessage","length","getNoAvailableOptionsNode","close","hasCustomText","hasSearchInput","shouldShowCreateOption","noOptionsNode","handleNoOptionsClick","e","isCustomReactNode","childrenToComboboxItemArray","children","callback","heading","Children","toArray","flatMap","child","isValidElement","type","displayName","groupChildren","props","getTextFromNodes","toLowerCase","title","value","disabled","nodeProps","InternalSelect","label","orientation","dir","id","error","selectedValues","onChange","onSelect","open","name","form","options","sortable","placeholder","maxHeight","multiple","checkbox","selectLabel","showSearch","container","useFullWidthItems","itemCharacterLimit","triggerProps","defaultId","useId","setSearch","useState","highlighted","setHighlighted","visibleList","useRef","navigatable","valueNode","Map","isInitialized","setInitialized","list","setList","updateElements","useCallback","includes","current","push","set","onUpdateSearch","hasHighlightedValue","visibleItemsList","navigatableList","searchLowerCase","forEach","item","updateList","lowerCasedSearch","option","map","useEffect","inputRef","inputModalityProps","useInputModality","portalContainer","useResolvedPortalContainer","onFocus","focus","clearSearch","onKeyDown","defaultPrevented","key","preventDefault","undefined","nextHighlightedValue","highlightedIndex","findIndex","isHidden","optionContextValue","useMemo","updateHighlighted","stopPropagation","get","Icon","target","cn","selectStyles","index","itemList","groupProps","itemProps","itemIndex","SelectGroup","forwardRef","forwardedRef","useSearch","mergeRefs","node","hidden","querySelectorAll","setAttribute","removeAttribute","toString","SelectItem","description","separator","onSelectProp","icon","iconDir","onMouseOver","onMouseOverProp","useOption","onSelectValue","evt","isChecked","MultiSelectCheckboxItem","variant","handleMenuItemClick","handleMenuItemMouseOver","SelectItemDescription","ref","SelectItemDescriptionText"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InternalSelect.js","sources":["../../../../../src/components/Select/common/InternalSelect.tsx"],"sourcesContent":["import {\n Children,\n FunctionComponent,\n HTMLAttributes,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n forwardRef,\n isValidElement,\n useCallback,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n NoAvailableOptionsFactoryProps,\n SelectContainerProps,\n SelectGroupProps,\n SelectItemProps,\n} from './types';\nimport { Error, FormElementContainer, FormRoot } from '@/components/FormContainer';\nimport { Portal } from '@radix-ui/react-popover';\nimport { Checkbox } from '@/components/Checkbox';\nimport type { CheckboxVariants } from '@/components/Checkbox';\nimport { Container } from '@/components/Container';\nimport { Icon } from '@/components/Icon';\nimport { IconButton } from '@/components/IconButton';\nimport { Label } from '@/components/Label';\nimport { Separator } from '@/components/Separator';\nimport { Text } from '@/components/Text';\nimport type { TextProps } from '@/components/Text';\n\nimport {\n SelectPopoverContent,\n SearchBar,\n SearchBarContainer,\n SelectList,\n SelectListContent,\n SelectPopoverRoot,\n StyledSelectTrigger,\n SelectValue,\n HiddenSelectElement,\n SelectGroupContainer,\n SelectGroupName,\n SelectGroupContent,\n SelectNoDataContainer,\n SelectItemDescriptionText,\n selectStyles,\n} from './SelectComponents';\nimport { OptionContext } from './OptionContext';\nimport { MultiSelectValue } from '../MultiSelectValue';\nimport SingleSelectValue from '../SingleSelectValue';\nimport { useOption, useSearch } from './useOption';\nimport { mergeRefs } from '@/utils/mergeRefs';\nimport { GenericMenuItem } from '@/components/GenericMenu';\nimport { IconWrapper } from '@/components/IconWrapper';\nimport { useInputModality } from '@/hooks/internal';\nimport { cn } from '@/lib/cva';\nimport { useResolvedPortalContainer } from '@/providers/PortalContext';\n\ntype NormalizedOption = {\n value: string;\n disabled?: boolean;\n};\n\ntype RegisterItem = (value: string, nodeProps: SelectItemProps) => void;\n\ninterface NoOptionsDisplayProps {\n allowCreateOption: boolean;\n search: string;\n customText: string;\n noAvailableOptions: boolean | ((props: NoAvailableOptionsFactoryProps) => ReactNode);\n onCreateOption: (e: MouseEvent<HTMLDivElement>) => void;\n onOpenChange: (open: boolean) => void;\n containerProps?: HTMLAttributes<HTMLDivElement>;\n}\n\nconst NoOptionsDisplay: React.FC<NoOptionsDisplayProps> = ({\n allowCreateOption,\n search,\n customText,\n noAvailableOptions,\n onCreateOption,\n onOpenChange,\n containerProps,\n}) => {\n const getCustomTextWithSearch = (text: string) => text.replaceAll('{search}', search);\n\n const getDefaultMessage = () =>\n `No Options found${search.length > 0 ? ` for \"${search}\" ` : ''}`;\n\n const getNoAvailableOptionsNode = (): ReactNode => {\n if (typeof noAvailableOptions === 'boolean') {\n return noAvailableOptions ? getDefaultMessage() : null;\n }\n\n // ReactNode\n return noAvailableOptions({\n search,\n close: (): void => onOpenChange(false),\n });\n };\n\n // Determine node to render when there are no options\n const hasCustomText = customText.length > 0;\n const hasSearchInput = search.length > 0;\n const shouldShowCreateOption = allowCreateOption && hasSearchInput;\n\n let noOptionsNode: ReactNode = null;\n\n if (shouldShowCreateOption) {\n noOptionsNode = hasCustomText ? getCustomTextWithSearch(customText) : `Add ${search}`;\n } else if (hasCustomText) {\n noOptionsNode = getCustomTextWithSearch(customText);\n } else {\n noOptionsNode = getNoAvailableOptionsNode();\n }\n\n if (!noOptionsNode) {\n return null;\n }\n\n const handleNoOptionsClick = (e: MouseEvent<HTMLDivElement>) => {\n if (shouldShowCreateOption) {\n onCreateOption(e);\n onOpenChange(false);\n }\n };\n\n const isCustomReactNode = typeof noAvailableOptions === 'function';\n if (isCustomReactNode) {\n return (\n <Container\n onClick={handleNoOptionsClick}\n {...containerProps}\n >\n {noOptionsNode}\n </Container>\n );\n }\n\n return (\n <SelectNoDataContainer\n onClick={handleNoOptionsClick}\n $clickable={allowCreateOption}\n {...containerProps}\n >\n {noOptionsNode}\n </SelectNoDataContainer>\n );\n};\n\nconst childrenToNormalizedOptions = (\n children: ReactNode,\n register: RegisterItem\n): NormalizedOption[] => {\n return Children.toArray(children).flatMap(child => {\n if (isValidElement(child) && child && typeof child === 'object') {\n const type = child.type as FunctionComponent;\n if (type.displayName === 'Select.Group') {\n return childrenToNormalizedOptions(child.props.children, register);\n } else if (type.displayName === 'Select.Item') {\n const { value, disabled } = child.props;\n register(value, child.props);\n return { value, disabled };\n } else if ('props' in child && child.props.children) {\n return childrenToNormalizedOptions(child.props.children, register);\n }\n }\n return [];\n });\n};\n\nexport const InternalSelect = ({\n label,\n children,\n orientation,\n dir,\n disabled,\n id,\n error,\n value: selectedValues,\n onChange,\n onSelect,\n open,\n onOpenChange,\n name,\n form,\n allowCreateOption = false,\n customText = '',\n options,\n sortable = false,\n placeholder = 'Select an option',\n maxHeight,\n multiple,\n checkbox,\n selectLabel,\n showSearch = false,\n container,\n useFullWidthItems = false,\n itemCharacterLimit = '64ch',\n noAvailableOptions = true,\n triggerProps,\n ...props\n}: SelectContainerProps) => {\n const defaultId = useId();\n const [search, setSearch] = useState('');\n const [highlighted, setHighlighted] = useState<string | undefined>();\n // value -> lowercased rendered text (item + its group heading).\n const [searchSource, setSearchSource] = useState<Map<string, string>>(() => new Map());\n const valueNode = useRef<Map<string, SelectItemProps>>(new Map());\n\n const registerValueNode = useCallback<RegisterItem>((value, nodeProps) => {\n valueNode.current.set(value, nodeProps);\n }, []);\n\n const normalizedOptions = useMemo<NormalizedOption[]>(() => {\n if (options) {\n return options.flatMap(option => {\n if ('options' in option) {\n return (option.options ?? []).map(item => {\n registerValueNode(item.value, item);\n return { value: item.value, disabled: item.disabled };\n });\n }\n registerValueNode(option.value, option);\n return { value: option.value, disabled: option.disabled };\n });\n } else if (children) {\n return childrenToNormalizedOptions(children, registerValueNode);\n }\n\n return [];\n }, [children, options, registerValueNode]);\n\n const listNode = useRef<HTMLDivElement | null>(null);\n\n const captureSearchSource = useCallback(() => {\n const root = listNode.current;\n if (!root) {\n return;\n }\n const next = new Map<string, string>();\n root.querySelectorAll<HTMLElement>('[cui-select-item][data-value]').forEach(el => {\n const value = el.getAttribute('data-value');\n if (value === null) {\n return;\n }\n const group = el.closest('[cui-select-group]');\n const heading = group?.querySelector('[cui-select-group-name]')?.textContent ?? '';\n next.set(value, `${el.textContent ?? ''} ${heading}`.toLowerCase());\n });\n setSearchSource(next);\n }, []);\n\n const onSearchChange = (next: string) => {\n if (search === '' && next !== '') {\n // recapture searchable text from DOM when a new search begins\n // to make sure it's not stale (e.g. an item changed its contents for any reason)\n captureSearchSource();\n }\n setSearch(next);\n };\n\n const matchedOptions = useMemo(() => {\n if (search === '') {\n return normalizedOptions;\n }\n const searchLowerCase = search.toLowerCase();\n return normalizedOptions.filter(item =>\n (searchSource.get(item.value) ?? '').includes(searchLowerCase)\n );\n }, [search, normalizedOptions, searchSource]);\n\n const visibleValues = useMemo(\n () => new Set(matchedOptions.map(o => o.value)),\n [matchedOptions]\n );\n const navigableValues = useMemo(\n () => matchedOptions.filter(o => !o.disabled).map(o => o.value),\n [matchedOptions]\n );\n\n // `highlighted` is the user's last pointer; honor it only while it stays navigable.\n const effectiveHighlight =\n highlighted && navigableValues.includes(highlighted)\n ? highlighted\n : navigableValues[0];\n\n const inputRef = useRef<HTMLInputElement>(null);\n const inputModalityProps = useInputModality();\n const portalContainer = useResolvedPortalContainer(container);\n\n const onFocus = () => {\n inputRef.current?.focus();\n };\n\n const clearSearch = () => {\n setSearch('');\n };\n\n const onKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n if (!e.defaultPrevented) {\n if (e.key === 'Enter') {\n e.preventDefault();\n if (effectiveHighlight) {\n onSelect(effectiveHighlight, undefined, e);\n } else if (matchedOptions.length === 0 && allowCreateOption) {\n onSelect(search, 'custom', e);\n }\n } else if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(e.key)) {\n e.preventDefault();\n let nextHighlightedValue = effectiveHighlight;\n const highlightedIndex = navigableValues.findIndex(\n value => value === effectiveHighlight\n );\n if (e.key === 'ArrowUp') {\n if (highlightedIndex === 0) {\n nextHighlightedValue = navigableValues[navigableValues.length - 1];\n } else {\n nextHighlightedValue = navigableValues[highlightedIndex - 1];\n }\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (highlightedIndex === navigableValues.length - 1) {\n nextHighlightedValue = navigableValues[0];\n } else {\n nextHighlightedValue = navigableValues[highlightedIndex + 1];\n }\n } else if (e.key === 'End') {\n e.preventDefault();\n nextHighlightedValue = navigableValues[navigableValues.length - 1];\n } else if (e.key === 'Home') {\n nextHighlightedValue = navigableValues[0];\n e.preventDefault();\n }\n setHighlighted(nextHighlightedValue);\n }\n }\n };\n const isHidden = useCallback(\n (value?: string) => !visibleValues.has(value ?? ''),\n [visibleValues]\n );\n\n const optionContextValue = useMemo(() => {\n return {\n search,\n updateHighlighted: setHighlighted,\n highlighted: effectiveHighlight,\n isHidden,\n onSelect,\n selectedValues,\n };\n }, [search, effectiveHighlight, isHidden, onSelect, selectedValues]);\n\n const onCreateOption = (e: MouseEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n if (allowCreateOption) {\n onSelect(search, 'custom', e);\n }\n };\n\n return (\n <FormRoot\n $orientation={orientation}\n $dir={dir}\n $addLabelPadding\n {...props}\n >\n <FormElementContainer>\n <SelectPopoverRoot\n open={open}\n onOpenChange={onOpenChange}\n modal={true}\n >\n <StyledSelectTrigger\n id={id ?? defaultId}\n $error={!!error}\n disabled={disabled}\n data-testid=\"select-trigger\"\n {...triggerProps}\n >\n <SelectValue>\n {selectedValues.length === 0 ? (\n placeholder\n ) : multiple ? (\n <MultiSelectValue\n disabled={disabled ?? false}\n onSelect={onSelect}\n selectedValues={selectedValues}\n sortable={!disabled && sortable}\n valueNode={valueNode.current}\n onChange={onChange}\n />\n ) : (\n <SingleSelectValue\n valueNode={\n checkbox && selectLabel\n ? { label: selectLabel as string, value: selectLabel as string }\n : valueNode.current.get(selectedValues[0])\n }\n value={selectedValues[0]}\n />\n )}\n </SelectValue>\n <Icon\n name=\"sort\"\n size=\"sm\"\n />\n </StyledSelectTrigger>\n {form && (\n <HiddenSelectElement\n multiple={multiple}\n name={name}\n form={form}\n value={selectedValues}\n onChange={() => null}\n >\n {normalizedOptions.map(item => (\n <option\n key={item.value}\n value={item.value}\n disabled={item.disabled}\n >\n {item.value}\n </option>\n ))}\n </HiddenSelectElement>\n )}\n <Portal container={portalContainer}>\n <SelectPopoverContent\n {...inputModalityProps}\n sideOffset={5}\n onFocus={onFocus}\n onCloseAutoFocus={() => {\n setSearch('');\n }}\n align=\"start\"\n $useFullWidthItems={useFullWidthItems}\n $itemCharacterLimit={itemCharacterLimit}\n >\n <SelectList>\n <SearchBarContainer $showSearch={showSearch}>\n <SearchBar\n ref={inputRef}\n value={search}\n onChange={e => onSearchChange(e.target.value)}\n data-testid=\"select-search-input\"\n onKeyDown={onKeyDown}\n $showSearch={showSearch}\n />\n <IconButton\n className={cn(\n selectStyles['search-close'],\n search.length > 0 && selectStyles['search-close_show-close']\n )}\n htmlType=\"button\"\n icon=\"cross\"\n onClick={clearSearch}\n data-testid=\"select-search-close\"\n size=\"xs\"\n />\n </SearchBarContainer>\n <SelectListContent\n ref={listNode}\n $maxHeight={maxHeight}\n >\n <OptionContext.Provider value={optionContextValue}>\n {options && options.length > 0\n ? options.map((props, index) => {\n if ('options' in props) {\n const { options: itemList = [], ...groupProps } = props;\n return (\n <SelectGroup\n key={`select-${id}-group-${index}`}\n {...groupProps}\n >\n {itemList.map((itemProps, itemIndex) => {\n if (checkbox) {\n return (\n <MultiSelectCheckboxItem\n key={`select-${id}-group-${index}-item-${itemIndex}`}\n {...itemProps}\n />\n );\n }\n return (\n <SelectItem\n key={`select-${id}-group-${index}-item-${itemIndex}`}\n {...itemProps}\n />\n );\n })}\n </SelectGroup>\n );\n } else {\n if (checkbox) {\n return (\n <MultiSelectCheckboxItem\n key={`select-${id}-item-${index}`}\n {...props}\n />\n );\n }\n return (\n <SelectItem\n key={`select-${id}-item-${index}`}\n {...props}\n />\n );\n }\n })\n : children}\n </OptionContext.Provider>\n </SelectListContent>\n {matchedOptions.length === 0 &&\n (allowCreateOption || !!noAvailableOptions) && (\n <NoOptionsDisplay\n allowCreateOption={allowCreateOption}\n search={search}\n customText={customText}\n noAvailableOptions={noAvailableOptions}\n onCreateOption={onCreateOption}\n onOpenChange={onOpenChange}\n containerProps={props}\n />\n )}\n </SelectList>\n </SelectPopoverContent>\n </Portal>\n </SelectPopoverRoot>\n {!!error && error !== true && <Error>{error}</Error>}\n </FormElementContainer>\n {label && (\n <Label\n htmlFor={id ?? defaultId}\n disabled={disabled}\n error={!!error}\n >\n {label}\n </Label>\n )}\n </FormRoot>\n );\n};\n\nexport const SelectGroup = forwardRef<HTMLDivElement, SelectGroupProps>(\n ({ children, heading, ...props }, forwardedRef) => {\n useSearch();\n return (\n <SelectGroupContainer\n {...props}\n cui-select-group=\"\"\n ref={mergeRefs([\n forwardedRef,\n node => {\n const hidden =\n node?.querySelectorAll('[cui-select-item]:not([hidden])').length === 0;\n if (hidden) {\n node?.setAttribute('hidden', '');\n } else {\n node?.removeAttribute('hidden');\n }\n node?.setAttribute('aria-hidden', hidden.toString());\n },\n ])}\n >\n <SelectGroupName cui-select-group-name=\"\">{heading}</SelectGroupName>\n <SelectGroupContent>{children}</SelectGroupContent>\n </SelectGroupContainer>\n );\n }\n);\n\nSelectGroup.displayName = 'Select.Group';\n\nexport const SelectItem = forwardRef<HTMLDivElement, SelectItemProps>(\n (\n {\n disabled = false,\n children,\n label,\n description,\n separator,\n onSelect: onSelectProp,\n value = '',\n icon,\n iconDir,\n onMouseOver: onMouseOverProp,\n ...props\n },\n forwardedRef\n ) => {\n const { highlighted, updateHighlighted, isHidden, selectedValues, onSelect } =\n useOption();\n const onSelectValue = (evt: MouseEvent<HTMLElement>) => {\n if (!disabled) {\n onSelect(value, undefined, evt);\n if (typeof onSelectProp == 'function') {\n onSelectProp(value, undefined, evt);\n }\n }\n };\n const onMouseOver = (e: MouseEvent<HTMLDivElement>) => {\n if (onMouseOverProp) {\n onMouseOverProp(e);\n }\n if (!disabled) {\n updateHighlighted(value);\n }\n };\n\n // Render hidden rather than unmounting so the text stays in the DOM for search.\n const hidden = isHidden(value);\n const isChecked = selectedValues.includes(value);\n\n return (\n <>\n <GenericMenuItem\n {...props}\n hidden={hidden}\n className={cn(selectStyles['select-item'], props.className)}\n data-value={value}\n onClick={onSelectValue}\n onMouseOver={onMouseOver}\n ref={forwardedRef}\n data-state={isChecked ? 'checked' : 'unchecked'}\n data-disabled={disabled ? true : undefined}\n data-highlighted={highlighted == value ? 'true' : undefined}\n cui-select-item=\"\"\n >\n <IconWrapper\n icon={icon}\n iconDir={iconDir}\n gap=\"xxs\"\n isResponsive={false}\n >\n {label ? (\n <>\n {label}\n {description && (\n <SelectItemDescription>{description}</SelectItemDescription>\n )}\n </>\n ) : (\n children\n )}\n </IconWrapper>\n <Icon\n className={cn(\n selectStyles['check-icon'],\n isChecked && selectStyles['check-icon_show-check']\n )}\n name=\"check\"\n size=\"sm\"\n />\n </GenericMenuItem>\n {separator && !hidden && <Separator size=\"sm\" />}\n </>\n );\n }\n);\n\nexport type MultiSelectCheckboxItemProps = SelectItemProps & {\n variant?: CheckboxVariants;\n};\n\nSelectItem.displayName = 'Select.Item';\n\nexport const MultiSelectCheckboxItem = forwardRef<\n HTMLDivElement,\n MultiSelectCheckboxItemProps\n>(\n (\n {\n disabled = false,\n children,\n icon,\n iconDir = 'end',\n label,\n description,\n onMouseOver: onMouseOverProp,\n onSelect: onSelectProp,\n separator,\n value = '',\n variant,\n ...props\n },\n forwardedRef\n ) => {\n const { highlighted, updateHighlighted, isHidden, selectedValues, onSelect } =\n useOption();\n\n const handleMenuItemClick = (evt: MouseEvent<HTMLElement>) => {\n if (!disabled) {\n onSelect(value, undefined, evt);\n\n if (typeof onSelectProp === 'function') {\n onSelectProp(value, undefined, evt);\n }\n }\n };\n\n const handleMenuItemMouseOver = (e: MouseEvent<HTMLDivElement>) => {\n if (onMouseOverProp) {\n onMouseOverProp(e);\n }\n if (!disabled) {\n updateHighlighted(value);\n }\n };\n\n // Render hidden rather than unmounting so the text stays in the DOM for search.\n const hidden = isHidden(value);\n const isChecked = selectedValues.includes(value);\n\n return (\n <>\n <GenericMenuItem\n {...props}\n hidden={hidden}\n className={cn(selectStyles['select-item'], props.className)}\n data-value={value}\n onClick={handleMenuItemClick}\n onMouseOver={handleMenuItemMouseOver}\n ref={forwardedRef}\n data-disabled={disabled ? true : undefined}\n data-highlighted={highlighted == value ? 'true' : undefined}\n data-testid={`multi-select-checkbox-${value}`}\n cui-select-item=\"\"\n >\n <Container\n orientation=\"horizontal\"\n gap=\"xs\"\n overflow=\"hidden\"\n isResponsive={false}\n >\n <Checkbox\n checked={isChecked}\n data-testid=\"multi-select-checkbox\"\n disabled={disabled}\n variant={variant ?? 'default'}\n />\n <IconWrapper\n icon={icon}\n iconDir={iconDir}\n gap=\"xxs\"\n isResponsive={false}\n >\n {label ? (\n <>\n {label}\n {description && (\n <SelectItemDescription>{description}</SelectItemDescription>\n )}\n </>\n ) : (\n children\n )}\n </IconWrapper>\n </Container>\n </GenericMenuItem>\n {separator && !hidden && <Separator size=\"sm\" />}\n </>\n );\n }\n);\n\nMultiSelectCheckboxItem.displayName = 'Select.Item';\n\nexport const SelectItemDescription = forwardRef<HTMLDivElement, TextProps>(\n ({ children, ...props }, ref) => {\n return (\n <Text\n ref={ref}\n component={SelectItemDescriptionText}\n color=\"muted\"\n {...props}\n >\n {children}\n </Text>\n );\n }\n);\n\nSelectItemDescription.displayName = 'Select.ItemDescription';\n"],"names":["NoOptionsDisplay","allowCreateOption","search","customText","noAvailableOptions","onCreateOption","onOpenChange","containerProps","getCustomTextWithSearch","text","replaceAll","getDefaultMessage","length","getNoAvailableOptionsNode","close","hasCustomText","hasSearchInput","shouldShowCreateOption","noOptionsNode","handleNoOptionsClick","e","isCustomReactNode","childrenToNormalizedOptions","children","register","Children","toArray","flatMap","child","isValidElement","type","displayName","props","value","disabled","InternalSelect","label","orientation","dir","id","error","selectedValues","onChange","onSelect","open","name","form","options","sortable","placeholder","maxHeight","multiple","checkbox","selectLabel","showSearch","container","useFullWidthItems","itemCharacterLimit","triggerProps","defaultId","useId","setSearch","useState","highlighted","setHighlighted","searchSource","setSearchSource","Map","valueNode","useRef","registerValueNode","useCallback","nodeProps","current","set","normalizedOptions","useMemo","option","map","item","listNode","captureSearchSource","root","next","querySelectorAll","forEach","el","getAttribute","group","closest","heading","querySelector","textContent","toLowerCase","onSearchChange","matchedOptions","searchLowerCase","filter","get","includes","visibleValues","Set","o","navigableValues","effectiveHighlight","inputRef","inputModalityProps","useInputModality","portalContainer","useResolvedPortalContainer","onFocus","focus","clearSearch","onKeyDown","defaultPrevented","key","preventDefault","undefined","nextHighlightedValue","highlightedIndex","findIndex","isHidden","has","optionContextValue","updateHighlighted","stopPropagation","Icon","target","cn","selectStyles","index","itemList","groupProps","itemProps","itemIndex","SelectGroup","forwardRef","forwardedRef","useSearch","mergeRefs","node","hidden","setAttribute","removeAttribute","toString","SelectItem","description","separator","onSelectProp","icon","iconDir","onMouseOver","onMouseOverProp","useOption","onSelectValue","evt","isChecked","className","MultiSelectCheckboxItem","variant","handleMenuItemClick","handleMenuItemMouseOver","SelectItemDescription","ref","SelectItemDescriptionText"],"mappings":"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"}
|