@crab-dev/rc-select 0.0.3 → 0.0.5

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/CHANGELOG.md ADDED
@@ -0,0 +1,18 @@
1
+ # @crab-dev/rc-select
2
+
3
+ ## 0.0.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [`3a32293`](https://github.com/hotlif/crab-dev/commit/3a32293c30ac0e77d5f0a6fa0e2173e9293cd462) Thanks [@hotlif](https://github.com/hotlif)! - Use cached axis metrics, binary-search range lookup, configurable overscan, and animation-frame coalescing to reduce virtual scrolling work.
8
+
9
+ - [`01b9bde`](https://github.com/hotlif/crab-dev/commit/01b9bde4201bf08eced59f222a53bb3d018460e3) Thanks [@hotlif](https://github.com/hotlif)! - Remove the extra leading line box before the first virtualized select option.
10
+ - Updated dependencies [[`35d5f5a`](https://github.com/hotlif/crab-dev/commit/35d5f5ab65b8e038d34e1c889de56e1aecad53d0), [`3a32293`](https://github.com/hotlif/crab-dev/commit/3a32293c30ac0e77d5f0a6fa0e2173e9293cd462), [`f991b0e`](https://github.com/hotlif/crab-dev/commit/f991b0eede1ead4d70534302bd51f47b0a4ab143)]:
11
+ - @crab-dev/rc-button@0.0.3
12
+ - @crab-dev/rc-virtual@0.1.4
13
+ - @crab-dev/rc-dropdown-container@0.0.5
14
+ - @crab-dev/rc-line-edit@0.0.5
15
+ - @crab-dev/rc-spin@0.0.4
16
+ - @crab-dev/rc-checkbox@0.0.4
17
+ - @crab-dev/rc-config-provider@0.0.2
18
+ - @crab-dev/rc-tag@0.0.3
package/README.md CHANGED
@@ -1,20 +1,15 @@
1
- 下拉选择器,支持单选、多选和搜索
1
+ # @crab-dev/rc-select
2
2
 
3
- ## ✨ 特性
3
+ 在下拉列表中选择一个或多个值,支持搜索选项。
4
4
 
5
- - 提供下拉选择能力,适用于结构化选项录入
6
- - 支持在有限空间内高效完成选项检索与选择
7
- - 适用于表单字段、筛选面板与配置项编辑
8
- - 当前版本:`0.0.1`
9
- - 示例数量:`10` 个 Demo
10
- - 主题能力:支持 Design Token(token.toml)
5
+ ## 主要功能
11
6
 
12
- ## 🔨 使用示例
7
+ - 支持单选、多选、搜索过滤和禁用选项。
8
+ - 提供受控与非受控用法,适用于表单和筛选面板。
13
9
 
14
- <demos />
10
+ ## 文档
15
11
 
16
- ## API
12
+ - [使用说明与 API](./docs/index.mdx)
13
+ - [示例源码](./docs/demos/)
17
14
 
18
- <api />
19
-
20
- > 其余原生属性按底层实现透传,详见 API。
15
+ 在当前包目录运行 `yarn start` 可打开组件工作台,查看交互示例。
@@ -0,0 +1,40 @@
1
+ Object.defineProperty(exports, "__esModule", { value: true });
2
+ const __wake_namespace_0 = require("react");
3
+ ;
4
+ ;
5
+ const useKeyboardNavigation = ({ filteredOptions, open }) => {
6
+ const [highlightIndex, setHighlightIndex] = (0, __wake_namespace_0["useState"])(-1);
7
+ const findNextEnabledIndex = (startIndex, direction) => {
8
+ const len = filteredOptions.length;
9
+ if (len === 0) {
10
+ return -1;
11
+ }
12
+ let index = startIndex;
13
+ for (let i = 0; i < len; i += 1) {
14
+ index = ((index + direction) % len + len) % len;
15
+ const opt = filteredOptions[index];
16
+ if (!opt.disabled && !opt.isGroupLabel) {
17
+ return index;
18
+ }
19
+ }
20
+ return -1;
21
+ };
22
+ const moveHighlight = (direction) => {
23
+ if (!open) {
24
+ return;
25
+ }
26
+ setHighlightIndex((prev) => {
27
+ const start = prev === -1 ? direction === 1 ? -1 : 0 : prev;
28
+ return findNextEnabledIndex(start, direction);
29
+ });
30
+ };
31
+ const resetHighlight = () => {
32
+ setHighlightIndex(-1);
33
+ };
34
+ const highlightedOption = highlightIndex >= 0 && highlightIndex < filteredOptions.length ? filteredOptions[highlightIndex] : undefined;
35
+ return { highlightIndex, highlightedOption, moveHighlight, resetHighlight, setHighlightIndex };
36
+ };
37
+ const __wake_default_export = useKeyboardNavigation;
38
+ Object.defineProperty(exports, "default", { enumerable: true, get: function() {
39
+ return __wake_default_export;
40
+ } });
@@ -0,0 +1,139 @@
1
+ Object.defineProperty(exports, "__esModule", { value: true });
2
+ const __wake_namespace_0 = require("react/jsx-runtime");
3
+ const __wake_namespace_1 = require("@crab-dev/rc-config-provider");
4
+ const __wake_namespace_2 = require("@crab-dev/rc-dropdown-container");
5
+ const __wake_namespace_3 = require("react");
6
+ const __wake_namespace_4 = require("@crab-dev/rc-hooks");
7
+ const __wake_namespace_5 = require("./hooks/useKeyboardNavigation.cjs");
8
+ const __wake_namespace_6 = require("./selectInput.cjs");
9
+ const __wake_namespace_7 = require("./selectOverlay.cjs");
10
+ require("./token.cjs");
11
+ ;
12
+ const isGroup = (item) => "options" in item && Array.isArray(item.options);
13
+ const asArray = (value) => {
14
+ if (value == null) {
15
+ return [];
16
+ }
17
+ return Array.isArray(value) ? value : [value];
18
+ };
19
+ const flattenOptions = (options) => {
20
+ const result = [];
21
+ options.forEach((item, index) => {
22
+ if (isGroup(item)) {
23
+ result.push({ label: item.label, value: `__group_${index}`, isGroupLabel: true });
24
+ for (const opt of item.options) {
25
+ result.push(opt);
26
+ }
27
+ } else {
28
+ result.push(item);
29
+ }
30
+ });
31
+ return result;
32
+ };
33
+ const flattenPlainOptions = (options) => {
34
+ const result = [];
35
+ for (const item of options) {
36
+ if (isGroup(item)) {
37
+ for (const opt of item.options) {
38
+ result.push(opt);
39
+ }
40
+ } else {
41
+ result.push(item);
42
+ }
43
+ }
44
+ return result;
45
+ };
46
+ const filterOptions = (flatOptions, searchable, searchText) => {
47
+ if (!searchable || searchText.trim() === "") {
48
+ return flatOptions;
49
+ }
50
+ const keyword = searchText.trim().toLowerCase();
51
+ return flatOptions.filter((opt) => {
52
+ if (opt.isGroupLabel) {
53
+ return false;
54
+ }
55
+ if (typeof opt.label === "string") {
56
+ return opt.label.toLowerCase().includes(keyword);
57
+ }
58
+ return opt.value.toLowerCase().includes(keyword);
59
+ });
60
+ };
61
+ const firstEnabledIndex = (flatOptions) => flatOptions.findIndex((opt) => !opt.disabled && !opt.isGroupLabel);
62
+ const fieldStyle = "rc-select-0f3ecf945b98";
63
+ const supportingStyle = "rc-select-3bd2a27273ad";
64
+ const Select = ({ ref, id, options, placeholder = "请选择", disabled = false, searchable = false, multiple = false, size: sizeProp, status, appearance = "outlined", label, supportingText, errorText, required, allowClear = false, loading = false, maxTagCount, autoFocus = false, notFoundContent, popupClassName, popupMatchSelectWidth = true, optionRender, tagRender, dropdownRender, value, defaultValue, onChange, onOpenChange, onFocus, onBlur, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, ...restProps }) => {
65
+ const size = (0, __wake_namespace_1["useComponentSize"])(sizeProp);
66
+ const listboxId = (0, __wake_namespace_3["useId"])();
67
+ const generatedId = (0, __wake_namespace_3["useId"])();
68
+ const inputId = id ?? generatedId;
69
+ const labelId = `${generatedId}-label`;
70
+ const descriptionId = `${generatedId}-description`;
71
+ const fieldStatus = errorText ? "error" : status;
72
+ const description = errorText || supportingText;
73
+ const [searchText, setSearchText] = (0, __wake_namespace_3["useState"])("");
74
+ const [selectedValues, setSelectedValues] = (0, __wake_namespace_4["useControllableValue"])({ value: value !== undefined ? asArray(value) : undefined, defaultValue: asArray(defaultValue) });
75
+ const [triggerWidth, setTriggerWidth] = (0, __wake_namespace_3["useState"])(0);
76
+ const onOpenChangeRef = (0, __wake_namespace_3["useRef"])(onOpenChange);
77
+ onOpenChangeRef.current = onOpenChange;
78
+ const allPlainOptions = flattenPlainOptions(options);
79
+ const selectedOptions = allPlainOptions.filter((opt) => selectedValues.includes(opt.value));
80
+ const flatOptions = flattenOptions(options);
81
+ const filteredOptions = filterOptions(flatOptions, searchable, searchText);
82
+ const { highlightIndex, highlightedOption, moveHighlight, resetHighlight, setHighlightIndex } = (0, __wake_namespace_5 && __wake_namespace_5.__esModule ? __wake_namespace_5.default : __wake_namespace_5)({ filteredOptions, open: true });
83
+ const emitOpenChange = (nextOpen) => {
84
+ if (nextOpen) {
85
+ if (!multiple && selectedValues.length > 0) {
86
+ const selectedIndex = filteredOptions.findIndex((opt) => opt.value === selectedValues[0]);
87
+ setHighlightIndex(selectedIndex);
88
+ }
89
+ } else {
90
+ setSearchText("");
91
+ resetHighlight();
92
+ }
93
+ onOpenChangeRef.current?.(nextOpen);
94
+ };
95
+ const updateValue = (nextValues) => {
96
+ setSelectedValues(nextValues);
97
+ if (multiple) {
98
+ const nextOptions = allPlainOptions.filter((opt) => nextValues.includes(opt.value));
99
+ onChange?.(nextValues, nextOptions);
100
+ return;
101
+ }
102
+ const nextValue = nextValues[0] ?? null;
103
+ const nextOption = allPlainOptions.find((opt) => opt.value === nextValue);
104
+ onChange?.(nextValue, nextOption);
105
+ };
106
+ const handleOptionSelect = (option) => {
107
+ if (option.disabled || option.isGroupLabel) {
108
+ return;
109
+ }
110
+ if (multiple) {
111
+ const exists = selectedValues.includes(option.value);
112
+ const nextValues = exists ? selectedValues.filter((v) => v !== option.value) : [...selectedValues, option.value];
113
+ updateValue(nextValues);
114
+ return;
115
+ }
116
+ updateValue([option.value]);
117
+ };
118
+ const handleClear = () => {
119
+ updateValue([]);
120
+ setSearchText("");
121
+ };
122
+ const handleRemoveTag = (val) => {
123
+ updateValue(selectedValues.filter((v) => v !== val));
124
+ };
125
+ const handleTriggerWidthChange = (width) => {
126
+ setTriggerWidth(width);
127
+ };
128
+ const handleSearchTextChange = (text) => {
129
+ setSearchText(text);
130
+ const nextFiltered = filterOptions(flatOptions, searchable, text);
131
+ setHighlightIndex(firstEnabledIndex(nextFiltered));
132
+ };
133
+ const floatingStyle = popupMatchSelectWidth ? { width: triggerWidth } : { minWidth: triggerWidth };
134
+ return (0, __wake_namespace_0["jsx"])(__wake_namespace_2 && __wake_namespace_2.__esModule ? __wake_namespace_2.default : __wake_namespace_2, { size: size, ...restProps, className: className, overlay: (0, __wake_namespace_0["jsx"])(__wake_namespace_7 && __wake_namespace_7.__esModule ? __wake_namespace_7.default : __wake_namespace_7, { multiple: multiple, loading: loading, filteredOptions: filteredOptions, selectedValues: selectedValues, triggerWidth: triggerWidth, highlightIndex: highlightIndex, listboxId: listboxId, notFoundContent: notFoundContent, popupClassName: popupClassName, optionRender: optionRender, dropdownRender: dropdownRender, onOptionSelect: handleOptionSelect, onOpenChange: emitOpenChange, onHighlightChange: setHighlightIndex }), floatingContainerProps: { style: floatingStyle }, children: (0, __wake_namespace_0["jsxs"])("div", { className: fieldStyle, children: [(0, __wake_namespace_0["jsx"])(__wake_namespace_6 && __wake_namespace_6.__esModule ? __wake_namespace_6.default : __wake_namespace_6, { ref: ref, id: inputId, ariaLabel: ariaLabel, ariaLabelledBy: ariaLabelledBy ?? (label ? labelId : undefined), ariaDescribedBy: [ariaDescribedBy, description ? descriptionId : undefined].filter(Boolean).join(" ") || undefined, disabled: disabled, searchable: searchable, multiple: multiple, size: size, status: fieldStatus, appearance: appearance, label: label, labelId: labelId, required: required, allowClear: allowClear, loading: loading, maxTagCount: maxTagCount, autoFocus: autoFocus, placeholder: placeholder, selectedOptions: selectedOptions, searchText: searchText, highlightIndex: highlightIndex, highlightedOption: highlightedOption, listboxId: listboxId, tagRender: tagRender, onSearchTextChange: handleSearchTextChange, onOpenChange: emitOpenChange, onWidthChange: handleTriggerWidthChange, onMoveHighlight: moveHighlight, onSelectHighlighted: handleOptionSelect, onClear: handleClear, onRemoveTag: handleRemoveTag, onFocus: onFocus, onBlur: onBlur }), description && (0, __wake_namespace_0["jsx"])("div", { id: descriptionId, className: supportingStyle, "data-status": fieldStatus, children: description })] }) });
135
+ };
136
+ const __wake_default_export = Select;
137
+ Object.defineProperty(exports, "default", { enumerable: true, get: function() {
138
+ return __wake_default_export;
139
+ } });
@@ -0,0 +1,222 @@
1
+ Object.defineProperty(exports, "__esModule", { value: true });
2
+ const __wake_namespace_0 = require("react/jsx-runtime");
3
+ const __wake_namespace_1 = require("@crab-dev/rc-dropdown-container");
4
+ const __wake_namespace_2 = require("@crab-dev/rc-line-edit");
5
+ const __wake_namespace_3 = require("@crab-dev/rc-button");
6
+ const __wake_namespace_4 = require("@crab-dev/rc-spin");
7
+ const __wake_namespace_5 = require("@crab-dev/rc-tag");
8
+ const __wake_namespace_6 = require("@crab-dev/css");
9
+ const __wake_namespace_7 = require("react");
10
+ require("./token.cjs");
11
+ ;
12
+ const setRef = (ref, node) => {
13
+ if (typeof ref === "function") {
14
+ ref(node);
15
+ } else if (ref) {
16
+ ref.current = node;
17
+ }
18
+ };
19
+ const controlStyle = "rc-select-208f8e064cef";
20
+ const materialFieldStyle = "rc-select-de4f87d60f05";
21
+ const fieldLabelStyle = "rc-select-608ca49a02dc";
22
+ const controlDisabledStyle = "rc-select-238e884e6a17";
23
+ const controlErrorStyle = "rc-select-e0726e9ad481";
24
+ const controlWarningStyle = "rc-select-79b739b32fcb";
25
+ const valueWrapStyle = "rc-select-1356dfc74a7f";
26
+ const singleValueStyle = "rc-select-52cbc5cc4f0f";
27
+ const placeholderStyle = "rc-select-37ce25dfcd13";
28
+ const searchInputStyle = "rc-select-50dd3c70bcdc";
29
+ const caretStyle = "rc-select-d7edabfe7361";
30
+ const caretOpenStyle = "rc-select-30173f5e3d41";
31
+ const tagLabelStyle = "rc-select-2e4337f305d8";
32
+ const suffixWrapStyle = "rc-select-ee9f2054c459";
33
+ const actionStyle = "rc-select-8504d95b52bc";
34
+ const loadingIconStyle = "rc-select-3ab2c2f8c427";
35
+ const sizeMetricsMap = { large: "rc-select-df4a743b55e1", middle: "rc-select-de4a743b542e", small: "rc-select-dd4a743b527b" };
36
+ const sizeHeightFixedMap = { large: "rc-select-b8fc5925a597", middle: "rc-select-b7fc5925a3e4", small: "rc-select-bafc5925a8fd" };
37
+ const sizeHeightFlexibleMap = { large: "rc-select-5d07f79a2f4a", middle: "rc-select-5e07f79a30fd", small: "rc-select-5b07f79a2be4" };
38
+ const CaretIcon = () => (0, __wake_namespace_0["jsx"])("svg", { "aria-hidden": "true", focusable: "false", viewBox: "0 0 24 24", fill: "currentColor", children: (0, __wake_namespace_0["jsx"])("path", { d: "m7 10 5 5 5-5z" }) });
39
+ const ClearIcon = () => (0, __wake_namespace_0["jsx"])("svg", { "aria-hidden": "true", focusable: "false", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: (0, __wake_namespace_0["jsx"])("path", { d: "m18 6-12 12M6 6l12 12" }) });
40
+ ;
41
+ const SelectInput = ({ ref, id, ariaLabel, ariaLabelledBy, ariaDescribedBy, disabled, searchable, multiple, size, status, appearance, label, labelId, required, allowClear, loading, maxTagCount, autoFocus, placeholder, selectedOptions, searchText, highlightIndex, highlightedOption, listboxId, tagRender, onSearchTextChange, onOpenChange, onWidthChange, onMoveHighlight, onSelectHighlighted, onClear, onRemoveTag, onFocus, onBlur }) => {
42
+ const { state, refs, dispatch } = (0, __wake_namespace_1["useDropdownContext"])();
43
+ const controlRef = (0, __wake_namespace_7["useRef"])(null);
44
+ const inputRef = (0, __wake_namespace_7["useRef"])(null);
45
+ const open = state.open;
46
+ const [hovered, setHovered] = (0, __wake_namespace_7["useState"])(false);
47
+ const [actionFocused, setActionFocused] = (0, __wake_namespace_7["useState"])(false);
48
+ const [withoutHover, setWithoutHover] = (0, __wake_namespace_7["useState"])(false);
49
+ (0, __wake_namespace_7["useEffect"])(() => {
50
+ const media = window.matchMedia?.("(hover: none)");
51
+ if (!media) return;
52
+ const update = () => setWithoutHover(media.matches);
53
+ update();
54
+ media.addEventListener("change", update);
55
+ return () => media.removeEventListener("change", update);
56
+ }, []);
57
+ const onOpenChangeRef = (0, __wake_namespace_7["useRef"])(onOpenChange);
58
+ onOpenChangeRef.current = onOpenChange;
59
+ const mergeRef = (0, __wake_namespace_7["useCallback"])((node) => {
60
+ controlRef.current = node;
61
+ if (typeof refs.setReference === "function") {
62
+ refs.setReference(node);
63
+ }
64
+ setRef(ref, node);
65
+ }, [refs.setReference, ref]);
66
+ (0, __wake_namespace_7["useEffect"])(() => {
67
+ const el = controlRef.current;
68
+ if (!el) {
69
+ return;
70
+ }
71
+ const observer = new ResizeObserver((entries) => {
72
+ for (const entry of entries) {
73
+ onWidthChange(entry.target.getBoundingClientRect().width);
74
+ }
75
+ });
76
+ observer.observe(el);
77
+ return () => observer.disconnect();
78
+ }, [onWidthChange]);
79
+ (0, __wake_namespace_7["useEffect"])(() => {
80
+ if (open && searchable) {
81
+ queueMicrotask(() => inputRef.current?.focus());
82
+ }
83
+ }, [open, searchable]);
84
+ (0, __wake_namespace_7["useEffect"])(() => {
85
+ if (autoFocus && controlRef.current) {
86
+ controlRef.current.focus();
87
+ }
88
+ }, [autoFocus]);
89
+ const isFirstOpenRender = (0, __wake_namespace_7["useRef"])(true);
90
+ (0, __wake_namespace_7["useEffect"])(() => {
91
+ if (isFirstOpenRender.current) {
92
+ isFirstOpenRender.current = false;
93
+ return;
94
+ }
95
+ onOpenChangeRef.current(open);
96
+ }, [open]);
97
+ const handleClick = () => {
98
+ if (disabled) {
99
+ return;
100
+ }
101
+ dispatch({ type: "setOpen", payload: !open });
102
+ };
103
+ const handleKeyDown = (e) => {
104
+ if (disabled) {
105
+ return;
106
+ }
107
+ switch (e.key) {
108
+ case "ArrowDown":
109
+ e.preventDefault();
110
+ if (!open) {
111
+ dispatch({ type: "setOpen", payload: true });
112
+ }
113
+ onMoveHighlight(1);
114
+ break;
115
+ case "ArrowUp":
116
+ e.preventDefault();
117
+ if (!open) {
118
+ dispatch({ type: "setOpen", payload: true });
119
+ }
120
+ onMoveHighlight(-1);
121
+ break;
122
+ case "Enter":
123
+ e.preventDefault();
124
+ if (open && highlightedOption) {
125
+ onSelectHighlighted(highlightedOption);
126
+ if (!multiple) {
127
+ dispatch({ type: "setOpen", payload: false });
128
+ }
129
+ } else if (!open) {
130
+ dispatch({ type: "setOpen", payload: true });
131
+ }
132
+ break;
133
+ case " ":
134
+ if (!searchable || !open) {
135
+ e.preventDefault();
136
+ if (!open) {
137
+ dispatch({ type: "setOpen", payload: true });
138
+ }
139
+ }
140
+ break;
141
+ case "Escape":
142
+ if (open) {
143
+ e.preventDefault();
144
+ dispatch({ type: "setOpen", payload: false });
145
+ }
146
+ break;
147
+ case "Backspace":
148
+ if (multiple && searchText === "" && selectedOptions.length > 0) {
149
+ const lastOption = selectedOptions[selectedOptions.length - 1];
150
+ onRemoveTag(lastOption.value);
151
+ }
152
+ break;
153
+ default:
154
+ break;
155
+ }
156
+ };
157
+ const triggerClear = () => {
158
+ controlRef.current?.focus();
159
+ onClear();
160
+ if (open) {
161
+ dispatch({ type: "setOpen", payload: false });
162
+ }
163
+ };
164
+ const handleClearClick = (e) => {
165
+ e.stopPropagation();
166
+ triggerClear();
167
+ };
168
+ const handleClearKeyDown = (e) => {
169
+ if (e.key === "Enter" || e.key === " ") {
170
+ e.stopPropagation();
171
+ }
172
+ };
173
+ const canClear = allowClear && !disabled && selectedOptions.length > 0;
174
+ const showClear = canClear && (hovered || actionFocused || withoutHover);
175
+ const renderTag = (opt) => {
176
+ const handleClose = () => onRemoveTag(opt.value);
177
+ if (tagRender) {
178
+ return (0, __wake_namespace_0["jsx"])("span", { children: tagRender(opt, handleClose) }, opt.value);
179
+ }
180
+ return (0, __wake_namespace_0["jsx"])(__wake_namespace_5 && __wake_namespace_5.__esModule ? __wake_namespace_5.default : __wake_namespace_5, { size: "small", closable: true, closeAriaLabel: `Remove ${typeof opt.label === "string" ? opt.label : opt.value}`, onClose: handleClose, children: (0, __wake_namespace_0["jsx"])("span", { className: tagLabelStyle, children: opt.label }) }, opt.value);
181
+ };
182
+ const renderTags = () => {
183
+ if (maxTagCount !== undefined && selectedOptions.length > maxTagCount) {
184
+ const visible = selectedOptions.slice(0, maxTagCount);
185
+ const overflowCount = selectedOptions.length - maxTagCount;
186
+ return (0, __wake_namespace_0["jsxs"])(__wake_namespace_0["Fragment"], { children: [visible.map(renderTag), (0, __wake_namespace_0["jsxs"])(__wake_namespace_5 && __wake_namespace_5.__esModule ? __wake_namespace_5.default : __wake_namespace_5, { size: "small", children: ["+", overflowCount] })] });
187
+ }
188
+ return selectedOptions.map(renderTag);
189
+ };
190
+ const renderContent = () => {
191
+ if (searchable && open) {
192
+ return (0, __wake_namespace_0["jsxs"])(__wake_namespace_0["Fragment"], { children: [multiple && renderTags(), (0, __wake_namespace_0["jsx"])(__wake_namespace_2 && __wake_namespace_2.__esModule ? __wake_namespace_2.default : __wake_namespace_2, { ref: inputRef, bordered: false, value: searchText, placeholder: multiple && selectedOptions.length > 0 ? "" : placeholder, onChange: (e) => onSearchTextChange(e.target.value), onClick: (e) => e.stopPropagation(), className: searchInputStyle })] });
193
+ }
194
+ if (multiple) {
195
+ if (selectedOptions.length === 0) {
196
+ return (0, __wake_namespace_0["jsx"])("span", { className: placeholderStyle, children: placeholder });
197
+ }
198
+ return renderTags();
199
+ }
200
+ if (selectedOptions.length === 0) {
201
+ return (0, __wake_namespace_0["jsx"])("span", { className: placeholderStyle, children: placeholder });
202
+ }
203
+ return (0, __wake_namespace_0["jsx"])("span", { className: singleValueStyle, children: selectedOptions[0]?.label });
204
+ };
205
+ const activeDescendantId = open && highlightIndex >= 0 ? `${listboxId}-option-${highlightIndex}` : undefined;
206
+ return (0, __wake_namespace_0["jsxs"])("div", { id: id, role: "combobox", "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, "aria-required": required || undefined, "aria-expanded": open, "aria-disabled": disabled, "aria-busy": loading || undefined, "aria-haspopup": "listbox", "aria-controls": open ? listboxId : undefined, "aria-activedescendant": activeDescendantId, "aria-invalid": status === "error" ? true : undefined, "data-appearance": appearance, "data-clearable": canClear, "data-labeled": Boolean(label), "data-floating": Boolean(open || selectedOptions.length > 0 || searchText), "data-status": status, tabIndex: disabled ? -1 : 0, ref: mergeRef, className: __wake_namespace_6["cx"].call(undefined, controlStyle, sizeMetricsMap[size], multiple ? sizeHeightFlexibleMap[size] : sizeHeightFixedMap[size], disabled && controlDisabledStyle, status === "error" && controlErrorStyle, status === "warning" && controlWarningStyle, materialFieldStyle), onClick: handleClick, onKeyDown: handleKeyDown, onFocus: onFocus, onBlur: onBlur, onPointerOver: (event) => {
207
+ if (event.pointerType !== "touch") setHovered(true);
208
+ }, onPointerOut: (event) => {
209
+ if (!(event.relatedTarget instanceof Node) || !event.currentTarget.contains(event.relatedTarget)) {
210
+ setHovered(false);
211
+ }
212
+ }, children: [label && (0, __wake_namespace_0["jsxs"])("span", { id: labelId, "data-role": "select-label", className: fieldLabelStyle, children: [label, required ? " *" : ""] }), (0, __wake_namespace_0["jsx"])("div", { "data-role": "select-value", className: valueWrapStyle, children: renderContent() }), (0, __wake_namespace_0["jsxs"])("span", { "data-role": "select-suffix", className: suffixWrapStyle, children: [loading ? (0, __wake_namespace_0["jsx"])("span", { "aria-hidden": "true", className: loadingIconStyle, children: (0, __wake_namespace_0["jsx"])(__wake_namespace_4["SpinIndicator"], {}) }) : null, (0, __wake_namespace_0["jsx"])(__wake_namespace_3 && __wake_namespace_3.__esModule ? __wake_namespace_3.default : __wake_namespace_3, { "data-role": showClear ? "select-clear" : "select-caret", className: actionStyle, type: "button", appearance: "text", shape: "circle", size: size, disabled: disabled, "aria-label": showClear ? "Clear" : open ? "Close options" : "Open options", "aria-expanded": showClear ? undefined : open, icon: showClear ? (0, __wake_namespace_0["jsx"])(ClearIcon, {}) : (0, __wake_namespace_0["jsx"])("span", { "aria-hidden": "true", className: __wake_namespace_6["cx"].call(undefined, caretStyle, open && caretOpenStyle), children: (0, __wake_namespace_0["jsx"])(CaretIcon, {}) }), onFocus: () => setActionFocused(true), onBlur: () => setActionFocused(false), onClick: (event) => {
213
+ if (showClear) handleClearClick(event); else {
214
+ event.stopPropagation();
215
+ handleClick();
216
+ }
217
+ }, onKeyDown: handleClearKeyDown })] })] });
218
+ };
219
+ const __wake_default_export = SelectInput;
220
+ Object.defineProperty(exports, "default", { enumerable: true, get: function() {
221
+ return __wake_default_export;
222
+ } });
@@ -0,0 +1,102 @@
1
+ Object.defineProperty(exports, "__esModule", { value: true });
2
+ const __wake_namespace_0 = require("react/jsx-runtime");
3
+ const __wake_namespace_1 = require("@crab-dev/rc-checkbox");
4
+ const __wake_namespace_2 = require("@crab-dev/rc-spin");
5
+ const __wake_namespace_3 = require("@crab-dev/rc-virtual");
6
+ const __wake_namespace_4 = require("@crab-dev/rc-hooks");
7
+ const __wake_namespace_5 = require("@crab-dev/css");
8
+ const __wake_namespace_6 = require("@crab-dev/rc-dropdown-container");
9
+ const __wake_namespace_7 = require("react");
10
+ require("./token.cjs");
11
+ ;
12
+ const hasGroups = (options) => options.some((opt) => opt.isGroupLabel);
13
+ const overlayStyle = "rc-select-8032ea9d3fcc";
14
+ const optionStyle = "rc-select-41a9c05e6999";
15
+ const optionHighlightStyle = "rc-select-787681543371";
16
+ const measureStyle = "rc-select-9fccdf1a17f8";
17
+ const optionSelectedStyle = "rc-select-afbd832dfa96";
18
+ const optionSelectedSingleStyle = "rc-select-92da46dc013a";
19
+ const optionDisabledStyle = "rc-select-b51a97d11fd1";
20
+ const optionLabelStyle = "rc-select-462ffe03d1f7";
21
+ const checkIconStyle = "rc-select-4d7b259b317b";
22
+ const checkboxIndicatorStyle = "rc-select-8509288b81d2";
23
+ const emptyStyle = "rc-select-742133f23b03";
24
+ const groupLabelStyle = "rc-select-4222a3b1548f";
25
+ const groupedOptionStyle = "rc-select-fa0b905ad8a1";
26
+ const virtualTopSpacerStyle = "rc-select-25c250ff4ce4";
27
+ const virtualBottomSpacerStyle = "rc-select-bf5e0c73c29c";
28
+ const loadingStyle = "rc-select-0ed119f292d0";
29
+ const DROPDOWN_PADDING = 4;
30
+ const ROW_HEIGHT = 48;
31
+ const MAX_VIEWPORT_HEIGHT = 256;
32
+ ;
33
+ const SelectOverlay = ({ multiple, loading, filteredOptions, selectedValues, triggerWidth, highlightIndex, listboxId, notFoundContent, popupClassName, optionRender, dropdownRender, onOptionSelect, onOpenChange, onHighlightChange }) => {
34
+ const { dispatch } = (0, __wake_namespace_6["useDropdownContext"])();
35
+ const coarsePointer = (0, __wake_namespace_4["useMediaQuery"])("(pointer: coarse)");
36
+ const overlayRef = (0, __wake_namespace_7["useRef"])(null);
37
+ const [measuredRowHeight, setMeasuredRowHeight] = (0, __wake_namespace_7["useState"])(ROW_HEIGHT);
38
+ const rowHeight = Math.max(coarsePointer ? 48 : ROW_HEIGHT, measuredRowHeight);
39
+ (0, __wake_namespace_7["useLayoutEffect"])(() => {
40
+ const option = overlayRef.current?.querySelector("[data-select-option-measure]");
41
+ if (!option) return;
42
+ const measure = () => {
43
+ const height = option.getBoundingClientRect().height;
44
+ if (height > 0) {
45
+ overlayRef.current?.style.setProperty("--select-option-measured-height", `${height}px`);
46
+ setMeasuredRowHeight(height);
47
+ }
48
+ };
49
+ measure();
50
+ if (typeof ResizeObserver === "undefined") return;
51
+ const observer = new ResizeObserver(measure);
52
+ observer.observe(option);
53
+ return () => observer.disconnect();
54
+ }, [coarsePointer, filteredOptions.length, loading]);
55
+ const gridRef = (0, __wake_namespace_7["useRef"])(null);
56
+ (0, __wake_namespace_7["useEffect"])(() => {
57
+ if (highlightIndex < 0) {
58
+ return;
59
+ }
60
+ gridRef.current?.scrollToCell({ rowIndex: highlightIndex });
61
+ }, [highlightIndex]);
62
+ const rowCount = filteredOptions.length;
63
+ const contentWidth = Math.max(triggerWidth - DROPDOWN_PADDING * 2, 160);
64
+ const viewportHeight = Math.min(MAX_VIEWPORT_HEIGHT, rowCount * rowHeight);
65
+ const rows = Array(rowCount).fill(rowHeight);
66
+ const columns = [contentWidth];
67
+ if (loading) {
68
+ return (0, __wake_namespace_0["jsx"])("div", { id: listboxId, role: "listbox", "aria-busy": "true", "data-select-overlay": true, className: __wake_namespace_5["cx"].call(undefined, overlayStyle, popupClassName), children: (0, __wake_namespace_0["jsx"])("div", { className: loadingStyle, children: (0, __wake_namespace_0["jsx"])(__wake_namespace_2["SpinIndicator"], {}) }) });
69
+ }
70
+ if (filteredOptions.length === 0) {
71
+ return (0, __wake_namespace_0["jsx"])("div", { id: listboxId, role: "listbox", "data-select-overlay": true, className: __wake_namespace_5["cx"].call(undefined, overlayStyle, popupClassName), children: (0, __wake_namespace_0["jsx"])("div", { className: emptyStyle, children: notFoundContent ?? "无匹配选项" }) });
72
+ }
73
+ const isGrouped = hasGroups(filteredOptions);
74
+ const menu = (0, __wake_namespace_0["jsx"])(__wake_namespace_3 && __wake_namespace_3.__esModule ? __wake_namespace_3.default : __wake_namespace_3, { gridRef: gridRef, viewportWidth: contentWidth, viewportHeight: viewportHeight, gridTemplateColumns: columns, gridTemplateRows: rows, overscanRowCount: 4, renderRows: (rowRange) => {
75
+ const nodes = [(0, __wake_namespace_0["jsx"])("div", { "data-select-virtual-spacer": "top", className: virtualTopSpacerStyle }, "__select-top-padding__")];
76
+ for (let i = rowRange[0]; i <= rowRange[1]; i += 1) {
77
+ const option = filteredOptions[i];
78
+ if (option.isGroupLabel) {
79
+ nodes.push((0, __wake_namespace_0["jsx"])("div", { "data-group-label": true, className: groupLabelStyle, children: option.label }, option.value));
80
+ continue;
81
+ }
82
+ const selected = selectedValues.includes(option.value);
83
+ const highlighted = i === highlightIndex;
84
+ const content = optionRender ? optionRender(option, { selected }) : (0, __wake_namespace_0["jsxs"])(__wake_namespace_0["Fragment"], { children: [multiple ? (0, __wake_namespace_0["jsx"])(__wake_namespace_1 && __wake_namespace_1.__esModule ? __wake_namespace_1.default : __wake_namespace_1, { className: checkboxIndicatorStyle, checked: selected, disabled: option.disabled, tabIndex: -1, "aria-label": typeof option.label === "string" ? option.label : option.value }) : null, (0, __wake_namespace_0["jsx"])("span", { className: optionLabelStyle, children: option.label }), !multiple && selected ? (0, __wake_namespace_0["jsx"])("span", { className: checkIconStyle, children: (0, __wake_namespace_0["jsx"])("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: (0, __wake_namespace_0["jsx"])("path", { d: "M20 6 9 17l-5-5" }) }) }) : null] });
85
+ const optionAriaLabel = multiple ? typeof option.label === "string" ? option.label : option.value : undefined;
86
+ nodes.push((0, __wake_namespace_0["jsx"])("div", { id: `${listboxId}-option-${i}`, role: "option", "aria-selected": selected, "aria-disabled": option.disabled || undefined, "aria-label": optionAriaLabel, className: __wake_namespace_5["cx"].call(undefined, optionStyle, isGrouped && groupedOptionStyle, selected && (multiple ? optionSelectedStyle : optionSelectedSingleStyle), highlighted && optionHighlightStyle, option.disabled && optionDisabledStyle), onMouseEnter: () => onHighlightChange(i), onClick: () => {
87
+ onOptionSelect(option);
88
+ if (!multiple && !option.disabled) {
89
+ dispatch({ type: "setOpen", payload: false });
90
+ onOpenChange(false);
91
+ }
92
+ }, children: content }, option.value));
93
+ }
94
+ nodes.push((0, __wake_namespace_0["jsx"])("div", { "data-select-virtual-spacer": "bottom", className: virtualBottomSpacerStyle }, "__select-bottom-padding__"));
95
+ return nodes;
96
+ } });
97
+ return (0, __wake_namespace_0["jsxs"])("div", { id: listboxId, ref: overlayRef, "data-select-overlay": true, className: __wake_namespace_5["cx"].call(undefined, overlayStyle, popupClassName), role: "listbox", "aria-multiselectable": multiple || undefined, children: [(0, __wake_namespace_0["jsx"])("div", { "aria-hidden": "true", "data-select-option-measure": "", className: (0, __wake_namespace_5["cx"])(optionStyle, measureStyle), children: "M" }), dropdownRender ? dropdownRender(menu) : menu] });
98
+ };
99
+ const __wake_default_export = SelectOverlay;
100
+ Object.defineProperty(exports, "default", { enumerable: true, get: function() {
101
+ return __wake_default_export;
102
+ } });
@@ -0,0 +1,11 @@
1
+ Object.defineProperty(exports, "__esModule", { value: true });
2
+ const __wake_namespace_0 = require("@crab-dev/css");
3
+ const vars = (0, __wake_namespace_0["defineTokens"])({ "option.checkbox.width": "--select-option-checkbox-width", "option.background-color-hover": "--select-option-background-color-hover", "option.color-selected": "--select-option-color-selected", "option.background-color-selected": "--select-option-background-color-selected", "option.color-disabled": "--select-option-color-disabled", "option.highlight.background-color": "--select-option-highlight-background-color", "option.background-color-active": "--select-option-background-color-active", "option.height": "--select-option-height", "option.padding-block": "--select-option-padding-block", "option.font-size": "--select-option-font-size", "option.line-height": "--select-option-line-height", "root.transition": "--select-root-transition", "root.opacity-disabled": "--select-root-opacity-disabled", "root.touch.min-height": "--select-root-touch-min-height", "root.outline-width-focus": "--select-root-outline-width-focus", "root.outline-offset-focus": "--select-root-outline-offset-focus", "root.border-width": "--select-root-border-width", "root.border-style": "--select-root-border-style", "root.border-color": "--select-root-border-color", "root.border-color-hover": "--select-root-border-color-hover", "root.border-color-focus": "--select-root-border-color-focus", "root.border-color-error": "--select-root-border-color-error", "root.border-color-warning": "--select-root-border-color-warning", "root.border-radius": "--select-root-border-radius", "root.background-color": "--select-root-background-color", "root.background-color-disabled": "--select-root-background-color-disabled", "root.box-shadow": "--select-root-box-shadow", "root.box-shadow-focus": "--select-root-box-shadow-focus", "root.validation.box-shadow-error": "--select-root-validation-box-shadow-error", "root.validation.box-shadow-warning": "--select-root-validation-box-shadow-warning", "root.color-loading": "--select-root-color-loading", "motion.interaction.transition": "--select-motion-interaction-transition", "motion.spatial.transition": "--select-motion-spatial-transition", "text.color": "--select-text-color", "text.color-placeholder": "--select-text-color-placeholder", "text.color-disabled": "--select-text-color-disabled", "tag.background-color": "--select-tag-background-color", "tag.color": "--select-tag-color", "tag.close.color-hover": "--select-tag-close-color-hover", "clear.color": "--select-clear-color", "clear.color-hover": "--select-clear-color-hover", "clear.width": "--select-clear-width", "clear.height": "--select-clear-height", "clear.touch.width": "--select-clear-touch-width", "clear.box-shadow-focus": "--select-clear-box-shadow-focus", "icon.width": "--select-icon-width", "icon.color": "--select-icon-color", "field.gap": "--select-field-gap", "field.padding-inline": "--select-field-padding-inline", "field.label.top": "--select-field-label-top", "field.label.padding-inline": "--select-field-label-padding-inline", "field.label.font-size": "--select-field-label-font-size", "field.label.line-height": "--select-field-label-line-height", "field.label.color": "--select-field-label-color", "field.label.color-focus": "--select-field-label-color-focus", "field.input.padding-top": "--select-field-input-padding-top", "field.transition": "--select-field-transition", "field.filled.background-color": "--select-field-filled-background-color", "field.filled.background-color-hover": "--select-field-filled-background-color-hover", "field.indicator.border-color": "--select-field-indicator-border-color", "field.indicator.box-shadow-focus": "--select-field-indicator-box-shadow-focus", "field.indicator.box-shadow-error": "--select-field-indicator-box-shadow-error", "field.indicator.box-shadow-warning": "--select-field-indicator-box-shadow-warning", "field.color-error": "--select-field-color-error", "field.color-warning": "--select-field-color-warning", "field.support.line-height": "--select-field-support-line-height", "group.color": "--select-group-color", "group.font-size": "--select-group-font-size", "size.large.height": "--select-size-large-height", "size.large.padding": "--select-size-large-padding", "size.large.font-size": "--select-size-large-font-size", "size.large.line-height": "--select-size-large-line-height", "size.large.action.width": "--select-size-large-action-width", "size.middle.height": "--select-size-middle-height", "size.middle.padding": "--select-size-middle-padding", "size.middle.font-size": "--select-size-middle-font-size", "size.middle.line-height": "--select-size-middle-line-height", "size.middle.action.width": "--select-size-middle-action-width", "size.small.height": "--select-size-small-height", "size.small.padding": "--select-size-small-padding", "size.small.font-size": "--select-size-small-font-size", "size.small.line-height": "--select-size-small-line-height", "size.small.action.width": "--select-size-small-action-width", "dropdown.margin": "--select-dropdown-margin", "dropdown.max-height": "--select-dropdown-max-height", "dropdown.padding": "--select-dropdown-padding", "dropdown.option.padding": "--select-dropdown-option-padding", "dropdown.border-radius": "--select-dropdown-border-radius" });
4
+ Object.defineProperty(exports, "vars", { enumerable: true, get: function() {
5
+ return vars;
6
+ } });
7
+ const token = (0, __wake_namespace_0["defineTokens"])({ "option": { "checkbox": { "width": `var(${vars["option.checkbox.width"]}, 18px)` }, "background-color-hover": `var(${vars["option.background-color-hover"]}, var(--token-semantic-color-state-hover, var(--token-semantic-color-background-hover-subtle, color-mix(in oklch, var(--token-global-material-neutral-10, oklch(0.22652446 0.00999107 303.713695)) calc(var(--token-semantic-state-opacity-hover, var(--token-global-opacity-8, 0.08)) * 100%), var(--token-global-material-neutral-98, oklch(0.98379491 0.01284496 321.893957))))))`, "color-selected": `var(${vars["option.color-selected"]}, var(--token-semantic-color-brand-on-container, var(--token-semantic-color-selection-foreground, var(--token-global-purple-10, oklch(0.24199786 0.14038488 286.089811)))))`, "background-color-selected": `var(${vars["option.background-color-selected"]}, var(--token-semantic-color-brand-container, var(--token-semantic-color-selection-background, var(--token-global-purple-90, oklch(0.91829316 0.04770250 302.827510)))))`, "color-disabled": `var(${vars["option.color-disabled"]}, var(--token-semantic-color-text-disabled, var(--token-global-material-neutral-10, oklch(0.22652446 0.00999107 303.713695))))`, "highlight": { "background-color": `var(${vars["option.highlight.background-color"]}, var(--token-semantic-color-state-hover, var(--token-semantic-color-background-hover-subtle, color-mix(in oklch, var(--token-global-material-neutral-10, oklch(0.22652446 0.00999107 303.713695)) calc(var(--token-semantic-state-opacity-hover, var(--token-global-opacity-8, 0.08)) * 100%), var(--token-global-material-neutral-98, oklch(0.98379491 0.01284496 321.893957))))))` }, "background-color-active": `var(${vars["option.background-color-active"]}, var(--token-semantic-color-state-pressed, var(--token-semantic-color-background-active-subtle, color-mix(in oklch, var(--token-global-material-neutral-10, oklch(0.22652446 0.00999107 303.713695)) calc(var(--token-semantic-state-opacity-pressed, var(--token-global-opacity-12, 0.12)) * 100%), var(--token-global-material-neutral-98, oklch(0.98379491 0.01284496 321.893957))))))`, "height": `var(${vars["option.height"]}, var(--token-semantic-density-item, var(--token-global-size-48, 48px)))`, "padding-block": `var(${vars["option.padding-block"]}, var(--token-semantic-space-component-gap, var(--token-global-space-2, 8px)))`, "font-size": `var(${vars["option.font-size"]}, var(--token-semantic-typography-body-large-font-size, var(--token-global-font-size-md, 16px)))`, "line-height": `var(${vars["option.line-height"]}, var(--token-semantic-typography-body-large-line-height, var(--token-global-line-height-16-24, 1.5)))` }, "root": { "transition": `var(${vars["root.transition"]}, background-color var(--token-semantic-motion-interaction, var(--token-global-duration-150, 150ms) var(--token-global-easing-expressive-effects-fast, cubic-bezier(0.31, 0.94, 0.34, 1.00))), border-color var(--token-semantic-motion-interaction, var(--token-global-duration-150, 150ms) var(--token-global-easing-expressive-effects-fast, cubic-bezier(0.31, 0.94, 0.34, 1.00))), color var(--token-semantic-motion-interaction, var(--token-global-duration-150, 150ms) var(--token-global-easing-expressive-effects-fast, cubic-bezier(0.31, 0.94, 0.34, 1.00))), box-shadow var(--token-semantic-motion-interaction, var(--token-global-duration-150, 150ms) var(--token-global-easing-expressive-effects-fast, cubic-bezier(0.31, 0.94, 0.34, 1.00))))`, "opacity-disabled": `var(${vars["root.opacity-disabled"]}, var(--token-semantic-opacity-disabled, var(--token-global-opacity-38, 0.38)))`, "touch": { "min-height": `var(${vars["root.touch.min-height"]}, var(--token-semantic-size-touch-target, var(--token-global-size-48, 48px)))` }, "outline-width-focus": `var(${vars["root.outline-width-focus"]}, 2px)`, "outline-offset-focus": `var(${vars["root.outline-offset-focus"]}, 2px)`, "border-width": `var(${vars["root.border-width"]}, 1px)`, "border-style": `var(${vars["root.border-style"]}, solid)`, "border-color": `var(${vars["root.border-color"]}, var(--token-semantic-color-border-default, var(--token-global-material-neutral-variant-50, oklch(0.56674707 0.01627446 308.142182))))`, "border-color-hover": `var(${vars["root.border-color-hover"]}, var(--token-semantic-color-border-hover, var(--token-global-material-neutral-10, oklch(0.22652446 0.00999107 303.713695))))`, "border-color-focus": `var(${vars["root.border-color-focus"]}, var(--token-semantic-color-border-focus, var(--token-global-purple-40, oklch(0.49552086 0.13045663 293.709078))))`, "border-color-error": `var(${vars["root.border-color-error"]}, var(--token-semantic-color-feedback-error-border, var(--token-global-material-error-40, oklch(0.50128208 0.17831791 28.704727))))`, "border-color-warning": `var(${vars["root.border-color-warning"]}, var(--token-semantic-color-feedback-warning-border, var(--token-global-amber-700, oklch(0.555 0.163 71))))`, "border-radius": `var(${vars["root.border-radius"]}, var(--token-semantic-shape-extra-small, var(--token-global-radius-2, 4px)))`, "background-color": `var(${vars["root.background-color"]}, var(--token-semantic-color-surface-content, var(--token-semantic-color-background-surface, var(--token-global-material-neutral-98, oklch(0.98379491 0.01284496 321.893957)))))`, "background-color-disabled": `var(${vars["root.background-color-disabled"]}, var(--token-semantic-color-background-disabled, var(--token-global-material-neutral-90, oklch(0.91401081 0.01366394 314.754144))))`, "box-shadow": `var(${vars["root.box-shadow"]}, none)`, "box-shadow-focus": `var(${vars["root.box-shadow-focus"]}, inset 0 0 0 2px var(--token-semantic-color-border-focus, var(--token-global-purple-40, oklch(0.49552086 0.13045663 293.709078))))`, "validation": { "box-shadow-error": `var(${vars["root.validation.box-shadow-error"]}, inset 0 0 0 2px var(--token-semantic-color-feedback-error-border, var(--token-global-material-error-40, oklch(0.50128208 0.17831791 28.704727))))`, "box-shadow-warning": `var(${vars["root.validation.box-shadow-warning"]}, inset 0 0 0 2px var(--token-semantic-color-feedback-warning-border, var(--token-global-amber-700, oklch(0.555 0.163 71))))` }, "color-loading": `var(${vars["root.color-loading"]}, var(--token-semantic-color-text-secondary, var(--token-global-material-neutral-variant-30, oklch(0.39805288 0.01735545 303.720936))))` }, "motion": { "interaction": { "transition": `var(${vars["motion.interaction.transition"]}, var(--token-semantic-motion-interaction, var(--token-global-duration-150, 150ms) var(--token-global-easing-expressive-effects-fast, cubic-bezier(0.31, 0.94, 0.34, 1.00))))` }, "spatial": { "transition": `var(${vars["motion.spatial.transition"]}, var(--token-semantic-motion-spatial-fast, var(--token-global-duration-350, 350ms) var(--token-global-easing-expressive-spatial-fast, cubic-bezier(0.42, 1.67, 0.21, 0.90))))` } }, "text": { "color": `var(${vars["text.color"]}, var(--token-semantic-color-text-primary, var(--token-global-material-neutral-10, oklch(0.22652446 0.00999107 303.713695))))`, "color-placeholder": `var(${vars["text.color-placeholder"]}, var(--token-semantic-color-text-secondary, var(--token-global-material-neutral-variant-30, oklch(0.39805288 0.01735545 303.720936))))`, "color-disabled": `var(${vars["text.color-disabled"]}, var(--token-semantic-color-text-disabled, var(--token-global-material-neutral-10, oklch(0.22652446 0.00999107 303.713695))))` }, "tag": { "background-color": `var(${vars["tag.background-color"]}, var(--token-semantic-color-background-hover-subtle, color-mix(in oklch, var(--token-global-material-neutral-10, oklch(0.22652446 0.00999107 303.713695)) calc(var(--token-semantic-state-opacity-hover, var(--token-global-opacity-8, 0.08)) * 100%), var(--token-global-material-neutral-98, oklch(0.98379491 0.01284496 321.893957)))))`, "color": `var(${vars["tag.color"]}, var(--token-semantic-color-text-primary, var(--token-global-material-neutral-10, oklch(0.22652446 0.00999107 303.713695))))`, "close": { "color-hover": `var(${vars["tag.close.color-hover"]}, var(--token-semantic-color-text-secondary, var(--token-global-material-neutral-variant-30, oklch(0.39805288 0.01735545 303.720936))))` } }, "clear": { "color": `var(${vars["clear.color"]}, var(--token-semantic-color-text-secondary, var(--token-global-material-neutral-variant-30, oklch(0.39805288 0.01735545 303.720936))))`, "color-hover": `var(${vars["clear.color-hover"]}, var(--token-semantic-color-text-primary, var(--token-global-material-neutral-10, oklch(0.22652446 0.00999107 303.713695))))`, "width": `var(${vars["clear.width"]}, var(--token-semantic-size-48, var(--token-global-size-48, 48px)))`, "height": `var(${vars["clear.height"]}, var(--token-semantic-size-48, var(--token-global-size-48, 48px)))`, "touch": { "width": `var(${vars["clear.touch.width"]}, var(--token-semantic-size-touch-target, var(--token-global-size-48, 48px)))` }, "box-shadow-focus": `var(${vars["clear.box-shadow-focus"]}, inset 0 0 0 1px var(--token-semantic-color-focus-ring, var(--token-semantic-color-border-focus, var(--token-global-purple-40, oklch(0.49552086 0.13045663 293.709078)))))` }, "icon": { "width": `var(${vars["icon.width"]}, var(--token-semantic-space-group-gap, var(--token-global-space-6, 24px)))`, "color": `var(${vars["icon.color"]}, var(--token-semantic-color-text-secondary, var(--token-global-material-neutral-variant-30, oklch(0.39805288 0.01735545 303.720936))))` }, "field": { "gap": `var(${vars["field.gap"]}, var(--token-semantic-space-inline-gap, var(--token-global-space-1, 4px)))`, "padding-inline": `var(${vars["field.padding-inline"]}, var(--token-semantic-space-section-gap, var(--token-global-space-4, 16px)))`, "label": { "top": `var(${vars["field.label.top"]}, var(--token-semantic-space-component-gap, var(--token-global-space-2, 8px)))`, "padding-inline": `var(${vars["field.label.padding-inline"]}, var(--token-semantic-space-inline-gap, var(--token-global-space-1, 4px)))`, "font-size": `var(${vars["field.label.font-size"]}, var(--token-semantic-typography-body-small-font-size, var(--token-global-font-size-xs, 12px)))`, "line-height": `var(${vars["field.label.line-height"]}, var(--token-semantic-typography-body-small-line-height, var(--token-global-line-height-12-16, 1.3333333333333333)))`, "color": `var(${vars["field.label.color"]}, var(--token-semantic-color-text-secondary, var(--token-global-material-neutral-variant-30, oklch(0.39805288 0.01735545 303.720936))))`, "color-focus": `var(${vars["field.label.color-focus"]}, var(--token-semantic-color-brand-primary, var(--token-global-purple-40, oklch(0.49552086 0.13045663 293.709078))))` }, "input": { "padding-top": `var(${vars["field.input.padding-top"]}, var(--token-semantic-space-section-gap, var(--token-global-space-4, 16px)))` }, "transition": `var(${vars["field.transition"]}, top var(--token-semantic-motion-interaction, var(--token-global-duration-150, 150ms) var(--token-global-easing-expressive-effects-fast, cubic-bezier(0.31, 0.94, 0.34, 1.00))), font-size var(--token-semantic-motion-interaction, var(--token-global-duration-150, 150ms) var(--token-global-easing-expressive-effects-fast, cubic-bezier(0.31, 0.94, 0.34, 1.00))), color var(--token-semantic-motion-interaction, var(--token-global-duration-150, 150ms) var(--token-global-easing-expressive-effects-fast, cubic-bezier(0.31, 0.94, 0.34, 1.00))), background-color var(--token-semantic-motion-interaction, var(--token-global-duration-150, 150ms) var(--token-global-easing-expressive-effects-fast, cubic-bezier(0.31, 0.94, 0.34, 1.00))))`, "filled": { "background-color": `var(${vars["field.filled.background-color"]}, var(--token-semantic-color-surface-highest, var(--token-global-material-neutral-90, oklch(0.91401081 0.01366394 314.754144))))`, "background-color-hover": `var(${vars["field.filled.background-color-hover"]}, color-mix(in oklch, var(--token-semantic-color-text-primary, var(--token-global-material-neutral-10, oklch(0.22652446 0.00999107 303.713695))) calc(var(--token-semantic-state-opacity-hover, var(--token-global-opacity-8, 0.08)) * 100%), var(--token-semantic-color-surface-highest, var(--token-global-material-neutral-90, oklch(0.91401081 0.01366394 314.754144)))))` }, "indicator": { "border-color": `var(${vars["field.indicator.border-color"]}, var(--token-semantic-color-text-secondary, var(--token-global-material-neutral-variant-30, oklch(0.39805288 0.01735545 303.720936))))`, "box-shadow-focus": `var(${vars["field.indicator.box-shadow-focus"]}, inset 0 -2px 0 var(--token-semantic-color-border-focus, var(--token-global-purple-40, oklch(0.49552086 0.13045663 293.709078))))`, "box-shadow-error": `var(${vars["field.indicator.box-shadow-error"]}, inset 0 -2px 0 var(--token-semantic-color-feedback-error-border, var(--token-global-material-error-40, oklch(0.50128208 0.17831791 28.704727))))`, "box-shadow-warning": `var(${vars["field.indicator.box-shadow-warning"]}, inset 0 -2px 0 var(--token-semantic-color-feedback-warning-border, var(--token-global-amber-700, oklch(0.555 0.163 71))))` }, "color-error": `var(${vars["field.color-error"]}, var(--token-semantic-color-feedback-error-text, var(--token-global-material-error-10, oklch(0.25390329 0.07937181 27.605486))))`, "color-warning": `var(${vars["field.color-warning"]}, var(--token-semantic-color-feedback-warning-text, var(--token-global-amber-900, oklch(0.414 0.112 68))))`, "support": { "line-height": `var(${vars["field.support.line-height"]}, var(--token-semantic-typography-body-small-line-height, var(--token-global-line-height-12-16, 1.3333333333333333)))` } }, "group": { "color": `var(${vars["group.color"]}, var(--token-semantic-color-text-secondary, var(--token-global-material-neutral-variant-30, oklch(0.39805288 0.01735545 303.720936))))`, "font-size": `var(${vars["group.font-size"]}, var(--token-semantic-typography-caption-font-size, var(--token-global-font-size-xs, 12px)))` }, "size": { "large": { "height": `var(${vars["size.large.height"]}, var(--token-semantic-sizing-large-field, var(--token-global-size-64, 64px)))`, "padding": `var(${vars["size.large.padding"]}, var(--token-semantic-space-inline-gap, var(--token-global-space-1, 4px)) var(--token-semantic-space-control-padding-x, var(--token-global-space-3, 12px)))`, "font-size": `var(${vars["size.large.font-size"]}, var(--token-semantic-typography-body-large-font-size, var(--token-global-font-size-md, 16px)))`, "line-height": `var(${vars["size.large.line-height"]}, calc(var(--token-semantic-typography-body-large-font-size, var(--token-global-font-size-md, 16px)) * var(--token-semantic-typography-body-large-line-height, var(--token-global-line-height-16-24, 1.5))))`, "action": { "width": `var(${vars["size.large.action.width"]}, var(--token-semantic-sizing-large-action, var(--token-global-size-48, 48px)))` } }, "middle": { "height": `var(${vars["size.middle.height"]}, var(--token-semantic-sizing-middle-field, var(--token-global-size-56, 56px)))`, "padding": `var(${vars["size.middle.padding"]}, var(--token-semantic-space-inline-gap, var(--token-global-space-1, 4px)) var(--token-semantic-space-control-padding-x, var(--token-global-space-3, 12px)))`, "font-size": `var(${vars["size.middle.font-size"]}, var(--token-semantic-typography-body-large-font-size, var(--token-global-font-size-md, 16px)))`, "line-height": `var(${vars["size.middle.line-height"]}, calc(var(--token-semantic-typography-body-large-font-size, var(--token-global-font-size-md, 16px)) * var(--token-semantic-typography-body-large-line-height, var(--token-global-line-height-16-24, 1.5))))`, "action": { "width": `var(${vars["size.middle.action.width"]}, var(--token-semantic-sizing-middle-action, var(--token-global-size-40, 40px)))` } }, "small": { "height": `var(${vars["size.small.height"]}, var(--token-semantic-sizing-small-field, var(--token-global-size-48, 48px)))`, "padding": `var(${vars["size.small.padding"]}, 0 var(--token-semantic-space-control-padding-x-small, var(--token-global-space-2, 8px)))`, "font-size": `var(${vars["size.small.font-size"]}, var(--token-semantic-typography-body-large-font-size, var(--token-global-font-size-md, 16px)))`, "line-height": `var(${vars["size.small.line-height"]}, calc(var(--token-semantic-typography-body-large-font-size, var(--token-global-font-size-md, 16px)) * var(--token-semantic-typography-body-large-line-height, var(--token-global-line-height-16-24, 1.5))))`, "action": { "width": `var(${vars["size.small.action.width"]}, var(--token-semantic-sizing-small-action, var(--token-global-size-32, 32px)))` } } }, "dropdown": { "margin": `var(${vars["dropdown.margin"]}, 6px)`, "max-height": `var(${vars["dropdown.max-height"]}, 240px)`, "padding": `var(${vars["dropdown.padding"]}, var(--token-semantic-space-inline-gap, var(--token-global-space-1, 4px)))`, "option": { "padding": `var(${vars["dropdown.option.padding"]}, var(--token-semantic-space-component-gap, var(--token-global-space-2, 8px)))` }, "border-radius": `var(${vars["dropdown.border-radius"]}, var(--token-semantic-shape-extra-small, var(--token-global-radius-2, 4px)))` } });
8
+ const __wake_default_export = token;
9
+ Object.defineProperty(exports, "default", { enumerable: true, get: function() {
10
+ return __wake_default_export;
11
+ } });