@sdata/web-vue 3.13.0 → 3.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/sd.css +141 -111
  2. package/dist/sd.min.css +2 -2
  3. package/es/_components/input-label/input-label.d.ts +2 -0
  4. package/es/_components/input-label/input-label.js +4 -2
  5. package/es/_components/input-label/style/index.css +2 -2
  6. package/es/_components/picker/style/index.scss +8 -2
  7. package/es/_components/resize-observer.js +1 -1
  8. package/es/_components/resize-trigger.vue_vue_type_script_setup_true_lang.js +9 -2
  9. package/es/_components/select-view/select-view.d.ts +2 -0
  10. package/es/_components/select-view/select-view.js +5 -1
  11. package/es/_components/select-view/style/index.css +5 -5
  12. package/es/_hooks/use-focus-trap.d.ts +10 -0
  13. package/es/_hooks/use-focus-trap.js +115 -0
  14. package/es/_utils/dom.js +1 -10
  15. package/es/_utils/keyboard.d.ts +4 -0
  16. package/es/_utils/keyboard.js +21 -2
  17. package/es/alert/alert.vue.d.ts +2 -2
  18. package/es/alert/alert.vue_vue_type_script_setup_true_lang.js +12 -3
  19. package/es/alert/index.d.ts +5 -5
  20. package/es/alert/style/index.css +1 -1
  21. package/es/alert/style/index.scss +1 -1
  22. package/es/anchor/anchor-link.vue_vue_type_script_setup_true_lang.js +3 -1
  23. package/es/anchor/anchor.vue_vue_type_script_setup_true_lang.js +2 -0
  24. package/es/anchor/style/index.css +1 -1
  25. package/es/anchor/style/index.scss +3 -1
  26. package/es/auto-complete/auto-complete.js +8 -0
  27. package/es/avatar/avatar.vue_vue_type_script_setup_true_lang.js +8 -2
  28. package/es/avatar/style/index.css +2 -2
  29. package/es/avatar/style/index.scss +2 -2
  30. package/es/back-top/back-top.vue_vue_type_script_setup_true_lang.js +5 -1
  31. package/es/back-top/style/index.css +1 -1
  32. package/es/back-top/style/index.scss +2 -1
  33. package/es/badge/badge.js +4 -1
  34. package/es/badge/style/index.css +3 -3
  35. package/es/badge/style/index.scss +3 -3
  36. package/es/breadcrumb/breadcrumb.js +1 -0
  37. package/es/button/button.vue_vue_type_script_setup_true_lang.js +10 -5
  38. package/es/button/style/index.css +15 -6
  39. package/es/button/style/index.scss +25 -7
  40. package/es/calendar/style/event.scss +2 -2
  41. package/es/calendar/style/index.css +2 -2
  42. package/es/card/style/index.css +3 -3
  43. package/es/card/style/index.scss +3 -3
  44. package/es/carousel/carousel-arrow.vue.d.ts +4 -4
  45. package/es/carousel/carousel-arrow.vue_vue_type_script_setup_true_lang.js +20 -4
  46. package/es/carousel/carousel-indicator.vue_vue_type_script_setup_true_lang.js +23 -4
  47. package/es/carousel/carousel-item.vue_vue_type_script_setup_true_lang.js +8 -1
  48. package/es/carousel/carousel.js +18 -1
  49. package/es/carousel/style/index.css +1 -1
  50. package/es/carousel/style/index.scss +1 -1
  51. package/es/cascader/cascader.vue_vue_type_script_setup_true_lang.js +11 -2
  52. package/es/cascader/style/index.css +2 -2
  53. package/es/cascader/style/index.scss +3 -1
  54. package/es/checkbox/checkbox-group.js +4 -1
  55. package/es/checkbox/checkbox.d.ts +9 -0
  56. package/es/checkbox/checkbox.js +14 -0
  57. package/es/checkbox/index.d.ts +15 -0
  58. package/es/checkbox/style/index.css +1 -1
  59. package/es/checkbox/style/index.scss +1 -1
  60. package/es/collapse/collapse-item.js +21 -3
  61. package/es/collapse/context.d.ts +1 -1
  62. package/es/color-picker/color-picker.js +6 -0
  63. package/es/copy/copy.vue_vue_type_script_setup_true_lang.js +10 -2
  64. package/es/date-picker/panels/body.vue_vue_type_script_setup_true_lang.js +14 -1
  65. package/es/date-picker/picker.vue_vue_type_script_setup_true_lang.js +1 -0
  66. package/es/date-picker/style/index.css +5 -5
  67. package/es/date-picker/style/index.scss +4 -3
  68. package/es/drawer/drawer.vue.d.ts +1 -1
  69. package/es/drawer/drawer.vue_vue_type_script_setup_true_lang.js +28 -7
  70. package/es/drawer/index.d.ts +3 -3
  71. package/es/dropdown/dropdown-option.vue_vue_type_script_setup_true_lang.js +5 -1
  72. package/es/dropdown/dropdown-panel.vue.d.ts +9 -0
  73. package/es/dropdown/dropdown-panel.vue_vue_type_script_setup_true_lang.js +75 -2
  74. package/es/dropdown/dropdown-submenu.vue_vue_type_script_setup_true_lang.js +5 -2
  75. package/es/dropdown/dropdown.vue_vue_type_script_setup_true_lang.js +4 -2
  76. package/es/dropdown/style/index.css +1 -1
  77. package/es/dropdown/style/index.scss +3 -1
  78. package/es/file-previewer/file-previewer.vue.d.ts +1 -1
  79. package/es/file-previewer/file-previewer.vue_vue_type_script_setup_true_lang.js +7 -3
  80. package/es/file-previewer/index.d.ts +3 -3
  81. package/es/form/context.d.ts +1 -0
  82. package/es/form/form-item.vue_vue_type_script_setup_true_lang.js +6 -2
  83. package/es/form/style/index.css +2 -2
  84. package/es/form/style/index.scss +2 -2
  85. package/es/image/preview.vue.d.ts +1 -1
  86. package/es/image/preview.vue_vue_type_script_setup_true_lang.js +1 -1
  87. package/es/index.css +141 -111
  88. package/es/input/input.js +16 -2
  89. package/es/input/style/index.css +2 -2
  90. package/es/input/style/input.scss +4 -4
  91. package/es/input-number/input-number.js +5 -1
  92. package/es/input-number/style/index.css +3 -3
  93. package/es/input-number/style/index.scss +5 -1
  94. package/es/input-tag/index.d.ts +3 -0
  95. package/es/input-tag/input-tag.d.ts +2 -0
  96. package/es/input-tag/input-tag.js +34 -30
  97. package/es/input-tag/style/index.css +8 -8
  98. package/es/input-tag/style/index.scss +11 -5
  99. package/es/layout/sider.vue_vue_type_script_setup_true_lang.js +31 -6
  100. package/es/layout/style/index.css +2 -2
  101. package/es/layout/style/index.scss +4 -2
  102. package/es/link/style/index.css +1 -1
  103. package/es/link/style/index.scss +3 -1
  104. package/es/mention/mention.js +8 -0
  105. package/es/menu/base-menu.vue_vue_type_script_setup_true_lang.js +29 -3
  106. package/es/menu/item.js +14 -1
  107. package/es/menu/style/index.css +6 -6
  108. package/es/menu/style/index.scss +5 -3
  109. package/es/message/style/index.css +3 -3
  110. package/es/message/style/index.scss +5 -3
  111. package/es/modal/index.d.ts +3 -3
  112. package/es/modal/modal.vue.d.ts +1 -1
  113. package/es/modal/modal.vue_vue_type_script_setup_true_lang.js +28 -13
  114. package/es/modal/style/index.css +2 -2
  115. package/es/modal/style/index.scss +3 -2
  116. package/es/notification/style/index.css +3 -3
  117. package/es/notification/style/index.scss +11 -3
  118. package/es/page-header/page-header.vue.d.ts +6 -6
  119. package/es/page-header/page-header.vue_vue_type_script_setup_true_lang.js +12 -1
  120. package/es/pagination/page-item-ellipsis.vue_vue_type_script_setup_true_lang.js +12 -2
  121. package/es/pagination/page-item-step.vue.d.ts +2 -2
  122. package/es/pagination/page-item-step.vue_vue_type_script_setup_true_lang.js +19 -2
  123. package/es/pagination/page-item.vue.d.ts +2 -2
  124. package/es/pagination/page-item.vue_vue_type_script_setup_true_lang.js +21 -3
  125. package/es/pagination/pagination.js +5 -1
  126. package/es/pagination/style/index.css +6 -1
  127. package/es/pagination/style/index.scss +9 -3
  128. package/es/popconfirm/popconfirm.vue_vue_type_script_setup_true_lang.js +2 -0
  129. package/es/popover/popover.vue_vue_type_script_setup_true_lang.js +2 -0
  130. package/es/progress/style/index.css +2 -2
  131. package/es/progress/style/index.scss +5 -3
  132. package/es/qr-code/qr-code-status.vue_vue_type_script_setup_true_lang.js +5 -1
  133. package/es/qr-code/qr-code.vue_vue_type_script_setup_true_lang.js +11 -6
  134. package/es/radio/context.d.ts +1 -0
  135. package/es/radio/radio-group.js +6 -2
  136. package/es/radio/radio.js +1 -0
  137. package/es/radio/style/index.css +2 -2
  138. package/es/radio/style/index.scss +4 -2
  139. package/es/rate/rate.js +25 -1
  140. package/es/resize-box/resize-box.vue.d.ts +4 -4
  141. package/es/resize-box/resize-box.vue_vue_type_script_setup_true_lang.js +30 -1
  142. package/es/result/result.vue_vue_type_script_setup_true_lang.js +7 -4
  143. package/es/select/index.d.ts +124 -0
  144. package/es/select/select-dropdown.vue_vue_type_script_setup_true_lang.js +4 -1
  145. package/es/select/select.d.ts +62 -0
  146. package/es/select/select.js +18 -2
  147. package/es/select/style/index.css +1 -1
  148. package/es/select/style/index.scss +3 -1
  149. package/es/selectable-card/style/index.css +2 -2
  150. package/es/selectable-card/style/index.scss +5 -5
  151. package/es/skeleton/skeleton.vue_vue_type_script_setup_true_lang.js +5 -1
  152. package/es/slider/slider-button.vue.d.ts +2 -0
  153. package/es/slider/slider-button.vue_vue_type_script_setup_true_lang.js +7 -2
  154. package/es/slider/slider.vue_vue_type_script_setup_true_lang.js +23 -2
  155. package/es/slider/style/index.css +1 -1
  156. package/es/slider/style/index.scss +3 -1
  157. package/es/spin/spin.js +7 -2
  158. package/es/spin/style/index.css +1 -1
  159. package/es/spin/style/index.scss +1 -1
  160. package/es/split/split.vue.d.ts +4 -4
  161. package/es/split/split.vue_vue_type_script_setup_true_lang.js +27 -3
  162. package/es/steps/context.d.ts +1 -0
  163. package/es/steps/step.vue_vue_type_script_setup_true_lang.js +15 -2
  164. package/es/steps/steps.vue_vue_type_script_setup_true_lang.js +6 -1
  165. package/es/steps/style/index.css +1 -1
  166. package/es/steps/style/index.scss +1 -1
  167. package/es/style/animation/index.scss +1 -0
  168. package/es/style/animation/reduced-motion.scss +22 -0
  169. package/es/style/animation/zoom.scss +7 -6
  170. package/es/style/icon.scss +9 -1
  171. package/es/switch/style/index.css +1 -1
  172. package/es/switch/style/index.scss +4 -1
  173. package/es/switch/switch.vue_vue_type_script_setup_true_lang.js +6 -1
  174. package/es/table/style/index.css +8 -8
  175. package/es/table/style/index.scss +11 -8
  176. package/es/table/table-operation-td.d.ts +15 -0
  177. package/es/table/table-tbody.js +4 -1
  178. package/es/table/table-td.js +2 -1
  179. package/es/table/table-th.js +4 -2
  180. package/es/table/table-thead.js +4 -1
  181. package/es/table/table-tr.js +4 -1
  182. package/es/table/table.js +6 -2
  183. package/es/tabs/context.d.ts +1 -0
  184. package/es/tabs/style/index.css +5 -5
  185. package/es/tabs/style/index.scss +7 -7
  186. package/es/tabs/tab-pane.vue_vue_type_script_setup_true_lang.js +21 -2
  187. package/es/tabs/tabs-nav.js +34 -1
  188. package/es/tabs/tabs-tab.vue_vue_type_script_setup_true_lang.js +27 -4
  189. package/es/tabs/tabs.js +4 -2
  190. package/es/tag/index.d.ts +5 -5
  191. package/es/tag/style/index.css +1 -1
  192. package/es/tag/style/index.scss +3 -1
  193. package/es/tag/tag.vue.d.ts +2 -2
  194. package/es/tag/tag.vue_vue_type_script_setup_true_lang.js +19 -2
  195. package/es/textarea/style/index.css +2 -2
  196. package/es/textarea/textarea.vue_vue_type_script_setup_true_lang.js +15 -3
  197. package/es/time-picker/time-column.vue_vue_type_script_setup_true_lang.js +11 -3
  198. package/es/time-picker/time-picker.vue_vue_type_script_setup_true_lang.js +4 -1
  199. package/es/tooltip/tooltip.vue_vue_type_script_setup_true_lang.js +1 -0
  200. package/es/transfer/style/index.css +1 -1
  201. package/es/transfer/style/index.scss +1 -1
  202. package/es/transfer/transfer-list-item.js +16 -2
  203. package/es/tree/base-node.vue_vue_type_script_setup_true_lang.js +27 -7
  204. package/es/tree/context.d.ts +2 -0
  205. package/es/tree/style/index.css +1 -1
  206. package/es/tree/style/index.scss +1 -1
  207. package/es/tree/tree.vue_vue_type_script_setup_true_lang.js +81 -2
  208. package/es/tree-select/tree-select.vue_vue_type_script_setup_true_lang.js +10 -1
  209. package/es/trigger/index.d.ts +45 -0
  210. package/es/trigger/trigger.d.ts +27 -0
  211. package/es/trigger/trigger.js +47 -5
  212. package/es/typography/edit-content.vue_vue_type_script_setup_true_lang.js +11 -8
  213. package/es/typography/operations.vue_vue_type_script_setup_true_lang.js +38 -6
  214. package/es/typography/style/index.css +2 -2
  215. package/es/typography/style/index.scss +2 -2
  216. package/es/upload/style/index.css +9 -9
  217. package/es/upload/style/index.scss +15 -9
  218. package/es/upload/upload-list-item.js +18 -5
  219. package/es/upload/upload-picture-item.js +25 -3
  220. package/es/verification-code/verification-code.js +6 -1
  221. package/json/vetur-attributes.json +15 -0
  222. package/json/vetur-tags.json +6 -2
  223. package/json/web-types.json +33 -1
  224. package/package.json +1 -1
