@rainbow-oh/yee-c 0.8.0 → 0.8.1

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 (101) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +40 -25
  3. package/dist/cjs/Card/card.js +7 -3
  4. package/dist/cjs/Carousel/carousel-item.js +7 -2
  5. package/dist/cjs/Carousel/carousel.js +31 -4
  6. package/dist/cjs/Cascader/cascader.js +1 -1
  7. package/dist/cjs/Cascader/column.js +1 -1
  8. package/dist/cjs/Cascader/node.js +16 -4
  9. package/dist/cjs/Cascader/search-list.js +13 -4
  10. package/dist/cjs/Checkbox/checkbox-group.js +1 -1
  11. package/dist/cjs/Checkbox/checkbox.js +6 -3
  12. package/dist/cjs/Collapse/panel.js +10 -1
  13. package/dist/cjs/Dialog/dialog.js +22 -7
  14. package/dist/cjs/Drawer/drawer.js +14 -5
  15. package/dist/cjs/Menu/menu-item.js +14 -5
  16. package/dist/cjs/Menu/menu.js +10 -2
  17. package/dist/cjs/Pagination/items.js +10 -5
  18. package/dist/cjs/Pagination/pagination.js +9 -3
  19. package/dist/cjs/Radio/radio-group.js +6 -5
  20. package/dist/cjs/Radio/radio.js +39 -29
  21. package/dist/cjs/Rate/rate.js +6 -1
  22. package/dist/cjs/Rate/star.js +7 -3
  23. package/dist/cjs/Steps/step.js +7 -5
  24. package/dist/cjs/Steps/steps.js +1 -1
  25. package/dist/cjs/Tabs/tab-content.js +3 -1
  26. package/dist/cjs/Tabs/tab-header/index.js +3 -1
  27. package/dist/cjs/Tabs/tab-header/tab-header-title.js +3 -1
  28. package/dist/cjs/hooks/useDelayState.js +3 -2
  29. package/dist/cjs/hooks/useFocusManage.d.ts +1 -1
  30. package/dist/cjs/hooks/useFocusManage.js +27 -22
  31. package/dist/cjs/style/themes.css +1 -1
  32. package/dist/cjs/style/variables.css +1 -1
  33. package/dist/cjs/utils/focusStack.d.ts +6 -2
  34. package/dist/cjs/utils/focusStack.js +40 -11
  35. package/dist/cjs/version.d.ts +1 -1
  36. package/dist/cjs/version.js +1 -1
  37. package/dist/esm/Card/card.js +7 -3
  38. package/dist/esm/Carousel/carousel-item.js +7 -2
  39. package/dist/esm/Carousel/carousel.js +31 -4
  40. package/dist/esm/Cascader/cascader.js +3 -1
  41. package/dist/esm/Cascader/column.js +2 -1
  42. package/dist/esm/Cascader/node.js +18 -4
  43. package/dist/esm/Cascader/search-list.js +18 -4
  44. package/dist/esm/Checkbox/checkbox-group.js +3 -1
  45. package/dist/esm/Checkbox/checkbox.js +6 -3
  46. package/dist/esm/Collapse/panel.js +11 -2
  47. package/dist/esm/Dialog/dialog.js +26 -9
  48. package/dist/esm/Drawer/drawer.js +16 -7
  49. package/dist/esm/Menu/menu-item.js +16 -5
  50. package/dist/esm/Menu/menu.js +11 -5
  51. package/dist/esm/Pagination/items.js +14 -5
  52. package/dist/esm/Pagination/pagination.js +16 -4
  53. package/dist/esm/Radio/radio-group.js +5 -4
  54. package/dist/esm/Radio/radio.js +5 -4
  55. package/dist/esm/Rate/rate.js +6 -1
  56. package/dist/esm/Rate/star.js +12 -4
  57. package/dist/esm/Steps/step.js +12 -6
  58. package/dist/esm/Steps/steps.js +3 -1
  59. package/dist/esm/Tabs/tab-content.js +3 -1
  60. package/dist/esm/Tabs/tab-header/index.js +3 -1
  61. package/dist/esm/Tabs/tab-header/tab-header-title.js +3 -1
  62. package/dist/esm/hooks/useDelayState.js +5 -2
  63. package/dist/esm/hooks/useFocusManage.d.ts +1 -1
  64. package/dist/esm/hooks/useFocusManage.js +31 -13
  65. package/dist/esm/style/themes.css +1 -1
  66. package/dist/esm/style/variables.css +1 -1
  67. package/dist/esm/utils/focusStack.d.ts +6 -2
  68. package/dist/esm/utils/focusStack.js +37 -14
  69. package/dist/esm/version.d.ts +1 -1
  70. package/dist/esm/version.js +1 -1
  71. package/dist/umd/yee-c.min.js +1 -1
  72. package/package.json +10 -6
  73. package/src/Card/card.tsx +5 -1
  74. package/src/Carousel/carousel-item.tsx +7 -1
  75. package/src/Carousel/carousel.tsx +30 -3
  76. package/src/Cascader/cascader.tsx +1 -1
  77. package/src/Cascader/column.tsx +1 -1
  78. package/src/Cascader/node.tsx +14 -2
  79. package/src/Cascader/search-list.tsx +11 -2
  80. package/src/Checkbox/checkbox-group.tsx +1 -1
  81. package/src/Checkbox/checkbox.tsx +3 -0
  82. package/src/Collapse/panel.tsx +11 -1
  83. package/src/Dialog/dialog.tsx +31 -6
  84. package/src/Drawer/drawer.tsx +12 -3
  85. package/src/Menu/menu-item.tsx +12 -3
  86. package/src/Menu/menu.tsx +11 -5
  87. package/src/Pagination/items.tsx +9 -4
  88. package/src/Pagination/pagination.tsx +10 -4
  89. package/src/Radio/radio-group.tsx +2 -1
  90. package/src/Radio/radio.tsx +7 -2
  91. package/src/Rate/rate.tsx +5 -0
  92. package/src/Rate/star.tsx +8 -4
  93. package/src/Steps/step.tsx +15 -5
  94. package/src/Steps/steps.tsx +1 -1
  95. package/src/Tabs/tab-content.tsx +2 -0
  96. package/src/Tabs/tab-header/index.tsx +2 -0
  97. package/src/Tabs/tab-header/tab-header-title.tsx +3 -1
  98. package/src/hooks/useDelayState.ts +4 -2
  99. package/src/hooks/useFocusManage.ts +33 -17
  100. package/src/utils/focusStack.ts +55 -12
  101. package/src/version.ts +1 -1
