@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,24 +0,0 @@
1
- <!--
2
- 仅供 AutoComplete.kbd.test.ts(browser project)使用的键盘 e2e 夹具。
3
- AutoComplete 输入框 role=combobox,焦点始终留在 input 上;建议浮层渲染在
4
- .cd-autocomplete 内(非 portal),高亮走 aria-activedescendant 指向 option id。
5
- 夹具暴露 onSelect 写入 lastSelected,供测试断言 Enter 选中。
6
- -->
7
- <script lang="ts">
8
- import { LocaleProvider } from '../locale-provider/index.js';
9
- import AutoComplete from './AutoComplete.svelte';
10
-
11
- const data = ['Apple', 'Apricot', 'Banana'];
12
- let lastSelected = $state<unknown>(undefined);
13
- </script>
14
-
15
- <LocaleProvider locale="en_US">
16
- <AutoComplete
17
- {data}
18
- ariaLabel="Fruit"
19
- onSelect={(v) => {
20
- lastSelected = v;
21
- }}
22
- />
23
- <output data-testid="selected">{JSON.stringify(lastSelected ?? null)}</output>
24
- </LocaleProvider>
@@ -1,2 +0,0 @@
1
- export { default as AutoComplete } from './AutoComplete.svelte';
2
- export { meta as autocompleteMeta } from './meta.js';
@@ -1,41 +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: 'AutoComplete',
7
- category: 'input',
8
- description: '输入联想框,支持本地过滤候选、远程异步搜索、选项分组、内嵌标签与键盘选择。',
9
- props: [
10
- { name: 'value', type: 'string', default: 'undefined' },
11
- { name: 'defaultValue', type: 'string', default: "''" },
12
- { name: 'data', type: 'ItemOrGroup[]', default: '[]' },
13
- { name: 'open', type: 'boolean', default: 'undefined' },
14
- { name: 'defaultOpen', type: 'boolean', default: 'false' },
15
- { name: 'placeholder', type: 'string', default: "''" },
16
- { name: 'insetLabel', type: 'string|Snippet', default: 'undefined' },
17
- { name: 'openOnFocus', type: 'boolean', default: 'false' },
18
- { name: 'size', type: "'small'|'default'|'large'", default: 'default' },
19
- { name: 'status', type: "'default'|'warning'|'error'", default: 'default' },
20
- { name: 'disabled', type: 'boolean', default: 'false' },
21
- { name: 'filter', type: 'boolean', default: 'true' },
22
- { name: 'defaultActiveFirstOption', type: 'boolean', default: 'true' },
23
- { name: 'clearable', type: 'boolean', default: 'false' },
24
- { name: 'onSearch', type: '(query: string) => void', default: 'undefined' },
25
- { name: 'loading', type: 'boolean', default: 'false' },
26
- { name: 'searchDebounce', type: 'number', default: '300' },
27
- { name: 'maxCount', type: 'number', default: '0' },
28
- { name: 'onChange', type: '(v: string) => void', default: 'undefined' },
29
- { name: 'onSelect', type: '(value: string|number) => void', default: 'undefined' },
30
- { name: 'onOpenChange', type: '(open: boolean) => void', default: 'undefined' },
31
- ],
32
- a11y: {
33
- role: 'combobox',
34
- notes: [
35
- 'combobox + aria-autocomplete="list" + listbox',
36
- 'aria-activedescendant 指向高亮候选',
37
- '键盘:↑↓ 移动、Enter 选中、Esc 关闭',
38
- ],
39
- },
40
- tokens: ['--cd-input-*', '--cd-select-dropdown-*', '--cd-focus-ring', '--cd-motion-*'],
41
- } as const;
@@ -1,37 +0,0 @@
1
- // Avatar a11y:展示原子,含可交互态(href→<a> / onClick→role=button)。
2
- // 文字头像取 role=img + aria-label(来自 alt),避免逐字读缩写。
3
- import { describe, it, expect } from 'vitest';
4
- import { renderWithLocale, expectNoAxeViolations } from '../test-utils/a11y.js';
5
- import Avatar from './Avatar.svelte';
6
-
7
- describe('Avatar a11y', () => {
8
- it('图片头像:img 带 alt,无 axe violations', async () => {
9
- const { container } = renderWithLocale(Avatar, {
10
- props: { src: 'https://example.com/a.png', alt: 'Jane Doe' },
11
- });
12
- const img = container.querySelector('img');
13
- expect(img?.getAttribute('alt')).toBe('Jane Doe');
14
- await expectNoAxeViolations(container);
15
- });
16
-
17
- it('文字头像:role=img + aria-label,无 axe violations', async () => {
18
- const { container } = renderWithLocale(Avatar, {
19
- props: { alt: 'Kim Lee' },
20
- });
21
- const root = container.querySelector('.cd-avatar');
22
- expect(root?.getAttribute('role')).toBe('img');
23
- expect(root?.getAttribute('aria-label')).toBe('Kim Lee');
24
- await expectNoAxeViolations(container);
25
- });
26
-
27
- it('可交互(onClick):role=button + tabindex=0 + aria-label,无 axe violations', async () => {
28
- const { container } = renderWithLocale(Avatar, {
29
- props: { alt: 'Settings', onClick: () => {} },
30
- });
31
- const root = container.querySelector('.cd-avatar');
32
- expect(root?.getAttribute('role')).toBe('button');
33
- expect(root?.getAttribute('tabindex')).toBe('0');
34
- expect(root?.getAttribute('aria-label')).toBe('Settings');
35
- await expectNoAxeViolations(container);
36
- });
37
- });
@@ -1,315 +0,0 @@
1
- <!--
2
- Avatar — see specs/components/show/Avatar.spec.md
3
- Display atom: image with text fallback, status dot, color hashing.
4
- -->
5
- <script lang="ts">
6
- import type { Snippet } from 'svelte';
7
- import { getAvatarGroupContext, type AvatarShape, type AvatarSizeEnum } from './context.js';
8
-
9
- type AvatarStatus = 'default' | 'warning' | 'error';
10
-
11
- interface Props {
12
- src?: string;
13
- srcset?: string;
14
- alt?: string;
15
- shape?: AvatarShape;
16
- size?: AvatarSizeEnum | number;
17
- color?: 'auto' | string;
18
- status?: AvatarStatus;
19
- dot?: boolean;
20
- dotColor?: string;
21
- gap?: number;
22
- /** 可交互:跳转链接,渲染为 <a>(优先于 onClick 的 button 语义)。 */
23
- href?: string;
24
- /** 链接 target(仅 href 时生效)。 */
25
- target?: string;
26
- /** 可交互:点击回调;无 href 时根元素取 role=button + 键盘 Enter/Space 激活。 */
27
- onClick?: (event: MouseEvent | KeyboardEvent) => void;
28
- /** hover 时显示的遮罩层 Snippet。 */
29
- hoverMask?: Snippet;
30
- /** 右下角绝对定位标记 Snippet(如在线状态徽标)。 */
31
- bottomSlot?: Snippet;
32
- /** 右上角绝对定位标记 Snippet。 */
33
- topSlot?: Snippet;
34
- /** 额外传给 img 标签的属性(如 loading、decoding 等)。 */
35
- imgAttr?: Record<string, string>;
36
- /** img 加载失败回调。 */
37
- onError?: (e: Event) => void;
38
- children?: Snippet;
39
- }
40
-
41
- let {
42
- src,
43
- srcset,
44
- alt,
45
- shape: shapeProp,
46
- size: sizeProp,
47
- color = 'grey',
48
- status = 'default',
49
- dot = false,
50
- dotColor,
51
- gap = 3,
52
- href,
53
- target,
54
- onClick,
55
- hoverMask,
56
- bottomSlot,
57
- topSlot,
58
- imgAttr,
59
- onError,
60
- children,
61
- }: Props = $props();
62
-
63
- // Avatar.Group may provide shared shape/size; the child's own prop wins,
64
- // falling back to the group's value, then the standalone default.
65
- const group = getAvatarGroupContext();
66
- const shape = $derived(shapeProp ?? group?.getShape() ?? 'circle');
67
- const size = $derived(sizeProp ?? group?.getSize() ?? 'default');
68
-
69
- // image load failure → fall back to text/children
70
- let failed = $state(false);
71
- const showImage = $derived(!!src && !failed);
72
-
73
- // text fallback: alt's first character (uppercased)
74
- const fallbackText = $derived(alt ? alt.trim().charAt(0).toUpperCase() : '');
75
-
76
- const sizeIsNumber = $derived(typeof size === 'number');
77
-
78
- const palette = [
79
- 'var(--cd-color-blue-5)',
80
- 'var(--cd-color-green-5)',
81
- 'var(--cd-color-orange-6)',
82
- 'var(--cd-color-red-5)',
83
- 'var(--cd-color-primary)',
84
- ];
85
-
86
- function hashString(s: string): number {
87
- let h = 0;
88
- for (let i = 0; i < s.length; i += 1) {
89
- h = (h << 5) - h + s.charCodeAt(i);
90
- h |= 0;
91
- }
92
- return Math.abs(h);
93
- }
94
-
95
- const autoColor = $derived(palette[hashString(fallbackText || 'cd') % palette.length]);
96
-
97
- // resolved background: 'auto' → hashed palette color; explicit color → inline value
98
- const bgColor = $derived(
99
- color === 'auto' ? autoColor : color === 'grey' ? undefined : color,
100
- );
101
-
102
- const dotBg = $derived(
103
- dotColor ??
104
- (status === 'error'
105
- ? 'var(--cd-color-danger)'
106
- : status === 'warning'
107
- ? 'var(--cd-color-warning)'
108
- : 'var(--cd-color-success)'),
109
- );
110
-
111
- const cls = $derived(
112
- [
113
- 'cd-avatar',
114
- `cd-avatar--${shape}`,
115
- !sizeIsNumber && `cd-avatar--${size}`,
116
- ]
117
- .filter(Boolean)
118
- .join(' '),
119
- );
120
-
121
- const rootStyle = $derived(
122
- [
123
- sizeIsNumber ? `inline-size:${size}px;block-size:${size}px` : '',
124
- bgColor ? `background:${bgColor}` : '',
125
- sizeIsNumber ? `font-size:${Math.round((size as number) / 2.4)}px` : '',
126
- ]
127
- .filter(Boolean)
128
- .join(';'),
129
- );
130
-
131
- const textStyle = $derived(gap !== 0 ? `padding-inline:${gap}px` : '');
132
- const ariaLabel = $derived(alt ?? fallbackText ?? undefined);
133
-
134
- // 可交互语义(spec §6):href→<a>;仅 onClick→role=button + tabindex=0 + 键盘激活;
135
- // 纯展示头像不可聚焦。纯派生(红线 #2,render 期只读)。
136
- const isLink = $derived(href != null);
137
- const isButton = $derived(!isLink && onClick != null);
138
- const interactive = $derived(isLink || isButton);
139
- // 根元素标签:链接 a,可点击但非链接保持 span(role=button),纯展示 span。
140
- const rootTag = $derived(isLink ? 'a' : 'span');
141
-
142
- function handleError(e: Event) {
143
- failed = true;
144
- onError?.(e);
145
- }
146
-
147
- function handleClick(event: MouseEvent) {
148
- onClick?.(event);
149
- }
150
-
151
- // role=button 时键盘 Enter/Space 激活(<a> 由原生处理,不接管)。
152
- function handleKeydown(event: KeyboardEvent) {
153
- if (!isButton) return;
154
- if (event.key === 'Enter' || event.key === ' ') {
155
- event.preventDefault();
156
- onClick?.(event);
157
- }
158
- }
159
- </script>
160
-
161
- <!--
162
- 根元素:可交互时为 <a>(href)或带 role=button 的 <span>(onClick),并进入 Tab 序列;
163
- 纯展示时为 <span>,文字/图标头像取 role=img(避免逐字读缩写)。
164
- 交互根统一用 aria-label 命名(图片头像 alt 已在 <img>,文字头像取 ariaLabel)。
165
- -->
166
- <svelte:element
167
- this={rootTag}
168
- class={[cls, interactive && 'cd-avatar--interactive'].filter(Boolean).join(' ')}
169
- style={rootStyle || undefined}
170
- href={isLink ? href : undefined}
171
- target={isLink ? target : undefined}
172
- role={isButton ? 'button' : !interactive && !showImage ? 'img' : undefined}
173
- tabindex={isButton ? 0 : undefined}
174
- aria-label={interactive ? ariaLabel : showImage ? undefined : ariaLabel}
175
- onclick={interactive ? handleClick : undefined}
176
- onkeydown={isButton ? handleKeydown : undefined}
177
- >
178
- {#if showImage}
179
- <img
180
- class="cd-avatar__img"
181
- {src}
182
- {srcset}
183
- {alt}
184
- {...(imgAttr ?? {})}
185
- onerror={handleError}
186
- />
187
- {:else if children}
188
- <span class="cd-avatar__text" style={textStyle || undefined}>{@render children()}</span>
189
- {:else if fallbackText}
190
- <span class="cd-avatar__text" style={textStyle || undefined}>{fallbackText}</span>
191
- {/if}
192
-
193
- {#if hoverMask}
194
- <span class="cd-avatar__hover-mask" aria-hidden="true">{@render hoverMask()}</span>
195
- {/if}
196
-
197
- {#if topSlot}
198
- <span class="cd-avatar__slot cd-avatar__slot--top" aria-hidden="true">{@render topSlot()}</span>
199
- {/if}
200
-
201
- {#if dot}
202
- <span class="cd-avatar__dot" style="background:{dotBg}" aria-hidden="true"></span>
203
- {/if}
204
-
205
- {#if bottomSlot}
206
- <span class="cd-avatar__slot cd-avatar__slot--bottom" aria-hidden="true">{@render bottomSlot()}</span>
207
- {/if}
208
- </svelte:element>
209
-
210
- <style>
211
- .cd-avatar {
212
- position: relative;
213
- display: inline-flex;
214
- align-items: center;
215
- justify-content: center;
216
- flex: 0 0 auto;
217
- inline-size: var(--cd-avatar-size-default);
218
- block-size: var(--cd-avatar-size-default);
219
- background: var(--cd-avatar-bg);
220
- color: var(--cd-avatar-color);
221
- border-radius: var(--cd-avatar-radius);
222
- overflow: hidden;
223
- user-select: none;
224
- font-weight: var(--cd-font-weight-medium);
225
- line-height: 1;
226
- vertical-align: middle;
227
- }
228
- .cd-avatar--circle {
229
- border-radius: var(--cd-radius-full);
230
- }
231
- /* 可交互头像:指针手势 + 可见焦点环(<a> 还需重置文字装饰/继承色)。 */
232
- .cd-avatar--interactive {
233
- cursor: pointer;
234
- text-decoration: none;
235
- color: var(--cd-avatar-color);
236
- }
237
- .cd-avatar--interactive:focus-visible {
238
- outline: none;
239
- box-shadow: var(--cd-focus-ring);
240
- }
241
- .cd-avatar--extra-small {
242
- inline-size: var(--cd-avatar-size-extra-small);
243
- block-size: var(--cd-avatar-size-extra-small);
244
- font-size: var(--cd-font-size-1);
245
- }
246
- .cd-avatar--small {
247
- inline-size: var(--cd-avatar-size-small);
248
- block-size: var(--cd-avatar-size-small);
249
- font-size: var(--cd-font-size-1);
250
- }
251
- .cd-avatar--default {
252
- inline-size: var(--cd-avatar-size-default);
253
- block-size: var(--cd-avatar-size-default);
254
- font-size: var(--cd-font-size-2);
255
- }
256
- .cd-avatar--large {
257
- inline-size: var(--cd-avatar-size-large);
258
- block-size: var(--cd-avatar-size-large);
259
- font-size: var(--cd-font-size-3);
260
- }
261
- .cd-avatar--extra-large {
262
- inline-size: var(--cd-avatar-size-extra-large);
263
- block-size: var(--cd-avatar-size-extra-large);
264
- font-size: var(--cd-font-size-4);
265
- }
266
- .cd-avatar__img {
267
- inline-size: 100%;
268
- block-size: 100%;
269
- object-fit: cover;
270
- display: block;
271
- }
272
- .cd-avatar__text {
273
- display: inline-flex;
274
- align-items: center;
275
- justify-content: center;
276
- white-space: nowrap;
277
- }
278
- .cd-avatar__dot {
279
- position: absolute;
280
- inset-block-end: 0;
281
- inset-inline-end: 0;
282
- inline-size: 25%;
283
- block-size: 25%;
284
- min-inline-size: 6px;
285
- min-block-size: 6px;
286
- border-radius: var(--cd-radius-full);
287
- box-shadow: 0 0 0 2px var(--cd-color-bg-0);
288
- }
289
- .cd-avatar__hover-mask {
290
- position: absolute;
291
- inset: 0;
292
- display: flex;
293
- align-items: center;
294
- justify-content: center;
295
- background: rgba(0, 0, 0, 0.4);
296
- color: var(--cd-color-text-inverse);
297
- opacity: 0;
298
- transition: opacity 0.15s ease;
299
- border-radius: inherit;
300
- }
301
- .cd-avatar:hover .cd-avatar__hover-mask {
302
- opacity: 1;
303
- }
304
- .cd-avatar__slot {
305
- position: absolute;
306
- inset-inline-end: 0;
307
- display: inline-flex;
308
- }
309
- .cd-avatar__slot--top {
310
- inset-block-start: 0;
311
- }
312
- .cd-avatar__slot--bottom {
313
- inset-block-end: 0;
314
- }
315
- </style>
@@ -1,142 +0,0 @@
1
- <!--
2
- Avatar.Group — overlapping row of avatars.
3
- Two modes:
4
- 1. data-driven `items` → supports maxCount collapse into a "+M" avatar
5
- (collapse is a pure derived computation, no DOM measurement).
6
- 2. free-form `children` snippet → custom overlapping avatars, no collapse.
7
- Group-level shape/size are shared to child Avatars via context; each child's
8
- own prop still wins (red line: child override > group > standalone default).
9
- -->
10
- <script lang="ts">
11
- import type { Snippet } from 'svelte';
12
- import Avatar from './Avatar.svelte';
13
- import { useLocale } from '../locale-provider/index.js';
14
- import {
15
- setAvatarGroupContext,
16
- type AvatarShape,
17
- type AvatarSizeEnum,
18
- } from './context.js';
19
-
20
- /** One member when using the data-driven `items` API. */
21
- export interface AvatarGroupItem {
22
- src?: string;
23
- srcset?: string;
24
- alt?: string;
25
- color?: 'auto' | string;
26
- /** text/initials fallback content */
27
- content?: string;
28
- }
29
-
30
- interface Props {
31
- /** data-driven members; enables maxCount collapse */
32
- items?: AvatarGroupItem[];
33
- /** show at most N avatars, the rest collapse into a "+M" avatar */
34
- maxCount?: number;
35
- /** shared shape for all child avatars (child prop overrides) */
36
- shape?: AvatarShape;
37
- /** shared size for all child avatars (child prop overrides) */
38
- size?: AvatarSizeEnum | number;
39
- /** overlap distance between adjacent avatars in px */
40
- overlapFrom?: number;
41
- /** click handler for the "+M" overflow avatar */
42
- onMore?: () => void;
43
- /** 自定义溢出头像渲染,参数为 {overlapList, count}。 */
44
- renderMore?: Snippet<[{ overlapList: AvatarGroupItem[]; count: number }]>;
45
- /** free-form avatars when not using `items` */
46
- children?: Snippet;
47
- }
48
-
49
- let {
50
- items,
51
- maxCount,
52
- shape,
53
- size,
54
- overlapFrom = 8,
55
- onMore,
56
- renderMore,
57
- children,
58
- }: Props = $props();
59
-
60
- const loc = useLocale();
61
-
62
- // share group config with descendant Avatars across the context boundary
63
- setAvatarGroupContext({
64
- getShape: () => shape,
65
- getSize: () => size,
66
- });
67
-
68
- // pure collapse computation — slice visible items and count the rest.
69
- const list = $derived(items ?? []);
70
- const overlapList = $derived(list.slice(limit));
71
- const limit = $derived(
72
- typeof maxCount === 'number' && maxCount >= 0 ? maxCount : list.length,
73
- );
74
- const visible = $derived(list.slice(0, limit));
75
- const restCount = $derived(Math.max(0, list.length - visible.length));
76
-
77
- const groupStyle = $derived(`--cd-avatar-overlap:${overlapFrom}px`);
78
- </script>
79
-
80
- <div class="cd-avatar-group" style={groupStyle} role="group">
81
- {#if items}
82
- {#each visible as item, i (i)}
83
- {@const { content, color, ...rest } = item}
84
- <span class="cd-avatar-group__item">
85
- <Avatar {...rest} color={color ?? 'grey'}>
86
- {#if content}{content}{/if}
87
- </Avatar>
88
- </span>
89
- {/each}
90
- {#if restCount > 0}
91
- <span class="cd-avatar-group__item">
92
- {#if renderMore}
93
- {@render renderMore({ overlapList, count: restCount })}
94
- {:else if onMore}
95
- <button type="button" class="cd-avatar-group__more-btn" onclick={onMore}>
96
- <Avatar color="grey" alt={loc().t('Avatar.moreAlt', { count: restCount })}>+{restCount}</Avatar>
97
- </button>
98
- {:else}
99
- <Avatar color="grey" alt={loc().t('Avatar.moreAlt', { count: restCount })}>+{restCount}</Avatar>
100
- {/if}
101
- </span>
102
- {/if}
103
- {:else if children}
104
- {@render children()}
105
- {/if}
106
- </div>
107
-
108
- <style>
109
- .cd-avatar-group {
110
- display: inline-flex;
111
- align-items: center;
112
- }
113
- /* later avatars overlap (and sit above) the previous ones */
114
- .cd-avatar-group :global(.cd-avatar),
115
- .cd-avatar-group__item {
116
- position: relative;
117
- }
118
- .cd-avatar-group > :global(.cd-avatar:not(:first-child)),
119
- .cd-avatar-group__item:not(:first-child) {
120
- margin-inline-start: calc(-1 * var(--cd-avatar-overlap, 8px));
121
- }
122
- /* ring so overlapping avatars read as separated */
123
- .cd-avatar-group > :global(.cd-avatar),
124
- .cd-avatar-group__item :global(.cd-avatar) {
125
- box-shadow: 0 0 0 2px var(--cd-color-bg-0);
126
- }
127
- .cd-avatar-group__item :global(.cd-avatar) {
128
- display: inline-flex;
129
- }
130
- .cd-avatar-group__more-btn {
131
- display: inline-flex;
132
- padding: 0;
133
- border: 0;
134
- background: transparent;
135
- cursor: pointer;
136
- border-radius: var(--cd-radius-full);
137
- }
138
- .cd-avatar-group__more-btn:focus-visible {
139
- outline: 2px solid var(--cd-color-primary);
140
- outline-offset: 2px;
141
- }
142
- </style>
@@ -1,21 +0,0 @@
1
- import { getContext, setContext } from 'svelte';
2
-
3
- export type AvatarShape = 'circle' | 'square';
4
- export type AvatarSizeEnum = 'extra-small' | 'small' | 'default' | 'large' | 'extra-large';
5
-
6
- export interface AvatarGroupContext {
7
- // getters keep the shared config reactive to Group prop changes across the
8
- // context boundary (reading a plain value would freeze the initial snapshot).
9
- getShape: () => AvatarShape | undefined;
10
- getSize: () => AvatarSizeEnum | number | undefined;
11
- }
12
-
13
- const KEY = Symbol('cd-avatar-group');
14
-
15
- export function setAvatarGroupContext(ctx: AvatarGroupContext): void {
16
- setContext(KEY, ctx);
17
- }
18
-
19
- export function getAvatarGroupContext(): AvatarGroupContext | undefined {
20
- return getContext<AvatarGroupContext | undefined>(KEY);
21
- }
@@ -1,10 +0,0 @@
1
- import Avatar_ from './Avatar.svelte';
2
- import AvatarGroup from './AvatarGroup.svelte';
3
-
4
- export const Avatar: typeof Avatar_ & {
5
- Group: typeof AvatarGroup;
6
- } = Object.assign(Avatar_, { Group: AvatarGroup });
7
-
8
- export { AvatarGroup };
9
- export { meta as avatarMeta } from './meta.js';
10
- export type { AvatarShape, AvatarSizeEnum, AvatarGroupContext } from './context.js';
@@ -1,73 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * Avatar — see specs/components/show/Avatar.spec.md
4
- */
5
- export const meta = {
6
- name: 'Avatar',
7
- category: 'show',
8
- description:
9
- '头像:支持图片(src/srcset)、加载失败降级到 children/alt 首字,circle/square 形状,枚举或自定义数字尺寸,color=auto 按文字哈希取色,右下角状态点。Avatar.Group 把多个头像重叠排列,items+maxCount 折叠出「+M」溢出头像,组级 shape/size 透传(子 Avatar 自身 prop 优先)。',
10
- exports: ['Avatar', 'AvatarGroup'],
11
- props: [
12
- { name: 'src', type: 'string', default: 'undefined', desc: '图片地址' },
13
- { name: 'srcset', type: 'string', default: 'undefined' },
14
- { name: 'alt', type: 'string', default: 'undefined', desc: 'a11y 文本,也作文字降级来源' },
15
- { name: 'shape', type: "'circle'|'square'", default: "'circle'" },
16
- {
17
- name: 'size',
18
- type: "'extra-small'|'small'|'default'|'large'|'extra-large'|number",
19
- default: "'default'",
20
- desc: '枚举映射 token,number 内联 px',
21
- },
22
- {
23
- name: 'color',
24
- type: "'auto'|string",
25
- default: "'grey'",
26
- desc: 'auto 按文字哈希取预设色;具体色内联背景',
27
- },
28
- { name: 'status', type: "'default'|'warning'|'error'", default: "'default'", desc: '状态点色推导' },
29
- { name: 'dot', type: 'boolean', default: 'false', desc: '右下角状态点' },
30
- { name: 'dotColor', type: 'string', default: 'undefined', desc: '覆盖状态点颜色' },
31
- { name: 'gap', type: 'number', default: '3', desc: '文字头像左右内距(px)' },
32
- { name: 'href', type: 'string', default: 'undefined', desc: '可交互:跳转链接,根渲染为 <a>' },
33
- { name: 'target', type: 'string', default: 'undefined', desc: '链接 target(仅 href 生效)' },
34
- {
35
- name: 'onClick',
36
- type: '(e: MouseEvent|KeyboardEvent) => void',
37
- default: 'undefined',
38
- desc: '可交互:点击回调;无 href 时根取 role=button + 键盘 Enter/Space 激活',
39
- },
40
- { name: 'children', type: 'Snippet', default: 'undefined', desc: '文字/图标内容' },
41
- ],
42
- events: [{ name: 'click', desc: '可交互头像(href/onClick)被点击或键盘激活' }],
43
- slots: [{ name: 'children', desc: '文字或图标降级内容' }],
44
- a11y: {
45
- hasRole: true,
46
- focusable: false,
47
- note: '图片头像用 <img alt>;纯文字头像 role=img + aria-label(alt 或文字)。可交互:href→<a>,仅 onClick→role=button + tabindex=0 + 键盘 Enter/Space;纯展示头像不可聚焦。',
48
- },
49
- tokens: [
50
- '--cd-avatar-size-extra-small',
51
- '--cd-avatar-size-small',
52
- '--cd-avatar-size-default',
53
- '--cd-avatar-size-large',
54
- '--cd-avatar-size-extra-large',
55
- '--cd-avatar-bg',
56
- '--cd-avatar-color',
57
- '--cd-avatar-radius',
58
- ],
59
- responsive: false,
60
- examples: [
61
- { title: '图片', code: '<Avatar src="/u.png" alt="用户" />' },
62
- { title: '文字', code: '<Avatar color="auto" alt="陈" />' },
63
- { title: '状态点', code: '<Avatar alt="A" dot status="error" />' },
64
- {
65
- title: '头像组折叠',
66
- code: '<Avatar.Group maxCount={3} items={[{content:"陈"},{content:"李"},{content:"王"},{content:"赵"}]} />',
67
- },
68
- {
69
- title: '头像组自定义',
70
- code: '<Avatar.Group size="small"><Avatar>陈</Avatar><Avatar color="auto" alt="李" /></Avatar.Group>',
71
- },
72
- ],
73
- } as const;