@@ -41,13 +41,17 @@ var slider_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
41
41
  emits: [
42
42
  "movestart",
43
43
  "moving",
44
- "moveend"
44
+ "moveend",
45
+ "keydown"
45
46
  ],
46
47
  setup(__props, { emit: __emit }) {
47
48
  const props = __props;
48
49
  const emit = __emit;
49
50
  const prefixCls = getPrefixCls("slider-btn");
50
51
  const isDragging = ref(false);
52
+ const onKeydown = (e) => {
53
+ if (!props.disabled) emit("keydown", e);
54
+ };
51
55
  const handleMouseDown = (e) => {
52
56
  if (props.disabled) return;
53
57
  e.preventDefault();
@@ -106,7 +110,8 @@ var slider_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ de
106
110
  onMousedown: handleMouseDown,
107
111
  onTouchstart: handleMouseDown,
108
112
  onContextmenu: _cache[0] || (_cache[0] = withModifiers(() => {}, ["prevent"])),
109
- onClick: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"]))
113
+ onClick: _cache[1] || (_cache[1] = withModifiers(() => {}, ["stop"])),
114
+ onKeydown
110
115
  }), null, 16, _hoisted_1)]),
111
116
  _: 1
112
117
  }, 8, [
@@ -2,6 +2,7 @@ import { useFormItem } from "../_hooks/use-form-item.js";
2
2
  import { _objectSpread2 } from "../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/objectSpread2.js";
3
3
  import { getPrefixCls } from "../_utils/global-config.js";
4
4
  import { isArray, isUndefined } from "../_utils/is.js";
5
+ import { KEYBOARD_KEY } from "../_utils/keyboard.js";
5
6
  import slider_button_default from "./slider-button.js";
6
7
  import { getOffsetPercent, getPositionStyle } from "./utils.js";
7
8
  import slider_dots_default from "./slider-dots.js";
@@ -156,6 +157,24 @@ var slider_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
156
157
  endValue.value = value;
157
158
  handleChange();
158
159
  };
