@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,116 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * SideSheet — see specs/components/feedback/SideSheet.spec.md
4
- */
5
- export const meta = {
6
- name: 'SideSheet',
7
- category: 'feedback',
8
- stage: 'M5',
9
- semiEquivalent: 'SideSheet',
10
- description:
11
- '侧边滑出浮层:从视口四边(left/right/top/bottom)滑入的容器,承载次要任务流/详情/筛选/表单,比 Modal 提供更大可滚动内容区。与 Modal 同构复用浮层基建——portal 到 body(或 getContainer)脱离父层叠上下文;role=dialog,mask 时加 aria-modal;useFocusTrap 焦点捕获与归还(仅 mask=true)、useDismiss Esc 关闭(closeOnEsc),mask 时 useScrollLock 锁背景滚动(可 disableScrollLock 关闭)。mask=true 模态(遮罩+锁滚+陷阱),mask=false 非模态(无遮罩、不锁滚动、不抢焦点,outsideClosable 时点外部关闭)。size(small/default/large) 预设宽(横向)/高(纵向),width/height 显式覆盖;窄视口近铺满。Header/Body/Footer 三段式,footer 暴露 close()。滑入过渡为 CSS transform/opacity(token 时长缓动,reduced-motion 与 motionDisabled 退化为即时显隐)。lazyMount 首开前惰性挂载,destroyOnClose 关闭即卸载内容(出场过渡结束后 onAfterClose)。堆叠 z-index 复用 modal/z-stack 模块级计数器,与 Modal 统一层栈、后开者在上、Esc 仅关栈顶。受控 open(不回写),仅经 onOpenChange({open, reason}) 通知,reason 覆盖 esc/mask/outside/closeButton/programmatic。',
12
- exports: ['SideSheet'],
13
- a11yPattern: 'dialog-modal',
14
- apgRef: 'dialog (modal)',
15
- replaces: ['Drawer'],
16
- relatedComponents: ['Modal', 'Popover', 'Notification'],
17
- usageHints:
18
- '承载次要任务流/详情/筛选;模态用 mask=true,协作式(打开仍可操作主页面)用 mask=false。承载单一确认/决策用 Modal,不要混用。',
19
- dangerousActions:
20
- 'footer 危险操作(删除/清空等不可逆)使用 --cd-color-danger 与具体动词文案,并由业务侧拦截 onOpenChange 对未保存内容做二次确认。',
21
- props: [
22
- { name: 'open', type: 'boolean', default: 'false', desc: '受控显隐;受控时不回写,仅 onOpenChange 通知' },
23
- { name: 'placement', type: "'left'|'right'|'top'|'bottom'", default: "'right'", desc: '滑出方向(贴附边缘);RTL 下 left/right 镜像' },
24
- { name: 'size', type: "'small'|'default'|'large'", default: "'default'", desc: '预设尺度(横向→宽度,纵向→高度)' },
25
- { name: 'width', type: 'number|string', default: 'undefined', desc: 'left/right 显式宽度,覆盖 size;数字按 px' },
26
- { name: 'height', type: 'number|string', default: 'undefined', desc: 'top/bottom 显式高度,覆盖 size;数字按 px' },
27
- { name: 'title', type: 'string', default: 'undefined', desc: '标题文案' },
28
- { name: 'titleSnippet', type: 'Snippet', default: 'undefined', desc: '自定义标题区,覆盖 title' },
29
- { name: 'headerExtra', type: 'Snippet', default: 'undefined', desc: 'Header 右侧额外操作(关闭按钮之前)' },
30
- { name: 'closeIcon', type: 'Snippet', default: 'undefined', desc: '自定义关闭图标' },
31
- { name: 'mask', type: 'boolean', default: 'true', desc: '显示遮罩并以模态呈现(锁滚动+focus trap);false 非模态' },
32
- { name: 'maskClosable', type: 'boolean', default: 'true', desc: '点击遮罩是否关闭(mask=true 生效)' },
33
- { name: 'outsideClosable', type: 'boolean', default: 'false', desc: 'mask=false 时点击面板外部是否关闭' },
34
- { name: 'closeOnEsc', type: 'boolean', default: 'true', desc: '按 Esc 是否关闭(仅作用于浮层栈顶)' },
35
- { name: 'closable', type: 'boolean', default: 'true', desc: 'Header 是否显示关闭按钮' },
36
- { name: 'lazyMount', type: 'boolean', default: 'true', desc: '首次打开前是否惰性挂载内容' },
37
- { name: 'keepDOM', type: 'boolean', default: 'undefined', desc: 'true 时保留 DOM(禁用惰性挂载);lazyMount 优先' },
38
- { name: 'destroyOnClose', type: 'boolean', default: 'false', desc: '关闭后是否销毁内部内容(出场过渡结束后卸载),重开重建' },
39
- { name: 'getContainer', type: '() => HTMLElement | null', default: '() => document.body', desc: 'Portal 挂载容器' },
40
- { name: 'zIndex', type: 'number', default: '1000', desc: '浮层基准层级(栈内自动递增)' },
41
- { name: 'disableScrollLock', type: 'boolean', default: 'false', desc: '强制不锁背景滚动(即便 mask=true)' },
42
- { name: 'returnFocusTo', type: 'HTMLElement | (() => HTMLElement | null) | null', default: '触发元素', desc: '关闭后焦点返回目标' },
43
- { name: 'motionDisabled', type: 'boolean', default: 'false', desc: '关闭进出动效(独立于 reduced-motion)' },
44
- { name: 'footer', type: 'Snippet<[{ close: () => void }]>|null', default: 'undefined', desc: 'Footer 操作区;提供 close() 关闭面板;未提供不渲染' },
45
- { name: 'children', type: 'Snippet', default: 'undefined', desc: 'Body 主内容区(可滚动)' },
46
- { name: 'ariaLabel', type: 'string', default: 'undefined', desc: '无可见标题时提供 aria-label' },
47
- { name: 'class', type: 'string', default: 'undefined', desc: '面板自定义类名' },
48
- { name: 'bodyClass', type: 'string', default: 'undefined', desc: 'Body 自定义类名' },
49
- { name: 'maskClass', type: 'string', default: 'undefined', desc: '遮罩自定义类名' },
50
- { name: 'onOpenChange', type: '(e: { open: boolean; reason: Reason }) => void', default: 'undefined', desc: '显隐意图变化(受控,需外部回写 open)' },
51
- { name: 'onAfterOpen', type: '() => void', default: 'undefined', desc: '进入动效结束、内容完全可见后触发' },
52
- { name: 'onAfterClose', type: '() => void', default: 'undefined', desc: '退出动效结束、DOM 卸载后触发' },
53
- { name: 'onCancel', type: '(e: { reason: Reason }) => void', default: 'undefined', desc: '用户主动取消(Esc/遮罩/外部/关闭按钮)' },
54
- ],
55
- events: [
56
- { name: 'onOpenChange', desc: '显隐意图变化,payload { open, reason: esc|mask|outside|closeButton|programmatic }' },
57
- { name: 'onAfterOpen', desc: '进入动效结束后触发' },
58
- { name: 'onAfterClose', desc: '退出动效结束、DOM 卸载后触发' },
59
- { name: 'onCancel', desc: '用户主动取消,payload { reason }' },
60
- ],
61
- slots: [
62
- { name: 'children', desc: 'Body 主内容区(可滚动)' },
63
- { name: 'titleSnippet', desc: '自定义标题区,覆盖 title' },
64
- { name: 'headerExtra', desc: 'Header 右侧额外操作(关闭按钮之前)' },
65
- { name: 'footer', desc: 'Footer 操作区,提供 close()' },
66
- { name: 'closeIcon', desc: '自定义关闭图标' },
67
- ],
68
- a11y: {
69
- hasRole: true,
70
- focusable: true,
71
- note: 'role=dialog;mask=true 加 aria-modal=true(非模态不设,避免误导锁定语义);有 title 用 aria-labelledby,无则 ariaLabel;mask 时 useFocusTrap 捕获 Tab 焦点循环并在关闭归还 returnFocusTo/触发元素;closeOnEsc 控制 Esc(仅栈顶);mask 时 useScrollLock 锁背景滚动;关闭按钮 aria-label 经 SideSheet.closeAriaLabel;reduced-motion / motionDisabled 退化即时显隐。',
72
- },
73
- tokens: [
74
- '--cd-sidesheet-bg',
75
- '--cd-sidesheet-color',
76
- '--cd-sidesheet-mask-bg',
77
- '--cd-sidesheet-border',
78
- '--cd-sidesheet-radius',
79
- '--cd-sidesheet-shadow',
80
- '--cd-sidesheet-padding',
81
- '--cd-sidesheet-header-padding',
82
- '--cd-sidesheet-footer-padding',
83
- '--cd-sidesheet-title-color',
84
- '--cd-sidesheet-title-size',
85
- '--cd-sidesheet-close-color',
86
- '--cd-sidesheet-close-color-hover',
87
- '--cd-sidesheet-close-hover-bg',
88
- '--cd-sidesheet-width-small',
89
- '--cd-sidesheet-width',
90
- '--cd-sidesheet-width-large',
91
- '--cd-sidesheet-height-small',
92
- '--cd-sidesheet-height',
93
- '--cd-sidesheet-height-large',
94
- '--cd-sidesheet-z',
95
- '--cd-sidesheet-motion-duration',
96
- ],
97
- responsive: true,
98
- examples: [
99
- {
100
- title: '右侧模态面板',
101
- code: '<SideSheet open={visible} title="编辑用户" onOpenChange={(e) => (visible = e.open)}>表单</SideSheet>',
102
- },
103
- {
104
- title: '左侧导航面板',
105
- code: '<SideSheet open={visible} placement="left" title="菜单" onOpenChange={(e) => (visible = e.open)}>导航</SideSheet>',
106
- },
107
- {
108
- title: '非模态协作面板',
109
- code: '<SideSheet open={visible} mask={false} outsideClosable title="通知中心" onOpenChange={(e) => (visible = e.open)}>列表</SideSheet>',
110
- },
111
- {
112
- title: 'Footer 操作区',
113
- code: '<SideSheet open={visible} title="筛选" onOpenChange={(e) => (visible = e.open)}>{#snippet footer({ close })}<Button onclick={close}>取消</Button><Button type="primary">应用筛选</Button>{/snippet}内容</SideSheet>',
114
- },
115
- ],
116
- } as const;
@@ -1,35 +0,0 @@
1
- // Skeleton a11y:loading 占位容器 aria-busy + aria-live=polite + aria-label。
2
- //
3
- // 已知 violation(组件源码缺口,本批不改源码):占位容器是裸 <div>,带 aria-label/aria-live
4
- // 但无 role,axe 规则 [aria-prohibited-attr] 报「aria-label cannot be used on a div with no
5
- // valid role」。修复需给容器加 role(如 role="status"),属组件改动,故相关 axe 断言 it.skip。
6
- // 结构性 ARIA 断言(aria-busy/aria-live/aria-label 存在)仍作为非 skip 用例保留。
7
- import { describe, it, expect } from 'vitest';
8
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
9
- import Skeleton from './Skeleton.svelte';
10
-
11
- describe('Skeleton a11y', () => {
12
- it('loading:占位容器 aria-busy + aria-live + aria-label 结构正确', () => {
13
- const { container } = renderWithLocale(Skeleton, {
14
- props: { loading: true },
15
- });
16
- const root = container.querySelector('.cd-skeleton');
17
- expect(root?.getAttribute('aria-busy')).toBe('true');
18
- expect(root?.getAttribute('aria-live')).toBe('polite');
19
- expect(root?.getAttribute('aria-label')).toBeTruthy();
20
- });
21
-
22
- it('loading:无 axe violations(占位容器 role=status)', async () => {
23
- const { container } = renderWithLocale(Skeleton, {
24
- props: { loading: true },
25
- });
26
- await expectNoAxeViolations(container);
27
- });
28
-
29
- it('active:无 axe violations(占位容器 role=status)', async () => {
30
- const { container } = renderWithLocale(Skeleton, {
31
- props: { loading: true, active: true },
32
- });
33
- await expectNoAxeViolations(container);
34
- });
35
- });
@@ -1,131 +0,0 @@
1
- <!--
2
- Skeleton — 骨架屏容器。
3
- loading 切换占位/真实内容;active 控制 shimmer 动画(经 context 传给原子子组件)。
4
- loading 受控不回写(红线 #1):仅由父级 prop 驱动,组件内部不修改。
5
- 占位容器 aria-busy + aria-live=polite + aria-label;骨架块本身 aria-hidden。
6
- unmountPlaceholder=true(默认):{#if} 条件渲染,未激活的一侧从 DOM 卸载。
7
- unmountPlaceholder=false(keepDOM):占位与真实内容同时挂载,靠 display:none 切换,避免重挂开销。
8
- -->
9
- <script lang="ts">
10
- import type { Snippet } from 'svelte';
11
- import { setContext } from 'svelte';
12
- import { SKELETON_KEY, type SkeletonContext } from './context.js';
13
- import SkeletonAvatar from './SkeletonAvatar.svelte';
14
- import SkeletonTitle from './SkeletonTitle.svelte';
15
- import SkeletonParagraph from './SkeletonParagraph.svelte';
16
- import { useLocale } from '../locale-provider/index.js';
17
-
18
- interface Props {
19
- loading?: boolean;
20
- active?: boolean;
21
- unmountPlaceholder?: boolean;
22
- placeholder?: Snippet;
23
- children?: Snippet;
24
- ariaLabel?: string;
25
- class?: string;
26
- }
27
-
28
- let {
29
- loading = true,
30
- active = false,
31
- // unmountPlaceholder=true(默认)走 {#if} 卸载;false 走 keepDOM(display:none 切换)。
32
- unmountPlaceholder = true,
33
- placeholder,
34
- children,
35
- ariaLabel,
36
- class: className,
37
- }: Props = $props();
38
-
39
- const loc = useLocale();
40
-
41
- // setContext 一个带 getter 的对象:原子子组件读取 ctx.active 即建立响应式依赖。
42
- const ctx: SkeletonContext = {
43
- get active() {
44
- return active;
45
- },
46
- };
47
- setContext(SKELETON_KEY, ctx);
48
-
49
- const cls = $derived(
50
- ['cd-skeleton', active && 'cd-skeleton--active', className]
51
- .filter(Boolean)
52
- .join(' '),
53
- );
54
-
55
- // 状态渲染派生纯函数(红线 #2):仅由入参算出隐藏标记,不产生副作用。
56
- function hidden(isLoading: boolean, showWhenLoading: boolean): boolean {
57
- return showWhenLoading ? !isLoading : isLoading;
58
- }
59
- </script>
60
-
61
- {#snippet placeholderBody()}
62
- {#if placeholder}
63
- {@render placeholder()}
64
- {:else}
65
- <div class="cd-skeleton__default">
66
- <SkeletonAvatar />
67
- <div class="cd-skeleton__default-body">
68
- <SkeletonTitle />
69
- <SkeletonParagraph />
70
- </div>
71
- </div>
72
- {/if}
73
- {/snippet}
74
-
75
- {#if unmountPlaceholder}
76
- {#if loading}
77
- <div class={cls} role="status" aria-busy="true" aria-live="polite" aria-label={ariaLabel ?? loc().t('Skeleton.loading')}>
78
- {@render placeholderBody()}
79
- </div>
80
- {:else}
81
- {@render children?.()}
82
- {/if}
83
- {:else}
84
- <!-- keepDOM:两侧均挂载,靠 display:none 切换;隐藏侧加 inert/aria-hidden 防焦点与朗读。 -->
85
- <div
86
- class={cls}
87
- role="status"
88
- aria-busy="true"
89
- aria-live="polite"
90
- aria-label={ariaLabel ?? loc().t('Skeleton.loading')}
91
- aria-hidden={hidden(loading, true) ? 'true' : undefined}
92
- inert={hidden(loading, true)}
93
- hidden={hidden(loading, true)}
94
- >
95
- {@render placeholderBody()}
96
- </div>
97
- <div
98
- class="cd-skeleton__content"
99
- aria-hidden={hidden(loading, false) ? 'true' : undefined}
100
- inert={hidden(loading, false)}
101
- hidden={hidden(loading, false)}
102
- >
103
- {@render children?.()}
104
- </div>
105
- {/if}
106
-
107
- <style>
108
- .cd-skeleton {
109
- display: block;
110
- }
111
- .cd-skeleton__content {
112
- display: contents;
113
- }
114
- /* keepDOM 隐藏侧:[hidden] 须压过 .cd-skeleton 的 display:block 与 __content 的 display:contents。 */
115
- .cd-skeleton[hidden],
116
- .cd-skeleton__content[hidden] {
117
- display: none;
118
- }
119
- .cd-skeleton__default {
120
- display: flex;
121
- gap: var(--cd-skeleton-gap);
122
- align-items: flex-start;
123
- }
124
- .cd-skeleton__default-body {
125
- display: flex;
126
- flex: 1 1 auto;
127
- flex-direction: column;
128
- gap: var(--cd-skeleton-gap);
129
- min-inline-size: 0;
130
- }
131
- </style>
@@ -1,82 +0,0 @@
1
- <!--
2
- SkeletonAvatar — 头像骨架块(圆形 / 方形)。
3
- size 映射 small 24 / default 32 / large 40 / 数字直接 px。
4
- active 优先从 context 读(无 context 默认 false)。
5
- -->
6
- <script lang="ts">
7
- import { getContext } from 'svelte';
8
- import { SKELETON_KEY, type SkeletonContext } from './context.js';
9
-
10
- interface Props {
11
- shape?: 'circle' | 'square';
12
- size?: 'small' | 'default' | 'large' | number;
13
- class?: string;
14
- style?: string;
15
- }
16
-
17
- let { shape = 'circle', size = 'default', class: className, style }: Props = $props();
18
-
19
- const ctx = getContext<SkeletonContext | undefined>(SKELETON_KEY);
20
- const active = $derived(ctx?.active ?? false);
21
-
22
- const px = $derived.by(() => {
23
- if (typeof size === 'number') return size;
24
- if (size === 'small') return 24;
25
- if (size === 'large') return 40;
26
- return 32;
27
- });
28
- const radius = $derived(
29
- shape === 'circle'
30
- ? 'var(--cd-skeleton-radius-pill)'
31
- : 'var(--cd-skeleton-radius)',
32
- );
33
- const cls = $derived(
34
- ['cd-skeleton__block', 'cd-skeleton__avatar', className].filter(Boolean).join(' '),
35
- );
36
- </script>
37
-
38
- <div
39
- class={cls}
40
- class:cd-skeleton__block--active={active}
41
- aria-hidden="true"
42
- style="inline-size:{px}px; block-size:{px}px; border-radius:{radius}; {style ?? ''}"
43
- ></div>
44
-
45
- <style>
46
- .cd-skeleton__avatar {
47
- flex: 0 0 auto;
48
- }
49
-
50
- .cd-skeleton__block {
51
- background: var(--cd-skeleton-color-bg);
52
- border-radius: var(--cd-skeleton-radius);
53
- }
54
- .cd-skeleton__block--active {
55
- background-image: linear-gradient(
56
- 90deg,
57
- var(--cd-skeleton-color-bg) 25%,
58
- var(--cd-skeleton-color-highlight) 37%,
59
- var(--cd-skeleton-color-bg) 63%
60
- );
61
- background-size: 400% 100%;
62
- animation: -global-cd-skeleton-shimmer var(--cd-skeleton-anim-duration)
63
- var(--cd-skeleton-anim-timing) infinite;
64
- }
65
-
66
- @keyframes -global-cd-skeleton-shimmer {
67
- 0% {
68
- background-position: 100% 50%;
69
- }
70
- 100% {
71
- background-position: 0 50%;
72
- }
73
- }
74
-
75
- @media (prefers-reduced-motion: reduce) {
76
- .cd-skeleton__block--active {
77
- animation: none;
78
- background-image: none;
79
- background: var(--cd-skeleton-color-bg);
80
- }
81
- }
82
- </style>
@@ -1,90 +0,0 @@
1
- <!--
2
- SkeletonButton — 按钮骨架块(矩形 / 胶囊)。
3
- size 映射高度 small 24 / default 32 / large 40;block 时宽 100%,否则默认约 64px。
4
- active 优先从 context 读(无 context 默认 false)。
5
- -->
6
- <script lang="ts">
7
- import { getContext } from 'svelte';
8
- import { SKELETON_KEY, type SkeletonContext } from './context.js';
9
-
10
- interface Props {
11
- size?: 'small' | 'default' | 'large';
12
- block?: boolean;
13
- pill?: boolean;
14
- width?: string | number;
15
- class?: string;
16
- style?: string;
17
- }
18
-
19
- let {
20
- size = 'default',
21
- block = false,
22
- pill = false,
23
- width,
24
- class: className,
25
- style,
26
- }: Props = $props();
27
-
28
- const ctx = getContext<SkeletonContext | undefined>(SKELETON_KEY);
29
- const active = $derived(ctx?.active ?? false);
30
-
31
- const heightPx = $derived(size === 'small' ? 24 : size === 'large' ? 40 : 32);
32
- const inlineSize = $derived.by(() => {
33
- if (block) return '100%';
34
- if (width !== undefined) return typeof width === 'number' ? `${width}px` : width;
35
- return '64px';
36
- });
37
- const radius = $derived(
38
- pill ? 'var(--cd-skeleton-radius-pill)' : 'var(--cd-skeleton-radius)',
39
- );
40
- const cls = $derived(
41
- ['cd-skeleton__block', 'cd-skeleton__button', className].filter(Boolean).join(' '),
42
- );
43
- </script>
44
-
45
- <div
46
- class={cls}
47
- class:cd-skeleton__block--active={active}
48
- aria-hidden="true"
49
- style="inline-size:{inlineSize}; block-size:{heightPx}px; border-radius:{radius}; {style ??
50
- ''}"
51
- ></div>
52
-
53
- <style>
54
- .cd-skeleton__button {
55
- display: inline-block;
56
- }
57
-
58
- .cd-skeleton__block {
59
- background: var(--cd-skeleton-color-bg);
60
- border-radius: var(--cd-skeleton-radius);
61
- }
62
- .cd-skeleton__block--active {
63
- background-image: linear-gradient(
64
- 90deg,
65
- var(--cd-skeleton-color-bg) 25%,
66
- var(--cd-skeleton-color-highlight) 37%,
67
- var(--cd-skeleton-color-bg) 63%
68
- );
69
- background-size: 400% 100%;
70
- animation: -global-cd-skeleton-shimmer var(--cd-skeleton-anim-duration)
71
- var(--cd-skeleton-anim-timing) infinite;
72
- }
73
-
74
- @keyframes -global-cd-skeleton-shimmer {
75
- 0% {
76
- background-position: 100% 50%;
77
- }
78
- 100% {
79
- background-position: 0 50%;
80
- }
81
- }
82
-
83
- @media (prefers-reduced-motion: reduce) {
84
- .cd-skeleton__block--active {
85
- animation: none;
86
- background-image: none;
87
- background: var(--cd-skeleton-color-bg);
88
- }
89
- }
90
- </style>
@@ -1,100 +0,0 @@
1
- <!--
2
- SkeletonImage — 大矩形图片骨架块,showIcon 时中心放弱色图片图标。
3
- active 优先从 context 读(无 context 默认 false)。
4
- -->
5
- <script lang="ts">
6
- import { getContext } from 'svelte';
7
- import { SKELETON_KEY, type SkeletonContext } from './context.js';
8
-
9
- interface Props {
10
- width?: string | number;
11
- height?: string | number;
12
- showIcon?: boolean;
13
- class?: string;
14
- style?: string;
15
- }
16
-
17
- let {
18
- width = '100%',
19
- height = '120px',
20
- showIcon = true,
21
- class: className,
22
- style,
23
- }: Props = $props();
24
-
25
- const ctx = getContext<SkeletonContext | undefined>(SKELETON_KEY);
26
- const active = $derived(ctx?.active ?? false);
27
-
28
- const inlineSize = $derived(typeof width === 'number' ? `${width}px` : width);
29
- const blockSize = $derived(typeof height === 'number' ? `${height}px` : height);
30
- const cls = $derived(
31
- ['cd-skeleton__block', 'cd-skeleton__image', className].filter(Boolean).join(' '),
32
- );
33
- </script>
34
-
35
- <div
36
- class={cls}
37
- class:cd-skeleton__block--active={active}
38
- aria-hidden="true"
39
- style="inline-size:{inlineSize}; block-size:{blockSize}; {style ?? ''}"
40
- >
41
- {#if showIcon}
42
- <svg
43
- class="cd-skeleton__image-icon"
44
- viewBox="0 0 48 48"
45
- width="32"
46
- height="32"
47
- aria-hidden="true"
48
- focusable="false"
49
- >
50
- <path
51
- fill="currentColor"
52
- d="M40 8H8a4 4 0 0 0-4 4v24a4 4 0 0 0 4 4h32a4 4 0 0 0 4-4V12a4 4 0 0 0-4-4Zm0 28H8v-6l8-8 6 6 10-10 8 8v10ZM16 22a4 4 0 1 1 0-8 4 4 0 0 1 0 8Z"
53
- />
54
- </svg>
55
- {/if}
56
- </div>
57
-
58
- <style>
59
- .cd-skeleton__image {
60
- display: flex;
61
- align-items: center;
62
- justify-content: center;
63
- }
64
- .cd-skeleton__image-icon {
65
- color: var(--cd-color-text-3);
66
- }
67
-
68
- .cd-skeleton__block {
69
- background: var(--cd-skeleton-color-bg);
70
- border-radius: var(--cd-skeleton-radius);
71
- }
72
- .cd-skeleton__block--active {
73
- background-image: linear-gradient(
74
- 90deg,
75
- var(--cd-skeleton-color-bg) 25%,
76
- var(--cd-skeleton-color-highlight) 37%,
77
- var(--cd-skeleton-color-bg) 63%
78
- );
79
- background-size: 400% 100%;
80
- animation: -global-cd-skeleton-shimmer var(--cd-skeleton-anim-duration)
81
- var(--cd-skeleton-anim-timing) infinite;
82
- }
83
-
84
- @keyframes -global-cd-skeleton-shimmer {
85
- 0% {
86
- background-position: 100% 50%;
87
- }
88
- 100% {
89
- background-position: 0 50%;
90
- }
91
- }
92
-
93
- @media (prefers-reduced-motion: reduce) {
94
- .cd-skeleton__block--active {
95
- animation: none;
96
- background-image: none;
97
- background: var(--cd-skeleton-color-bg);
98
- }
99
- }
100
- </style>
@@ -1,103 +0,0 @@
1
- <!--
2
- SkeletonParagraph — 多行段落骨架块。
3
- 宽度规则:width 是数组按行取(越界用 100%);是单值时全部行用该值;
4
- 未给 width 时末行收窄到 61%、其余 100%。
5
- active 优先从 context 读(无 context 默认 false)。
6
- -->
7
- <script lang="ts">
8
- import { getContext } from 'svelte';
9
- import { SKELETON_KEY, type SkeletonContext } from './context.js';
10
-
11
- interface Props {
12
- rows?: number;
13
- width?: string | number | Array<string | number>;
14
- class?: string;
15
- style?: string;
16
- }
17
-
18
- let { rows = 3, width, class: className, style }: Props = $props();
19
-
20
- const ctx = getContext<SkeletonContext | undefined>(SKELETON_KEY);
21
- const active = $derived(ctx?.active ?? false);
22
-
23
- function toLength(value: string | number): string {
24
- return typeof value === 'number' ? `${value}px` : value;
25
- }
26
-
27
- const widths = $derived.by(() => {
28
- const list: string[] = [];
29
- for (let i = 0; i < rows; i++) {
30
- const last = i === rows - 1;
31
- if (Array.isArray(width)) {
32
- const v = width[i];
33
- list.push(v === undefined ? '100%' : toLength(v));
34
- } else if (width === undefined) {
35
- list.push(last ? '61%' : '100%');
36
- } else {
37
- list.push(toLength(width));
38
- }
39
- }
40
- return list;
41
- });
42
-
43
- const cls = $derived(
44
- ['cd-skeleton__paragraph', className].filter(Boolean).join(' '),
45
- );
46
- </script>
47
-
48
- <ul class={cls} aria-hidden="true" style={style}>
49
- {#each widths as w, i (i)}
50
- <li
51
- class="cd-skeleton__block cd-skeleton__paragraph-row"
52
- class:cd-skeleton__block--active={active}
53
- style="inline-size:{w}"
54
- ></li>
55
- {/each}
56
- </ul>
57
-
58
- <style>
59
- .cd-skeleton__paragraph {
60
- display: flex;
61
- flex-direction: column;
62
- gap: var(--cd-skeleton-gap);
63
- margin: 0;
64
- padding: 0;
65
- list-style: none;
66
- }
67
- .cd-skeleton__paragraph-row {
68
- block-size: var(--cd-skeleton-paragraph-height);
69
- }
70
-
71
- .cd-skeleton__block {
72
- background: var(--cd-skeleton-color-bg);
73
- border-radius: var(--cd-skeleton-radius);
74
- }
75
- .cd-skeleton__block--active {
76
- background-image: linear-gradient(
77
- 90deg,
78
- var(--cd-skeleton-color-bg) 25%,
79
- var(--cd-skeleton-color-highlight) 37%,
80
- var(--cd-skeleton-color-bg) 63%
81
- );
82
- background-size: 400% 100%;
83
- animation: -global-cd-skeleton-shimmer var(--cd-skeleton-anim-duration)
84
- var(--cd-skeleton-anim-timing) infinite;
85
- }
86
-
87
- @keyframes -global-cd-skeleton-shimmer {
88
- 0% {
89
- background-position: 100% 50%;
90
- }
91
- 100% {
92
- background-position: 0 50%;
93
- }
94
- }
95
-
96
- @media (prefers-reduced-motion: reduce) {
97
- .cd-skeleton__block--active {
98
- animation: none;
99
- background-image: none;
100
- background: var(--cd-skeleton-color-bg);
101
- }
102
- }
103
- </style>