@rainbow-oh/yee-c 0.8.18 → 0.8.20

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.
Files changed (91) hide show
  1. package/dist/cjs/Anchor/anchor.js +4 -1
  2. package/dist/cjs/Checkbox/checkbox-group.js +1 -1
  3. package/dist/cjs/Checkbox/checkbox.js +2 -1
  4. package/dist/cjs/Checkbox/style/index.less +3 -0
  5. package/dist/cjs/Form/Group.js +1 -3
  6. package/dist/cjs/Form/style/index.less +2 -0
  7. package/dist/cjs/Form/utils/validate.d.ts +1 -0
  8. package/dist/cjs/Form/utils/validate.js +3 -2
  9. package/dist/cjs/Progress/circle.js +46 -35
  10. package/dist/cjs/Progress/line.js +20 -11
  11. package/dist/cjs/Search/demo/basic.js +38 -3
  12. package/dist/cjs/Search/interface.d.ts +2 -2
  13. package/dist/cjs/Search/search.js +52 -32
  14. package/dist/cjs/Search/style/index.less +20 -3
  15. package/dist/cjs/Table/style/index.less +4 -2
  16. package/dist/cjs/Table/tbody/cell.js +2 -2
  17. package/dist/cjs/Transfer/interface.d.ts +0 -1
  18. package/dist/cjs/Transfer/style/index.less +4 -0
  19. package/dist/cjs/Transfer/transfer-list.js +1 -0
  20. package/dist/cjs/message/use-message.js +1 -3
  21. package/dist/cjs/notice/notice.js +1 -1
  22. package/dist/cjs/style/themes.css +1 -1
  23. package/dist/cjs/style/variables.css +1 -1
  24. package/dist/cjs/version.d.ts +1 -1
  25. package/dist/cjs/version.js +1 -1
  26. package/dist/esm/Checkbox/checkbox-group.js +1 -1
  27. package/dist/esm/Checkbox/checkbox.js +2 -1
  28. package/dist/esm/Checkbox/style/index.less +3 -0
  29. package/dist/esm/Form/Group.js +2 -2
  30. package/dist/esm/Form/style/index.less +2 -0
  31. package/dist/esm/Form/utils/validate.d.ts +1 -0
  32. package/dist/esm/Form/utils/validate.js +2 -2
  33. package/dist/esm/Search/demo/basic.js +61 -7
  34. package/dist/esm/Search/interface.d.ts +2 -2
  35. package/dist/esm/Search/search.js +22 -15
  36. package/dist/esm/Search/style/index.less +20 -3
  37. package/dist/esm/Table/style/index.less +4 -2
  38. package/dist/esm/Table/tbody/cell.js +2 -2
  39. package/dist/esm/Transfer/interface.d.ts +0 -1
  40. package/dist/esm/Transfer/style/index.less +4 -0
  41. package/dist/esm/Transfer/transfer-list.js +1 -0
  42. package/dist/esm/notice/notice.js +1 -1
  43. package/dist/esm/style/themes.css +1 -1
  44. package/dist/esm/style/variables.css +1 -1
  45. package/dist/esm/version.d.ts +1 -1
  46. package/dist/esm/version.js +1 -1
  47. package/dist/umd/yee-c.min.css +1 -1
  48. package/dist/umd/yee-c.min.js +1 -1
  49. package/package.json +1 -1
  50. package/src/Anchor/anchor.tsx +9 -5
  51. package/src/Checkbox/checkbox-group.tsx +1 -1
  52. package/src/Checkbox/checkbox.tsx +1 -0
  53. package/src/Checkbox/style/index.less +3 -0
  54. package/src/Form/Group.tsx +2 -4
  55. package/src/Form/style/index.less +2 -0
  56. package/src/Form/utils/validate.ts +7 -2
  57. package/src/Progress/circle.tsx +5 -1
  58. package/src/Progress/line.tsx +5 -1
  59. package/src/Progress/progress.tsx +5 -1
  60. package/src/Search/demo/basic.tsx +43 -7
  61. package/src/Search/index.en-US.md +1 -1
  62. package/src/Search/index.zh-CN.md +1 -1
  63. package/src/Search/interface.ts +2 -2
  64. package/src/Search/search.tsx +40 -23
  65. package/src/Search/style/index.less +20 -3
  66. package/src/Spin/indicator.tsx +1 -1
  67. package/src/Table/style/index.less +4 -2
  68. package/src/Table/tbody/cell.tsx +2 -2
  69. package/src/Transfer/interface.ts +0 -1
  70. package/src/Transfer/style/index.less +4 -0
  71. package/src/Transfer/transfer-list.tsx +1 -0
  72. package/src/Tree/interface.ts +6 -1
  73. package/src/Tree/tree-node.tsx +7 -6
  74. package/src/Tree/utils/tree-tools.ts +4 -1
  75. package/src/Trigger/interface.ts +2 -1
  76. package/src/message/demo/base.tsx +1 -1
  77. package/src/message/interface.ts +1 -5
  78. package/src/message/message.test.tsx +15 -5
  79. package/src/message/message.tsx +10 -4
  80. package/src/message/use-message.tsx +2 -8
  81. package/src/message/wrapper.tsx +1 -2
  82. package/src/notice/interface.ts +1 -5
  83. package/src/notice/notice.test.tsx +14 -6
  84. package/src/notice/notice.tsx +12 -6
  85. package/src/notice/wrapper.tsx +1 -2
  86. package/src/version.ts +1 -1
  87. package/dist/cjs/Search/style/index.d.ts +0 -1
  88. package/dist/cjs/Search/style/index.js +0 -2
  89. package/dist/esm/Search/style/index.d.ts +0 -1
  90. package/dist/esm/Search/style/index.js +0 -1
  91. package/src/Search/style/index.ts +0 -1