160
+ const handleButtonKeydown = (which, e) => {
161
+ if (mergedDisabled.value) return;
162
+ const minV = props.min;
163
+ const maxV = props.max;
164
+ const current = which === "start" ? startValue.value : endValue.value;
165
+ let next;
166
+ if (e.key === KEYBOARD_KEY.ARROW_RIGHT || e.key === KEYBOARD_KEY.ARROW_UP) next = current + props.step;
167
+ else if (e.key === KEYBOARD_KEY.ARROW_LEFT || e.key === KEYBOARD_KEY.ARROW_DOWN) next = current - props.step;
168
+ else if (e.key === KEYBOARD_KEY.HOME) next = minV;
169
+ else if (e.key === KEYBOARD_KEY.END) next = maxV;
170
+ else return;
171
+ e.preventDefault();
172
+ if (props.range) if (which === "start") next = Math.max(minV, Math.min(next, endValue.value - props.step));
173
+ else next = Math.max(startValue.value + props.step, Math.min(next, maxV));
174
+ else next = Math.max(minV, Math.min(next, maxV));
175
+ if (which === "start") handleStartChange(next);
176
+ else handleEndChange(next);
177
+ };
159
178
  const computedValue = computed(() => {
160
179
  var _props$min2;
161
180
  if (props.range) {
@@ -293,7 +312,8 @@ var slider_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
293
312
  "show-tooltip": __props.showTooltip,
294
313
  onMovestart: handleMoveStart,
295
314
  onMoving: handleStartMoving,
296
- onMoveend: handleMoveEnd
315
+ onMoveend: handleMoveEnd,
316
+ onKeydown: _cache[0] || (_cache[0] = (e) => handleButtonKeydown("start", e))
297
317
  }, null, 8, [
298
318
  "style",
299
319
  "value",
@@ -315,7 +335,8 @@ var slider_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
315
335
  "show-tooltip": __props.showTooltip,
316
336
  onMovestart: handleMoveStart,
317
337
  onMoving: handleEndMoving,
318
- onMoveend: handleMoveEnd
338
+ onMoveend: handleMoveEnd,
339
+ onKeydown: _cache[1] || (_cache[1] = (e) => handleButtonKeydown("end", e))
319
340
  }, null, 8, [
320
341
  "style",
321
342
  "value",
@@ -130,7 +130,7 @@
130
130
  background: var(--sd-color-bg-2);
131
131
  border: 2px solid rgb(var(--sd-primary-6));
132
132
  border-radius: 50%;
133
- transition: all 0.3s cubic-bezier(0.3, 1.3, 0.3, 1);
133
+ transition: transform 0.3s cubic-bezier(0.3, 1.3, 0.3, 1), box-shadow 0.3s cubic-bezier(0.3, 1.3, 0.3, 1);
134
134
  content: "";
135
135
  }
136
136
  .sd-slider-btn.sd-slider-btn-active::after, .sd-slider-btn:hover::after {
@@ -148,7 +148,9 @@ $slider-prefix: string.unquote('#{theme.$prefix}-slider');
148
148
  background: $slider-color-button-bg;
149
149
  border: $slider-border-size-button solid $slider-color-button-border;
150
150
  border-radius: 50%;
151
- transition: all theme.$transition-duration-3 theme.$transition-timing-function-overshoot;
151
+ transition:
152
+ transform theme.$transition-duration-3 theme.$transition-timing-function-overshoot,
153
+ box-shadow theme.$transition-duration-3 theme.$transition-timing-function-overshoot;
152
154
  content: '';
153
155
  }
154
156
 
package/es/spin/spin.js CHANGED
@@ -78,10 +78,15 @@ var spin_default = /* @__PURE__ */ defineComponent({
78
78
  const hasTip = Boolean((_slots$tip = slots.tip) !== null && _slots$tip !== void 0 ? _slots$tip : props.tip);
79
79
  return createVNode(Fragment, null, [!props.hideIcon && createVNode("div", {
80
80
  "class": `${prefixCls}-icon`,
81
- "style": style
81
+ "style": style,
82
+ "aria-hidden": "true"
82
83
  }, [renderIcon()]), hasTip && createVNode("div", { "class": `${prefixCls}-tip` }, [(_slots$tip2 = (_slots$tip3 = slots.tip) === null || _slots$tip3 === void 0 ? void 0 : _slots$tip3.call(slots)) !== null && _slots$tip2 !== void 0 ? _slots$tip2 : props.tip])]);
83
84
  };
84
- return () => createVNode("div", { "class": cls.value }, [slots.default ? createVNode(Fragment, null, [slots.default(), props.loading && createVNode("div", { "class": `${prefixCls}-mask` }, [createVNode("div", { "class": `${prefixCls}-mask-icon` }, [renderSpinIcon()])])]) : renderSpinIcon()]);
85
+ return () => createVNode("div", {
86
+ "role": "status",
87
+ "aria-live": "polite",
88
+ "class": cls.value
89
+ }, [slots.default ? createVNode(Fragment, null, [slots.default(), props.loading && createVNode("div", { "class": `${prefixCls}-mask` }, [createVNode("div", { "class": `${prefixCls}-mask-icon` }, [renderSpinIcon()])])]) : renderSpinIcon()]);
85
90
  }
86
91
  });
