@chenzy-design/svelte 0.1.0 → 0.2.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 (476) hide show
  1. package/dist/components.json +1 -1
  2. package/package.json +7 -8
  3. package/src/_floating/use-floating.ts +0 -208
  4. package/src/anchor/Anchor.a11y.test.ts +0 -49
  5. package/src/anchor/Anchor.kbd.test.ts +0 -70
  6. package/src/anchor/Anchor.svelte +0 -359
  7. package/src/anchor/AnchorKbdFixture.svelte +0 -24
  8. package/src/anchor/index.ts +0 -3
  9. package/src/anchor/meta.ts +0 -70
  10. package/src/anchor/types.ts +0 -8
  11. package/src/autocomplete/AutoComplete.a11y.test.ts +0 -49
  12. package/src/autocomplete/AutoComplete.kbd.test.ts +0 -69
  13. package/src/autocomplete/AutoComplete.svelte +0 -706
  14. package/src/autocomplete/AutoCompleteKbdFixture.svelte +0 -24
  15. package/src/autocomplete/index.ts +0 -2
  16. package/src/autocomplete/meta.ts +0 -41
  17. package/src/avatar/Avatar.a11y.test.ts +0 -37
  18. package/src/avatar/Avatar.svelte +0 -315
  19. package/src/avatar/AvatarGroup.svelte +0 -142
  20. package/src/avatar/context.ts +0 -21
  21. package/src/avatar/index.ts +0 -10
  22. package/src/avatar/meta.ts +0 -73
  23. package/src/back-top/BackTop.a11y.test.ts +0 -40
  24. package/src/back-top/BackTop.svelte +0 -314
  25. package/src/back-top/index.ts +0 -2
  26. package/src/back-top/meta.ts +0 -108
  27. package/src/badge/Badge.a11y.test.ts +0 -35
  28. package/src/badge/Badge.svelte +0 -328
  29. package/src/badge/BadgeA11yFixture.svelte +0 -18
  30. package/src/badge/index.ts +0 -2
  31. package/src/badge/meta.ts +0 -62
  32. package/src/banner/Banner.a11y.test.ts +0 -48
  33. package/src/banner/Banner.svelte +0 -368
  34. package/src/banner/index.ts +0 -3
  35. package/src/banner/meta.ts +0 -121
  36. package/src/breadcrumb/Breadcrumb.a11y.test.ts +0 -35
  37. package/src/breadcrumb/Breadcrumb.kbd.test.ts +0 -45
  38. package/src/breadcrumb/Breadcrumb.svelte +0 -414
  39. package/src/breadcrumb/BreadcrumbKbdFixture.svelte +0 -23
  40. package/src/breadcrumb/Item.svelte +0 -77
  41. package/src/breadcrumb/context.ts +0 -27
  42. package/src/breadcrumb/index.ts +0 -21
  43. package/src/breadcrumb/meta.ts +0 -128
  44. package/src/breadcrumb/types.ts +0 -4
  45. package/src/button/Button.a11y.test.ts +0 -54
  46. package/src/button/Button.svelte +0 -176
  47. package/src/button/index.ts +0 -2
  48. package/src/button/meta.ts +0 -28
  49. package/src/calendar/Calendar.a11y.test.ts +0 -51
  50. package/src/calendar/Calendar.kbd.test.ts +0 -59
  51. package/src/calendar/Calendar.svelte +0 -1344
  52. package/src/calendar/CalendarKbdFixture.svelte +0 -23
  53. package/src/calendar/index.ts +0 -3
  54. package/src/calendar/meta.ts +0 -117
  55. package/src/card/Card.a11y.test.ts +0 -38
  56. package/src/card/Card.svelte +0 -341
  57. package/src/card/CardMeta.svelte +0 -60
  58. package/src/card/index.ts +0 -8
  59. package/src/card/meta.ts +0 -83
  60. package/src/carousel/Carousel.a11y.test.ts +0 -53
  61. package/src/carousel/Carousel.kbd.test.ts +0 -67
  62. package/src/carousel/Carousel.svelte +0 -806
  63. package/src/carousel/CarouselA11yFixture.svelte +0 -25
  64. package/src/carousel/CarouselKbdFixture.svelte +0 -24
  65. package/src/carousel/index.ts +0 -2
  66. package/src/carousel/meta.ts +0 -74
  67. package/src/cascader/Cascader.a11y.test.ts +0 -59
  68. package/src/cascader/Cascader.kbd.test.ts +0 -56
  69. package/src/cascader/Cascader.svelte +0 -1570
  70. package/src/cascader/CascaderKbdFixture.svelte +0 -31
  71. package/src/cascader/index.ts +0 -3
  72. package/src/cascader/meta.ts +0 -57
  73. package/src/cascader/types.ts +0 -9
  74. package/src/checkbox/Checkbox.svelte +0 -281
  75. package/src/checkbox/CheckboxGroup.a11y.test.ts +0 -43
  76. package/src/checkbox/CheckboxGroup.kbd.test.ts +0 -40
  77. package/src/checkbox/CheckboxGroup.svelte +0 -122
  78. package/src/checkbox/CheckboxGroupKbdFixture.svelte +0 -20
  79. package/src/checkbox/context.ts +0 -31
  80. package/src/checkbox/index.ts +0 -4
  81. package/src/checkbox/meta.ts +0 -67
  82. package/src/collapse/Collapse.a11y.test.ts +0 -53
  83. package/src/collapse/Collapse.kbd.test.ts +0 -89
  84. package/src/collapse/Collapse.svelte +0 -406
  85. package/src/collapse/CollapseA11yFixture.svelte +0 -27
  86. package/src/collapse/CollapseKbdFixture.svelte +0 -25
  87. package/src/collapse/CollapsePanel.svelte +0 -102
  88. package/src/collapse/context.ts +0 -54
  89. package/src/collapse/index.ts +0 -17
  90. package/src/collapse/meta.ts +0 -79
  91. package/src/collapse/types.ts +0 -5
  92. package/src/color-picker/ColorPicker.a11y.test.ts +0 -60
  93. package/src/color-picker/ColorPicker.kbd.test.ts +0 -73
  94. package/src/color-picker/ColorPicker.svelte +0 -985
  95. package/src/color-picker/ColorPickerKbdFixture.svelte +0 -25
  96. package/src/color-picker/index.ts +0 -2
  97. package/src/color-picker/meta.ts +0 -47
  98. package/src/config-provider/ConfigProvider.svelte +0 -227
  99. package/src/config-provider/context.ts +0 -29
  100. package/src/config-provider/index.ts +0 -48
  101. package/src/config-provider/meta.ts +0 -128
  102. package/src/date-picker/DatePicker.a11y.test.ts +0 -45
  103. package/src/date-picker/DatePicker.kbd.test.ts +0 -71
  104. package/src/date-picker/DatePicker.svelte +0 -1798
  105. package/src/date-picker/DatePickerKbdFixture.svelte +0 -26
  106. package/src/date-picker/RangePicker.kbd.test.ts +0 -69
  107. package/src/date-picker/RangePicker.svelte +0 -775
  108. package/src/date-picker/RangePickerKbdFixture.svelte +0 -30
  109. package/src/date-picker/index.ts +0 -4
  110. package/src/date-picker/meta.ts +0 -67
  111. package/src/date-picker/range-meta.ts +0 -44
  112. package/src/descriptions/Descriptions.a11y.test.ts +0 -33
  113. package/src/descriptions/Descriptions.svelte +0 -287
  114. package/src/descriptions/DescriptionsItem.svelte +0 -43
  115. package/src/descriptions/context.ts +0 -21
  116. package/src/descriptions/index.ts +0 -16
  117. package/src/descriptions/meta.ts +0 -45
  118. package/src/descriptions/types.ts +0 -6
  119. package/src/divider/Divider.a11y.test.ts +0 -23
  120. package/src/divider/Divider.svelte +0 -154
  121. package/src/divider/index.ts +0 -2
  122. package/src/divider/meta.ts +0 -23
  123. package/src/drawer/Drawer.a11y.test.ts +0 -41
  124. package/src/drawer/Drawer.kbd.test.ts +0 -67
  125. package/src/drawer/Drawer.svelte +0 -554
  126. package/src/drawer/DrawerKbdFixture.svelte +0 -28
  127. package/src/drawer/index.ts +0 -2
  128. package/src/drawer/meta.ts +0 -127
  129. package/src/dropdown/Dropdown.a11y.test.ts +0 -46
  130. package/src/dropdown/Dropdown.kbd.test.ts +0 -56
  131. package/src/dropdown/Dropdown.svelte +0 -573
  132. package/src/dropdown/DropdownA11yFixture.svelte +0 -24
  133. package/src/dropdown/DropdownDivider.svelte +0 -17
  134. package/src/dropdown/DropdownItem.svelte +0 -127
  135. package/src/dropdown/DropdownItemNode.svelte +0 -355
  136. package/src/dropdown/DropdownKbdFixture.svelte +0 -26
  137. package/src/dropdown/DropdownMenu.svelte +0 -24
  138. package/src/dropdown/DropdownSubMenu.svelte +0 -212
  139. package/src/dropdown/DropdownTitle.svelte +0 -34
  140. package/src/dropdown/context.ts +0 -13
  141. package/src/dropdown/index.ts +0 -36
  142. package/src/dropdown/meta.ts +0 -97
  143. package/src/dropdown/types.test.ts +0 -50
  144. package/src/dropdown/types.ts +0 -67
  145. package/src/empty/Empty.a11y.test.ts +0 -24
  146. package/src/empty/Empty.svelte +0 -304
  147. package/src/empty/index.ts +0 -2
  148. package/src/empty/meta.ts +0 -41
  149. package/src/form/Field.svelte +0 -492
  150. package/src/form/FieldArray.svelte +0 -75
  151. package/src/form/Form.a11y.test.ts +0 -39
  152. package/src/form/Form.svelte +0 -243
  153. package/src/form/FormA11yFixture.svelte +0 -31
  154. package/src/form/FormCascader.svelte +0 -82
  155. package/src/form/FormCheckbox.svelte +0 -83
  156. package/src/form/FormDatePicker.svelte +0 -80
  157. package/src/form/FormErrorMessage.svelte +0 -44
  158. package/src/form/FormInput.svelte +0 -95
  159. package/src/form/FormLabel.svelte +0 -46
  160. package/src/form/FormRadio.svelte +0 -83
  161. package/src/form/FormRating.svelte +0 -85
  162. package/src/form/FormSection.svelte +0 -45
  163. package/src/form/FormSelect.svelte +0 -96
  164. package/src/form/FormSlider.svelte +0 -95
  165. package/src/form/FormSlot.svelte +0 -51
  166. package/src/form/FormSwitch.svelte +0 -82
  167. package/src/form/FormTagInput.svelte +0 -79
  168. package/src/form/FormTreeSelect.svelte +0 -85
  169. package/src/form/FormUpload.svelte +0 -92
  170. package/src/form/context.ts +0 -47
  171. package/src/form/index.ts +0 -22
  172. package/src/form/meta.ts +0 -85
  173. package/src/grid/Col.svelte +0 -142
  174. package/src/grid/Grid.a11y.test.ts +0 -14
  175. package/src/grid/GridA11yFixture.svelte +0 -12
  176. package/src/grid/Row.svelte +0 -116
  177. package/src/grid/index.ts +0 -3
  178. package/src/grid/meta.ts +0 -72
  179. package/src/grid/use-breakpoint.svelte.ts +0 -48
  180. package/src/highlight/Highlight.a11y.test.ts +0 -25
  181. package/src/highlight/Highlight.svelte +0 -99
  182. package/src/highlight/index.ts +0 -2
  183. package/src/highlight/meta.ts +0 -80
  184. package/src/icon/Icon.svelte +0 -156
  185. package/src/icon/index.ts +0 -2
  186. package/src/icon/meta.ts +0 -41
  187. package/src/image/Image.a11y.test.ts +0 -30
  188. package/src/image/Image.svelte +0 -387
  189. package/src/image/ImagePreview.kbd.test.ts +0 -52
  190. package/src/image/ImagePreview.svelte +0 -309
  191. package/src/image/ImagePreviewGroup.svelte +0 -93
  192. package/src/image/ImagePreviewKbdFixture.svelte +0 -32
  193. package/src/image/context.ts +0 -26
  194. package/src/image/index.ts +0 -15
  195. package/src/image/meta.ts +0 -131
  196. package/src/index.ts +0 -208
  197. package/src/input/Input.a11y.test.ts +0 -58
  198. package/src/input/Input.svelte +0 -505
  199. package/src/input/index.ts +0 -2
  200. package/src/input/meta.ts +0 -40
  201. package/src/input-number/InputNumber.a11y.test.ts +0 -43
  202. package/src/input-number/InputNumber.kbd.test.ts +0 -41
  203. package/src/input-number/InputNumber.svelte +0 -674
  204. package/src/input-number/InputNumberKbdFixture.svelte +0 -15
  205. package/src/input-number/index.ts +0 -2
  206. package/src/input-number/meta.ts +0 -65
  207. package/src/layout/Content.svelte +0 -37
  208. package/src/layout/Footer.svelte +0 -49
  209. package/src/layout/Header.svelte +0 -46
  210. package/src/layout/Layout.a11y.test.ts +0 -34
  211. package/src/layout/Layout.svelte +0 -60
  212. package/src/layout/LayoutA11yFixture.svelte +0 -21
  213. package/src/layout/Sider.svelte +0 -207
  214. package/src/layout/index.ts +0 -26
  215. package/src/layout/meta.ts +0 -116
  216. package/src/list/List.a11y.test.ts +0 -69
  217. package/src/list/List.bench.ts +0 -26
  218. package/src/list/List.kbd.test.ts +0 -71
  219. package/src/list/List.svelte +0 -920
  220. package/src/list/ListA11yFixture.svelte +0 -38
  221. package/src/list/ListBenchFixture.svelte +0 -22
  222. package/src/list/ListItem.svelte +0 -175
  223. package/src/list/ListKbdFixture.svelte +0 -31
  224. package/src/list/ListMeta.svelte +0 -73
  225. package/src/list/context.ts +0 -39
  226. package/src/list/index.ts +0 -21
  227. package/src/list/meta.ts +0 -99
  228. package/src/locale-provider/LocaleProvider.svelte +0 -110
  229. package/src/locale-provider/context.ts +0 -22
  230. package/src/locale-provider/index.ts +0 -21
  231. package/src/locale-provider/meta.ts +0 -93
  232. package/src/locale-provider/use-locale.ts +0 -25
  233. package/src/lottie-icon/LottieIcon.svelte +0 -330
  234. package/src/lottie-icon/index.ts +0 -9
  235. package/src/lottie-icon/meta.ts +0 -162
  236. package/src/menu/Menu.a11y.test.ts +0 -54
  237. package/src/menu/Menu.kbd.test.ts +0 -69
  238. package/src/menu/Menu.svelte +0 -762
  239. package/src/menu/MenuKbdFixture.svelte +0 -22
  240. package/src/menu/MenuPopupNode.svelte +0 -525
  241. package/src/menu/index.ts +0 -4
  242. package/src/menu/meta.ts +0 -137
  243. package/src/menu/types.ts +0 -120
  244. package/src/meta.test.ts +0 -173
  245. package/src/modal/ConfirmModal.svelte +0 -173
  246. package/src/modal/Modal.a11y.test.ts +0 -46
  247. package/src/modal/Modal.kbd.test.ts +0 -65
  248. package/src/modal/Modal.svelte +0 -511
  249. package/src/modal/ModalKbdFixture.svelte +0 -24
  250. package/src/modal/command.svelte.ts +0 -103
  251. package/src/modal/index.ts +0 -30
  252. package/src/modal/meta.ts +0 -165
  253. package/src/modal/z-stack.ts +0 -26
  254. package/src/notification/NotificationContainer.svelte +0 -192
  255. package/src/notification/NotificationItem.a11y.test.ts +0 -73
  256. package/src/notification/NotificationItem.svelte +0 -368
  257. package/src/notification/index.ts +0 -9
  258. package/src/notification/meta.ts +0 -120
  259. package/src/notification/store.ts +0 -191
  260. package/src/overflow-list/OverflowList.a11y.test.ts +0 -46
  261. package/src/overflow-list/OverflowList.kbd.test.ts +0 -34
  262. package/src/overflow-list/OverflowList.svelte +0 -539
  263. package/src/overflow-list/OverflowListA11yFixture.svelte +0 -22
  264. package/src/overflow-list/OverflowListKbdFixture.svelte +0 -21
  265. package/src/overflow-list/index.ts +0 -2
  266. package/src/overflow-list/meta.ts +0 -138
  267. package/src/pagination/Pagination.a11y.test.ts +0 -62
  268. package/src/pagination/Pagination.kbd.test.ts +0 -66
  269. package/src/pagination/Pagination.svelte +0 -428
  270. package/src/pagination/PaginationKbdFixture.svelte +0 -15
  271. package/src/pagination/index.ts +0 -2
  272. package/src/pagination/meta.ts +0 -73
  273. package/src/popconfirm/Popconfirm.a11y.test.ts +0 -46
  274. package/src/popconfirm/Popconfirm.kbd.test.ts +0 -42
  275. package/src/popconfirm/Popconfirm.svelte +0 -724
  276. package/src/popconfirm/PopconfirmA11yFixture.svelte +0 -34
  277. package/src/popconfirm/PopconfirmKbdFixture.svelte +0 -17
  278. package/src/popconfirm/index.ts +0 -2
  279. package/src/popconfirm/meta.ts +0 -200
  280. package/src/popover/Popover.a11y.test.ts +0 -58
  281. package/src/popover/Popover.kbd.test.ts +0 -42
  282. package/src/popover/Popover.svelte +0 -643
  283. package/src/popover/PopoverA11yFixture.svelte +0 -35
  284. package/src/popover/PopoverKbdFixture.svelte +0 -18
  285. package/src/popover/index.ts +0 -2
  286. package/src/popover/meta.ts +0 -103
  287. package/src/progress/Progress.a11y.test.ts +0 -37
  288. package/src/progress/Progress.svelte +0 -423
  289. package/src/progress/index.ts +0 -3
  290. package/src/progress/meta.ts +0 -132
  291. package/src/radio/Radio.svelte +0 -330
  292. package/src/radio/RadioGroup.a11y.test.ts +0 -43
  293. package/src/radio/RadioGroup.kbd.test.ts +0 -75
  294. package/src/radio/RadioGroup.svelte +0 -199
  295. package/src/radio/RadioGroupKbdFixture.svelte +0 -21
  296. package/src/radio/context.ts +0 -42
  297. package/src/radio/index.ts +0 -4
  298. package/src/radio/meta.ts +0 -68
  299. package/src/rating/Rating.a11y.test.ts +0 -41
  300. package/src/rating/Rating.kbd.test.ts +0 -48
  301. package/src/rating/Rating.svelte +0 -407
  302. package/src/rating/RatingKbdFixture.svelte +0 -15
  303. package/src/rating/index.ts +0 -2
  304. package/src/rating/meta.ts +0 -40
  305. package/src/resize-observer/ResizeObserver.svelte +0 -169
  306. package/src/resize-observer/action.ts +0 -80
  307. package/src/resize-observer/index.ts +0 -9
  308. package/src/resize-observer/meta.ts +0 -102
  309. package/src/scroll-list/ScrollColumn.svelte +0 -592
  310. package/src/scroll-list/ScrollList.svelte +0 -257
  311. package/src/scroll-list/index.ts +0 -4
  312. package/src/scroll-list/meta.ts +0 -93
  313. package/src/scroll-list/types.ts +0 -18
  314. package/src/select/Select.a11y.test.ts +0 -59
  315. package/src/select/Select.kbd.test.ts +0 -59
  316. package/src/select/Select.svelte +0 -1155
  317. package/src/select/SelectKbdFixture.svelte +0 -29
  318. package/src/select/index.ts +0 -3
  319. package/src/select/meta.ts +0 -78
  320. package/src/select/types.ts +0 -2
  321. package/src/side-sheet/SideSheet.a11y.test.ts +0 -53
  322. package/src/side-sheet/SideSheet.kbd.test.ts +0 -63
  323. package/src/side-sheet/SideSheet.svelte +0 -659
  324. package/src/side-sheet/SideSheetKbdFixture.svelte +0 -30
  325. package/src/side-sheet/index.ts +0 -2
  326. package/src/side-sheet/meta.ts +0 -116
  327. package/src/skeleton/Skeleton.a11y.test.ts +0 -35
  328. package/src/skeleton/Skeleton.svelte +0 -131
  329. package/src/skeleton/SkeletonAvatar.svelte +0 -82
  330. package/src/skeleton/SkeletonButton.svelte +0 -90
  331. package/src/skeleton/SkeletonImage.svelte +0 -100
  332. package/src/skeleton/SkeletonParagraph.svelte +0 -103
  333. package/src/skeleton/SkeletonTitle.svelte +0 -74
  334. package/src/skeleton/context.ts +0 -11
  335. package/src/skeleton/index.ts +0 -8
  336. package/src/skeleton/meta.ts +0 -65
  337. package/src/slider/Slider.a11y.test.ts +0 -44
  338. package/src/slider/Slider.kbd.test.ts +0 -74
  339. package/src/slider/Slider.svelte +0 -716
  340. package/src/slider/SliderKbdFixture.svelte +0 -21
  341. package/src/slider/index.ts +0 -2
  342. package/src/slider/meta.ts +0 -55
  343. package/src/space/Space.a11y.test.ts +0 -22
  344. package/src/space/Space.svelte +0 -109
  345. package/src/space/SpaceA11yFixture.svelte +0 -17
  346. package/src/space/index.ts +0 -2
  347. package/src/space/meta.ts +0 -27
  348. package/src/spin/Spin.a11y.test.ts +0 -29
  349. package/src/spin/Spin.svelte +0 -293
  350. package/src/spin/SpinA11yFixture.svelte +0 -18
  351. package/src/spin/index.ts +0 -2
  352. package/src/spin/meta.ts +0 -72
  353. package/src/steps/Steps.a11y.test.ts +0 -39
  354. package/src/steps/Steps.kbd.test.ts +0 -73
  355. package/src/steps/Steps.svelte +0 -392
  356. package/src/steps/StepsKbdFixture.svelte +0 -21
  357. package/src/steps/index.ts +0 -3
  358. package/src/steps/meta.ts +0 -59
  359. package/src/steps/types.ts +0 -8
  360. package/src/switch/Switch.a11y.test.ts +0 -46
  361. package/src/switch/Switch.kbd.test.ts +0 -40
  362. package/src/switch/Switch.svelte +0 -310
  363. package/src/switch/SwitchKbdFixture.svelte +0 -22
  364. package/src/switch/index.ts +0 -2
  365. package/src/switch/meta.ts +0 -44
  366. package/src/table/Table.a11y.test.ts +0 -70
  367. package/src/table/Table.bench.ts +0 -51
  368. package/src/table/Table.kbd.test.ts +0 -94
  369. package/src/table/Table.svelte +0 -2327
  370. package/src/table/TableKbdFixture.svelte +0 -35
  371. package/src/table/grid-nav.test.ts +0 -173
  372. package/src/table/grid-nav.ts +0 -146
  373. package/src/table/index.ts +0 -13
  374. package/src/table/meta.ts +0 -121
  375. package/src/table/types.ts +0 -133
  376. package/src/tabs/TabPane.svelte +0 -92
  377. package/src/tabs/Tabs.a11y.test.ts +0 -47
  378. package/src/tabs/Tabs.kbd.test.ts +0 -74
  379. package/src/tabs/Tabs.svelte +0 -1128
  380. package/src/tabs/TabsA11yFixture.svelte +0 -20
  381. package/src/tabs/TabsKbdFixture.svelte +0 -25
  382. package/src/tabs/context.ts +0 -43
  383. package/src/tabs/index.ts +0 -14
  384. package/src/tabs/meta.ts +0 -152
  385. package/src/tabs/types.ts +0 -6
  386. package/src/tag/Tag.a11y.test.ts +0 -33
  387. package/src/tag/Tag.svelte +0 -366
  388. package/src/tag/TagA11yFixture.svelte +0 -18
  389. package/src/tag/index.ts +0 -2
  390. package/src/tag/meta.ts +0 -92
  391. package/src/tag-input/TagInput.a11y.test.ts +0 -41
  392. package/src/tag-input/TagInput.svelte +0 -544
  393. package/src/tag-input/index.ts +0 -2
  394. package/src/tag-input/meta.ts +0 -43
  395. package/src/tag-input/reorder.test.ts +0 -59
  396. package/src/tag-input/reorder.ts +0 -41
  397. package/src/test-utils/LocaleHarness.svelte +0 -29
  398. package/src/test-utils/a11y.ts +0 -108
  399. package/src/test-utils/kbd.ts +0 -52
  400. package/src/textarea/TextArea.a11y.test.ts +0 -44
  401. package/src/textarea/TextArea.svelte +0 -420
  402. package/src/textarea/index.ts +0 -2
  403. package/src/textarea/meta.ts +0 -104
  404. package/src/time-picker/TimePicker.a11y.test.ts +0 -45
  405. package/src/time-picker/TimePicker.kbd.test.ts +0 -70
  406. package/src/time-picker/TimePicker.svelte +0 -1023
  407. package/src/time-picker/TimePickerKbdFixture.svelte +0 -23
  408. package/src/time-picker/index.ts +0 -2
  409. package/src/time-picker/meta.ts +0 -64
  410. package/src/timeline/Timeline.a11y.test.ts +0 -54
  411. package/src/timeline/Timeline.svelte +0 -599
  412. package/src/timeline/TimelineItem.svelte +0 -164
  413. package/src/timeline/context.ts +0 -28
  414. package/src/timeline/index.ts +0 -16
  415. package/src/timeline/meta.ts +0 -129
  416. package/src/timeline/types.ts +0 -9
  417. package/src/toast/Toast.a11y.test.ts +0 -67
  418. package/src/toast/ToastContainer.svelte +0 -184
  419. package/src/toast/ToastItem.svelte +0 -247
  420. package/src/toast/index.ts +0 -9
  421. package/src/toast/live-region.ts +0 -78
  422. package/src/toast/meta.ts +0 -95
  423. package/src/toast/store.ts +0 -187
  424. package/src/tooltip/Tooltip.a11y.test.ts +0 -41
  425. package/src/tooltip/Tooltip.kbd.test.ts +0 -37
  426. package/src/tooltip/Tooltip.svelte +0 -416
  427. package/src/tooltip/TooltipA11yFixture.svelte +0 -31
  428. package/src/tooltip/TooltipKbdFixture.svelte +0 -16
  429. package/src/tooltip/index.ts +0 -2
  430. package/src/tooltip/meta.ts +0 -59
  431. package/src/tooltip/placement.ts +0 -6
  432. package/src/transfer/Transfer.a11y.test.ts +0 -63
  433. package/src/transfer/Transfer.kbd.test.ts +0 -75
  434. package/src/transfer/Transfer.svelte +0 -1451
  435. package/src/transfer/TransferKbdFixture.svelte +0 -23
  436. package/src/transfer/group.test.ts +0 -55
  437. package/src/transfer/group.ts +0 -61
  438. package/src/transfer/index.ts +0 -3
  439. package/src/transfer/meta.ts +0 -55
  440. package/src/transfer/reorder.test.ts +0 -52
  441. package/src/transfer/reorder.ts +0 -42
  442. package/src/transfer/tree.test.ts +0 -44
  443. package/src/transfer/tree.ts +0 -52
  444. package/src/transfer/types.ts +0 -32
  445. package/src/tree/Tree.a11y.test.ts +0 -63
  446. package/src/tree/Tree.kbd.test.ts +0 -91
  447. package/src/tree/Tree.svelte +0 -1500
  448. package/src/tree/TreeKbdFixture.svelte +0 -30
  449. package/src/tree/index.ts +0 -3
  450. package/src/tree/meta.ts +0 -152
  451. package/src/tree-select/TreeSelect.a11y.test.ts +0 -52
  452. package/src/tree-select/TreeSelect.kbd.test.ts +0 -53
  453. package/src/tree-select/TreeSelect.svelte +0 -1611
  454. package/src/tree-select/TreeSelectKbdFixture.svelte +0 -20
  455. package/src/tree-select/index.ts +0 -3
  456. package/src/tree-select/meta.ts +0 -73
  457. package/src/tree-select/types.ts +0 -11
  458. package/src/tree-select/virtual.test.ts +0 -104
  459. package/src/typography/Link.svelte +0 -120
  460. package/src/typography/Paragraph.svelte +0 -92
  461. package/src/typography/Text.svelte +0 -93
  462. package/src/typography/Title.svelte +0 -91
  463. package/src/typography/Typography.a11y.test.ts +0 -34
  464. package/src/typography/TypographyA11yFixture.svelte +0 -27
  465. package/src/typography/TypographyBase.svelte +0 -807
  466. package/src/typography/index.ts +0 -16
  467. package/src/typography/meta.ts +0 -158
  468. package/src/upload/Upload.a11y.test.ts +0 -58
  469. package/src/upload/Upload.svelte +0 -1094
  470. package/src/upload/UploadA11yFixture.svelte +0 -23
  471. package/src/upload/index.ts +0 -3
  472. package/src/upload/meta.ts +0 -64
  473. package/src/upload/types.ts +0 -16
  474. package/src/virtual-list/VirtualList.svelte +0 -401
  475. package/src/virtual-list/index.ts +0 -2
  476. package/src/virtual-list/meta.ts +0 -106