@@ -361,7 +361,10 @@ var Anchor = (0, import_react.forwardRef)((baseprops, ref) => {
361
361
  "pointerdown",
362
362
  onUserInterrupt
363
363
  );
364
- container.removeEventListener("keydown", onUserInterrupt);
364
+ container.removeEventListener(
365
+ "keydown",
366
+ onUserInterrupt
367
+ );
365
368
  if (rafId !== null) {
366
369
  cancelAnimationFrame(rafId);
367
370
  }
@@ -118,7 +118,7 @@ var CheckboxGroup = (baseprops) => {
118
118
  __spreadProps(__spreadValues({
119
119
  disabled
120
120
  }, option), {
121
- checked: mergedValue.includes(option.value),
121
+ checked: mergedValue == null ? void 0 : mergedValue.includes(option.value),
122
122
  key: option.value || index
123
123
  }),
124
124
  option.label
@@ -157,7 +157,8 @@ var Checkbox = (baseprops) => {
157
157
  "span",
158
158
  {
159
159
  className: (0, import_clsx.default)(`${prefixCls}-label`, classNames == null ? void 0 : classNames.label),
160
- style: styles == null ? void 0 : styles.label
160
+ style: styles == null ? void 0 : styles.label,
161
+ title: typeof children === "string" ? children : void 0
161
162
  },
162
163
  children
163
164
  ) : null
@@ -93,6 +93,9 @@
93
93
  &-label {
94
94
  padding: var(--yee-checkbox-label-padding);
95
95
  user-select: none;
96
+ white-space: nowrap;
97
+ text-overflow: ellipsis;
98
+ overflow: hidden;
96
99
  }
97
100
 
98
101
  &-indeterminate {
@@ -86,9 +86,7 @@ var Group = (props) => {
86
86
  });
87
87
  const errors2 = [];
88
88
  if (required) {
89
- const hasEmpty = childNames.some(
90
- (name) => !values[name] && values[name] !== 0
91
- );
89
+ const hasEmpty = childNames.some((name) => (0, import_validate.isEmpty)(values[name]));
92
90
  if (hasEmpty) {
93
91
  errors2.push({
94
92
  name: childNames,
@@ -88,12 +88,14 @@
88
88
  --yee-input-border-color: var(--yee-error-color);
89
89
  --yee-input-hover-border-color: var(--yee-error-color-hover);
90
90
  --yee-input-focus-bs-color: var(--yee-error-color-border);
91
+ --yee-checkbox-border-color: var(--yee-error-color);
91
92
  }
92
93
 
93
94
  &&-warning {
94
95
  --yee-input-border-color: var(--yee-warning-color);
95
96
  --yee-input-hover-border-color: var(--yee-warning-color-hover);
96
97
  --yee-input-focus-bs-color: var(--yee-warning-color-border);
98
+ --yee-checkbox-border-color: var(--yee-warning-color);
97
99
  }
98
100
  }
99
101
  }
@@ -1,4 +1,5 @@
1
1
  import type { Rule } from '../interface';
2
+ export declare function isEmpty(value: unknown): boolean;
2
3
  export interface ValidateResult {
3
4
  passed: boolean;
4
5
  message?: string;
@@ -40,11 +40,12 @@ var __async = (__this, __arguments, generator) => {
40
40
  var validate_exports = {};
41
41
  __export(validate_exports, {
42
42
  default: () => validate_default,
43
+ isEmpty: () => isEmpty,
43
44
  runValidator: () => runValidator
44
45
  });
45
46
  module.exports = __toCommonJS(validate_exports);
46
- function isEmpty(v) {
47
- return v === void 0 || v === null || v === "" ? true : false;
47
+ function isEmpty(value) {
48
+ return value === void 0 || value === null || value === "" || Array.isArray(value) && value.length === 0;
48
49
  }
49
50
  function verifyRuleOfMin(min, value) {
50
51
  if (isEmpty(value))
@@ -148,42 +148,53 @@ var Circle = import_react.default.forwardRef((props, ref) => {
148
148
  style: { width, height: width },
149
149
  ref
150
150
  },
151
- /* @__PURE__ */ import_react.default.createElement("svg", { className: `${prefixCls}-circle`, viewBox: "0 0 120 120", "aria-hidden": "true" }, /* @__PURE__ */ import_react.default.createElement(
152
- "circle",
153
- {
154
- className: `${prefixCls}-circle-trail`,
155
- cx: "60",
156
- cy: "60",
157
- r: "56",
158
- strokeWidth,
159
- fill: "transparent"
160
- }
161
- ), strokeColor instanceof Object && renderConicGradient(), strokeColor instanceof Object && renderForeignObject(), /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
162
- "circle",
163
- __spreadProps(__spreadValues({
164
- className: `${progressColor ? "" : `${prefixCls}-circle-path`}`,
165
- cx: "60",
166
- cy: "60",
167
- r: "56",
168
- strokeWidth
169
- }, progressColor), {
170
- fill: "transparent",
171
- ref: path1Ref
172
- })
173
- ), done && done.percent && /* @__PURE__ */ import_react.default.createElement(
174
- "circle",
151
+ /* @__PURE__ */ import_react.default.createElement(
152
+ "svg",
175
153
  {
176
- className: (0, import_clsx.default)(`${prefixCls}-circle-segment-path2`, {
177
- [`${prefixCls}-circle-segment-done`]: done && done.percent
178
- }),
179
- cx: "60",
180
- cy: "60",
181
- r: "56",
182
- strokeWidth,
183
- fill: "transparent",
184
- ref: path2Ref
185
- }
186
- ))),
154
+ className: `${prefixCls}-circle`,
155
+ viewBox: "0 0 120 120",
156
+ "aria-hidden": "true"
157
+ },
158
+ /* @__PURE__ */ import_react.default.createElement(
159
+ "circle",
160
+ {
161
+ className: `${prefixCls}-circle-trail`,
162
+ cx: "60",
163
+ cy: "60",
164
+ r: "56",
165
+ strokeWidth,
166
+ fill: "transparent"
167
+ }
168
+ ),
169
+ strokeColor instanceof Object && renderConicGradient(),
170
+ strokeColor instanceof Object && renderForeignObject(),
171
+ /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(
172
+ "circle",
173
+ __spreadProps(__spreadValues({
174
+ className: `${progressColor ? "" : `${prefixCls}-circle-path`}`,
175
+ cx: "60",
176
+ cy: "60",
177
+ r: "56",
178
+ strokeWidth
179
+ }, progressColor), {
180
+ fill: "transparent",
181
+ ref: path1Ref
182
+ })
183
+ ), done && done.percent && /* @__PURE__ */ import_react.default.createElement(
184
+ "circle",
185
+ {
186
+ className: (0, import_clsx.default)(`${prefixCls}-circle-segment-path2`, {
187
+ [`${prefixCls}-circle-segment-done`]: done && done.percent
188
+ }),
189
+ cx: "60",
190
+ cy: "60",
191
+ r: "56",
192
+ strokeWidth,
193
+ fill: "transparent",
194
+ ref: path2Ref
195
+ }
196
+ ))
197
+ ),
187
198
  showInfo && /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-text` }, children)
188
199
  );
189
200
  });
@@ -72,19 +72,28 @@ var Line = import_react.default.forwardRef((props, ref) => {
72
72
  };
73
73
  }
74
74
  }
75
- return /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-outer`, ref }, /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-inner`, style: { height: strokeWidth }, "aria-hidden": "true" }, /* @__PURE__ */ import_react.default.createElement(
75
+ return /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-outer`, ref }, /* @__PURE__ */ import_react.default.createElement(
76
76
  "div",
77
77
  {
78
- className: `${prefixCls}-bg`,
79
- style: __spreadValues({ width: percent + "%" }, progressColor)
80
- }
81
- ), done && done.percent && /* @__PURE__ */ import_react.default.createElement(
82
- "div",
83
- {
84
- className: `${prefixCls}-done-bg`,
85
- style: { width: done.percent + "%" }
86
- }
87
- )), showInfo && /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-text` }, children));
78
+ className: `${prefixCls}-inner`,
79
+ style: { height: strokeWidth },
80
+ "aria-hidden": "true"
81
+ },
82
+ /* @__PURE__ */ import_react.default.createElement(
83
+ "div",
84
+ {
85
+ className: `${prefixCls}-bg`,
86
+ style: __spreadValues({ width: percent + "%" }, progressColor)
87
+ }
88
+ ),
89
+ done && done.percent && /* @__PURE__ */ import_react.default.createElement(
90
+ "div",
91
+ {
92
+ className: `${prefixCls}-done-bg`,
93
+ style: { width: done.percent + "%" }
94
+ }
95
+ )
96
+ ), showInfo && /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-text` }, children));
88
97
  });
