@crab-dev/rc-select 0.0.2 → 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 +18 -0
- package/README.md +9 -14
- package/cjs/_wake/src/hooks/useKeyboardNavigation.cjs +40 -0
- package/cjs/_wake/src/select.cjs +139 -0
- package/cjs/_wake/src/selectInput.cjs +222 -0
- package/cjs/_wake/src/selectOverlay.cjs +102 -0
- package/cjs/_wake/src/token.cjs +11 -0
- package/cjs/index.cjs +11 -1
- package/css/index.css +8 -42
- package/declarations/_wake/src/select.d.ts +4 -0
- package/declarations/_wake/src/token.d.ts +3 -0
- package/declarations/_wake/src/types.d.ts +81 -0
- package/declarations/index.d.ts +4 -79
- package/esm/_wake/src/hooks/useKeyboardNavigation.mjs +36 -0
- package/esm/_wake/src/select.mjs +135 -0
- package/esm/_wake/src/selectInput.mjs +218 -0
- package/esm/_wake/src/selectOverlay.mjs +98 -0
- package/esm/_wake/src/token.mjs +4 -0
- package/esm/index.mjs +4 -1
- package/package.json +30 -40
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
|
-
|
|
10
|
+
## 文档
|
|
15
11
|
|
|
16
|
-
|
|
12
|
+
- [使用说明与 API](./docs/index.mdx)
|
|
13
|
+
- [示例源码](./docs/demos/)
|
|
17
14
|
|
|
18
|
-
|
|
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
|
+
} });
|