@@ -107,16 +107,17 @@ var Items = (props) => {
107
107
  }
108
108
  },
109
109
  role: "button",
110
+ "aria-label": "Jump back 7 pages",
110
111
  key: "turnleft"
111
112
  },
112
- (_a = components == null ? void 0 : components.jumpPrev) != null ? _a : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-jump-prev-ellipsis` }, /* @__PURE__ */ import_react.default.createElement(
113
+ (_a = components == null ? void 0 : components.jumpPrev) != null ? _a : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-jump-prev-ellipsis`, "aria-hidden": "true" }, /* @__PURE__ */ import_react.default.createElement(
113
114
  import_lucide_react.Ellipsis,
114
115
  {
115
116
  className: "ellipsis",
116
117
  size: 18,
117
118
  strokeWidth: 1.5
118
119
  }
119
- )), /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-jump-prev-icon` }, /* @__PURE__ */ import_react.default.createElement(
120
+ )), /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-jump-prev-icon`, "aria-hidden": "true" }, /* @__PURE__ */ import_react.default.createElement(
120
121
  import_lucide_react.ChevronsLeft,
121
122
  {
122
123
  className: "turn",
@@ -139,16 +140,17 @@ var Items = (props) => {
139
140
  }
140
141
  },
141
142
  role: "button",
143
+ "aria-label": "Jump forward 7 pages",
142
144
  key: "turn-right"
143
145
  },
144
- (_b = components == null ? void 0 : components.jumpNext) != null ? _b : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-jump-next-ellipsis` }, /* @__PURE__ */ import_react.default.createElement(
146
+ (_b = components == null ? void 0 : components.jumpNext) != null ? _b : /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-jump-next-ellipsis`, "aria-hidden": "true" }, /* @__PURE__ */ import_react.default.createElement(
145
147
  import_lucide_react.Ellipsis,
146
148
  {
147
149
  className: "ellipsis",
148
150
  size: 18,
149
151
  strokeWidth: 1.5
150
152
  }
151
- )), /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-jump-next-icon` }, /* @__PURE__ */ import_react.default.createElement(
153
+ )), /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-jump-next-icon`, "aria-hidden": "true" }, /* @__PURE__ */ import_react.default.createElement(
152
154
  import_lucide_react.ChevronsRight,
153
155
  {
154
156
  className: "turn",
@@ -178,7 +180,10 @@ var Items = (props) => {
178
180
  if (e.key === "Enter") {
179
181
  onChange(number);
180
182
  }
181
- }
183
+ },
184
+ role: "button",
185
+ "aria-label": `Page ${number}`,
186
+ "aria-current": current === number ? "page" : void 0
182
187
  },
