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