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