183
188
  number
184
189
  );
@@ -233,9 +233,12 @@ var Pagination = import_react.default.forwardRef(
233
233
  prevClick();
234
234
  }
235
235
  },
236
+ role: "button",
237
+ "aria-label": "Previous page",
238
+ "aria-disabled": mergedCurrent === 1 || void 0,
236
239
  key: "prev"
237
240
  },
238
- (_a2 = components == null ? void 0 : components.prev) != null ? _a2 : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.ChevronLeft, { size: 20, strokeWidth: 1.5 })
241
+ (_a2 = components == null ? void 0 : components.prev) != null ? _a2 : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.ChevronLeft, { size: 20, strokeWidth: 1.5, "aria-hidden": "true" })
239
242
  );
240
243
  };
241
244
  const renderNext = () => {
@@ -258,9 +261,12 @@ var Pagination = import_react.default.forwardRef(
258
261
  nextClick();
259
262
  }
260
263
  },
264
+ role: "button",
265
+ "aria-label": "Next page",
266
+ "aria-disabled": mergedCurrent === pageCount || void 0,
261
267
  key: "next"
262
268
  },
263
- (_a2 = components == null ? void 0 : components.next) != null ? _a2 : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.ChevronRight, { size: 20, strokeWidth: 1.5 })
269
+ (_a2 = components == null ? void 0 : components.next) != null ? _a2 : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.ChevronRight, { size: 20, strokeWidth: 1.5, "aria-hidden": "true" })
264
270
  );
265
271
  };