87
92
  //#endregion
@@ -180,7 +180,7 @@
180
180
  z-index: 11;
181
181
  text-align: center;
182
182
  background-color: var(--sd-color-spin-layer-bg);
183
- transition: opacity 0.1s cubic-bezier(0, 0, 1, 1);
183
+ transition: opacity 0.1s cubic-bezier(0.34, 0.69, 0.1, 1);
184
184
  user-select: none;
185
185
  }
186
186
  .sd-spin-loading {
@@ -29,7 +29,7 @@ $spin-prefix-cls: string.unquote('#{theme.$prefix}-spin');
29
29
  z-index: 11;
30
30
  text-align: center;
31
31
  background-color: var(string.unquote('#{global.$sd-cssvars-prefix}-color-spin-layer-bg'));
32
- transition: opacity theme.$transition-duration-1 theme.$transition-timing-function-linear;
32
+ transition: opacity theme.$transition-duration-1 theme.$transition-timing-function-standard;
33
33
  user-select: none;
34
34
  }
35
35
 
@@ -1,13 +1,13 @@
1
1
  import { PropType } from 'vue';
2
- declare var __VLS_9: {}, __VLS_21: {}, __VLS_24: {}, __VLS_26: {};
2
+ declare var __VLS_9: {}, __VLS_22: {}, __VLS_25: {}, __VLS_27: {};
3
3
  type __VLS_Slots = {} & {
4
4
  first?: (props: typeof __VLS_9) => any;
5
5
  } & {
6
- 'resize-trigger'?: (props: typeof __VLS_21) => any;
6
+ 'resize-trigger'?: (props: typeof __VLS_22) => any;
7
7
  } & {
8
- 'resize-trigger-icon'?: (props: typeof __VLS_24) => any;
8
+ 'resize-trigger-icon'?: (props: typeof __VLS_25) => any;
9
9
  } & {
10
- second?: (props: typeof __VLS_26) => any;
10
+ second?: (props: typeof __VLS_27) => any;
11
11
  };