package/src/spin/meta.ts DELETED
@@ -1,72 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * Spin — see specs/components/feedback/Spin.spec.md
4
- */
5
- export const meta = {
6
- name: 'Spin',
7
- category: 'feedback',
8
- description:
9
- '加载指示器:inline / wrapper / fullscreen 三形态;delay 去抖 + minShowTime 最短显示(复用 @chenzy-design/core createSpinController);role=status + aria-live=polite 公布加载,wrapper 内容 aria-busy;reduced-motion 下旋转退化为呼吸。spinning 受控不回写,显隐变化仅触发 onShow/onHide。',
10
- exports: ['Spin'],
11
- props: [
12
- { name: 'spinning', type: 'boolean', default: 'true', desc: '是否加载态;受控不回写' },
13
- { name: 'size', type: "'small'|'default'|'large'", default: "'default'" },
14
- { name: 'tip', type: 'string', default: "''", desc: '指示器下方文案,空则不渲染' },
15
- { name: 'delay', type: 'number', default: '0', desc: '延迟显示 ms(去抖)' },
16
- { name: 'minShowTime', type: 'number', default: '0', desc: '最短显示 ms' },
17
- { name: 'fullscreen', type: 'boolean', default: 'false', desc: '全屏固定覆盖' },
18
- { name: 'wrapperClassName', type: 'string', default: "''", desc: 'wrapper 外层自定义类' },
19
- { name: 'ariaLabel', type: 'string', default: "'加载中'", desc: '无 tip 时的可访问名' },
20
- {
21
- name: 'indicator',
22
- type: 'Snippet<[{ size }]>',
23
- default: 'undefined',
24
- desc: '自定义指示器',
25
- },
26
- {
27
- name: 'children',
28
- type: 'Snippet',
29
- default: 'undefined',
30
- desc: '提供则进入 wrapper 模式包裹内容',
31
- },
32
- { name: 'onShow', type: '() => void', default: 'undefined', desc: 'effective false→true' },
33
- { name: 'onHide', type: '() => void', default: 'undefined', desc: 'effective true→false' },
34
- ],
35
- events: [
36
- { name: 'onShow', desc: '有效显示态由 false 变 true(delay 后真正显示时触发)' },
37
- { name: 'onHide', desc: '有效显示态由 true 变 false(满足 minShowTime 后隐藏时触发)' },
38
- ],
39
- slots: [
40
- { name: 'children', desc: 'wrapper 模式下被遮罩包裹的内容' },
41
- { name: 'indicator', desc: '自定义指示器(接收 { size })' },
42
- ],
43
- a11y: {
44
- hasRole: true,
45
- focusable: false,
46
- note: 'role=status + aria-live=polite(隐式 aria-atomic)公布加载;无 tip 时 aria-label,有 tip 时 tip 文本即可访问名;wrapper 内容 effectiveSpinning 时 aria-busy=true 并 inert 阻断交互;内置 SVG aria-hidden;不捕获焦点;reduced-motion 旋转退化为 opacity 呼吸。',
47
- },
48
- tokens: [
49
- '--cd-spin-color',
50
- '--cd-spin-track-color',
51
- '--cd-spin-size-small',
52
- '--cd-spin-size-default',
53
- '--cd-spin-size-large',
54
- '--cd-spin-duration',
55
- '--cd-spin-duration-reduced',
56
- '--cd-spin-tip-gap',
57
- '--cd-spin-tip-color',
58
- '--cd-spin-mask-bg',
59
- '--cd-spin-z',
60
- '--cd-spin-z-fullscreen',
61
- '--cd-spin-fade-duration',
62
- ],
63
- responsive: false,
64
- examples: [
65
- { title: 'inline', code: '<Spin spinning />' },
66
- {
67
- title: 'wrapper 包裹卡片',
68
- code: '<Spin spinning={loading}>\n <Card>内容</Card>\n</Spin>',
69
- },
70
- { title: '带 tip', code: '<Spin spinning tip="加载中…" />' },
71
- ],
72
- } as const;
@@ -1,39 +0,0 @@
1
- // Steps a11y:<ol> 步骤列表;当前步 aria-current=step;nav 型外包 nav[aria-label]。
2
- // - 视觉隐藏的状态文本(.cd-sr-only)令颜色非唯一信息载体(WCAG 1.4.1)。
3
- // jsdom 只断言静态 ARIA + axe(roving 键盘留给真实浏览器)。
4
- import { describe, it, expect } from 'vitest';
5
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
6
- import Steps from './Steps.svelte';
7
- import type { StepItem } from './types.js';
8
-
9
- const steps: StepItem[] = [
10
- { title: 'Start' },
11
- { title: 'Verify' },
12
- { title: 'Done' },
13
- ];
14
-
15
- describe('Steps a11y', () => {
16
- it('默认渲染:ol 列表 + 当前步 aria-current=step,无 axe violations', async () => {
17
- const { container } = renderWithLocale(Steps, {
18
- props: { steps, current: 1 },
19
- });
20
- expect(container.querySelector('ol.cd-steps')).not.toBeNull();
21
- expect(container.querySelectorAll('li.cd-steps__item')).toHaveLength(3);
22
- const current = container.querySelector('[aria-current="step"]');
23
- expect(current).not.toBeNull();
24
- // 每步含视觉隐藏状态文本(颜色非唯一信息载体)。
25
- expect(container.querySelectorAll('.cd-sr-only').length).toBeGreaterThan(0);
26
- await expectNoAxeViolations(container);
27
- });
28
-
29
- it('nav 型:外包 nav[aria-label],步骤为可点 button,无 axe violations', async () => {
30
- const { container } = renderWithLocale(Steps, {
31
- props: { steps, type: 'nav', current: 0 },
32
- });
33
- const nav = container.querySelector('nav');
34
- expect(nav).not.toBeNull();
35
- expect(nav?.getAttribute('aria-label')).toBeTruthy();
36
- expect(container.querySelectorAll('button.cd-steps__head')).toHaveLength(3);
37
- await expectNoAxeViolations(container);
38
- });
39
- });
@@ -1,73 +0,0 @@
1
- // Steps 键盘 e2e(browser project / 真实 chromium)。
2
- // type="nav"(→ clickable)启用 roving,可点击步骤组为单一 Tab 停靠点。
3
- // 测真实焦点移动——jsdom 测不了(命令式 focus() 不可靠):
4
- // 1. roving 单停靠点:Tab 进入只停在一个 step button(其余 tabindex=-1)。
5
- // 2. ↑↓/←→ 真实移动焦点到相邻步骤(无 wrap:clamp 在两端,源码 nextRovingIndex(...,false))。
6
- // 3. Home/End 跳首/末步。
7
- //
8
- // 真实焦点断言用 page locator 的 .toHaveFocus()。
9
- import { describe, it, expect } from 'vitest';
10
- import { page } from 'vitest/browser';
11
- import { renderKbdFixture, userEvent } from '../test-utils/kbd.js';
12
- import StepsKbdFixture from './StepsKbdFixture.svelte';
13
-
14
- function loc(el: Element) {
15
- return page.elementLocator(el);
16
- }
17
-
18
- describe('Steps 键盘 e2e(nav/clickable roving,真实焦点)', () => {
19
- it('Tab 单停靠点 + 方向键移动焦点(clamp)+ Home/End 跳首末', async () => {
20
- const { baseElement } = renderKbdFixture(StepsKbdFixture);
21
-
22
- const buttons = Array.from(
23
- baseElement.querySelectorAll<HTMLElement>('button[data-step-index]'),
24
- );
25
- expect(buttons.length).toBe(3);
26
- const [first, second, third] = buttons as [HTMLElement, HTMLElement, HTMLElement];
27
-
28
- // 1. roving 单停靠点:恰一个 tabindex=0(默认收敛到 activeIndex=0 首步)。
29
- expect(buttons.filter((el) => el.tabIndex === 0).length).toBe(1);
30
- expect(first.tabIndex).toBe(0);
31
-
32
- const before = baseElement.querySelector('[data-testid="before"]') as HTMLElement;
33
- before.focus();
34
- await expect.element(loc(before)).toHaveFocus();
35
- await userEvent.tab();
36
- await expect.element(loc(first)).toHaveFocus();
37
-
38
- // 2. → / ↓ 移动焦点到下一步(真实焦点 + 停靠点同步)。
39
- await userEvent.keyboard('{ArrowRight}');
40
- await expect.element(loc(second)).toHaveFocus();
41
- expect(second.tabIndex).toBe(0);
42
- expect(first.tabIndex).toBe(-1);
43
-
44
- await userEvent.keyboard('{ArrowDown}');
45
- await expect.element(loc(third)).toHaveFocus();
46
-
47
- // 无 wrap:末步再 → 停在末步(clamp)。
48
- await userEvent.keyboard('{ArrowRight}');
49
- await expect.element(loc(third)).toHaveFocus();
50
-
51
- // ← / ↑ 回退。
52
- await userEvent.keyboard('{ArrowLeft}');
53
- await expect.element(loc(second)).toHaveFocus();
54
-
55
- // 首步再 ← 停在首步(clamp)。
56
- await userEvent.keyboard('{ArrowUp}');
57
- await expect.element(loc(first)).toHaveFocus();
58
- await userEvent.keyboard('{ArrowUp}');
59
- await expect.element(loc(first)).toHaveFocus();
60
-
61
- // 3. Home/End 跳首/末。
62
- await userEvent.keyboard('{End}');
63
- await expect.element(loc(third)).toHaveFocus();
64
- await userEvent.keyboard('{Home}');
65
- await expect.element(loc(first)).toHaveFocus();
66
-
67
- // Tab 离开步骤组 → after 按钮(单停靠点,不困在组内)。
68
- const after = baseElement.querySelector('[data-testid="after"]') as HTMLElement;
69
- await userEvent.keyboard('{End}');
70
- await userEvent.tab();
71
- await expect.element(loc(after)).toHaveFocus();
72
- });
73
- });
@@ -1,392 +0,0 @@
1
- <!--
2
- Steps — see specs/components/navigation/Steps.spec.md
3
- Base subset: horizontal/vertical, fill/nav/basic types, clickable, status, dot mode.
4
- dot:图标渲染为小圆点(不显数字/✓),process 态高亮放大。
5
- basic:线框/简洁型——节点圆圈描边而非实心填充,process 态高亮描边。
6
- icon:自定义图标 snippet,提供时替代默认序号/✓/✕。
7
- -->
8
- <script lang="ts">
9
- import type { Snippet } from 'svelte';
10
- import { nextRovingIndex, rovingKeyFromEvent, type RovingKey } from '@chenzy-design/core';
11
- import { useLocale } from '../locale-provider/index.js';
12
- import type { StepItem } from './types.js';
13
-
14
- type StepDirection = 'horizontal' | 'vertical';
15
- type StepType = 'fill' | 'nav' | 'basic';
16
- type StepStatus = 'process' | 'finish' | 'error' | 'warning';
17
- type StepSize = 'small' | 'default' | 'large';
18
- type DerivedStatus = 'wait' | 'process' | 'finish' | 'error' | 'warning';
19
-
20
- interface Props {
21
- current?: number;
22
- defaultCurrent?: number;
23
- steps?: StepItem[];
24
- direction?: StepDirection;
25
- type?: StepType;
26
- status?: StepStatus;
27
- size?: StepSize;
28
- initial?: number;
29
- clickable?: boolean;
30
- /** 点状步骤:图标渲染为小圆点,不显数字/✓ */
31
- dot?: boolean;
32
- /** 自定义图标渲染器,提供时替代默认序号/✓/✕(dot 模式不渲染图标) */
33
- icon?: Snippet<[{ step: StepItem; index: number; status: DerivedStatus }]>;
34
- onChange?: (current: number) => void;
35
- onClick?: (e: MouseEvent) => void;
36
- onKeyDown?: (e: KeyboardEvent) => void;
37
- class?: string;
38
- }
39
-
40
- let {
41
- current,
42
- defaultCurrent = 0,
43
- steps = [],
44
- direction = 'horizontal',
45
- type = 'fill',
46
- status = 'process',
47
- size = 'default',
48
- initial = 0,
49
- clickable,
50
- dot = false,
51
- icon,
52
- onChange,
53
- onClick,
54
- onKeyDown,
55
- class: className = '',
56
- }: Props = $props();
57
-
58
- // Controlled / uncontrolled (red line #1): never write back the prop.
59
- const isControlled = $derived(current !== undefined);
60
- let inner = $state(getInitialCurrent());
61
- const activeIndex = $derived(isControlled ? (current as number) : inner);
62
-
63
- function getInitialCurrent(): number {
64
- return defaultCurrent;
65
- }
66
-
67
- const isClickable = $derived(clickable ?? type === 'nav');
68
-
69
- function statusOf(index: number): DerivedStatus {
70
- // 显式 step.status 优先于由 current 推断的状态
71
- const explicit = steps[index]?.status;
72
- if (explicit) return explicit;
73
- if (index < activeIndex) return 'finish';
74
- if (index === activeIndex) return status;
75
- return 'wait';
76
- }
77
-
78
- const cls = $derived(
79
- [
80
- 'cd-steps',
81
- `cd-steps--${direction}`,
82
- `cd-steps--${type}`,
83
- `cd-steps--${size}`,
84
- dot && 'cd-steps--dot',
85
- className,
86
- ]
87
- .filter(Boolean)
88
- .join(' '),
89
- );
90
-
91
- function select(index: number) {
92
- if (!isClickable) return;
93
- if (steps[index]?.disabled) return; // 禁用步不可激活
94
- if (index === activeIndex) return;
95
- if (!isControlled) inner = index;
96
- onChange?.(index);
97
- }
98
-
99
- const loc = useLocale();
100
-
101
- // 视觉隐藏的状态文本(WCAG 1.4.1:颜色非唯一信息载体)。
102
- // 组合「步骤 N,共 M 步,<状态>」供屏幕阅读器朗读。
103
- function statusText(st: DerivedStatus): string {
104
- switch (st) {
105
- case 'finish':
106
- return loc().t('Steps.statusFinish');
107
- case 'process':
108
- return loc().t('Steps.statusProcess');
109
- case 'error':
110
- return loc().t('Steps.statusError');
111
- case 'warning':
112
- return loc().t('Steps.statusWarning');
113
- default:
114
- return loc().t('Steps.statusWait');
115
- }
116
- }
117
- function srLabel(index: number, st: DerivedStatus): string {
118
- // 分隔符 ofTotal 已带(zh「,共 N 步」/ en「 of N」),状态前再以 locale 分隔符停顿。
119
- const sep = loc().t('Steps.statusSeparator');
120
- return (
121
- loc().t('Steps.stepLabel', { index: index + 1 + initial }) +
122
- loc().t('Steps.ofTotal', { total: steps.length }) +
123
- sep +
124
- statusText(st)
125
- );
126
- }
127
-
128
- // --- roving tabindex(a11y §6):可点击步骤组为单一 Tab 停靠点。 ---
129
- // rootEl 普通引用(bind:this),命令式 focus() 用,非 render 期读 DOM。
130
- let rootEl = $state<HTMLElement | null>(null);
131
- // 当前焦点步索引;-1 = 尚无焦点 -> 首个可点击步作为 Tab 停靠点。
132
- let focusedIndex = $state(-1);
133
-
134
- // 可点击(且未禁用)的步骤索引序列;roving 在其中漫游,跳过 disabled(红线 #2:纯派生)。
135
- const focusableIndices = $derived<number[]>(
136
- isClickable
137
- ? steps.map((s, i) => (s.disabled ? -1 : i)).filter((i) => i >= 0)
138
- : [],
139
- );
140
-
141
- // 纯派生 tabindex:当前焦点步(或无焦点时回退到 activeIndex/首个可点击步)为 0,其余 -1。
142
- // 不在 render 期写 $state(红线 #2)。
143
- function stepTabindex(index: number): 0 | -1 {
144
- if (!isClickable || steps[index]?.disabled) return -1;
145
- const anchor =
146
- focusedIndex >= 0
147
- ? focusedIndex
148
- : focusableIndices.includes(activeIndex)
149
- ? activeIndex
150
- : (focusableIndices[0] ?? -1);
151
- return index === anchor ? 0 : -1;
152
- }
153
-
154
- function focusStep(index: number): void {
155
- focusedIndex = index;
156
- rootEl
157
- ?.querySelector<HTMLElement>(`[data-step-index="${index}"]`)
158
- ?.focus();
159
- }
160
-
161
- // 步骤 keydown:方向键 roving(纯函数 nextRovingIndex 派生,仅在可点击步间移动)、
162
- // Home/End 跳首尾可点击步。Enter/Space 交给原生 <button>(向后兼容)。
163
- function onStepKeydown(e: KeyboardEvent, index: number): void {
164
- const intent: RovingKey | null = rovingKeyFromEvent(e.key);
165
- if (!intent) return;
166
- e.preventDefault();
167
- const list = focusableIndices;
168
- if (list.length === 0) return;
169
- const cur = list.indexOf(index);
170
- const next = nextRovingIndex(cur, list.length, intent, false);
171
- const target = list[next];
172
- if (target != null) focusStep(target);
173
- }
174
- </script>
175
-
176
- {#snippet head(step: StepItem, index: number, st: DerivedStatus)}
177
- <span class="cd-steps__icon" aria-hidden="true">
178
- {#if dot}{:else if icon}{@render icon({ step, index, status: st })}{:else if st === 'finish'}✓{:else if st === 'error'}✕{:else}{index + 1 + initial}{/if}
179
- </span>
180
- <span class="cd-steps__content">
181
- <span class="cd-steps__title">{step.title}</span>
182
- {#if step.description}
183
- <span class="cd-steps__desc">{step.description}</span>
184
- {/if}
185
- </span>
186
- <!-- WCAG 1.4.1:视觉隐藏的「步骤 N,共 M 步,<状态>」供屏幕阅读器朗读,颜色非唯一信息载体。 -->
187
- <span class="cd-sr-only">{srLabel(index, st)}</span>
188
- {/snippet}
189
-
190
- {#snippet stepsList()}
191
- <ol class={cls} bind:this={rootEl}>
192
- {#each steps as step, index (index)}
193
- {@const st = statusOf(index)}
194
- {@const last = index === steps.length - 1}
195
- {@const isDisabled = step.disabled === true}
196
- <li class="cd-steps__item cd-steps__item--{st}" class:cd-steps__item--disabled={isDisabled}>
197
- {#if isClickable}
198
- <button
199
- type="button"
200
- class="cd-steps__head"
201
- data-step-index={index}
202
- aria-current={index === activeIndex ? 'step' : undefined}
203
- disabled={isDisabled}
204
- aria-disabled={isDisabled || undefined}
205
- tabindex={stepTabindex(index)}
206
- onclick={(e) => { select(index); onClick?.(e); }}
207
- onkeydown={(e) => { onStepKeydown(e, index); onKeyDown?.(e); }}
208
- onfocus={() => {
209
- focusedIndex = index;
210
- }}
211
- >
212
- {@render head(step, index, st)}
213
- </button>
214
- {:else}
215
- <div
216
- class="cd-steps__head"
217
- aria-current={index === activeIndex ? 'step' : undefined}
218
- aria-disabled={isDisabled || undefined}
219
- >
220
- {@render head(step, index, st)}
221
- </div>
222
- {/if}
223
- {#if !last}
224
- <span
225
- class="cd-steps__line"
226
- class:cd-steps__line--finish={index < activeIndex}
227
- aria-hidden="true"
228
- ></span>
229
- {/if}
230
- </li>
231
- {/each}
232
- </ol>
233
- {/snippet}
234
-
235
- {#if type === 'nav'}
236
- <nav aria-label={loc().t('Steps.navAriaLabel')}>
237
- {@render stepsList()}
238
- </nav>
239
- {:else}
240
- {@render stepsList()}
241
- {/if}
242
-
243
- <style>
244
- /* 视觉隐藏的状态文本(class="cd-sr-only")复用 tokens.css 全局工具类,
245
- 令颜色非唯一信息载体(WCAG 1.4.1)。 */
246
- .cd-steps {
247
- display: flex;
248
- margin: 0;
249
- padding: 0;
250
- list-style: none;
251
- }
252
- .cd-steps--horizontal {
253
- flex-direction: row;
254
- align-items: flex-start;
255
- }
256
- .cd-steps--vertical {
257
- flex-direction: column;
258
- }
259
- .cd-steps__item {
260
- position: relative;
261
- display: flex;
262
- flex: 1 1 auto;
263
- align-items: center;
264
- gap: var(--cd-spacing-2);
265
- }
266
- .cd-steps--vertical .cd-steps__item {
267
- flex-direction: column;
268
- align-items: flex-start;
269
- }
270
- .cd-steps__head {
271
- display: inline-flex;
272
- align-items: center;
273
- gap: var(--cd-spacing-2);
274
- margin: 0;
275
- padding: 0;
276
- border: none;
277
- background: transparent;
278
- color: inherit;
279
- font: inherit;
280
- text-align: start;
281
- }
282
- button.cd-steps__head {
283
- cursor: pointer;
284
- }
285
- /* 禁用步:置灰、不可点击 */
286
- .cd-steps__item--disabled .cd-steps__head {
287
- cursor: not-allowed;
288
- opacity: 0.4;
289
- }
290
- button.cd-steps__head:disabled {
291
- cursor: not-allowed;
292
- }
293
- button.cd-steps__head:focus-visible {
294
- outline: none;
295
- box-shadow: var(--cd-focus-ring);
296
- border-radius: var(--cd-radius-1);
297
- }
298
- .cd-steps__icon {
299
- display: inline-flex;
300
- align-items: center;
301
- justify-content: center;
302
- inline-size: var(--cd-steps-icon-size);
303
- block-size: var(--cd-steps-icon-size);
304
- border-radius: var(--cd-radius-full);
305
- background: var(--cd-steps-icon-bg);
306
- color: var(--cd-steps-icon-color);
307
- flex: 0 0 auto;
308
- }
309
- .cd-steps__item--process .cd-steps__icon {
310
- background: var(--cd-steps-icon-bg-process);
311
- color: var(--cd-steps-icon-color-active);
312
- }
313
- .cd-steps__item--finish .cd-steps__icon {
314
- background: var(--cd-steps-icon-bg-finish);
315
- color: var(--cd-steps-icon-color-active);
316
- }
317
- .cd-steps__item--error .cd-steps__icon {
318
- background: var(--cd-steps-icon-bg-error);
319
- color: var(--cd-steps-icon-color-active);
320
- }
321
- .cd-steps__content {
322
- display: inline-flex;
323
- flex-direction: column;
324
- }
325
- .cd-steps__title {
326
- color: var(--cd-steps-title-color);
327
- }
328
- .cd-steps__desc {
329
- color: var(--cd-steps-desc-color);
330
- font-size: var(--cd-font-size-1);
331
- }
332
- .cd-steps__line {
333
- flex: 1 1 auto;
334
- background: var(--cd-steps-line-color);
335
- }
336
- .cd-steps--horizontal .cd-steps__line {
337
- block-size: 1px;
338
- min-inline-size: var(--cd-spacing-4);
339
- }
340
- .cd-steps--vertical .cd-steps__line {
341
- inline-size: 1px;
342
- min-block-size: var(--cd-spacing-4);
343
- margin-inline-start: calc(var(--cd-steps-icon-size) / 2);
344
- }
345
- .cd-steps__line--finish {
346
- background: var(--cd-steps-line-color-finish);
347
- }
348
-
349
- /* --- basic 线框型:节点圆圈用描边而非实心填充 --- */
350
- .cd-steps--basic .cd-steps__icon {
351
- background: transparent;
352
- color: var(--cd-steps-basic-color, var(--cd-color-text-2));
353
- border: 1px solid var(--cd-steps-basic-border, var(--cd-color-border));
354
- }
355
- .cd-steps--basic .cd-steps__item--process .cd-steps__icon {
356
- background: transparent;
357
- color: var(--cd-steps-basic-color-process, var(--cd-color-primary));
358
- border-color: var(--cd-steps-basic-border-process, var(--cd-color-primary));
359
- }
360
- .cd-steps--basic .cd-steps__item--finish .cd-steps__icon {
361
- background: transparent;
362
- color: var(--cd-steps-basic-color-finish, var(--cd-color-primary));
363
- border-color: var(--cd-steps-basic-border-finish, var(--cd-color-primary));
364
- }
365
- .cd-steps--basic .cd-steps__item--error .cd-steps__icon {
366
- background: transparent;
367
- color: var(--cd-steps-basic-color-error, var(--cd-color-danger));
368
- border-color: var(--cd-steps-basic-border-error, var(--cd-color-danger));
369
- }
370
-
371
- /* --- dot 模式:图标缩为小圆点,process 态放大高亮 --- */
372
- .cd-steps--dot .cd-steps__icon {
373
- inline-size: var(--cd-steps-dot-size, 8px);
374
- block-size: var(--cd-steps-dot-size, 8px);
375
- background: var(--cd-steps-line-color);
376
- }
377
- .cd-steps--dot .cd-steps__item--process .cd-steps__icon {
378
- inline-size: var(--cd-steps-dot-size-active, 10px);
379
- block-size: var(--cd-steps-dot-size-active, 10px);
380
- background: var(--cd-steps-icon-bg-process);
381
- }
382
- .cd-steps--dot .cd-steps__item--finish .cd-steps__icon {
383
- background: var(--cd-steps-icon-bg-finish);
384
- }
385
- .cd-steps--dot .cd-steps__item--error .cd-steps__icon {
386
- background: var(--cd-steps-icon-bg-error);
387
- }
388
- /* dot 模式垂直对齐 line 与圆点中心 */
389
- .cd-steps--dot.cd-steps--vertical .cd-steps__line {
390
- margin-inline-start: calc(var(--cd-steps-dot-size, 8px) / 2);
391
- }
392
- </style>
@@ -1,21 +0,0 @@
1
- <!--
2
- 仅供 Steps.kbd.test.ts(browser project)使用的键盘 e2e 夹具。
3
- type="nav" 启用 clickable,可点击步骤组为单一 Tab 停靠点(roving,真实焦点)。
4
- 前后各放一个按钮,验证 Tab 从 before 进入只停靠单一步骤、Tab 出去落到 after。
5
- -->
6
- <script lang="ts">
7
- import { LocaleProvider } from '../locale-provider/index.js';
8
- import Steps from './Steps.svelte';
9
-
10
- const steps = [
11
- { title: 'First' },
12
- { title: 'Second' },
13
- { title: 'Third' },
14
- ];
15
- </script>
16
-
17
- <LocaleProvider locale="en_US">
18
- <button type="button" data-testid="before">before</button>
19
- <Steps {steps} type="nav" defaultCurrent={0} />
20
- <button type="button" data-testid="after">after</button>
21
- </LocaleProvider>
@@ -1,3 +0,0 @@
1
- export { default as Steps } from './Steps.svelte';
2
- export { meta as stepsMeta } from './meta.js';
3
- export type { StepItem } from './types.js';
package/src/steps/meta.ts DELETED
@@ -1,59 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * See specs/00-foundation/ai-friendly.spec.md.
4
- */
5
- export const meta = {
6
- name: 'Steps',
7
- category: 'navigation',
8
- description:
9
- '步骤条,引导用户按流程完成任务。支持横向/纵向、fill/nav/basic 类型、自定义图标、可点击与状态展示。',
10
- props: [
11
- { name: 'current', type: 'number', default: 'undefined', desc: '受控当前步' },
12
- { name: 'defaultCurrent', type: 'number', default: '0' },
13
- { name: 'steps', type: 'StepItem[]', default: '[]', desc: '步骤数据' },
14
- { name: 'direction', type: "'horizontal'|'vertical'", default: 'horizontal' },
15
- { name: 'type', type: "'fill'|'nav'|'basic'", default: 'fill', desc: 'basic 为线框/描边型' },
16
- {
17
- name: 'status',
18
- type: "'process'|'finish'|'error'|'warning'",
19
- default: 'process',
20
- desc: '当前步状态',
21
- },
22
- { name: 'size', type: "'small'|'default'|'large'", default: 'default' },
23
- { name: 'initial', type: 'number', default: '0', desc: '起始序号偏移' },
24
- { name: 'clickable', type: 'boolean', default: "type==='nav'" },
25
- { name: 'dot', type: 'boolean', default: 'false', desc: '点状步骤,图标渲染为小圆点' },
26
- {
27
- name: 'icon',
28
- type: 'Snippet<[{ step: StepItem; index: number; status: DerivedStatus }]>',
29
- default: 'undefined',
30
- desc: '自定义图标渲染器,提供时替代默认序号/✓/✕',
31
- },
32
- { name: 'onChange', type: '(current: number) => void', default: 'undefined' },
33
- { name: 'onClick', type: '(e: MouseEvent) => void', default: 'undefined', desc: '步骤 button 点击事件(仅 clickable 模式下渲染 button 时触发)' },
34
- { name: 'onKeyDown', type: '(e: KeyboardEvent) => void', default: 'undefined', desc: '步骤 button 键盘按下事件(仅 clickable 模式下渲染 button 时触发)' },
35
- { name: 'class', type: 'string', default: "''" },
36
- ],
37
- stepItemProps: [
38
- { name: 'title', type: 'string', default: 'undefined', desc: '步骤标题' },
39
- { name: 'description', type: 'string', default: 'undefined', desc: '步骤描述(次要信息)' },
40
- {
41
- name: 'status',
42
- type: "'wait'|'process'|'finish'|'error'|'warning'",
43
- default: 'undefined',
44
- desc: '显式覆盖该步状态;不传时由 current 推断',
45
- },
46
- { name: 'disabled', type: 'boolean', default: 'false', desc: '禁用该步:不可点击、不可聚焦、置灰' },
47
- ],
48
- a11y: {
49
- role: 'list',
50
- keyboard: ['Tab', 'Enter', 'Space'],
51
- notes: [
52
- 'ol/li 结构',
53
- 'clickable 时每步为原生 button,当前步 aria-current=step',
54
- '图标对勾/✕ 用 aria-hidden,状态靠文本与 aria-current 表达',
55
- '连接线 aria-hidden=true',
56
- ],
57
- },
58
- tokens: ['--cd-steps-*', '--cd-focus-ring', '--cd-radius-full', '--cd-spacing-*', '--cd-font-size-1'],
59
- } as const;
@@ -1,8 +0,0 @@
1
- export interface StepItem {
2
- title: string;
3
- description?: string;
4
- /** 显式覆盖该步状态;不传时由 current 推断 */
5
- status?: 'wait' | 'process' | 'finish' | 'error' | 'warning';
6
- /** 禁用该步:不可点击、不可聚焦、置灰 */
7
- disabled?: boolean;
8
- }