@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,414 +0,0 @@
1
- <!--
2
- Breadcrumb — see specs/components/navigation/Breadcrumb.spec.md
3
- Data-driven `routes` mode (browser-verifiable) + declarative `<Breadcrumb.Item>` mode。
4
- 声明式模式:子项间分隔符由纯 CSS(:not(:last-child)::after)自动插入,最后一项后无分隔符;
5
- 最后一项语义(当前页:不可点 + aria-current=page)由 context 注册顺序派生(红线 #2 纯函数)。
6
- maxItemCount: 超出时中间折叠为 ... 触发器(保留首项 + 末 maxItemCount-1 项),点击展开全部。
7
- showTooltip: 文本可能被截断的项,启用后用 :global Tooltip 悬浮展示完整 label(label 截断由 CSS 控制)。
8
- moreType: 折叠 ... 的浮层类型——'tooltip' 悬浮列出被折叠项;'popover' 悬浮列出且其中项可点击跳转。
9
- 未设 moreType(undefined)时维持现状:点击 ... 直接展开全部(向后兼容)。
10
- 复用库内 Tooltip/Popover(红线 #3:cleanup 由其内部 useDismiss/定时器自管)。
11
- -->
12
- <script lang="ts">
13
- import type { Snippet } from 'svelte';
14
- import { useLocale } from '../locale-provider/index.js';
15
- import Tooltip from '../tooltip/Tooltip.svelte';
16
- import Popover from '../popover/Popover.svelte';
17
- import { setBreadcrumbContext } from './context.js';
18
- import type { BreadcrumbRoute } from './types.js';
19
-
20
- type BreadcrumbSize = 'small' | 'default' | 'large';
21
- /** 折叠 ... 浮层类型;undefined 时点击直接展开全部(向后兼容) */
22
- type MoreType = 'tooltip' | 'popover';
23
- type CollapsedRoute = { route: BreadcrumbRoute; index: number };
24
- type DisplayCell =
25
- | { type: 'route'; route: BreadcrumbRoute; index: number }
26
- | { type: 'ellipsis'; count: number; collapsed: CollapsedRoute[] };
27
-
28
- interface Props {
29
- routes?: BreadcrumbRoute[];
30
- separator?: string;
31
- size?: BreadcrumbSize;
32
- /** 超出此数量时中间折叠(0 = 不折叠) */
33
- maxItemCount?: number;
34
- /** 文本被截断的项 hover 时用 Tooltip 展示完整 label */
35
- showTooltip?: boolean;
36
- /** 折叠 ... 的浮层类型;不设则点击 ... 直接展开全部 */
37
- moreType?: MoreType;
38
- /** 紧凑模式,默认 true;false 时根元素附加 cd-breadcrumb--loose 类(更大字号/间距) */
39
- compact?: boolean;
40
- /**
41
- * 是否在超出 maxItemCount 时自动折叠,默认 true。
42
- * false 时即使超出 maxItemCount 也不折叠(始终展示全部项)。
43
- */
44
- autoCollapse?: boolean;
45
- /** 受控选中项索引(配合 onClick 使用,令对应项高亮) */
46
- activeIndex?: number;
47
- /**
48
- * 自定义路由项渲染(routes 模式);传入时替换默认的链接/文本/当前页渲染逻辑。
49
- * Svelte 5 Snippet:{@render renderItem(route, index, isLast)}
50
- */
51
- renderItem?: Snippet<[BreadcrumbRoute, number, boolean]>;
52
- /**
53
- * 自定义折叠 … 区域渲染(替代 moreType 内置浮层)。
54
- * 传入时接管折叠展示,参数为被折叠的路由列表。
55
- * Svelte 5 Snippet:{@render renderMore(collapsed)}
56
- */
57
- renderMore?: Snippet<[CollapsedRoute[]]>;
58
- class?: string;
59
- children?: Snippet;
60
- onClick?: (route: BreadcrumbRoute, index: number) => void;
61
- }
62
-
63
- let {
64
- routes = [],
65
- separator = '/',
66
- size = 'default',
67
- maxItemCount = 0,
68
- showTooltip = false,
69
- moreType,
70
- compact = true,
71
- autoCollapse = true,
72
- activeIndex,
73
- renderItem,
74
- renderMore,
75
- class: className = '',
76
- children,
77
- onClick,
78
- }: Props = $props();
79
-
80
- const loc = useLocale();
81
-
82
- const cls = $derived(
83
- [
84
- 'cd-breadcrumb',
85
- `cd-breadcrumb--${size}`,
86
- !compact ? 'cd-breadcrumb--loose' : '',
87
- className,
88
- ]
89
- .filter(Boolean)
90
- .join(' '),
91
- );
92
-
93
- const hasRoutes = $derived(routes.length > 0);
94
-
95
- // 折叠:展开后显示全部;本地 $state。
96
- let expanded = $state(false);
97
-
98
- // 折叠生效:autoCollapse=true、maxItemCount>0、未展开、路由数超上限。
99
- // 折叠后展示:首项 + ellipsis + 末 (maxItemCount-1) 项。
100
- const cells = $derived.by<DisplayCell[]>(() => {
101
- const all: DisplayCell[] = routes.map((route, index) => ({
102
- type: 'route',
103
- route,
104
- index,
105
- }));
106
- if (!autoCollapse || expanded || maxItemCount <= 0 || routes.length <= maxItemCount) return all;
107
- const tail = Math.max(1, maxItemCount - 1);
108
- const head = all.slice(0, 1);
109
- const rest = all.slice(1, routes.length - tail);
110
- const tailCells = all.slice(routes.length - tail);
111
- if (rest.length === 0) return all;
112
- const collapsed: CollapsedRoute[] = rest.map((c) =>
113
- // rest 内必为 route cell(all 全由 route 构成)
114
- c.type === 'route' ? { route: c.route, index: c.index } : { route: { label: '' }, index: -1 },
115
- );
116
- return [...head, { type: 'ellipsis', count: rest.length, collapsed }, ...tailCells];
117
- });
118
-
119
- function handleClick(route: BreadcrumbRoute, index: number) {
120
- onClick?.(route, index);
121
- }
122
-
123
- // 声明式 <Breadcrumb.Item> 注册:按 mount 顺序(= 源码顺序)收集 id,
124
- // 据此派生「最后一项」。分隔符本身由纯 CSS 插入,无需 JS。
125
- //
126
- // 红线 #2:注册顺序簿记 `order` 用普通数组(非 $state),避免在 Item 的注册
127
- // $effect 内 push 时既「读」又「写」同一块 $state(数组代理 push 会读 length
128
- // 再写元素)形成 effect_update_depth_exceeded 自循环。render 真正需要的只有
129
- // 「末项 id」,单独用 $state `lastId` 承载:register/unregister 仅写它(Item 的
130
- // effect 不读它),isLast 在 render 期只读,副作用写 / 渲染读分离,无环。
131
- let nextId = 0;
132
- const order: number[] = [];
133
- let lastId = $state<number>(-1);
134
- setBreadcrumbContext({
135
- register: () => {
136
- const id = nextId++;
137
- order.push(id);
138
- lastId = order[order.length - 1] ?? -1;
139
- return id;
140
- },
141
- unregister: (id: number) => {
142
- const i = order.indexOf(id);
143
- if (i !== -1) order.splice(i, 1);
144
- lastId = order.length > 0 ? (order[order.length - 1] ?? -1) : -1;
145
- },
146
- isLast: (id: number) => lastId !== -1 && id === lastId,
147
- });
148
- </script>
149
-
150
- <!-- 单个路由项内容:末项=当前页(不可点),有 href=链接,否则可点文本。
151
- renderItem 优先:传入时直接渲染自定义内容。
152
- activeIndex 对应项附加 cd-breadcrumb__link--active / cd-breadcrumb__text--active 类。 -->
153
- {#snippet routeItem(route: BreadcrumbRoute, index: number, last: boolean)}
154
- {#if renderItem}
155
- {@render renderItem(route, index, last)}
156
- {:else if last}
157
- <span class="cd-breadcrumb__current" aria-current="page">{route.label}</span>
158
- {:else if route.href}
159
- <a
160
- class={['cd-breadcrumb__link', activeIndex === index ? 'cd-breadcrumb__link--active' : ''].filter(Boolean).join(' ')}
161
- href={route.href}
162
- onclick={() => handleClick(route, index)}>{route.label}</a
163
- >
164
- {:else}
165
- <span
166
- class={['cd-breadcrumb__text', activeIndex === index ? 'cd-breadcrumb__text--active' : ''].filter(Boolean).join(' ')}
167
- role="link"
168
- tabindex="0"
169
- onclick={() => handleClick(route, index)}
170
- onkeydown={(e) => {
171
- if (e.key === 'Enter' || e.key === ' ') {
172
- e.preventDefault();
173
- handleClick(route, index);
174
- }
175
- }}>{route.label}</span
176
- >
177
- {/if}
178
- {/snippet}
179
-
180
- <!-- showTooltip 开启:用 Tooltip 包裹(label 截断由 CSS 控制),content 为完整文本。 -->
181
- {#snippet maybeTooltip(route: BreadcrumbRoute, index: number, last: boolean)}
182
- {#if showTooltip}
183
- <Tooltip content={route.label} placement="top">
184
- <span class="cd-breadcrumb__ellipsis-wrap">{@render routeItem(route, index, last)}</span>
185
- </Tooltip>
186
- {:else}
187
- {@render routeItem(route, index, last)}
188
- {/if}
189
- {/snippet}
190
-
191
- <!-- 折叠 ... 触发器(Tooltip/Popover 的 child)。
192
- menu=true(popover 模式)时声明 disclosure 语义:aria-haspopup="menu",
193
- 展开态 aria-expanded 由父 Popover 的 trigger 包裹同步(这里补 haspopup=menu,
194
- 使浮层菜单角色与触发器声明一致,符合 WAI-ARIA APG Breadcrumb 折叠节点)。 -->
195
- {#snippet moreTrigger(count: number, menu: boolean)}
196
- <button
197
- type="button"
198
- class="cd-breadcrumb__more"
199
- aria-label={loc().t('Breadcrumb.moreLabel', { count })}
200
- aria-haspopup={menu ? 'menu' : undefined}
201
- >…</button>
202
- {/snippet}
203
-
204
- <nav class={cls} aria-label={loc().t('Breadcrumb.ariaLabel')}>
205
- {#if hasRoutes}
206
- <ol class="cd-breadcrumb__list">
207
- {#each cells as cell, cellIndex (cell.type === 'route' ? `r-${cell.index}` : 'ellipsis')}
208
- {@const isLast = cellIndex === cells.length - 1}
209
- <li class="cd-breadcrumb__item">
210
- {#if cell.type === 'ellipsis'}
211
- {#if renderMore}
212
- <!-- renderMore 接管折叠区域渲染,参数为被折叠路由列表。 -->
213
- {@render renderMore(cell.collapsed)}
214
- {:else if moreType === 'popover'}
215
- <Popover trigger="click" position="bottom" align="start">
216
- {@render moreTrigger(cell.count, true)}
217
- {#snippet contentSlot()}
218
- <!-- 折叠节点展开浮层:WAI-ARIA APG menu 角色,项为 menuitem。 -->
219
- <ul class="cd-breadcrumb__more-list" role="menu">
220
- {#each cell.collapsed as c (c.index)}
221
- <li class="cd-breadcrumb__more-list-item" role="none">
222
- {#if c.route.href}
223
- <a
224
- class="cd-breadcrumb__link"
225
- role="menuitem"
226
- href={c.route.href}
227
- onclick={() => handleClick(c.route, c.index)}>{c.route.label}</a
228
- >
229
- {:else}
230
- <span
231
- class="cd-breadcrumb__text"
232
- role="menuitem"
233
- tabindex="0"
234
- onclick={() => handleClick(c.route, c.index)}
235
- onkeydown={(e) => {
236
- if (e.key === 'Enter' || e.key === ' ') {
237
- e.preventDefault();
238
- handleClick(c.route, c.index);
239
- }
240
- }}>{c.route.label}</span
241
- >
242
- {/if}
243
- </li>
244
- {/each}
245
- </ul>
246
- {/snippet}
247
- </Popover>
248
- {:else if moreType === 'tooltip'}
249
- <Tooltip placement="bottom">
250
- {@render moreTrigger(cell.count, false)}
251
- {#snippet content()}
252
- <span class="cd-breadcrumb__more-tip">
253
- {cell.collapsed.map((c) => c.route.label).join(` ${separator} `)}
254
- </span>
255
- {/snippet}
256
- </Tooltip>
257
- {:else}
258
- <!-- 默认模式(无 moreType):点击就地展开整条 ol,disclosure 语义用 aria-expanded。 -->
259
- <button
260
- type="button"
261
- class="cd-breadcrumb__more"
262
- aria-label={loc().t('Breadcrumb.moreLabel', { count: cell.count })}
263
- aria-expanded={expanded}
264
- onclick={() => (expanded = true)}
265
- >…</button>
266
- {/if}
267
- {:else}
268
- {@render maybeTooltip(cell.route, cell.index, isLast)}
269
- {/if}
270
- {#if !isLast}
271
- <span class="cd-breadcrumb__separator" aria-hidden="true">{separator}</span>
272
- {/if}
273
- </li>
274
- {/each}
275
- </ol>
276
- {:else}
277
- <ol
278
- class="cd-breadcrumb__list cd-breadcrumb__list--declarative"
279
- style="--cd-breadcrumb-separator-content: '{separator}'"
280
- >
281
- {@render children?.()}
282
- </ol>
283
- {/if}
284
- </nav>
285
-
286
- <style>
287
- .cd-breadcrumb {
288
- font-size: var(--cd-breadcrumb-font-size);
289
- color: var(--cd-breadcrumb-color);
290
- }
291
- .cd-breadcrumb--small {
292
- font-size: var(--cd-font-size-1);
293
- }
294
- .cd-breadcrumb--large {
295
- font-size: var(--cd-font-size-3);
296
- }
297
- /* compact=false:宽松模式,字号略大、项间距增加 */
298
- .cd-breadcrumb--loose {
299
- font-size: var(--cd-breadcrumb-loose-font-size, var(--cd-font-size-3));
300
- letter-spacing: var(--cd-breadcrumb-loose-letter-spacing, 0.01em);
301
- }
302
- .cd-breadcrumb--loose .cd-breadcrumb__list {
303
- gap: var(--cd-breadcrumb-loose-gap, calc(var(--cd-breadcrumb-gap, 0.5em) * 1.5));
304
- }
305
- .cd-breadcrumb__list {
306
- display: flex;
307
- flex-wrap: wrap;
308
- align-items: center;
309
- gap: var(--cd-breadcrumb-gap);
310
- margin: 0;
311
- padding: 0;
312
- list-style: none;
313
- }
314
- /* 子项内容类用 :global 包裹:声明式 <Breadcrumb.Item> 渲染的元素在子组件作用域内,
315
- 数据驱动模式的元素则为本组件 .cd-breadcrumb 后代,两者统一受样式约束(对齐 Collapse 模式)。 */
316
- .cd-breadcrumb :global(.cd-breadcrumb__item) {
317
- display: inline-flex;
318
- align-items: center;
319
- gap: var(--cd-breadcrumb-gap);
320
- }
321
- .cd-breadcrumb__separator {
322
- color: var(--cd-breadcrumb-separator-color);
323
- user-select: none;
324
- }
325
- /* 声明式 Item 间分隔符:纯 CSS 自动插入,最后一项后不加(红线 #2)。 */
326
- .cd-breadcrumb__list--declarative :global(.cd-breadcrumb__item:not(:last-child))::after {
327
- content: var(--cd-breadcrumb-separator-content, '/');
328
- margin-inline-start: var(--cd-breadcrumb-gap);
329
- color: var(--cd-breadcrumb-separator-color);
330
- user-select: none;
331
- }
332
- .cd-breadcrumb :global(.cd-breadcrumb__link),
333
- .cd-breadcrumb :global(.cd-breadcrumb__text) {
334
- color: var(--cd-breadcrumb-color-link);
335
- text-decoration: none;
336
- cursor: pointer;
337
- border-radius: var(--cd-radius-1);
338
- }
339
- .cd-breadcrumb :global(.cd-breadcrumb__link:hover),
340
- .cd-breadcrumb :global(.cd-breadcrumb__text:hover) {
341
- text-decoration: underline;
342
- }
343
- .cd-breadcrumb :global(.cd-breadcrumb__link:focus-visible),
344
- .cd-breadcrumb :global(.cd-breadcrumb__text:focus-visible) {
345
- outline: none;
346
- box-shadow: var(--cd-focus-ring);
347
- }
348
- .cd-breadcrumb :global(.cd-breadcrumb__current) {
349
- color: var(--cd-breadcrumb-color-active);
350
- }
351
- /* activeIndex:选中项高亮(配合 onClick 受控选中) */
352
- .cd-breadcrumb :global(.cd-breadcrumb__link--active),
353
- .cd-breadcrumb :global(.cd-breadcrumb__text--active) {
354
- color: var(--cd-breadcrumb-color-active);
355
- font-weight: 600;
356
- }
357
- .cd-breadcrumb__more {
358
- display: inline-flex;
359
- align-items: center;
360
- justify-content: center;
361
- min-inline-size: 1.5em;
362
- padding: 0 var(--cd-spacing-1);
363
- border: none;
364
- background: transparent;
365
- color: var(--cd-breadcrumb-color-link);
366
- font: inherit;
367
- line-height: 1;
368
- cursor: pointer;
369
- border-radius: var(--cd-radius-1);
370
- }
371
- .cd-breadcrumb__more:hover {
372
- background: var(--cd-color-fill-1);
373
- }
374
- .cd-breadcrumb__more:focus-visible {
375
- outline: none;
376
- box-shadow: var(--cd-focus-ring);
377
- }
378
-
379
- /* showTooltip:截断包裹——超过 max-inline-size 时省略号,hover 由 Tooltip 显示完整文本 */
380
- .cd-breadcrumb__ellipsis-wrap {
381
- display: inline-block;
382
- max-inline-size: var(--cd-breadcrumb-item-max-width, 12em);
383
- overflow: hidden;
384
- text-overflow: ellipsis;
385
- white-space: nowrap;
386
- vertical-align: bottom;
387
- }
388
- /* 内层可点元素在截断包裹内需为块级以继承省略号 */
389
- .cd-breadcrumb__ellipsis-wrap :global(.cd-breadcrumb__link),
390
- .cd-breadcrumb__ellipsis-wrap :global(.cd-breadcrumb__text),
391
- .cd-breadcrumb__ellipsis-wrap :global(.cd-breadcrumb__current) {
392
- display: inline;
393
- overflow: hidden;
394
- text-overflow: ellipsis;
395
- white-space: nowrap;
396
- }
397
-
398
- /* moreType=popover 折叠项列表 */
399
- .cd-breadcrumb__more-list {
400
- display: flex;
401
- flex-direction: column;
402
- gap: var(--cd-spacing-1);
403
- margin: 0;
404
- padding: 0;
405
- list-style: none;
406
- }
407
- .cd-breadcrumb__more-list-item {
408
- white-space: nowrap;
409
- }
410
- /* moreType=tooltip 折叠项文本(换行友好) */
411
- .cd-breadcrumb__more-tip {
412
- white-space: normal;
413
- }
414
- </style>
@@ -1,23 +0,0 @@
1
- <!--
2
- 仅供 Breadcrumb.kbd.test.ts(browser project)使用的折叠 disclosure 键盘 e2e 夹具。
3
- maxItemCount=3 + 5 个路由 → 中间折叠为 … 触发器;moreType='popover' 使其成为
4
- click 触发的 disclosure:折叠触发器经 Popover 包裹(cd-popover__trigger 承载 role=button
5
- + aria-haspopup + aria-expanded),Enter/Space 展开浮层菜单(role=menu,portal 到 body)。
6
- -->
7
- <script lang="ts">
8
- import { LocaleProvider } from '../locale-provider/index.js';
9
- import Breadcrumb from './Breadcrumb.svelte';
10
- import type { BreadcrumbRoute } from './types.js';
11
-
12
- const routes: BreadcrumbRoute[] = [
13
- { label: 'Home', href: '#home' },
14
- { label: 'Library', href: '#library' },
15
- { label: 'Data', href: '#data' },
16
- { label: 'Reports', href: '#reports' },
17
- { label: 'Q3', href: '#q3' },
18
- ];
19
- </script>
20
-
21
- <LocaleProvider locale="en_US">
22
- <Breadcrumb {routes} maxItemCount={3} moreType="popover" />
23
- </LocaleProvider>
@@ -1,77 +0,0 @@
1
- <!--
2
- BreadcrumbItem — declarative item for the `<Breadcrumb.Item>` mode of Breadcrumb.
3
- - 分隔符由父级纯 CSS(:not(:last-child)::after)自动插入,本组件只渲染自身。
4
- - 最后一项语义(当前页:不可点 + aria-current=page)由父 context 注册顺序派生。
5
- -->
6
- <script lang="ts">
7
- import type { Snippet } from 'svelte';
8
- import { getBreadcrumbContext } from './context.js';
9
-
10
- interface Props {
11
- href?: string;
12
- /** 覆盖父级 separator,仅对本项末尾的分隔符生效(声明式 CSS 模式用 --cd-breadcrumb-separator-content 注入) */
13
- separator?: string;
14
- /** 禁止链接/按钮行为:渲染为普通 span(不可点击),忽略 href 和 onClick;末项始终 noLink */
15
- noLink?: boolean;
16
- /** 项前置图标 snippet */
17
- icon?: Snippet;
18
- class?: string;
19
- children?: Snippet;
20
- onClick?: (e: MouseEvent) => void;
21
- }
22
-
23
- let { href, separator, noLink = false, icon, class: className = '', children, onClick }: Props = $props();
24
-
25
- const ctx = getBreadcrumbContext();
26
-
27
- // mount 时按源码顺序注册,unmount 注销;据此由父派生「是否最后一项」。
28
- let id = $state(-1);
29
- $effect(() => {
30
- if (!ctx) return;
31
- const myId = ctx.register();
32
- id = myId;
33
- return () => ctx.unregister(myId);
34
- });
35
-
36
- // 红线 #2: 纯派生,render 期只读。无 context 时退化为普通链接项。
37
- const isLast = $derived(ctx ? id !== -1 && ctx.isLast(id) : false);
38
-
39
- const cls = $derived(['cd-breadcrumb__item', className].filter(Boolean).join(' '));
40
- </script>
41
-
42
- <!--
43
- separator prop:传入时以内联 CSS 变量 --cd-breadcrumb-separator-content 覆盖本项分隔符(仅声明式 CSS 模式)。
44
- noLink:非最后一项也渲染为普通 span(不可点击/键盘激活);语义上表示该层级无可导航地址。
45
- icon:前置图标 snippet,渲染在 children 前。
46
- -->
47
- <li
48
- class={cls}
49
- style={separator !== undefined ? `--cd-breadcrumb-separator-content: '${separator}'` : undefined}
50
- >
51
- {#if isLast || noLink}
52
- <span
53
- class="cd-breadcrumb__current"
54
- aria-current={isLast ? 'page' : undefined}
55
- >
56
- {#if icon}{@render icon()}{/if}{@render children?.()}
57
- </span>
58
- {:else if href}
59
- <a class="cd-breadcrumb__link" {href} onclick={onClick}>
60
- {#if icon}{@render icon()}{/if}{@render children?.()}
61
- </a>
62
- {:else}
63
- <span
64
- class="cd-breadcrumb__text"
65
- role="link"
66
- tabindex="0"
67
- onclick={onClick}
68
- onkeydown={(e) => {
69
- if (e.key === 'Enter' || e.key === ' ') {
70
- e.preventDefault();
71
- onClick?.(e as unknown as MouseEvent);
72
- }
73
- }}
74
- >{#if icon}{@render icon()}{/if}{@render children?.()}</span
75
- >
76
- {/if}
77
- </li>
@@ -1,27 +0,0 @@
1
- import { getContext, setContext } from 'svelte';
2
-
3
- /**
4
- * 父 Breadcrumb 向声明式 <Breadcrumb.Item> 暴露的上下文。
5
- * 用 getter 跨 context 边界保持响应性(直接读快照会冻结初始值)。
6
- *
7
- * 红线 #2: isLast 为纯派生函数(基于注册顺序的纯比较),render 期只读不写。
8
- * 注册/注销发生在 mount/unmount 副作用($effect),与渲染派生分离。
9
- */
10
- export interface BreadcrumbContext {
11
- /** Item 挂载时注册自身(按源码顺序),返回稳定 id。 */
12
- register: () => number;
13
- /** Item 卸载时注销。 */
14
- unregister: (id: number) => void;
15
- /** 该 id 是否为最后一项(当前页:不可点 + aria-current=page)。纯派生。 */
16
- isLast: (id: number) => boolean;
17
- }
18
-
19
- const KEY = Symbol('cd-breadcrumb');
20
-
21
- export function setBreadcrumbContext(ctx: BreadcrumbContext): void {
22
- setContext(KEY, ctx);
23
- }
24
-
25
- export function getBreadcrumbContext(): BreadcrumbContext | undefined {
26
- return getContext<BreadcrumbContext | undefined>(KEY);
27
- }
@@ -1,21 +0,0 @@
1
- import BreadcrumbRoot from './Breadcrumb.svelte';
2
- import Item from './Item.svelte';
3
-
4
- /** Named exports (also usable directly). */
5
- export { default as BreadcrumbItem } from './Item.svelte';
6
-
7
- /**
8
- * Aggregated namespace export: enables <Breadcrumb.Item />.
9
- * Explicit type annotation avoids leaking component Props type errors.
10
- */
11
- export const Breadcrumb: typeof BreadcrumbRoot & {
12
- Item: typeof Item;
13
- } = Object.assign(BreadcrumbRoot, { Item });
14
-
15
- export { meta as breadcrumbMeta } from './meta.js';
16
- export type { BreadcrumbRoute } from './types.js';
17
- export {
18
- getBreadcrumbContext,
19
- setBreadcrumbContext,
20
- type BreadcrumbContext,
21
- } from './context.js';