@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,309 +0,0 @@
1
- <!--
2
- ImagePreview — 预览浮层(portal 到 body)。
3
- 被 Image(单图)与 ImagePreviewGroup(多图)共享,统一缩放/旋转/键盘/导航逻辑。
4
- 红线 #3:portal、keydown 监听、focus 命令式 + cleanup;当前索引由父级以 $state 传入。
5
- 红线 #2:变换/导航可用性派生纯函数。
6
- -->
7
- <script lang="ts">
8
- import { untrack } from 'svelte';
9
- import { useFocusTrap, useLiveAnnouncer } from '@chenzy-design/core';
10
- import { useLocale } from '../locale-provider/index.js';
11
-
12
- interface PreviewImage {
13
- src: string;
14
- alt: string;
15
- }
16
-
17
- interface Props {
18
- images: PreviewImage[];
19
- /** 当前展示的图片索引(受控,由父级 $state 维护)。 */
20
- current: number;
21
- onClose: () => void;
22
- onChange: (index: number) => void;
23
- }
24
-
25
- let { images, current, onClose, onChange }: Props = $props();
26
-
27
- const loc = useLocale();
28
- // 单例 live region(polite):灯箱翻页时播报「第 m 张,共 n 张」(红线 #3:命令式,在切换 effect 内)。
29
- const announcer = useLiveAnnouncer();
30
-
31
- const count = $derived(images.length);
32
- const safeIndex = $derived(Math.min(Math.max(current, 0), Math.max(count - 1, 0)));
33
- const active = $derived(images[safeIndex]);
34
- const showNav = $derived(count > 1);
35
- const canPrev = $derived(safeIndex > 0);
36
- const canNext = $derived(safeIndex < count - 1);
37
-
38
- // 预览变换状态:缩放倍数 + 旋转角度。切换图片时重置(见下方 $effect)。
39
- let scale = $state(1);
40
- let rotate = $state(0);
41
- const SCALE_STEP = 0.25;
42
- const SCALE_MIN = 0.25;
43
- const SCALE_MAX = 4;
44
- const transform = $derived(`scale(${scale}) rotate(${rotate}deg)`);
45
-
46
- function resetTransform() {
47
- scale = 1;
48
- rotate = 0;
49
- }
50
- function zoomIn() {
51
- scale = Math.min(SCALE_MAX, scale + SCALE_STEP);
52
- }
53
- function zoomOut() {
54
- scale = Math.max(SCALE_MIN, scale - SCALE_STEP);
55
- }
56
- function rotateLeft() {
57
- rotate -= 90;
58
- }
59
- function rotateRight() {
60
- rotate += 90;
61
- }
62
-
63
- function goPrev() {
64
- if (canPrev) onChange(safeIndex - 1);
65
- }
66
- function goNext() {
67
- if (canNext) onChange(safeIndex + 1);
68
- }
69
-
70
- // 切换到不同图片时把变换复位(每张图从 1x/0° 开始)。
71
- let lastIndex = $state(untrack(() => safeIndex));
72
- $effect(() => {
73
- if (safeIndex !== lastIndex) {
74
- lastIndex = safeIndex;
75
- resetTransform();
76
- // 翻页(上一张/下一张)后 polite 播报当前序号;多图时才有意义。
77
- if (count > 1) {
78
- announcer.announce(
79
- loc().t('Image.previewCount', { index: safeIndex + 1, total: count }),
80
- );
81
- }
82
- }
83
- });
84
-
85
- // 浮层根节点:portal 到 body + focus trap(焦点锁定灯箱内 + 关闭归还触发元素),
86
- // 命令式 + cleanup。复用 core useFocusTrap(与 Modal/Drawer 同一原语,不重造)。
87
- // activate() 会记下打开前的触发元素并聚焦灯箱内首个可聚焦项(关闭按钮);
88
- // deactivate() 拦截 Tab 循环、归还焦点给触发元素。
89
- let overlay = $state<HTMLDivElement | null>(null);
90
- $effect(() => {
91
- const node = overlay;
92
- if (!node) return;
93
- const body = document.body;
94
- body.appendChild(node);
95
- const trap = useFocusTrap(node);
96
- trap.activate();
97
- return () => {
98
- trap.deactivate();
99
- if (node.parentNode === body) body.removeChild(node);
100
- };
101
- });
102
-
103
- // 全局键盘:Esc 关闭、左右切换。命令式绑定 + cleanup 解绑。
104
- $effect(() => {
105
- function onKeydown(e: KeyboardEvent) {
106
- if (e.key === 'Escape') {
107
- e.preventDefault();
108
- onClose();
109
- } else if (e.key === 'ArrowLeft') {
110
- e.preventDefault();
111
- goPrev();
112
- } else if (e.key === 'ArrowRight') {
113
- e.preventDefault();
114
- goNext();
115
- }
116
- }
117
- window.addEventListener('keydown', onKeydown);
118
- return () => window.removeEventListener('keydown', onKeydown);
119
- });
120
-
121
- // 仅点击遮罩自身(非内部图片/按钮)才关闭。
122
- function onOverlayClick(e: MouseEvent) {
123
- if (e.target === e.currentTarget) onClose();
124
- }
125
-
126
- // 遮罩获得焦点时的键盘兜底(a11y:与 click 配对);全局键盘在上方 $effect 内统一处理。
127
- function onOverlayKeydown(e: KeyboardEvent) {
128
- if (e.key === 'Escape') {
129
- e.preventDefault();
130
- onClose();
131
- }
132
- }
133
- </script>
134
-
135
- <div
136
- bind:this={overlay}
137
- class="cd-image__preview"
138
- role="dialog"
139
- aria-modal="true"
140
- aria-label={active?.alt || loc().t('Image.previewAlt')}
141
- tabindex="-1"
142
- onclick={onOverlayClick}
143
- onkeydown={onOverlayKeydown}
144
- >
145
- <button
146
- type="button"
147
- class="cd-image__preview-close"
148
- aria-label={loc().t('Image.closePreview')}
149
- onclick={onClose}
150
- >
151
- ×
152
- </button>
153
-
154
- {#if showNav}
155
- <button
156
- type="button"
157
- class="cd-image__preview-nav cd-image__preview-nav--prev"
158
- aria-label={loc().t('Image.prev')}
159
- disabled={!canPrev}
160
- onclick={goPrev}
161
- >
162
-
163
- </button>
164
- <button
165
- type="button"
166
- class="cd-image__preview-nav cd-image__preview-nav--next"
167
- aria-label={loc().t('Image.next')}
168
- disabled={!canNext}
169
- onclick={goNext}
170
- >
171
-
172
- </button>
173
- {/if}
174
-
175
- <img
176
- class="cd-image__preview-img"
177
- src={active?.src}
178
- alt={active?.alt}
179
- style="transform:{transform}"
180
- />
181
-
182
- <div class="cd-image__preview-toolbar">
183
- {#if showNav}
184
- <span class="cd-image__preview-counter" aria-hidden="true">{safeIndex + 1} / {count}</span>
185
- {/if}
186
- <button type="button" class="cd-image__preview-tool" aria-label={loc().t('Image.zoomOut')} onclick={zoomOut}>−</button>
187
- <button type="button" class="cd-image__preview-tool" aria-label={loc().t('Image.zoomIn')} onclick={zoomIn}>+</button>
188
- <button type="button" class="cd-image__preview-tool" aria-label={loc().t('Image.rotateLeft')} onclick={rotateLeft}>⟲</button>
189
- <button type="button" class="cd-image__preview-tool" aria-label={loc().t('Image.rotateRight')} onclick={rotateRight}>⟳</button>
190
- <button type="button" class="cd-image__preview-tool" aria-label={loc().t('Image.reset')} onclick={resetTransform}>⤢</button>
191
- </div>
192
- </div>
193
-
194
- <style>
195
- .cd-image__preview {
196
- position: fixed;
197
- inset: 0;
198
- z-index: var(--cd-image-preview-z);
199
- display: flex;
200
- align-items: center;
201
- justify-content: center;
202
- background: var(--cd-image-preview-overlay);
203
- line-height: normal;
204
- }
205
- .cd-image__preview-img {
206
- max-inline-size: 90vw;
207
- max-block-size: 90vh;
208
- object-fit: contain;
209
- transition: transform var(--cd-motion-duration-mid, 0.2s) var(--cd-motion-ease-standard);
210
- }
211
- .cd-image__preview-close {
212
- position: absolute;
213
- inset-block-start: 16px;
214
- inset-inline-end: 16px;
215
- inline-size: 36px;
216
- block-size: 36px;
217
- padding: 0;
218
- border: 0;
219
- border-radius: var(--cd-radius-full);
220
- background: var(--cd-image-mask-bg);
221
- color: var(--cd-image-mask-color);
222
- font-size: 24px;
223
- cursor: pointer;
224
- }
225
- .cd-image__preview-close:focus-visible {
226
- outline: var(--cd-focus-ring);
227
- }
228
-
229
- .cd-image__preview-nav {
230
- position: absolute;
231
- inset-block-start: 50%;
232
- transform: translateY(-50%);
233
- display: inline-flex;
234
- align-items: center;
235
- justify-content: center;
236
- inline-size: 44px;
237
- block-size: 44px;
238
- padding: 0;
239
- border: 0;
240
- border-radius: var(--cd-radius-full);
241
- background: var(--cd-image-mask-bg);
242
- color: var(--cd-image-mask-color);
243
- font-size: 28px;
244
- line-height: 1;
245
- cursor: pointer;
246
- }
247
- .cd-image__preview-nav--prev {
248
- inset-inline-start: 16px;
249
- }
250
- .cd-image__preview-nav--next {
251
- inset-inline-end: 16px;
252
- }
253
- .cd-image__preview-nav:hover:not(:disabled) {
254
- background: rgb(255 255 255 / 0.15);
255
- }
256
- .cd-image__preview-nav:disabled {
257
- opacity: 0.35;
258
- cursor: not-allowed;
259
- }
260
- .cd-image__preview-nav:focus-visible {
261
- outline: var(--cd-focus-ring);
262
- }
263
-
264
- .cd-image__preview-toolbar {
265
- position: absolute;
266
- inset-block-end: 24px;
267
- inset-inline-start: 50%;
268
- transform: translateX(-50%);
269
- display: flex;
270
- align-items: center;
271
- gap: var(--cd-spacing-2);
272
- padding: var(--cd-spacing-2);
273
- border-radius: var(--cd-radius-full);
274
- background: var(--cd-image-mask-bg);
275
- }
276
- .cd-image__preview-counter {
277
- padding-inline: var(--cd-spacing-2);
278
- color: var(--cd-image-mask-color);
279
- font-size: 13px;
280
- line-height: 1;
281
- }
282
- .cd-image__preview-tool {
283
- display: inline-flex;
284
- align-items: center;
285
- justify-content: center;
286
- inline-size: 32px;
287
- block-size: 32px;
288
- padding: 0;
289
- border: 0;
290
- border-radius: var(--cd-radius-full);
291
- background: transparent;
292
- color: var(--cd-image-mask-color);
293
- font-size: 18px;
294
- line-height: 1;
295
- cursor: pointer;
296
- }
297
- .cd-image__preview-tool:hover {
298
- background: rgb(255 255 255 / 0.15);
299
- }
300
- .cd-image__preview-tool:focus-visible {
301
- outline: var(--cd-focus-ring);
302
- }
303
-
304
- @media (prefers-reduced-motion: reduce) {
305
- .cd-image__preview-img {
306
- transition: none;
307
- }
308
- }
309
- </style>
@@ -1,93 +0,0 @@
1
- <!--
2
- ImagePreviewGroup — 图片预览组(复合组件 Image.PreviewGroup)。
3
- 包裹多个 <Image preview>,共享一个预览浮层:点任一图进入组预览,可左右切换。
4
- 红线 #3:当前索引 / 打开态以 $state 维护;浮层 portal、键盘监听在 ImagePreview 内命令式 + cleanup。
5
- 红线 #1:current/visible 受控时不回写,仅经 onChange/onVisibleChange 回调。
6
- 红线 #2:派生项列表为纯函数。
7
- -->
8
- <script lang="ts">
9
- import type { Snippet } from 'svelte';
10
- import { setImageGroupContext, type PreviewItem } from './context.js';
11
- import ImagePreview from './ImagePreview.svelte';
12
-
13
- interface Props {
14
- /** 受控:当前预览图索引。传入则受控,不回写,仅经 onChange 回调。 */
15
- current?: number;
16
- /** 受控:预览是否可见。 */
17
- visible?: boolean;
18
- onChange?: (index: number) => void;
19
- onVisibleChange?: (visible: boolean) => void;
20
- children?: Snippet;
21
- }
22
-
23
- let { current, visible, onChange, onVisibleChange, children }: Props = $props();
24
-
25
- // 已注册子图(注册顺序即索引)。槽位卸载置 null,避免索引漂移。
26
- let items = $state<(PreviewItem | null)[]>([]);
27
-
28
- // 非受控本地态。
29
- let innerCurrent = $state(0);
30
- let innerVisible = $state(false);
31
-
32
- const isCurrentControlled = $derived(current !== undefined);
33
- const isVisibleControlled = $derived(visible !== undefined);
34
-
35
- const activeCurrent = $derived(isCurrentControlled ? (current as number) : innerCurrent);
36
- const activeVisible = $derived(isVisibleControlled ? (visible as boolean) : innerVisible);
37
-
38
- // 派生纯函数:紧凑后的预览图列表(过滤已卸载槽位)+ 槽位索引→列表索引映射。
39
- const previewList = $derived(
40
- items
41
- .map((it, slot) => (it ? { src: it.getSrc(), alt: it.getAlt(), slot } : null))
42
- .filter((v): v is { src: string; alt: string; slot: number } => v !== null),
43
- );
44
- const images = $derived(previewList.map(({ src, alt }) => ({ src, alt })));
45
-
46
- function setCurrent(index: number) {
47
- if (!isCurrentControlled) innerCurrent = index;
48
- onChange?.(index);
49
- }
50
- function setVisible(next: boolean) {
51
- if (!isVisibleControlled) innerVisible = next;
52
- onVisibleChange?.(next);
53
- }
54
-
55
- setImageGroupContext({
56
- register(item) {
57
- const slot = items.length;
58
- items = [...items, item];
59
- return slot;
60
- },
61
- unregister(slot) {
62
- if (slot < items.length) {
63
- const next = items.slice();
64
- next[slot] = null;
65
- items = next;
66
- }
67
- },
68
- open(slot) {
69
- // 槽位索引 → 紧凑列表索引。
70
- const listIndex = previewList.findIndex((p) => p.slot === slot);
71
- setCurrent(listIndex < 0 ? 0 : listIndex);
72
- setVisible(true);
73
- },
74
- });
75
-
76
- function handleClose() {
77
- setVisible(false);
78
- }
79
- function handleChange(index: number) {
80
- setCurrent(index);
81
- }
82
- </script>
83
-
84
- {@render children?.()}
85
-
86
- {#if activeVisible && images.length > 0}
87
- <ImagePreview
88
- {images}
89
- current={activeCurrent}
90
- onClose={handleClose}
91
- onChange={handleChange}
92
- />
93
- {/if}
@@ -1,32 +0,0 @@
1
- <!--
2
- 仅供 ImagePreview.kbd.test.ts(browser project)使用的灯箱 e2e 夹具。
3
- 直接渲染 ImagePreview(多图):真实图片加载在 headless 下不可靠,故跳过 Image 触发链,
4
- 直接控制灯箱挂载(show $state)。trigger 按钮先获焦作为焦点归还锚点:
5
- 测试先聚焦 trigger 再开灯箱,验证 focus trap(焦点入灯箱)、←→ 翻页、Esc 关闭归还 trigger。
6
- current 由父级 $state 维护(受控),onChange 更新它(左右键翻页)。
7
- -->
8
- <script lang="ts">
9
- import { LocaleProvider } from '../locale-provider/index.js';
10
- import ImagePreview from './ImagePreview.svelte';
11
-
12
- const images = [
13
- { src: 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==', alt: 'image one' },
14
- { src: 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==', alt: 'image two' },
15
- { src: 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==', alt: 'image three' },
16
- ];
17
-
18
- let show = $state(false);
19
- let current = $state(0);
20
- </script>
21
-
22
- <LocaleProvider locale="en_US">
23
- <button type="button" data-testid="trigger" onclick={() => (show = true)}>open lightbox</button>
24
- {#if show}
25
- <ImagePreview
26
- {images}
27
- {current}
28
- onClose={() => (show = false)}
29
- onChange={(i) => (current = i)}
30
- />
31
- {/if}
32
- </LocaleProvider>
@@ -1,26 +0,0 @@
1
- import { getContext, setContext } from 'svelte';
2
-
3
- /** 组内单张图片的预览数据。src 用 getter 以保持对子 Image prop 变化的响应性。 */
4
- export interface PreviewItem {
5
- getSrc: () => string;
6
- getAlt: () => string;
7
- }
8
-
9
- export interface ImageGroupContext {
10
- /** 子 Image 注册自身进预览组,返回该图在组内的稳定索引(注册顺序)。 */
11
- register: (item: PreviewItem) => number;
12
- /** 子 Image 卸载时注销。 */
13
- unregister: (index: number) => void;
14
- /** 子 Image 被点击时请求打开组预览,定位到自身索引。 */
15
- open: (index: number) => void;
16
- }
17
-
18
- const KEY = Symbol('cd-image-group');
19
-
20
- export function setImageGroupContext(ctx: ImageGroupContext): void {
21
- setContext(KEY, ctx);
22
- }
23
-
24
- export function getImageGroupContext(): ImageGroupContext | undefined {
25
- return getContext<ImageGroupContext | undefined>(KEY);
26
- }
@@ -1,15 +0,0 @@
1
- import Image_ from './Image.svelte';
2
- import ImagePreviewGroup from './ImagePreviewGroup.svelte';
3
-
4
- export const Image: typeof Image_ & {
5
- PreviewGroup: typeof ImagePreviewGroup;
6
- } = Object.assign(Image_, { PreviewGroup: ImagePreviewGroup });
7
-
8
- export { ImagePreviewGroup };
9
- export { meta as imageMeta } from './meta.js';
10
- export {
11
- getImageGroupContext,
12
- setImageGroupContext,
13
- type ImageGroupContext,
14
- type PreviewItem,
15
- } from './context.js';
package/src/image/meta.ts DELETED
@@ -1,131 +0,0 @@
1
- /**
2
- * Machine-readable component metadata for AI/docs consumption.
3
- * Image — see specs/components/show/Image.spec.md
4
- */
5
- export const meta = {
6
- name: 'Image',
7
- category: 'show',
8
- description:
9
- '图片:支持懒加载(原生 loading=lazy 或 IntersectionObserver)、object-fit/position、占位(骨架或 LQIP 模糊占位图 + 主图淡入)、加载失败降级(降级图/默认破图/自定义 slot)与点击全屏预览(portal 遮罩 + 缩放/旋转 + Esc 关闭)。配合 Image.PreviewGroup 包裹多张图可在预览态左右切换(← → 按钮 + 键盘箭头)。',
10
- exports: ['Image', 'Image.PreviewGroup'],
11
- props: [
12
- { name: 'src', type: 'string', default: '—', desc: '图片地址(必填)' },
13
- { name: 'alt', type: 'string', default: "''", desc: '替代文本' },
14
- { name: 'width', type: 'number|string', default: 'undefined', desc: '容器宽,number 视为 px' },
15
- { name: 'height', type: 'number|string', default: 'undefined', desc: '容器高,number 视为 px' },
16
- {
17
- name: 'fit',
18
- type: "'fill'|'contain'|'cover'|'none'|'scale-down'",
19
- default: "'fill'",
20
- desc: 'object-fit',
21
- },
22
- { name: 'position', type: 'string', default: "'center'", desc: 'object-position' },
23
- {
24
- name: 'crossorigin',
25
- type: "'anonymous'|'use-credentials'",
26
- default: 'undefined',
27
- desc: '原生 crossorigin 属性透传(跨域取图 CORS 模式)',
28
- },
29
- {
30
- name: 'srcset',
31
- type: 'string',
32
- default: 'undefined',
33
- desc: '原生 srcset 响应式图源集透传(observer 懒加载下与 src 同步延迟设置)',
34
- },
35
- {
36
- name: 'sizes',
37
- type: 'string',
38
- default: 'undefined',
39
- desc: '原生 sizes 属性透传,配合 srcset 声明视口对应的图片显示尺寸',
40
- },
41
- { name: 'lazy', type: 'boolean', default: 'true', desc: '是否懒加载' },
42
- {
43
- name: 'lazyMode',
44
- type: "'native'|'observer'",
45
- default: "'native'",
46
- desc: '懒加载方式:原生属性或 IntersectionObserver',
47
- },
48
- { name: 'rootMargin', type: 'string', default: "'200px'", desc: 'observer 模式预加载边距' },
49
- {
50
- name: 'placeholder',
51
- type: 'string|boolean',
52
- default: 'true',
53
- desc: 'true=骨架占位;string=LQIP 低质占位图 src(CSS blur 模糊,主图加载完成后淡入清晰);false=无占位',
54
- },
55
- {
56
- name: 'fallback',
57
- type: 'string|boolean',
58
- default: 'true',
59
- desc: 'true=默认破图占位;string=降级图 src;false=用 errorSlot',
60
- },
61
- { name: 'preview', type: 'boolean', default: 'false', desc: '点击图片打开全屏预览' },
62
- { name: 'class', type: 'string', default: "''", desc: '根类名透传' },
63
- { name: 'errorSlot', type: 'Snippet', default: 'undefined', desc: 'fallback=false 时的错误内容' },
64
- { name: 'placeholderSlot', type: 'Snippet', default: 'undefined', desc: '自定义占位内容' },
65
- ],
66
- events: [],
67
- subComponents: [
68
- {
69
- name: 'Image.PreviewGroup',
70
- desc: '预览组:包裹多个 <Image preview>,共享一个预览浮层,点任一图进入组预览可左右切换。',
71
- props: [
72
- { name: 'current', type: 'number', default: 'undefined', desc: '受控:当前预览图索引(不回写,仅 onChange 回调)' },
73
- { name: 'visible', type: 'boolean', default: 'undefined', desc: '受控:预览是否可见(不回写,仅 onVisibleChange 回调)' },
74
- { name: 'onChange', type: '(index: number) => void', default: 'undefined', desc: '当前预览图索引变化回调' },
75
- { name: 'onVisibleChange', type: '(visible: boolean) => void', default: 'undefined', desc: '预览开关变化回调' },
76
- { name: 'children', type: 'Snippet', default: 'undefined', desc: '组内的 <Image> 列表' },
77
- ],
78
- },
79
- ],
80
- slots: [
81
- { name: 'errorSlot', desc: '加载失败自定义内容(fallback=false 时)' },
82
- { name: 'placeholderSlot', desc: '加载中自定义占位内容' },
83
- ],
84
- a11y: {
85
- role: 'img',
86
- keyboard: ['Enter', 'Space', 'Escape', 'ArrowLeft', 'ArrowRight'],
87
- focusable: true,
88
- notes: [
89
- 'img 必传 alt 语义;默认破图占位用 role=img + aria-label',
90
- 'preview 触发器为原生 button,可键盘聚焦与触发',
91
- '预览遮罩 role=dialog、aria-modal=true,portal 到 body;useFocusTrap 锁定焦点(Tab 循环不外泄)、进入聚焦关闭按钮、关闭后焦点归还触发元素;Esc 关闭,关闭按钮有 aria-label',
92
- '组预览左右切换:← → 按钮(aria-label 经 locale)+ 键盘左右箭头,到边界按钮 disabled',
93
- '装饰性占位/遮罩文案、页码计数器 aria-hidden=true',
94
- ],
95
- },
96
- tokens: [
97
- '--cd-image-bg',
98
- '--cd-image-radius',
99
- '--cd-image-placeholder-color',
100
- '--cd-image-mask-bg',
101
- '--cd-image-mask-color',
102
- '--cd-image-preview-overlay',
103
- '--cd-image-preview-z',
104
- '--cd-focus-ring',
105
- '--cd-radius-full',
106
- '--cd-motion-duration-fast',
107
- ],
108
- examples: [
109
- { title: '基础', code: '<Image src="/a.jpg" alt="示例" width={200} />' },
110
- {
111
- title: '懒加载 observer + 预览',
112
- code: '<Image src="/big.jpg" alt="大图" lazy lazyMode="observer" preview />',
113
- },
114
- {
115
- title: 'LQIP 模糊占位',
116
- code: '<Image src="/hi-res.jpg" placeholder="/lqip-tiny.jpg" alt="高清图" />',
117
- },
118
- {
119
- title: '响应式图源 srcset/sizes',
120
- code: '<Image\n src="/img-800.jpg"\n srcset="/img-400.jpg 400w, /img-800.jpg 800w, /img-1600.jpg 1600w"\n sizes="(max-width: 600px) 400px, 800px"\n alt="响应式图"\n/>',
121
- },
122
- {
123
- title: '跨域 crossorigin',
124
- code: '<Image src="https://cdn.example.com/a.jpg" crossorigin="anonymous" alt="跨域图" />',
125
- },
126
- {
127
- title: '预览组多图切换',
128
- code: '<Image.PreviewGroup>\n <Image src="/a.jpg" alt="A" preview />\n <Image src="/b.jpg" alt="B" preview />\n <Image src="/c.jpg" alt="C" preview />\n</Image.PreviewGroup>',
129
- },
130
- ],
131
- } as const;