266
272
  const renderSizeChanger = () => {
@@ -289,7 +295,7 @@ var Pagination = import_react.default.forwardRef(
289
295
  if (hideOnSinglePage && pageCount <= 1 || pageCount === 0) {
290
296
  return null;
291
297
  }
292
- return /* @__PURE__ */ import_react.default.createElement("ul", __spreadProps(__spreadValues({}, rest), { className: cls, style, ref }), renderTotal(), renderPrevious(), simple ? /* @__PURE__ */ import_react.default.createElement("li", { className: `${prefixCls}-simple` }, renderNumber(false), /* @__PURE__ */ import_react.default.createElement("span", { className: "split" }, "/"), /* @__PURE__ */ import_react.default.createElement("span", { className: "total-page" }, pageCount)) : /* @__PURE__ */ import_react.default.createElement(
298
+ return /* @__PURE__ */ import_react.default.createElement("ul", __spreadProps(__spreadValues({}, rest), { className: cls, style, ref, role: "navigation", "aria-label": "Pagination", "aria-disabled": disabled || void 0 }), renderTotal(), renderPrevious(), simple ? /* @__PURE__ */ import_react.default.createElement("li", { className: `${prefixCls}-simple` }, renderNumber(false), /* @__PURE__ */ import_react.default.createElement("span", { className: "split", "aria-hidden": "true" }, "/"), /* @__PURE__ */ import_react.default.createElement("span", { className: "total-page" }, pageCount)) : /* @__PURE__ */ import_react.default.createElement(
293
299
  import_items.default,
294
300
  {
295
301
  prefixCls,
@@ -120,12 +120,13 @@ var RadioGroup = import_react.default.forwardRef(
120
120
  };
121
121
  return /* @__PURE__ */ import_react.default.createElement(
122
122
  "div",
123
- {
123
+ __spreadValues({
124
124
  className: cls,
125
125
  style: __spreadProps(__spreadValues({}, style), { gap }),
126
126
  ref,
127
- role: "radiogroup"
128
- },
127
+ role: "radiogroup",
128
+ "aria-disabled": disabled || void 0
129
+ }, rest),
129
130
  /* @__PURE__ */ import_react.default.createElement(
130
131
  GroupCtx.Provider,
131
132
  {
@@ -133,9 +134,9 @@ var RadioGroup = import_react.default.forwardRef(
133
134
  },
134
135
  options == null ? void 0 : options.map((option, index) => /* @__PURE__ */ import_react.default.createElement(
135
136
  import_radio.default,
136
- __spreadProps(__spreadValues(__spreadValues({
137
+ __spreadProps(__spreadValues({
137
138
  disabled
138
- }, rest), option), {
139
+ }, option), {
139
140
  checked: option.value === mergedValue,
140
141
  key: option.value || index
141
142
  })
@@ -134,42 +134,52 @@ var Radio = import_react.default.forwardRef(
134
134
  },
135
135
  className
136
136
  );
137
- return /* @__PURE__ */ import_react.default.createElement("label", { className: cls, style, onClick: handleClick }, /* @__PURE__ */ import_react.default.createElement(
138
- "span",
137
+ return /* @__PURE__ */ import_react.default.createElement(
138
+ "label",
139
139
  {
140
- className: (0, import_clsx.default)(prefixCls, {
141
- [`${prefixCls}-disabled`]: disabled
142
- })
140
+ className: cls,
141
+ style,
142
+ onClick: handleClick,
143
+ "aria-disabled": disabled || void 0
143
144
  },
144
145
  /* @__PURE__ */ import_react.default.createElement(
145
- "input",
146
- __spreadProps(__spreadValues({}, rest), {
147
- ref,
148
- className: `${prefixCls}-input`,
149
- type: "radio",
150
- name,
151
- value,
152
- checked: mergedChecked,
153
- disabled,
154
- onChange: handleChange,
155
- "aria-checked": mergedChecked
156
- })
146
+ "span",
147
+ {
148
+ className: (0, import_clsx.default)(prefixCls, {
149
+ [`${prefixCls}-disabled`]: disabled
150
+ })
151
+ },
152
+ /* @__PURE__ */ import_react.default.createElement(
153
+ "input",
154
+ __spreadProps(__spreadValues({}, rest), {
155
+ ref,
156
+ className: `${prefixCls}-input`,
157
+ type: "radio",
158
+ name,
159
+ value,
160
+ checked: mergedChecked,
161
+ disabled,
162
+ onChange: handleChange
163
+ })
164
+ ),
165
+ !buttonStyle && /* @__PURE__ */ import_react.default.createElement(
166
+ "span",
167
+ {
168
+ className: (0, import_clsx.default)(`${prefixCls}-inner`, classNames == null ? void 0 : classNames.inner),
169
+ style: styles == null ? void 0 : styles.inner,
170
+ "aria-hidden": "true"
171
+ }
172
+ )
157
173
  ),
158
- !buttonStyle && /* @__PURE__ */ import_react.default.createElement(
174
+ /* @__PURE__ */ import_react.default.createElement(
159
175
  "span",
160
176
  {
161
- className: (0, import_clsx.default)(`${prefixCls}-inner`, classNames == null ? void 0 : classNames.inner),
162
- style: styles == null ? void 0 : styles.inner
163
- }
177
+ className: (0, import_clsx.default)(`${prefixCls}-label`, classNames == null ? void 0 : classNames.label),
178
+ style: styles == null ? void 0 : styles.label
179
+ },
180
+ children || label
164
181
  )
165
- ), /* @__PURE__ */ import_react.default.createElement(
166
- "span",
167
- {
168
- className: (0, import_clsx.default)(`${prefixCls}-label`, classNames == null ? void 0 : classNames.label),
169
- style: styles == null ? void 0 : styles.label
170
- },
171
- children || label
172
- ));
182
+ );
173
183
  }
174
184
  );
175
185
  Radio.displayName = "Radio";
@@ -167,7 +167,12 @@ var Rate = import_react.default.forwardRef((baseprops, ref) => {
167
167
  onMouseLeave: onLeave,
168
168
  ref: componentRef,
169
169
  role: "radiogroup",
170
- "aria-label": "Rating"
170
+ "aria-label": "Rating",
171
+ "aria-disabled": disabled || void 0,
172
+ "aria-valuemin": 0,
173
+ "aria-valuemax": count,
174
+ "aria-valuenow": mergedValue,
175
+ "aria-valuetext": `${mergedValue} out of ${count} stars`
171
176
  }),
172
177
  Array(count).fill(0).map((_, index) => {
173
178
  const cls = (0, import_clsx.default)(`${prefixCls}-star`, {
@@ -71,6 +71,7 @@ var Star = (props) => {
71
71
  "aria-checked": active,
72
72
  "aria-posinset": index + 1,
73
73
  "aria-setsize": count,
74
+ "aria-label": `${index + 1} ${index + 1 === 1 ? "star" : "stars"}`,
74
75
  key: "star-" + index
75
76
  },
76
77
  /* @__PURE__ */ import_react.default.createElement(
@@ -85,9 +86,10 @@ var Star = (props) => {
85
86
  }
86
87
  },
87
88
  tabIndex: 0,
89
+ "aria-label": `${index + 0.5} stars`,
88
90
  key: "star-" + index + "left"
89
91
  },
90
- character ? /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-character` }, renderCharacter()) : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.StarHalf, { className: `${prefixCls}-star-half` })
92
+ character ? /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-character` }, renderCharacter()) : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.StarHalf, { className: `${prefixCls}-star-half`, "aria-hidden": "true" })
91
93
  ),
92
94
  /* @__PURE__ */ import_react.default.createElement(
93
95
  "div",
@@ -101,9 +103,10 @@ var Star = (props) => {
101
103
  }
102
104
  },
103
105
  tabIndex: 0,
106
+ "aria-label": `${index + 1} ${index + 1 === 1 ? "star" : "stars"}`,
104
107
  key: "star-" + index + "right"
105
108
  },
106
- character ? /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-character` }, renderCharacter()) : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Star, { className: `${prefixCls}-star-full` })
109
+ character ? /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-character` }, renderCharacter()) : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Star, { className: `${prefixCls}-star-full`, "aria-hidden": "true" })
107
110
  )
108
111
  ) : /* @__PURE__ */ import_react.default.createElement(
109
112
  "li",
@@ -121,9 +124,10 @@ var Star = (props) => {
121
124
  "aria-checked": active,
122
125
  "aria-posinset": index + 1,
123
126
  "aria-setsize": count,
127
+ "aria-label": `${index + 1} ${index + 1 === 1 ? "star" : "stars"}`,
124
128
  key: "star-" + index
125
129
  },
126
- character ? /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-character` }, renderCharacter()) : active ? /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Star, { className: `${prefixCls}-star-active` }) : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Star, { className: `${prefixCls}-star-inactive` })
130
+ character ? /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-character` }, renderCharacter()) : active ? /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Star, { className: `${prefixCls}-star-active`, "aria-hidden": "true" }) : /* @__PURE__ */ import_react.default.createElement(import_lucide_react.Star, { className: `${prefixCls}-star-inactive`, "aria-hidden": "true" })
127
131
  ), children ? /* @__PURE__ */ import_react.default.createElement(import_Tooltip.default, { title: value, placement: "top" }, children) : null);
