@chenzy-design/svelte 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (500) hide show
  1. package/README.md +66 -0
  2. package/dist/badge/Badge.svelte +5 -2
  3. package/dist/badge/Badge.svelte.d.ts.map +1 -1
  4. package/dist/components.json +1 -1
  5. package/package.json +6 -5
  6. package/dist/anchor/Anchor.a11y.test.d.ts +0 -2
  7. package/dist/anchor/Anchor.a11y.test.d.ts.map +0 -1
  8. package/dist/anchor/Anchor.a11y.test.js +0 -44
  9. package/dist/anchor/Anchor.kbd.test.d.ts +0 -2
  10. package/dist/anchor/Anchor.kbd.test.d.ts.map +0 -1
  11. package/dist/anchor/Anchor.kbd.test.js +0 -59
  12. package/dist/anchor/AnchorKbdFixture.svelte +0 -24
  13. package/dist/anchor/AnchorKbdFixture.svelte.d.ts +0 -19
  14. package/dist/anchor/AnchorKbdFixture.svelte.d.ts.map +0 -1
  15. package/dist/autocomplete/AutoComplete.a11y.test.d.ts +0 -2
  16. package/dist/autocomplete/AutoComplete.a11y.test.d.ts.map +0 -1
  17. package/dist/autocomplete/AutoComplete.a11y.test.js +0 -45
  18. package/dist/autocomplete/AutoComplete.kbd.test.d.ts +0 -2
  19. package/dist/autocomplete/AutoComplete.kbd.test.d.ts.map +0 -1
  20. package/dist/autocomplete/AutoComplete.kbd.test.js +0 -60
  21. package/dist/autocomplete/AutoCompleteKbdFixture.svelte +0 -24
  22. package/dist/autocomplete/AutoCompleteKbdFixture.svelte.d.ts +0 -4
  23. package/dist/autocomplete/AutoCompleteKbdFixture.svelte.d.ts.map +0 -1
  24. package/dist/avatar/Avatar.a11y.test.d.ts +0 -2
  25. package/dist/avatar/Avatar.a11y.test.d.ts.map +0 -1
  26. package/dist/avatar/Avatar.a11y.test.js +0 -34
  27. package/dist/back-top/BackTop.a11y.test.d.ts +0 -2
  28. package/dist/back-top/BackTop.a11y.test.d.ts.map +0 -1
  29. package/dist/back-top/BackTop.a11y.test.js +0 -37
  30. package/dist/badge/Badge.a11y.test.d.ts +0 -2
  31. package/dist/badge/Badge.a11y.test.d.ts.map +0 -1
  32. package/dist/badge/Badge.a11y.test.js +0 -32
  33. package/dist/badge/BadgeA11yFixture.svelte +0 -18
  34. package/dist/badge/BadgeA11yFixture.svelte.d.ts +0 -7
  35. package/dist/badge/BadgeA11yFixture.svelte.d.ts.map +0 -1
  36. package/dist/banner/Banner.a11y.test.d.ts +0 -2
  37. package/dist/banner/Banner.a11y.test.d.ts.map +0 -1
  38. package/dist/banner/Banner.a11y.test.js +0 -43
  39. package/dist/breadcrumb/Breadcrumb.a11y.test.d.ts +0 -2
  40. package/dist/breadcrumb/Breadcrumb.a11y.test.d.ts.map +0 -1
  41. package/dist/breadcrumb/Breadcrumb.a11y.test.js +0 -31
  42. package/dist/breadcrumb/Breadcrumb.kbd.test.d.ts +0 -2
  43. package/dist/breadcrumb/Breadcrumb.kbd.test.d.ts.map +0 -1
  44. package/dist/breadcrumb/Breadcrumb.kbd.test.js +0 -37
  45. package/dist/breadcrumb/BreadcrumbKbdFixture.svelte +0 -23
  46. package/dist/breadcrumb/BreadcrumbKbdFixture.svelte.d.ts +0 -19
  47. package/dist/breadcrumb/BreadcrumbKbdFixture.svelte.d.ts.map +0 -1
  48. package/dist/button/Button.a11y.test.d.ts +0 -2
  49. package/dist/button/Button.a11y.test.d.ts.map +0 -1
  50. package/dist/button/Button.a11y.test.js +0 -49
  51. package/dist/calendar/Calendar.a11y.test.d.ts +0 -2
  52. package/dist/calendar/Calendar.a11y.test.d.ts.map +0 -1
  53. package/dist/calendar/Calendar.a11y.test.js +0 -46
  54. package/dist/calendar/Calendar.kbd.test.d.ts +0 -2
  55. package/dist/calendar/Calendar.kbd.test.d.ts.map +0 -1
  56. package/dist/calendar/Calendar.kbd.test.js +0 -50
  57. package/dist/calendar/CalendarKbdFixture.svelte +0 -23
  58. package/dist/calendar/CalendarKbdFixture.svelte.d.ts +0 -19
  59. package/dist/calendar/CalendarKbdFixture.svelte.d.ts.map +0 -1
  60. package/dist/card/Card.a11y.test.d.ts +0 -2
  61. package/dist/card/Card.a11y.test.d.ts.map +0 -1
  62. package/dist/card/Card.a11y.test.js +0 -35
  63. package/dist/carousel/Carousel.a11y.test.d.ts +0 -2
  64. package/dist/carousel/Carousel.a11y.test.d.ts.map +0 -1
  65. package/dist/carousel/Carousel.a11y.test.js +0 -43
  66. package/dist/carousel/Carousel.kbd.test.d.ts +0 -2
  67. package/dist/carousel/Carousel.kbd.test.d.ts.map +0 -1
  68. package/dist/carousel/Carousel.kbd.test.js +0 -51
  69. package/dist/carousel/CarouselA11yFixture.svelte +0 -25
  70. package/dist/carousel/CarouselA11yFixture.svelte.d.ts +0 -8
  71. package/dist/carousel/CarouselA11yFixture.svelte.d.ts.map +0 -1
  72. package/dist/carousel/CarouselKbdFixture.svelte +0 -24
  73. package/dist/carousel/CarouselKbdFixture.svelte.d.ts +0 -19
  74. package/dist/carousel/CarouselKbdFixture.svelte.d.ts.map +0 -1
  75. package/dist/cascader/Cascader.a11y.test.d.ts +0 -2
  76. package/dist/cascader/Cascader.a11y.test.d.ts.map +0 -1
  77. package/dist/cascader/Cascader.a11y.test.js +0 -55
  78. package/dist/cascader/Cascader.kbd.test.d.ts +0 -2
  79. package/dist/cascader/Cascader.kbd.test.d.ts.map +0 -1
  80. package/dist/cascader/Cascader.kbd.test.js +0 -47
  81. package/dist/cascader/CascaderKbdFixture.svelte +0 -31
  82. package/dist/cascader/CascaderKbdFixture.svelte.d.ts +0 -19
  83. package/dist/cascader/CascaderKbdFixture.svelte.d.ts.map +0 -1
  84. package/dist/checkbox/CheckboxGroup.a11y.test.d.ts +0 -2
  85. package/dist/checkbox/CheckboxGroup.a11y.test.d.ts.map +0 -1
  86. package/dist/checkbox/CheckboxGroup.a11y.test.js +0 -38
  87. package/dist/checkbox/CheckboxGroup.kbd.test.d.ts +0 -2
  88. package/dist/checkbox/CheckboxGroup.kbd.test.d.ts.map +0 -1
  89. package/dist/checkbox/CheckboxGroup.kbd.test.js +0 -33
  90. package/dist/checkbox/CheckboxGroupKbdFixture.svelte +0 -20
  91. package/dist/checkbox/CheckboxGroupKbdFixture.svelte.d.ts +0 -19
  92. package/dist/checkbox/CheckboxGroupKbdFixture.svelte.d.ts.map +0 -1
  93. package/dist/collapse/Collapse.a11y.test.d.ts +0 -2
  94. package/dist/collapse/Collapse.a11y.test.d.ts.map +0 -1
  95. package/dist/collapse/Collapse.a11y.test.js +0 -46
  96. package/dist/collapse/Collapse.kbd.test.d.ts +0 -2
  97. package/dist/collapse/Collapse.kbd.test.d.ts.map +0 -1
  98. package/dist/collapse/Collapse.kbd.test.js +0 -70
  99. package/dist/collapse/CollapseA11yFixture.svelte +0 -27
  100. package/dist/collapse/CollapseA11yFixture.svelte.d.ts +0 -9
  101. package/dist/collapse/CollapseA11yFixture.svelte.d.ts.map +0 -1
  102. package/dist/collapse/CollapseKbdFixture.svelte +0 -25
  103. package/dist/collapse/CollapseKbdFixture.svelte.d.ts +0 -19
  104. package/dist/collapse/CollapseKbdFixture.svelte.d.ts.map +0 -1
  105. package/dist/color-picker/ColorPicker.a11y.test.d.ts +0 -2
  106. package/dist/color-picker/ColorPicker.a11y.test.d.ts.map +0 -1
  107. package/dist/color-picker/ColorPicker.a11y.test.js +0 -54
  108. package/dist/color-picker/ColorPicker.kbd.test.d.ts +0 -2
  109. package/dist/color-picker/ColorPicker.kbd.test.d.ts.map +0 -1
  110. package/dist/color-picker/ColorPicker.kbd.test.js +0 -59
  111. package/dist/color-picker/ColorPickerKbdFixture.svelte +0 -25
  112. package/dist/color-picker/ColorPickerKbdFixture.svelte.d.ts +0 -4
  113. package/dist/color-picker/ColorPickerKbdFixture.svelte.d.ts.map +0 -1
  114. package/dist/date-picker/DatePicker.a11y.test.d.ts +0 -2
  115. package/dist/date-picker/DatePicker.a11y.test.d.ts.map +0 -1
  116. package/dist/date-picker/DatePicker.a11y.test.js +0 -42
  117. package/dist/date-picker/DatePicker.kbd.test.d.ts +0 -2
  118. package/dist/date-picker/DatePicker.kbd.test.d.ts.map +0 -1
  119. package/dist/date-picker/DatePicker.kbd.test.js +0 -59
  120. package/dist/date-picker/DatePickerKbdFixture.svelte +0 -26
  121. package/dist/date-picker/DatePickerKbdFixture.svelte.d.ts +0 -4
  122. package/dist/date-picker/DatePickerKbdFixture.svelte.d.ts.map +0 -1
  123. package/dist/date-picker/RangePicker.kbd.test.d.ts +0 -2
  124. package/dist/date-picker/RangePicker.kbd.test.d.ts.map +0 -1
  125. package/dist/date-picker/RangePicker.kbd.test.js +0 -60
  126. package/dist/date-picker/RangePickerKbdFixture.svelte +0 -30
  127. package/dist/date-picker/RangePickerKbdFixture.svelte.d.ts +0 -7
  128. package/dist/date-picker/RangePickerKbdFixture.svelte.d.ts.map +0 -1
  129. package/dist/descriptions/Descriptions.a11y.test.d.ts +0 -2
  130. package/dist/descriptions/Descriptions.a11y.test.d.ts.map +0 -1
  131. package/dist/descriptions/Descriptions.a11y.test.js +0 -31
  132. package/dist/divider/Divider.a11y.test.d.ts +0 -2
  133. package/dist/divider/Divider.a11y.test.d.ts.map +0 -1
  134. package/dist/divider/Divider.a11y.test.js +0 -21
  135. package/dist/drawer/Drawer.a11y.test.d.ts +0 -2
  136. package/dist/drawer/Drawer.a11y.test.d.ts.map +0 -1
  137. package/dist/drawer/Drawer.a11y.test.js +0 -33
  138. package/dist/drawer/Drawer.kbd.test.d.ts +0 -2
  139. package/dist/drawer/Drawer.kbd.test.d.ts.map +0 -1
  140. package/dist/drawer/Drawer.kbd.test.js +0 -53
  141. package/dist/drawer/DrawerKbdFixture.svelte +0 -28
  142. package/dist/drawer/DrawerKbdFixture.svelte.d.ts +0 -4
  143. package/dist/drawer/DrawerKbdFixture.svelte.d.ts.map +0 -1
  144. package/dist/dropdown/Dropdown.a11y.test.d.ts +0 -2
  145. package/dist/dropdown/Dropdown.a11y.test.d.ts.map +0 -1
  146. package/dist/dropdown/Dropdown.a11y.test.js +0 -39
  147. package/dist/dropdown/Dropdown.kbd.test.d.ts +0 -2
  148. package/dist/dropdown/Dropdown.kbd.test.d.ts.map +0 -1
  149. package/dist/dropdown/Dropdown.kbd.test.js +0 -47
  150. package/dist/dropdown/DropdownA11yFixture.svelte +0 -24
  151. package/dist/dropdown/DropdownA11yFixture.svelte.d.ts +0 -11
  152. package/dist/dropdown/DropdownA11yFixture.svelte.d.ts.map +0 -1
  153. package/dist/dropdown/DropdownKbdFixture.svelte +0 -26
  154. package/dist/dropdown/DropdownKbdFixture.svelte.d.ts +0 -19
  155. package/dist/dropdown/DropdownKbdFixture.svelte.d.ts.map +0 -1
  156. package/dist/dropdown/types.test.d.ts +0 -2
  157. package/dist/dropdown/types.test.d.ts.map +0 -1
  158. package/dist/dropdown/types.test.js +0 -40
  159. package/dist/empty/Empty.a11y.test.d.ts +0 -2
  160. package/dist/empty/Empty.a11y.test.d.ts.map +0 -1
  161. package/dist/empty/Empty.a11y.test.js +0 -22
  162. package/dist/form/Form.a11y.test.d.ts +0 -2
  163. package/dist/form/Form.a11y.test.d.ts.map +0 -1
  164. package/dist/form/Form.a11y.test.js +0 -36
  165. package/dist/form/FormA11yFixture.svelte +0 -31
  166. package/dist/form/FormA11yFixture.svelte.d.ts +0 -19
  167. package/dist/form/FormA11yFixture.svelte.d.ts.map +0 -1
  168. package/dist/grid/Grid.a11y.test.d.ts +0 -2
  169. package/dist/grid/Grid.a11y.test.d.ts.map +0 -1
  170. package/dist/grid/Grid.a11y.test.js +0 -13
  171. package/dist/grid/GridA11yFixture.svelte +0 -12
  172. package/dist/grid/GridA11yFixture.svelte.d.ts +0 -19
  173. package/dist/grid/GridA11yFixture.svelte.d.ts.map +0 -1
  174. package/dist/highlight/Highlight.a11y.test.d.ts +0 -2
  175. package/dist/highlight/Highlight.a11y.test.d.ts.map +0 -1
  176. package/dist/highlight/Highlight.a11y.test.js +0 -23
  177. package/dist/image/Image.a11y.test.d.ts +0 -2
  178. package/dist/image/Image.a11y.test.d.ts.map +0 -1
  179. package/dist/image/Image.a11y.test.js +0 -27
  180. package/dist/image/ImagePreview.kbd.test.d.ts +0 -2
  181. package/dist/image/ImagePreview.kbd.test.d.ts.map +0 -1
  182. package/dist/image/ImagePreview.kbd.test.js +0 -44
  183. package/dist/image/ImagePreviewKbdFixture.svelte +0 -32
  184. package/dist/image/ImagePreviewKbdFixture.svelte.d.ts +0 -4
  185. package/dist/image/ImagePreviewKbdFixture.svelte.d.ts.map +0 -1
  186. package/dist/input/Input.a11y.test.d.ts +0 -2
  187. package/dist/input/Input.a11y.test.d.ts.map +0 -1
  188. package/dist/input/Input.a11y.test.js +0 -53
  189. package/dist/input-number/InputNumber.a11y.test.d.ts +0 -2
  190. package/dist/input-number/InputNumber.a11y.test.d.ts.map +0 -1
  191. package/dist/input-number/InputNumber.a11y.test.js +0 -40
  192. package/dist/input-number/InputNumber.kbd.test.d.ts +0 -2
  193. package/dist/input-number/InputNumber.kbd.test.d.ts.map +0 -1
  194. package/dist/input-number/InputNumber.kbd.test.js +0 -35
  195. package/dist/input-number/InputNumberKbdFixture.svelte +0 -15
  196. package/dist/input-number/InputNumberKbdFixture.svelte.d.ts +0 -19
  197. package/dist/input-number/InputNumberKbdFixture.svelte.d.ts.map +0 -1
  198. package/dist/layout/Layout.a11y.test.d.ts +0 -2
  199. package/dist/layout/Layout.a11y.test.d.ts.map +0 -1
  200. package/dist/layout/Layout.a11y.test.js +0 -32
  201. package/dist/layout/LayoutA11yFixture.svelte +0 -21
  202. package/dist/layout/LayoutA11yFixture.svelte.d.ts +0 -7
  203. package/dist/layout/LayoutA11yFixture.svelte.d.ts.map +0 -1
  204. package/dist/list/List.a11y.test.d.ts +0 -2
  205. package/dist/list/List.a11y.test.d.ts.map +0 -1
  206. package/dist/list/List.a11y.test.js +0 -62
  207. package/dist/list/List.bench.d.ts +0 -2
  208. package/dist/list/List.bench.d.ts.map +0 -1
  209. package/dist/list/List.bench.js +0 -16
  210. package/dist/list/List.kbd.test.d.ts +0 -2
  211. package/dist/list/List.kbd.test.d.ts.map +0 -1
  212. package/dist/list/List.kbd.test.js +0 -60
  213. package/dist/list/ListA11yFixture.svelte +0 -38
  214. package/dist/list/ListA11yFixture.svelte.d.ts +0 -10
  215. package/dist/list/ListA11yFixture.svelte.d.ts.map +0 -1
  216. package/dist/list/ListBenchFixture.svelte +0 -22
  217. package/dist/list/ListBenchFixture.svelte.d.ts +0 -7
  218. package/dist/list/ListBenchFixture.svelte.d.ts.map +0 -1
  219. package/dist/list/ListKbdFixture.svelte +0 -31
  220. package/dist/list/ListKbdFixture.svelte.d.ts +0 -19
  221. package/dist/list/ListKbdFixture.svelte.d.ts.map +0 -1
  222. package/dist/menu/Menu.a11y.test.d.ts +0 -2
  223. package/dist/menu/Menu.a11y.test.d.ts.map +0 -1
  224. package/dist/menu/Menu.a11y.test.js +0 -49
  225. package/dist/menu/Menu.kbd.test.d.ts +0 -2
  226. package/dist/menu/Menu.kbd.test.d.ts.map +0 -1
  227. package/dist/menu/Menu.kbd.test.js +0 -56
  228. package/dist/menu/MenuKbdFixture.svelte +0 -22
  229. package/dist/menu/MenuKbdFixture.svelte.d.ts +0 -19
  230. package/dist/menu/MenuKbdFixture.svelte.d.ts.map +0 -1
  231. package/dist/meta.test.d.ts +0 -2
  232. package/dist/meta.test.d.ts.map +0 -1
  233. package/dist/meta.test.js +0 -164
  234. package/dist/modal/Modal.a11y.test.d.ts +0 -2
  235. package/dist/modal/Modal.a11y.test.d.ts.map +0 -1
  236. package/dist/modal/Modal.a11y.test.js +0 -38
  237. package/dist/modal/Modal.kbd.test.d.ts +0 -2
  238. package/dist/modal/Modal.kbd.test.d.ts.map +0 -1
  239. package/dist/modal/Modal.kbd.test.js +0 -52
  240. package/dist/modal/ModalKbdFixture.svelte +0 -24
  241. package/dist/modal/ModalKbdFixture.svelte.d.ts +0 -4
  242. package/dist/modal/ModalKbdFixture.svelte.d.ts.map +0 -1
  243. package/dist/notification/NotificationItem.a11y.test.d.ts +0 -2
  244. package/dist/notification/NotificationItem.a11y.test.d.ts.map +0 -1
  245. package/dist/notification/NotificationItem.a11y.test.js +0 -64
  246. package/dist/overflow-list/OverflowList.a11y.test.d.ts +0 -2
  247. package/dist/overflow-list/OverflowList.a11y.test.d.ts.map +0 -1
  248. package/dist/overflow-list/OverflowList.a11y.test.js +0 -41
  249. package/dist/overflow-list/OverflowList.kbd.test.d.ts +0 -2
  250. package/dist/overflow-list/OverflowList.kbd.test.d.ts.map +0 -1
  251. package/dist/overflow-list/OverflowList.kbd.test.js +0 -28
  252. package/dist/overflow-list/OverflowListA11yFixture.svelte +0 -22
  253. package/dist/overflow-list/OverflowListA11yFixture.svelte.d.ts +0 -8
  254. package/dist/overflow-list/OverflowListA11yFixture.svelte.d.ts.map +0 -1
  255. package/dist/overflow-list/OverflowListKbdFixture.svelte +0 -21
  256. package/dist/overflow-list/OverflowListKbdFixture.svelte.d.ts +0 -19
  257. package/dist/overflow-list/OverflowListKbdFixture.svelte.d.ts.map +0 -1
  258. package/dist/pagination/Pagination.a11y.test.d.ts +0 -2
  259. package/dist/pagination/Pagination.a11y.test.d.ts.map +0 -1
  260. package/dist/pagination/Pagination.a11y.test.js +0 -57
  261. package/dist/pagination/Pagination.kbd.test.d.ts +0 -2
  262. package/dist/pagination/Pagination.kbd.test.d.ts.map +0 -1
  263. package/dist/pagination/Pagination.kbd.test.js +0 -54
  264. package/dist/pagination/PaginationKbdFixture.svelte +0 -15
  265. package/dist/pagination/PaginationKbdFixture.svelte.d.ts +0 -19
  266. package/dist/pagination/PaginationKbdFixture.svelte.d.ts.map +0 -1
  267. package/dist/popconfirm/Popconfirm.a11y.test.d.ts +0 -2
  268. package/dist/popconfirm/Popconfirm.a11y.test.d.ts.map +0 -1
  269. package/dist/popconfirm/Popconfirm.a11y.test.js +0 -37
  270. package/dist/popconfirm/Popconfirm.kbd.test.d.ts +0 -2
  271. package/dist/popconfirm/Popconfirm.kbd.test.d.ts.map +0 -1
  272. package/dist/popconfirm/Popconfirm.kbd.test.js +0 -36
  273. package/dist/popconfirm/PopconfirmA11yFixture.svelte +0 -34
  274. package/dist/popconfirm/PopconfirmA11yFixture.svelte.d.ts +0 -11
  275. package/dist/popconfirm/PopconfirmA11yFixture.svelte.d.ts.map +0 -1
  276. package/dist/popconfirm/PopconfirmKbdFixture.svelte +0 -17
  277. package/dist/popconfirm/PopconfirmKbdFixture.svelte.d.ts +0 -19
  278. package/dist/popconfirm/PopconfirmKbdFixture.svelte.d.ts.map +0 -1
  279. package/dist/popover/Popover.a11y.test.d.ts +0 -2
  280. package/dist/popover/Popover.a11y.test.d.ts.map +0 -1
  281. package/dist/popover/Popover.a11y.test.js +0 -47
  282. package/dist/popover/Popover.kbd.test.d.ts +0 -2
  283. package/dist/popover/Popover.kbd.test.d.ts.map +0 -1
  284. package/dist/popover/Popover.kbd.test.js +0 -36
  285. package/dist/popover/PopoverA11yFixture.svelte +0 -35
  286. package/dist/popover/PopoverA11yFixture.svelte.d.ts +0 -11
  287. package/dist/popover/PopoverA11yFixture.svelte.d.ts.map +0 -1
  288. package/dist/popover/PopoverKbdFixture.svelte +0 -18
  289. package/dist/popover/PopoverKbdFixture.svelte.d.ts +0 -19
  290. package/dist/popover/PopoverKbdFixture.svelte.d.ts.map +0 -1
  291. package/dist/progress/Progress.a11y.test.d.ts +0 -2
  292. package/dist/progress/Progress.a11y.test.d.ts.map +0 -1
  293. package/dist/progress/Progress.a11y.test.js +0 -34
  294. package/dist/radio/RadioGroup.a11y.test.d.ts +0 -2
  295. package/dist/radio/RadioGroup.a11y.test.d.ts.map +0 -1
  296. package/dist/radio/RadioGroup.a11y.test.js +0 -38
  297. package/dist/radio/RadioGroup.kbd.test.d.ts +0 -2
  298. package/dist/radio/RadioGroup.kbd.test.d.ts.map +0 -1
  299. package/dist/radio/RadioGroup.kbd.test.js +0 -59
  300. package/dist/radio/RadioGroupKbdFixture.svelte +0 -21
  301. package/dist/radio/RadioGroupKbdFixture.svelte.d.ts +0 -19
  302. package/dist/radio/RadioGroupKbdFixture.svelte.d.ts.map +0 -1
  303. package/dist/rating/Rating.a11y.test.d.ts +0 -2
  304. package/dist/rating/Rating.a11y.test.d.ts.map +0 -1
  305. package/dist/rating/Rating.a11y.test.js +0 -38
  306. package/dist/rating/Rating.kbd.test.d.ts +0 -2
  307. package/dist/rating/Rating.kbd.test.d.ts.map +0 -1
  308. package/dist/rating/Rating.kbd.test.js +0 -41
  309. package/dist/rating/RatingKbdFixture.svelte +0 -15
  310. package/dist/rating/RatingKbdFixture.svelte.d.ts +0 -19
  311. package/dist/rating/RatingKbdFixture.svelte.d.ts.map +0 -1
  312. package/dist/select/Select.a11y.test.d.ts +0 -2
  313. package/dist/select/Select.a11y.test.d.ts.map +0 -1
  314. package/dist/select/Select.a11y.test.js +0 -53
  315. package/dist/select/Select.kbd.test.d.ts +0 -2
  316. package/dist/select/Select.kbd.test.d.ts.map +0 -1
  317. package/dist/select/Select.kbd.test.js +0 -47
  318. package/dist/select/SelectKbdFixture.svelte +0 -29
  319. package/dist/select/SelectKbdFixture.svelte.d.ts +0 -4
  320. package/dist/select/SelectKbdFixture.svelte.d.ts.map +0 -1
  321. package/dist/side-sheet/SideSheet.a11y.test.d.ts +0 -2
  322. package/dist/side-sheet/SideSheet.a11y.test.d.ts.map +0 -1
  323. package/dist/side-sheet/SideSheet.a11y.test.js +0 -46
  324. package/dist/side-sheet/SideSheet.kbd.test.d.ts +0 -2
  325. package/dist/side-sheet/SideSheet.kbd.test.d.ts.map +0 -1
  326. package/dist/side-sheet/SideSheet.kbd.test.js +0 -49
  327. package/dist/side-sheet/SideSheetKbdFixture.svelte +0 -30
  328. package/dist/side-sheet/SideSheetKbdFixture.svelte.d.ts +0 -4
  329. package/dist/side-sheet/SideSheetKbdFixture.svelte.d.ts.map +0 -1
  330. package/dist/skeleton/Skeleton.a11y.test.d.ts +0 -2
  331. package/dist/skeleton/Skeleton.a11y.test.d.ts.map +0 -1
  332. package/dist/skeleton/Skeleton.a11y.test.js +0 -32
  333. package/dist/slider/Slider.a11y.test.d.ts +0 -2
  334. package/dist/slider/Slider.a11y.test.d.ts.map +0 -1
  335. package/dist/slider/Slider.a11y.test.js +0 -40
  336. package/dist/slider/Slider.kbd.test.d.ts +0 -2
  337. package/dist/slider/Slider.kbd.test.d.ts.map +0 -1
  338. package/dist/slider/Slider.kbd.test.js +0 -63
  339. package/dist/slider/SliderKbdFixture.svelte +0 -21
  340. package/dist/slider/SliderKbdFixture.svelte.d.ts +0 -19
  341. package/dist/slider/SliderKbdFixture.svelte.d.ts.map +0 -1
  342. package/dist/space/Space.a11y.test.d.ts +0 -2
  343. package/dist/space/Space.a11y.test.d.ts.map +0 -1
  344. package/dist/space/Space.a11y.test.js +0 -20
  345. package/dist/space/SpaceA11yFixture.svelte +0 -17
  346. package/dist/space/SpaceA11yFixture.svelte.d.ts +0 -7
  347. package/dist/space/SpaceA11yFixture.svelte.d.ts.map +0 -1
  348. package/dist/spin/Spin.a11y.test.d.ts +0 -2
  349. package/dist/spin/Spin.a11y.test.d.ts.map +0 -1
  350. package/dist/spin/Spin.a11y.test.js +0 -27
  351. package/dist/spin/SpinA11yFixture.svelte +0 -18
  352. package/dist/spin/SpinA11yFixture.svelte.d.ts +0 -7
  353. package/dist/spin/SpinA11yFixture.svelte.d.ts.map +0 -1
  354. package/dist/steps/Steps.a11y.test.d.ts +0 -2
  355. package/dist/steps/Steps.a11y.test.d.ts.map +0 -1
  356. package/dist/steps/Steps.a11y.test.js +0 -35
  357. package/dist/steps/Steps.kbd.test.d.ts +0 -2
  358. package/dist/steps/Steps.kbd.test.d.ts.map +0 -1
  359. package/dist/steps/Steps.kbd.test.js +0 -59
  360. package/dist/steps/StepsKbdFixture.svelte +0 -21
  361. package/dist/steps/StepsKbdFixture.svelte.d.ts +0 -19
  362. package/dist/steps/StepsKbdFixture.svelte.d.ts.map +0 -1
  363. package/dist/switch/Switch.a11y.test.d.ts +0 -2
  364. package/dist/switch/Switch.a11y.test.d.ts.map +0 -1
  365. package/dist/switch/Switch.a11y.test.js +0 -42
  366. package/dist/switch/Switch.kbd.test.d.ts +0 -2
  367. package/dist/switch/Switch.kbd.test.d.ts.map +0 -1
  368. package/dist/switch/Switch.kbd.test.js +0 -34
  369. package/dist/switch/SwitchKbdFixture.svelte +0 -22
  370. package/dist/switch/SwitchKbdFixture.svelte.d.ts +0 -4
  371. package/dist/switch/SwitchKbdFixture.svelte.d.ts.map +0 -1
  372. package/dist/table/Table.a11y.test.d.ts +0 -2
  373. package/dist/table/Table.a11y.test.d.ts.map +0 -1
  374. package/dist/table/Table.a11y.test.js +0 -59
  375. package/dist/table/Table.bench.d.ts +0 -2
  376. package/dist/table/Table.bench.d.ts.map +0 -1
  377. package/dist/table/Table.bench.js +0 -31
  378. package/dist/table/Table.kbd.test.d.ts +0 -2
  379. package/dist/table/Table.kbd.test.d.ts.map +0 -1
  380. package/dist/table/Table.kbd.test.js +0 -74
  381. package/dist/table/TableKbdFixture.svelte +0 -35
  382. package/dist/table/TableKbdFixture.svelte.d.ts +0 -19
  383. package/dist/table/TableKbdFixture.svelte.d.ts.map +0 -1
  384. package/dist/table/grid-nav.test.d.ts +0 -2
  385. package/dist/table/grid-nav.test.d.ts.map +0 -1
  386. package/dist/table/grid-nav.test.js +0 -133
  387. package/dist/tabs/Tabs.a11y.test.d.ts +0 -2
  388. package/dist/tabs/Tabs.a11y.test.d.ts.map +0 -1
  389. package/dist/tabs/Tabs.a11y.test.js +0 -43
  390. package/dist/tabs/Tabs.kbd.test.d.ts +0 -2
  391. package/dist/tabs/Tabs.kbd.test.d.ts.map +0 -1
  392. package/dist/tabs/Tabs.kbd.test.js +0 -63
  393. package/dist/tabs/TabsA11yFixture.svelte +0 -20
  394. package/dist/tabs/TabsA11yFixture.svelte.d.ts +0 -8
  395. package/dist/tabs/TabsA11yFixture.svelte.d.ts.map +0 -1
  396. package/dist/tabs/TabsKbdFixture.svelte +0 -25
  397. package/dist/tabs/TabsKbdFixture.svelte.d.ts +0 -7
  398. package/dist/tabs/TabsKbdFixture.svelte.d.ts.map +0 -1
  399. package/dist/tag/Tag.a11y.test.d.ts +0 -2
  400. package/dist/tag/Tag.a11y.test.d.ts.map +0 -1
  401. package/dist/tag/Tag.a11y.test.js +0 -30
  402. package/dist/tag/TagA11yFixture.svelte +0 -18
  403. package/dist/tag/TagA11yFixture.svelte.d.ts +0 -8
  404. package/dist/tag/TagA11yFixture.svelte.d.ts.map +0 -1
  405. package/dist/tag-input/TagInput.a11y.test.d.ts +0 -2
  406. package/dist/tag-input/TagInput.a11y.test.d.ts.map +0 -1
  407. package/dist/tag-input/TagInput.a11y.test.js +0 -38
  408. package/dist/tag-input/reorder.test.d.ts +0 -2
  409. package/dist/tag-input/reorder.test.d.ts.map +0 -1
  410. package/dist/tag-input/reorder.test.js +0 -48
  411. package/dist/test-utils/LocaleHarness.svelte +0 -29
  412. package/dist/test-utils/LocaleHarness.svelte.d.ts +0 -11
  413. package/dist/test-utils/LocaleHarness.svelte.d.ts.map +0 -1
  414. package/dist/test-utils/a11y.d.ts +0 -36
  415. package/dist/test-utils/a11y.d.ts.map +0 -1
  416. package/dist/test-utils/a11y.js +0 -68
  417. package/dist/test-utils/kbd.d.ts +0 -26
  418. package/dist/test-utils/kbd.d.ts.map +0 -1
  419. package/dist/test-utils/kbd.js +0 -38
  420. package/dist/textarea/TextArea.a11y.test.d.ts +0 -2
  421. package/dist/textarea/TextArea.a11y.test.d.ts.map +0 -1
  422. package/dist/textarea/TextArea.a11y.test.js +0 -41
  423. package/dist/time-picker/TimePicker.a11y.test.d.ts +0 -2
  424. package/dist/time-picker/TimePicker.a11y.test.d.ts.map +0 -1
  425. package/dist/time-picker/TimePicker.a11y.test.js +0 -42
  426. package/dist/time-picker/TimePicker.kbd.test.d.ts +0 -2
  427. package/dist/time-picker/TimePicker.kbd.test.d.ts.map +0 -1
  428. package/dist/time-picker/TimePicker.kbd.test.js +0 -59
  429. package/dist/time-picker/TimePickerKbdFixture.svelte +0 -23
  430. package/dist/time-picker/TimePickerKbdFixture.svelte.d.ts +0 -4
  431. package/dist/time-picker/TimePickerKbdFixture.svelte.d.ts.map +0 -1
  432. package/dist/timeline/Timeline.a11y.test.d.ts +0 -2
  433. package/dist/timeline/Timeline.a11y.test.d.ts.map +0 -1
  434. package/dist/timeline/Timeline.a11y.test.js +0 -51
  435. package/dist/toast/Toast.a11y.test.d.ts +0 -2
  436. package/dist/toast/Toast.a11y.test.d.ts.map +0 -1
  437. package/dist/toast/Toast.a11y.test.js +0 -58
  438. package/dist/tooltip/Tooltip.a11y.test.d.ts +0 -2
  439. package/dist/tooltip/Tooltip.a11y.test.d.ts.map +0 -1
  440. package/dist/tooltip/Tooltip.a11y.test.js +0 -33
  441. package/dist/tooltip/Tooltip.kbd.test.d.ts +0 -2
  442. package/dist/tooltip/Tooltip.kbd.test.d.ts.map +0 -1
  443. package/dist/tooltip/Tooltip.kbd.test.js +0 -31
  444. package/dist/tooltip/TooltipA11yFixture.svelte +0 -31
  445. package/dist/tooltip/TooltipA11yFixture.svelte.d.ts +0 -11
  446. package/dist/tooltip/TooltipA11yFixture.svelte.d.ts.map +0 -1
  447. package/dist/tooltip/TooltipKbdFixture.svelte +0 -16
  448. package/dist/tooltip/TooltipKbdFixture.svelte.d.ts +0 -19
  449. package/dist/tooltip/TooltipKbdFixture.svelte.d.ts.map +0 -1
  450. package/dist/transfer/Transfer.a11y.test.d.ts +0 -2
  451. package/dist/transfer/Transfer.a11y.test.d.ts.map +0 -1
  452. package/dist/transfer/Transfer.a11y.test.js +0 -59
  453. package/dist/transfer/Transfer.kbd.test.d.ts +0 -2
  454. package/dist/transfer/Transfer.kbd.test.d.ts.map +0 -1
  455. package/dist/transfer/Transfer.kbd.test.js +0 -64
  456. package/dist/transfer/TransferKbdFixture.svelte +0 -23
  457. package/dist/transfer/TransferKbdFixture.svelte.d.ts +0 -4
  458. package/dist/transfer/TransferKbdFixture.svelte.d.ts.map +0 -1
  459. package/dist/transfer/group.test.d.ts +0 -2
  460. package/dist/transfer/group.test.d.ts.map +0 -1
  461. package/dist/transfer/group.test.js +0 -47
  462. package/dist/transfer/reorder.test.d.ts +0 -2
  463. package/dist/transfer/reorder.test.d.ts.map +0 -1
  464. package/dist/transfer/reorder.test.js +0 -42
  465. package/dist/transfer/tree.test.d.ts +0 -2
  466. package/dist/transfer/tree.test.d.ts.map +0 -1
  467. package/dist/transfer/tree.test.js +0 -39
  468. package/dist/tree/Tree.a11y.test.d.ts +0 -2
  469. package/dist/tree/Tree.a11y.test.d.ts.map +0 -1
  470. package/dist/tree/Tree.a11y.test.js +0 -56
  471. package/dist/tree/Tree.kbd.test.d.ts +0 -2
  472. package/dist/tree/Tree.kbd.test.d.ts.map +0 -1
  473. package/dist/tree/Tree.kbd.test.js +0 -78
  474. package/dist/tree/TreeKbdFixture.svelte +0 -30
  475. package/dist/tree/TreeKbdFixture.svelte.d.ts +0 -19
  476. package/dist/tree/TreeKbdFixture.svelte.d.ts.map +0 -1
  477. package/dist/tree-select/TreeSelect.a11y.test.d.ts +0 -2
  478. package/dist/tree-select/TreeSelect.a11y.test.d.ts.map +0 -1
  479. package/dist/tree-select/TreeSelect.a11y.test.js +0 -48
  480. package/dist/tree-select/TreeSelect.kbd.test.d.ts +0 -2
  481. package/dist/tree-select/TreeSelect.kbd.test.d.ts.map +0 -1
  482. package/dist/tree-select/TreeSelect.kbd.test.js +0 -46
  483. package/dist/tree-select/TreeSelectKbdFixture.svelte +0 -20
  484. package/dist/tree-select/TreeSelectKbdFixture.svelte.d.ts +0 -19
  485. package/dist/tree-select/TreeSelectKbdFixture.svelte.d.ts.map +0 -1
  486. package/dist/tree-select/virtual.test.d.ts +0 -2
  487. package/dist/tree-select/virtual.test.d.ts.map +0 -1
  488. package/dist/tree-select/virtual.test.js +0 -86
  489. package/dist/typography/Typography.a11y.test.d.ts +0 -2
  490. package/dist/typography/Typography.a11y.test.d.ts.map +0 -1
  491. package/dist/typography/Typography.a11y.test.js +0 -31
  492. package/dist/typography/TypographyA11yFixture.svelte +0 -27
  493. package/dist/typography/TypographyA11yFixture.svelte.d.ts +0 -9
  494. package/dist/typography/TypographyA11yFixture.svelte.d.ts.map +0 -1
  495. package/dist/upload/Upload.a11y.test.d.ts +0 -2
  496. package/dist/upload/Upload.a11y.test.d.ts.map +0 -1
  497. package/dist/upload/Upload.a11y.test.js +0 -49
  498. package/dist/upload/UploadA11yFixture.svelte +0 -23
  499. package/dist/upload/UploadA11yFixture.svelte.d.ts +0 -10
  500. package/dist/upload/UploadA11yFixture.svelte.d.ts.map +0 -1
