@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,31 +0,0 @@
1
- <!--
2
- 仅供 Cascader.kbd.test.ts(browser project)使用的键盘 e2e 夹具。
3
- Cascader 浮层 portal 到 document.body;列内高亮走 aria-activedescendant
4
- (焦点留在 role=combobox 触发器上,方向键移动列内高亮,options tabindex=-1)。
5
- -->
6
- <script lang="ts">
7
- import { LocaleProvider } from '../locale-provider/index.js';
8
- import Cascader from './Cascader.svelte';
9
-
10
- const treeData = [
11
- {
12
- label: 'Zhejiang',
13
- value: 'zj',
14
- children: [{ label: 'Hangzhou', value: 'hz' }],
15
- },
16
- {
17
- label: 'Jiangsu',
18
- value: 'js',
19
- children: [{ label: 'Nanjing', value: 'nj' }],
20
- },
21
- {
22
- label: 'Fujian',
23
- value: 'fj',
24
- children: [{ label: 'Xiamen', value: 'xm' }],
25
- },
26
- ];
27
- </script>
28
-
29
- <LocaleProvider locale="en_US">
30
- <Cascader {treeData} ariaLabel="Region" placeholder="Select region" />
31
- </LocaleProvider>
@@ -1,3 +0,0 @@
1
- export { default as Cascader } from './Cascader.svelte';
2
- export { meta as cascaderMeta } from './meta.js';
3
- export type { CascaderNode } from './types.js';
@@ -1,57 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * See specs/00-foundation/ai-friendly.spec.md.
4
- */
5
- export const meta = {
6
- name: 'Cascader',
7
- category: 'input',
8
- description: '级联选择器,点击逐级展开列,单选叶子节点。',
9
- props: [
10
- { name: 'value', type: '(string|number)[] | (string|number)[][]', default: 'undefined', desc: '单选单条路径;多选多条路径' },
11
- { name: 'defaultValue', type: '(string|number)[] | (string|number)[][]', default: 'undefined' },
12
- { name: 'treeData', type: 'CascaderNode[]', default: '[]' },
13
- { name: 'open', type: 'boolean', default: 'undefined' },
14
- { name: 'defaultOpen', type: 'boolean', default: 'false' },
15
- { name: 'multiple', type: 'boolean', default: 'false', desc: '每列 checkbox 多选 + 父子联动,多 tag 回显' },
16
- { name: 'size', type: "'small'|'default'|'large'", default: 'default' },
17
- { name: 'status', type: "'default'|'warning'|'error'", default: 'default' },
18
- { name: 'placeholder', type: 'string', default: "'请选择'" },
19
- { name: 'disabled', type: 'boolean', default: 'false' },
20
- { name: 'clearable', type: 'boolean', default: 'false' },
21
- { name: 'changeOnSelect', type: 'boolean', default: 'false', desc: '单选:点击任一层级(含中间非叶子)即提交该路径并触发 onChange,非叶子同时展开子列且不关闭面板,叶子提交并关闭;关闭时仅叶子提交并关闭' },
22
- { name: 'expandTrigger', type: "'click'|'hover'", default: "'click'", desc: "'hover' 悬停非叶子节点即展开子级列" },
23
- { name: 'leafOnly', type: 'boolean', default: 'false', desc: '多选时完全勾选的父级折叠为父路径(只回传/计数到该父级);默认 false 仅回传叶子' },
24
- { name: 'filterable', type: 'boolean', default: 'false', desc: '可搜索(向后兼容别名,等价 filterTreeNode=true)' },
25
- { name: 'filterTreeNode', type: 'boolean | ((query, path) => boolean)', default: 'undefined', desc: '是否可搜索及自定义匹配:false 关闭;true 默认 label 链子串匹配;函数自定义谓词。未传时回退 filterable' },
26
- { name: 'filterLeafOnly', type: 'boolean', default: 'true', desc: '搜索结果是否仅展示到叶子路径' },
27
- { name: 'displayProp', type: "'label'|'value'", default: "'label'", desc: '触发器回显使用的字段' },
28
- { name: 'separator', type: 'string', default: "' / '", desc: '路径分隔符(回显 + 搜索 label 链拼接)' },
29
- { name: 'maxTagCount', type: 'number', default: 'undefined', desc: '多选 Tag 溢出折叠阈值:超出显示前 N 个 + +M' },
30
- { name: 'emptyContent', type: 'string | Snippet', default: 'undefined', desc: '列为空时内容;缺省走 i18n' },
31
- { name: 'destroyOnClose', type: 'boolean', default: 'false', desc: '关闭即卸载浮层内容({#if}),重开重建;默认 false 首开后保留 DOM 仅隐藏' },
32
- { name: 'zIndex', type: 'number', default: '1030', desc: '浮层层级' },
33
- { name: 'getPopupContainer', type: '() => HTMLElement | null | undefined', default: 'undefined', desc: '浮层挂载容器,缺省 document.body;非 body 容器时 absolute 定位相对该容器' },
34
- { name: 'columnWidth', type: 'number | number[]', default: '180', desc: '列宽:统一(number)或逐列(number[],超出取末项)' },
35
- { name: 'loadData', type: '(node: CascaderNode) => Promise<CascaderNode[]>', default: 'undefined', desc: '动态加载子节点' },
36
- { name: 'displayRender', type: '(labels: string[], selectedNodes: CascaderNode[]) => string', default: 'undefined', desc: '自定义触发器选中路径回显(单选 + 多选每个 tag 共用)' },
37
- { name: 'onChange', type: '(value: (string|number)[] | (string|number)[][]) => void', default: 'undefined', desc: '单选回调单条路径;多选回调多条叶子路径' },
38
- { name: 'onOpenChange', type: '(open: boolean) => void', default: 'undefined' },
39
- { name: 'ariaLabel', type: 'string', default: 'undefined' },
40
- ],
41
- a11y: {
42
- role: 'combobox',
43
- notes: [
44
- 'combobox + 每列 listbox + option ARIA 模式',
45
- '触发器 aria-haspopup="listbox"、aria-expanded',
46
- '每列 option aria-selected 标记当前路径',
47
- 'disabled 节点 aria-disabled 且不可点击',
48
- ],
49
- },
50
- tokens: [
51
- '--cd-select-*',
52
- '--cd-tree-*',
53
- '--cd-cascader-column-width',
54
- '--cd-cascader-column-border',
55
- '--cd-focus-ring',
56
- ],
57
- } as const;
@@ -1,9 +0,0 @@
1
- /** Cascader 级联选择节点数据结构。 */
2
- export interface CascaderNode {
3
- label: string;
4
- value: string | number;
5
- disabled?: boolean;
6
- children?: CascaderNode[];
7
- /** 标记为叶子节点(异步加载时:true 则不再触发 loadData) */
8
- isLeaf?: boolean;
9
- }
@@ -1,281 +0,0 @@
1
- <!--
2
- Checkbox — see specs/components/input/Checkbox.spec.md
3
- Works standalone (controlled / uncontrolled) or inside CheckboxGroup via context.
4
- -->
5
- <script lang="ts">
6
- import type { Snippet } from 'svelte';
7
- import { useId } from '@chenzy-design/core';
8
- import {
9
- getCheckboxGroupContext,
10
- type CheckboxValue,
11
- type CheckboxSize,
12
- type CheckboxType,
13
- type CheckboxStatus,
14
- } from './context.js';
15
-
16
- type Status = CheckboxStatus;
17
-
18
- interface Props {
19
- checked?: boolean;
20
- defaultChecked?: boolean;
21
- indeterminate?: boolean;
22
- value?: CheckboxValue;
23
- disabled?: boolean;
24
- size?: CheckboxSize;
25
- status?: Status;
26
- /** Display form. card adds border+background and expands the hit area to the whole card; pureCard is borderless. */
27
- type?: CheckboxType;
28
- name?: string;
29
- extra?: string | undefined;
30
- id?: string;
31
- onChange?: (checked: boolean) => void;
32
- children?: Snippet;
33
- }
34
-
35
- let {
36
- checked = $bindable(),
37
- defaultChecked = false,
38
- indeterminate = false,
39
- value,
40
- disabled = false,
41
- size = 'default',
42
- status = 'default',
43
- type = 'default',
44
- name,
45
- extra,
46
- id,
47
- onChange,
48
- children,
49
- }: Props = $props();
50
-
51
- const group = getCheckboxGroupContext();
52
-
53
- const fieldId = resolveId();
54
- const extraId = $derived(extra ? `${fieldId}-extra` : undefined);
55
-
56
- function resolveId(): string {
57
- return id ?? useId('cd-checkbox');
58
- }
59
-
60
- const isControlled = $derived(checked !== undefined);
61
- let inner = $state(getInitialChecked());
62
-
63
- function getInitialChecked(): boolean {
64
- return defaultChecked;
65
- }
66
-
67
- const isChecked = $derived(
68
- group && value !== undefined
69
- ? group.isChecked(value)
70
- : isControlled
71
- ? !!checked
72
- : inner,
73
- );
74
-
75
- const resolvedSize = $derived(group ? group.getSize() : size);
76
- const resolvedDisabled = $derived(disabled || (group ? group.getDisabled() : false));
77
- const resolvedName = $derived(name ?? group?.getName());
78
- // Group transparently provides `type`; a per-item non-default `type` overrides it.
79
- const resolvedType = $derived(type !== 'default' ? type : (group?.getType() ?? 'default'));
80
- // Group transparently provides `status`; a per-item non-default `status` overrides it.
81
- const resolvedStatus = $derived(status !== 'default' ? status : (group?.getStatus() ?? 'default'));
82
-
83
- function handleChange(e: Event & { currentTarget: HTMLInputElement }) {
84
- const next = e.currentTarget.checked;
85
- if (group && value !== undefined) {
86
- group.toggle(value);
87
- onChange?.(next);
88
- return;
89
- }
90
- // Controlled (`checked=` / `bind:checked`): parent owns `checked`; propagate
91
- // only via `onChange`. Writing the prop AND firing `onChange` loops.
92
- // Uncontrolled: keep our own state in sync.
93
- if (!isControlled) inner = next;
94
- onChange?.(next);
95
- }
96
-
97
- /** Set the indeterminate DOM property (not a reflected attribute). */
98
- function indeterminateAttach(node: HTMLInputElement) {
99
- node.indeterminate = indeterminate && !isChecked;
100
- }
101
-
102
- const cls = $derived(
103
- [
104
- 'cd-checkbox',
105
- `cd-checkbox--${resolvedSize}`,
106
- `cd-checkbox--${resolvedStatus}`,
107
- resolvedType !== 'default' && `cd-checkbox--${resolvedType}`,
108
- isChecked && 'cd-checkbox--checked',
109
- indeterminate && !isChecked && 'cd-checkbox--indeterminate',
110
- resolvedDisabled && 'cd-checkbox--disabled',
111
- ]
112
- .filter(Boolean)
113
- .join(' '),
114
- );
115
- </script>
116
-
117
- <label class={cls} for={fieldId}>
118
- <input
119
- {@attach indeterminateAttach}
120
- id={fieldId}
121
- class="cd-checkbox__input"
122
- type="checkbox"
123
- name={resolvedName}
124
- value={value !== undefined ? String(value) : undefined}
125
- checked={isChecked}
126
- disabled={resolvedDisabled}
127
- aria-invalid={resolvedStatus === 'error' || undefined}
128
- aria-describedby={extraId}
129
- onchange={handleChange}
130
- />
131
- <span class="cd-checkbox__box" aria-hidden="true">
132
- {#if indeterminate && !isChecked}
133
- <span class="cd-checkbox__dash"></span>
134
- {:else if isChecked}
135
- <svg class="cd-checkbox__check" viewBox="0 0 16 16" focusable="false">
136
- <path
137
- fill="none"
138
- stroke="currentColor"
139
- stroke-width="2"
140
- stroke-linecap="round"
141
- stroke-linejoin="round"
142
- d="M3.5 8.5 6.5 11.5 12.5 4.5"
143
- />
144
- </svg>
145
- {/if}
146
- </span>
147
- {#if children || extra}
148
- <span class="cd-checkbox__content">
149
- {#if children}<span class="cd-checkbox__label">{@render children()}</span>{/if}
150
- {#if extra}<span class="cd-checkbox__extra" id={extraId}>{extra}</span>{/if}
151
- </span>
152
- {/if}
153
- </label>
154
-
155
- <style>
156
- .cd-checkbox {
157
- display: inline-flex;
158
- align-items: flex-start;
159
- gap: var(--cd-checkbox-label-gap);
160
- color: var(--cd-color-text-0);
161
- cursor: pointer;
162
- line-height: 1.4;
163
- }
164
- .cd-checkbox--disabled {
165
- cursor: not-allowed;
166
- opacity: 0.5;
167
- }
168
- .cd-checkbox__input {
169
- position: absolute;
170
- inline-size: 1px;
171
- block-size: 1px;
172
- padding: 0;
173
- margin: 0;
174
- overflow: hidden;
175
- clip-path: inset(50%);
176
- white-space: nowrap;
177
- border: 0;
178
- }
179
- .cd-checkbox__box {
180
- position: relative;
181
- flex: 0 0 auto;
182
- display: inline-flex;
183
- align-items: center;
184
- justify-content: center;
185
- inline-size: var(--cd-checkbox-size-default);
186
- block-size: var(--cd-checkbox-size-default);
187
- background: var(--cd-checkbox-bg);
188
- border: 1px solid var(--cd-checkbox-border);
189
- border-radius: var(--cd-checkbox-radius);
190
- color: var(--cd-checkbox-mark-color);
191
- transition:
192
- background-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard),
193
- border-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
194
- }
195
- .cd-checkbox--small .cd-checkbox__box {
196
- inline-size: var(--cd-checkbox-size-small);
197
- block-size: var(--cd-checkbox-size-small);
198
- }
199
- .cd-checkbox--large .cd-checkbox__box {
200
- inline-size: var(--cd-checkbox-size-large);
201
- block-size: var(--cd-checkbox-size-large);
202
- }
203
- .cd-checkbox--checked .cd-checkbox__box,
204
- .cd-checkbox--indeterminate .cd-checkbox__box {
205
- background: var(--cd-checkbox-bg-checked);
206
- border-color: var(--cd-checkbox-border-checked);
207
- }
208
- .cd-checkbox--warning .cd-checkbox__box {
209
- border-color: var(--cd-color-warning);
210
- }
211
- .cd-checkbox--error .cd-checkbox__box {
212
- border-color: var(--cd-color-danger);
213
- }
214
- .cd-checkbox__input:focus-visible + .cd-checkbox__box {
215
- outline: none;
216
- box-shadow: var(--cd-focus-ring);
217
- }
218
- .cd-checkbox__check {
219
- inline-size: 80%;
220
- block-size: 80%;
221
- }
222
- .cd-checkbox__dash {
223
- inline-size: 60%;
224
- block-size: 2px;
225
- background: currentColor;
226
- border-radius: var(--cd-radius-full);
227
- }
228
- .cd-checkbox__content {
229
- display: inline-flex;
230
- flex-direction: column;
231
- gap: var(--cd-spacing-1);
232
- }
233
- .cd-checkbox__extra {
234
- color: var(--cd-color-text-2);
235
- font-size: var(--cd-font-size-1);
236
- }
237
-
238
- /* card / pureCard 形态:整张卡片即命中区,hover 抬升背景,选中描边 primary。 */
239
- .cd-checkbox--card,
240
- .cd-checkbox--pureCard {
241
- padding: var(--cd-checkbox-card-padding);
242
- border-radius: var(--cd-checkbox-card-radius);
243
- background: var(--cd-checkbox-card-bg);
244
- transition:
245
- background-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard),
246
- border-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
247
- }
248
- .cd-checkbox--card {
249
- border: 1px solid var(--cd-checkbox-card-border);
250
- }
251
- .cd-checkbox--pureCard {
252
- border: 1px solid transparent;
253
- }
254
- .cd-checkbox--card:hover:not(.cd-checkbox--disabled),
255
- .cd-checkbox--pureCard:hover:not(.cd-checkbox--disabled) {
256
- background: var(--cd-checkbox-card-bg-hover);
257
- }
258
- .cd-checkbox--card.cd-checkbox--checked,
259
- .cd-checkbox--card.cd-checkbox--indeterminate,
260
- .cd-checkbox--pureCard.cd-checkbox--checked,
261
- .cd-checkbox--pureCard.cd-checkbox--indeterminate {
262
- border-color: var(--cd-checkbox-card-border-checked);
263
- }
264
- .cd-checkbox--card .cd-checkbox__input:focus-visible ~ .cd-checkbox__box,
265
- .cd-checkbox--pureCard .cd-checkbox__input:focus-visible ~ .cd-checkbox__box {
266
- box-shadow: none;
267
- }
268
- .cd-checkbox--card:has(.cd-checkbox__input:focus-visible),
269
- .cd-checkbox--pureCard:has(.cd-checkbox__input:focus-visible) {
270
- outline: none;
271
- box-shadow: var(--cd-focus-ring);
272
- }
273
-
274
- @media (prefers-reduced-motion: reduce) {
275
- .cd-checkbox__box,
276
- .cd-checkbox--card,
277
- .cd-checkbox--pureCard {
278
- transition: none;
279
- }
280
- }
281
- </style>
@@ -1,43 +0,0 @@
1
- // CheckboxGroup a11y:role="group" 容器 + 多个 checkbox 选项(原生 input)。
2
- // 只断言静态 ARIA + axe 0 violations,不测键盘(jsdom 限制)。
3
- import { describe, it, expect } from 'vitest';
4
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
5
- import CheckboxGroup from './CheckboxGroup.svelte';
6
-
7
- const OPTIONS = [
8
- { label: 'Read', value: 'read' },
9
- { label: 'Write', value: 'write' },
10
- { label: 'Delete', value: 'delete', disabled: true },
11
- ];
12
-
13
- describe('CheckboxGroup a11y', () => {
14
- it('默认:role=group + ariaLabel + 多选项渲染,无 axe violations', async () => {
15
- const { container } = renderWithLocale(CheckboxGroup, {
16
- props: { ariaLabel: 'Permissions', options: OPTIONS },
17
- });
18
- const group = container.querySelector('[role="group"]');
19
- expect(group?.getAttribute('aria-label')).toBe('Permissions');
20
-
21
- const boxes = container.querySelectorAll('input[type="checkbox"]');
22
- expect(boxes.length).toBe(3);
23
- await expectNoAxeViolations(container);
24
- });
25
-
26
- it('选中态:value 命中的 checkbox 为 checked', async () => {
27
- const { container } = renderWithLocale(CheckboxGroup, {
28
- props: { ariaLabel: 'Permissions', options: OPTIONS, value: ['read', 'write'] },
29
- });
30
- const checked = container.querySelectorAll('input[type="checkbox"]:checked');
31
- expect(checked.length).toBe(2);
32
- await expectNoAxeViolations(container);
33
- });
34
-
35
- it('禁用项:对应 checkbox 为 disabled', async () => {
36
- const { container } = renderWithLocale(CheckboxGroup, {
37
- props: { ariaLabel: 'Permissions', options: OPTIONS },
38
- });
39
- const disabled = container.querySelectorAll('input[type="checkbox"]:disabled');
40
- expect(disabled.length).toBe(1);
41
- await expectNoAxeViolations(container);
42
- });
43
- });
@@ -1,40 +0,0 @@
1
- // CheckboxGroup 键盘 e2e(browser project / 真实 chromium)。
2
- // 组(role=group)内为原生 <input type=checkbox>(视觉隐藏但 Tab 可达、Space 可切):
3
- // Tab 从前置按钮进入聚焦首个复选框,Space 切换其 checked(原生语义 → checked 属性)。
4
- import { describe, it, expect } from 'vitest';
5
- import { page } from 'vitest/browser';
6
- import { renderKbdFixture, userEvent } from '../test-utils/kbd.js';
7
- import CheckboxGroupKbdFixture from './CheckboxGroupKbdFixture.svelte';
8
-
9
- function loc(el: Element) {
10
- return page.elementLocator(el);
11
- }
12
-
13
- describe('CheckboxGroup 键盘 e2e(Tab 进入 + Space 切换)', () => {
14
- it('Tab 聚焦首个复选框 + Space 切换 checked', async () => {
15
- const { baseElement } = renderKbdFixture(CheckboxGroupKbdFixture);
16
-
17
- const group = baseElement.querySelector('[role="group"]') as HTMLElement;
18
- expect(group).not.toBeNull();
19
- const inputs = Array.from(
20
- group.querySelectorAll<HTMLInputElement>('input[type="checkbox"]'),
21
- );
22
- expect(inputs.length).toBe(2);
23
- const first = inputs[0] as HTMLInputElement;
24
- expect(first.checked).toBe(false);
25
-
26
- // 从前置按钮 Tab 进入 → 焦点落到首个复选框(真实焦点)。
27
- const before = baseElement.querySelector('[data-testid="before"]') as HTMLElement;
28
- before.focus();
29
- await expect.element(loc(before)).toHaveFocus();
30
- await userEvent.tab();
31
- await expect.element(loc(first)).toHaveFocus();
32
-
33
- // Space 切换 checked:未选 → 选中。
34
- await userEvent.keyboard(' ');
35
- expect(first.checked).toBe(true);
36
- // 再次 Space 取消。
37
- await userEvent.keyboard(' ');
38
- expect(first.checked).toBe(false);
39
- });
40
- });
@@ -1,122 +0,0 @@
1
- <!--
2
- CheckboxGroup — see specs/components/input/Checkbox.spec.md
3
- Provides context to child Checkboxes; controlled / uncontrolled set of values.
4
- -->
5
- <script lang="ts">
6
- import type { Snippet } from 'svelte';
7
- import Checkbox from './Checkbox.svelte';
8
- import {
9
- setCheckboxGroupContext,
10
- type CheckboxValue,
11
- type CheckboxSize,
12
- type CheckboxType,
13
- type CheckboxStatus,
14
- } from './context.js';
15
-
16
- type OptionObject = { label: string; value: CheckboxValue; disabled?: boolean; extra?: string };
17
- type Option = string | number | OptionObject;
18
-
19
- interface Props {
20
- value?: CheckboxValue[];
21
- defaultValue?: CheckboxValue[];
22
- options?: Option[];
23
- disabled?: boolean;
24
- size?: CheckboxSize;
25
- status?: CheckboxStatus;
26
- type?: CheckboxType;
27
- name?: string;
28
- direction?: 'horizontal' | 'vertical';
29
- onChange?: (v: CheckboxValue[]) => void;
30
- children?: Snippet;
31
- /** 无可见标题时的可访问名称(role=group)。 */
32
- ariaLabel?: string;
33
- /** 关联组的可见标题元素 id(优先于 ariaLabel 体现可访问名)。 */
34
- ariaLabelledby?: string;
35
- }
36
-
37
- let {
38
- value = $bindable(),
39
- defaultValue = [],
40
- options,
41
- disabled = false,
42
- size = 'default',
43
- status = 'default',
44
- type = 'default',
45
- name,
46
- direction = 'horizontal',
47
- onChange,
48
- children,
49
- ariaLabel,
50
- ariaLabelledby,
51
- }: Props = $props();
52
-
53
- const isControlled = $derived(value !== undefined);
54
- let inner = $state<CheckboxValue[]>(getInitialValue());
55
-
56
- function getInitialValue(): CheckboxValue[] {
57
- return [...defaultValue];
58
- }
59
-
60
- const selected = $derived(isControlled ? (value ?? []) : inner);
61
-
62
- function commit(next: CheckboxValue[]) {
63
- // Controlled (`value=` / `bind:value`): parent owns `value`; propagate only
64
- // via `onChange`. Writing the prop AND firing `onChange` loops.
65
- // Uncontrolled: keep our own state in sync.
66
- if (!isControlled) inner = next;
67
- onChange?.(next);
68
- }
69
-
70
- function normalize(opt: Option): OptionObject {
71
- return typeof opt === 'object' ? opt : { label: String(opt), value: opt };
72
- }
73
-
74
- setCheckboxGroupContext({
75
- isChecked: (v) => selected.includes(v),
76
- toggle: (v) => {
77
- const next = selected.includes(v)
78
- ? selected.filter((item) => item !== v)
79
- : [...selected, v];
80
- commit(next);
81
- },
82
- getDisabled: () => disabled,
83
- getSize: () => size,
84
- getName: () => name,
85
- getType: () => type,
86
- getStatus: () => status,
87
- });
88
-
89
- const cls = $derived(`cd-checkbox-group cd-checkbox-group--${direction}`);
90
- </script>
91
-
92
- <div
93
- class={cls}
94
- role="group"
95
- aria-labelledby={ariaLabelledby}
96
- aria-label={ariaLabelledby ? undefined : ariaLabel}
97
- >
98
- {#if options}
99
- {#each options as opt (normalize(opt).value)}
100
- {@const o = normalize(opt)}
101
- <Checkbox value={o.value} disabled={o.disabled ?? false} extra={o.extra}>{o.label}</Checkbox>
102
- {/each}
103
- {:else}
104
- {@render children?.()}
105
- {/if}
106
- </div>
107
-
108
- <style>
109
- .cd-checkbox-group {
110
- display: inline-flex;
111
- gap: var(--cd-spacing-4);
112
- }
113
- .cd-checkbox-group--horizontal {
114
- flex-direction: row;
115
- flex-wrap: wrap;
116
- align-items: center;
117
- }
118
- .cd-checkbox-group--vertical {
119
- flex-direction: column;
120
- align-items: flex-start;
121
- }
122
- </style>
@@ -1,20 +0,0 @@
1
- <!--
2
- 仅供 CheckboxGroup.kbd.test.ts(browser project)使用的键盘 e2e 夹具。
3
- CheckboxGroup(role=group)内为原生 <input type=checkbox>(视觉隐藏但可聚焦)。
4
- Tab 进入聚焦首个 input,Space 切换其 checked 状态。data-testid=before 用于起跳。
5
- -->
6
- <script lang="ts">
7
- import { LocaleProvider } from '../locale-provider/index.js';
8
- import CheckboxGroup from './CheckboxGroup.svelte';
9
- </script>
10
-
11
- <LocaleProvider locale="en_US">
12
- <button type="button" data-testid="before">before</button>
13
- <CheckboxGroup
14
- options={[
15
- { label: 'Apple', value: 'a' },
16
- { label: 'Banana', value: 'b' },
17
- ]}
18
- ariaLabel="Fruits"
19
- />
20
- </LocaleProvider>
@@ -1,31 +0,0 @@
1
- import { getContext, setContext } from 'svelte';
2
-
3
- export type CheckboxValue = string | number;
4
- export type CheckboxSize = 'small' | 'default' | 'large';
5
- export type CheckboxType = 'default' | 'card' | 'pureCard';
6
- export type CheckboxStatus = 'default' | 'warning' | 'error';
7
-
8
- export interface CheckboxGroupContext {
9
- isChecked: (v: CheckboxValue) => boolean;
10
- toggle: (v: CheckboxValue) => void;
11
- /** getter to stay reactive across the context boundary */
12
- getDisabled: () => boolean;
13
- /** getter to stay reactive across the context boundary */
14
- getSize: () => CheckboxSize;
15
- /** getter to stay reactive across the context boundary */
16
- getName: () => string | undefined;
17
- /** getter to stay reactive across the context boundary */
18
- getType: () => CheckboxType;
19
- /** getter to stay reactive across the context boundary */
20
- getStatus: () => CheckboxStatus;
21
- }
22
-
23
- const KEY = Symbol('cd-checkbox-group');
24
-
25
- export function setCheckboxGroupContext(ctx: CheckboxGroupContext): void {
26
- setContext(KEY, ctx);
27
- }
28
-
29
- export function getCheckboxGroupContext(): CheckboxGroupContext | undefined {
30
- return getContext<CheckboxGroupContext | undefined>(KEY);
31
- }
@@ -1,4 +0,0 @@
1
- export { default as Checkbox } from './Checkbox.svelte';
2
- export { default as CheckboxGroup } from './CheckboxGroup.svelte';
3
- export { meta as checkboxMeta } from './meta.js';
4
- export type { CheckboxValue, CheckboxSize, CheckboxType, CheckboxGroupContext } from './context.js';