12
12
  declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
13
13
  component: {
@@ -2,6 +2,7 @@ import { _objectSpread2 } from "../_virtual/_@oxc-project_runtime@0.133.0/helper
2
2
  import { getPrefixCls } from "../_utils/global-config.js";
3
3
  import { isNumber, isString } from "../_utils/is.js";
4
4
  import { off, on } from "../_utils/dom.js";
5
+ import { KEYBOARD_KEY } from "../_utils/keyboard.js";
5
6
  import { _asyncToGenerator } from "../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/asyncToGenerator.js";
6
7
  import useMergeState from "../_hooks/use-merge-state.js";
7
8
  import resize_trigger_default from "../_components/resize-trigger.js";
@@ -222,9 +223,31 @@ var split_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
222
223
  const { width, height } = entry.contentRect;
223
224
  triggerSize.value = isHorizontal.value ? width : height;
224
225
  }
226
+ function onTriggerKeydown(_x2) {
227
+ return _onTriggerKeydown.apply(this, arguments);
228
+ }
229
+ function _onTriggerKeydown() {
230
+ _onTriggerKeydown = _asyncToGenerator(function* (e) {
231
+ var _await$getContainerSi2;
232
+ if (props.disabled) return;
233
+ const horiz = isHorizontal.value;
234
+ const inc = horiz ? e.key === KEYBOARD_KEY.ARROW_RIGHT : e.key === KEYBOARD_KEY.ARROW_DOWN;
235
+ const dec = horiz ? e.key === KEYBOARD_KEY.ARROW_LEFT : e.key === KEYBOARD_KEY.ARROW_UP;
236
+ if (!inc && !dec) return;
237
+ e.preventDefault();
238
+ const containerSize = (_await$getContainerSi2 = yield getContainerSize()) !== null && _await$getContainerSi2 !== void 0 ? _await$getContainerSi2 : 0;
239
+ if (!containerSize) return;
240
+ const step = e.shiftKey ? 20 : 10;
241
+ updateSize(getLegalPxSize(`${getPxSize({
242
+ size: mergedSize.value,
243
+ containerSize
244
+ }) + (inc ? step : -step)}px`, containerSize), containerSize);
245
+ });
246
+ return _onTriggerKeydown.apply(this, arguments);
247
+ }
225
248
  onMounted(_asyncToGenerator(function* () {
226
- var _await$getContainerSi2;
227
- const containerSize = (_await$getContainerSi2 = yield getContainerSize()) !== null && _await$getContainerSi2 !== void 0 ? _await$getContainerSi2 : 0;
249
+ var _await$getContainerSi3;
250
+ const containerSize = (_await$getContainerSi3 = yield getContainerSize()) !== null && _await$getContainerSi3 !== void 0 ? _await$getContainerSi3 : 0;
228
251
  updateSize(getLegalPxSize(mergedSize.value, containerSize), containerSize);
229
252
  }));
230
253
  return (_ctx, _cache) => {
@@ -243,7 +266,8 @@ var split_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
243
266
  "prefix-cls": `${unref(prefixCls)}-trigger`,
244
267
  direction: isHorizontal.value ? "vertical" : "horizontal",
245
268
  onMousedown: onMoveStart,
246
- onResize: onTriggerResize
269
+ onResize: onTriggerResize,
270
+ onKeydown: onTriggerKeydown
247
271
  }, {
248
272
  default: withCtx(() => [renderSlot(_ctx.$slots, "resize-trigger")]),
249
273
  icon: withCtx(() => [renderSlot(_ctx.$slots, "resize-trigger-icon")]),
@@ -8,6 +8,7 @@ export interface StepsContext {
8
8
  lineLess: boolean;
9
9
  type: StepsType;
10
10
  errorSteps: number[];
11
+ changeable: boolean;
11
12
  addItem: (step: number, data: StepData) => void;
12
13
  removeItem: (step: number) => void;
13
14
  getStatus: (step: number) => StepStatus;
@@ -1,11 +1,13 @@
1
1
  import { _objectSpread2 } from "../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/objectSpread2.js";
2
2
  import { getPrefixCls } from "../_utils/global-config.js";
3
+ import { isActivationKey } from "../_utils/keyboard.js";
3
4
  import IconClose from "../icon/icon-close/index.js";
4
5
  import { useIndex } from "../_hooks/use-index.js";
5
6
  import IconCheck from "../icon/icon-check/index.js";
6
7
  import { stepsInjectionKey } from "./context.js";
7
8
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, getCurrentInstance, inject, normalizeClass, onBeforeUnmount, openBlock, reactive, ref, renderSlot, toDisplayString, unref } from "vue";
8
9
  //#region components/steps/step.vue?vue&type=script&setup=true&lang.ts
10
+ var _hoisted_1 = ["aria-current", "tabindex"];
9
11
  var step_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent(_objectSpread2(_objectSpread2({}, { name: "Step" }), {}, {
10
12
  __name: "step",
11
13
  props: {
@@ -89,6 +91,12 @@ var step_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
89
91
  const handleClick = (ev) => {
90
92
  if (!props.disabled) stepsCtx === null || stepsCtx === void 0 || stepsCtx.onClick(stepNumber.value, ev);
91
93
  };
94
+ const onKeydown = (ev) => {
95
+ if ((stepsCtx === null || stepsCtx === void 0 ? void 0 : stepsCtx.changeable) && !props.disabled && isActivationKey(ev)) {
96
+ ev.preventDefault();
97
+ stepsCtx === null || stepsCtx === void 0 || stepsCtx.onClick(stepNumber.value, ev);
98
+ }
99
+ };
92
100
  const cls = computed(() => [
93
101
  prefixCls,
94
102
  `${prefixCls}-${computedStatus.value}`,
@@ -99,11 +107,16 @@ var step_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
99
107
  }
100
108
  ]);
101
109
  return (_ctx, _cache) => {
110
+ var _unref2, _unref3;
102
111
  return openBlock(), createElementBlock("div", {
103
112
  ref_key: "itemRef",
104
113
  ref: itemRef,
105
114
  class: normalizeClass(cls.value),
106
- onClick: handleClick
115
+ role: "listitem",
116
+ "aria-current": stepNumber.value === ((_unref2 = unref(stepsCtx)) === null || _unref2 === void 0 ? void 0 : _unref2.current) ? "step" : void 0,
117
+ tabindex: ((_unref3 = unref(stepsCtx)) === null || _unref3 === void 0 ? void 0 : _unref3.changeable) && !props.disabled ? 0 : void 0,
118
+ onClick: handleClick,
119
+ onKeydown
107
120
  }, [
108
121
  showTail.value ? (openBlock(), createElementBlock("div", {
109
122
  key: 0,
@@ -126,7 +139,7 @@ var step_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCompo
126
139
  key: 0,
127
140
  class: normalizeClass(`${unref(prefixCls)}-description`)
128
141
  }, [renderSlot(_ctx.$slots, "description", {}, () => [createTextVNode(toDisplayString(__props.description), 1)])], 2)) : createCommentVNode("", true)], 2)
129
- ], 2);
142
+ ], 42, _hoisted_1);
130
143
  };