89
98
  Line.displayName = "Line";
90
99
  var line_default = Line;
@@ -34,9 +34,44 @@ __export(basic_exports, {
34
34
  module.exports = __toCommonJS(basic_exports);
35
35
  var import_react = __toESM(require("react"));
36
36
  var import__ = __toESM(require("../index"));
37
+ var people = [
38
+ { key: "ada", value: "ada", label: "Ada Lovelace" },
39
+ { key: "grace", value: "grace", label: "Grace Hopper" },
40
+ { key: "alan", value: "alan", label: "Alan Turing" },
41
+ { key: "margaret", value: "margaret", label: "Margaret Hamilton" }
42
+ ];
37
43
  var basic_default = () => {
38
- const onSearch = (value) => {
39
- console.log("search value:", value);
44
+ const [keyword, setKeyword] = (0, import_react.useState)("");
45
+ const [selected, setSelected] = (0, import_react.useState)(null);
46
+ const results = (0, import_react.useMemo)(() => {
47
+ const normalizedKeyword = keyword.trim().toLowerCase();
48
+ const matched = people.filter(
49
+ (person) => String(person.label).toLowerCase().includes(normalizedKeyword)
50
+ );
51
+ return matched.length > 0 ? matched : [
52
+ {
53
+ key: "empty",
54
+ value: "empty",
55
+ label: "No results found",
56
+ disabled: true
57
+ }
58
+ ];
59
+ }, [keyword]);
60
+ const handleSelect = (option) => {
61
+ setSelected(option);
62
+ if (option) {
63
+ setKeyword(String(option.label));
64
+ }
40
65
  };
41
- return /* @__PURE__ */ import_react.default.createElement("div", { style: { width: 300 } }, /* @__PURE__ */ import_react.default.createElement(import__.default, { placeholder: "input search text", onSearch }));
66
+ return /* @__PURE__ */ import_react.default.createElement("div", { style: { width: 320 } }, /* @__PURE__ */ import_react.default.createElement(
67
+ import__.default,
68
+ {
69
+ allowClear: true,
70
+ value: keyword,
71
+ options: results,
72
+ placeholder: "Search people",
73
+ onSearch: setKeyword,
74
+ onChange: handleSelect
75
+ }
76
+ ), /* @__PURE__ */ import_react.default.createElement("div", { style: { marginTop: 12 } }, "Selected: ", selected ? String(selected.label) : "None"));
42
77
  };
@@ -50,7 +50,7 @@ export interface SearchProps extends Omit<React.InputHTMLAttributes<HTMLInputEle
50
50
  /**
51
51
  * @description Suffix content
52
52
  */
53
- suffix?: React.ReactNode;
53
+ suffix?: React.ReactNode | false;
54
54
  /**
55
55
  * @description Whether disabled
56
56
  * @default false
@@ -74,7 +74,7 @@ export interface SearchProps extends Omit<React.InputHTMLAttributes<HTMLInputEle
74
74
  * @description trigger search event
75
75
  * @default 'typing'
76
76
  */
77
- searchOnAction?: 'typing' | 'enter';
77
+ searchOnAction?: 'typing' | 'enter' | 'button';
78
78
  /**
79
79
  * @description suggest data
80
80
  */
@@ -152,21 +152,12 @@ var Search = import_react.default.forwardRef(
152
152
  } else {
153
153
  }
154
154
  }, [open]);
155
- const handleSearch = (e) => {
156
- var _a2, _b;
157
- if (disabled)
158
- return;
159
- onSearch == null ? void 0 : onSearch(searchValue);
160
- if ((e == null ? void 0 : e.type) === "click") {
161
- (_b = (_a2 = e.target).blur) == null ? void 0 : _b.call(_a2);
162
- }
163
- };
164
155
  const handleChange = (e) => {
165
156
  const newValue = e.target.value;
166
157
  setSearchValue(newValue);
167
158
  (0, import_react.startTransition)(() => {
168
159
  if (searchOnAction === "typing") {
169
- handleSearch(e);
160
+ onSearch == null ? void 0 : onSearch(newValue);
170
161
  }
171
162
  });
172
163
  };
@@ -176,10 +167,27 @@ var Search = import_react.default.forwardRef(
176
167
  onChange == null ? void 0 : onChange(null);
177
168
  onSearch == null ? void 0 : onSearch("");
178
169
  };
170
+ const handleSearchClick = (e) => {
171
+ e.stopPropagation();
172
+ if (searchOnAction === "button") {
173
+ onSearch == null ? void 0 : onSearch(searchValue);
174
+ }
175
+ };
176
+ const renderSearchIcon = () => {
177
+ if (suffix === false)
178
+ return null;
179
+ return /* @__PURE__ */ import_react.default.createElement(
180
+ "span",
181
+ {
182
+ className: `${prefixCls}-search-icon`,
183
+ onClick: handleSearchClick
184
+ },
185
+ suffix || /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Search, { size: 14 })
186
+ );
187
+ };
179
188
  const renderSuffix = () => {
180
- const hasValue = !!searchValue;
181
- const showClearIcon = allowClear && hasValue && !disabled;
182
- const showSuffix = suffix || showClearIcon;
189
+ const showClearIcon = allowClear && !disabled && !rest.readOnly;
190
+ const showSuffix = suffix !== false || suffix !== null || showClearIcon;
183
191
  if (!showSuffix) {
184
192
  return null;
185
193
  }
@@ -195,12 +203,14 @@ var Search = import_react.default.forwardRef(
195
203
  onKeyDown: (e) => {
196
204
  if (e.key === "Enter" || e.key === " ") {
197
205
  e.preventDefault();
198
- handleClear(e);
206
+ handleClear(
207
+ e
208
+ );
199
209
  }
200
210
  }
201
211
  },
202
212
  /* @__PURE__ */ import_react.default.createElement(import_lucide_react.X, { size: 14, "aria-hidden": "true" })
203
- ), suffix);
213
+ ), renderSearchIcon());
204
214
  };
