@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,164 +0,0 @@
1
- <!--
2
- Timeline.Item — 声明式单项,与 dataSource 模式渲染同一套 .cd-timeline__item 结构,
3
- 从而复用父 Timeline 的 :nth-child 交替布局 CSS(alternate/center)与方向样式,无需索引计算。
4
-
5
- interactive:父 Timeline 开启时,项渲染为可聚焦 role=button,roving tabindex 由父持有的
6
- 焦点 id 决定(getter 经 context 保持响应性,项不写 $state——红线 #2)。方向键 roving 上交父级
7
- 处理,Enter/Space 触发本项 onClick。挂载时经 context 领号、卸载时退号(命令式 cleanup)。
8
- -->
9
- <script lang="ts">
10
- import { untrack, type Snippet } from 'svelte';
11
- import { getTimelineContext, type TimelineLineStyle } from './context.js';
12
-
13
- interface Props {
14
- /** 圆点颜色(等价 dataSource 项的 dotColor/color)。 */
15
- dotColor?: string;
16
- /** 圆点颜色别名(与 dotColor 等价,优先级低于 dotColor)。 */
17
- color?: string;
18
- /** 语义类型,给圆点附加 cd-timeline__dot--{type} class。 */
19
- type?: 'default' | 'ongoing' | 'success' | 'warning' | 'error';
20
- /** 自定义圆点 snippet,提供时替代默认圆点。 */
21
- dot?: Snippet;
22
- /** 单项连接线样式,覆盖父 Timeline 的 lineStyle。 */
23
- lineStyle?: TimelineLineStyle;
24
- /** 时间文本,渲染在内容下方(horizontal 模式同 dataSource)。 */
25
- time?: string;
26
- /** 覆盖父 Timeline mode 的单项定位('left' | 'right')。 */
27
- position?: 'left' | 'right';
28
- /** 辅助内容(时间旁附加信息),字符串或 Snippet。 */
29
- extra?: string | Snippet;
30
- /** interactive 模式下按 Enter/Space 或点击该节点触发。 */
31
- onClick?: () => void;
32
- children?: Snippet;
33
- }
34
-
35
- let { dotColor, color, type, dot, lineStyle, time, position, extra, onClick, children }: Props = $props();
36
-
37
- const ctx = getTimelineContext();
38
-
39
- // 未显式指定时回退到父 Timeline 的 lineStyle。
40
- const effectiveLine = $derived<TimelineLineStyle>(lineStyle ?? ctx?.getLineStyle() ?? 'solid');
41
-
42
- // dotColor 优先,其次 color 别名。
43
- const effectiveDotColor = $derived(dotColor ?? color);
44
-
45
- const dotInline = $derived(effectiveDotColor ? `--cd-timeline-dot-current: ${effectiveDotColor};` : undefined);
46
-
47
- const dotClass = $derived(
48
- ['cd-timeline__dot', type && type !== 'default' && `cd-timeline__dot--${type}`]
49
- .filter(Boolean)
50
- .join(' '),
51
- );
52
-
53
- // interactive:在 $effect 内 mount 领号 / unmount 退号(仿 Tabs;untrack 读初值仅跑一次,
54
- // 避免重注册打乱保序)。项自身不参与 roving 簿记 $state。
55
- const interactive = $derived(ctx?.getInteractive() ?? false);
56
- let myId = $state(-1);
57
- $effect(() => {
58
- const reg = ctx?.registerItem;
59
- if (!reg) return;
60
- const r = untrack(() => reg());
61
- myId = r.id;
62
- return r.unregister;
63
- });
64
-
65
- // roving tabindex:焦点项 0,其余 -1(焦点状态经 context getter 读取,保持响应性)。
66
- const tindex = $derived(interactive && myId >= 0 && ctx?.isFocused(myId) ? 0 : -1);
67
-
68
- function onKeydown(e: KeyboardEvent): void {
69
- if (!interactive) return;
70
- // Enter/Space 触发本项 onClick;方向键 roving 交父级。
71
- if (e.key === 'Enter' || e.key === ' ') {
72
- e.preventDefault();
73
- onClick?.();
74
- return;
75
- }
76
- ctx?.onItemKeydown(myId, e);
77
- }
78
-
79
- function onActivate(): void {
80
- if (!interactive) {
81
- onClick?.();
82
- return;
83
- }
84
- ctx?.onItemFocus(myId);
85
- onClick?.();
86
- }
87
- </script>
88
-
89
- {#if interactive}
90
- <!-- svelte-ignore a11y_no_noninteractive_element_to_interactive_role -->
91
- <li
92
- class={[
93
- 'cd-timeline__item',
94
- 'cd-timeline__item--interactive',
95
- effectiveLine === 'dashed' && 'cd-timeline__item--dashed',
96
- position && `cd-timeline__item--${position}`,
97
- ]}
98
- role="button"
99
- tabindex={tindex}
100
- data-tid={myId}
101
- onclick={onActivate}
102
- onkeydown={onKeydown}
103
- onfocus={() => ctx?.onItemFocus(myId)}
104
- >
105
- <span class="cd-timeline__tail" aria-hidden="true"></span>
106
- <span class={dotClass} style={dotInline} aria-hidden="true">
107
- {#if dot}{@render dot()}{/if}
108
- </span>
109
- <div class="cd-timeline__body">
110
- <div class="cd-timeline__content">{@render children?.()}</div>
111
- {#if time || extra}
112
- <div class="cd-timeline__time">
113
- {#if time}{time}{/if}
114
- {#if extra}
115
- {#if typeof extra === 'string'}
116
- <span class="cd-timeline__extra">{extra}</span>
117
- {:else}
118
- <span class="cd-timeline__extra">{@render extra()}</span>
119
- {/if}
120
- {/if}
121
- </div>
122
- {/if}
123
- </div>
124
- </li>
125
- {:else}
126
- <li
127
- class={[
128
- 'cd-timeline__item',
129
- effectiveLine === 'dashed' && 'cd-timeline__item--dashed',
130
- position && `cd-timeline__item--${position}`,
131
- ]}
132
- >
133
- <span class="cd-timeline__tail" aria-hidden="true"></span>
134
- <span class={dotClass} style={dotInline} aria-hidden="true">
135
- {#if dot}{@render dot()}{/if}
136
- </span>
137
- <div class="cd-timeline__body">
138
- <div class="cd-timeline__content">{@render children?.()}</div>
139
- {#if time || extra}
140
- <div class="cd-timeline__time">
141
- {#if time}{time}{/if}
142
- {#if extra}
143
- {#if typeof extra === 'string'}
144
- <span class="cd-timeline__extra">{extra}</span>
145
- {:else}
146
- <span class="cd-timeline__extra">{@render extra()}</span>
147
- {/if}
148
- {/if}
149
- </div>
150
- {/if}
151
- </div>
152
- </li>
153
- {/if}
154
-
155
- <style>
156
- /* 单项 dashed 覆盖:作用于自身 tail,优先于父级 solid。 */
157
- .cd-timeline__item--dashed .cd-timeline__tail {
158
- border-inline-start-style: dashed;
159
- }
160
- :global(.cd-timeline--horizontal) .cd-timeline__item--dashed .cd-timeline__tail {
161
- border-inline-start: none;
162
- border-block-start-style: dashed;
163
- }
164
- </style>
@@ -1,28 +0,0 @@
1
- import { getContext, setContext } from 'svelte';
2
-
3
- export type TimelineLineStyle = 'solid' | 'dashed';
4
-
5
- export interface TimelineContext {
6
- // getter 保持对父 Timeline prop 变化的响应性(直接读快照会冻结初始值)。
7
- getLineStyle: () => TimelineLineStyle;
8
- /** interactive 是否开启(getter 保持响应性)。 */
9
- getInteractive: () => boolean;
10
- /** 声明式项挂载时领号,返回 id 与卸载清理;id 构成 roving 序列。 */
11
- registerItem: () => { id: number; unregister: () => void };
12
- /** 该 id 是否为当前 roving 焦点项(决定 tabindex 0/-1)。 */
13
- isFocused: (id: number) => boolean;
14
- /** 声明式项键盘事件冒泡到父:方向键 roving 由父处理(Enter/Space 由项自身处理)。 */
15
- onItemKeydown: (id: number, e: KeyboardEvent) => void;
16
- /** 项获得焦点时同步父级焦点索引(点击/Tab 进入)。 */
17
- onItemFocus: (id: number) => void;
18
- }
19
-
20
- const KEY = Symbol('cd-timeline');
21
-
22
- export function setTimelineContext(ctx: TimelineContext): void {
23
- setContext(KEY, ctx);
24
- }
25
-
26
- export function getTimelineContext(): TimelineContext | undefined {
27
- return getContext<TimelineContext | undefined>(KEY);
28
- }
@@ -1,16 +0,0 @@
1
- import Timeline_ from './Timeline.svelte';
2
- import TimelineItem from './TimelineItem.svelte';
3
-
4
- export const Timeline: typeof Timeline_ & {
5
- Item: typeof TimelineItem;
6
- } = Object.assign(Timeline_, { Item: TimelineItem });
7
-
8
- export { TimelineItem };
9
- export { meta as timelineMeta } from './meta.js';
10
- export type { TimelineItemData } from './types.js';
11
- export {
12
- getTimelineContext,
13
- setTimelineContext,
14
- type TimelineContext,
15
- type TimelineLineStyle,
16
- } from './context.js';
@@ -1,129 +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: 'Timeline',
7
- category: 'show',
8
- description:
9
- '时间轴,按时间顺序垂直/水平展示一组事件。两种用法择一:传 dataSource 数据驱动,或不传 dataSource 而在 children 内写 <Timeline.Item> 声明式(可放任意富内容)。支持 left/right/alternate/center 模式、vertical/horizontal 方向、pending 幽灵节点、reverse 倒序与实/虚线样式;交替布局由纯 CSS :nth-child 决定,两种用法共用同一套结构与样式。',
10
- props: [
11
- {
12
- name: 'dataSource',
13
- type: 'TimelineItemData[]',
14
- default: '[]',
15
- desc: '节点数据(数据驱动用法;优先于声明式 children)',
16
- },
17
- {
18
- name: 'children',
19
- type: 'Snippet',
20
- default: 'undefined',
21
- desc: '声明式用法:内嵌 <Timeline.Item> 列表,仅在未传 dataSource 时生效',
22
- },
23
- {
24
- name: 'mode',
25
- type: "'left'|'right'|'alternate'|'center'",
26
- default: 'left',
27
- desc: 'right 轴线在右、内容靠右对齐(left 镜像);center 轴线居中、两侧内容朝轴对称对齐',
28
- },
29
- {
30
- name: 'direction',
31
- type: "'vertical'|'horizontal'",
32
- default: 'vertical',
33
- desc: '时间轴方向',
34
- },
35
- { name: 'reverse', type: 'boolean', default: 'false', desc: '倒序展示' },
36
- {
37
- name: 'pending',
38
- type: 'boolean|string',
39
- default: 'false',
40
- desc: '末尾追加幽灵节点,string 作为其内容',
41
- },
42
- { name: 'size', type: "'small'|'default'|'large'", default: 'default' },
43
- { name: 'lineStyle', type: "'solid'|'dashed'", default: 'solid' },
44
- {
45
- name: 'virtualized',
46
- type: 'boolean',
47
- default: 'false',
48
- desc: '虚拟化:长时间轴只渲染视口内项(复用 core fixedRange;仅 dataSource 模式生效,强制 vertical 列布局,轴线靠固定项高连续)',
49
- },
50
- {
51
- name: 'itemHeight',
52
- type: 'number',
53
- default: '56',
54
- desc: '虚拟化固定项高(px)',
55
- },
56
- {
57
- name: 'maxHeight',
58
- type: 'number|string',
59
- default: '400',
60
- desc: '虚拟化视口最大高(px 数字或 CSS 字符串)',
61
- },
62
- {
63
- name: 'overscan',
64
- type: 'number',
65
- default: '3',
66
- desc: '虚拟化上下缓冲项数',
67
- },
68
- {
69
- name: 'interactive',
70
- type: 'boolean',
71
- default: 'false',
72
- desc: 'roving tabindex 键盘漫游:项可聚焦,↑↓/←→ 移动焦点、Home/End 跳首尾、Enter/Space 触发项 onClick',
73
- },
74
- { name: 'class', type: 'string', default: "''" },
75
- ],
76
- subComponents: [
77
- {
78
- name: 'Timeline.Item',
79
- desc: '声明式单项,渲染 dot/line/内容(children),与 dataSource 项视觉一致',
80
- props: [
81
- { name: 'dotColor', type: 'string', default: 'undefined', desc: '圆点颜色' },
82
- { name: 'color', type: 'string', default: 'undefined', desc: '圆点颜色别名(与 dotColor 等价,dotColor 优先)' },
83
- {
84
- name: 'type',
85
- type: "'default'|'ongoing'|'success'|'warning'|'error'",
86
- default: 'undefined',
87
- desc: '语义类型,给圆点附加 cd-timeline__dot--{type} class',
88
- },
89
- { name: 'dot', type: 'Snippet', default: 'undefined', desc: '自定义圆点 snippet,提供时替代默认圆点' },
90
- {
91
- name: 'lineStyle',
92
- type: "'solid'|'dashed'",
93
- default: '继承父 Timeline',
94
- desc: '单项连接线样式',
95
- },
96
- { name: 'time', type: 'string', default: 'undefined', desc: '时间文本' },
97
- {
98
- name: 'position',
99
- type: "'left'|'right'",
100
- default: 'undefined',
101
- desc: '覆盖父 Timeline mode 的单项定位',
102
- },
103
- {
104
- name: 'extra',
105
- type: 'string | Snippet',
106
- default: 'undefined',
107
- desc: '时间旁辅助内容',
108
- },
109
- {
110
- name: 'onClick',
111
- type: '() => void',
112
- default: 'undefined',
113
- desc: 'interactive 模式下点击或 Enter/Space 触发',
114
- },
115
- { name: 'children', type: 'Snippet', default: 'undefined', desc: '项内容' },
116
- ],
117
- },
118
- ],
119
- a11y: {
120
- role: 'list',
121
- notes: [
122
- 'ul/li 结构',
123
- '圆点与连接线 aria-hidden=true',
124
- '内容与时间为可读文本',
125
- 'interactive:项 role=button + roving tabindex(焦点项 tabindex=0 其余 -1),↑↓/←→ 移动焦点、Home/End 跳首尾、Enter/Space 激活,aria-label 取节点内容',
126
- ],
127
- },
128
- tokens: ['--cd-timeline-*', '--cd-radius-full', '--cd-spacing-1', '--cd-font-size-1'],
129
- } as const;
@@ -1,9 +0,0 @@
1
- export interface TimelineItemData {
2
- key?: string;
3
- content: string;
4
- time?: string;
5
- color?: string;
6
- dotColor?: string;
7
- /** interactive 模式下按 Enter/Space 或点击该节点触发(非 interactive 时忽略)。 */
8
- onClick?: () => void;
9
- }
@@ -1,67 +0,0 @@
1
- // Toast a11y:命令式单例 API(Toast.info 等)经惰性挂载容器渲染。
2
- // Toast 的播报模型与多数库不同:卡片本身 role=presentation + aria-live=off(不充当 live
3
- // region),所有文案播报统一走单例 live region(live-region.ts),避免每卡各自 region 的
4
- // 重复/竞争。故拆两部分测:
5
- // 1) ToastItem 纯展示卡片:role=presentation + aria-live=off,关闭按钮 locale 可访问名,axe 0。
6
- // 2) live region:announce() 命令式写入 body 内 role=status(polite)/ role=alert(assertive)节点。
7
- // jsdom 只断言静态 ARIA + axe。
8
- import { describe, it, expect, afterEach } from 'vitest';
9
- import type { Component } from 'svelte';
10
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
11
- import ToastItemRaw from './ToastItem.svelte';
12
- import { announce, __resetLiveRegion } from './live-region.js';
13
- import type { ToastItem as ToastItemData } from '@chenzy-design/core';
14
-
15
- // ToastItem 有必填 props(toast/onClose/...);测试帮手用宽松 Record 构造器签名,
16
- // 故在此把组件转为宽松类型(props 实际值在调用处提供,运行时安全)。
17
- const ToastItem = ToastItemRaw as unknown as Component<Record<string, unknown>>;
18
-
19
- const noop = () => {};
20
-
21
- function makeToast(overrides: Partial<ToastItemData> = {}): ToastItemData {
22
- return {
23
- id: 't1',
24
- content: 'Copied to clipboard',
25
- type: 'success',
26
- duration: 3,
27
- position: 'top',
28
- closable: true,
29
- pauseOnHover: true,
30
- theme: 'light',
31
- onClose: undefined,
32
- ...overrides,
33
- };
34
- }
35
-
36
- describe('Toast a11y', () => {
37
- afterEach(() => {
38
- __resetLiveRegion();
39
- });
40
-
41
- it('ToastItem 卡片:role=presentation + aria-live=off + 关闭按钮 locale 可访问名,无 axe violations', async () => {
42
- const { container } = renderWithLocale(ToastItem, {
43
- props: { toast: makeToast(), onClose: noop, onPause: noop, onResume: noop },
44
- });
45
- const card = container.querySelector('.cd-toast-item');
46
- expect(card?.getAttribute('role')).toBe('presentation');
47
- expect(card?.getAttribute('aria-live')).toBe('off');
48
- expect(container.querySelector('.cd-toast-item__close')?.getAttribute('aria-label')).toBeTruthy();
49
- await expectNoAxeViolations(container);
50
- });
51
-
52
- it('live region:polite 文案写入 role=status / aria-live=polite 节点', async () => {
53
- announce('Saved', 'success');
54
- const polite = document.querySelector('.cd-toast-live-region[aria-live="polite"]');
55
- expect(polite?.getAttribute('role')).toBe('status');
56
- expect(polite?.textContent).toBe('Saved');
57
- await expectNoAxeViolations(document.body);
58
- });
59
-
60
- it('live region:error 文案写入 role=alert / aria-live=assertive 节点', async () => {
61
- announce('Failed', 'error');
62
- const assertive = document.querySelector('.cd-toast-live-region[aria-live="assertive"]');
63
- expect(assertive?.getAttribute('role')).toBe('alert');
64
- expect(assertive?.textContent).toBe('Failed');
65
- await expectNoAxeViolations(document.body);
66
- });
67
- });
@@ -1,184 +0,0 @@
1
- <!--
2
- ToastContainer — 单例容器,订阅 store 渲染全部 toast。
3
- 由 store.ts 惰性 mount 到 body 下的宿主节点;仅此一个实例。
4
- 按 6 方位(topLeft/top/topRight/bottomLeft/bottom/bottomRight)分组渲染独立堆叠列,
5
- 对齐 Notification 的方位实现。向后兼容:旧的纯 top/bottom 用法仍居中堆叠不变。
6
- 进出场用 svelte/transition fly(运行时驱动,退场后 DOM 正常卸载,不卡 from 帧);
7
- 重排用 animate:flip。reduced-motion 时 fly duration 降为 0。
8
- 红线 #2:方位分组(grouped)/进出场偏移(flyParams)为派生纯函数。
9
- 红线:render 不读 effect 写的状态——toasts 初始同步读一次(拿到惰性挂载前已入队的首条),
10
- $effect 仅做订阅 + cleanup 退订。
11
- -->
12
- <script lang="ts">
13
- import { fly } from 'svelte/transition';
14
- import { flip } from 'svelte/animate';
15
- import { prefersReducedMotion } from 'svelte/motion';
16
- import type { ToastStore, ToastItem, ToastPosition } from '@chenzy-design/core';
17
- import ToastItemView from './ToastItem.svelte';
18
- import { getToastConfig } from './store.js';
19
-
20
- interface Props {
21
- store: ToastStore;
22
- }
23
-
24
- let { store }: Props = $props();
25
-
26
- // 初始同步读一次:捕获惰性挂载前已入队的首条 toast。
27
- // 用函数包裹读取,避免 state 初始化器直接引用 prop 触发 state_referenced_locally。
28
- // core 的 subscribe 不会立即回放当前值,因此必须在此先读一次。
29
- function readInitial(): ToastItem[] {
30
- return store.getToasts();
31
- }
32
- let toasts = $state<ToastItem[]>(readInitial());
33
-
34
- // 桥接外部(非 Svelte runes)store:订阅写入本地 state,cleanup 退订。
35
- // 这是 store->state 的单向桥,无法用 $derived 表达(外部 store 非响应式源)。
36
- $effect(() => {
37
- const unsub = store.subscribe((v) => {
38
- toasts = v;
39
- });
40
- return unsub;
41
- });
42
-
43
- const positions: ToastPosition[] = [
44
- 'topLeft',
45
- 'top',
46
- 'topRight',
47
- 'bottomLeft',
48
- 'bottom',
49
- 'bottomRight',
50
- ];
51
-
52
- const flyDuration = $derived(prefersReducedMotion.current ? 0 : 220);
53
- const flipDuration = $derived(prefersReducedMotion.current ? 0 : 200);
54
-
55
- // 红线 #2:方位分组纯派生——按 6 方位过滤当前 toasts。
56
- const grouped = $derived(
57
- positions.map((p) => ({
58
- position: p,
59
- items: toasts.filter((t) => t.position === p),
60
- })),
61
- );
62
-
63
- // 每方位进出场偏移:左侧从左滑入、右侧从右滑入、居中走垂直(对齐 Notification)。
64
- function flyParams(position: ToastPosition): { x: number; y: number } {
65
- if (position === 'topLeft' || position === 'bottomLeft') return { x: -24, y: 0 };
66
- if (position === 'topRight' || position === 'bottomRight') return { x: 24, y: 0 };
67
- return { x: 0, y: position === 'top' ? -16 : 16 };
68
- }
69
-
70
- function handleClose(id: string) {
71
- store.remove(id, 'manual');
72
- }
73
- function handlePause(id: string) {
74
- store.pause(id);
75
- }
76
- function handleResume(id: string) {
77
- store.resume(id);
78
- }
79
-
80
- // 全局配置衍生样式变量(应用到容器的 CSS 自定义属性)。
81
- function toPx(v: number | string | undefined): string | undefined {
82
- if (v === undefined) return undefined;
83
- return typeof v === 'number' ? `${v}px` : v;
84
- }
85
-
86
- const cfg = $derived(getToastConfig());
87
- const configStyle = $derived(() => {
88
- const parts: string[] = [];
89
- if (cfg.zIndex !== undefined) parts.push(`--cd-toast-z: ${cfg.zIndex}`);
90
- if (cfg.top !== undefined) parts.push(`--cd-toast-config-top: ${toPx(cfg.top)}`);
91
- if (cfg.bottom !== undefined) parts.push(`--cd-toast-config-bottom: ${toPx(cfg.bottom)}`);
92
- if (cfg.left !== undefined) parts.push(`--cd-toast-config-left: ${toPx(cfg.left)}`);
93
- if (cfg.right !== undefined) parts.push(`--cd-toast-config-right: ${toPx(cfg.right)}`);
94
- return parts.length > 0 ? parts.join('; ') : undefined;
95
- });
96
-
97
- // 任一 toast 带 stack 标志时,整组容器附加 stacked class。
98
- const hasStack = $derived(toasts.some((t) => t.stack));
99
- </script>
100
-
101
- {#each grouped as group (group.position)}
102
- {#if group.items.length > 0}
103
- <div
104
- class={['cd-toast-stack', `cd-toast-stack--${group.position}`, hasStack && 'cd-toast-wrapper--stacked']}
105
- style={configStyle()}
106
- >
107
- {#each group.items as t (t.id)}
108
- <div
109
- class="cd-toast-stack__item"
110
- in:fly={{ ...flyParams(group.position), duration: flyDuration }}
111
- out:fly={{ ...flyParams(group.position), duration: flyDuration }}
112
- animate:flip={{ duration: flipDuration }}
113
- >
114
- <ToastItemView
115
- toast={t}
116
- onClose={handleClose}
117
- onPause={handlePause}
118
- onResume={handleResume}
119
- />
120
- </div>
121
- {/each}
122
- </div>
123
- {/if}
124
- {/each}
125
-
126
- <style>
127
- .cd-toast-stack {
128
- position: fixed;
129
- z-index: var(--cd-toast-z);
130
- display: flex;
131
- flex-direction: column;
132
- gap: var(--cd-toast-stack-gap);
133
- inline-size: max-content;
134
- max-inline-size: calc(100vw - 32px);
135
- pointer-events: none;
136
- }
137
-
138
- .cd-toast-stack--topLeft {
139
- top: 24px;
140
- left: 24px;
141
- align-items: flex-start;
142
- }
143
-
144
- .cd-toast-stack--top {
145
- top: 24px;
146
- left: 50%;
147
- transform: translateX(-50%);
148
- align-items: center;
149
- }
150
-
151
- .cd-toast-stack--topRight {
152
- top: 24px;
153
- right: 24px;
154
- align-items: flex-end;
155
- }
156
-
157
- .cd-toast-stack--bottomLeft {
158
- bottom: 24px;
159
- left: 24px;
160
- align-items: flex-start;
161
- flex-direction: column-reverse;
162
- }
163
-
164
- .cd-toast-stack--bottom {
165
- bottom: 24px;
166
- left: 50%;
167
- transform: translateX(-50%);
168
- align-items: center;
169
- flex-direction: column-reverse;
170
- }
171
-
172
- .cd-toast-stack--bottomRight {
173
- bottom: 24px;
174
- right: 24px;
175
- align-items: flex-end;
176
- flex-direction: column-reverse;
177
- }
178
-
179
- .cd-toast-stack__item {
180
- inline-size: auto;
181
- max-inline-size: 100%;
182
- pointer-events: none;
183
- }
184
- </style>