128
132
  };
129
133
  Star.displayName = "Star";
@@ -69,6 +69,7 @@ var Step = (props) => {
69
69
  }
70
70
  };
71
71
  const mergedStatus = (_a = itemStatus != null ? itemStatus : status) != null ? _a : index < current ? "finish" : index === current ? "process" : "wait";
72
+ const statusLabel = mergedStatus === "finish" ? "completed" : mergedStatus === "process" ? "in progress" : mergedStatus === "error" ? "error" : "pending";
72
73
  const renderIcon = (0, import_react.useMemo)(() => {
73
74
  if (dot)
74
75
  return /* @__PURE__ */ import_react.default.createElement("span", { className: `${prefixCls}-item-dot` });
@@ -100,7 +101,7 @@ var Step = (props) => {
100
101
  className
101
102
  );
102
103
  const ribbonStatus = index < current ? "done" : index === current ? "doing" : "undo";
103
- return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, type === "ribbon" && /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-ribbon-end ${ribbonStatus}` }), /* @__PURE__ */ import_react.default.createElement(
104
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, type === "ribbon" && /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-ribbon-end ${ribbonStatus}`, "aria-hidden": "true" }), /* @__PURE__ */ import_react.default.createElement(
104
105
  "div",
105
106
  {
106
107
  className: cls,
@@ -108,12 +109,13 @@ var Step = (props) => {
108
109
  onClick: handleClick,
109
110
  onKeyDown: handleKeyDown,
110
111
  tabIndex: disabled ? -1 : onChange ? 0 : void 0,
111
- role: onChange ? "button" : void 0,
112
+ role: onChange ? "button" : "listitem",
112
113
  "aria-disabled": disabled,
113
- "aria-current": index === current ? "step" : void 0
114
+ "aria-current": index === current ? "step" : void 0,
115
+ "aria-label": `Step ${index + 1}${typeof title === "string" ? `: ${title}` : ""}, ${statusLabel}`
114
116
  },
115
- /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-icon` }, renderIcon),
117
+ /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-icon`, "aria-hidden": "true" }, renderIcon),
116
118
  /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-content` }, /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-title` }, /* @__PURE__ */ import_react.default.createElement("span", { title: typeof title === "string" ? title : void 0 }, title), subTitle && /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-sub-title` }, subTitle)), type !== "ribbon" && description && /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-description` }, description))