131
144
  }
132
145
  }));
@@ -140,6 +140,7 @@ var steps_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
140
140
  lineLess,
141
141
  current: computedCurrent,
142
142
  errorSteps,
143
+ changeable: computed(() => props.changeable),
143
144
  getStatus,
144
145
  addItem,
145
146
  removeItem,
@@ -147,7 +148,11 @@ var steps_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComp
147
148
  parentCls: prefixCls
148
149
  }));
149
150
  return (_ctx, _cache) => {
150
- return openBlock(), createElementBlock("div", { class: normalizeClass(cls.value) }, [renderSlot(_ctx.$slots, "default")], 2);
151
+ return openBlock(), createElementBlock("div", {
152
+ role: "list",
153
+ "aria-label": "Steps",
154
+ class: normalizeClass(cls.value)
155
+ }, [renderSlot(_ctx.$slots, "default")], 2);
151
156
  };
152
157
  }
153
158
  }));
@@ -570,7 +570,7 @@
570
570
  }
571
571
  .sd-steps-changeable .sd-steps-item-title,
572
572
  .sd-steps-changeable .sd-steps-item-description {
573
- transition: all 0.1s cubic-bezier(0, 0, 1, 1);
573
+ transition: color 0.1s cubic-bezier(0.34, 0.69, 0.1, 1);
574
574
  }
575
575
  .sd-steps-changeable .sd-steps-item:not(.sd-steps-item-active, .sd-steps-item-disabled) {
576
576
  cursor: pointer;
@@ -15,7 +15,7 @@ $steps-prefix-cls: string.unquote('#{theme.$prefix}-steps');
15
15
  &-changeable {
16
16
  .#{$steps-prefix-cls}-item-title,
17
17
  .#{$steps-prefix-cls}-item-description {
18
- transition: all theme.$transition-duration-1 theme.$transition-timing-function-linear;
18
+ transition: color theme.$transition-duration-1 theme.$transition-timing-function-standard;
19
19
  }
20
20
  }
21
21
 
@@ -1,3 +1,4 @@
1
1
  @use '@style/animation/fade.scss' as *;
2
2
  @use '@style/animation/zoom.scss' as *;
3
3
  @use '@style/animation/slide.scss' as *;
4
+ @use '@style/animation/reduced-motion.scss' as *;
@@ -0,0 +1,22 @@
1
+ @use '@style/theme/index.scss' as *;
2
+
3
+ // 全局减少动态偏好安全网:覆盖所有 Vue 过渡入场/退场类(共享类与各组件自定义类)。
4
+ // 去掉 transform 位移(避免前庭不适),保留 opacity/颜色过渡并缩短至 dur-1。
5
+ // 使用 !important 以确保覆盖各组件自身的过渡声明(a11y 必须优先)。
6
+ // 仅匹配 Vue 过渡类名后缀(*-enter-active / *-leave-active / *-enter-from / *-leave-to 及 appear 变体),
7
+ // 不影响状态类(如 *-active、*-checked、*-selected)。
8
+ @media (prefers-reduced-motion: reduce) {
9
+ // 抹平初始/终末的 transform,使元素不再位移(opacity/颜色照常过渡)
10
+ [class*='-enter-from'],
11
+ [class*='-appear-from'],
12
+ [class*='-leave-to'] {
13
+ transform: none !important;
14
+ }
15
+
16
+ // 缩短过渡时长至 ≈即时(仍可见出现/消失,但不再有缓慢运动)
17
+ [class*='-enter-active'],
18
+ [class*='-appear-active'],
19
+ [class*='-leave-active'] {
20
+ transition-duration: $transition-duration-1 !important;
21
+ }
22
+ }
@@ -1,9 +1,9 @@
1
1
  @use '@style/theme/index.scss' as *;
2
2
 
3
- // modal use
3
+ // modal use(fullscreen 模态框)。从 scale(0.94) 起步而非 scale(0.5)。
4
4
  .zoom-in-enter-from,
5
5
  .zoom-in-appear-from {
6
- transform: scale(0.5, 0.5);
6
+ transform: scale(0.94, 0.94);
7
7
  opacity: 0;
8
8
  }
9
9
 
@@ -26,7 +26,7 @@
26
26
  }
27
27
 
28
28
  .zoom-in-leave-to {
29
- transform: scale(0.5, 0.5);
29
+ transform: scale(0.94, 0.94);
30
30
  opacity: 0;
31
31
  }
32
32
 
@@ -36,10 +36,11 @@
36
36
  transform $transition-duration-3 $transition-timing-function-standard;
