@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,23 +0,0 @@
1
- <!--
2
- 仅供 Calendar.kbd.test.ts(browser project)使用的网格键盘 e2e 夹具。
3
- 内联月视图 Calendar(非 popup):网格用真实 roving 焦点(活动格 tabindex=0,
4
- 方向键命令式移动 DOM 焦点;跨月翻页落焦)。
5
- 固定 defaultValue=2024-03-15 让初始网格稳定(active 格回退到选中/锚点)。
6
- -->
7
- <script lang="ts">
8
- import { LocaleProvider } from '../locale-provider/index.js';
9
- import Calendar from './Calendar.svelte';
10
-
11
- const defaultValue = new Date(2024, 2, 15);
12
- </script>
13
-
14
- <LocaleProvider locale="en_US">
15
- <button type="button" data-testid="before">before</button>
16
- <Calendar
17
- mode="month"
18
- {defaultValue}
19
- defaultSelectedDate={defaultValue}
20
- locale="en-US"
21
- ariaLabel="calendar grid"
22
- />
23
- </LocaleProvider>
@@ -1,3 +0,0 @@
1
- export { default as Calendar } from './Calendar.svelte';
2
- export { meta as calendarMeta } from './meta.js';
3
- export type { CalendarEvent } from '@chenzy-design/core';
@@ -1,117 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * Calendar — see specs/components/show/Calendar.spec.md
4
- */
5
- export const meta = {
6
- name: 'Calendar',
7
- category: 'show',
8
- description:
9
- '月/周/日视图日历:日格网格 + 事件展示与 +N 折叠,today/selected/outside/weekend/disabled 态、导航(上一/今天/下一,月或周或天);mode 切换月(6×7)/周(1×7)/日(单日时间轴)视图,day 模式纵向列出小时段(dayStartHour~dayEndHour),带时间的事件按起始小时入对应时段、全天或跨天延续事件入顶部「全天」区,selectionMode 切换单选(selectedDate)/范围(rangeValue,起止+区间高亮+hover 预览)。受控 value(锚点)/selectedDate/rangeValue 不回写,仅通过 onChange/onSelect/onRangeChange/onDateClick/onMoreClick 通知。完整 WAI-ARIA grid roving 键盘焦点(方向键/PageUp-Down/Home-End/Enter-Space),popup 弹层模式(复用 _floating 门户 + 外部点击/Esc 关闭),day 视图时间轴虚拟化(复用 core fixedRange)。',
10
- exports: ['Calendar'],
11
- props: [
12
- { name: 'value', type: 'Date', default: 'undefined', desc: '受控锚点日期(决定展示月份/周),受控时不回写' },
13
- { name: 'defaultValue', type: 'Date', default: 'new Date()', desc: '非受控初始锚点' },
14
- { name: 'mode', type: "'month' | 'week' | 'day'", default: "'month'", desc: '视图模式:月(6×7)/周(1×7)/日(单日时间轴)' },
15
- { name: 'selectionMode', type: "'single' | 'range'", default: "'single'", desc: '选择模式:单选或范围' },
16
- { name: 'events', type: 'CalendarEvent[]', default: '[]', desc: '事件列表' },
17
- { name: 'weekStartsOn', type: '0|1|2|3|4|5|6', default: '0', desc: '一周起始(0=周日)' },
18
- { name: 'maxEventsPerDay', type: 'number', default: '3', desc: '每格最多事件数,超出折叠 +N(month/week)' },
19
- { name: 'dayStartHour', type: 'number', default: '0', desc: 'day 视图时间轴起始小时(0-23)' },
20
- { name: 'dayEndHour', type: 'number', default: '23', desc: 'day 视图时间轴结束小时(0-23,含)' },
21
- { name: 'weekendDays', type: 'number[]', default: '[0, 6]', desc: '周末列序号' },
22
- { name: 'markWeekend', type: 'boolean', default: 'true', desc: '弱化高亮周末列' },
23
- { name: 'disabledDate', type: '(date: Date) => boolean', default: 'undefined', desc: '命中则该格禁用' },
24
- { name: 'selectedDate', type: 'Date', default: 'undefined', desc: '受控选中日(边框态,single 模式),受控时不回写' },
25
- { name: 'defaultSelectedDate', type: 'Date', default: 'undefined', desc: '非受控选中日初值' },
26
- { name: 'rangeValue', type: '[Date, Date] | null', default: 'undefined', desc: '受控选中范围(range 模式),受控时不回写' },
27
- { name: 'defaultRangeValue', type: '[Date, Date] | null', default: 'undefined', desc: '非受控范围初值' },
28
- { name: 'locale', type: 'string', default: "'zh-CN'", desc: 'Intl 月份/星期名格式化语言' },
29
- { name: 'ariaLabel', type: 'string', default: 'undefined', desc: '网格 aria-label,默认取月份标题' },
30
- { name: 'popup', type: 'boolean', default: 'false', desc: '弹层模式:渲染 trigger,日历作为浮层弹出(复用 _floating 门户定位)' },
31
- { name: 'open', type: 'boolean', default: 'undefined', desc: '受控展开态(popup),受控时不回写仅 onOpenChange' },
32
- { name: 'defaultOpen', type: 'boolean', default: 'false', desc: '非受控初始展开态' },
33
- { name: 'onOpenChange', type: '(info: { open: boolean }) => void', default: 'undefined', desc: '展开态变化回调' },
34
- { name: 'placement', type: 'Placement', default: "'bottomStart'", desc: '浮层相对 trigger 的位置' },
35
- { name: 'getContainer', type: '() => HTMLElement | null', default: 'undefined', desc: '浮层门户挂载容器(默认 body)' },
36
- { name: 'trigger', type: 'Snippet', default: 'undefined', desc: 'popup 模式 trigger 自定义内容 { open, toggle }' },
37
- { name: 'virtualizeDay', type: "boolean | 'auto'", default: "'auto'", desc: 'day 时间轴虚拟化:auto 按阈值/true 强制/false 关闭' },
38
- { name: 'virtualizeThreshold', type: 'number', default: '18', desc: '触发虚拟化的最少小时行数(auto 生效)' },
39
- { name: 'timelineViewportHeight', type: 'number', default: '360', desc: 'day 时间轴虚拟化视口高度(px)' },
40
- { name: 'onChange', type: '(info: { value: Date }) => void', default: 'undefined' },
41
- { name: 'onSelect', type: '(info: { date: Date }) => void', default: 'undefined' },
42
- { name: 'onRangeChange', type: '(info: { range: [Date, Date] }) => void', default: 'undefined' },
43
- { name: 'onDateClick', type: '(info: { date: Date }) => void', default: 'undefined' },
44
- {
45
- name: 'onMoreClick',
46
- type: '(info: { date: Date; events: CalendarEvent[] }) => void',
47
- default: 'undefined',
48
- },
49
- { name: 'dateCell', type: 'Snippet', default: 'undefined', desc: '自定义整格内容' },
50
- { name: 'event', type: 'Snippet', default: 'undefined', desc: '自定义事件块' },
51
- ],
52
- events: [
53
- { name: 'onChange', desc: '锚点(翻月/翻周/今天)变化' },
54
- { name: 'onSelect', desc: '选中某日(single 模式)' },
55
- { name: 'onRangeChange', desc: '范围选择完成(range 模式,已排序)' },
56
- { name: 'onDateClick', desc: '点击日格' },
57
- { name: 'onMoreClick', desc: '点击 +N 折叠触发器' },
58
- ],
59
- slots: [
60
- { name: 'dateCell', desc: '自定义整格内容 { date, events, isToday, isOutside, disabled }' },
61
- { name: 'event', desc: '自定义事件块 { event }' },
62
- { name: 'trigger', desc: 'popup 模式 trigger 自定义内容 { open, toggle }' },
63
- ],
64
- a11y: {
65
- hasRole: true,
66
- focusable: true,
67
- note: '网格 role=grid,星期表头行 role=row 含 role=columnheader,每周一行 role=row 含 role=gridcell;today 设 aria-current=date,选中设 aria-selected,禁用设 aria-disabled。完整 WAI-ARIA grid roving 焦点:网格内仅活动格 tabindex=0(余 -1),方向键移动焦点(←→ 天、↑↓ 周、PageUp/Down 月、Home/End 周首末),跨月/周自动翻页并落焦,Enter/Space 选中。popup 模式:trigger aria-haspopup=dialog/aria-expanded,浮层 role=dialog,外部点击/Esc 关闭并归还焦点。',
68
- },
69
- tokens: [
70
- '--cd-calendar-bg',
71
- '--cd-calendar-border',
72
- '--cd-calendar-header-bg',
73
- '--cd-calendar-text',
74
- '--cd-calendar-text-secondary',
75
- '--cd-calendar-today-bg',
76
- '--cd-calendar-today-fg',
77
- '--cd-calendar-selected-border',
78
- '--cd-calendar-range-bg',
79
- '--cd-calendar-range-edge-bg',
80
- '--cd-calendar-week-cell-min-h',
81
- '--cd-calendar-hour-min-h',
82
- '--cd-calendar-hour-label-w',
83
- '--cd-calendar-weekend-bg',
84
- '--cd-calendar-cell-bg-hover',
85
- '--cd-calendar-event-default-bg',
86
- '--cd-calendar-event-fg',
87
- '--cd-calendar-disabled-bg',
88
- '--cd-calendar-more-color',
89
- '--cd-calendar-cell-min-h',
90
- '--cd-calendar-radius',
91
- ],
92
- responsive: false,
93
- examples: [
94
- { title: '基础月历', code: '<Calendar />' },
95
- {
96
- title: '带事件',
97
- code: '<Calendar events={[{ key: 1, start: new Date(), title: "会议" }]} />',
98
- },
99
- { title: '周视图', code: '<Calendar mode="week" />' },
100
- {
101
- title: '日视图(单日时间轴)',
102
- code: '<Calendar mode="day" dayStartHour={8} dayEndHour={20} events={[{ key: 1, start: new Date(), title: "会议" }]} />',
103
- },
104
- {
105
- title: '范围选择',
106
- code: '<Calendar selectionMode="range" onRangeChange={(i) => console.log(i.range)} />',
107
- },
108
- {
109
- title: '弹层模式',
110
- code: '<Calendar popup defaultOpen onSelect={(i) => console.log(i.date)} />',
111
- },
112
- {
113
- title: '弹层模式(自定义 trigger)',
114
- code: '<Calendar popup>{#snippet trigger({ toggle })}<button onclick={toggle}>选择日期</button>{/snippet}</Calendar>',
115
- },
116
- ],
117
- } as const;
@@ -1,38 +0,0 @@
1
- // Card a11y:有 title 时 role=region + aria-labelledby;clickable 时 role=button + tabindex。
2
- import { describe, it, expect } from 'vitest';
3
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
4
- import Card from './Card.svelte';
5
-
6
- describe('Card a11y', () => {
7
- it('带 title:role=region + aria-labelledby 指向标题,无 axe violations', async () => {
8
- const { container } = renderWithLocale(Card, {
9
- props: { title: 'User profile' },
10
- });
11
- const root = container.querySelector('.cd-card');
12
- expect(root?.getAttribute('role')).toBe('region');
13
- const labelledby = root?.getAttribute('aria-labelledby');
14
- expect(labelledby).toBeTruthy();
15
- const titleEl = labelledby ? container.querySelector(`#${labelledby}`) : null;
16
- expect(titleEl?.textContent).toContain('User profile');
17
- await expectNoAxeViolations(container);
18
- });
19
-
20
- it('clickable:role=button + tabindex=0,无 axe violations', async () => {
21
- const { container } = renderWithLocale(Card, {
22
- props: { title: 'Clickable card', clickable: true, onClick: () => {} },
23
- });
24
- const root = container.querySelector('.cd-card');
25
- expect(root?.getAttribute('role')).toBe('button');
26
- expect(root?.getAttribute('tabindex')).toBe('0');
27
- await expectNoAxeViolations(container);
28
- });
29
-
30
- it('loading:aria-busy=true,无 axe violations', async () => {
31
- const { container } = renderWithLocale(Card, {
32
- props: { title: 'Loading card', loading: true },
33
- });
34
- const root = container.querySelector('.cd-card');
35
- expect(root?.getAttribute('aria-busy')).toBe('true');
36
- await expectNoAxeViolations(container);
37
- });
38
- });
@@ -1,341 +0,0 @@
1
- <!--
2
- Card — see specs/components/show/Card.spec.md
3
- Container: cover → header → body (with loading skeleton) → actions.
4
- -->
5
- <script lang="ts">
6
- import type { Snippet } from 'svelte';
7
- import { useId } from '@chenzy-design/core';
8
-
9
- type CardSize = 'small' | 'default' | 'large';
10
- type CardShadow = 'never' | 'hover' | 'always';
11
-
12
- interface Props {
13
- title?: string | Snippet;
14
- extra?: Snippet;
15
- cover?: Snippet;
16
- actions?: Snippet;
17
- size?: CardSize;
18
- bordered?: boolean;
19
- shadow?: CardShadow;
20
- hoverable?: boolean;
21
- loading?: boolean;
22
- loadingRows?: number;
23
- /** header 区内联样式透传 */
24
- headerStyle?: string;
25
- /** body 区内联样式透传 */
26
- bodyStyle?: string;
27
- /** header 与 body 间是否显示分隔线 */
28
- headerLine?: boolean;
29
- /** actions 区上方是否显示分隔线 */
30
- footerLine?: boolean;
31
- /** actions/footer 区内联样式透传 */
32
- footerStyle?: string;
33
- /** 整卡可点击:合并 hoverable 视觉并启用键盘/点击激活与 role=button */
34
- clickable?: boolean;
35
- /** 仅在 clickable 时生效,禁用点击与 hover 反馈 */
36
- disabled?: boolean;
37
- class?: string;
38
- onClick?: (originalEvent: MouseEvent | KeyboardEvent) => void;
39
- onMouseenter?: (originalEvent: MouseEvent) => void;
40
- onMouseleave?: (originalEvent: MouseEvent) => void;
41
- children?: Snippet;
42
- }
43
-
44
- let {
45
- title,
46
- extra,
47
- cover,
48
- actions,
49
- size = 'default',
50
- bordered = true,
51
- shadow = 'never',
52
- hoverable = false,
53
- loading = false,
54
- loadingRows = 3,
55
- headerStyle,
56
- bodyStyle,
57
- headerLine = true,
58
- footerLine = true,
59
- footerStyle,
60
- clickable = false,
61
- disabled = false,
62
- class: className,
63
- onClick,
64
- onMouseenter,
65
- onMouseleave,
66
- children,
67
- }: Props = $props();
68
-
69
- const titleId = useId('cd-card-title');
70
- const titleIsString = $derived(typeof title === 'string');
71
- const titleText = $derived(typeof title === 'string' ? title : undefined);
72
- const titleSnippet = $derived(typeof title === 'function' ? title : undefined);
73
- const hasTitle = $derived(title !== undefined);
74
- const hasHeader = $derived(hasTitle || extra !== undefined);
75
-
76
- // skeleton rows is render-only (derived from a number prop, not a mounted array)
77
- const rows = $derived(
78
- Array.from({ length: Math.max(0, loadingRows) }, (_, i) => i),
79
- );
80
-
81
- const cls = $derived(
82
- [
83
- 'cd-card',
84
- `cd-card--${size}`,
85
- bordered && 'cd-card--bordered',
86
- `cd-card--shadow-${shadow}`,
87
- (hoverable || shadow === 'hover' || (clickable && !disabled)) &&
88
- 'cd-card--hoverable',
89
- clickable && 'cd-card--clickable',
90
- clickable && disabled && 'cd-card--disabled',
91
- className,
92
- ]
93
- .filter(Boolean)
94
- .join(' '),
95
- );
96
-
97
- // clickable interaction: pure handlers, no global listeners → no cleanup needed
98
- function handleClick(e: MouseEvent) {
99
- if (!clickable || disabled) return;
100
- onClick?.(e);
101
- }
102
-
103
- function handleKeydown(e: KeyboardEvent) {
104
- if (!clickable || disabled) return;
105
- if (e.key === 'Enter' || e.key === ' ') {
106
- // Space: prevent page scroll on activation
107
- e.preventDefault();
108
- onClick?.(e);
109
- }
110
- }
111
-
112
- function handleMouseenter(e: MouseEvent) {
113
- onMouseenter?.(e);
114
- }
115
- function handleMouseleave(e: MouseEvent) {
116
- onMouseleave?.(e);
117
- }
118
- </script>
119
-
120
- <!--
121
- tabindex is only set together with role="button" (clickable, not disabled),
122
- so the element is interactive when focusable; the static check can't see the
123
- cross-attribute correlation.
124
- -->
125
- <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
126
- <div
127
- class={cls}
128
- role={clickable ? 'button' : hasTitle ? 'region' : undefined}
129
- aria-labelledby={titleIsString ? titleId : undefined}
130
- aria-busy={loading || undefined}
131
- aria-disabled={clickable && disabled ? 'true' : undefined}
132
- tabindex={clickable ? (disabled ? -1 : 0) : undefined}
133
- onclick={clickable ? handleClick : undefined}
134
- onkeydown={clickable ? handleKeydown : undefined}
135
- onmouseenter={onMouseenter ? handleMouseenter : undefined}
136
- onmouseleave={onMouseleave ? handleMouseleave : undefined}
137
- >
138
- {#if cover}
139
- <div class="cd-card__cover">{@render cover()}</div>
140
- {/if}
141
-
142
- {#if hasHeader}
143
- <div
144
- class={['cd-card__header', !headerLine && 'cd-card__header--no-line']
145
- .filter(Boolean)
146
- .join(' ')}
147
- style={headerStyle}
148
- >
149
- {#if hasTitle}
150
- <div class="cd-card__title" id={titleIsString ? titleId : undefined}>
151
- {#if titleText !== undefined}
152
- {titleText}
153
- {:else if titleSnippet}
154
- {@render titleSnippet()}
155
- {/if}
156
- </div>
157
- {/if}
158
- {#if extra}
159
- <div class="cd-card__extra">{@render extra()}</div>
160
- {/if}
161
- </div>
162
- {/if}
163
-
164
- <div class="cd-card__body" style={bodyStyle}>
165
- {#if loading}
166
- <div class="cd-card__skeleton" aria-hidden="true">
167
- {#each rows as row (row)}
168
- <span class="cd-card__skeleton-row"></span>
169
- {/each}
170
- </div>
171
- {:else}
172
- {@render children?.()}
173
- {/if}
174
- </div>
175
-
176
- {#if actions}
177
- <div
178
- class={['cd-card__actions', !footerLine && 'cd-card__actions--no-line']
179
- .filter(Boolean)
180
- .join(' ')}
181
- style={footerStyle}
182
- >
183
- {@render actions()}
184
- </div>
185
- {/if}
186
- </div>
187
-
188
- <style>
189
- .cd-card {
190
- display: flex;
191
- flex-direction: column;
192
- background: var(--cd-card-bg);
193
- border: 1px solid transparent;
194
- border-radius: var(--cd-card-radius);
195
- overflow: hidden;
196
- transition: box-shadow var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
197
- }
198
- .cd-card--bordered {
199
- border-color: var(--cd-card-border);
200
- }
201
- .cd-card--shadow-always {
202
- box-shadow: var(--cd-card-shadow);
203
- }
204
- .cd-card--hoverable:hover,
205
- .cd-card--shadow-hover:hover {
206
- box-shadow: var(--cd-card-shadow-hover);
207
- }
208
-
209
- .cd-card--clickable {
210
- cursor: pointer;
211
- transition:
212
- box-shadow var(--cd-motion-duration-fast) var(--cd-motion-ease-standard),
213
- transform var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
214
- }
215
- .cd-card--clickable:not(.cd-card--disabled):hover {
216
- transform: translateY(-2px);
217
- }
218
- .cd-card--clickable:focus-visible {
219
- outline: none;
220
- box-shadow: var(--cd-focus-ring);
221
- }
222
- .cd-card--disabled {
223
- cursor: not-allowed;
224
- opacity: 0.5;
225
- }
226
- .cd-card--disabled.cd-card--clickable:hover {
227
- transform: none;
228
- box-shadow: none;
229
- }
230
-
231
- .cd-card__cover {
232
- display: block;
233
- overflow: hidden;
234
- }
235
- .cd-card__cover :global(img) {
236
- display: block;
237
- inline-size: 100%;
238
- }
239
-
240
- .cd-card__header {
241
- display: flex;
242
- align-items: center;
243
- justify-content: space-between;
244
- gap: var(--cd-spacing-3);
245
- padding: var(--cd-card-padding);
246
- border-block-end: 1px solid var(--cd-card-header-border);
247
- }
248
- .cd-card__header--no-line {
249
- border-block-end: none;
250
- }
251
- .cd-card--small .cd-card__header {
252
- padding: var(--cd-card-padding-small);
253
- }
254
- .cd-card__title {
255
- color: var(--cd-card-title-color);
256
- font-weight: var(--cd-font-weight-semibold);
257
- font-size: var(--cd-font-size-3);
258
- min-inline-size: 0;
259
- }
260
- .cd-card--small .cd-card__title {
261
- font-size: var(--cd-font-size-2);
262
- }
263
- .cd-card--large .cd-card__title {
264
- font-size: var(--cd-font-size-4);
265
- }
266
- .cd-card__extra {
267
- flex: 0 0 auto;
268
- color: var(--cd-color-text-2);
269
- font-size: var(--cd-font-size-2);
270
- }
271
-
272
- .cd-card__body {
273
- flex: 1 1 auto;
274
- padding: var(--cd-card-padding);
275
- color: var(--cd-color-text-0);
276
- }
277
- .cd-card--small .cd-card__body {
278
- padding: var(--cd-card-padding-small);
279
- }
280
-
281
- .cd-card__actions {
282
- display: flex;
283
- align-items: center;
284
- border-block-start: 1px solid var(--cd-card-header-border);
285
- }
286
- .cd-card__actions--no-line {
287
- border-block-start: none;
288
- }
289
- .cd-card__actions :global(> *) {
290
- flex: 1 1 0;
291
- display: flex;
292
- align-items: center;
293
- justify-content: center;
294
- padding-block: var(--cd-spacing-3);
295
- }
296
- .cd-card__actions :global(> * + *) {
297
- border-inline-start: 1px solid var(--cd-card-header-border);
298
- }
299
-
300
- .cd-card__skeleton {
301
- display: flex;
302
- flex-direction: column;
303
- gap: var(--cd-spacing-3);
304
- }
305
- .cd-card__skeleton-row {
306
- display: block;
307
- block-size: 0.9em;
308
- border-radius: var(--cd-radius-1);
309
- background: linear-gradient(
310
- 90deg,
311
- var(--cd-color-fill-0) 25%,
312
- var(--cd-color-fill-1) 37%,
313
- var(--cd-color-fill-0) 63%
314
- );
315
- background-size: 400% 100%;
316
- animation: cd-card-shimmer 1.4s ease infinite;
317
- }
318
- .cd-card__skeleton-row:last-child {
319
- inline-size: 60%;
320
- }
321
-
322
- @keyframes cd-card-shimmer {
323
- 0% {
324
- background-position: 100% 50%;
325
- }
326
- 100% {
327
- background-position: 0 50%;
328
- }
329
- }
330
- @media (prefers-reduced-motion: reduce) {
331
- .cd-card,
332
- .cd-card--clickable,
333
- .cd-card__skeleton-row {
334
- transition: none;
335
- animation: none;
336
- }
337
- .cd-card--clickable:not(.cd-card--disabled):hover {
338
- transform: none;
339
- }
340
- }
341
- </style>
@@ -1,60 +0,0 @@
1
- <!--
2
- Card.Meta — 卡片内容区的结构化元信息子组件。
3
- 含 avatar(左侧图标/头像)、title(标题)、description(描述),均支持字符串或 Snippet。
4
- -->
5
- <script lang="ts">
6
- import type { Snippet } from 'svelte';
7
-
8
- interface Props {
9
- avatar?: Snippet;
10
- title?: Snippet | string;
11
- description?: Snippet | string;
12
- class?: string;
13
- style?: string;
14
- }
15
-
16
- let { avatar, title, description, class: className, style }: Props = $props();
17
- </script>
18
-
19
- <div class={['cd-card__meta', className].filter(Boolean).join(' ')} {style}>
20
- {#if avatar}
21
- <div class="cd-card__meta-avatar">{@render avatar()}</div>
22
- {/if}
23
- <div class="cd-card__meta-detail">
24
- {#if title !== undefined}
25
- <div class="cd-card__meta-title">
26
- {#if typeof title === 'string'}{title}{:else}{@render title()}{/if}
27
- </div>
28
- {/if}
29
- {#if description !== undefined}
30
- <div class="cd-card__meta-description">
31
- {#if typeof description === 'string'}{description}{:else}{@render description()}{/if}
32
- </div>
33
- {/if}
34
- </div>
35
- </div>
36
-
37
- <style>
38
- .cd-card__meta {
39
- display: flex;
40
- align-items: flex-start;
41
- gap: var(--cd-spacing-3);
42
- }
43
- .cd-card__meta-avatar {
44
- flex: 0 0 auto;
45
- }
46
- .cd-card__meta-detail {
47
- flex: 1 1 auto;
48
- min-inline-size: 0;
49
- }
50
- .cd-card__meta-title {
51
- color: var(--cd-card-title-color);
52
- font-weight: var(--cd-font-weight-semibold);
53
- font-size: var(--cd-font-size-3);
54
- margin-block-end: var(--cd-spacing-1);
55
- }
56
- .cd-card__meta-description {
57
- color: var(--cd-color-text-2);
58
- font-size: var(--cd-font-size-2);
59
- }
60
- </style>
package/src/card/index.ts DELETED
@@ -1,8 +0,0 @@
1
- import CardComponent from './Card.svelte';
2
- import CardMeta from './CardMeta.svelte';
3
-
4
- const Card = Object.assign(CardComponent, { Meta: CardMeta });
5
-
6
- export { Card };
7
- export { CardMeta };
8
- export { meta as cardMeta } from './meta.js';
package/src/card/meta.ts DELETED
@@ -1,83 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * Card — see specs/components/show/Card.spec.md
4
- */
5
- export const meta = {
6
- name: 'Card',
7
- category: 'show',
8
- description:
9
- '卡片容器:cover(出血) → header(title + extra) → body(children,loading 时骨架占位) → actions(底部等分操作);bordered/shadow/hoverable 控制视觉,title 为 string 时 aria-labelledby 关联。',
10
- exports: ['Card'],
11
- props: [
12
- { name: 'title', type: 'string|Snippet', default: 'undefined', desc: '标题;string 时关联 aria-labelledby' },
13
- { name: 'extra', type: 'Snippet', default: 'undefined', desc: 'header 右侧内容' },
14
- { name: 'cover', type: 'Snippet', default: 'undefined', desc: '顶部出血封面' },
15
- { name: 'actions', type: 'Snippet', default: 'undefined', desc: '底部等分操作区' },
16
- { name: 'size', type: "'small'|'default'|'large'", default: "'default'" },
17
- { name: 'bordered', type: 'boolean', default: 'true' },
18
- {
19
- name: 'shadow',
20
- type: "'never'|'hover'|'always'",
21
- default: "'never'",
22
- desc: 'hover 时悬停抬升',
23
- },
24
- { name: 'hoverable', type: 'boolean', default: 'false', desc: '悬停阴影,同 shadow=hover 视觉' },
25
- { name: 'loading', type: 'boolean', default: 'false', desc: 'body 显示骨架占位' },
26
- { name: 'loadingRows', type: 'number', default: '3', desc: '骨架行数' },
27
- { name: 'headerStyle', type: 'string', default: 'undefined', desc: 'header 区内联样式透传' },
28
- { name: 'bodyStyle', type: 'string', default: 'undefined', desc: 'body 区内联样式透传' },
29
- { name: 'headerLine', type: 'boolean', default: 'true', desc: 'header 与 body 间分隔线' },
30
- { name: 'footerLine', type: 'boolean', default: 'true', desc: 'actions 区上方分隔线' },
31
- {
32
- name: 'clickable',
33
- type: 'boolean',
34
- default: 'false',
35
- desc: '整卡可点击:role=button + 键盘/点击激活,合并 hoverable 视觉',
36
- },
37
- { name: 'disabled', type: 'boolean', default: 'false', desc: '仅 clickable 时生效,禁用点击与 hover' },
38
- { name: 'class', type: 'string', default: 'undefined', desc: '根节点自定义类名' },
39
- {
40
- name: 'onClick',
41
- type: '(e: MouseEvent | KeyboardEvent) => void',
42
- default: 'undefined',
43
- desc: 'clickable 时点击/键盘激活回调;disabled 不触发',
44
- },
45
- { name: 'onMouseenter', type: '(e: MouseEvent) => void', default: 'undefined' },
46
- { name: 'onMouseleave', type: '(e: MouseEvent) => void', default: 'undefined' },
47
- { name: 'children', type: 'Snippet', default: 'undefined', desc: '卡片正文' },
48
- ],
49
- events: [
50
- { name: 'onClick', desc: 'clickable 整卡点击或键盘激活(Enter/Space)' },
51
- { name: 'onMouseenter', desc: '指针进入卡片' },
52
- { name: 'onMouseleave', desc: '指针离开卡片' },
53
- ],
54
- slots: [
55
- { name: 'title', desc: '标题(string 或 Snippet)' },
56
- { name: 'extra', desc: 'header 右侧' },
57
- { name: 'cover', desc: '封面' },
58
- { name: 'actions', desc: '底部操作' },
59
- { name: 'children', desc: '正文' },
60
- ],
61
- a11y: {
62
- hasRole: true,
63
- focusable: false,
64
- note: '有 title 时根 role=region;string title 经 useId 关联 aria-labelledby;骨架 aria-hidden。clickable 时根 role=button + tabindex,Enter/Space 激活,disabled 时 aria-disabled + tabindex=-1。',
65
- },
66
- tokens: [
67
- '--cd-card-bg',
68
- '--cd-card-border',
69
- '--cd-card-radius',
70
- '--cd-card-padding',
71
- '--cd-card-padding-small',
72
- '--cd-card-header-border',
73
- '--cd-card-title-color',
74
- '--cd-card-shadow',
75
- '--cd-card-shadow-hover',
76
- ],
77
- responsive: false,
78
- examples: [
79
- { title: '基础', code: '<Card title="标题">内容</Card>' },
80
- { title: '悬浮', code: '<Card hoverable title="卡片">内容</Card>' },
81
- { title: '加载', code: '<Card loading loadingRows={3} />' },
82
- ],
83
- } as const;