117
- ), type === "navigation" && /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-navi-arrow` }, /* @__PURE__ */ import_react.default.createElement(import_lucide_react.ChevronRight, null)), type === "ribbon" && /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-ribbon-head ${ribbonStatus}` }));
119
+ ), type === "navigation" && /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-navi-arrow`, "aria-hidden": "true" }, /* @__PURE__ */ import_react.default.createElement(import_lucide_react.ChevronRight, null)), type === "ribbon" && /* @__PURE__ */ import_react.default.createElement("div", { className: `${prefixCls}-item-ribbon-head ${ribbonStatus}`, "aria-hidden": "true" }));
118
120
  };
119
121
  var step_default = Step;
@@ -135,7 +135,7 @@ var Steps = (0, import_react.forwardRef)((baseprops, ref) => {
135
135
  }
136
136
  return items.map((item, index) => /* @__PURE__ */ import_react.default.createElement(import_step.default, __spreadProps(__spreadValues({}, item), { index, key: index })));
137
137
  };
138
- return /* @__PURE__ */ import_react.default.createElement("div", __spreadProps(__spreadValues({}, rest), { className: cls, style, ref }), /* @__PURE__ */ import_react.default.createElement(StepsContext.Provider, { value: contextValue }, renderSteps()));
138
+ return /* @__PURE__ */ import_react.default.createElement("div", __spreadProps(__spreadValues({}, rest), { className: cls, style, ref, role: "list", "aria-label": "Steps" }), /* @__PURE__ */ import_react.default.createElement(StepsContext.Provider, { value: contextValue }, renderSteps()));
139
139
  });
140
140
  Steps.displayName = "Steps";
141
141
  var steps_default = Steps;
@@ -70,9 +70,11 @@ var TabContent = ({
70
70
  className: `${prefixCls}-tab-content`,
71
71
  style: { display: activeKey === key ? "block" : "none" },
72
72
  key,
73
+ id: `tabpanel-${key}`,
73
74
  role: "tabpanel",
74
75
  "aria-labelledby": `tab-${key}`,
75
- "aria-hidden": activeKey !== key
76
+ "aria-hidden": activeKey !== key,
77
+ tabIndex: activeKey === key ? 0 : -1
76
78
  },
77
79
  children
78
80
  );
@@ -157,7 +157,9 @@ var TabHeader = (props) => {
157
157
  {
158
158
  className: (0, import_clsx.default)(`${prefixCls}-nav-list`, classNames == null ? void 0 : classNames.list),
159
159
  style: styles == null ? void 0 : styles.list,
160
- ref: navList
160
+ ref: navList,
161
+ role: "tablist",
162
+ "aria-orientation": direction
161
163
  },
162
164
  items == null ? void 0 : items.map((item, index) => /* @__PURE__ */ import_react.default.createElement(
163
165
  import_tab_header_title.default,
@@ -223,10 +223,12 @@ var TabHeaderTitle = (props) => {
223
223
  __spreadProps(__spreadValues({}, rest), {
224
224
  ref: tabRef,
225
225
  role: "tab",
226
+ id: `tab-${$key}`,
226
227
  "aria-selected": activeKey === $key,
227
228
  "aria-disabled": disabled,
229
+ "aria-controls": `tabpanel-${$key}`,
228
230
  className: cls,
229
- tabIndex: disabled ? -1 : 0,
231
+ tabIndex: disabled ? -1 : activeKey === $key ? 0 : -1,
230
232
  onClick: handleTabClick,
231
233
  onKeyDown: handleKeyDown
232
234
  }),
@@ -26,9 +26,10 @@ var import_react = require("react");
26
26
  function useDelayState(state, delay = 0) {
27
27
  const [delayState, setDelayState] = (0, import_react.useState)();
28
28
  (0, import_react.useEffect)(() => {
29
- setTimeout(() => {
29
+ const timer = window.setTimeout(() => {
30
30
  setDelayState(state);
31
31
  }, delay * 1e3);
32
- }, [state]);
32
+ return () => window.clearTimeout(timer);
33
+ }, [delay, state]);
33
34
  return delayState;
34
35
  }
@@ -1 +1 @@
1
- export default function useFocusManage(ele: HTMLElement, open: boolean): void;
1
+ export default function useFocusManage(element: HTMLElement | null, open: boolean): void;
@@ -1,8 +1,6 @@
1
- var __create = Object.create;
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
5
  var __export = (target, all) => {
8
6
  for (var name in all)
@@ -16,14 +14,6 @@ var __copyProps = (to, from, except, desc) => {
16
14
  }
17
15
  return to;
18
16
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
18
 
29
19
  // src/hooks/useFocusManage.ts
@@ -34,19 +24,34 @@ __export(useFocusManage_exports, {
34
24
  module.exports = __toCommonJS(useFocusManage_exports);
35
25
  var import_react = require("react");
36
26
  var import_focusStack = require("../utils/focusStack");
37
- var import_useDelayState = __toESM(require("./useDelayState"));
38
- function useFocusManage(ele, open) {
39
- const delayOpen = (0, import_useDelayState.default)(open);
27
+ function useFocusManage(element, open) {
28
+ const entryRef = (0, import_react.useRef)(null);
29
+ const previousFocusRef = (0, import_react.useRef)(null);
30
+ const openCycleRef = (0, import_react.useRef)(false);
31
+ const releaseEntry = () => {
32
+ if (entryRef.current) {
33
+ (0, import_focusStack.popFocus)(entryRef.current);
34
+ entryRef.current = null;
35
+ }
36
+ };
37
+ const endOpenCycle = () => {
38
+ releaseEntry();
39
+ previousFocusRef.current = null;
40
+ openCycleRef.current = false;
41
+ };
42
+ (0, import_react.useEffect)(() => {
43
+ if (open && !openCycleRef.current) {
44
+ openCycleRef.current = true;
45
+ previousFocusRef.current = document.activeElement;
46
+ } else if (!open && openCycleRef.current) {
47
+ endOpenCycle();
48
+ }
49
+ }, [open]);
40
50
  (0, import_react.useEffect)(() => {
41
- if (!ele)
51
+ if (!open || !openCycleRef.current || !element || entryRef.current) {
42
52
  return;
43
- if (delayOpen) {
44
- (0, import_focusStack.pushFocus)(ele);
45
- } else {
46
- (0, import_focusStack.popFocus)();
47
53
  }
48
- return () => {
49
- (0, import_focusStack.popFocus)();
50
- };
51
- }, [ele, delayOpen]);
54
+ entryRef.current = (0, import_focusStack.pushFocus)(element, previousFocusRef.current);
55
+ }, [element, open]);
56
+ (0, import_react.useEffect)(() => releaseEntry, []);
52
57
  }
@@ -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-07-22T03:22:12.652Z
4
+ * Generated on 2026-07-23T07:06:10.927Z
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-07-22T03:22:12.652Z
4
+ * Generated on 2026-07-23T07:06:10.927Z
5
5
  */
6
6
 
7
7
  /* ========== color.css ========== */
@@ -1,4 +1,8 @@
1
1
  type Focusable = HTMLElement | null;
2
- export declare const pushFocus: (el: Focusable) => void;
3
- export declare const popFocus: () => void;
2
+ export interface FocusStackEntry {
3
+ container: HTMLElement;
4
+ previous: Focusable;
5
+ }
6
+ export declare const pushFocus: (container: HTMLElement, previous?: Focusable) => FocusStackEntry;
7
+ export declare const popFocus: (entry: FocusStackEntry) => void;
4
8
  export {};
@@ -23,21 +23,50 @@ __export(focusStack_exports, {
23
23
  pushFocus: () => pushFocus
24
24
  });
25
25
  module.exports = __toCommonJS(focusStack_exports);
26
+ var focusableSelector = [
27
+ "a[href]",
28
+ "button:not([disabled])",
29
+ "textarea:not([disabled])",
30
+ "input:not([disabled])",
31
+ "select:not([disabled])",
32
+ "details",
33
+ '[tabindex]:not([tabindex="-1"])'
34
+ ].join(",");
26
35
  var stack = [];
27
36
  var raf = 0;
28
- var schedule = (el) => {
37
+ var schedule = (callback) => {
29
38
  cancelAnimationFrame(raf);
30
- raf = requestAnimationFrame(() => el == null ? void 0 : el.focus());
39
+ raf = requestAnimationFrame(callback);
31
40
  };
32
- var pushFocus = (el) => {
33
- const prev = document.activeElement;
34
- if (prev && prev !== el)
35
- stack.push(prev);
36
- schedule(el);
41
+ var focusInitialElement = (entry) => {
42
+ if (stack[stack.length - 1] !== entry || !entry.container.isConnected) {
43
+ return;
44
+ }
45
+ const activeElement = document.activeElement;
46
+ if (activeElement && entry.container.contains(activeElement)) {
47
+ return;
48
+ }
49
+ const firstFocusable = entry.container.querySelector(focusableSelector);
50
+ (firstFocusable != null ? firstFocusable : entry.container).focus();
51
+ };
52
+ var pushFocus = (container, previous = document.activeElement) => {
53
+ const entry = { container, previous };
54
+ stack.push(entry);
55
+ schedule(() => focusInitialElement(entry));
56
+ return entry;
37
57
  };
38
- var popFocus = () => {
39
- const el = stack.pop();
40
- if (!el)
58
+ var popFocus = (entry) => {
59
+ const index = stack.lastIndexOf(entry);
60
+ if (index === -1)
61
+ return;
62
+ const isTopEntry = index === stack.length - 1;
63
+ stack.splice(index, 1);
64
+ if (!isTopEntry)
41
65
  return;
42
- schedule(el);
66
+ schedule(() => {
67
+ var _a;
68
+ if ((_a = entry.previous) == null ? void 0 : _a.isConnected) {
69
+ entry.previous.focus();
70
+ }
71
+ });
43
72
  };
@@ -3,4 +3,4 @@ declare global {
3
3
  __yee_c_version__: string;
4
4
  }
5
5
  }
6
- export declare const version = "0.8.0";
6
+ export declare const version = "0.8.1";
@@ -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.0";
25
+ var version = "0.8.1";
26
26
  if (typeof window !== "undefined") {
27
27
  window.__yee_c_version__ = version;
28
28
  }
@@ -79,8 +79,8 @@ var Card = function Card(baseprops) {
79
79
  className: clsx("".concat(prefixCls, "-header-expand-icon"), classNames === null || classNames === void 0 ? void 0 : classNames.expandIcon),
80
80
  style: styles === null || styles === void 0 ? void 0 : styles.expandIcon,
81
81
  "aria-expanded": mergedExpanded,
82
+ "aria-label": mergedExpanded ? 'Collapse content' : 'Expand content',
82
83
  icon: icon ? icon : /*#__PURE__*/React.createElement(ChevronUp, {
83
- "aria-label": "expanded",
84
84
  strokeWidth: 1.5,
85
85
  size: 16,
86
86
  style: {
@@ -110,7 +110,8 @@ var Card = function Card(baseprops) {
110
110
  onClick: headerClickable ? handleExpand : undefined,
111
111
  onKeyDown: handleKeyDown,
112
112
  tabIndex: headerClickable ? 0 : undefined,
113
- role: headerClickable ? 'button' : undefined
113
+ role: headerClickable ? 'button' : undefined,
114
+ "aria-expanded": headerClickable ? mergedExpanded : undefined
114
115
  }, iconPosition === 'left' ? renderExpandIcon() : null, title ? /*#__PURE__*/React.createElement("div", {
115
116
  id: headerId,
116
117
  className: clsx("".concat(prefixCls, "-header-title"), classNames === null || classNames === void 0 ? void 0 : classNames.title),
@@ -131,7 +132,10 @@ var Card = function Card(baseprops) {
131
132
  },
132
133
  transition: {
133
134
  duration: animationDuration
134
- }
135
+ },
136
+ role: "region",
137
+ "aria-labelledby": title ? headerId : undefined,
138
+ "aria-hidden": !mergedExpanded
135
139
  }, children));
136
140
  };
137
141
  export default Card;
@@ -13,10 +13,15 @@ var CarouselItem = function CarouselItem(props) {
13
13
  var _React$useContext = React.useContext(CarouselCtx),
14
14
  prefixCls = _React$useContext.prefixCls,
15
15
  current = _React$useContext.current;
16
+ var isActive = index === current - 1;
16
17
  return /*#__PURE__*/React.createElement("div", {
17
- className: clsx("".concat(prefixCls, "-item"), _defineProperty({}, "".concat(prefixCls, "-item-active"), index === current - 1), className),
18
+ className: clsx("".concat(prefixCls, "-item"), _defineProperty({}, "".concat(prefixCls, "-item-active"), isActive), className),
18
19
  "data-index": index,
19
- style: style
20
+ style: style,
21
+ role: "tabpanel",
22
+ "aria-roledescription": "slide",
23
+ "aria-label": "Slide ".concat((index !== null && index !== void 0 ? index : 0) + 1),
24
+ "aria-hidden": !isActive
20
25
  }, children);
21
26
  };
22
27
  export default CarouselItem;