37
37
  }
38
38
 
39
- // used by tooltip。缩放出现,渐隐退出
39
+ // used by tooltip / popover / popconfirm。缩放出现,渐隐退出。
40
+ // 从 scale(0.96) 起步而非 scale(0.5):小浮层只需轻微弹出,过大的缩放显得“凭空炸出”。
40
41
  .zoom-in-fade-out-enter-from,
41
42
  .zoom-in-fade-out-appear-from {
42
- transform: scale(0.5, 0.5);
43
+ transform: scale(0.96, 0.96);
43
44
  opacity: 0;
44
45
  }
45
46
 
@@ -61,8 +62,8 @@
61
62
  opacity: 1;
62
63
  }
63
64
 
65
+ // 退出改为纯渐隐:退出时不再缩放,避免吸引注意力(与类名 fade-out 一致)
64
66
  .zoom-in-fade-out-leave-to {
65
- transform: scale(0.5, 0.5);
66
67
  opacity: 0;
67
68
  }
68
69
 
@@ -30,6 +30,14 @@
30
30
  }
31
31
  }
32
32
 
33
+ // 减少动态偏好:放慢加载图标旋转(保留加载态指示,避免快速循环带来的不适)
34
+ @media (prefers-reduced-motion: reduce) {
35
+ .#{$prefix}-icon-loading,
36
+ .#{$prefix}-icon-spin {
37
+ animation-duration: 3s;
38
+ }
39
+ }
40
+
33
41
  .#{$prefix}-icon-hover {
34
42
  position: relative;
35
43
  display: block;
@@ -45,7 +53,7 @@
45
53
  box-sizing: border-box;
46
54
  background-color: global.$color-transparent;
47
55
  border-radius: component.$icon-hover-border-radius;
48
- transition: background-color $transition-duration-1 $transition-timing-function-linear;
56
+ transition: background-color $transition-duration-1 $transition-timing-function-standard;
49
57
  content: '';
50
58
  }
51
59
 
@@ -68,7 +68,7 @@
68
68
  font-size: 12px;
69
69
  background-color: var(--sd-color-bg-white);
70
70
  border-radius: 50%;
71
- transition: all 0.2s cubic-bezier(0.34, 0.69, 0.1, 1);
71
+ transition: left 0.2s cubic-bezier(0.34, 0.69, 0.1, 1), color 0.2s cubic-bezier(0.34, 0.69, 0.1, 1);
72
72
  }
