@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,22 +0,0 @@
1
- <!--
2
- 仅供 Menu.kbd.test.ts(browser project)使用的键盘 e2e 夹具。
3
- 外层 LocaleProvider 提供 context;菜单前放一个「before」按钮,
4
- 用于验证 Tab 从 before 进入菜单时只停靠在单一 menuitem(roving 单停靠点),
5
- 而非逐个 menuitem 都进 Tab 序。
6
- -->
7
- <script lang="ts">
8
- import { LocaleProvider } from '../locale-provider/index.js';
9
- import Menu from './Menu.svelte';
10
-
11
- const items = [
12
- { key: 'home', label: 'Home' },
13
- { key: 'profile', label: 'Profile' },
14
- { key: 'settings', label: 'Settings' },
15
- ];
16
- </script>
17
-
18
- <LocaleProvider locale="en_US">
19
- <button type="button" data-testid="before">before</button>
20
- <Menu {items} ariaLabel="Main menu" mode="vertical" />
21
- <button type="button" data-testid="after">after</button>
22
- </LocaleProvider>
@@ -1,525 +0,0 @@
1
- <!--
2
- MenuPopupNode — vertical 模式下的单个菜单项(递归)。
3
- 叶子: 普通 menuitem; SubMenu: title + hover 弹出浮层 (use:floating, rightStart)。
4
- 浮层内继续递归 MenuPopupNode,形成多级 hover 子菜单。
5
- hover 意图: 进入 title 延迟开、离开 title 与浮层组延迟关 (closeDelay),
6
- 指针移入浮层时取消关闭计时,避免 title→浮层 缝隙抖动。
7
- 定时器/floating 均命令式管理 + cleanup (红线 #3)。
8
- -->
9
- <script lang="ts">
10
- import type { Snippet } from 'svelte';
11
- import { floating } from '../_floating/use-floating.js';
12
- import type { Placement } from '@chenzy-design/core';
13
- import { isDivider, isGroup } from './types.js';
14
- import type { MenuItemDef, MenuItemNode, MenuKey } from './types.js';
15
- import Self from './MenuPopupNode.svelte';
16
- import { Tooltip } from '../tooltip/index.js';
17
-
18
- interface TooltipProps {
19
- content?: string;
20
- position?: string;
21
- theme?: 'dark' | 'light';
22
- mouseEnterDelay?: number;
23
- mouseLeaveDelay?: number;
24
- }
25
-
26
- interface Props {
27
- item: MenuItemDef;
28
- /** 顶层节点用 bottomStart 弹出向下,嵌套层用 rightStart 向右 */
29
- placement: Placement;
30
- isSelected: (key: MenuKey) => boolean;
31
- onSelectLeaf: (item: MenuItemNode) => void;
32
- /** 选中叶子后自顶向下逐级关闭浮层 */
33
- onCloseAll: () => void;
34
- openDelay?: number;
35
- closeDelay?: number;
36
- /** 折叠图标轨:仅本节点(顶层)隐藏文字 label、只显图标,浮层内子项不受影响 */
37
- collapsed?: boolean;
38
- /** 多选模式:选中叶子显勾选标记并用 aria-checked/menuitemcheckbox 语义 */
39
- multiple?: boolean;
40
- /** navigation 用途:含 href 叶子渲染原生 <a href>,结构去除 menu/menuitem role(原生链接语义) */
41
- navigation?: boolean;
42
- /** 浮层子菜单触发方式:'hover'(默认)随悬停开合 / 'click' 点击 title 切换 */
43
- trigger?: 'hover' | 'click';
44
- /** 浮层子菜单挂载容器(透传 floating action getContainer) */
45
- getPopupContainer?: (() => HTMLElement | null | undefined) | undefined;
46
- /** 整体禁用(来自父 Menu disabled):叠加单项 disabled */
47
- parentDisabled?: boolean;
48
- /** 浮层隐藏时是否卸载内容 DOM(默认 false:保留 DOM 仅隐藏,重显不重建) */
49
- destroyOnHide?: boolean;
50
- /**
51
- * 折叠模式下顶层项的 Tooltip 配置。content 默认为项 label;
52
- * position→placement、theme、mouseEnterDelay、mouseLeaveDelay 透传给 Tooltip。
53
- */
54
- tooltipProps?: TooltipProps;
55
- /**
56
- * 自定义每个叶子项内容的包裹 Snippet,接收 { item, children }。
57
- * children 为默认的 <a> 或 <button> 内容 snippet。
58
- */
59
- renderWrapper?: Snippet<[{ item: MenuItemNode; children: Snippet }]>;
60
- }
61
-
62
- let {
63
- item,
64
- placement,
65
- isSelected,
66
- onSelectLeaf,
67
- onCloseAll,
68
- openDelay = 100,
69
- closeDelay = 200,
70
- collapsed = false,
71
- multiple = false,
72
- navigation = false,
73
- trigger = 'hover',
74
- getPopupContainer,
75
- parentDisabled = false,
76
- destroyOnHide = false,
77
- tooltipProps,
78
- renderWrapper,
79
- }: Props = $props();
80
-
81
- // 分隔符/分组在模板顶层单独处理;此处统一窄化为普通项节点供后续派生使用。
82
- const node = $derived(item as MenuItemNode);
83
- // 折叠态无图标时取 label 首字符兜底显示,保证轨上仍有可视标识。
84
- const firstChar = $derived([...(node.label ?? '')][0] ?? '');
85
-
86
- const hasChildren = $derived(!!node.children && node.children.length > 0);
87
- // 整体 disabled(parentDisabled)叠加单项 disabled。
88
- const itemDisabled = $derived(parentDisabled || !!node.disabled);
89
-
90
- let titleEl = $state<HTMLButtonElement | null>(null);
91
- let open = $state(false);
92
-
93
- // destroyOnHide=false(默认)时浮层首开后保留 DOM 仅隐藏;true 时随 open 卸载/重建。
94
- let hasOpened = $state(false);
95
- $effect(() => {
96
- if (open) hasOpened = true;
97
- });
98
- // 浮层是否渲染:destroyOnHide=true 仅 open 时渲染;false 时首开后持续渲染(隐藏由 class 控制)。
99
- const shouldRenderSub = $derived(
100
- !!titleEl && (destroyOnHide ? open : open || hasOpened),
101
- );
102
-
103
- let openTimer: ReturnType<typeof setTimeout> | undefined;
104
- let closeTimer: ReturnType<typeof setTimeout> | undefined;
105
-
106
- function clearTimers() {
107
- if (openTimer !== undefined) {
108
- clearTimeout(openTimer);
109
- openTimer = undefined;
110
- }
111
- if (closeTimer !== undefined) {
112
- clearTimeout(closeTimer);
113
- closeTimer = undefined;
114
- }
115
- }
116
-
117
- function scheduleOpen() {
118
- if (trigger !== 'hover' || itemDisabled || !hasChildren) return;
119
- if (closeTimer !== undefined) {
120
- clearTimeout(closeTimer);
121
- closeTimer = undefined;
122
- }
123
- if (open) return;
124
- openTimer = setTimeout(() => {
125
- open = true;
126
- openTimer = undefined;
127
- }, openDelay);
128
- }
129
-
130
- function scheduleClose() {
131
- if (trigger !== 'hover') return;
132
- if (openTimer !== undefined) {
133
- clearTimeout(openTimer);
134
- openTimer = undefined;
135
- }
136
- if (!open) return;
137
- closeTimer = setTimeout(() => {
138
- open = false;
139
- closeTimer = undefined;
140
- }, closeDelay);
141
- }
142
-
143
- // 指针移入浮层 → 取消关闭计时,保持打开。
144
- function keepOpen() {
145
- if (closeTimer !== undefined) {
146
- clearTimeout(closeTimer);
147
- closeTimer = undefined;
148
- }
149
- }
150
-
151
- function closeNow() {
152
- clearTimers();
153
- open = false;
154
- }
155
-
156
- function onLeafClick() {
157
- if (itemDisabled) return;
158
- onSelectLeaf(node);
159
- onCloseAll();
160
- }
161
-
162
- // click 触发模式:点击 title 切换浮层开合(hover 模式下点击不接管)。
163
- function onTitleClick() {
164
- if (trigger !== 'click' || itemDisabled || !hasChildren) return;
165
- open = !open;
166
- }
167
-
168
- // 卸载兜底清理定时器。
169
- $effect(() => clearTimers);
170
- </script>
171
-
172
- {#if isDivider(item)}
173
- <li class="cd-menu__divider" role={navigation ? undefined : 'separator'}></li>
174
- {:else if isGroup(item)}
175
- <li class="cd-menu__item cd-menu__item--group" role={navigation ? undefined : 'none'}>
176
- {#if !collapsed}
177
- <div class="cd-menu__group-title">{item.label}</div>
178
- {/if}
179
- <ul class="cd-menu__group-list" role={navigation ? undefined : 'group'} aria-label={item.label}>
180
- {#each item.children as child, i (child.key ?? `__cd-menu-grp-${i}`)}
181
- <Self
182
- item={child}
183
- {placement}
184
- {collapsed}
185
- {isSelected}
186
- {multiple}
187
- {navigation}
188
- {trigger}
189
- {getPopupContainer}
190
- {parentDisabled}
191
- {destroyOnHide}
192
- {tooltipProps}
193
- {renderWrapper}
194
- {onSelectLeaf}
195
- {onCloseAll}
196
- {openDelay}
197
- {closeDelay}
198
- />
199
- {/each}
200
- </ul>
201
- </li>
202
- {:else if hasChildren}
203
- <li
204
- class="cd-menu__item cd-menu__item--submenu"
205
- role={navigation ? undefined : 'none'}
206
- onpointerenter={scheduleOpen}
207
- onpointerleave={scheduleClose}
208
- >
209
- {#snippet titleButton()}
210
- <button
211
- type="button"
212
- class="cd-menu__title"
213
- class:cd-menu__title--collapsed={collapsed}
214
- role={navigation ? undefined : 'menuitem'}
215
- aria-haspopup="true"
216
- aria-expanded={open}
217
- aria-disabled={itemDisabled || undefined}
218
- aria-label={collapsed ? node.label : undefined}
219
- disabled={itemDisabled || undefined}
220
- bind:this={titleEl}
221
- onclick={onTitleClick}
222
- onkeydown={(e) => {
223
- if (e.key === 'ArrowRight' || e.key === 'Enter' || e.key === ' ') {
224
- e.preventDefault();
225
- if (hasChildren && !itemDisabled) open = true;
226
- } else if (e.key === 'ArrowLeft' || e.key === 'Escape') {
227
- closeNow();
228
- }
229
- }}
230
- >
231
- {#if node.icon}<span class="cd-menu__icon" aria-hidden="true">{@render node.icon()}</span>{:else if collapsed}<span class="cd-menu__icon cd-menu__icon--char" aria-hidden="true">{firstChar}</span>{/if}
232
- {#if !collapsed}<span class="cd-menu__label">{node.label}</span>
233
- <span class="cd-menu__arrow cd-menu__arrow--popup" aria-hidden="true">
234
- <svg viewBox="0 0 16 16" width="10" height="10" focusable="false">
235
- <path fill="currentColor" d="M6 4l4 4-4 4V4Z" />
236
- </svg>
237
- </span>{/if}
238
- </button>
239
- {/snippet}
240
- {#if collapsed}
241
- <Tooltip
242
- content={tooltipProps?.content ?? node.label}
243
- placement={tooltipProps?.position ?? 'right'}
244
- theme={tooltipProps?.theme}
245
- mouseEnterDelay={tooltipProps?.mouseEnterDelay}
246
- mouseLeaveDelay={tooltipProps?.mouseLeaveDelay}
247
- >
248
- {@render titleButton()}
249
- </Tooltip>
250
- {:else}
251
- {@render titleButton()}
252
- {/if}
253
-
254
- {#if shouldRenderSub}
255
- <ul
256
- class="cd-menu__sub cd-menu__sub--popup"
257
- class:cd-menu__sub--hidden={!open}
258
- role={navigation ? undefined : 'menu'}
259
- aria-hidden={!open || undefined}
260
- use:floating={{ trigger: titleEl, placement, offset: 2, autoAdjust: true, getContainer: getPopupContainer, open }}
261
- onpointerenter={keepOpen}
262
- onpointerleave={scheduleClose}
263
- >
264
- {#each node.children ?? [] as child, i (child.key ?? `__cd-menu-sub-${i}`)}
265
- <Self
266
- item={child}
267
- placement="rightStart"
268
- {isSelected}
269
- {multiple}
270
- {navigation}
271
- {trigger}
272
- {getPopupContainer}
273
- {destroyOnHide}
274
- parentDisabled={parentDisabled}
275
- {onSelectLeaf}
276
- {renderWrapper}
277
- onCloseAll={() => {
278
- closeNow();
279
- onCloseAll();
280
- }}
281
- {openDelay}
282
- {closeDelay}
283
- />
284
- {/each}
285
- </ul>
286
- {/if}
287
- </li>
288
- {:else}
289
- {@const selected = isSelected(node.key)}
290
- <li class="cd-menu__item" role={navigation ? undefined : 'none'}>
291
- {#if navigation && node.href !== undefined}
292
- <!-- navigation 用途:含 href 叶子渲染原生 <a>,原生链接 + Tab 键序 -->
293
- {#snippet leafLink()}
294
- <a
295
- class="cd-menu__link"
296
- class:cd-menu__link--selected={selected}
297
- class:cd-menu__link--collapsed={collapsed}
298
- href={itemDisabled ? undefined : node.href}
299
- target={node.target}
300
- rel={node.rel}
301
- aria-current={selected ? 'page' : undefined}
302
- aria-disabled={itemDisabled || undefined}
303
- aria-label={collapsed ? node.label : undefined}
304
- onclick={onLeafClick}
305
- >
306
- {#if node.icon}<span class="cd-menu__icon" aria-hidden="true">{@render node.icon()}</span>{:else if collapsed}<span class="cd-menu__icon cd-menu__icon--char" aria-hidden="true">{firstChar}</span>{/if}
307
- {#if !collapsed}<span class="cd-menu__label">{node.label}</span>{/if}
308
- </a>
309
- {/snippet}
310
- {#if collapsed}
311
- <Tooltip
312
- content={tooltipProps?.content ?? node.label}
313
- placement={tooltipProps?.position ?? 'right'}
314
- theme={tooltipProps?.theme}
315
- mouseEnterDelay={tooltipProps?.mouseEnterDelay}
316
- mouseLeaveDelay={tooltipProps?.mouseLeaveDelay}
317
- >
318
- {#if renderWrapper}
319
- {@render renderWrapper({ item: node, children: leafLink })}
320
- {:else}
321
- {@render leafLink()}
322
- {/if}
323
- </Tooltip>
324
- {:else if renderWrapper}
325
- {@render renderWrapper({ item: node, children: leafLink })}
326
- {:else}
327
- {@render leafLink()}
328
- {/if}
329
- {:else}
330
- {#snippet leafButton()}
331
- <button
332
- type="button"
333
- class="cd-menu__link"
334
- class:cd-menu__link--selected={selected}
335
- class:cd-menu__link--collapsed={collapsed}
336
- role={navigation ? undefined : multiple ? 'menuitemcheckbox' : 'menuitem'}
337
- aria-current={!navigation && !multiple && selected ? 'true' : undefined}
338
- aria-checked={!navigation && multiple ? selected : undefined}
339
- aria-disabled={itemDisabled || undefined}
340
- aria-label={collapsed ? node.label : undefined}
341
- disabled={itemDisabled || undefined}
342
- onclick={onLeafClick}
343
- >
344
- {#if node.icon}<span class="cd-menu__icon" aria-hidden="true">{@render node.icon()}</span>{:else if collapsed}<span class="cd-menu__icon cd-menu__icon--char" aria-hidden="true">{firstChar}</span>{/if}
345
- {#if !collapsed}<span class="cd-menu__label">{node.label}</span>{/if}
346
- {#if multiple && !collapsed && !navigation}
347
- <span class="cd-menu__check" class:cd-menu__check--on={selected} aria-hidden="true">
348
- <svg viewBox="0 0 16 16" width="12" height="12" focusable="false">
349
- <path fill="none" stroke="currentColor" stroke-width="2" d="M3 8.5l3.5 3.5L13 5" />
350
- </svg>
351
- </span>
352
- {/if}
353
- </button>
354
- {/snippet}
355
- {#if collapsed}
356
- <Tooltip
357
- content={tooltipProps?.content ?? node.label}
358
- placement={tooltipProps?.position ?? 'right'}
359
- theme={tooltipProps?.theme}
360
- mouseEnterDelay={tooltipProps?.mouseEnterDelay}
361
- mouseLeaveDelay={tooltipProps?.mouseLeaveDelay}
362
- >
363
- {#if renderWrapper}
364
- {@render renderWrapper({ item: node, children: leafButton })}
365
- {:else}
366
- {@render leafButton()}
367
- {/if}
368
- </Tooltip>
369
- {:else if renderWrapper}
370
- {@render renderWrapper({ item: node, children: leafButton })}
371
- {:else}
372
- {@render leafButton()}
373
- {/if}
374
- {/if}
375
- </li>
376
- {/if}
377
-
378
- <style>
379
- .cd-menu__item {
380
- margin: 0;
381
- padding: 0;
382
- list-style: none;
383
- }
384
- /* 分隔符:水平细线,不可交互 */
385
- .cd-menu__divider {
386
- block-size: 1px;
387
- margin-block: var(--cd-spacing-1);
388
- background: var(--cd-menu-border-color, var(--cd-color-border));
389
- }
390
- /* 分组:始终展开的分区标题 + 组内项 */
391
- .cd-menu__group-list {
392
- margin: 0;
393
- padding: 0;
394
- list-style: none;
395
- }
396
- .cd-menu__group-title {
397
- display: flex;
398
- align-items: center;
399
- block-size: var(--cd-menu-item-height);
400
- padding-inline: var(--cd-menu-item-padding);
401
- color: var(--cd-menu-item-color-disabled);
402
- font-size: var(--cd-font-size-1);
403
- cursor: default;
404
- user-select: none;
405
- }
406
- .cd-menu__link,
407
- .cd-menu__title {
408
- display: flex;
409
- align-items: center;
410
- gap: var(--cd-spacing-2);
411
- inline-size: 100%;
412
- block-size: var(--cd-menu-item-height);
413
- padding-inline: var(--cd-menu-item-padding);
414
- border: none;
415
- background: transparent;
416
- color: var(--cd-menu-item-color);
417
- font: inherit;
418
- text-align: start;
419
- cursor: pointer;
420
- transition: background var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
421
- }
422
- /* navigation 叶子用 <a> 渲染:抹平默认下划线/颜色,复用 link 视觉 */
423
- a.cd-menu__link {
424
- text-decoration: none;
425
- }
426
- a.cd-menu__link[aria-disabled='true'] {
427
- color: var(--cd-menu-item-color-disabled);
428
- cursor: not-allowed;
429
- pointer-events: none;
430
- }
431
- .cd-menu__link:hover,
432
- .cd-menu__title:hover {
433
- background: var(--cd-menu-item-bg-hover);
434
- }
435
- .cd-menu__link:focus-visible,
436
- .cd-menu__title:focus-visible {
437
- outline: none;
438
- box-shadow: var(--cd-focus-ring);
439
- }
440
- .cd-menu__link--selected {
441
- position: relative;
442
- color: var(--cd-menu-item-color-selected);
443
- background: var(--cd-menu-item-bg-selected);
444
- }
445
- .cd-menu__link--selected::before {
446
- content: '';
447
- position: absolute;
448
- inset-block: 0;
449
- inset-inline-start: 0;
450
- inline-size: 3px;
451
- background: var(--cd-menu-item-indicator);
452
- }
453
- .cd-menu__link[aria-disabled='true'],
454
- .cd-menu__title[aria-disabled='true'] {
455
- color: var(--cd-menu-item-color-disabled);
456
- cursor: not-allowed;
457
- }
458
- .cd-menu__label {
459
- flex: 1 1 auto;
460
- overflow: hidden;
461
- white-space: nowrap;
462
- text-overflow: ellipsis;
463
- }
464
- .cd-menu__icon {
465
- display: inline-flex;
466
- align-items: center;
467
- justify-content: center;
468
- flex: 0 0 auto;
469
- inline-size: 1rem;
470
- block-size: 1rem;
471
- color: var(--cd-menu-item-color);
472
- }
473
- .cd-menu__icon--char {
474
- font-weight: 600;
475
- }
476
- /* 折叠图标轨:顶层项只显图标、居中、无文字与箭头 */
477
- .cd-menu__title--collapsed,
478
- .cd-menu__link--collapsed {
479
- justify-content: center;
480
- gap: 0;
481
- padding-inline: 0;
482
- }
483
- .cd-menu__check {
484
- display: inline-flex;
485
- align-items: center;
486
- justify-content: center;
487
- flex: 0 0 auto;
488
- inline-size: 1rem;
489
- block-size: 1rem;
490
- color: var(--cd-menu-item-color-selected);
491
- opacity: 0;
492
- }
493
- .cd-menu__check--on {
494
- opacity: 1;
495
- }
496
- .cd-menu__arrow {
497
- display: inline-flex;
498
- align-items: center;
499
- justify-content: center;
500
- flex: 0 0 auto;
501
- color: var(--cd-menu-submenu-arrow-color);
502
- }
503
- /* hover 浮层子菜单:脱离内联缩进,独立卡片 */
504
- .cd-menu__sub--popup {
505
- margin: 0;
506
- padding: 0;
507
- list-style: none;
508
- min-inline-size: 8rem;
509
- padding-block: var(--cd-spacing-1);
510
- background: var(--cd-menu-bg);
511
- border-radius: var(--cd-select-dropdown-radius, 6px);
512
- box-shadow: var(--cd-select-dropdown-shadow, 0 4px 12px rgba(0, 0, 0, 0.12));
513
- z-index: var(--cd-select-dropdown-z, 1050);
514
- }
515
- /* destroyOnHide=false 隐藏浮层时保留 DOM 但不可见、不可交互、不占位 */
516
- .cd-menu__sub--hidden {
517
- display: none;
518
- }
519
- @media (prefers-reduced-motion: reduce) {
520
- .cd-menu__link,
521
- .cd-menu__title {
522
- transition: none;
523
- }
524
- }
525
- </style>
package/src/menu/index.ts DELETED
@@ -1,4 +0,0 @@
1
- export { default as Menu } from './Menu.svelte';
2
- export { meta as menuMeta } from './meta.js';
3
- export type { MenuItemDef, MenuPurpose } from './types.js';
4
- export { deriveMenuSemantics } from './types.js';
package/src/menu/meta.ts DELETED
@@ -1,137 +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: 'Menu',
7
- category: 'navigation',
8
- description:
9
- '导航菜单,数据驱动。支持 vertical/inline/horizontal 模式、SubMenu 展开/收起、单选/多选高亮,受控/非受控。items 支持 type=divider 分隔符与 type=group 分组标题。purpose 区分命令式菜单(menu/menuitem 语义)与站点导航(nav landmark + 原生 <a> 链接语义)。',
10
- props: [
11
- {
12
- name: 'items',
13
- type: 'MenuItemDef[]',
14
- default: '[]',
15
- desc: '菜单数据。普通项可省略 type(含 children 即可展开的 SubMenu,item.icon 为项前图标 Snippet);{ type:"divider" } 渲染水平分隔线;{ type:"group", label, children } 渲染始终展开的分组标题 + 组内项。navigation 用途下叶子可带 href/target/rel,渲染为原生 <a>',
16
- },
17
- {
18
- name: 'mode',
19
- type: "'vertical'|'inline'|'horizontal'",
20
- default: 'vertical',
21
- desc: 'vertical=SubMenu hover 浮层;inline=内联展开;horizontal=顶部菜单栏 + ←→ roving',
22
- },
23
- {
24
- name: 'selectedKeys',
25
- type: '(string|number)[]',
26
- default: 'undefined',
27
- desc: '受控选中项(单选取首项)',
28
- },
29
- { name: 'defaultSelectedKeys', type: '(string|number)[]', default: '[]' },
30
- {
31
- name: 'openKeys',
32
- type: '(string|number)[]',
33
- default: 'undefined',
34
- desc: '受控展开的 SubMenu',
35
- },
36
- { name: 'defaultOpenKeys', type: '(string|number)[]', default: '[]' },
37
- { name: 'size', type: "'small'|'default'|'large'", default: 'default' },
38
- { name: 'inlineIndent', type: 'number', default: '24', desc: '子级缩进像素' },
39
- {
40
- name: 'inlineCollapsed',
41
- type: 'boolean',
42
- default: 'false',
43
- desc: 'inline 模式折叠为图标轨:仅显图标、容器变窄,有子菜单的项 hover 向右弹浮层(无图标项取 label 首字符;保留 aria-label/title 可访问名)',
44
- },
45
- {
46
- name: 'multiple',
47
- type: 'boolean',
48
- default: 'false',
49
- desc: '多选模式:点击叶子项 toggle 选中态,selectedKeys 可含多项同时高亮并显勾选标记。受控下父组件依据 onSelect(key) 自行 toggle selectedKeys;非受控由组件内部维护多选 Set',
50
- },
51
- {
52
- name: 'triggerSubMenuAction',
53
- type: "'hover'|'click'",
54
- default: 'hover',
55
- desc: '浮层子菜单触发方式(vertical/horizontal/collapsed 浮层模式生效):hover 悬停带 open/close 延迟开合;click 点击 title 切换。缺省按 mode 推导(默认 hover)',
56
- },
57
- { name: 'subMenuOpenDelay', type: 'number', default: '100', desc: 'hover 触发子菜单浮层展开延迟(ms)' },
58
- { name: 'subMenuCloseDelay', type: 'number', default: '100', desc: 'hover 触发子菜单浮层收起延迟(ms)' },
59
- {
60
- name: 'status',
61
- type: "'default'|'warning'|'error'",
62
- default: 'default',
63
- desc: '校验态(表单内菜单选择,少见):非 default 时加 cd-menu--{status} 类,以 token 着色选中指示条/文字,error 时根节点 aria-invalid=true',
64
- },
65
- {
66
- name: 'destroyOnHide',
67
- type: 'boolean',
68
- default: 'false',
69
- desc: '浮层子菜单隐藏时是否卸载内容 DOM;默认 false 首开后保留 DOM 仅隐藏,true 时随 open 卸载/重建。仅作用于 vertical/horizontal/collapsed 浮层子菜单',
70
- },
71
- {
72
- name: 'getPopupContainer',
73
- type: '() => HTMLElement',
74
- default: '() => document.body',
75
- desc: '浮层子菜单挂载容器(透传 floating action getContainer);非 body 时改 absolute 相对该容器定位',
76
- },
77
- { name: 'disabled', type: 'boolean', default: 'false', desc: '整体禁用:所有项不可交互(叠加单项 disabled)' },
78
- {
79
- name: 'purpose',
80
- type: "'menu'|'navigation'",
81
- default: 'menu',
82
- desc: "语义用途。'menu'(默认,向后兼容)=命令式菜单:role=menu/menuitem + roving tabindex,叶子 button+onClick。'navigation'=站点导航:<nav> landmark 包裹原生 list,含 href 的叶子渲染原生 <a href>(aria-current=page),沿用浏览器链接 + Tab 键序,不用 menuitem role。role 由 deriveMenuSemantics 纯函数据 purpose+mode+multiple 派生",
83
- },
84
- {
85
- name: 'onSelect',
86
- type: '(key: string|number) => void',
87
- default: 'undefined',
88
- desc: '点击叶子项回调,回传被点击的 key(多选语义不变,由父组件据此 toggle)',
89
- },
90
- {
91
- name: 'onOpenChange',
92
- type: '(keys: (string|number)[]) => void',
93
- default: 'undefined',
94
- },
95
- { name: 'ariaLabel', type: 'string', default: 'undefined' },
96
- {
97
- name: 'tooltipProps',
98
- type: '{ content?: string; position?: string; theme?: "dark"|"light"; mouseEnterDelay?: number; mouseLeaveDelay?: number }',
99
- default: 'undefined',
100
- desc: '折叠模式(inlineCollapsed=true)下顶层项的 Tooltip 配置。content 默认为项 label;position→placement 透传给 Tooltip。未提供时用原生 title 属性降级。',
101
- },
102
- {
103
- name: 'renderWrapper',
104
- type: 'Snippet<[{ item: MenuItemNode; children: Snippet }]>',
105
- default: 'undefined',
106
- desc: '自定义叶子项内容包裹 Snippet,接收 { item, children }。children 为默认的 <a> 或 <button>,可在外层加徽标/标签等装饰。inline/vertical/horizontal/collapsed 模式下均生效。',
107
- },
108
- ],
109
- a11y: {
110
- role: 'menu',
111
- keyboard: ['Tab', 'Enter', 'Space'],
112
- notes: [
113
- 'ul[role=menu] > li[role=none] > button[role=menuitem] 结构',
114
- 'SubMenu 标题 aria-haspopup=true + aria-expanded 反映展开态',
115
- '选中叶子项 aria-current=true(单选);multiple 下叶子项 role=menuitemcheckbox + aria-checked',
116
- '禁用项 aria-disabled=true 且原生 disabled',
117
- 'divider 渲染 li[role=separator],不可聚焦不可选;键盘导航天然跳过(非 menuitem)',
118
- 'group 渲染组标题(不可点击)+ ul[role=group][aria-label=分组名],组内项正常 menuitem 可选;组标题不可聚焦故键盘跳过',
119
- "purpose='navigation':<nav aria-label> landmark 包裹原生 ul>li>a(去除 menu/menuitem/separator/group 等 role),含 href 叶子为 <a href>,当前项 aria-current=page;用浏览器原生链接 + Tab 键序导航,不接管 ←→ roving",
120
- "purpose='menu'(默认):role=menu/menubar + menuitem,叶子 button + onClick,行为完全向后兼容;role 集合由 deriveMenuSemantics(purpose, mode, multiple) 纯函数派生(红线 #2)",
121
- ],
122
- },
123
- tokens: [
124
- '--cd-menu-bg',
125
- '--cd-menu-item-height',
126
- '--cd-menu-item-padding',
127
- '--cd-menu-item-color',
128
- '--cd-menu-item-color-selected',
129
- '--cd-menu-item-color-disabled',
130
- '--cd-menu-item-bg-hover',
131
- '--cd-menu-item-bg-selected',
132
- '--cd-menu-item-indicator',
133
- '--cd-menu-submenu-arrow-color',
134
- '--cd-focus-ring',
135
- '--cd-motion-*',
136
- ],
137
- } as const;