@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,257 +0,0 @@
1
- <!--
2
- ScrollList — see specs/components/show/ScrollList.spec.md
3
- 滚轮选择器:JS 主导定位吸附居中,中央选区遮罩 + 上下渐隐。
4
- 单列(data)向后兼容;多列(columns)联动,值为各列组合数组。
5
- 进阶:cyclic 循环、惯性物理(pointer 拖拽 + 减速)、虚拟化、loadMore、status。
6
- 复用 @chenzy-design/core 纯函数(offset/index/cyclic/momentum/virtual)。
7
- 受控 value 不回写仅 onChange(红线 #1);监听/动画命令式 + cleanup(红线 #3);
8
- 列联动/循环/虚拟窗口派生纯函数(红线 #2)。单列逐列封装在 ScrollColumn 子组件。
9
- -->
10
- <script lang="ts">
11
- import type { Snippet } from 'svelte';
12
- import { untrack } from 'svelte';
13
- import {
14
- useId,
15
- indexOfValue,
16
- firstEnabledIndex,
17
- type ScrollListValue,
18
- type ScrollListItem,
19
- } from '@chenzy-design/core';
20
- import { useLocale } from '../locale-provider/index.js';
21
- import ScrollColumn from './ScrollColumn.svelte';
22
- import type { ScrollListColumn, ScrollListStatus } from './types.js';
23
-
24
- type Size = 'small' | 'default' | 'large';
25
- type Status = ScrollListStatus;
26
-
27
- type ChangeInfo = {
28
- /** 单列:选中值;多列:各列值数组。 */
29
- value: ScrollListValue | ScrollListValue[];
30
- /** 单列时提供 item/index;多列省略。 */
31
- item?: ScrollListItem;
32
- index?: number;
33
- /** 多列:发生变化的列序号。 */
34
- column?: number;
35
- };
36
-
37
- interface Props {
38
- value?: ScrollListValue | ScrollListValue[];
39
- defaultValue?: ScrollListValue | ScrollListValue[];
40
- /** 单列数据(向后兼容)。与 columns 互斥;columns 优先。 */
41
- data?: ScrollListItem[];
42
- /** 多列配置。提供时进入多列模式。 */
43
- columns?: ScrollListColumn[];
44
- size?: Size;
45
- rows?: number;
46
- itemHeight?: number;
47
- disabled?: boolean;
48
- /** 全局循环(单列或所有列);列级 cyclic 覆盖之。 */
49
- cyclic?: boolean;
50
- /** 虚拟化(列项很多时)。 */
51
- virtualized?: boolean;
52
- overscan?: number;
53
- /** 单列加载/空状态。 */
54
- status?: Status;
55
- emptyText?: string;
56
- loadingText?: string;
57
- ariaLabel?: string;
58
- /** 单列滚到末尾加载更多。 */
59
- onLoadMore?: () => void;
60
- renderItem?: Snippet<[{ item: ScrollListItem; selected: boolean; index: number }]>;
61
- onChange?: (info: ChangeInfo) => void;
62
- }
63
-
64
- let {
65
- value,
66
- defaultValue,
67
- data = [],
68
- columns,
69
- size = 'default',
70
- rows = 5,
71
- itemHeight,
72
- disabled = false,
73
- cyclic = false,
74
- virtualized = false,
75
- overscan = 3,
76
- status = 'idle',
77
- emptyText,
78
- loadingText,
79
- ariaLabel,
80
- onLoadMore,
81
- renderItem,
82
- onChange,
83
- }: Props = $props();
84
-
85
- const loc = useLocale();
86
- // 稳定 id 前缀(每列追加列号),SSR/水合一致。
87
- const baseId = useId('cd-scroll-list');
88
-
89
- const ih = $derived(itemHeight ?? { small: 28, default: 36, large: 44 }[size]);
90
- const isMulti = $derived(Array.isArray(columns) && columns.length > 0);
91
-
92
- // 归一化为「列数组」:单列模式包成一项。
93
- const colDefs = $derived.by<ScrollListColumn[]>(() => {
94
- if (isMulti) return columns!;
95
- const single: ScrollListColumn = { data, cyclic, status };
96
- if (ariaLabel !== undefined) single.ariaLabel = ariaLabel;
97
- if (onLoadMore !== undefined) single.onLoadMore = onLoadMore;
98
- return [single];
99
- });
100
- const isControlled = $derived(value !== undefined);
101
-
102
- // 把外部 value/defaultValue 归一化为「逐列 value」数组。
103
- function valueForColumn(col: number, seed: ScrollListValue | ScrollListValue[] | undefined):
104
- | ScrollListValue
105
- | undefined {
106
- if (seed === undefined) return undefined;
107
- if (Array.isArray(seed)) return seed[col];
108
- return col === 0 ? seed : undefined;
109
- }
110
-
111
- // 每列当前逻辑 index(受控时派生自 value,非受控用 defaultValue 解析初值后由列内部维护)。
112
- function resolveColIndex(col: number, seed: ScrollListValue | ScrollListValue[] | undefined): number {
113
- const items = colDefs[col]?.data ?? [];
114
- const v = valueForColumn(col, seed);
115
- const i = indexOfValue(items, v);
116
- if (i >= 0 && !items[i]?.disabled) return i;
117
- const f = firstEnabledIndex(items);
118
- return f === -1 ? 0 : f;
119
- }
120
-
121
- // 受控时每列 index 派生自 value;非受控传初值(defaultValue 或 value)。
122
- const controlledIndices = $derived.by(() =>
123
- colDefs.map((_, col) => resolveColIndex(col, value)),
124
- );
125
- const initialIndices = untrack(() =>
126
- colDefs.map((_, col) => resolveColIndex(col, value !== undefined ? value : defaultValue)),
127
- );
128
-
129
- // 非受控:记录各列当前逻辑 index(用于组装多列 onChange 的 values)。
130
- let innerIndices = $state<number[]>(untrack(() => [...initialIndices]));
131
-
132
- // 列变更 → 组装 onChange(红线 #1:受控不回写,仅回调)。
133
- function handleColSelect(col: number, logicalIndex: number): void {
134
- if (!isControlled) {
135
- const next = [...innerIndices];
136
- next[col] = logicalIndex;
137
- innerIndices = next;
138
- }
139
- const item = colDefs[col]?.data[logicalIndex];
140
- if (!item) return;
141
-
142
- if (isMulti) {
143
- // 组装各列当前值数组(变更列用最新,其它列用受控值或内部值)。
144
- const values = colDefs.map((c, ci) => {
145
- const idx =
146
- ci === col
147
- ? logicalIndex
148
- : (isControlled ? controlledIndices[ci] : innerIndices[ci]) ?? 0;
149
- return c.data[idx]?.value as ScrollListValue;
150
- });
151
- onChange?.({ value: values, column: col });
152
- } else {
153
- onChange?.({ value: item.value, item, index: logicalIndex });
154
- }
155
- }
156
-
157
- const viewportHeight = $derived(ih * rows);
158
- const resolvedEmpty = $derived(emptyText ?? loc().t('ScrollList.empty'));
159
- const resolvedLoading = $derived(loadingText ?? loc().t('ScrollList.loading'));
160
-
161
- const cls = $derived(
162
- [
163
- 'cd-scroll-list',
164
- `cd-scroll-list--${size}`,
165
- isMulti && 'cd-scroll-list--multi',
166
- disabled && 'cd-scroll-list--disabled',
167
- ]
168
- .filter(Boolean)
169
- .join(' '),
170
- );
171
- </script>
172
-
173
- <div
174
- class={cls}
175
- style="--cd-sl-item-height: {ih}px; --cd-sl-viewport-height: {viewportHeight}px;"
176
- >
177
- <div class="cd-scroll-list__cols">
178
- {#each colDefs as col, ci (ci)}
179
- <ScrollColumn
180
- data={col.data}
181
- index={(isControlled ? controlledIndices[ci] : innerIndices[ci]) ?? 0}
182
- controlled={isControlled}
183
- itemHeight={ih}
184
- {rows}
185
- {disabled}
186
- cyclic={col.cyclic ?? cyclic}
187
- {virtualized}
188
- {overscan}
189
- status={col.status ?? status}
190
- emptyText={resolvedEmpty}
191
- loadingText={resolvedLoading}
192
- ariaLabel={col.ariaLabel ?? ariaLabel ?? loc().t('ScrollList.ariaLabel')}
193
- itemIdPrefix={`${baseId}-c${ci}`}
194
- {renderItem}
195
- onSelect={(i) => handleColSelect(ci, i)}
196
- onLoadMore={col.onLoadMore}
197
- />
198
- {/each}
199
- </div>
200
-
201
- <div class="cd-scroll-list__mask" aria-hidden="true"></div>
202
- <div class="cd-scroll-list__gradient cd-scroll-list__gradient--top" aria-hidden="true"></div>
203
- <div class="cd-scroll-list__gradient cd-scroll-list__gradient--bottom" aria-hidden="true"></div>
204
- </div>
205
-
206
- <style>
207
- .cd-scroll-list {
208
- position: relative;
209
- inline-size: 100%;
210
- block-size: var(--cd-sl-viewport-height);
211
- overflow: hidden;
212
- border: 1px solid var(--cd-scrolllist-border-color);
213
- border-radius: var(--cd-scrolllist-radius);
214
- color: var(--cd-scrolllist-color-text-adjacent);
215
- font-size: var(--cd-font-size-body);
216
- }
217
-
218
- .cd-scroll-list__cols {
219
- display: flex;
220
- block-size: 100%;
221
- }
222
-
223
- .cd-scroll-list--disabled .cd-scroll-list__cols {
224
- pointer-events: none;
225
- }
226
-
227
- /* 中央选区遮罩:居中一行,上下 1px 边框 */
228
- .cd-scroll-list__mask {
229
- position: absolute;
230
- inset-inline: 0;
231
- inset-block-start: calc(50% - var(--cd-sl-item-height) / 2);
232
- block-size: var(--cd-sl-item-height);
233
- background: var(--cd-scrolllist-mask-bg);
234
- border-block: 1px solid var(--cd-scrolllist-mask-border);
235
- pointer-events: none;
236
- }
237
-
238
- /* 上/下渐隐 */
239
- .cd-scroll-list__gradient {
240
- position: absolute;
241
- inset-inline: 0;
242
- block-size: calc((var(--cd-sl-viewport-height) - var(--cd-sl-item-height)) / 2);
243
- pointer-events: none;
244
- }
245
- .cd-scroll-list__gradient--top {
246
- inset-block-start: 0;
247
- background: linear-gradient(
248
- to bottom,
249
- var(--cd-scrolllist-gradient-color),
250
- transparent
251
- );
252
- }
253
- .cd-scroll-list__gradient--bottom {
254
- inset-block-end: 0;
255
- background: linear-gradient(to top, var(--cd-scrolllist-gradient-color), transparent);
256
- }
257
- </style>
@@ -1,4 +0,0 @@
1
- export { default as ScrollList } from './ScrollList.svelte';
2
- export { meta as scrollListMeta } from './meta.js';
3
- export type { ScrollListColumn, ScrollListStatus } from './types.js';
4
- export type { ScrollListItem, ScrollListValue } from '@chenzy-design/core';
@@ -1,93 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * ScrollList — see specs/components/show/ScrollList.spec.md
4
- */
5
- export const meta = {
6
- name: 'ScrollList',
7
- category: 'show',
8
- description:
9
- '滚轮选择器:JS 主导定位吸附居中,中央选区遮罩 + 上下渐隐,支持点击/键盘/拖拽选中、disabled 项跳过,受控 value 不回写仅通过 onChange 通知。单列(data)向后兼容;多列(columns)联动,值为各列组合数组。进阶能力:cyclic 循环滚动、惯性物理(pointer 拖拽 + 指数减速 + 预测吸附)、虚拟化(列项很多时只渲染视口)、loadMore(滚到末尾加载更多)、status(loading/empty 状态)。复用 @chenzy-design/core 纯函数(offsetToIndex/indexToOffset/keyboardTarget/wrapIndex/cyclicCenterIndex/cyclicRecenter/momentumStep/projectSettleIndex/fixedRange)。',
10
- exports: ['ScrollList'],
11
- props: [
12
- { name: 'value', type: 'string | number | (string|number)[]', default: 'undefined', desc: '受控选中值;多列为数组;受控时不回写' },
13
- { name: 'defaultValue', type: 'string | number | (string|number)[]', default: 'undefined', desc: '非受控初始值;多列为数组' },
14
- { name: 'data', type: 'ScrollListItem[]', default: '[]', desc: '单列选项数据(与 columns 互斥)' },
15
- { name: 'columns', type: 'ScrollListColumn[]', default: 'undefined', desc: '多列配置;提供时进入多列联动模式' },
16
- { name: 'cyclic', type: 'boolean', default: 'false', desc: '循环滚动(滚到底接回开头);列级可覆盖' },
17
- { name: 'virtualized', type: 'boolean', default: 'false', desc: '虚拟化:列项很多时只渲染视口范围' },
18
- { name: 'overscan', type: 'number', default: '3', desc: '虚拟化视口上下缓冲行数' },
19
- { name: 'status', type: "'idle'|'loading'|'empty'", default: "'idle'", desc: '列状态;loading 显示加载中、empty 显示空文案' },
20
- { name: 'emptyText', type: 'string', default: 'i18n', desc: '空状态文案' },
21
- { name: 'loadingText', type: 'string', default: 'i18n', desc: '加载中文案' },
22
- { name: 'onLoadMore', type: '() => void', default: 'undefined', desc: '单列滚到末尾触发加载更多(非 cyclic)' },
23
- {
24
- name: 'size',
25
- type: "'small'|'default'|'large'",
26
- default: "'default'",
27
- desc: '决定 itemHeight 28/36/44',
28
- },
29
- { name: 'rows', type: 'number', default: '5', desc: '可见行数(奇数)' },
30
- { name: 'itemHeight', type: 'number', default: 'undefined', desc: '显式覆盖 size 推导的行高' },
31
- { name: 'disabled', type: 'boolean', default: 'false', desc: '禁止滚动与选中交互' },
32
- { name: 'ariaLabel', type: 'string', default: "'滚动选择'", desc: 'listbox 无障碍标签' },
33
- {
34
- name: 'renderItem',
35
- type: 'Snippet<[{ item; selected; index }]>',
36
- default: 'undefined',
37
- desc: '自定义单项渲染',
38
- },
39
- {
40
- name: 'onChange',
41
- type: '(info: { value; item; index }) => void',
42
- default: 'undefined',
43
- desc: '选中变化回调',
44
- },
45
- ],
46
- events: [
47
- { name: 'onChange', desc: '居中选中项变化(滚动落定 / 点击 / 键盘 / 拖拽惯性);单列回调 {value,item,index},多列回调 {value:数组,column}' },
48
- { name: 'onLoadMore', desc: '滚到末尾触发加载更多' },
49
- ],
50
- slots: [{ name: 'renderItem', desc: '自定义单项渲染,提供 item/selected/index' }],
51
- a11y: {
52
- hasRole: true,
53
- focusable: true,
54
- note: 'role=listbox + aria-orientation=vertical + aria-activedescendant 指向居中项;每项 role=option + aria-selected;单一 tab stop;键盘 ArrowUp/Down、PageUp/Down、Home/End 移动选中,disabled 项自动跳过。',
55
- },
56
- tokens: [
57
- '--cd-scrolllist-item-height',
58
- '--cd-scrolllist-item-height-small',
59
- '--cd-scrolllist-item-height-large',
60
- '--cd-scrolllist-color-text',
61
- '--cd-scrolllist-color-text-adjacent',
62
- '--cd-scrolllist-color-text-disabled',
63
- '--cd-scrolllist-mask-bg',
64
- '--cd-scrolllist-mask-border',
65
- '--cd-scrolllist-gradient-color',
66
- '--cd-scrolllist-border-color',
67
- '--cd-scrolllist-radius',
68
- '--cd-scrolllist-transition',
69
- ],
70
- responsive: false,
71
- examples: [
72
- {
73
- title: '基础数字选择',
74
- code: '<ScrollList data={hours} defaultValue={9} onChange={(i) => (v = i.value)} />',
75
- },
76
- {
77
- title: '自定义渲染',
78
- code: '<ScrollList data={list}>{#snippet renderItem({ item, selected })}<span class:on={selected}>{item.label}</span>{/snippet}</ScrollList>',
79
- },
80
- {
81
- title: '多列联动(年/月/日)',
82
- code: '<ScrollList columns={[{ data: years }, { data: months }, { data: days, cyclic: true }]} value={[2024, 2, 15]} onChange={(i) => (date = i.value)} />',
83
- },
84
- {
85
- title: 'cyclic 循环 + 惯性拖拽',
86
- code: '<ScrollList data={hours} cyclic defaultValue={12} />',
87
- },
88
- {
89
- title: '虚拟化 + loadMore + status',
90
- code: '<ScrollList data={big} virtualized status={loading ? "loading" : "idle"} onLoadMore={fetchMore} />',
91
- },
92
- ],
93
- } as const;
@@ -1,18 +0,0 @@
1
- import type { ScrollListItem } from '@chenzy-design/core';
2
-
3
- /** 列状态:空闲 / 加载中 / 空。 */
4
- export type ScrollListStatus = 'idle' | 'loading' | 'empty';
5
-
6
- /** 多列模式下单列配置项(columns 数组元素)。 */
7
- export interface ScrollListColumn {
8
- /** 本列选项数据。 */
9
- data: ScrollListItem[];
10
- /** 本列是否循环滚动(覆盖全局 cyclic)。 */
11
- cyclic?: boolean;
12
- /** 本列加载/空状态(覆盖全局 status)。 */
13
- status?: ScrollListStatus;
14
- /** 本列无障碍标签。 */
15
- ariaLabel?: string;
16
- /** 本列滚到末尾触发加载更多(非 cyclic 有效)。 */
17
- onLoadMore?: () => void;
18
- }
@@ -1,59 +0,0 @@
1
- // Select a11y:combobox 触发器 + listbox/option 浮层(use:floating portal 到 body)。
2
- // 只断言静态 ARIA + axe,不测真实键盘/焦点(jsdom 限制)。
3
- //
4
- // 修复记录:根 `<div role="combobox">` 现经 ariaLabel/ariaLabelledby prop 或
5
- // placeholder / locale Select.ariaLabel 回退获可访问名,axe aria-input-field-name 消除。
6
- import { describe, it, expect } from 'vitest';
7
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
8
- import Select from './Select.svelte';
9
-
10
- const options = [
11
- { label: 'Apple', value: 'apple' },
12
- { label: 'Banana', value: 'banana' },
13
- { label: 'Cherry', value: 'cherry' },
14
- ];
15
-
16
- describe('Select a11y', () => {
17
- it('关闭态:触发器 role=combobox / aria-expanded=false / aria-haspopup=listbox(结构断言)', () => {
18
- const { container } = renderWithLocale(Select, {
19
- props: { options, placeholder: 'Pick a fruit' },
20
- });
21
- const combobox = container.querySelector('[role="combobox"]');
22
- expect(combobox).not.toBeNull();
23
- expect(combobox?.getAttribute('aria-expanded')).toBe('false');
24
- expect(combobox?.getAttribute('aria-haspopup')).toBe('listbox');
25
- });
26
-
27
- it('打开态:listbox + option 渲染(结构断言)', () => {
28
- renderWithLocale(Select, {
29
- props: { options, defaultOpen: true, placeholder: 'Pick a fruit' },
30
- });
31
- const listbox = document.querySelector('[role="listbox"]');
32
- expect(listbox).not.toBeNull();
33
- expect(document.querySelectorAll('[role="option"]').length).toBe(options.length);
34
- });
35
-
36
- it('已选值:选中 option aria-selected=true(结构断言)', () => {
37
- renderWithLocale(Select, {
38
- props: { options, defaultOpen: true, defaultValue: 'banana' },
39
- });
40
- const selected = document.querySelector('[role="option"][aria-selected="true"]');
41
- expect(selected?.textContent).toContain('Banana');
42
- });
43
-
44
- it('多选:aria-multiselectable=true(结构断言)', () => {
45
- renderWithLocale(Select, {
46
- props: { options, defaultOpen: true, multiple: true },
47
- });
48
- expect(document.querySelector('[role="listbox"]')?.getAttribute('aria-multiselectable')).toBe('true');
49
- });
50
-
51
- // combobox 可访问名回退到 placeholder(缺省走 locale Select.ariaLabel)。
52
- it('打开态:axe 0 violations(combobox 经 placeholder/locale 获可访问名)', async () => {
53
- renderWithLocale(Select, {
54
- props: { options, defaultOpen: true, placeholder: 'Pick a fruit' },
55
- });
56
- expect(document.querySelector('[role="combobox"]')?.getAttribute('aria-label')).toBe('Pick a fruit');
57
- await expectNoAxeViolations(document.body);
58
- });
59
- });
@@ -1,59 +0,0 @@
1
- // Select 键盘 e2e(browser project / 真实 chromium),浮层方向键导航。
2
- // Select 高亮走 aria-activedescendant 模式:焦点始终留在 role=combobox 触发器上
3
- // (options tabindex=-1,从不真实聚焦),"高亮项"由触发器的 aria-activedescendant
4
- // 指向的 option id 表达。故断言 activedescendant 指向的 option id 变化,而非 toHaveFocus。
5
- // 浮层经 use:floating portal 到 document.body —— 在 document 范围查 listbox。
6
- // 1. 打开后 ↓ 高亮首项(opt-0),再 ↓ 移到 opt-1;↑ 回到 opt-0。
7
- // 2. Home/End 跳列表首/末。
8
- // 3. Enter 选中当前高亮项(onChange 写入夹具 output)。
9
- import { describe, it, expect } from 'vitest';
10
- import { renderKbdFixture, userEvent } from '../test-utils/kbd.js';
11
- import SelectKbdFixture from './SelectKbdFixture.svelte';
12
-
13
- describe('Select 键盘 e2e(aria-activedescendant 浮层导航)', () => {
14
- it('打开后 ↑↓ 移高亮 + Home/End 首末 + Enter 选中', async () => {
15
- renderKbdFixture(SelectKbdFixture);
16
-
17
- const combobox = document.querySelector('[role="combobox"]') as HTMLElement;
18
- expect(combobox).not.toBeNull();
19
-
20
- // 点击触发器打开浮层(焦点留在 combobox)。
21
- await userEvent.click(combobox);
22
- const listbox = document.querySelector('[role="listbox"]') as HTMLElement;
23
- expect(listbox).not.toBeNull();
24
- const listId = listbox.id;
25
- expect(listId).toBeTruthy();
26
-
27
- const options = Array.from(
28
- listbox.querySelectorAll<HTMLElement>('[role="option"]'),
29
- );
30
- expect(options.length).toBe(3);
31
-
32
- // 焦点在 combobox 上,options 不可真实聚焦(tabindex=-1)。
33
- expect(options.every((o) => o.tabIndex === -1)).toBe(true);
34
-
35
- // 1. ↓ 高亮首项(activeIndex -1 → 0),aria-activedescendant 指向 opt-0。
36
- await userEvent.keyboard('{ArrowDown}');
37
- expect(combobox.getAttribute('aria-activedescendant')).toBe(`${listId}-opt-0`);
38
- expect(options[0]!.classList.contains('cd-select__option--active')).toBe(true);
39
-
40
- // 再 ↓ 移到 opt-1。
41
- await userEvent.keyboard('{ArrowDown}');
42
- expect(combobox.getAttribute('aria-activedescendant')).toBe(`${listId}-opt-1`);
43
-
44
- // ↑ 回到 opt-0。
45
- await userEvent.keyboard('{ArrowUp}');
46
- expect(combobox.getAttribute('aria-activedescendant')).toBe(`${listId}-opt-0`);
47
-
48
- // 2. End 跳末项(opt-2);Home 回首项(opt-0)。
49
- await userEvent.keyboard('{End}');
50
- expect(combobox.getAttribute('aria-activedescendant')).toBe(`${listId}-opt-2`);
51
- await userEvent.keyboard('{Home}');
52
- expect(combobox.getAttribute('aria-activedescendant')).toBe(`${listId}-opt-0`);
53
-
54
- // 3. Enter 选中当前高亮项(opt-0 = Apple),onChange 写入夹具 output。
55
- await userEvent.keyboard('{Enter}');
56
- const out = document.querySelector('[data-testid="value"]') as HTMLElement;
57
- expect(out.textContent).toBe(JSON.stringify('apple'));
58
- });
59
- });