@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
@@ -1,128 +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: 'Breadcrumb',
7
- category: 'navigation',
8
- description:
9
- '面包屑导航,展示当前页面在层级结构中的位置。支持数据驱动 routes 与声明式 Item 两种用法。',
10
- props: [
11
- {
12
- name: 'routes',
13
- type: 'BreadcrumbRoute[]',
14
- default: '[]',
15
- desc: '数据驱动的路由项,最后一项为当前页(aria-current=page)',
16
- },
17
- { name: 'separator', type: 'string', default: "'/'", desc: '分隔符文本' },
18
- { name: 'maxItemCount', type: 'number', default: '0', desc: '超出时中间折叠(0=不折叠)' },
19
- {
20
- name: 'showTooltip',
21
- type: 'boolean',
22
- default: 'false',
23
- desc: '项文本超出 --cd-breadcrumb-item-max-width 被截断时,hover 用 Tooltip 展示完整 label',
24
- },
25
- {
26
- name: 'moreType',
27
- type: "'tooltip'|'popover'",
28
- default: 'undefined',
29
- desc: '折叠 … 的浮层类型:tooltip 悬浮列出被折叠项文本;popover 点击展开可点击跳转的折叠项列表。不设时点击 … 直接展开全部(向后兼容)',
30
- },
31
- { name: 'size', type: "'small'|'default'|'large'", default: 'default' },
32
- {
33
- name: 'compact',
34
- type: 'boolean',
35
- default: 'true',
36
- desc: '紧凑模式;false 时根元素附加 cd-breadcrumb--loose 类(更大字号/间距)',
37
- },
38
- {
39
- name: 'autoCollapse',
40
- type: 'boolean',
41
- default: 'true',
42
- desc: '超出 maxItemCount 时是否自动折叠;false 时始终展示全部项',
43
- },
44
- {
45
- name: 'activeIndex',
46
- type: 'number',
47
- default: 'undefined',
48
- desc: '受控选中项索引(配合 onClick 使用,令对应项高亮)',
49
- },
50
- {
51
- name: 'renderItem',
52
- type: '(route: BreadcrumbRoute, index: number, isLast: boolean) => Snippet',
53
- default: 'undefined',
54
- desc: '自定义路由项渲染(routes 模式);传入时替换默认的链接/文本/当前页渲染逻辑',
55
- },
56
- {
57
- name: 'renderMore',
58
- type: '(restItems: CollapsedRoute[]) => Snippet',
59
- default: 'undefined',
60
- desc: '自定义折叠 … 区域渲染;传入时接管折叠展示(替代 moreType 内置浮层),参数为被折叠路由列表',
61
- },
62
- { name: 'class', type: 'string', default: "''" },
63
- {
64
- name: 'children',
65
- type: 'Snippet',
66
- default: 'undefined',
67
- desc: '声明式 <Breadcrumb.Item> 列表;项间分隔符按 separator 纯 CSS 自动插入,最后一项后无分隔符',
68
- },
69
- {
70
- name: 'onClick',
71
- type: '(route: BreadcrumbRoute, index: number) => void',
72
- default: 'undefined',
73
- },
74
- ],
75
- subComponents: [
76
- {
77
- name: 'BreadcrumbItem',
78
- usage: '<Breadcrumb.Item> 或 <BreadcrumbItem>,置于 <Breadcrumb> 的 children 内',
79
- desc: '声明式面包屑项;项间分隔符由父级纯 CSS 自动插入,最后一项自动渲染为当前页(不可点 + aria-current=page)',
80
- props: [
81
- { name: 'href', type: 'string', default: 'undefined', desc: '链接地址;最后一项忽略 href' },
82
- {
83
- name: 'separator',
84
- type: 'string',
85
- default: 'undefined',
86
- desc: '覆盖父级 separator,仅对本项末尾分隔符生效(通过内联 CSS 变量实现)',
87
- },
88
- {
89
- name: 'noLink',
90
- type: 'boolean',
91
- default: 'false',
92
- desc: '禁止链接/按钮行为,渲染为普通 span(不可点击);忽略 href 和 onClick;末项始终无链接',
93
- },
94
- {
95
- name: 'icon',
96
- type: 'Snippet',
97
- default: 'undefined',
98
- desc: '项前置图标 snippet,渲染在 children 之前',
99
- },
100
- { name: 'class', type: 'string', default: "''" },
101
- { name: 'children', type: 'Snippet', default: 'undefined' },
102
- {
103
- name: 'onClick',
104
- type: '(e: MouseEvent) => void',
105
- default: 'undefined',
106
- desc: '点击/键盘激活回调;最后一项及 noLink=true 时不触发',
107
- },
108
- ],
109
- },
110
- ],
111
- a11y: {
112
- role: 'navigation',
113
- keyboard: ['Enter', 'Space'],
114
- notes: [
115
- 'nav[aria-label] 包裹 ol 有序列表',
116
- '最后一项 aria-current=page,不可点击',
117
- '无 href 的中间项用 role=link + tabindex=0 + 键盘可激活',
118
- '分隔符 aria-hidden=true',
119
- ],
120
- },
121
- tokens: [
122
- '--cd-breadcrumb-*',
123
- '--cd-breadcrumb-item-max-width',
124
- '--cd-focus-ring',
125
- '--cd-font-size-*',
126
- '--cd-radius-1',
127
- ],
128
- } as const;
@@ -1,4 +0,0 @@
1
- export interface BreadcrumbRoute {
2
- label: string;
3
- href?: string;
4
- }
@@ -1,54 +0,0 @@
1
- // Button a11y 试点:纯展示组件(无 useLocale)。验证 axe 0 violations + 基础 role/aria。
2
- import { describe, it, expect } from 'vitest';
3
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
4
- import Button from './Button.svelte';
5
-
6
- describe('Button a11y', () => {
7
- it('按钮:原生 <button>,type=button,无 axe violations', async () => {
8
- // 无默认插槽文字时用 ariaLabel 提供可访问名(否则 axe button-name 报错)。
9
- const { container } = renderWithLocale(Button, {
10
- props: { type: 'primary', ariaLabel: 'Confirm' },
11
- });
12
- const btn = container.querySelector('button');
13
- expect(btn).not.toBeNull();
14
- expect(btn?.getAttribute('type')).toBe('button');
15
- await expectNoAxeViolations(container);
16
- });
17
-
18
- it('icon-only 按钮:用 ariaLabel 提供可访问名,无 axe violations', async () => {
19
- const { container } = renderWithLocale(Button, {
20
- props: { ariaLabel: 'Close panel' },
21
- });
22
- const btn = container.querySelector('button');
23
- expect(btn?.getAttribute('aria-label')).toBe('Close panel');
24
- await expectNoAxeViolations(container);
25
- });
26
-
27
- it('disabled 按钮:原生 disabled 属性', async () => {
28
- const { container } = renderWithLocale(Button, {
29
- props: { ariaLabel: 'Submit', disabled: true },
30
- });
31
- const btn = container.querySelector('button');
32
- expect(btn?.hasAttribute('disabled')).toBe(true);
33
- await expectNoAxeViolations(container);
34
- });
35
-
36
- it('loading 按钮:aria-busy=true', async () => {
37
- const { container } = renderWithLocale(Button, {
38
- props: { ariaLabel: 'Saving', loading: true },
39
- });
40
- const btn = container.querySelector('button');
41
- expect(btn?.getAttribute('aria-busy')).toBe('true');
42
- await expectNoAxeViolations(container);
43
- });
44
-
45
- it('链接按钮(href):role=button 的 <a>,无 axe violations', async () => {
46
- const { container } = renderWithLocale(Button, {
47
- props: { href: 'https://example.com', ariaLabel: 'Open docs' },
48
- });
49
- const link = container.querySelector('a');
50
- expect(link?.getAttribute('role')).toBe('button');
51
- expect(link?.getAttribute('href')).toBe('https://example.com');
52
- await expectNoAxeViolations(container);
53
- });
54
- });
@@ -1,176 +0,0 @@
1
- <!--
2
- Button — see specs/components/basic/Button.spec.md
3
- Token-driven, a11y-correct (native <button>/<a>), no hardcoded values.
4
- -->
5
- <script lang="ts">
6
- import type { Snippet } from 'svelte';
7
-
8
- type ButtonType = 'primary' | 'secondary' | 'tertiary' | 'warning' | 'danger';
9
- type ButtonTheme = 'solid' | 'borderless' | 'light' | 'outline';
10
- type ButtonSize = 'small' | 'default' | 'large';
11
-
12
- interface Props {
13
- type?: ButtonType;
14
- theme?: ButtonTheme;
15
- size?: ButtonSize;
16
- block?: boolean;
17
- disabled?: boolean;
18
- loading?: boolean;
19
- htmlType?: 'button' | 'submit' | 'reset';
20
- href?: string;
21
- /** required for icon-only buttons */
22
- ariaLabel?: string;
23
- icon?: Snippet;
24
- /** 图标相对文字位置。spec §4 L27 */
25
- iconPosition?: 'left' | 'right';
26
- children?: Snippet;
27
- onclick?: (e: MouseEvent) => void;
28
- }
29
-
30
- let {
31
- type = 'secondary',
32
- theme = 'light',
33
- size = 'default',
34
- block = false,
35
- disabled = false,
36
- loading = false,
37
- htmlType = 'button',
38
- href,
39
- ariaLabel,
40
- icon,
41
- iconPosition = 'left',
42
- children,
43
- onclick,
44
- }: Props = $props();
45
-
46
- const cls = $derived(
47
- [
48
- 'cd-button',
49
- `cd-button--${type}`,
50
- `cd-button--${theme}`,
51
- `cd-button--${size}`,
52
- block && 'cd-button--block',
53
- loading && 'cd-button--loading',
54
- icon && iconPosition === 'right' && 'cd-button--icon-right',
55
- ]
56
- .filter(Boolean)
57
- .join(' '),
58
- );
59
-
60
- function handleClick(e: MouseEvent) {
61
- if (disabled || loading) {
62
- e.preventDefault();
63
- return;
64
- }
65
- onclick?.(e);
66
- }
67
- </script>
68
-
69
- {#if href}
70
- <a
71
- class={cls}
72
- href={disabled ? undefined : href}
73
- role="button"
74
- aria-disabled={disabled || undefined}
75
- aria-busy={loading || undefined}
76
- aria-label={ariaLabel}
77
- onclick={handleClick}
78
- >
79
- {#if icon}<span class="cd-button__icon">{@render icon()}</span>{/if}
80
- {@render children?.()}
81
- </a>
82
- {:else}
83
- <button
84
- class={cls}
85
- type={htmlType}
86
- {disabled}
87
- aria-busy={loading || undefined}
88
- aria-label={ariaLabel}
89
- onclick={handleClick}
90
- >
91
- {#if icon}<span class="cd-button__icon">{@render icon()}</span>{/if}
92
- {@render children?.()}
93
- </button>
94
- {/if}
95
-
96
- <style>
97
- .cd-button {
98
- display: inline-flex;
99
- align-items: center;
100
- justify-content: center;
101
- gap: var(--cd-spacing-2);
102
- height: var(--cd-button-height-default);
103
- padding-inline: var(--cd-button-padding-x);
104
- border: 1px solid transparent;
105
- border-radius: var(--cd-button-radius);
106
- font-size: var(--cd-button-font-size);
107
- font-weight: var(--cd-font-weight-medium);
108
- line-height: 1;
109
- cursor: pointer;
110
- transition:
111
- background-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard),
112
- border-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
113
- }
114
- .cd-button:focus-visible {
115
- outline: none;
116
- box-shadow: var(--cd-focus-ring);
117
- }
118
- .cd-button--small {
119
- height: var(--cd-button-height-small);
120
- font-size: var(--cd-font-size-1);
121
- }
122
- .cd-button--large {
123
- height: var(--cd-button-height-large);
124
- font-size: var(--cd-font-size-3);
125
- }
126
- .cd-button--block {
127
- width: 100%;
128
- }
129
- .cd-button--loading {
130
- cursor: default;
131
- opacity: 0.75;
132
- }
133
- .cd-button:disabled,
134
- .cd-button[aria-disabled='true'] {
135
- cursor: not-allowed;
136
- opacity: 0.5;
137
- }
138
- /* primary / solid */
139
- .cd-button--primary {
140
- background: var(--cd-button-color-bg-primary);
141
- color: var(--cd-button-color-text-primary);
142
- }
143
- .cd-button--secondary {
144
- background: var(--cd-color-fill-0);
145
- color: var(--cd-color-text-0);
146
- }
147
- .cd-button--tertiary {
148
- background: transparent;
149
- color: var(--cd-color-text-1);
150
- }
151
- .cd-button--warning {
152
- background: var(--cd-color-warning);
153
- color: var(--cd-color-text-inverse);
154
- }
155
- .cd-button--danger {
156
- background: var(--cd-color-danger);
157
- color: var(--cd-color-text-inverse);
158
- }
159
- .cd-button--outline {
160
- background: transparent;
161
- border-color: var(--cd-color-border);
162
- color: var(--cd-color-text-0);
163
- }
164
- .cd-button__icon {
165
- display: inline-flex;
166
- }
167
- /* iconPosition=right: 纯 CSS flex order, DOM 顺序不变 (spec §4 L27) */
168
- .cd-button--icon-right .cd-button__icon {
169
- order: 1;
170
- }
171
- @media (prefers-reduced-motion: reduce) {
172
- .cd-button {
173
- transition: none;
174
- }
175
- }
176
- </style>
@@ -1,2 +0,0 @@
1
- export { default as Button } from './Button.svelte';
2
- export { meta as buttonMeta } from './meta.js';
@@ -1,28 +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: 'Button',
7
- category: 'basic',
8
- description: '触发即时操作的按钮,最基础的交互原子。',
9
- props: [
10
- { name: 'type', type: "'primary'|'secondary'|'tertiary'|'warning'|'danger'", default: 'secondary' },
11
- { name: 'theme', type: "'solid'|'borderless'|'light'|'outline'", default: 'light' },
12
- { name: 'size', type: "'small'|'default'|'large'", default: 'default' },
13
- { name: 'block', type: 'boolean', default: 'false' },
14
- { name: 'disabled', type: 'boolean', default: 'false' },
15
- { name: 'loading', type: 'boolean', default: 'false' },
16
- { name: 'iconPosition', type: "'left'|'right'", default: 'left', desc: '图标相对文字位置' },
17
- { name: 'href', type: 'string', default: 'undefined', desc: '提供则渲染为链接' },
18
- { name: 'ariaLabel', type: 'string', default: 'undefined', desc: '仅图标按钮必填' },
19
- ],
20
- events: [{ name: 'onclick', payload: 'MouseEvent', desc: 'disabled/loading 时不触发' }],
21
- slots: [
22
- { name: 'children', desc: '按钮文本' },
23
- { name: 'icon', desc: '图标' },
24
- ],
25
- a11y: { role: 'button', keyboard: ['Enter', 'Space'] },
26
- tokens: ['--cd-button-*'],
27
- examples: [{ title: '基础', code: '<Button type="primary">确定</Button>' }],
28
- } as const;
@@ -1,51 +0,0 @@
1
- // Calendar a11y:month 模式渲染 role=grid + role=row + columnheader + gridcell;
2
- // 工具栏 prev/next 按钮 locale 可访问名;popup 模式 trigger aria-haspopup/aria-expanded。
3
- import { describe, it, expect } from 'vitest';
4
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
5
- import Calendar from './Calendar.svelte';
6
-
7
- const FIXED = new Date(2024, 5, 15); // 固定锚点,避免随当天漂移。
8
-
9
- describe('Calendar a11y', () => {
10
- it('month 模式:role=grid + columnheader + gridcell,prev/next locale 可访问名,无 axe violations', async () => {
11
- const { container } = renderWithLocale(Calendar, {
12
- props: { mode: 'month', defaultValue: FIXED, ariaLabel: 'Event calendar' },
13
- });
14
- const grid = container.querySelector('[role="grid"]');
15
- expect(grid).not.toBeNull();
16
- expect(grid?.getAttribute('aria-label')).toBeTruthy();
17
- expect(container.querySelectorAll('[role="row"]').length).toBeGreaterThan(0);
18
- expect(container.querySelectorAll('[role="columnheader"]').length).toBe(7);
19
- expect(container.querySelectorAll('[role="gridcell"]').length).toBeGreaterThan(0);
20
-
21
- // 工具栏 prev/next 按钮可访问名来自 en_US locale(两按钮共用 .cd-calendar__nav)。
22
- const navs = container.querySelectorAll('.cd-calendar__nav');
23
- expect(navs.length).toBe(2);
24
- const prevLabel = navs[0]?.getAttribute('aria-label');
25
- const nextLabel = navs[1]?.getAttribute('aria-label');
26
- expect(prevLabel).toBeTruthy();
27
- expect(prevLabel).not.toBe('Calendar.prev');
28
- expect(nextLabel).toBeTruthy();
29
- expect(nextLabel).not.toBe('Calendar.next');
30
- await expectNoAxeViolations(container);
31
- });
32
-
33
- it('选中态:gridcell aria-selected,无 axe violations', async () => {
34
- const { container } = renderWithLocale(Calendar, {
35
- props: { mode: 'month', defaultValue: FIXED, defaultSelectedDate: FIXED, ariaLabel: 'Calendar' },
36
- });
37
- const selected = container.querySelector('[role="gridcell"][aria-selected="true"]');
38
- expect(selected).not.toBeNull();
39
- await expectNoAxeViolations(container);
40
- });
41
-
42
- it('popup 模式:trigger 按钮 aria-haspopup=dialog / aria-expanded=false,无 axe violations', async () => {
43
- const { container } = renderWithLocale(Calendar, {
44
- props: { mode: 'month', defaultValue: FIXED, popup: true, ariaLabel: 'Date picker calendar' },
45
- });
46
- const trigger = container.querySelector('[aria-haspopup="dialog"]');
47
- expect(trigger).not.toBeNull();
48
- expect(trigger?.getAttribute('aria-expanded')).toBe('false');
49
- await expectNoAxeViolations(container);
50
- });
51
- });
@@ -1,59 +0,0 @@
1
- // Calendar 键盘 e2e(browser project / 真实 chromium)。
2
- // Calendar 月视图网格用真实 roving 焦点(≠ DatePicker 的 aria-activedescendant):
3
- // 活动格 tabindex=0、其余 -1,方向键命令式把 DOM 焦点移到目标格(跨月翻页落焦)。
4
- // 故断言真实 .toHaveFocus() + 活动格日号变化(先读源码 focusActiveCell/onGridKeydown 确认)。
5
- // 1. 聚焦活动格(初始 = defaultSelectedDate 2024-03-15)。
6
- // 2. ArrowRight/ArrowDown/Home 真实移动焦点到相邻格,活动格日号随之变化。
7
- // 3. PageDown 切到下一月(标题变化),焦点落到新网格的活动格。
8
- import { describe, it, expect } from 'vitest';
9
- import { page } from 'vitest/browser';
10
- import { renderKbdFixture, userEvent } from '../test-utils/kbd.js';
11
- import CalendarKbdFixture from './CalendarKbdFixture.svelte';
12
-
13
- function loc(el: Element) {
14
- return page.elementLocator(el);
15
- }
16
-
17
- // 当前活动格(tabindex=0 + --active)的日号文本。
18
- function activeDay(grid: HTMLElement): string {
19
- const cell = grid.querySelector<HTMLElement>('.cd-calendar__cell--active');
20
- return cell?.querySelector('.cd-calendar__date')?.textContent?.trim() ?? '';
21
- }
22
-
23
- describe('Calendar 键盘 e2e(月网格 roving 真实焦点)', () => {
24
- it('方向键真实移动焦点到日期格 + Home + PageDown 切月', async () => {
25
- const { baseElement } = renderKbdFixture(CalendarKbdFixture);
26
-
27
- const grid = baseElement.querySelector('[role="grid"]') as HTMLElement;
28
- expect(grid).not.toBeNull();
29
- const title = baseElement.querySelector('.cd-calendar__title') as HTMLElement;
30
- expect(title.textContent).toContain('March');
31
-
32
- // 初始活动格 = 选中日 2024-03-15。
33
- expect(activeDay(grid)).toBe('15');
34
- const activeCell = grid.querySelector('.cd-calendar__cell--active') as HTMLElement;
35
- activeCell.focus();
36
- await expect.element(loc(activeCell)).toHaveFocus();
37
-
38
- // 1. ArrowRight → 16,真实焦点跟随到该格(roving)。
39
- await userEvent.keyboard('{ArrowRight}');
40
- await expect.poll(() => activeDay(grid)).toBe('16');
41
- expect(grid.querySelector('.cd-calendar__cell--active')).toBe(document.activeElement);
42
-
43
- // 2. ArrowDown → +7(23)。
44
- await userEvent.keyboard('{ArrowDown}');
45
- await expect.poll(() => activeDay(grid)).toBe('23');
46
- expect(grid.querySelector('.cd-calendar__cell--active')).toBe(document.activeElement);
47
-
48
- // 3. Home → 本周首日(3/23 是周六,周日起 → 3/17)。
49
- await userEvent.keyboard('{Home}');
50
- await expect.poll(() => activeDay(grid)).toBe('17');
51
-
52
- // 4. PageDown → 切到下一月(4 月),标题变化,焦点落到新网格活动格。
53
- await userEvent.keyboard('{PageDown}');
54
- await expect.poll(() => title.textContent).toContain('April');
55
- // 切月后 DOM 焦点仍落在活动格(4/17)。
56
- await expect.poll(() => activeDay(grid)).toBe('17');
57
- expect(grid.querySelector('.cd-calendar__cell--active')).toBe(document.activeElement);
58
- });
59
- });