73
73
  .sd-switch-checked {
74
74
  background-color: rgb(var(--sd-primary-6));
@@ -65,7 +65,10 @@ $switch-size-small-line-gap: (($switch-size-small - $switch-line-size-dot-small)
65
65
  font-size: 12px;
66
66
  background-color: $switch-color-dot-bg;
67
67
  border-radius: 50%;
68
- transition: all theme.$transition-duration-2 theme.$transition-timing-function-standard;
68
+ // 滑块位移依赖 left(相对父级定位),暂保留 left 过渡;颜色同步过渡
69
+ transition:
70
+ left theme.$transition-duration-2 theme.$transition-timing-function-standard,
71
+ color theme.$transition-duration-2 theme.$transition-timing-function-standard;
69
72
  }
70
73
 
71
74
  &-checked {
@@ -7,7 +7,11 @@ import IconLoading from "../icon/icon-loading/index.js";
7
7
  import { useSize } from "../_hooks/use-size.js";
8
8
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, getCurrentInstance, normalizeClass, normalizeStyle, openBlock, ref, renderSlot, toDisplayString, toRefs, unref, watch } from "vue";
9
9
  //#region components/switch/switch.vue?vue&type=script&setup=true&lang.ts
10
- var _hoisted_1 = ["aria-checked", "disabled"];
10
+ var _hoisted_1 = [
11
+ "aria-checked",
12
+ "aria-busy",
13
+ "disabled"
14
+ ];
11
15
  var switch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent(_objectSpread2(_objectSpread2({}, { name: "Switch" }), {}, {
12
16
  __name: "switch",
13
17
  props: {
@@ -247,6 +251,7 @@ var switch_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
247
251
  type: "button",
248
252
  role: "switch",
249
253
  "aria-checked": computedCheck.value,
254
+ "aria-busy": computedLoading.value || void 0,
250
255
  class: normalizeClass(cls.value),
251
256
  style: normalizeStyle(buttonStyle.value),
252
257
  disabled: unref(mergedDisabled),
@@ -230,7 +230,7 @@
230
230
  width: 10px;
231
231
  box-shadow: none;
232
232
  transform: translateX(-100%);
233
- transition: box-shadow 0.1s cubic-bezier(0, 0, 1, 1);
233
+ transition: box-shadow 0.1s cubic-bezier(0.34, 0.69, 0.1, 1);
234
234
  content: "";
235
235
  pointer-events: none;
236
236
  }
@@ -248,7 +248,7 @@
248
248
  border: 1px solid var(--sd-color-white);
249
249
  border-radius: var(--sd-border-radius-medium);
250
250
  cursor: pointer;
251
- transition: all 0.1s cubic-bezier(0, 0, 1, 1);
251
+ transition: border-color 0.1s cubic-bezier(0.34, 0.69, 0.1, 1);
252
252
  }
253
253
  .sd-table-editable-row:hover .sd-table-cell-wrap-value {
254
254
  border: 1px solid var(--sd-color-neutral-3);
@@ -268,7 +268,7 @@
268
268
  border-radius: 2px;
269
269
  outline: none;
270
270
  cursor: pointer;
271
- transition: background-color 0.1s cubic-bezier(0, 0, 1, 1);
271
+ transition: background-color 0.1s cubic-bezier(0.34, 0.69, 0.1, 1);
272
272
  }
273
273
  .sd-table .sd-table-expand-btn:hover {
274
274
  color: var(--sd-color-text-1);
@@ -345,7 +345,7 @@
345
345
  max-width: 40px;
346
346
  }
347
347
  .sd-table-th {
348
- transition: background-color 0.1s cubic-bezier(0, 0, 1, 1);
348
+ transition: background-color 0.1s cubic-bezier(0.34, 0.69, 0.1, 1);
349
349
  }
350
350
  .sd-table-cell-with-sorter {
351
351
  display: flex;
@@ -392,7 +392,7 @@
392
392
  top: 50%;
393
393
  color: var(--sd-color-neutral-5);
394
394
  font-size: 12px;
395
- transition: all 0.1s cubic-bezier(0, 0, 1, 1);
395
+ transition: color 0.1s cubic-bezier(0.34, 0.69, 0.1, 1);
396
396
  }
397
397
  .sd-table-sorter-icon .sd-icon-caret-up {
398
398
  top: -2px;
@@ -418,7 +418,7 @@
418
418
  vertical-align: 0;
419
419
  background-color: transparent;
420
420
  cursor: pointer;
421
- transition: all 0.1s cubic-bezier(0, 0, 1, 1);
421
+ transition: background-color 0.1s cubic-bezier(0.34, 0.69, 0.1, 1);
422
422
  }
423
423
  .sd-table-filters:hover, .sd-table-filters-open {
424
424
  background-color: var(--sd-color-neutral-4);
@@ -426,7 +426,7 @@
426
426
  .sd-table-filters svg {
427
427
  color: var(--sd-color-text-2);
428
428
  font-size: 16px;
429
- transition: all 0.1s cubic-bezier(0, 0, 1, 1);
429
+ transition: color 0.1s cubic-bezier(0.34, 0.69, 0.1, 1);
430
430
  }
431
431
  .sd-table-filters-active svg {
432
432
  color: rgb(var(--sd-primary-6));
@@ -480,7 +480,7 @@
480
480
  width: 10px;
481
481
  height: 100%;
482
482
  box-shadow: none;
483
- transition: box-shadow 0.1s cubic-bezier(0, 0, 1, 1);
483
+ transition: box-shadow 0.1s cubic-bezier(0.34, 0.69, 0.1, 1);
484
484
  content: "";
485
485
  pointer-events: none;
486
486
  }
@@ -40,7 +40,8 @@ $table-cls-td: string.unquote('#{$table-prefix-cls}-td');
40
40
  border-radius: $table-border-radius-expand-button;
41
41
  outline: none;
42
42
  cursor: pointer;
43
- transition: background-color theme.$transition-duration-1 theme.$transition-timing-function-linear;
43
+ transition: background-color theme.$transition-duration-1
44
+ theme.$transition-timing-function-standard;
44
45
 
45
46
  &:hover {
46
47
  color: $table-color-expand-icon_hover;
@@ -318,7 +319,7 @@ $table-cls-td: string.unquote('#{$table-prefix-cls}-td');
318
319
  width: $table-size-shadow-wrapper-width;
319
320
  box-shadow: none;
320
321
  transform: translateX(-100%);
321
- transition: box-shadow theme.$transition-duration-1 theme.$transition-timing-function-linear;
322
+ transition: box-shadow theme.$transition-duration-1 theme.$transition-timing-function-standard;
322
323
  content: '';
323
324
  pointer-events: none;
324
325
  }
@@ -342,7 +343,8 @@ $table-cls-td: string.unquote('#{$table-prefix-cls}-td');
342
343
  border: $table-border-width solid $table-color-editable-body-cell-border;
343
344
  border-radius: $table-border-radius;
344
345
  cursor: pointer;
345
- transition: all theme.$transition-duration-1 theme.$transition-timing-function-linear;
346
+ transition: border-color theme.$transition-duration-1
347
+ theme.$transition-timing-function-standard;
346
348
  }
347
349
 
348
350
  &:hover {
@@ -457,7 +459,7 @@ $table-cls-td: string.unquote('#{$table-prefix-cls}-td');
457
459
 
458
460
  &-th {
459
461
  transition: background-color theme.$transition-duration-1
460
- theme.$transition-timing-function-linear;
462
+ theme.$transition-timing-function-standard;
461
463
  }
462
464
 
463
465
  &-cell-with-sorter {
@@ -516,7 +518,7 @@ $table-cls-td: string.unquote('#{$table-prefix-cls}-td');
516
518
  top: 50%;
517
519
  color: $table-color-header-sorter-icon;
518
520
  font-size: $table-font-size-header-sorter-icon;
519
- transition: all theme.$transition-duration-1 theme.$transition-timing-function-linear;
521
+ transition: color theme.$transition-duration-1 theme.$transition-timing-function-standard;
520
522
  }
521
523
 
522
524
  .#{theme.$prefix}-icon-caret-up {
@@ -549,7 +551,8 @@ $table-cls-td: string.unquote('#{$table-prefix-cls}-td');
549
551
  vertical-align: 0;
550
552
  background-color: transparent;
551
553
  cursor: pointer;
552
- transition: all theme.$transition-duration-1 theme.$transition-timing-function-linear;
554
+ transition: background-color theme.$transition-duration-1
555
+ theme.$transition-timing-function-standard;
553
556
 
554
557
  &:hover,
555
558
  &-open {
@@ -559,7 +562,7 @@ $table-cls-td: string.unquote('#{$table-prefix-cls}-td');
559
562
  svg {
560
563
  color: $table-color-header-filters-icon;
561
564
  font-size: $table-font-size-filters-icon;
562
- transition: all theme.$transition-duration-1 theme.$transition-timing-function-linear;
565
+ transition: color theme.$transition-duration-1 theme.$transition-timing-function-standard;
563
566
  }
564
567
 
565
568
  &-active {
@@ -633,7 +636,7 @@ $table-cls-td: string.unquote('#{$table-prefix-cls}-td');
633
636
  width: $table-size-shadow-wrapper-width;
634
637
  height: 100%;
635
638
  box-shadow: none;
636
- transition: box-shadow theme.$transition-duration-1 theme.$transition-timing-function-linear;
639
+ transition: box-shadow theme.$transition-duration-1 theme.$transition-timing-function-standard;
637
640
  content: '';
638
641
  pointer-events: none;
639
642
  }