@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,659 +0,0 @@
1
- <!--
2
- SideSheet — 侧边滑出浮层。see specs/components/feedback/SideSheet.spec.md
3
- 从视口四边(left/right/top/bottom)滑入的浮层容器,承载次要任务流/详情/筛选/表单。
4
- 与 Modal 同构复用浮层基建:portal 到 body(或 getContainer)脱离父层叠上下文,
5
- role=dialog(mask 时 aria-modal),useFocusTrap 焦点捕获+归还(仅 mask)、
6
- useDismiss Esc 关闭、mask 时 useScrollLock 锁背景滚动,
7
- 堆叠 z-index 复用 modal/z-stack 模块级计数器(与 Modal 统一层栈,后开者在上)。
8
- 滑入过渡:CSS transform/opacity(token 时长缓动),reduced-motion / motionDisabled 退化为即时显隐。
9
- 受控 open(红线 #1):不回写 open,仅经 onOpenChange({open, reason}) 通知。
10
- mask=true 模态:遮罩 + focus trap + scroll lock;mask=false 非模态:无遮罩、不锁滚动、
11
- 不抢焦点(不启用 focus trap),outsideClosable 时点击外部关闭。
12
- lazyMount:首开前惰性挂载;destroyOnClose:关闭即卸载内容(出场过渡结束后),重开重建。
13
- -->
14
- <script lang="ts">
15
- import type { Snippet } from 'svelte';
16
- import {
17
- useId,
18
- useFocusTrap,
19
- useDismiss,
20
- useScrollLock,
21
- useInertBackground,
22
- } from '@chenzy-design/core';
23
- import { useLocale } from '../locale-provider/index.js';
24
- import { acquireZIndex } from '../modal/z-stack.js';
25
-
26
- type Placement = 'left' | 'right' | 'top' | 'bottom';
27
- type Size = 'small' | 'default' | 'large';
28
- type Reason = 'esc' | 'mask' | 'outside' | 'closeButton' | 'programmatic';
29
-
30
- interface Props {
31
- open?: boolean;
32
- placement?: Placement;
33
- size?: Size;
34
- width?: number | string;
35
- height?: number | string;
36
- title?: string;
37
- /** 自定义标题区,覆盖 title prop。 */
38
- titleSnippet?: Snippet;
39
- /** Header 右侧额外操作(关闭按钮之前)。 */
40
- headerExtra?: Snippet;
41
- /** 自定义关闭图标。 */
42
- closeIcon?: Snippet;
43
- mask?: boolean;
44
- maskClosable?: boolean;
45
- /** mask=false 时点击面板外部是否关闭。默认 false。 */
46
- outsideClosable?: boolean;
47
- closeOnEsc?: boolean;
48
- closable?: boolean;
49
- /** 首次打开前是否惰性挂载内容。默认 true。 */
50
- lazyMount?: boolean;
51
- /** keepDOM=false 等价于 lazyMount=true 的反义(保留 DOM)。lazyMount 优先。 */
52
- keepDOM?: boolean;
53
- /** 关闭后是否销毁内部内容(释放资源)。默认 false。 */
54
- destroyOnClose?: boolean;
55
- /** Portal 挂载容器,缺省 document.body。 */
56
- getContainer?: () => HTMLElement | null;
57
- zIndex?: number;
58
- /** 强制不锁背景滚动(即便 mask=true)。 */
59
- disableScrollLock?: boolean;
60
- /** 打开时给 body 加 overflow:hidden 防背景滚动。默认 true。false 等价于 disableScrollLock=true。 */
61
- disableScroll?: boolean;
62
- /** 关闭后焦点返回目标,缺省为打开时的触发元素。 */
63
- returnFocusTo?: HTMLElement | (() => HTMLElement | null) | null;
64
- /** 关闭进出动效(独立于 reduced-motion)。 */
65
- motionDisabled?: boolean;
66
- /** 是否启用动画过渡。false 等价于 motionDisabled=true。默认 true。 */
67
- motion?: boolean;
68
- /** Header 区域 style 字符串。 */
69
- headerStyle?: string;
70
- /** 内容区域 style 字符串。 */
71
- bodyStyle?: string;
72
- /** 遮罩 style 字符串。 */
73
- maskStyle?: string;
74
- /** Footer 操作区;提供 close() 以便按钮关闭面板。未提供不渲染。 */
75
- footer?: Snippet<[{ close: () => void }]> | null;
76
- children?: Snippet;
77
- /** 无可见标题时的 aria-label 兜底。 */
78
- ariaLabel?: string;
79
- class?: string;
80
- bodyClass?: string;
81
- maskClass?: string;
82
- /** 显隐意图变化(受控,需外部回写 open)。 */
83
- onOpenChange?: (e: { open: boolean; reason: Reason }) => void;
84
- /** 进入动效结束、内容完全可见后触发。 */
85
- onAfterOpen?: () => void;
86
- /** 退出动效结束、DOM 卸载(如适用)后触发。 */
87
- onAfterClose?: () => void;
88
- /** 动画结束后(入场或出场)触发,isVisible 为当前可见状态。 */
89
- afterVisibleChange?: (isVisible: boolean) => void;
90
- /** 用户主动取消(Esc/遮罩/外部/关闭按钮)的语义快捷事件。 */
91
- onCancel?: (e: { reason: Reason }) => void;
92
- }
93
-
94
- let {
95
- open,
96
- placement = 'right',
97
- size = 'default',
98
- width,
99
- height,
100
- title,
101
- titleSnippet,
102
- headerExtra,
103
- closeIcon,
104
- mask = true,
105
- maskClosable = true,
106
- outsideClosable = false,
107
- closeOnEsc = true,
108
- closable = true,
109
- lazyMount = true,
110
- keepDOM,
111
- destroyOnClose = false,
112
- getContainer,
113
- zIndex,
114
- disableScrollLock = false,
115
- disableScroll = true,
116
- returnFocusTo,
117
- motionDisabled = false,
118
- motion = true,
119
- headerStyle,
120
- bodyStyle,
121
- maskStyle,
122
- footer,
123
- children,
124
- ariaLabel,
125
- class: className,
126
- bodyClass,
127
- maskClass,
128
- onOpenChange,
129
- onAfterOpen,
130
- onAfterClose,
131
- afterVisibleChange,
132
- onCancel,
133
- }: Props = $props();
134
-
135
- const loc = useLocale();
136
- const titleId = useId('cd-sidesheet-title');
137
-
138
- // --- 受控 open (红线 #1):不无条件回写 open,仅经 onOpenChange/onCancel 通知 ---
139
- const isControlled = $derived(open !== undefined);
140
- let innerOpen = $state(false);
141
- const isOpen = $derived(isControlled ? !!open : innerOpen);
142
-
143
- const hasTitle = $derived(Boolean(titleSnippet) || Boolean(title));
144
- const isHorizontal = $derived(placement === 'left' || placement === 'right');
145
-
146
- const panelCls = $derived(
147
- ['cd-sidesheet__panel', `cd-sidesheet__panel--${placement}`, className]
148
- .filter(Boolean)
149
- .join(' '),
150
- );
151
-
152
- // --- 尺寸解析 (红线 #2 纯函数派生):width/height 显式优先于 size 预设 token ---
153
- const sizeToken = $derived(
154
- size === 'small'
155
- ? isHorizontal
156
- ? 'var(--cd-sidesheet-width-small)'
157
- : 'var(--cd-sidesheet-height-small)'
158
- : size === 'large'
159
- ? isHorizontal
160
- ? 'var(--cd-sidesheet-width-large)'
161
- : 'var(--cd-sidesheet-height-large)'
162
- : isHorizontal
163
- ? 'var(--cd-sidesheet-width)'
164
- : 'var(--cd-sidesheet-height)',
165
- );
166
-
167
- const explicit = $derived(isHorizontal ? width : height);
168
-
169
- const sizeValue = $derived(
170
- explicit === undefined
171
- ? sizeToken
172
- : typeof explicit === 'number'
173
- ? `${explicit}px`
174
- : explicit,
175
- );
176
-
177
- const panelStyle = $derived(
178
- isHorizontal ? `inline-size: ${sizeValue}` : `block-size: ${sizeValue}`,
179
- );
180
-
181
- let rootEl = $state<HTMLElement | null>(null);
182
-
183
- // 出场过渡时长:从 CSS 读取 token(reduced-motion 下为 0);motionDisabled/motion=false 强制 0。
184
- function motionDurationMs(): number {
185
- if (motionDisabled || !motion) return 0;
186
- if (typeof window === 'undefined' || !rootEl) return 0;
187
- const raw = getComputedStyle(rootEl)
188
- .getPropertyValue('--cd-sidesheet-motion-duration')
189
- .trim();
190
- if (!raw) return 0;
191
- if (raw.endsWith('ms')) return parseFloat(raw) || 0;
192
- if (raw.endsWith('s')) return (parseFloat(raw) || 0) * 1000;
193
- return parseFloat(raw) || 0;
194
- }
195
-
196
- // --- lazyMount / destroyOnClose / 出场过渡 ---
197
- // lazyMount=true(默认):首开前不挂载;keepDOM=true 显式禁用惰性。
198
- const lazy = $derived(keepDOM === true ? false : lazyMount);
199
- let hasBeenOpened = $state(false);
200
- let exiting = $state(false);
201
- let entered = $state(false);
202
-
203
- // 单一 open 边沿副作用 (红线 #3):仅依赖 isOpen,内部不读所写状态(hasBeenOpened/
204
- // entered/exiting 只写不在依赖图触发自身重入),避免重入循环。
205
- // entered 驱动 --open,入场下一帧置 true 触发位移过渡;动效时长从 CSS 读取(非响应式)。
206
- $effect(() => {
207
- const opening = isOpen;
208
- let raf = 0;
209
- let closeTimer: ReturnType<typeof setTimeout> | undefined;
210
- let openTimer: ReturnType<typeof setTimeout> | undefined;
211
- if (opening) {
212
- hasBeenOpened = true;
213
- exiting = false;
214
- if (motionDisabled || !motion) {
215
- entered = true;
216
- onAfterOpen?.();
217
- afterVisibleChange?.(true);
218
- } else {
219
- // 下一帧再切到开启态,确保起始(贴边收起)态先绘制再过渡。
220
- // motionDurationMs() 读 rootEl,必须在 raf 回调(非响应式作用域)内调用,
221
- // 否则 open 分支把 rootEl 纳入依赖、与挂载形成回环(effect_update_depth_exceeded)。
222
- raf = requestAnimationFrame(() => {
223
- raf = requestAnimationFrame(() => {
224
- entered = true;
225
- const ms = motionDurationMs();
226
- openTimer = setTimeout(() => {
227
- onAfterOpen?.();
228
- afterVisibleChange?.(true);
229
- }, ms);
230
- });
231
- });
232
- }
233
- } else {
234
- entered = false;
235
- if (hasBeenOpened) {
236
- const ms = (motionDisabled || !motion) ? 0 : motionDurationMs();
237
- closeTimer = setTimeout(() => {
238
- if (destroyOnClose) hasBeenOpened = false;
239
- exiting = false;
240
- onAfterClose?.();
241
- afterVisibleChange?.(false);
242
- }, ms);
243
- if (destroyOnClose) exiting = true;
244
- }
245
- }
246
- return () => {
247
- if (raf) cancelAnimationFrame(raf);
248
- if (closeTimer) clearTimeout(closeTimer);
249
- if (openTimer) clearTimeout(openTimer);
250
- };
251
- });
252
-
253
- // 渲染条件:lazy 且从未打开 → 不渲染(关闭态零成本);
254
- // destroyOnClose → 仅开/出场期间;否则首开后常驻(仅切换显隐)。
255
- const shouldRender = $derived(
256
- destroyOnClose
257
- ? isOpen || exiting
258
- : lazy
259
- ? isOpen || hasBeenOpened
260
- : true,
261
- );
262
-
263
- function emitClose(reason: Reason) {
264
- if (!isControlled) innerOpen = false;
265
- onOpenChange?.({ open: false, reason });
266
- if (reason !== 'programmatic') onCancel?.({ reason });
267
- }
268
-
269
- // footer snippet 暴露的 close():语义为程序化关闭。
270
- function close() {
271
- emitClose('programmatic');
272
- }
273
-
274
- function onMaskClick(e: MouseEvent) {
275
- if (mask && maskClosable && e.target === e.currentTarget) {
276
- emitClose('mask');
277
- }
278
- }
279
-
280
- // --- 浮层命令式编排 (红线 #3):open 且面板就绪时,
281
- // mask 时 activate focus-trap(捕获/归还焦点)、加 scroll-lock;
282
- // 绑 dismiss(Esc + 非模态外部点击);cleanup 里逐一释放。 ---
283
- let panelEl = $state<HTMLElement | null>(null);
284
- let triggerEl: HTMLElement | null = null;
285
-
286
- function resolveReturnFocus(): HTMLElement | null {
287
- if (typeof returnFocusTo === 'function') return returnFocusTo();
288
- if (returnFocusTo) return returnFocusTo;
289
- return triggerEl;
290
- }
291
-
292
- $effect(() => {
293
- if (!isOpen || !panelEl) return;
294
- const el = panelEl;
295
-
296
- // 记录触发元素以便关闭归还焦点(mask=false 不抢焦点,故仅 mask 时记录)。
297
- triggerEl =
298
- typeof document !== 'undefined'
299
- ? (document.activeElement as HTMLElement | null)
300
- : null;
301
-
302
- // focus trap 仅 mask=true 启用;mask=false 允许焦点离开(非模态)。
303
- const trap = mask ? useFocusTrap(el) : null;
304
- trap?.activate();
305
-
306
- // scroll lock 仅 mask=true 且未 disableScrollLock,且 disableScroll=true(默认)。
307
- const releaseScroll = (mask && !disableScrollLock && disableScroll) ? useScrollLock() : () => {};
308
-
309
- // 模态(mask=true)时背景内容对 SR/键盘 inert+aria-hidden(spec §6);
310
- // 以 portal 根 rootEl 为锚隐藏其兄弟。非模态不抢占背景,跳过。
311
- const releaseInert = mask && rootEl ? useInertBackground(rootEl) : () => {};
312
-
313
- // dismiss:Esc(closeOnEsc)+ 非模态外部点击(outsideClosable)。
314
- const wantOutside = !mask && outsideClosable;
315
- let undismiss = () => {};
316
- if (closeOnEsc || wantOutside) {
317
- undismiss = useDismiss(el, {
318
- onDismiss: (r) => emitClose(r === 'esc' ? 'esc' : 'outside'),
319
- escape: closeOnEsc,
320
- outsideClick: wantOutside,
321
- });
322
- }
323
-
324
- return () => {
325
- undismiss();
326
- releaseInert();
327
- releaseScroll();
328
- if (trap) {
329
- // 归还焦点:默认触发元素 / returnFocusTo。trap.deactivate 默认归还到
330
- // 记录的 previouslyFocused(即触发元素);若显式指定 returnFocusTo 则覆盖。
331
- trap.deactivate();
332
- const target = resolveReturnFocus();
333
- if (target && target !== triggerEl) target.focus();
334
- }
335
- triggerEl = null;
336
- };
337
- });
338
-
339
- // disableScroll:mask=false 时 useScrollLock 不生效,手动给 body 加 overflow:hidden。
340
- $effect(() => {
341
- if (!isOpen || !disableScroll || mask || typeof document === 'undefined') return;
342
- const prev = document.body.style.overflow;
343
- document.body.style.overflow = 'hidden';
344
- return () => {
345
- document.body.style.overflow = prev;
346
- };
347
- });
348
-
349
- // --- 堆叠 z-index (红线 #3):每次打开向 modal/z-stack 计数器申请一层,关闭回收。
350
- // 与 Modal、命令式 modal.confirm 共享同一计数器,多层叠放后开者在上。
351
- // zIndex prop 作为 CSS var 基准(栈内自动递增叠加)。 ---
352
- let stackZ = $state<number | undefined>(undefined);
353
-
354
- $effect(() => {
355
- if (!isOpen) return;
356
- const { zIndex: z, release } = acquireZIndex();
357
- stackZ = z;
358
- return () => {
359
- stackZ = undefined;
360
- release();
361
- };
362
- });
363
-
364
- const rootStyle = $derived(
365
- [
366
- stackZ !== undefined ? `--cd-sidesheet-z:${stackZ}` : undefined,
367
- zIndex !== undefined && stackZ === undefined
368
- ? `--cd-sidesheet-z:${zIndex}`
369
- : undefined,
370
- ]
371
- .filter(Boolean)
372
- .join('; ') || undefined,
373
- );
374
-
375
- // --- portal action (红线 #3):命令式 appendChild 到 getContainer()/body,
376
- // 脱离父 DOM 层叠上下文;destroy 时 removeChild 归还/清理。 ---
377
- function portal(node: HTMLElement) {
378
- if (typeof document === 'undefined') {
379
- return { destroy() {} };
380
- }
381
- const target = getContainer?.() ?? document.body;
382
- target.appendChild(node);
383
- return {
384
- destroy() {
385
- if (node.parentNode) node.parentNode.removeChild(node);
386
- },
387
- };
388
- }
389
-
390
- const bodyCls = $derived(
391
- ['cd-sidesheet__body', bodyClass].filter(Boolean).join(' '),
392
- );
393
- const maskCls = $derived(
394
- ['cd-sidesheet__mask', maskClass].filter(Boolean).join(' '),
395
- );
396
- </script>
397
-
398
- {#if shouldRender}
399
- <!-- use:portal 命令式挂载到 getContainer()/body,脱离父层叠上下文。
400
- cd-sidesheet--open 由 isOpen && entered 驱动 transform/opacity 过渡。 -->
401
- <div
402
- bind:this={rootEl}
403
- class="cd-sidesheet cd-sidesheet--{placement}"
404
- class:cd-sidesheet--open={isOpen && entered}
405
- class:cd-sidesheet--no-mask={!mask}
406
- class:cd-sidesheet--no-motion={motionDisabled || !motion}
407
- style={rootStyle}
408
- use:portal
409
- >
410
- {#if mask}
411
- <!-- 遮罩 role=presentation:点击关闭为鼠标增强,键盘等价为 Esc -->
412
- <div class={maskCls} style={maskStyle} onclick={onMaskClick} role="presentation"></div>
413
- {/if}
414
- <div
415
- class={panelCls}
416
- bind:this={panelEl}
417
- role="dialog"
418
- aria-modal={mask ? 'true' : undefined}
419
- aria-labelledby={hasTitle ? titleId : undefined}
420
- aria-label={hasTitle ? undefined : ariaLabel}
421
- style={panelStyle}
422
- >
423
- {#if hasTitle || closable || headerExtra}
424
- <header class="cd-sidesheet__header" style={headerStyle}>
425
- {#if hasTitle}
426
- <h2 id={titleId} class="cd-sidesheet__title">
427
- {#if titleSnippet}
428
- {@render titleSnippet()}
429
- {:else}
430
- {title}
431
- {/if}
432
- </h2>
433
- {:else}
434
- <span></span>
435
- {/if}
436
- <div class="cd-sidesheet__header-actions">
437
- {#if headerExtra}
438
- {@render headerExtra()}
439
- {/if}
440
- {#if closable}
441
- <button
442
- type="button"
443
- class="cd-sidesheet__close"
444
- aria-label={loc().t('SideSheet.closeAriaLabel')}
445
- onclick={() => emitClose('closeButton')}
446
- >
447
- {#if closeIcon}
448
- {@render closeIcon()}
449
- {:else}
450
- <svg
451
- width="16"
452
- height="16"
453
- viewBox="0 0 16 16"
454
- fill="none"
455
- aria-hidden="true"
456
- >
457
- <path
458
- d="M3 3l10 10M13 3L3 13"
459
- stroke="currentColor"
460
- stroke-width="1.5"
461
- stroke-linecap="round"
462
- />
463
- </svg>
464
- {/if}
465
- </button>
466
- {/if}
467
- </div>
468
- </header>
469
- {/if}
470
-
471
- <div class={bodyCls} style={bodyStyle}>
472
- {@render children?.()}
473
- </div>
474
-
475
- {#if footer}
476
- <footer class="cd-sidesheet__footer">
477
- {@render footer({ close })}
478
- </footer>
479
- {/if}
480
- </div>
481
- </div>
482
- {/if}
483
-
484
- <style>
485
- .cd-sidesheet {
486
- position: fixed;
487
- inset: 0;
488
- z-index: var(--cd-sidesheet-z);
489
- }
490
- /* mask=false 时容器不拦截指针,仅面板可交互(协作式非模态) */
491
- .cd-sidesheet--no-mask {
492
- pointer-events: none;
493
- }
494
- .cd-sidesheet--no-mask .cd-sidesheet__panel {
495
- pointer-events: auto;
496
- }
497
- .cd-sidesheet__mask {
498
- position: absolute;
499
- inset: 0;
500
- background: var(--cd-sidesheet-mask-bg);
501
- pointer-events: auto;
502
- opacity: 0;
503
- transition: opacity var(--cd-sidesheet-motion-duration)
504
- var(--cd-motion-ease-standard, ease);
505
- }
506
- .cd-sidesheet--open .cd-sidesheet__mask {
507
- opacity: 1;
508
- }
509
- .cd-sidesheet__panel {
510
- position: absolute;
511
- box-sizing: border-box;
512
- display: flex;
513
- flex-direction: column;
514
- overflow: hidden;
515
- background: var(--cd-sidesheet-bg);
516
- color: var(--cd-sidesheet-color);
517
- box-shadow: var(--cd-sidesheet-shadow);
518
- transition:
519
- transform var(--cd-sidesheet-motion-duration)
520
- var(--cd-motion-ease-standard, ease),
521
- opacity var(--cd-sidesheet-motion-duration)
522
- var(--cd-motion-ease-standard, ease);
523
- will-change: transform, opacity;
524
- opacity: 0;
525
- }
526
- /* 朝向内容侧圆角:仅贴边对侧 */
527
- .cd-sidesheet__panel--right {
528
- inset-block: 0;
529
- inset-inline-end: 0;
530
- block-size: 100%;
531
- max-inline-size: 100vw;
532
- transform: translateX(100%);
533
- border-start-start-radius: var(--cd-sidesheet-radius);
534
- border-end-start-radius: var(--cd-sidesheet-radius);
535
- }
536
- .cd-sidesheet__panel--left {
537
- inset-block: 0;
538
- inset-inline-start: 0;
539
- block-size: 100%;
540
- max-inline-size: 100vw;
541
- transform: translateX(-100%);
542
- border-start-end-radius: var(--cd-sidesheet-radius);
543
- border-end-end-radius: var(--cd-sidesheet-radius);
544
- }
545
- .cd-sidesheet__panel--top {
546
- inset-inline: 0;
547
- inset-block-start: 0;
548
- inline-size: 100%;
549
- max-block-size: 100vh;
550
- transform: translateY(-100%);
551
- border-end-start-radius: var(--cd-sidesheet-radius);
552
- border-end-end-radius: var(--cd-sidesheet-radius);
553
- }
554
- .cd-sidesheet__panel--bottom {
555
- inset-inline: 0;
556
- inset-block-end: 0;
557
- inline-size: 100%;
558
- max-block-size: 100vh;
559
- transform: translateY(100%);
560
- border-start-start-radius: var(--cd-sidesheet-radius);
561
- border-start-end-radius: var(--cd-sidesheet-radius);
562
- }
563
- /* RTL:left/right 贴边随书写方向镜像,translateX 方向需翻转 */
564
- :global([dir='rtl']) .cd-sidesheet__panel--right {
565
- transform: translateX(-100%);
566
- }
567
- :global([dir='rtl']) .cd-sidesheet__panel--left {
568
- transform: translateX(100%);
569
- }
570
- .cd-sidesheet--open .cd-sidesheet__panel {
571
- transform: translateX(0) translateY(0);
572
- opacity: 1;
573
- }
574
- /* 窄视口近铺满 */
575
- @media (max-width: 480px) {
576
- .cd-sidesheet__panel--left,
577
- .cd-sidesheet__panel--right {
578
- inline-size: 100vw !important;
579
- }
580
- .cd-sidesheet__panel--top,
581
- .cd-sidesheet__panel--bottom {
582
- block-size: 100vh !important;
583
- }
584
- }
585
- .cd-sidesheet__header {
586
- display: flex;
587
- align-items: center;
588
- justify-content: space-between;
589
- gap: var(--cd-spacing-3, 12px);
590
- padding: var(--cd-sidesheet-header-padding);
591
- border-block-end: 1px solid var(--cd-sidesheet-border);
592
- }
593
- .cd-sidesheet__title {
594
- margin: 0;
595
- overflow: hidden;
596
- color: var(--cd-sidesheet-title-color);
597
- font-size: var(--cd-sidesheet-title-size);
598
- font-weight: 600;
599
- line-height: 1.4;
600
- text-overflow: ellipsis;
601
- white-space: nowrap;
602
- }
603
- .cd-sidesheet__header-actions {
604
- display: inline-flex;
605
- flex-shrink: 0;
606
- align-items: center;
607
- gap: var(--cd-spacing-2, 8px);
608
- }
609
- .cd-sidesheet__close {
610
- display: inline-flex;
611
- align-items: center;
612
- justify-content: center;
613
- inline-size: 28px;
614
- block-size: 28px;
615
- padding: 0;
616
- border: none;
617
- border-radius: var(--cd-radius-2, 4px);
618
- background: transparent;
619
- color: var(--cd-sidesheet-close-color);
620
- cursor: pointer;
621
- }
622
- .cd-sidesheet__close:hover {
623
- background: var(--cd-sidesheet-close-hover-bg);
624
- color: var(--cd-sidesheet-close-color-hover);
625
- }
626
- .cd-sidesheet__close:focus-visible {
627
- outline: none;
628
- box-shadow: var(--cd-focus-ring);
629
- }
630
- .cd-sidesheet__body {
631
- flex: 1;
632
- overflow: auto;
633
- padding: var(--cd-sidesheet-padding);
634
- color: var(--cd-sidesheet-color);
635
- }
636
- .cd-sidesheet__footer {
637
- position: sticky;
638
- inset-block-end: 0;
639
- display: flex;
640
- flex-shrink: 0;
641
- justify-content: flex-end;
642
- gap: var(--cd-spacing-2, 8px);
643
- padding: var(--cd-sidesheet-footer-padding);
644
- background: var(--cd-sidesheet-bg);
645
- border-block-start: 1px solid var(--cd-sidesheet-border);
646
- }
647
-
648
- /* reduced-motion / motionDisabled:禁用位移过渡,立即显隐 */
649
- .cd-sidesheet--no-motion .cd-sidesheet__panel,
650
- .cd-sidesheet--no-motion .cd-sidesheet__mask {
651
- transition: none;
652
- }
653
- @media (prefers-reduced-motion: reduce) {
654
- .cd-sidesheet__panel,
655
- .cd-sidesheet__mask {
656
- transition: none;
657
- }
658
- }
659
- </style>
@@ -1,30 +0,0 @@
1
- <!--
2
- 仅供 SideSheet.kbd.test.ts(browser project)使用的焦点陷阱 e2e 夹具。
3
- trigger 按钮控制 open(受控);测试先聚焦 trigger 再打开 SideSheet,
4
- 验证:打开后焦点进入对话框、Tab 被困在内循环、Esc 关闭后焦点归还 trigger。
5
- 默认 mask=true 才启用 focus trap;motionDisabled 关掉进出动效,避免动画时序抖动。
6
- body 两个按钮 + 关闭叉 + footer 两个按钮构成多个可聚焦点测 Tab 循环。
7
- -->
8
- <script lang="ts">
9
- import { LocaleProvider } from '../locale-provider/index.js';
10
- import SideSheet from './SideSheet.svelte';
11
-
12
- let open = $state(false);
13
- </script>
14
-
15
- <LocaleProvider locale="en_US">
16
- <button type="button" data-testid="trigger" onclick={() => (open = true)}>open sidesheet</button>
17
- <SideSheet
18
- {open}
19
- title="Filters"
20
- motionDisabled
21
- onOpenChange={(e) => (open = e.open)}
22
- >
23
- <button type="button" data-testid="body-a">body a</button>
24
- <button type="button" data-testid="body-b">body b</button>
25
- {#snippet footer({ close })}
26
- <button type="button" data-testid="footer-reset">Reset</button>
27
- <button type="button" data-testid="footer-apply" onclick={close}>Apply</button>
28
- {/snippet}
29
- </SideSheet>
30
- </LocaleProvider>
@@ -1,2 +0,0 @@
1
- export { default as SideSheet } from './SideSheet.svelte';
2
- export { meta as sideSheetMeta } from './meta.js';