@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,573 +0,0 @@
1
- <!--
2
- Dropdown — see specs/components/navigation/Dropdown.spec.md
3
- 基础子集:click/hover/contextMenu 触发、12 方位、菜单项、useDismiss、closeOnSelect、键盘导航。
4
- 定位:portal 到 body + position:fixed,core computePosition + autoAdjustOverflow flip。
5
- contextMenu:右键 preventDefault + 记录光标 x/y,浮层 portal 到 body 并 fixed 落点光标。
6
- 嵌套子菜单 / divider / group:与 Menu 对齐的判别联合(types.ts),菜单体经 DropdownItemNode 递归渲染,
7
- 子浮层 hover/聚焦展开并 floating 到父项右侧(溢出翻转左侧);键盘 →/←/↑↓/Esc 逐层导航。
8
- 键盘 roving:焦点式(query 当前层可聚焦 menuitem 移动焦点),兼容嵌套与 divider/group。
9
- destroyOnClose:默认 false 时首开后保留浮层 DOM(仅 --hidden 显隐),true 时关闭即卸载 {#if},重开重建。
10
- getPopupContainer:自定义浮层挂载容器(默认 body);非 body 容器时 floating 切 position:absolute 相对容器定位,
11
- 嵌套子菜单经 ctx 透传同容器,contextMenu 浮层亦挂同容器。
12
- -->
13
- <script lang="ts">
14
- import { setContext, type Snippet } from 'svelte';
15
- import { useId, useDismiss, type Placement } from '@chenzy-design/core';
16
- import { useLocale } from '../locale-provider/index.js';
17
- import { getGlobalPopupContainer } from '../config-provider/index.js';
18
- import { floating } from '../_floating/use-floating.js';
19
- import DropdownItemNode from './DropdownItemNode.svelte';
20
- import { isDropdownDivider, isDropdownGroup } from './types.js';
21
- import { DROPDOWN_CTX, type DropdownContext } from './context.js';
22
- import type { DropdownItem } from './types.js';
23
-
24
- type ItemKey = string | number;
25
- type Trigger = 'hover' | 'click' | 'contextMenu';
26
- // 12 方位全集(兼容旧的 bottomStart/bottomEnd/topStart)
27
- type Position = Placement;
28
- type Size = 'small' | 'default' | 'large';
29
-
30
- interface Props {
31
- items?: DropdownItem[];
32
- trigger?: Trigger;
33
- open?: boolean;
34
- defaultOpen?: boolean;
35
- position?: Position;
36
- size?: Size;
37
- disabled?: boolean;
38
- closeOnSelect?: boolean;
39
- closeOnEsc?: boolean;
40
- mouseEnterDelay?: number;
41
- mouseLeaveDelay?: number;
42
- /**
43
- * 浮层与触发元素的间距(px)。数值映射到 floating 主轴 offset;
44
- * 传 { x, y } 时按当前 position 主轴方向取值(上下取 y、左右取 x)。默认 4。
45
- */
46
- spacing?: number | { x: number; y: number };
47
- /**
48
- * hover 模式下点击菜单项是否关闭浮层(默认 true)。
49
- * 设为 false 时 hover 触发下点击项不关闭,仅靠移出/Esc/外部点击收起。
50
- * 仅影响 hover 触发;click/contextMenu 触发的关闭仍由 closeOnSelect 决定。
51
- */
52
- clickToHide?: boolean;
53
- /** 浮层层级(z-index),默认 1050。写入浮层内联 style 覆盖 token 默认值。 */
54
- zIndex?: number;
55
- /**
56
- * 空间不足时自动翻转/移位到可视区(默认 true)。
57
- * 透传 floating action autoAdjust:false 时严格按 position 定位不翻转。
58
- */
59
- autoAdjustOverflow?: boolean;
60
- /** 关闭即卸载浮层内容({#if}),重开重建。默认 false:首开后保留 DOM 仅隐藏。 */
61
- destroyOnClose?: boolean;
62
- /**
63
- * 首次打开前不渲染浮层内容(默认 true:惰性渲染,首开才挂载)。
64
- * 设为 false 时即使从未打开也预渲染浮层 DOM(仅隐藏),可减少首开开销。
65
- */
66
- lazyRender?: boolean;
67
- /**
68
- * 关闭后保留浮层 DOM(与 destroyOnClose 互斥;为 true 时强制保留,忽略 destroyOnClose)。
69
- * 默认 false:保留策略由 destroyOnClose 决定。
70
- */
71
- keepDOM?: boolean;
72
- /** 浮层挂载容器,缺省 document.body。非 body 容器时改 absolute 定位相对该容器。 */
73
- getPopupContainer?: () => HTMLElement | null | undefined;
74
- /**
75
- * 已选中的 Item 右侧显示 ✓ 勾选标记(默认 false)。
76
- * 通过 context 透传给 DropdownItemNode 渲染。
77
- */
78
- showTick?: boolean;
79
- /**
80
- * 下拉动画开关(默认 true)。
81
- * false 时禁用菜单展开/收起过渡动画。
82
- */
83
- motion?: boolean;
84
- /**
85
- * 阻断下拉框内点击事件冒泡(默认 true)。
86
- * 包裹菜单的 onclick/pointerdown 停止冒泡,防止触发上层监听器。
87
- */
88
- stopPropagation?: boolean;
89
- onSelect?: (key: ItemKey) => void;
90
- onOpenChange?: (open: boolean) => void;
91
- triggerContent?: Snippet;
92
- children?: Snippet;
93
- }
94
-
95
- let {
96
- items = [],
97
- trigger = 'hover',
98
- open,
99
- defaultOpen = false,
100
- position = 'bottomStart',
101
- size = 'default',
102
- disabled = false,
103
- closeOnSelect = true,
104
- closeOnEsc = true,
105
- mouseEnterDelay = 150,
106
- mouseLeaveDelay = 150,
107
- spacing = 4,
108
- clickToHide = true,
109
- zIndex = 1050,
110
- autoAdjustOverflow = true,
111
- destroyOnClose = false,
112
- lazyRender = true,
113
- keepDOM = false,
114
- getPopupContainer,
115
- showTick = false,
116
- motion = true,
117
- stopPropagation = true,
118
- onSelect,
119
- onOpenChange,
120
- triggerContent,
121
- children,
122
- }: Props = $props();
123
-
124
- const loc = useLocale();
125
- // ConfigProvider 全局浮层容器默认;自身 getPopupContainer prop 优先,未传时回退此值(再回退 body)。
126
- const globalPopupContainer = getGlobalPopupContainer();
127
- // 合并后的容器解析器:prop 优先,否则全局默认;两处(context 共享 + portal)共用。
128
- const resolvePopupContainer = $derived(getPopupContainer ?? globalPopupContainer);
129
-
130
- const menuId = useId('cd-dropdown-menu');
131
- // 触发元素 id:菜单浮层 aria-labelledby 指向它,让 AT 用触发文案命名菜单(spec §6)。
132
- const triggerId = useId('cd-dropdown-trigger');
133
-
134
- // spacing → floating 主轴 offset:number 直用;{ x, y } 按 position 主轴方向取值
135
- // (top/bottom 系主轴是垂直取 y;left/right 系主轴是水平取 x)。
136
- const offset = $derived.by(() => {
137
- if (typeof spacing === 'number') return spacing;
138
- const horizontal = position.startsWith('left') || position.startsWith('right');
139
- return horizontal ? spacing.x : spacing.y;
140
- });
141
-
142
- // 子菜单浮层经此 context 共享同一挂载容器(getPopupContainer);
143
- // showTick 透传给叶子 DropdownItemNode 渲染勾选标记。
144
- setContext<DropdownContext>(DROPDOWN_CTX, {
145
- get getContainer() {
146
- return resolvePopupContainer;
147
- },
148
- get showTick() {
149
- return showTick;
150
- },
151
- });
152
-
153
- // --- 受控 open (红线 #1):不无条件回写 open,仅 onOpenChange ---
154
- const isControlled = $derived(open !== undefined);
155
- let innerOpen = $state(getInitialOpen());
156
- const isOpen = $derived(isControlled ? !!open : innerOpen);
157
-
158
- // --- 渲染策略:lazyRender 控制首开前是否预渲染;keepDOM/destroyOnClose 控制关闭后是否保留 ---
159
- // lazyRender=false 时即使从未打开也预渲染(仅隐藏)。
160
- // 关闭后保留:keepDOM=true 强制保留(忽略 destroyOnClose);否则 destroyOnClose=false 保留 / true 卸载。
161
- let hasBeenOpened = $state(false);
162
- $effect(() => {
163
- if (isOpen) hasBeenOpened = true;
164
- });
165
- // 关闭后是否保留 DOM:keepDOM 优先,否则取 !destroyOnClose。
166
- const retainOnClose = $derived(keepDOM || !destroyOnClose);
167
- const shouldRender = $derived(
168
- isOpen ||
169
- // 已开过且关闭后需保留
170
- (hasBeenOpened && retainOnClose) ||
171
- // 非惰性:从未打开也预渲染
172
- !lazyRender,
173
- );
174
-
175
- function getInitialOpen(): boolean {
176
- return defaultOpen;
177
- }
178
-
179
- function setOpen(next: boolean) {
180
- if (next === isOpen) return;
181
- if (!isControlled) innerOpen = next;
182
- onOpenChange?.(next);
183
- }
184
-
185
- function selectLeaf(key: ItemKey) {
186
- onSelect?.(key);
187
- // hover 模式下 clickToHide=false 时点击项不关闭浮层(仅靠移出/Esc/外部点击收起);
188
- // click/contextMenu 触发不受 clickToHide 影响,关闭仍由 closeOnSelect 决定。
189
- if (trigger === 'hover' && !clickToHide) return;
190
- if (closeOnSelect) setOpen(false);
191
- }
192
-
193
- // --- hover 延迟开关:setTimeout 存普通变量,cleanup 清除 ---
194
- let enterTimer: ReturnType<typeof setTimeout> | undefined;
195
- let leaveTimer: ReturnType<typeof setTimeout> | undefined;
196
-
197
- function clearTimers() {
198
- if (enterTimer !== undefined) {
199
- clearTimeout(enterTimer);
200
- enterTimer = undefined;
201
- }
202
- if (leaveTimer !== undefined) {
203
- clearTimeout(leaveTimer);
204
- leaveTimer = undefined;
205
- }
206
- }
207
-
208
- function onPointerEnter() {
209
- if (disabled || trigger !== 'hover') return;
210
- clearTimers();
211
- enterTimer = setTimeout(() => setOpen(true), mouseEnterDelay);
212
- }
213
-
214
- function onPointerLeave() {
215
- if (disabled || trigger !== 'hover') return;
216
- clearTimers();
217
- leaveTimer = setTimeout(() => setOpen(false), mouseLeaveDelay);
218
- }
219
-
220
- function onTriggerClick() {
221
- if (disabled || trigger !== 'click') return;
222
- setOpen(!isOpen);
223
- }
224
-
225
- // --- contextMenu 触发:右键弹菜单,菜单定位到鼠标光标处 ---
226
- // 鼠标坐标存普通 $state,仅用于浮层 fixed 定位(红线 #3:命令式监听 + cleanup)。
227
- let cursorX = $state(0);
228
- let cursorY = $state(0);
229
-
230
- function onContextMenu(e: MouseEvent) {
231
- if (disabled || trigger !== 'contextMenu') return;
232
- e.preventDefault();
233
- cursorX = e.clientX;
234
- cursorY = e.clientY;
235
- setOpen(true);
236
- }
237
-
238
- // 顶层菜单可聚焦项:本层直属(不含子浮层里的)未禁用 menuitem。
239
- function topMenuItems(): HTMLElement[] {
240
- if (!menuEl) return [];
241
- return [...menuEl.querySelectorAll<HTMLElement>('[role="menuitem"]')].filter(
242
- (el) => el.getAttribute('aria-disabled') !== 'true' && belongsToTopLevel(el),
243
- );
244
- }
245
-
246
- // 元素是否属于顶层菜单(不在任何子浮层 .cd-dropdown__sub 内)。
247
- function belongsToTopLevel(el: HTMLElement): boolean {
248
- return el.closest('.cd-dropdown__sub') === null;
249
- }
250
-
251
- function focusTopItem(delta: number) {
252
- const list = topMenuItems();
253
- if (list.length === 0) return;
254
- const cur = list.findIndex((el) => el === document.activeElement);
255
- let next: number;
256
- if (cur < 0) next = delta > 0 ? 0 : list.length - 1;
257
- else next = (cur + delta + list.length) % list.length;
258
- list[next]?.focus();
259
- }
260
-
261
- function onTriggerKeydown(e: KeyboardEvent) {
262
- if (disabled) return;
263
- switch (e.key) {
264
- case 'Enter':
265
- case ' ':
266
- e.preventDefault();
267
- if (!isOpen) {
268
- setOpen(true);
269
- focusFirstWhenReady();
270
- }
271
- break;
272
- case 'ArrowDown':
273
- e.preventDefault();
274
- if (!isOpen) {
275
- setOpen(true);
276
- focusFirstWhenReady();
277
- } else {
278
- focusTopItem(1);
279
- }
280
- break;
281
- case 'Escape':
282
- if (isOpen && closeOnEsc) {
283
- e.preventDefault();
284
- setOpen(false);
285
- }
286
- break;
287
- default:
288
- break;
289
- }
290
- }
291
-
292
- // 打开后浮层需在下一帧挂载完成才能聚焦首项。
293
- function focusFirstWhenReady() {
294
- requestAnimationFrame(() => {
295
- const list = topMenuItems();
296
- list[0]?.focus();
297
- });
298
- }
299
-
300
- function onMenuKeydown(e: KeyboardEvent) {
301
- if (!isOpen) return;
302
- switch (e.key) {
303
- case 'ArrowDown':
304
- e.preventDefault();
305
- focusTopItem(1);
306
- break;
307
- case 'ArrowUp':
308
- e.preventDefault();
309
- focusTopItem(-1);
310
- break;
311
- case 'Escape':
312
- if (closeOnEsc) {
313
- e.preventDefault();
314
- setOpen(false);
315
- }
316
- break;
317
- default:
318
- break;
319
- }
320
- }
321
-
322
- // --- DOM 引用:触发根 + portal 浮层菜单(定位由 use:floating action 接管)---
323
- let rootEl = $state<HTMLDivElement | null>(null);
324
- let menuEl = $state<HTMLUListElement | null>(null);
325
-
326
- // --- useDismiss (红线 #3):仅复用 Escape;outside-click 自管理。---
327
- // 子菜单浮层各自 portal 到 body(动态多层),无法逐一列入 extraTargets,
328
- // 故 outside 判定改为:点在触发根 / 顶层菜单 / 任意 .cd-dropdown__sub 浮层内即「内部」。
329
- $effect(() => {
330
- if (!isOpen || !rootEl) return;
331
- const cleanup = useDismiss(rootEl, {
332
- onDismiss: () => setOpen(false),
333
- escape: closeOnEsc,
334
- outsideClick: false,
335
- extraTargets: [menuEl],
336
- });
337
- return cleanup;
338
- });
339
-
340
- // outside-click 命令式监听 + cleanup(红线 #3):识别多层子浮层为内部。
341
- $effect(() => {
342
- if (!isOpen || !rootEl) return;
343
- const root = rootEl;
344
- function onPointerDown(e: PointerEvent) {
345
- const t = e.target as Node | null;
346
- if (root.contains(t)) return;
347
- if (menuEl && menuEl.contains(t)) return;
348
- if (t instanceof Element && t.closest('.cd-dropdown__sub')) return;
349
- setOpen(false);
350
- }
351
- document.addEventListener('pointerdown', onPointerDown, true);
352
- return () => document.removeEventListener('pointerdown', onPointerDown, true);
353
- });
354
-
355
- // contextMenu 浮层定位:portal 到 body + position:fixed 到光标 x/y。
356
- // floating action 只支持元素锚点,故 contextMenu 用此命令式 action 直接落点光标。
357
- function cursorFloating(node: HTMLElement, coords: { x: number; y: number }) {
358
- if (typeof document === 'undefined') {
359
- return { update() {}, destroy() {} };
360
- }
361
- // 自定义容器(getPopupContainer)时挂同容器并改 absolute 相对容器定位。
362
- const container = resolvePopupContainer?.() ?? document.body;
363
- const useAbsolute = container !== document.body;
364
- container.appendChild(node);
365
- node.style.position = useAbsolute ? 'absolute' : 'fixed';
366
- node.style.margin = '0';
367
-
368
- function place(x: number, y: number) {
369
- const rect = node.getBoundingClientRect();
370
- // 防止越出视口右/下边缘:超出则向左/上贴边。
371
- let left = Math.max(0, Math.min(x, window.innerWidth - rect.width));
372
- let top = Math.max(0, Math.min(y, window.innerHeight - rect.height));
373
- if (useAbsolute) {
374
- // 光标坐标是视口系;转为容器局部坐标(减容器盒原点 + 加容器滚动)。
375
- const cRect = container.getBoundingClientRect();
376
- left = left - cRect.left + container.scrollLeft;
377
- top = top - cRect.top + container.scrollTop;
378
- }
379
- node.style.insetInlineStart = `${Math.round(left)}px`;
380
- node.style.insetBlockStart = `${Math.round(top)}px`;
381
- }
382
-
383
- place(coords.x, coords.y);
384
- return {
385
- update(next: { x: number; y: number }) {
386
- place(next.x, next.y);
387
- },
388
- destroy() {
389
- node.remove();
390
- },
391
- };
392
- }
393
-
394
- // contextmenu 监听绑触发根,命令式 + cleanup(红线 #3)。
395
- $effect(() => {
396
- if (trigger !== 'contextMenu' || !rootEl) return;
397
- const el = rootEl;
398
- el.addEventListener('contextmenu', onContextMenu);
399
- return () => el.removeEventListener('contextmenu', onContextMenu);
400
- });
401
-
402
- $effect(() => clearTimers);
403
-
404
- // portal 后 menu 不在 root 子树内,hover 移到 menu 上需维持 open。
405
- function onMenuPointerEnter() {
406
- if (trigger !== 'hover') return;
407
- clearTimers();
408
- }
409
- function onMenuPointerLeave(e: PointerEvent) {
410
- if (trigger !== 'hover') return;
411
- // 指针移入子菜单浮层(portal 到 body,在顶层 ul 之外)时不关闭整体。
412
- const related = e.relatedTarget as Node | null;
413
- if (related instanceof Element && related.closest('.cd-dropdown__sub')) return;
414
- clearTimers();
415
- leaveTimer = setTimeout(() => setOpen(false), mouseLeaveDelay);
416
- }
417
-
418
- const cls = $derived(
419
- [
420
- 'cd-dropdown',
421
- `cd-dropdown--${size}`,
422
- disabled && 'cd-dropdown--disabled',
423
- isOpen && 'cd-dropdown--open',
424
- ]
425
- .filter(Boolean)
426
- .join(' '),
427
- );
428
-
429
- // stopPropagation:菜单内 click/pointerdown 停止冒泡(防触发上层监听器)。
430
- function onMenuEvent(e: Event) {
431
- if (stopPropagation) e.stopPropagation();
432
- }
433
- </script>
434
-
435
- <!-- svelte-ignore a11y_no_static_element_interactions -->
436
- <div
437
- class={cls}
438
- bind:this={rootEl}
439
- onpointerenter={onPointerEnter}
440
- onpointerleave={onPointerLeave}
441
- >
442
- <div
443
- class="cd-dropdown__trigger"
444
- id={triggerId}
445
- role="button"
446
- tabindex={disabled ? -1 : 0}
447
- aria-haspopup="menu"
448
- aria-expanded={isOpen}
449
- aria-controls={menuId}
450
- aria-disabled={disabled || undefined}
451
- onclick={onTriggerClick}
452
- onkeydown={onTriggerKeydown}
453
- >
454
- {#if triggerContent}
455
- {@render triggerContent()}
456
- {:else}
457
- <span class="cd-dropdown__trigger-default">{loc().t('Dropdown.trigger')}</span>
458
- {/if}
459
- </div>
460
-
461
- {#snippet menuBody()}
462
- {#if children}
463
- {@render children()}
464
- {:else}
465
- {#each items as item, i (isDropdownDivider(item) || isDropdownGroup(item) ? `__cd-dd-top-${i}` : item.key)}
466
- <DropdownItemNode
467
- {item}
468
- onSelectLeaf={selectLeaf}
469
- onCloseAll={() => {}}
470
- />
471
- {/each}
472
- {/if}
473
- {/snippet}
474
-
475
- {#if isOpen && trigger === 'contextMenu'}
476
- <!-- contextMenu:浮层 portal 到 body 并定位到光标 x/y -->
477
- <ul
478
- class="cd-dropdown__menu"
479
- class:cd-dropdown__menu--motion={motion}
480
- id={menuId}
481
- bind:this={menuEl}
482
- style="z-index: {zIndex}"
483
- use:cursorFloating={{ x: cursorX, y: cursorY }}
484
- role="menu"
485
- aria-labelledby={triggerId}
486
- tabindex="-1"
487
- onkeydown={onMenuKeydown}
488
- onclick={onMenuEvent}
489
- onpointerdown={onMenuEvent}
490
- >
491
- {@render menuBody()}
492
- </ul>
493
- {:else if shouldRender}
494
- <!-- destroyOnClose=false 时关闭仍保留 DOM(--hidden 隐藏),true 时 !isOpen 即被 {#if} 卸载。 -->
495
- <ul
496
- class="cd-dropdown__menu"
497
- class:cd-dropdown__menu--hidden={!isOpen}
498
- class:cd-dropdown__menu--motion={motion && isOpen}
499
- id={menuId}
500
- bind:this={menuEl}
501
- style="z-index: {zIndex}"
502
- use:floating={{ trigger: rootEl, placement: position, autoAdjust: autoAdjustOverflow, offset, getContainer: resolvePopupContainer, open: isOpen }}
503
- role="menu"
504
- aria-labelledby={triggerId}
505
- tabindex="-1"
506
- aria-hidden={!isOpen || undefined}
507
- onkeydown={onMenuKeydown}
508
- onpointerenter={onMenuPointerEnter}
509
- onpointerleave={onMenuPointerLeave}
510
- onclick={onMenuEvent}
511
- onpointerdown={onMenuEvent}
512
- >
513
- {@render menuBody()}
514
- </ul>
515
- {/if}
516
- </div>
517
-
518
- <style>
519
- .cd-dropdown {
520
- position: relative;
521
- display: inline-block;
522
- }
523
- .cd-dropdown__trigger {
524
- display: inline-flex;
525
- align-items: center;
526
- cursor: pointer;
527
- }
528
- .cd-dropdown__trigger:focus-visible {
529
- outline: none;
530
- box-shadow: var(--cd-focus-ring);
531
- border-radius: var(--cd-radius-1);
532
- }
533
- .cd-dropdown--disabled .cd-dropdown__trigger {
534
- color: var(--cd-color-text-3);
535
- cursor: not-allowed;
536
- }
537
- /* 浮层 portal 到 body,由 JS 写 position:fixed + transform 定位 */
538
- .cd-dropdown__menu {
539
- margin: 0;
540
- padding-block: var(--cd-spacing-1);
541
- padding-inline: 0;
542
- list-style: none;
543
- z-index: var(--cd-dropdown-z);
544
- min-inline-size: var(--cd-dropdown-min-width);
545
- background: var(--cd-dropdown-bg);
546
- border-radius: var(--cd-dropdown-radius);
547
- box-shadow: var(--cd-dropdown-shadow);
548
- }
549
- /* destroyOnClose=false 关闭后保留 DOM 但不可见、不可交互、不占位 */
550
- .cd-dropdown__menu--hidden {
551
- display: none;
552
- }
553
- /* motion:进场淡入 + 轻微下移;reduced-motion 退化 */
554
- .cd-dropdown__menu--motion {
555
- animation: cd-dropdown-in var(--cd-dropdown-motion-duration, 120ms)
556
- var(--cd-dropdown-motion-easing, ease) both;
557
- }
558
- @keyframes cd-dropdown-in {
559
- from {
560
- opacity: 0;
561
- transform: translateY(-4px);
562
- }
563
- to {
564
- opacity: 1;
565
- transform: translateY(0);
566
- }
567
- }
568
- @media (prefers-reduced-motion: reduce) {
569
- .cd-dropdown__menu--motion {
570
- animation: none;
571
- }
572
- }
573
- </style>
@@ -1,24 +0,0 @@
1
- <!--
2
- Dropdown a11y 测试夹具:在 LocaleProvider 内渲染 Dropdown,仅传 items(不传 children)。
3
- 说明:LocaleHarness 总会注入一个 children 插槽,会命中 Dropdown 的 {#if children}
4
- 分支而跳过 items 渲染,故这里直接包 LocaleProvider 渲染、不经 harness。
5
- 仅供 Dropdown.a11y.test.ts 使用,不对外导出。
6
- -->
7
- <script lang="ts">
8
- import type { DropdownItem } from './types.js';
9
- import { LocaleProvider } from '../locale-provider/index.js';
10
- import Dropdown from './Dropdown.svelte';
11
-
12
- interface Props {
13
- items?: DropdownItem[];
14
- open?: boolean;
15
- trigger?: 'hover' | 'click' | 'contextMenu';
16
- locale?: string;
17
- }
18
-
19
- let { items = [], open = false, trigger = 'click', locale = 'en_US' }: Props = $props();
20
- </script>
21
-
22
- <LocaleProvider {locale}>
23
- <Dropdown {items} {open} {trigger} />
24
- </LocaleProvider>
@@ -1,17 +0,0 @@
1
- <!--
2
- Dropdown.Divider — 菜单项之间的水平分隔线(role=separator)。
3
- 对应 items 数据驱动模式中 type='divider' 的项。
4
- -->
5
- <script lang="ts">
6
- // 无 props,仅渲染分隔线。
7
- </script>
8
-
9
- <li class="cd-dropdown__divider" role="separator"></li>
10
-
11
- <style>
12
- .cd-dropdown__divider {
13
- block-size: 1px;
14
- margin-block: var(--cd-spacing-1);
15
- background: var(--cd-color-border);
16
- }
17
- </style>