@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,37 +0,0 @@
1
- // Tooltip 键盘 e2e(browser project / 真实 chromium)。
2
- // 测 useDismiss(escape:true) 的真实 Esc 关闭——浮层 portal 到 body,role=tooltip:
3
- // 1. 聚焦触发按钮(trigger='focus')→ focusin 显示浮层(document 范围查 role=tooltip)。
4
- // 2. 按 Esc → useDismiss 关闭浮层;焦点仍在触发按钮上(Esc 不移动焦点)。
5
- //
6
- // WCAG 1.4.13(Content on Hover or Focus):focus 浮层须可由 Esc 关闭。
7
- import { describe, it, expect } from 'vitest';
8
- import { page } from 'vitest/browser';
9
- import { renderKbdFixture, userEvent } from '../test-utils/kbd.js';
10
- import TooltipKbdFixture from './TooltipKbdFixture.svelte';
11
-
12
- function loc(el: Element) {
13
- return page.elementLocator(el);
14
- }
15
-
16
- describe('Tooltip 键盘 e2e(Esc 关闭)', () => {
17
- it('聚焦显示浮层;Esc 关闭浮层且焦点留在触发器', async () => {
18
- const { baseElement } = renderKbdFixture(TooltipKbdFixture);
19
-
20
- const trigger = baseElement.querySelector('[data-testid="trigger"]') as HTMLButtonElement;
21
- expect(trigger).not.toBeNull();
22
-
23
- // 1. 聚焦触发按钮 → focusin 打开浮层。浮层 portal 到 body,在 document 范围查询。
24
- trigger.focus();
25
- await expect.element(loc(trigger)).toHaveFocus();
26
- const tip = page.getByRole('tooltip');
27
- await expect.element(tip).toBeInTheDocument();
28
- await expect.element(tip).toHaveTextContent('More info');
29
-
30
- // 2. Esc 关闭浮层(useDismiss escape:true 对 focus 触发亦生效)。
31
- await userEvent.keyboard('{Escape}');
32
- await expect.element(tip).not.toBeInTheDocument();
33
-
34
- // Esc 不移动焦点:焦点仍在触发按钮上。
35
- await expect.element(loc(trigger)).toHaveFocus();
36
- });
37
- });
@@ -1,416 +0,0 @@
1
- <!--
2
- Tooltip — see specs/components/show/Tooltip.spec.md
3
- 基础子集:hover/focus/click 触发、12 方位、箭头、延迟、dark/light 主题。
4
- 定位:portal 到 body + position:fixed,core computePosition 计算坐标 +
5
- autoAdjustOverflow flip 碰撞避让(脱离 overflow:hidden 裁剪)。
6
- arrowPointAtCenter:start/end 对齐时箭头改为指向触发器中心(默认贴对齐边)。
7
- status:default|warning|error,非 default 时内容前渲染语义图标(aria-label 经 locale)。
8
- custom trigger:显隐完全由受控 open + onOpenChange 控制,不自动 hover/click/focus(供调用方自定义触发)。
9
- -->
10
- <script lang="ts">
11
- import type { Snippet } from 'svelte';
12
- import { untrack } from 'svelte';
13
- import { useId, useDismiss, useScrollLock, type Placement } from '@chenzy-design/core';
14
- import { getGlobalPopupContainer } from '../config-provider/index.js';
15
- import { floating } from '../_floating/use-floating.js';
16
- import { resolveSide } from './placement.js';
17
- import { useLocale } from '../locale-provider/index.js';
18
-
19
- type TriggerKind = 'hover' | 'focus' | 'click' | 'custom';
20
- type Theme = 'dark' | 'light';
21
- type Status = 'default' | 'warning' | 'error';
22
-
23
- interface Props {
24
- content?: string | Snippet;
25
- open?: boolean;
26
- defaultOpen?: boolean;
27
- trigger?: TriggerKind | Array<TriggerKind>;
28
- placement?: Placement;
29
- /** 视口溢出时翻转到对侧 */
30
- autoAdjustOverflow?: boolean;
31
- mouseEnterDelay?: number;
32
- mouseLeaveDelay?: number;
33
- showArrow?: boolean;
34
- /** start/end 对齐时箭头指向触发器中心(默认 false:贴对齐边) */
35
- arrowPointAtCenter?: boolean;
36
- theme?: Theme;
37
- /** 语义态:非 default 时内容前渲染对应状态图标 */
38
- status?: Status;
39
- maxWidth?: number | string;
40
- disabled?: boolean;
41
- /** 浮层 z-index(覆盖 CSS token --cd-tooltip-z) */
42
- zIndex?: number;
43
- /** 阻止浮层上的点击事件冒泡,默认 true */
44
- stopPropagation?: boolean;
45
- /** 显示时阻止页面滚动 */
46
- preventScroll?: boolean;
47
- /** 浮层完全关闭(动画结束)后的回调 */
48
- afterClose?: () => void;
49
- /** 自定义浮层挂载容器(缺省回退 ConfigProvider 全局,再回退 body) */
50
- getPopupContainer?: () => HTMLElement | null | undefined;
51
- onOpenChange?: (open: boolean) => void;
52
- children?: Snippet;
53
- }
54
-
55
- let {
56
- content,
57
- open,
58
- defaultOpen = false,
59
- trigger = ['hover', 'focus'],
60
- placement = 'top',
61
- autoAdjustOverflow = true,
62
- mouseEnterDelay = 100,
63
- mouseLeaveDelay = 100,
64
- showArrow = true,
65
- arrowPointAtCenter = false,
66
- theme = 'dark',
67
- status = 'default',
68
- maxWidth = 300,
69
- disabled = false,
70
- zIndex,
71
- stopPropagation = true,
72
- preventScroll = false,
73
- afterClose,
74
- getPopupContainer,
75
- onOpenChange,
76
- children,
77
- }: Props = $props();
78
-
79
- const tipId = useId('cd-tooltip');
80
- const loc = useLocale();
81
-
82
- // ConfigProvider 全局浮层容器默认;自身 getPopupContainer prop 优先。
83
- const globalPopupContainer = getGlobalPopupContainer();
84
- const resolvePopupContainer = $derived(getPopupContainer ?? globalPopupContainer);
85
-
86
- // --- 受控 open (红线 #1):不无条件回写 open,仅 onOpenChange ---
87
- const isControlled = $derived(open !== undefined);
88
- // eslint-disable-next-line -- 仅取 defaultOpen 初值作为非受控初始态
89
- let innerOpen = $state(untrack(() => defaultOpen));
90
- const triggers = $derived(Array.isArray(trigger) ? trigger : [trigger]);
91
- const hasContent = $derived(content !== undefined && content !== '');
92
- const isOpen = $derived(
93
- !disabled && hasContent && (isControlled ? !!open : innerOpen),
94
- );
95
-
96
- function setOpen(next: boolean) {
97
- if (next === (isControlled ? !!open : innerOpen)) return;
98
- if (!isControlled) innerOpen = next;
99
- onOpenChange?.(next);
100
- }
101
-
102
- const maxWidthCss = $derived(
103
- typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth,
104
- );
105
-
106
- const contentText = $derived(
107
- typeof content === 'string' ? content : undefined,
108
- );
109
- const contentSnippet = $derived(
110
- typeof content === 'function' ? content : undefined,
111
- );
112
-
113
- // status:非 default 时内容前渲染语义图标(纯派生,红线 #2)
114
- const hasStatusIcon = $derived(status === 'warning' || status === 'error');
115
- const statusLabel = $derived(
116
- status === 'warning'
117
- ? loc().t('Tooltip.warningLabel')
118
- : status === 'error'
119
- ? loc().t('Tooltip.errorLabel')
120
- : undefined,
121
- );
122
-
123
- // --- hover 延迟开关:setTimeout 存普通变量,cleanup 清除 ---
124
- let enterTimer: ReturnType<typeof setTimeout> | undefined;
125
- let leaveTimer: ReturnType<typeof setTimeout> | undefined;
126
-
127
- function clearTimers() {
128
- if (enterTimer !== undefined) {
129
- clearTimeout(enterTimer);
130
- enterTimer = undefined;
131
- }
132
- if (leaveTimer !== undefined) {
133
- clearTimeout(leaveTimer);
134
- leaveTimer = undefined;
135
- }
136
- }
137
-
138
- function onPointerEnter() {
139
- if (disabled || !triggers.includes('hover')) return;
140
- clearTimers();
141
- enterTimer = setTimeout(() => setOpen(true), mouseEnterDelay);
142
- }
143
-
144
- function onPointerLeave() {
145
- if (disabled || !triggers.includes('hover')) return;
146
- clearTimers();
147
- leaveTimer = setTimeout(() => setOpen(false), mouseLeaveDelay);
148
- }
149
-
150
- function onFocusIn() {
151
- if (disabled || !triggers.includes('focus')) return;
152
- setOpen(true);
153
- }
154
-
155
- function onFocusOut() {
156
- if (disabled || !triggers.includes('focus')) return;
157
- setOpen(false);
158
- }
159
-
160
- function onClick() {
161
- if (disabled || !triggers.includes('click')) return;
162
- setOpen(!isOpen);
163
- }
164
-
165
- // --- DOM 引用:触发包裹(浮层定位由 use:floating action 接管)---
166
- let rootEl = $state<HTMLSpanElement | null>(null);
167
- let popEl = $state<HTMLDivElement | null>(null);
168
-
169
- // 解析后的实际方位(flip 后),驱动箭头朝向 class。初值仅取 placement 一次。
170
- let resolvedPlacement = $state<Placement>(untrack(() => placement));
171
- const resolvedSide = $derived(resolveSide(resolvedPlacement));
172
- let arrowOffset = $state(0);
173
-
174
- // use:floating 的稳定参数:仅含原始输入(placement/trigger 不随 resolved 变化),
175
- // onPlacement 为稳定函数引用,避免 action update 触发重建循环。
176
- function onPlacement(info: { placement: Placement; arrowOffset: number }) {
177
- resolvedPlacement = info.placement;
178
- arrowOffset = info.arrowOffset;
179
- }
180
-
181
- // --- useDismiss (红线 #3):Esc 对所有触发模式生效(WCAG 1.4.13 Content on Hover:
182
- // hover/focus 浮层也须可由 Esc 关闭);外部点击关闭仅 click 触发需要(hover/focus 自然关)。
183
- // popup portal 列入 extraTargets。
184
- $effect(() => {
185
- if (!isOpen || !rootEl) return;
186
- const allowOutsideClick = triggers.includes('click');
187
- const cleanup = useDismiss(rootEl, {
188
- onDismiss: () => setOpen(false),
189
- escape: true,
190
- outsideClick: allowOutsideClick,
191
- extraTargets: [popEl],
192
- });
193
- return cleanup;
194
- });
195
-
196
- // cleanup hover 定时器
197
- $effect(() => clearTimers);
198
-
199
- // --- preventScroll:显示时锁定背景滚动(红线 #3:命令式 + cleanup)---
200
- $effect(() => {
201
- if (!isOpen || !preventScroll) return;
202
- const release = useScrollLock();
203
- return release;
204
- });
205
-
206
- // --- afterClose:浮层关闭后(isOpen 变 false)异步回调,确保动画有机会结束 ---
207
- // 记录上一帧 isOpen,避免首次挂载时误触发(初始值与 isOpen 一致不触发)。
208
- let prevOpenRef = { value: false };
209
- $effect(() => {
210
- const current = isOpen;
211
- if (prevOpenRef.value && !current) {
212
- // 用 requestAnimationFrame 延后一帧,让 CSS 过渡先触发
213
- requestAnimationFrame(() => afterClose?.());
214
- }
215
- prevOpenRef.value = current;
216
- });
217
-
218
- // 浮层根内联样式:自定义 zIndex 覆盖 token 层级。
219
- const popStyle = $derived(
220
- [
221
- `max-inline-size:${maxWidthCss}`,
222
- zIndex !== undefined ? `z-index:${zIndex}` : '',
223
- ]
224
- .filter(Boolean)
225
- .join(';'),
226
- );
227
-
228
- // stopPropagation:浮层内点击停止冒泡。
229
- function onPopClick(e: MouseEvent) {
230
- if (stopPropagation) e.stopPropagation();
231
- }
232
-
233
- // 箭头沿交叉轴的定位样式:top/bottom 用 inline-start,left/right 用 block-start。
234
- const arrowStyle = $derived(
235
- resolvedSide === 'top' || resolvedSide === 'bottom'
236
- ? `inset-inline-start:${arrowOffset}px`
237
- : `inset-block-start:${arrowOffset}px`,
238
- );
239
- </script>
240
-
241
- <!-- 触发包裹 span 仅转发宿主事件给真正可交互的 children;自身无障碍语义忽略 -->
242
- <!-- svelte-ignore a11y_no_static_element_interactions -->
243
- <!-- svelte-ignore a11y_click_events_have_key_events -->
244
- <span
245
- class="cd-tooltip"
246
- bind:this={rootEl}
247
- onpointerenter={onPointerEnter}
248
- onpointerleave={onPointerLeave}
249
- onfocusin={onFocusIn}
250
- onfocusout={onFocusOut}
251
- onclick={onClick}
252
- >
253
- <span
254
- class="cd-tooltip__trigger"
255
- aria-describedby={isOpen ? tipId : undefined}
256
- >
257
- {@render children?.()}
258
- </span>
259
-
260
- {#if isOpen}
261
- <!-- svelte-ignore a11y_click_events_have_key_events -->
262
- <!-- svelte-ignore a11y_no_static_element_interactions -->
263
- <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
264
- <div
265
- id={tipId}
266
- role="tooltip"
267
- bind:this={popEl}
268
- use:floating={{ trigger: rootEl, placement, autoAdjust: autoAdjustOverflow, offset: 8, arrowPointAtCenter, onPlacement, getContainer: resolvePopupContainer }}
269
- class="cd-tooltip__pop cd-tooltip__pop--{resolvedSide} cd-tooltip__pop--{theme}"
270
- class:cd-tooltip__pop--no-arrow={!showArrow}
271
- class:cd-tooltip__pop--with-status={hasStatusIcon}
272
- style={popStyle}
273
- onclick={onPopClick}
274
- >
275
- {#if hasStatusIcon}
276
- <span class="cd-tooltip__status cd-tooltip__status--{status}" aria-label={statusLabel} role="img">
277
- {#if status === 'warning'}
278
- <svg class="cd-tooltip__status-svg" viewBox="0 0 16 16" focusable="false">
279
- <path
280
- fill="none"
281
- stroke="currentColor"
282
- stroke-width="1.4"
283
- stroke-linejoin="round"
284
- d="M8 1.8l6.4 11.4H1.6z"
285
- />
286
- <path stroke="currentColor" stroke-width="1.4" stroke-linecap="round" d="M8 6v3.4" />
287
- <circle cx="8" cy="11.4" r="0.85" fill="currentColor" />
288
- </svg>
289
- {:else}
290
- <svg class="cd-tooltip__status-svg" viewBox="0 0 16 16" focusable="false">
291
- <circle cx="8" cy="8" r="7" fill="none" stroke="currentColor" stroke-width="1.4" />
292
- <path
293
- stroke="currentColor"
294
- stroke-width="1.6"
295
- stroke-linecap="round"
296
- d="M5.5 5.5l5 5M10.5 5.5l-5 5"
297
- />
298
- </svg>
299
- {/if}
300
- </span>
301
- {/if}
302
- <span class="cd-tooltip__content">
303
- {#if contentSnippet}
304
- {@render contentSnippet()}
305
- {:else}
306
- {contentText}
307
- {/if}
308
- </span>
309
- {#if showArrow}
310
- <span class="cd-tooltip__arrow" style={arrowStyle} aria-hidden="true"></span>
311
- {/if}
312
- </div>
313
- {/if}
314
- </span>
315
-
316
- <style>
317
- .cd-tooltip {
318
- position: relative;
319
- display: inline-block;
320
- }
321
- .cd-tooltip__trigger {
322
- display: inline-block;
323
- }
324
- /* 浮层 portal 到 body,由 JS 写 position:fixed + transform 定位 */
325
- .cd-tooltip__pop {
326
- z-index: var(--cd-tooltip-z);
327
- inline-size: max-content;
328
- padding: var(--cd-tooltip-padding);
329
- border-radius: var(--cd-tooltip-radius);
330
- font-size: var(--cd-tooltip-font-size);
331
- line-height: var(--cd-line-height-1, 1.5);
332
- word-wrap: break-word;
333
- pointer-events: none;
334
- }
335
-
336
- /* --- status:图标 + 内容横向排布 --- */
337
- .cd-tooltip__pop--with-status {
338
- display: inline-flex;
339
- align-items: flex-start;
340
- gap: var(--cd-spacing-1);
341
- }
342
- .cd-tooltip__status {
343
- display: inline-flex;
344
- flex: 0 0 auto;
345
- align-items: center;
346
- justify-content: center;
347
- inline-size: 1em;
348
- block-size: 1em;
349
- margin-block-start: 0.1em;
350
- }
351
- .cd-tooltip__status-svg {
352
- inline-size: 100%;
353
- block-size: 100%;
354
- }
355
- .cd-tooltip__status--warning {
356
- color: var(--cd-tooltip-status-warning);
357
- }
358
- .cd-tooltip__status--error {
359
- color: var(--cd-tooltip-status-error);
360
- }
361
- .cd-tooltip__content {
362
- min-inline-size: 0;
363
- }
364
-
365
- /* --- 主题 --- */
366
- .cd-tooltip__pop--dark {
367
- background: var(--cd-tooltip-bg-dark);
368
- color: var(--cd-tooltip-color-dark);
369
- }
370
- .cd-tooltip__pop--light {
371
- background: var(--cd-tooltip-bg-light);
372
- color: var(--cd-tooltip-color-light);
373
- box-shadow: var(--cd-tooltip-shadow);
374
- }
375
-
376
- /* --- 箭头:方块旋转 45deg,交叉轴偏移由内联 style 控制 --- */
377
- .cd-tooltip__arrow {
378
- position: absolute;
379
- inline-size: var(--cd-tooltip-arrow-size);
380
- block-size: var(--cd-tooltip-arrow-size);
381
- background: inherit;
382
- transform: rotate(45deg);
383
- }
384
- /* 交叉轴居中补偿:仅在交叉轴方向回退半个箭头尺寸 */
385
- .cd-tooltip__pop--top .cd-tooltip__arrow,
386
- .cd-tooltip__pop--bottom .cd-tooltip__arrow {
387
- margin-inline-start: calc(var(--cd-tooltip-arrow-size) / -2);
388
- }
389
- .cd-tooltip__pop--left .cd-tooltip__arrow,
390
- .cd-tooltip__pop--right .cd-tooltip__arrow {
391
- margin-block-start: calc(var(--cd-tooltip-arrow-size) / -2);
392
- }
393
- .cd-tooltip__pop--dark .cd-tooltip__arrow {
394
- background: var(--cd-tooltip-bg-dark);
395
- }
396
- .cd-tooltip__pop--light .cd-tooltip__arrow {
397
- background: var(--cd-tooltip-bg-light);
398
- }
399
-
400
- /* 箭头吸附到浮层贴近触发器的那条边(按解析后的 side) */
401
- .cd-tooltip__pop--top .cd-tooltip__arrow {
402
- inset-block-end: calc(var(--cd-tooltip-arrow-size) / -2);
403
- }
404
- .cd-tooltip__pop--bottom .cd-tooltip__arrow {
405
- inset-block-start: calc(var(--cd-tooltip-arrow-size) / -2);
406
- }
407
- .cd-tooltip__pop--left .cd-tooltip__arrow {
408
- inset-inline-end: calc(var(--cd-tooltip-arrow-size) / -2);
409
- }
410
- .cd-tooltip__pop--right .cd-tooltip__arrow {
411
- inset-inline-start: calc(var(--cd-tooltip-arrow-size) / -2);
412
- }
413
- .cd-tooltip__pop--no-arrow .cd-tooltip__arrow {
414
- display: none;
415
- }
416
- </style>
@@ -1,31 +0,0 @@
1
- <!--
2
- Tooltip a11y 测试夹具:在 LocaleProvider 内渲染 Tooltip,
3
- 并提供一个真实可聚焦的触发按钮作为 children(trigger 文案)。
4
- 仅供 Tooltip.a11y.test.ts 使用,不对外导出。
5
- -->
6
- <script lang="ts">
7
- import { LocaleProvider } from '../locale-provider/index.js';
8
- import Tooltip from './Tooltip.svelte';
9
-
10
- interface Props {
11
- open?: boolean;
12
- content?: string;
13
- status?: 'default' | 'warning' | 'error';
14
- trigger?: 'hover' | 'focus' | 'click' | 'custom';
15
- locale?: string;
16
- }
17
-
18
- let {
19
- open = false,
20
- content = 'More info',
21
- status = 'default',
22
- trigger = 'custom',
23
- locale = 'en_US',
24
- }: Props = $props();
25
- </script>
26
-
27
- <LocaleProvider {locale}>
28
- <Tooltip {open} {content} {status} {trigger}>
29
- <button type="button">Hover me</button>
30
- </Tooltip>
31
- </LocaleProvider>
@@ -1,16 +0,0 @@
1
- <!--
2
- 仅供 Tooltip.kbd.test.ts(browser project)使用的 Esc 关闭键盘 e2e 夹具。
3
- trigger='focus':聚焦触发按钮即显示浮层(focusin),便于在真实浏览器里用键盘驱动;
4
- 浮层 portal 到 document.body(use:floating),role=tooltip。
5
- 验证:聚焦显示后按 Esc,useDismiss(escape:true) 关闭浮层。
6
- -->
7
- <script lang="ts">
8
- import { LocaleProvider } from '../locale-provider/index.js';
9
- import Tooltip from './Tooltip.svelte';
10
- </script>
11
-
12
- <LocaleProvider locale="en_US">
13
- <Tooltip content="More info" trigger="focus">
14
- <button type="button" data-testid="trigger">Hover me</button>
15
- </Tooltip>
16
- </LocaleProvider>
@@ -1,2 +0,0 @@
1
- export { default as Tooltip } from './Tooltip.svelte';
2
- export { meta as tooltipMeta } from './meta.js';
@@ -1,59 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * See specs/00-foundation/ai-friendly.spec.md.
4
- */
5
- export const meta = {
6
- name: 'Tooltip',
7
- category: 'show',
8
- description:
9
- '文字提示,鼠标悬停/聚焦/点击触发元素时展示简短说明。支持常用 placement、箭头、延迟、dark/light 主题、status 语义图标与 custom 完全受控触发,浮层命令式定位。',
10
- props: [
11
- { name: 'content', type: 'string | Snippet', default: 'undefined', desc: '提示内容,为空不显示' },
12
- { name: 'open', type: 'boolean', default: 'undefined', desc: '受控显隐' },
13
- { name: 'defaultOpen', type: 'boolean', default: 'false', desc: '非受控初始显隐' },
14
- {
15
- name: 'trigger',
16
- type: "'hover'|'focus'|'click'|'custom'|Array<'hover'|'focus'|'click'|'custom'>",
17
- default: "['hover','focus']",
18
- desc: "触发方式,可组合;'custom' 完全受控(仅 open + onOpenChange,不自动 hover/click/focus)",
19
- },
20
- {
21
- name: 'placement',
22
- type: "'top'|'topLeft'|'topRight'|'bottom'|'bottomLeft'|'bottomRight'|'left'|'right'",
23
- default: 'top',
24
- desc: '浮层方位',
25
- },
26
- { name: 'mouseEnterDelay', type: 'number', default: '100', desc: 'hover 进入延迟(ms)' },
27
- { name: 'mouseLeaveDelay', type: 'number', default: '100', desc: 'hover 离开延迟(ms)' },
28
- { name: 'showArrow', type: 'boolean', default: 'true', desc: '是否显示箭头' },
29
- {
30
- name: 'arrowPointAtCenter',
31
- type: 'boolean',
32
- default: 'false',
33
- desc: 'start/end 对齐时箭头指向触发器中心',
34
- },
35
- { name: 'theme', type: "'dark'|'light'", default: 'dark', desc: '主题' },
36
- {
37
- name: 'status',
38
- type: "'default'|'warning'|'error'",
39
- default: 'default',
40
- desc: '语义态:非 default 时内容前渲染对应状态图标(图标 aria-label 经 locale)',
41
- },
42
- { name: 'maxWidth', type: 'number | string', default: '300', desc: '浮层最大宽度' },
43
- { name: 'disabled', type: 'boolean', default: 'false', desc: '禁用触发' },
44
- { name: 'onOpenChange', type: '(open: boolean) => void', default: 'undefined' },
45
- { name: 'children', type: 'Snippet', default: 'undefined', desc: '触发元素(必填)' },
46
- ],
47
- a11y: {
48
- role: 'tooltip',
49
- keyboard: ['Escape'],
50
- notes: [
51
- '浮层 role=tooltip,使用 useId 生成唯一 id',
52
- '触发元素 open 时加 aria-describedby 指向浮层',
53
- 'focus 触发支持键盘聚焦展示,click 触发用 useDismiss 处理 Escape 与外部点击',
54
- 'custom 触发不绑定 hover/click/focus,显隐完全由受控 open + onOpenChange 控制',
55
- 'status 非 default 时状态图标用 role=img + aria-label(经 locale)',
56
- ],
57
- },
58
- tokens: ['--cd-tooltip-*', '--cd-focus-ring', '--cd-motion-*'],
59
- } as const;
@@ -1,6 +0,0 @@
1
- import { parsePlacement, type Placement, type Side } from '@chenzy-design/core';
2
-
3
- /** 取 placement 的主方向 side(驱动箭头朝向的 class)。 */
4
- export function resolveSide(placement: Placement): Side {
5
- return parsePlacement(placement).side;
6
- }
@@ -1,63 +0,0 @@
1
- // Transfer a11y:双栏穿梭框(dual-listbox)。
2
- // 容器 role=group;每侧平铺列表 role=listbox + aria-multiselectable;
3
- // 条目 role=option + aria-selected。
4
- //
5
- // 组件 a11y 修复(原 axe violations 已消除):
6
- // 1. [aria-toggle-field-name] role=option 条目原可访问名为空(label 在 aria-hidden 子树内):
7
- // 已给 role=option 的 <li> 加 aria-label={item.label},提供可访问名(视觉勾选框仍 aria-hidden)。
8
- // 2. [aria-required-children]/[listitem] 空 listbox 仅含空态 <li>:空态时该 <ul> 退化为普通
9
- // 容器(去掉 role=listbox 及 listbox-only ARIA),空态 <li> 成为合法 listitem。
10
- import { describe, it, expect } from 'vitest';
11
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
12
- import Transfer from './Transfer.svelte';
13
-
14
- const dataSource = [
15
- { key: 'a', label: 'Apple' },
16
- { key: 'b', label: 'Banana' },
17
- { key: 'c', label: 'Cherry' },
18
- { key: 'd', label: 'Date' },
19
- ];
20
-
21
- describe('Transfer a11y', () => {
22
- it('默认渲染:role=group + 非空面板为 listbox + option role/aria(不跑 axe)', () => {
23
- const { container } = renderWithLocale(Transfer, {
24
- props: { dataSource },
25
- });
26
- expect(container.querySelector('[role="group"]')).not.toBeNull();
27
- // 默认无选中:源面板有项 → listbox;目标面板为空 → 退化为普通容器(非 listbox,
28
- // 避免 axe aria-required-children)。故此处仅 1 个 listbox。
29
- const listboxes = container.querySelectorAll('[role="listbox"]');
30
- expect(listboxes.length).toBe(1);
31
- const lb = listboxes[0];
32
- expect(lb?.getAttribute('aria-multiselectable')).toBe('true');
33
- // listbox 由栏标题 aria-labelledby 命名
34
- expect(lb?.getAttribute('aria-labelledby')).toBeTruthy();
35
- // 源面板 4 个 option,均带 aria-selected + aria-label(可访问名)
36
- const options = container.querySelectorAll('[role="option"]');
37
- expect(options.length).toBe(4);
38
- options.forEach((opt) => {
39
- expect(opt.hasAttribute('aria-selected')).toBe(true);
40
- expect(opt.getAttribute('aria-label')).toBeTruthy();
41
- });
42
- });
43
-
44
- it('带选中:两侧均非空 → 双 listbox,右侧含已选项 + aria-selected(不跑 axe)', () => {
45
- const { container } = renderWithLocale(Transfer, {
46
- props: { dataSource, defaultValue: ['b'] },
47
- });
48
- const listboxes = container.querySelectorAll('[role="listbox"]');
49
- expect(listboxes.length).toBe(2);
50
- const right = listboxes[1];
51
- expect(right).toBeDefined();
52
- expect(right?.textContent).toContain('Banana');
53
- expect(right?.querySelectorAll('[role="option"]').length).toBe(1);
54
- });
55
-
56
- // axe 0 violations:组件已修复(option aria-label 提供可访问名;空 listbox 退化为普通容器)。
57
- it('axe 0 violations(option 可访问名 + 空 listbox 处理后)', async () => {
58
- const { container } = renderWithLocale(Transfer, {
59
- props: { dataSource, defaultValue: ['b'] },
60
- });
61
- await expectNoAxeViolations(container);
62
- });
63
- });