@@ -1,25 +0,0 @@
1
- <!--
2
- 仅供 Tabs.kbd.test.ts(browser project)使用的 tablist roving 键盘 e2e 夹具。
3
- 声明式 <Tabs.Pane> 用法:tab 的 aria-controls 指向真实面板,面板按 activeKey 显隐,
4
- 便于断言 keyboardActivation='auto'(默认)下「焦点移动即激活」。
5
- 菜单前后各放一个按钮,用于验证 roving 单停靠点(Tab 只进一个 tab,其余 tabindex=-1)。
6
- -->
7
- <script lang="ts">
8
- import { LocaleProvider } from '../locale-provider/index.js';
9
- import { Tabs } from './index.js';
10
-
11
- interface Props {
12
- defaultValue?: string;
13
- }
14
- let { defaultValue = 'overview' }: Props = $props();
15
- </script>
16
-
17
- <LocaleProvider locale="en_US">
18
- <button type="button" data-testid="before">before</button>
19
- <Tabs {defaultValue} type="line">
20
- <Tabs.Pane itemKey="overview" tab="Overview">Overview content</Tabs.Pane>
21
- <Tabs.Pane itemKey="details" tab="Details">Details content</Tabs.Pane>
22
- <Tabs.Pane itemKey="history" tab="History">History content</Tabs.Pane>
23
- </Tabs>
24
- <button type="button" data-testid="after">after</button>
25
- </LocaleProvider>
@@ -1,7 +0,0 @@
1
- interface Props {
2
- defaultValue?: string;
3
- }
4
- declare const TabsKbdFixture: import("svelte").Component<Props, {}, "">;
5
- type TabsKbdFixture = ReturnType<typeof TabsKbdFixture>;
6
- export default TabsKbdFixture;
7
- //# sourceMappingURL=TabsKbdFixture.svelte.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TabsKbdFixture.svelte.d.ts","sourceRoot":"","sources":["../../src/tabs/TabsKbdFixture.svelte.ts"],"names":[],"mappings":"AAOE,UAAU,KAAK;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAqBH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=Tag.a11y.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Tag.a11y.test.d.ts","sourceRoot":"","sources":["../../src/tag/Tag.a11y.test.ts"],"names":[],"mappings":""}
@@ -1,30 +0,0 @@
1
- // Tag a11y:closable 关闭按钮有可访问名(locale 派生);checkable 取 role=checkbox + aria-checked。
2
- // 经 TagA11yFixture 提供真实文本 children(自带 LocaleProvider,故直接 render)。
3
- import { describe, it, expect } from 'vitest';
4
- import { render } from '@testing-library/svelte';
5
- import { expectNoAxeViolations } from '../test-utils/a11y.js';
6
- import TagA11yFixture from './TagA11yFixture.svelte';
7
- describe('Tag a11y', () => {
8
- it('基础:渲染文本内容,无 axe violations', async () => {
9
- const { container } = render(TagA11yFixture, { props: { text: 'Done' } });
10
- expect(container.querySelector('.cd-tag')?.textContent).toContain('Done');
11
- await expectNoAxeViolations(container);
12
- });
13
- it('closable:关闭按钮带 aria-label(来自 locale),无 axe violations', async () => {
14
- const { container } = render(TagA11yFixture, {
15
- props: { text: 'Done', props: { closable: true, tagText: 'Done' } },
16
- });
17
- const closeBtn = container.querySelector('.cd-tag__close');
18
- expect(closeBtn?.getAttribute('aria-label')).toBeTruthy();
19
- await expectNoAxeViolations(container);
20
- });
21
- it('checkable:role=checkbox + aria-checked,无 axe violations', async () => {
22
- const { container } = render(TagA11yFixture, {
23
- props: { text: 'Filter', props: { checkable: true, checked: true } },
24
- });
25
- const root = container.querySelector('.cd-tag');
26
- expect(root?.getAttribute('role')).toBe('checkbox');
27
- expect(root?.getAttribute('aria-checked')).toBe('true');
28
- await expectNoAxeViolations(container);
29
- });
30
- });
@@ -1,18 +0,0 @@
1
- <!--
2
- Tag a11y 测试夹具:提供真实文本 children(createRawSnippet 在 harness 下不渲染文本)。
3
- 自带 LocaleProvider,故测试直接 render 本夹具。
4
- -->
5
- <script lang="ts">
6
- import { LocaleProvider } from '../locale-provider/index.js';
7
- import Tag from './Tag.svelte';
8
-
9
- interface Props {
10
- text?: string;
11
- props?: Record<string, unknown>;
12
- }
13
- let { text = 'Done', props = {} }: Props = $props();
14
- </script>
15
-
16
- <LocaleProvider locale="en_US">
17
- <Tag {...props}>{text}</Tag>
18
- </LocaleProvider>
@@ -1,8 +0,0 @@
1
- interface Props {
2
- text?: string;
3
- props?: Record<string, unknown>;
4
- }
5
- declare const TagA11yFixture: import("svelte").Component<Props, {}, "">;
6
- type TagA11yFixture = ReturnType<typeof TagA11yFixture>;
7
- export default TagA11yFixture;
8
- //# sourceMappingURL=TagA11yFixture.svelte.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TagA11yFixture.svelte.d.ts","sourceRoot":"","sources":["../../src/tag/TagA11yFixture.svelte.ts"],"names":[],"mappings":"AAOE,UAAU,KAAK;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAeH,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=TagInput.a11y.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TagInput.a11y.test.d.ts","sourceRoot":"","sources":["../../src/tag-input/TagInput.a11y.test.ts"],"names":[],"mappings":""}
@@ -1,38 +0,0 @@
1
- // TagInput a11y:role=group + ariaLabel 容器可访问名;输入框可访问名;
2
- // 标签删除按钮 locale 可访问名。
3
- import { describe, it, expect } from 'vitest';
4
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
5
- import TagInput from './TagInput.svelte';
6
- describe('TagInput a11y', () => {
7
- it('默认渲染:role=group + ariaLabel,输入框有可访问名,无 axe violations', async () => {
8
- const { container } = renderWithLocale(TagInput, {
9
- props: { ariaLabel: 'Tags', placeholder: 'Add tag' },
10
- });
11
- const group = container.querySelector('[role="group"]');
12
- expect(group).not.toBeNull();
13
- expect(group?.getAttribute('aria-label')).toBe('Tags');
14
- // 输入框同样以 ariaLabel 暴露可访问名(无可见 label)。
15
- const input = container.querySelector('input');
16
- expect(input?.getAttribute('aria-label')).toBe('Tags');
17
- await expectNoAxeViolations(container);
18
- });
19
- it('已有标签:删除按钮 locale 可访问名,无 axe violations', async () => {
20
- const { container } = renderWithLocale(TagInput, {
21
- props: { ariaLabel: 'Skills', defaultValue: ['svelte', 'a11y'] },
22
- });
23
- const removeBtns = container.querySelectorAll('.cd-tag-input__remove');
24
- expect(removeBtns.length).toBe(2);
25
- const label = removeBtns[0]?.getAttribute('aria-label');
26
- expect(label).toBeTruthy();
27
- expect(label).not.toBe('TagInput.remove');
28
- await expectNoAxeViolations(container);
29
- });
30
- it('disabled:aria-disabled=true,无 axe violations', async () => {
31
- const { container } = renderWithLocale(TagInput, {
32
- props: { ariaLabel: 'Tags', defaultValue: ['a'], disabled: true },
33
- });
34
- const group = container.querySelector('[role="group"]');
35
- expect(group?.getAttribute('aria-disabled')).toBe('true');
36
- await expectNoAxeViolations(container);
37
- });
38
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=reorder.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reorder.test.d.ts","sourceRoot":"","sources":["../../src/tag-input/reorder.test.ts"],"names":[],"mappings":""}
@@ -1,48 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { computeInsertSide, reorder } from './reorder.js';
3
- describe('tag-input/reorder', () => {
4
- describe('computeInsertSide', () => {
5
- it('left half → before', () => {
6
- expect(computeInsertSide(0, 100)).toBe('before');
7
- expect(computeInsertSide(49, 100)).toBe('before');
8
- });
9
- it('mid and right half → after', () => {
10
- expect(computeInsertSide(50, 100)).toBe('after');
11
- expect(computeInsertSide(99, 100)).toBe('after');
12
- });
13
- });
14
- describe('reorder', () => {
15
- const list = ['a', 'b', 'c', 'd'];
16
- it('moves an item forward (before a later target)', () => {
17
- expect(reorder(list, 0, 2, 'before')).toEqual(['b', 'a', 'c', 'd']);
18
- });
19
- it('moves an item forward (after a later target)', () => {
20
- expect(reorder(list, 0, 2, 'after')).toEqual(['b', 'c', 'a', 'd']);
21
- });
22
- it('moves an item backward (before an earlier target)', () => {
23
- expect(reorder(list, 3, 1, 'before')).toEqual(['a', 'd', 'b', 'c']);
24
- });
25
- it('moves an item backward (after an earlier target)', () => {
26
- expect(reorder(list, 3, 1, 'after')).toEqual(['a', 'b', 'd', 'c']);
27
- });
28
- it('moves to the very end', () => {
29
- expect(reorder(list, 0, 3, 'after')).toEqual(['b', 'c', 'd', 'a']);
30
- });
31
- it('moves to the very start', () => {
32
- expect(reorder(list, 3, 0, 'before')).toEqual(['d', 'a', 'b', 'c']);
33
- });
34
- it('no-op when result position equals source (drop after previous neighbor)', () => {
35
- expect(reorder(list, 1, 0, 'after')).toEqual(list);
36
- expect(reorder(list, 1, 2, 'before')).toEqual(list);
37
- });
38
- it('returns a new array (immutable)', () => {
39
- const out = reorder(list, 0, 1, 'after');
40
- expect(out).not.toBe(list);
41
- expect(list).toEqual(['a', 'b', 'c', 'd']);
42
- });
43
- it('out-of-range indices return a copy unchanged', () => {
44
- expect(reorder(list, -1, 2, 'before')).toEqual(list);
45
- expect(reorder(list, 0, 9, 'after')).toEqual(list);
46
- });
47
- });
48
- });
@@ -1,29 +0,0 @@
1
- <!--
2
- LocaleHarness — a11y 测试专用包装组件。
3
- 把被测组件包进 <LocaleProvider>,使 useLocale() 能拿到 context(默认 en_US)。
4
- 通过 component prop 接收被测组件构造器,props 透传,children 作为默认插槽渲染。
5
- 注意:仅用于测试,不对外导出。
6
- -->
7
- <script lang="ts">
8
- import type { Component, Snippet } from 'svelte';
9
- import { LocaleProvider } from '../locale-provider/index.js';
10
-
11
- interface Props {
12
- // 被测组件构造器(Svelte 5 Component)。
13
- component: Component<any>;
14
- // 透传给被测组件的 props。
15
- props?: Record<string, unknown>;
16
- // 语言码,默认 en_US。
17
- locale?: string;
18
- // 默认插槽内容(如 Button 的文字)。
19
- children?: Snippet;
20
- }
21
-
22
- let { component: Cmp, props = {}, locale = 'en_US', children }: Props = $props();
23
- </script>
24
-
25
- <LocaleProvider {locale}>
26
- <Cmp {...props}>
27
- {#if children}{@render children()}{/if}
28
- </Cmp>
29
- </LocaleProvider>
@@ -1,11 +0,0 @@
1
- import type { Component, Snippet } from 'svelte';
2
- interface Props {
3
- component: Component<any>;
4
- props?: Record<string, unknown>;
5
- locale?: string;
6
- children?: Snippet;
7
- }
8
- declare const LocaleHarness: Component<Props, {}, "">;
9
- type LocaleHarness = ReturnType<typeof LocaleHarness>;
10
- export default LocaleHarness;
11
- //# sourceMappingURL=LocaleHarness.svelte.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LocaleHarness.svelte.d.ts","sourceRoot":"","sources":["../../src/test-utils/LocaleHarness.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAI/C,UAAU,KAAK;IAEb,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IAE1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEhC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAkBH,QAAA,MAAM,aAAa,0BAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
@@ -1,36 +0,0 @@
1
- import { type RenderResult } from '@testing-library/svelte';
2
- import type { Component } from 'svelte';
3
- import { type RunOptions } from 'axe-core';
4
- type AnyComponent = Component<Record<string, unknown>>;
5
- export interface RenderWithLocaleOptions {
6
- /** 透传给被测组件的 props。 */
7
- props?: Record<string, unknown>;
8
- /** 语言码,默认 en_US。 */
9
- locale?: string;
10
- }
11
- /**
12
- * 把组件包进 LocaleProvider 渲染到 jsdom。
13
- * 返回 testing-library 的 RenderResult(含 container / baseElement / queries)。
14
- *
15
- * 用法:
16
- * const { container } = renderWithLocale(Button, { props: { type: 'primary' } });
17
- *
18
- * 纯展示组件(无 useLocale)同样可用——Provider 包裹无副作用。
19
- */
20
- export declare function renderWithLocale(component: AnyComponent, options?: RenderWithLocaleOptions): RenderResult<AnyComponent>;
21
- export interface AxeAssertOptions {
22
- /** 额外要禁用的规则 id(在默认禁用项之外追加)。 */
23
- disableRules?: string[];
24
- /** 覆盖默认 runOptions(一般不需要)。 */
25
- runOptions?: RunOptions;
26
- }
27
- /**
28
- * 对容器跑 axe-core,断言 0 violations。
29
- * 默认规则集:WCAG 2.0/2.1 A & AA(axe tags wcag2a/wcag2aa/wcag21a/wcag21aa)。
30
- * 默认禁用 jsdom 下不可靠的规则(见 JSDOM_DISABLED_RULES)。
31
- *
32
- * 用法:await expectNoAxeViolations(container);
33
- */
34
- export declare function expectNoAxeViolations(container: Element, options?: AxeAssertOptions): Promise<void>;
35
- export {};
36
- //# sourceMappingURL=a11y.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a11y.d.ts","sourceRoot":"","sources":["../../src/test-utils/a11y.ts"],"names":[],"mappings":"AAUA,OAAO,EAAU,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAY,EAAE,KAAK,UAAU,EAAe,MAAM,UAAU,CAAC;AAI7D,KAAK,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAIvD,MAAM,WAAW,uBAAuB;IACtC,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,YAAY,EACvB,OAAO,GAAE,uBAA4B,GACpC,YAAY,CAAC,YAAY,CAAC,CAK5B;AAQD,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAWD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,OAAO,EAClB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
@@ -1,68 +0,0 @@
1
- // a11y 渲染测试基建(仅 dom project / jsdom 下使用)。
2
- //
3
- // 提供两个帮手:
4
- // - renderWithLocale:用 testing-library 的 render 把组件挂到 jsdom,
5
- // 并用 LocaleHarness 包一层 LocaleProvider(默认 en_US),使 useLocale() 可用。
6
- // - expectNoAxeViolations:对容器跑 axe-core,断言 0 violations。
7
- //
8
- // 设计取舍:本套件只做 axe 静态规则 + role/aria 断言,不测真实键盘/焦点行为
9
- // (jsdom 焦点模型不完整、委托事件合成不可靠——见项目已知教训)。焦点陷阱/键盘
10
- // 导航留给将来 Playwright。
11
- import { render } from '@testing-library/svelte';
12
- import axe from 'axe-core';
13
- import { expect } from 'vitest';
14
- import LocaleHarness from './LocaleHarness.svelte';
15
- /**
16
- * 把组件包进 LocaleProvider 渲染到 jsdom。
17
- * 返回 testing-library 的 RenderResult(含 container / baseElement / queries)。
18
- *
19
- * 用法:
20
- * const { container } = renderWithLocale(Button, { props: { type: 'primary' } });
21
- *
22
- * 纯展示组件(无 useLocale)同样可用——Provider 包裹无副作用。
23
- */
24
- export function renderWithLocale(component, options = {}) {
25
- const { props = {}, locale = 'en_US' } = options;
26
- return render(LocaleHarness, {
27
- props: { component, props, locale },
28
- });
29
- }
30
- // jsdom 下不可靠 / 无意义、需禁用的 axe 规则及原因:
31
- // - color-contrast:jsdom 不做布局与渲染,拿不到真实计算后的颜色/尺寸,
32
- // 对比度无法计算(axe 本就会 incomplete,这里显式关掉避免噪音)。对比度
33
- // 交给将来的真实浏览器(Playwright)或专门的 token 对比度校验。
34
- const JSDOM_DISABLED_RULES = ['color-contrast'];
35
- function formatViolations(violations) {
36
- return violations
37
- .map((v) => {
38
- const nodes = v.nodes.map((n) => ` - ${n.html}\n ${n.failureSummary ?? ''}`).join('\n');
39
- return ` [${v.id}] ${v.help} (${v.impact ?? 'n/a'})\n ${v.helpUrl}\n${nodes}`;
40
- })
41
- .join('\n\n');
42
- }
43
- /**
44
- * 对容器跑 axe-core,断言 0 violations。
45
- * 默认规则集:WCAG 2.0/2.1 A & AA(axe tags wcag2a/wcag2aa/wcag21a/wcag21aa)。
46
- * 默认禁用 jsdom 下不可靠的规则(见 JSDOM_DISABLED_RULES)。
47
- *
48
- * 用法:await expectNoAxeViolations(container);
49
- */
50
- export async function expectNoAxeViolations(container, options = {}) {
51
- const { disableRules = [], runOptions } = options;
52
- const rules = {};
53
- for (const id of [...JSDOM_DISABLED_RULES, ...disableRules]) {
54
- rules[id] = { enabled: false };
55
- }
56
- const results = await axe.run(container, runOptions ?? {
57
- runOnly: {
58
- type: 'tag',
59
- values: ['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa'],
60
- },
61
- rules,
62
- });
63
- if (results.violations.length > 0) {
64
- throw new Error(`Expected no axe violations but found ${results.violations.length}:\n\n${formatViolations(results.violations)}`);
65
- }
66
- // 给 vitest 一个显式断言计数,便于报告/快照。
67
- expect(results.violations).toHaveLength(0);
68
- }
@@ -1,26 +0,0 @@
1
- import { userEvent } from 'vitest/browser';
2
- import type { Component } from 'svelte';
3
- type AnyComponent = Component<Record<string, unknown>>;
4
- export interface RenderKbdOptions {
5
- /** 透传给被测组件的 props。 */
6
- props?: Record<string, unknown>;
7
- /** 语言码,默认 en_US。 */
8
- locale?: string;
9
- }
10
- /**
11
- * 在真实浏览器里把组件包进 LocaleProvider 渲染。
12
- * 返回 vitest-browser-svelte 的 RenderResult(含 baseElement / container / 各 locator 查询)。
13
- *
14
- * 用法:
15
- * const screen = renderKbd(Modal, { props: { open: true, title: '...' } });
16
- * const dialog = screen.baseElement.querySelector('[role="dialog"]');
17
- */
18
- export declare function renderKbd(component: AnyComponent, options?: RenderKbdOptions): import("vitest-browser-svelte").RenderResult<AnyComponent> & PromiseLike<import("vitest-browser-svelte").RenderResult<AnyComponent>>;
19
- /**
20
- * 直接渲染一个已自带 LocaleProvider/不需要 locale 的 fixture 组件。
21
- * fixture 通常无 props(构造器类型为 Component<Record<string, never>>),
22
- * 故入参用宽松的 Component<any> 接收,避免与具体 fixture 的精确 props 类型冲突。
23
- */
24
- export declare function renderKbdFixture(component: Component<any>, props?: Record<string, unknown>): import("vitest-browser-svelte").RenderResult<AnyComponent> & PromiseLike<import("vitest-browser-svelte").RenderResult<AnyComponent>>;
25
- export { userEvent };
26
- //# sourceMappingURL=kbd.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kbd.d.ts","sourceRoot":"","sources":["../../src/test-utils/kbd.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAIxC,KAAK,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,GAAE,gBAAqB,wIAKhF;AAED;;;;GAIG;AAEH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,wIAE9F;AAGD,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -1,38 +0,0 @@
1
- // 键盘 e2e 测试基建(仅 browser project / 真实 chromium 下使用)。
2
- //
3
- // 与 a11y.ts(jsdom + axe)的关键区别:本套件在真实 chromium 里 mount 组件,
4
- // 用 vitest browser 的 userEvent 触发真实键盘/Tab,并用 page locator 的
5
- // `.toHaveFocus()` 断言真实 document.activeElement。jsdom 测不了的焦点陷阱、
6
- // roving 漫游、焦点归还都在这里覆盖。
7
- //
8
- // 渲染走 vitest-browser-svelte 的 render(基于 @testing-library/svelte-core,
9
- // 真实 mount 到 document.body),外层用 LocaleHarness 包一层 LocaleProvider
10
- // (复用 a11y 套件的同一 harness),使 useLocale() 可用。
11
- import { render } from 'vitest-browser-svelte';
12
- import { userEvent } from 'vitest/browser';
13
- import LocaleHarness from './LocaleHarness.svelte';
14
- /**
15
- * 在真实浏览器里把组件包进 LocaleProvider 渲染。
16
- * 返回 vitest-browser-svelte 的 RenderResult(含 baseElement / container / 各 locator 查询)。
17
- *
18
- * 用法:
19
- * const screen = renderKbd(Modal, { props: { open: true, title: '...' } });
20
- * const dialog = screen.baseElement.querySelector('[role="dialog"]');
21
- */
22
- export function renderKbd(component, options = {}) {
23
- const { props = {}, locale = 'en_US' } = options;
24
- return render(LocaleHarness, {
25
- props: { component, props, locale },
26
- });
27
- }
28
- /**
29
- * 直接渲染一个已自带 LocaleProvider/不需要 locale 的 fixture 组件。
30
- * fixture 通常无 props(构造器类型为 Component<Record<string, never>>),
31
- * 故入参用宽松的 Component<any> 接收,避免与具体 fixture 的精确 props 类型冲突。
32
- */
33
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
- export function renderKbdFixture(component, props = {}) {
35
- return render(component, { props });
36
- }
37
- // 重新导出 userEvent,键盘 e2e 统一从这里取(tab()/keyboard()/click())。
38
- export { userEvent };
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=TextArea.a11y.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextArea.a11y.test.d.ts","sourceRoot":"","sources":["../../src/textarea/TextArea.a11y.test.ts"],"names":[],"mappings":""}
@@ -1,41 +0,0 @@
1
- // TextArea a11y:原生 <textarea> + ariaLabel 可访问名;error 态 aria-invalid;
2
- // showClear 清除按钮 locale 可访问名。
3
- import { describe, it, expect } from 'vitest';
4
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
5
- import TextArea from './TextArea.svelte';
6
- describe('TextArea a11y', () => {
7
- it('默认渲染:ariaLabel 提供可访问名,无 axe violations', async () => {
8
- const { container } = renderWithLocale(TextArea, {
9
- props: { ariaLabel: 'Bio', placeholder: 'Tell us about yourself' },
10
- });
11
- const ta = container.querySelector('textarea');
12
- expect(ta).not.toBeNull();
13
- expect(ta?.getAttribute('aria-label')).toBe('Bio');
14
- await expectNoAxeViolations(container);
15
- });
16
- it('error 状态:aria-invalid=true', async () => {
17
- const { container } = renderWithLocale(TextArea, {
18
- props: { ariaLabel: 'Notes', status: 'error' },
19
- });
20
- const ta = container.querySelector('textarea');
21
- expect(ta?.getAttribute('aria-invalid')).toBe('true');
22
- await expectNoAxeViolations(container);
23
- });
24
- it('showClear + showCount:清除按钮 locale 可访问名,无 axe violations', async () => {
25
- const { container } = renderWithLocale(TextArea, {
26
- props: {
27
- ariaLabel: 'Comment',
28
- defaultValue: 'hello',
29
- showClear: true,
30
- showCount: true,
31
- maxLength: 100,
32
- },
33
- });
34
- const clearBtn = container.querySelector('.cd-textarea__clear');
35
- expect(clearBtn).not.toBeNull();
36
- const label = clearBtn?.getAttribute('aria-label');
37
- expect(label).toBeTruthy();
38
- expect(label).not.toBe('Textarea.clear');
39
- await expectNoAxeViolations(container);
40
- });
41
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=TimePicker.a11y.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TimePicker.a11y.test.d.ts","sourceRoot":"","sources":["../../src/time-picker/TimePicker.a11y.test.ts"],"names":[],"mappings":""}
@@ -1,42 +0,0 @@
1
- // TimePicker a11y:触发器(button)+ role=dialog 面板 + 时/分 role=listbox/option 列。
2
- // 只断言静态 ARIA + axe 0 violations,不测真实键盘/焦点(jsdom 限制)。
3
- // 打开态面板 portal 到 document.body,故扫描 document.body。
4
- import { describe, it, expect } from 'vitest';
5
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
6
- import TimePicker from './TimePicker.svelte';
7
- describe('TimePicker a11y', () => {
8
- it('关闭态:触发器 aria-haspopup=dialog / aria-expanded=false,无 axe violations', async () => {
9
- const { container } = renderWithLocale(TimePicker, {
10
- props: { ariaLabel: 'Meeting time' },
11
- });
12
- const trigger = container.querySelector('.cd-time-picker__trigger');
13
- expect(trigger).not.toBeNull();
14
- expect(trigger?.getAttribute('aria-haspopup')).toBe('dialog');
15
- expect(trigger?.getAttribute('aria-expanded')).toBe('false');
16
- expect(trigger?.getAttribute('aria-label')).toBe('Meeting time');
17
- await expectNoAxeViolations(container);
18
- });
19
- it('打开态:role=dialog 面板 + listbox/option 列(portal 到 body),无 axe violations', async () => {
20
- renderWithLocale(TimePicker, {
21
- props: { defaultOpen: true, ariaLabel: 'Meeting time' },
22
- });
23
- const dialog = document.querySelector('[role="dialog"]');
24
- expect(dialog).not.toBeNull();
25
- expect(dialog?.getAttribute('aria-label')).toBeTruthy();
26
- const listboxes = document.querySelectorAll('[role="listbox"]');
27
- expect(listboxes.length).toBeGreaterThan(0);
28
- const options = document.querySelectorAll('[role="option"]');
29
- expect(options.length).toBeGreaterThan(0);
30
- await expectNoAxeViolations(document.body);
31
- });
32
- it('已选值:选中 option aria-selected=true + 触发器 aria-expanded=true', async () => {
33
- renderWithLocale(TimePicker, {
34
- props: { defaultOpen: true, defaultValue: '09:30:00', ariaLabel: 'Meeting time' },
35
- });
36
- const trigger = document.querySelector('.cd-time-picker__trigger');
37
- expect(trigger?.getAttribute('aria-expanded')).toBe('true');
38
- const selected = document.querySelector('[role="option"][aria-selected="true"]');
39
- expect(selected).not.toBeNull();
40
- await expectNoAxeViolations(document.body);
41
- });
42
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=TimePicker.kbd.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TimePicker.kbd.test.d.ts","sourceRoot":"","sources":["../../src/time-picker/TimePicker.kbd.test.ts"],"names":[],"mappings":""}
@@ -1,59 +0,0 @@
1
- // TimePicker 键盘 e2e(browser project / 真实 chromium)。
2
- // 时间列用真实焦点 roving(APG listbox):每列单一 Tab 停靠点(选中项 tabindex=0,
3
- // 其余 -1),列内 ↑↓ 命令式移动 DOM 焦点(循环)、Home/End 跳首末,列间用 Tab。
4
- // 故断言真实 .toHaveFocus()(先读源码 onColKeydown 确认是命令式 focus,非 activedescendant)。
5
- // 1. 打开后焦点落进小时列选中项(value=08:30:45 → 小时 08)。
6
- // 2. 列内 ↓↑ 移动焦点(相邻项),Home/End 跳首末项。
7
- // 3. Tab 进入下一列(分钟列)的停靠点(选中项 30)。
8
- // 4. Esc 关闭面板。
9
- import { describe, it, expect } from 'vitest';
10
- import { page } from 'vitest/browser';
11
- import { renderKbdFixture, userEvent } from '../test-utils/kbd.js';
12
- import TimePickerKbdFixture from './TimePickerKbdFixture.svelte';
13
- function loc(el) {
14
- return page.elementLocator(el);
15
- }
16
- describe('TimePicker 键盘 e2e(列内 roving 真实焦点)', () => {
17
- it('小时列 ↓↑ + Home/End 移动焦点;Tab 进分钟列;Esc 关闭', async () => {
18
- const { baseElement } = renderKbdFixture(TimePickerKbdFixture);
19
- const trigger = baseElement.querySelector('[data-testid="before"]');
20
- expect(trigger).not.toBeNull();
21
- await userEvent.click(trigger);
22
- const dialog = document.querySelector('[role="dialog"]');
23
- expect(dialog).not.toBeNull();
24
- const cols = Array.from(dialog.querySelectorAll('[role="listbox"]'));
25
- expect(cols.length).toBe(3); // 时/分/秒
26
- const [hourCol, minuteCol] = cols;
27
- const hourOptions = Array.from(hourCol.querySelectorAll('[role="option"]'));
28
- // value=08:30:45 → 小时列选中项 08(文本 '08')。
29
- const hour08 = hourOptions.find((el) => el.textContent?.trim() === '08');
30
- const hour09 = hourOptions.find((el) => el.textContent?.trim() === '09');
31
- const hour07 = hourOptions.find((el) => el.textContent?.trim() === '07');
32
- // 1. 打开后焦点落进小时列选中项(08)。
33
- await expect.element(loc(hour08)).toHaveFocus();
34
- expect(hour08.tabIndex).toBe(0);
35
- // 2a. ↓ → 下一项(09),真实焦点跟随、停靠点收敛。
36
- await userEvent.keyboard('{ArrowDown}');
37
- await expect.element(loc(hour09)).toHaveFocus();
38
- expect(hour09.tabIndex).toBe(0);
39
- expect(hour08.tabIndex).toBe(-1);
40
- // 2b. ↑↑ → 回到 08 再到 07。
41
- await userEvent.keyboard('{ArrowUp}');
42
- await expect.element(loc(hour08)).toHaveFocus();
43
- await userEvent.keyboard('{ArrowUp}');
44
- await expect.element(loc(hour07)).toHaveFocus();
45
- // 2c. Home/End → 列首(00)/列末(23)。
46
- await userEvent.keyboard('{Home}');
47
- await expect.element(loc(hourOptions[0])).toHaveFocus();
48
- await userEvent.keyboard('{End}');
49
- await expect.element(loc(hourOptions[hourOptions.length - 1])).toHaveFocus();
50
- // 3. Tab → 进入分钟列的停靠点(选中项 30)。
51
- const minuteOptions = Array.from(minuteCol.querySelectorAll('[role="option"]'));
52
- const minute30 = minuteOptions.find((el) => el.textContent?.trim() === '30');
53
- await userEvent.tab();
54
- await expect.element(loc(minute30)).toHaveFocus();
55
- // 4. Esc 关闭面板(useDismiss escape)。
56
- await userEvent.keyboard('{Escape}');
57
- await expect.poll(() => document.querySelector('[role="dialog"]')).toBeNull();
58
- });
59
- });
@@ -1,23 +0,0 @@
1
- <!--
2
- 仅供 TimePicker.kbd.test.ts(browser project)使用的列内 roving 键盘 e2e 夹具。
3
- trigger 控制 open(受控);固定 value=08:30:45 让各列选中项稳定(停靠点 = 选中项)。
4
- 三列(时/分/秒)listbox,列内 ↑↓ roving + Home/End,列间 Tab。
5
- -->
6
- <script lang="ts">
7
- import { LocaleProvider } from '../locale-provider/index.js';
8
- import TimePicker from './TimePicker.svelte';
9
-
10
- let open = $state(false);
11
- const value = new Date(2024, 0, 1, 8, 30, 45);
12
- </script>
13
-
14
- <LocaleProvider locale="en_US">
15
- <button type="button" data-testid="before" onclick={() => (open = true)}>open time picker</button>
16
- <TimePicker
17
- {open}
18
- {value}
19
- locale="en-US"
20
- ariaLabel="pick time"
21
- onOpenChange={(v) => (open = v)}
22
- />
23
- </LocaleProvider>