205
215
  const renderPrefix = () => {
206
216
  if (!prefix)
@@ -223,6 +233,7 @@ var Search = import_react.default.forwardRef(
223
233
  prefixCls,
224
234
  {
225
235
  [`${prefixCls}-disabled`]: disabled,
236
+ [`${prefixCls}-with-clear`]: allowClear && searchValue,
226
237
  [`${prefixCls}-borderless`]: !bordered,
227
238
  [`${prefixCls}-small`]: size === "small",
228
239
  [`${prefixCls}-large`]: size === "large"
@@ -231,24 +242,33 @@ var Search = import_react.default.forwardRef(
231
242
  );
232
243
  };
233
244
  const hasPopup = Array.isArray(options) || Array.isArray(suggestions);
234
- const popup = /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-popup`, tabIndex: 0, id: listboxId, role: "listbox" }, Array.isArray(options) ? /* @__PURE__ */ import_react.default.createElement(
235
- import_List.default,
236
- {
237
- focusedKey,
238
- items: options,
239
- itemRender: optionRender,
240
- onClick: onChange
241
- }
242
- ) : Array.isArray(suggestions) ? /* @__PURE__ */ import_react.default.createElement(
243
- import_List.default,
245
+ const popup = /* @__PURE__ */ import_react.default.createElement(
246
+ "div",
244
247
  {
245
- focusedKey,
246
- items: suggestions,
247
- itemRender: suggestionRender,
248
- onClick: onChange
249
- }
250
- ) : null);
251
- return /* @__PURE__ */ import_react.default.createElement(import_Trigger.default, { popup, open, onOpenChange: setOpen }, /* @__PURE__ */ import_react.default.createElement(
248
+ className: `${prefixCls}-popup`,
249
+ tabIndex: 0,
250
+ id: listboxId,
251
+ role: "listbox"
252
+ },
253
+ Array.isArray(options) ? /* @__PURE__ */ import_react.default.createElement(
254
+ import_List.default,
255
+ {
256
+ focusedKey,
257
+ items: options,
258
+ itemRender: optionRender,
259
+ onClick: onChange
260
+ }
261
+ ) : Array.isArray(suggestions) ? /* @__PURE__ */ import_react.default.createElement(
262
+ import_List.default,
263
+ {
264
+ focusedKey,
265
+ items: suggestions,
266
+ itemRender: suggestionRender,
267
+ onClick: onChange
268
+ }
269
+ ) : null
270
+ );
271
+ return /* @__PURE__ */ import_react.default.createElement(import_Trigger.default, { popup, open, stretch: "width", onOpenChange: setOpen }, /* @__PURE__ */ import_react.default.createElement(
252
272
  "div",
253
273
  {
254
274
  className: getRootClassName(),
@@ -1,8 +1,8 @@
1
1
  // @import '../../style/index.less';
2
2
 
3
- @search-prefix-cls: ~'yee-search';
3
+ @cls: ~'yee-search';
4
4
 
5
- .@{search-prefix-cls} {
5
+ .@{cls} {
6
6
  position: relative;
7
7
  display: inline-flex;
8
8
  align-items: center;
@@ -69,9 +69,10 @@
69
69
  border: none;
70
70
  outline: none;
71
71
  transition: all 0.2s;
72
+ line-height: var(--yee-input-line-height);
72
73
 
73
74
  &::placeholder {
74
- color: var(--yee-text-color-placeholder);
75
+ color: var(--yee-placeholder-color);
75
76
  }
76
77
 
77
78
  &-disabled {
@@ -99,7 +100,17 @@
99
100
  color: var(--yee-input-fix-icon-color);
100
101
  }
101
102
 
103
+ &-search-icon {
104
+ display: inline-flex;
105
+ }
106
+
102
107
  &-clear-icon {
108
+ display: inline-flex;
109
+ padding: var(--yee-input-clear-padding);
110
+ color: var(--yee-input-clear-color);
111
+ background-color: var(--yee-input-clear-bg-color);
112
+ border-radius: 50%;
113
+ visibility: hidden;
103
114
  cursor: pointer;
104
115
  transition: color 0.2s;
105
116
 
@@ -108,6 +119,12 @@
108
119
  }
109
120
  }
110
121
 
122
+ &&-with-clear:not(.@{cls}-disabled):hover {
123
+ .@{cls}-clear-icon {
124
+ visibility: visible;
125
+ }
126
+ }
127
+
111
128
  &-button {
112
129
  display: flex;
113
130
  align-items: center;
@@ -97,7 +97,8 @@
97
97
  width: 15px;
98
98
  right: -15px;
99
99
  top: 0;
100
- box-shadow: inset 4px 0 8px -4px var(--yee-table-fixed-left-after-bs-color);
100
+ box-shadow: inset 4px 0 8px -4px
101
+ var(--yee-table-fixed-left-after-bs-color);
101
102
  }
102
103
  }
103
104
 
@@ -111,7 +112,8 @@
111
112
  width: 15px;
112
113
  left: -15px;
113
114
  top: 0;
114
- box-shadow: inset -4px 0 8px -4px var(--yee-table-fixed-right-after-bs-color);
115
+ box-shadow: inset -4px 0 8px -4px
116
+ var(--yee-table-fixed-right-after-bs-color);
115
117
  }
116
118
  }
117
119
  }
@@ -99,11 +99,11 @@ var TableCell = (props) => {
99
99
  },
100
100
  className
101
101
  );
102
- const styles2 = __spreadProps(__spreadValues({}, style), { width, maxWidth: width, textAlign: align });
102
+ const _style = __spreadProps(__spreadValues({}, style), { width, maxWidth: width, textAlign: align });
103
103
  const _title = typeof title === "string" ? title : void 0;
104
104
  return __spreadProps(__spreadValues({}, cellProperty), {
105
105
  className: cls,
106
- style: styles2,
106
+ style: _style,
107
107
  title: _title
108
108
  });
109
109
  };
@@ -115,7 +115,6 @@ export interface TransferListProps {
115
115
  total?: number;
116
116
  };
117
117
  draggable?: boolean;
118
- targetMinCountLimit?: number;
119
118
  onDrop?: (dropObj: Record<string, any>, dataSource: DataSource[]) => void;
120
119
  onDelete?: (key: string | number) => void;
121
120
  onItemSelect: (keys: Array<string | number>) => void;
@@ -66,6 +66,10 @@
66
66
  line-height: var(--yee-transfer-list-item-height, 32px);
67
67
  padding: var(--yee-transfer-list-item-padding, 0 11px);
68
68
 
69
+ &-checkbox {
70
+ width: 100%;
71
+ }
72
+
69
73
  &:hover:not(.yee-one-way):not(.disabled) {
70
74
  color: var(--yee-transfer-list-content-item-hover-color);
71
75
  background-color: var(--yee-transfer-list-content-item-hover-bg-color);
@@ -201,6 +201,7 @@ var TransferList = (props) => {
201
201
  return /* @__PURE__ */ import_react.default.createElement("ul", { className: `${prefixCls}-list-body` }, checkboxOptions.map((option, index) => /* @__PURE__ */ import_react.default.createElement("li", { className: `${prefixCls}-list-item`, key: option.value || index }, /* @__PURE__ */ import_react.default.createElement(
202
202
  import_Checkbox.default,
203
203
  {
204
+ className: `${prefixCls}-list-item-checkbox`,
204
205
  value: option.value,
205
206
  disabled: option.disabled || disabled,
206
207
  checked: checkedKeys.includes(option.value),
@@ -107,9 +107,7 @@ var useMessage = () => {
107
107
  updateMessages((current) => {
108
108
  const exists = current.some((item) => item.key === key);
109
109
  if (exists) {
110
- return current.map(
111
- (item) => item.key === key ? nextMessage : item
112
- );
110
+ return current.map((item) => item.key === key ? nextMessage : item);
113
111
  }
114
112
  return [...current, nextMessage];
115
113
  });
@@ -64,9 +64,9 @@ module.exports = __toCommonJS(notice_exports);
64
64
  var import_clsx = __toESM(require("clsx"));
65
65
  var import_lucide_react = require("lucide-react");
66
66
  var import_react = __toESM(require("react"));
67
+ var import_Button = __toESM(require("../Button"));
67
68
  var import_Progress = __toESM(require("../Progress"));
68
69
  var import_useCountdown = __toESM(require("../hooks/useCountdown"));
69
- var import_Button = __toESM(require("../Button"));
70
70
  var icons = {
71
71
  info: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Info, { size: 22, fill: "currentColor", stroke: "#FFF", strokeWidth: 2 }),
72
72
  success: /* @__PURE__ */ import_react.default.createElement(import_lucide_react.CircleCheck, { size: 22, fill: "currentColor", stroke: "#FFF", strokeWidth: 2 }),
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * @rainbow-oh/yee-c CSS Variables
3
3
  * Auto-generated, do not edit manually
4
- * Generated on 2026-08-11T09:02:55.587Z
4
+ * Generated on 2026-08-13T08:02:29.627Z
5
5
  */
6
6
 
7
7
  /* ========== color.blue.css ========== */
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * @rainbow-oh/yee-c CSS Variables
3
3
  * Auto-generated, do not edit manually
4
- * Generated on 2026-08-11T09:02:55.587Z
4
+ * Generated on 2026-08-13T08:02:29.627Z
5
5
  */
6
6
 
7
7
  /* ========== color.css ========== */
@@ -3,4 +3,4 @@ declare global {
3
3
  __yee_c_version__: string;
4
4
  }
5
5
  }
6
- export declare const version = "0.8.18";
6
+ export declare const version = "0.8.20";
@@ -22,7 +22,7 @@ __export(version_exports, {
22
22
  version: () => version
23
23
  });
24
24
  module.exports = __toCommonJS(version_exports);
25
- var version = "0.8.18";
25
+ var version = "0.8.20";
26
26
  if (typeof window !== "undefined") {
27
27
  window.__yee_c_version__ = version;
28
28
  }
@@ -73,7 +73,7 @@ var CheckboxGroup = function CheckboxGroup(baseprops) {
73
73
  return /*#__PURE__*/React.createElement(Checkbox, _extends({
74
74
  disabled: disabled
75
75
  }, option, {
76
- checked: mergedValue.includes(option.value),
76
+ checked: mergedValue === null || mergedValue === void 0 ? void 0 : mergedValue.includes(option.value),
77
77
  key: option.value || index
78
78
  }), option.label);
79
79
  })));
@@ -74,7 +74,8 @@ var Checkbox = function Checkbox(baseprops) {
74
74
  "aria-hidden": "true"
75
75
  })), children ? /*#__PURE__*/React.createElement("span", {
76
76
  className: clsx("".concat(prefixCls, "-label"), classNames === null || classNames === void 0 ? void 0 : classNames.label),
77
- style: styles === null || styles === void 0 ? void 0 : styles.label
77
+ style: styles === null || styles === void 0 ? void 0 : styles.label,
78
+ title: typeof children === 'string' ? children : undefined
78
79
  }, children) : null);
79
80
  };
80
81
  Checkbox.displayName = 'Checkbox';
@@ -93,6 +93,9 @@
93
93
  &-label {
94
94
  padding: var(--yee-checkbox-label-padding);
95
95
  user-select: none;
96
+ white-space: nowrap;
97
+ text-overflow: ellipsis;
98
+ overflow: hidden;
96
99
  }
97
100
 
98
101
  &-indeterminate {
@@ -18,7 +18,7 @@ import React, { useContext, useEffect, useId, useMemo, useReducer, useRef } from
18
18
  import Grid from "../Grid";
19
19
  import FieldContext from "./FieldContext";
20
20
  import FormContext from "./FormContext";
21
- import { runValidator } from "./utils/validate";
21
+ import { isEmpty, runValidator } from "./utils/validate";
22
22
  var Group = function Group(props) {
23
23
  var _errors$;
24
24
  var label = props.label,
@@ -82,7 +82,7 @@ var Group = function Group(props) {
82
82
  errors = []; // Required validation: error if any child field is empty
83
83
  if (required) {
84
84
  hasEmpty = childNames.some(function (name) {
85
- return !values[name] && values[name] !== 0;
85
+ return isEmpty(values[name]);
86
86
  });
87
87
  if (hasEmpty) {
88
88
  errors.push({