@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,30 +0,0 @@
1
- <!--
2
- 仅供 RangePicker.kbd.test.ts(browser project)使用的双面板网格键盘 e2e 夹具。
3
- trigger 控制 open(受控);onChange 透传给测试(键盘两次 Enter 选区间后断言提交值)。
4
- defaultValue 起始月固定到 2024-03,左面板=3 月、右面板=4 月。
5
- 非受控 value:键盘选区会真正提交(onChange 回调拿到结果)。
6
- -->
7
- <script lang="ts">
8
- import { LocaleProvider } from '../locale-provider/index.js';
9
- import RangePicker from './RangePicker.svelte';
10
-
11
- interface Props {
12
- onChange: (v: [Date | null, Date | null] | null) => void;
13
- }
14
- let { onChange }: Props = $props();
15
-
16
- let open = $state(false);
17
- const defaultValue: [Date | null, Date | null] = [new Date(2024, 2, 10), new Date(2024, 2, 20)];
18
- </script>
19
-
20
- <LocaleProvider locale="en_US">
21
- <button type="button" data-testid="before" onclick={() => (open = true)}>open range picker</button>
22
- <RangePicker
23
- {open}
24
- {defaultValue}
25
- locale="en-US"
26
- ariaLabel="pick range"
27
- onOpenChange={(v) => (open = v)}
28
- {onChange}
29
- />
30
- </LocaleProvider>
@@ -1,4 +0,0 @@
1
- export { default as DatePicker } from './DatePicker.svelte';
2
- export { meta as datePickerMeta } from './meta.js';
3
- export { default as RangePicker } from './RangePicker.svelte';
4
- export { meta as rangePickerMeta } from './range-meta.js';
@@ -1,67 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * See specs/00-foundation/ai-friendly.spec.md.
4
- */
5
- export const meta = {
6
- name: 'DatePicker',
7
- category: 'input',
8
- description:
9
- '日期选择器,type=date 日历面板 / type=dateTime 日期+时间(复用 TimePicker 时分秒列)/ type=month 月份面板 / type=year 年份面板,受控/非受控;显示与星期/月份/年份均经 Intl.DateTimeFormat 本地化。',
10
- props: [
11
- { name: 'type', type: "'date'|'dateTime'|'month'|'year'", default: "'date'" },
12
- { name: 'value', type: 'Date | null', default: 'undefined' },
13
- { name: 'defaultValue', type: 'Date | null', default: 'null' },
14
- { name: 'open', type: 'boolean', default: 'undefined' },
15
- { name: 'defaultOpen', type: 'boolean', default: 'false' },
16
- { name: 'placeholder', type: 'string', default: "'请选择日期'" },
17
- { name: 'size', type: "'small'|'default'|'large'", default: "'default'" },
18
- { name: 'status', type: "'default'|'warning'|'error'", default: "'default'" },
19
- { name: 'disabled', type: 'boolean', default: 'false' },
20
- { name: 'clearable', type: 'boolean', default: 'true' },
21
- { name: 'disabledDate', type: '(date: Date) => boolean', default: 'undefined' },
22
- {
23
- name: 'disabledTime',
24
- type: '(date: Date) => { disabledHours?: () => number[]; disabledMinutes?: (hour: number) => number[]; disabledSeconds?: (hour: number, minute: number) => number[] }',
25
- default: 'undefined',
26
- },
27
- {
28
- name: 'presets',
29
- type: '{ label: string; value: Date | (() => Date) }[]',
30
- default: 'undefined',
31
- },
32
- { name: 'weekStart', type: '0 | 1', default: '0' },
33
- { name: 'showSecond', type: 'boolean', default: 'true' },
34
- { name: 'locale', type: 'string', default: "'zh-CN'" },
35
- { name: 'format', type: 'string', default: 'undefined' },
36
- { name: 'onChange', type: '(v: Date | null) => void', default: 'undefined' },
37
- { name: 'onOpenChange', type: '(open: boolean) => void', default: 'undefined' },
38
- { name: 'onParseError', type: '(e: { text: string }) => void', default: 'undefined' },
39
- { name: 'onPanelChange', type: '(e: { panelDate: Date }) => void', default: 'undefined' },
40
- {
41
- name: 'onPresetClick',
42
- type: '(e: { preset: { label: string; value: Date | (() => Date) } }) => void',
43
- default: 'undefined',
44
- },
45
- { name: 'onClear', type: '(e: {}) => void', default: 'undefined' },
46
- { name: 'onConfirm', type: '(e: { value: Date | null }) => void', default: 'undefined' },
47
- { name: 'onFocus', type: '(e: FocusEvent) => void', default: 'undefined' },
48
- { name: 'onBlur', type: '(e: FocusEvent) => void', default: 'undefined' },
49
- { name: 'ariaLabel', type: 'string', default: 'undefined' },
50
- ],
51
- a11y: {
52
- role: 'dialog',
53
- notes: [
54
- '触发器 button aria-haspopup=dialog、aria-expanded、aria-controls 指向面板',
55
- '面板 role=dialog;日期网格 role=grid,单元格 role=gridcell + aria-selected',
56
- '触发器 Enter/Space/↓ 打开;面板内方向键移动高亮日、Enter 选中、Esc 关闭',
57
- 'roving tabindex:仅高亮日可聚焦',
58
- 'type=dateTime:时/分/秒列 role=listbox + option,选日期不关面板,点确定关闭',
59
- 'disabledTime:dateTime 时/分/秒列被禁用值 aria-disabled、点击/键盘无效(分/秒列联动已选时/分)',
60
- 'presets:面板侧边快捷日期按钮 role=group,点击直接选中(dateTime 连带时间)并关闭',
61
- 'type=month:12 个月格,头部显示年份 + 左右切年;点月份选中并关闭',
62
- 'type=year:一页 12 年(一十年 + 前后各 1 占位),头部显示十年范围 + 左右切十年;点年份选中并关闭',
63
- 'format:传 token 串(YYYY/MM/DD/HH/mm/ss)时触发器变 text 输入框,显示+手输解析均走 formatDate/parseDateString;不传沿用 Intl 显示',
64
- ],
65
- },
66
- tokens: ['--cd-date-picker-*', '--cd-input-*', '--cd-focus-ring', '--cd-motion-*'],
67
- } as const;
@@ -1,44 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * See specs/00-foundation/ai-friendly.spec.md.
4
- */
5
- export const meta = {
6
- name: 'RangePicker',
7
- category: 'input',
8
- description:
9
- '日期范围选择器,双面板(两个月并排,右面板=左面板+1)序列选择(点起始→点结束,自动排序、起止可跨面板、hover 跨面板预览区间),受控/非受控;显示与星期/月份均经 Intl.DateTimeFormat 本地化。',
10
- props: [
11
- { name: 'value', type: '[Date|null, Date|null] | null', default: 'undefined' },
12
- { name: 'defaultValue', type: '[Date|null, Date|null] | null', default: 'null' },
13
- { name: 'open', type: 'boolean', default: 'undefined' },
14
- { name: 'defaultOpen', type: 'boolean', default: 'false' },
15
- { name: 'startPlaceholder', type: 'string', default: "'开始日期'" },
16
- { name: 'endPlaceholder', type: 'string', default: "'结束日期'" },
17
- { name: 'size', type: "'small'|'default'|'large'", default: "'default'" },
18
- { name: 'status', type: "'default'|'warning'|'error'", default: "'default'" },
19
- { name: 'disabled', type: 'boolean', default: 'false' },
20
- { name: 'clearable', type: 'boolean', default: 'true' },
21
- { name: 'disabledDate', type: '(date: Date) => boolean', default: 'undefined' },
22
- { name: 'maxRange', type: 'number', default: 'undefined' },
23
- { name: 'weekStart', type: '0 | 1', default: '0' },
24
- { name: 'locale', type: 'string', default: "'zh-CN'" },
25
- { name: 'onChange', type: '(v: [Date|null,Date|null] | null) => void', default: 'undefined' },
26
- { name: 'onOpenChange', type: '(open: boolean) => void', default: 'undefined' },
27
- { name: 'onPanelChange', type: '(e: { panelDate: Date }) => void', default: 'undefined' },
28
- { name: 'onClear', type: '(e: {}) => void', default: 'undefined' },
29
- { name: 'onFocus', type: '(e: FocusEvent) => void', default: 'undefined' },
30
- { name: 'onBlur', type: '(e: FocusEvent) => void', default: 'undefined' },
31
- { name: 'ariaLabel', type: 'string', default: 'undefined' },
32
- ],
33
- a11y: {
34
- role: 'dialog',
35
- notes: [
36
- '触发器 button aria-haspopup=dialog、aria-expanded、aria-controls 指向面板',
37
- '面板 role=dialog;左右各一 role=grid(aria-label 为各自月份),单元格 role=gridcell + aria-selected(端点)',
38
- '双面板并排显示相邻两月:最左「上一月」、最右「下一月」整体翻页;第一次点击设起始、第二次设结束并自动排序,起止可跨面板;hover 跨面板实时预览区间',
39
- 'maxRange:选定起始后,离起点超过 maxRange 天的日期 aria-disabled 置灰、点击/hover 无效(daysBetween 纯函数判定)',
40
- '触发器 Enter/Space/↓ 打开、Esc 关闭',
41
- ],
42
- },
43
- tokens: ['--cd-date-picker-*', '--cd-input-*', '--cd-focus-ring', '--cd-motion-*'],
44
- } as const;
@@ -1,33 +0,0 @@
1
- // Descriptions a11y:dl/dt/dd 描述列表语义,data 驱动。
2
- import { describe, it, expect } from 'vitest';
3
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
4
- import Descriptions from './Descriptions.svelte';
5
-
6
- describe('Descriptions a11y', () => {
7
- it('data 驱动:dl/dt/dd 语义,无 axe violations', async () => {
8
- const { container } = renderWithLocale(Descriptions, {
9
- props: {
10
- title: 'Account',
11
- data: [
12
- { key: 'name', label: 'Name', value: 'Jane' },
13
- { key: 'email', label: 'Email', value: 'jane@example.com' },
14
- ],
15
- },
16
- });
17
- expect(container.querySelector('dl')).not.toBeNull();
18
- expect(container.querySelectorAll('dt').length).toBe(2);
19
- expect(container.querySelectorAll('dd').length).toBe(2);
20
- await expectNoAxeViolations(container);
21
- });
22
-
23
- it('bordered + vertical:无 axe violations', async () => {
24
- const { container } = renderWithLocale(Descriptions, {
25
- props: {
26
- bordered: true,
27
- direction: 'vertical',
28
- data: [{ key: 'a', label: 'A', value: '1' }],
29
- },
30
- });
31
- await expectNoAxeViolations(container);
32
- });
33
- });
@@ -1,287 +0,0 @@
1
- <!--
2
- Descriptions — see specs/components/show/Descriptions.spec.md
3
- 基础子集: data 数据驱动、inline/row 布局、column 数字、bordered、colon、
4
- horizontal/vertical direction、span 跨列。
5
- 两种用法择一:
6
- - 数据驱动:传 data 数组(向后兼容,行为不变)。
7
- - 声明式:不传 data,改在 children 内写 <Descriptions.Item>(可放富内容)。
8
- 布局复用:父子渲染同一套 .cd-descriptions__item 结构。父用 CSS grid(grid-template-columns
9
- repeat(column)),子项靠 grid-column: span N 自排——声明式下父级无需预先知道 children,
10
- Item 经 context 读取 column 做 span 钳制即可自动换行/跨列。故后代样式用 :global 包裹,
11
- 既覆盖本组件 data 渲染的 item,也覆盖 <Descriptions.Item> 跨组件边界渲染的 item。
12
- 响应式 column:column 除 number 外支持断点对象 { xs?, sm?, md?, lg?, xl?, xxl? },
13
- 按视口宽度选列数——复用 grid 的 useBreakpoint(resize 监听 + cleanup,红线 #3)+ core
14
- resolveResponsiveValue(纯函数 mobile-first 级联,红线 #2)。这里用视口断点而非容器查询:
15
- 避免上批 Breadcrumb 容器查询「只作用后代、container-type 层级错配」的坑。
16
- align:内容(value)水平对齐 left/center/right,纯 CSS class(红线 #2)。
17
- justify:每个 item 内 label 与 value 的排布对齐 start/center/end/between,纯 CSS class。
18
- -->
19
- <script lang="ts">
20
- import type { Snippet } from 'svelte';
21
- import {
22
- resolveActiveBreakpoint,
23
- resolveResponsiveValue,
24
- type Breakpoint,
25
- } from '@chenzy-design/core';
26
- import type { DescriptionItem } from './types.js';
27
- import { setDescriptionsContext } from './context.js';
28
-
29
- type Layout = 'inline' | 'row';
30
- type Direction = 'horizontal' | 'vertical';
31
- type Size = 'small' | 'default' | 'large';
32
- type Align = 'left' | 'center' | 'right';
33
- type Justify = 'start' | 'center' | 'end' | 'between';
34
- /** 列数:number 或断点对象(按视口宽自动选列,mobile-first 向下级联)。 */
35
- type ColumnProp = number | Partial<Record<Breakpoint, number>>;
36
-
37
- interface Props {
38
- data?: DescriptionItem[];
39
- layout?: Layout;
40
- direction?: Direction;
41
- /** 列数;可传断点对象 { xs?, sm?, md?, lg?, xl?, xxl? } 按视口宽响应。 */
42
- column?: ColumnProp;
43
- size?: Size;
44
- bordered?: boolean;
45
- colon?: boolean;
46
- /** 内容(value)水平对齐。 */
47
- align?: Align;
48
- /** 每个 item 内 label 与 value 的排布对齐。 */
49
- justify?: Justify;
50
- title?: string;
51
- emptyText?: string;
52
- /** 双行显示:label 与 value 各占一行(同 Semi Design row prop) */
53
- row?: boolean;
54
- class?: string;
55
- /** 声明式用法:内嵌 <Descriptions.Item> 列表(不传 data 时生效)。 */
56
- children?: Snippet;
57
- }
58
-
59
- let {
60
- data = [],
61
- layout = 'inline',
62
- direction = 'horizontal',
63
- column = 3,
64
- size = 'default',
65
- bordered = false,
66
- colon = true,
67
- align = 'left',
68
- justify = 'start',
69
- title,
70
- emptyText = '-',
71
- row = false,
72
- class: className = '',
73
- children,
74
- }: Props = $props();
75
-
76
- // 声明式优先级低于 data:仅在未传 data 时渲染 children。
77
- const useDeclarative = $derived(data.length === 0 && children != null);
78
-
79
- const SUPPORTS_DOM = typeof window !== 'undefined';
80
-
81
- // 当前视口断点:resize 监听(rAF 节流)+ cleanup(红线 #3)。仅 column 为对象时才订阅,
82
- // 避免固定列数场景下无谓监听。SSR 安全:先以真实/最小宽度落定再校正。
83
- let activeBp = $state<Breakpoint>(
84
- SUPPORTS_DOM ? resolveActiveBreakpoint(window.innerWidth) : 'xs',
85
- );
86
- const responsive = $derived(typeof column === 'object' && column !== null);
87
-
88
- $effect(() => {
89
- if (!SUPPORTS_DOM || !responsive) return;
90
- let frame = 0;
91
- const measure = (): void => {
92
- frame = 0;
93
- const next = resolveActiveBreakpoint(window.innerWidth);
94
- if (next !== activeBp) activeBp = next;
95
- };
96
- const onResize = (): void => {
97
- if (frame) return;
98
- frame = window.requestAnimationFrame(measure);
99
- };
100
- measure();
101
- window.addEventListener('resize', onResize);
102
- return () => {
103
- if (frame) window.cancelAnimationFrame(frame);
104
- window.removeEventListener('resize', onResize);
105
- };
106
- });
107
-
108
- // 有效列数:number 直用;对象按当前断点 mobile-first 级联解析(纯函数,红线 #2)。
109
- const effectiveColumn = $derived(
110
- typeof column === 'number'
111
- ? column
112
- : resolveResponsiveValue(column, activeBp, 3),
113
- );
114
-
115
- // 通过 context 向 <Descriptions.Item> 暴露父级布局配置(getter 保持响应性)。
116
- // column 暴露解析后的有效列数,使声明式 span 钳制随响应式列数实时更新。
117
- setDescriptionsContext({
118
- getColumn: () => effectiveColumn,
119
- getDirection: () => direction,
120
- getColon: () => colon,
121
- getEmptyText: () => emptyText,
122
- });
123
-
124
- function isEmptyValue(value: unknown): boolean {
125
- return value === null || value === undefined || value === '';
126
- }
127
-
128
- function displayValue(value: unknown): string {
129
- return isEmptyValue(value) ? emptyText : String(value);
130
- }
131
-
132
- function clampSpan(span: number | undefined): number {
133
- if (!span || span < 1) return 1;
134
- return Math.min(span, effectiveColumn);
135
- }
136
-
137
- const cls = $derived(
138
- [
139
- 'cd-descriptions',
140
- `cd-descriptions--${layout}`,
141
- `cd-descriptions--${direction}`,
142
- `cd-descriptions--${size}`,
143
- `cd-descriptions--align-${align}`,
144
- `cd-descriptions--justify-${justify}`,
145
- bordered && 'cd-descriptions--bordered',
146
- row && 'cd-descriptions--row-mode',
147
- className,
148
- ]
149
- .filter(Boolean)
150
- .join(' '),
151
- );
152
-
153
- const gridStyle = $derived(
154
- `grid-template-columns: repeat(${effectiveColumn}, minmax(0, 1fr));`,
155
- );
156
- </script>
157
-
158
- <div class={cls}>
159
- {#if title}
160
- <div class="cd-descriptions__title">{title}</div>
161
- {/if}
162
- <dl class="cd-descriptions__content" style={gridStyle}>
163
- {#if useDeclarative}
164
- {@render children?.()}
165
- {:else}
166
- {#each data as item, index (item.key ?? index)}
167
- <div
168
- class="cd-descriptions__item"
169
- style="grid-column: span {clampSpan(item.span)};"
170
- >
171
- <dt class="cd-descriptions__label">
172
- {item.label}{#if colon && direction === 'horizontal'}<span
173
- class="cd-descriptions__colon"
174
- aria-hidden="true">:</span
175
- >{/if}
176
- </dt>
177
- <dd class="cd-descriptions__value">{displayValue(item.value)}</dd>
178
- </div>
179
- {/each}
180
- {/if}
181
- </dl>
182
- </div>
183
-
184
- <style>
185
- /*
186
- .cd-descriptions 根保留组件作用域哈希;其下 .cd-descriptions__* 后代用 :global 包裹,
187
- 使同一套结构样式既覆盖本组件 data 渲染的 item,也覆盖 <Descriptions.Item> 在子组件中
188
- 渲染的 item(跨组件边界)。grid 由父级 dl 定义,子项靠 grid-column: span 自排。
189
- */
190
- .cd-descriptions {
191
- inline-size: 100%;
192
- }
193
- .cd-descriptions__title {
194
- margin-block-end: var(--cd-descriptions-row-gap);
195
- color: var(--cd-descriptions-label-color);
196
- font-weight: 600;
197
- }
198
- .cd-descriptions__content {
199
- display: grid;
200
- gap: var(--cd-descriptions-row-gap);
201
- margin: 0;
202
- }
203
- .cd-descriptions :global(.cd-descriptions__item) {
204
- display: flex;
205
- min-inline-size: 0;
206
- }
207
- .cd-descriptions--horizontal :global(.cd-descriptions__item) {
208
- flex-direction: row;
209
- align-items: baseline;
210
- gap: var(--cd-spacing-1);
211
- }
212
- .cd-descriptions--vertical :global(.cd-descriptions__item) {
213
- flex-direction: column;
214
- gap: var(--cd-spacing-1);
215
- }
216
- .cd-descriptions :global(.cd-descriptions__label) {
217
- color: var(--cd-descriptions-label-color);
218
- white-space: nowrap;
219
- }
220
- .cd-descriptions :global(.cd-descriptions__colon) {
221
- margin-inline-start: 0.125em;
222
- }
223
- .cd-descriptions :global(.cd-descriptions__value) {
224
- margin: 0;
225
- color: var(--cd-descriptions-value-color);
226
- min-inline-size: 0;
227
- overflow-wrap: break-word;
228
- }
229
-
230
- /*
231
- align:内容(value)水平对齐。horizontal 下 value 仍随 flex 流排在 label 后,
232
- text-align 控制其文本对齐;vertical 下 value 独占一行,text-align 直接生效。
233
- */
234
- .cd-descriptions--align-center :global(.cd-descriptions__value) {
235
- text-align: center;
236
- }
237
- .cd-descriptions--align-right :global(.cd-descriptions__value) {
238
- text-align: end;
239
- }
240
-
241
- /*
242
- justify:每个 item 内 label 与 value 的排布对齐(沿主轴)。horizontal 主轴为行,
243
- vertical 主轴为列。between 让 label 与 value 两端对齐、撑开剩余空间。
244
- */
245
- .cd-descriptions--justify-center :global(.cd-descriptions__item) {
246
- justify-content: center;
247
- }
248
- .cd-descriptions--justify-end :global(.cd-descriptions__item) {
249
- justify-content: flex-end;
250
- }
251
- .cd-descriptions--justify-between :global(.cd-descriptions__item) {
252
- justify-content: space-between;
253
- }
254
-
255
- /* row layout: table-like cells */
256
- .cd-descriptions--row .cd-descriptions__content {
257
- gap: 0;
258
- }
259
- .cd-descriptions--row :global(.cd-descriptions__item) {
260
- align-items: stretch;
261
- }
262
-
263
- /* bordered cells */
264
- .cd-descriptions--bordered .cd-descriptions__content {
265
- gap: 0;
266
- border-block-start: 1px solid var(--cd-descriptions-border);
267
- border-inline-start: 1px solid var(--cd-descriptions-border);
268
- }
269
- .cd-descriptions--bordered :global(.cd-descriptions__label),
270
- .cd-descriptions--bordered :global(.cd-descriptions__value) {
271
- padding: var(--cd-descriptions-cell-padding);
272
- border-block-end: 1px solid var(--cd-descriptions-border);
273
- border-inline-end: 1px solid var(--cd-descriptions-border);
274
- }
275
- .cd-descriptions--bordered :global(.cd-descriptions__label) {
276
- background: var(--cd-descriptions-label-bg);
277
- }
278
- .cd-descriptions--bordered.cd-descriptions--horizontal :global(.cd-descriptions__value) {
279
- flex: 1 1 auto;
280
- }
281
-
282
- /* row=true:双行显示,每项 label 与 value 纵向叠放(覆盖 direction 横向排列) */
283
- .cd-descriptions--row-mode :global(.cd-descriptions__item) {
284
- flex-direction: column;
285
- gap: var(--cd-spacing-1);
286
- }
287
- </style>
@@ -1,43 +0,0 @@
1
- <!--
2
- Descriptions.Item — 声明式单项,与 data 模式渲染同一套 .cd-descriptions__item 结构,
3
- 从而复用父 Descriptions 的 grid 布局、bordered/方向样式。span 跨列由 grid-column: span 自排,
4
- span 钳制(不超过父 column 列数)经 context 读取父 column 完成——父级无需预先收集 children。
5
- -->
6
- <script lang="ts">
7
- import type { Snippet } from 'svelte';
8
- import { getDescriptionsContext } from './context.js';
9
-
10
- interface Props {
11
- /** 字段标签。 */
12
- label: string;
13
- /** 跨列数(钳制到父 column 列数,默认 1)。 */
14
- span?: number;
15
- children?: Snippet;
16
- }
17
-
18
- let { label, span, children }: Props = $props();
19
-
20
- const ctx = getDescriptionsContext();
21
-
22
- const direction = $derived(ctx?.getDirection() ?? 'horizontal');
23
- const colon = $derived(ctx?.getColon() ?? true);
24
-
25
- const clampedSpan = $derived.by(() => {
26
- const column = ctx?.getColumn() ?? 1;
27
- if (!span || span < 1) return 1;
28
- return Math.min(span, column);
29
- });
30
-
31
- // children 为空时回退到父 emptyText 占位(与 data 模式 displayValue 一致)。
32
- const emptyText = $derived(ctx?.getEmptyText() ?? '-');
33
- </script>
34
-
35
- <div class="cd-descriptions__item" style="grid-column: span {clampedSpan};">
36
- <dt class="cd-descriptions__label">
37
- {label}{#if colon && direction === 'horizontal'}<span
38
- class="cd-descriptions__colon"
39
- aria-hidden="true">:</span
40
- >{/if}
41
- </dt>
42
- <dd class="cd-descriptions__value">{#if children}{@render children()}{:else}{emptyText}{/if}</dd>
43
- </div>
@@ -1,21 +0,0 @@
1
- import { getContext, setContext } from 'svelte';
2
-
3
- export type DescriptionsDirection = 'horizontal' | 'vertical';
4
-
5
- export interface DescriptionsContext {
6
- // getter 保持对父 Descriptions prop 变化的响应性(直接读快照会冻结初始值)。
7
- getColumn: () => number;
8
- getDirection: () => DescriptionsDirection;
9
- getColon: () => boolean;
10
- getEmptyText: () => string;
11
- }
12
-
13
- const KEY = Symbol('cd-descriptions');
14
-
15
- export function setDescriptionsContext(ctx: DescriptionsContext): void {
16
- setContext(KEY, ctx);
17
- }
18
-
19
- export function getDescriptionsContext(): DescriptionsContext | undefined {
20
- return getContext<DescriptionsContext | undefined>(KEY);
21
- }
@@ -1,16 +0,0 @@
1
- import Descriptions_ from './Descriptions.svelte';
2
- import DescriptionsItem from './DescriptionsItem.svelte';
3
-
4
- export const Descriptions: typeof Descriptions_ & {
5
- Item: typeof DescriptionsItem;
6
- } = Object.assign(Descriptions_, { Item: DescriptionsItem });
7
-
8
- export { DescriptionsItem };
9
- export { meta as descriptionsMeta } from './meta.js';
10
- export type { DescriptionItem } from './types.js';
11
- export {
12
- getDescriptionsContext,
13
- setDescriptionsContext,
14
- type DescriptionsContext,
15
- type DescriptionsDirection,
16
- } from './context.js';
@@ -1,45 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * See specs/00-foundation/ai-friendly.spec.md.
4
- */
5
- export const meta = {
6
- name: 'Descriptions',
7
- category: 'show',
8
- description:
9
- '描述列表,成组展示只读字段。支持 data 数据驱动与 <Descriptions.Item> 声明式两种用法、inline/row 布局、column 列数(含响应式断点对象)、bordered 边框、colon 冒号、水平/垂直方向与 align/justify 对齐。',
10
- props: [
11
- { name: 'data', type: 'DescriptionItem[]', default: '[]', desc: '描述项数据(不传时渲染 children 内的 Descriptions.Item)' },
12
- { name: 'layout', type: "'inline'|'row'", default: 'inline' },
13
- { name: 'direction', type: "'horizontal'|'vertical'", default: 'horizontal' },
14
- { name: 'column', type: 'number | Partial<Record<Breakpoint, number>>', default: '3', desc: '列数;可传断点对象 { xs?, sm?, md?, lg?, xl?, xxl? } 按视口宽响应(mobile-first 向下级联)' },
15
- { name: 'size', type: "'small'|'default'|'large'", default: 'default' },
16
- { name: 'bordered', type: 'boolean', default: 'false' },
17
- { name: 'colon', type: 'boolean', default: 'true' },
18
- { name: 'align', type: "'left'|'center'|'right'", default: 'left', desc: '内容(value)水平对齐' },
19
- { name: 'justify', type: "'start'|'center'|'end'|'between'", default: 'start', desc: '每个 item 内 label 与 value 的排布对齐' },
20
- { name: 'title', type: 'string', default: 'undefined' },
21
- { name: 'emptyText', type: 'string', default: "'-'", desc: '空值占位' },
22
- { name: 'class', type: 'string', default: "''" },
23
- { name: 'children', type: 'Snippet', default: 'undefined', desc: '声明式用法:内嵌 <Descriptions.Item>(不传 data 时生效)' },
24
- ],
25
- subComponents: [
26
- {
27
- name: 'Descriptions.Item',
28
- desc: '声明式描述项,label 标签 + children 内容,span 跨列经 context 读取父 column 钳制;与 data 模式渲染同一套结构,复用父级 grid/bordered/方向布局。',
29
- props: [
30
- { name: 'label', type: 'string', desc: '字段标签' },
31
- { name: 'span', type: 'number', default: '1', desc: '跨列数(钳制到父 column)' },
32
- { name: 'children', type: 'Snippet', desc: '描述内容(为空回退父 emptyText)' },
33
- ],
34
- },
35
- ],
36
- a11y: {
37
- role: 'description list',
38
- notes: [
39
- 'dl/dt/dd 语义结构',
40
- '冒号用 aria-hidden 装饰',
41
- '空值显示 emptyText 占位',
42
- ],
43
- },
44
- tokens: ['--cd-descriptions-*', '--cd-spacing-*'],
45
- } as const;
@@ -1,6 +0,0 @@
1
- export interface DescriptionItem {
2
- key?: string;
3
- label: string;
4
- value: unknown;
5
- span?: number;
6
- }
@@ -1,23 +0,0 @@
1
- // Divider a11y:纯展示分隔符 role=separator;vertical 含 aria-orientation。
2
- import { describe, it, expect } from 'vitest';
3
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
4
- import Divider from './Divider.svelte';
5
-
6
- describe('Divider a11y', () => {
7
- it('horizontal:role=separator,无 axe violations', async () => {
8
- const { container } = renderWithLocale(Divider, {});
9
- const root = container.querySelector('.cd-divider');
10
- expect(root?.getAttribute('role')).toBe('separator');
11
- await expectNoAxeViolations(container);
12
- });
13
-
14
- it('vertical:role=separator + aria-orientation=vertical,无 axe violations', async () => {
15
- const { container } = renderWithLocale(Divider, {
16
- props: { layout: 'vertical' },
17
- });
18
- const root = container.querySelector('.cd-divider');
19
- expect(root?.getAttribute('role')).toBe('separator');
20
- expect(root?.getAttribute('aria-orientation')).toBe('vertical');
21
- await expectNoAxeViolations(container);
22
- });
23
- });