@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,643 +0,0 @@
1
- <!--
2
- Popover — see specs/components/show/Popover.spec.md
3
- 基础子集:hover/click/focus/custom 触发、position+align(映射 12 方位)、箭头、间距、标题。
4
- 定位:use:floating action portal 到 getPopupContainer()(默认 body)+ position:fixed,
5
- core computePosition 计算坐标 + autoAdjustOverflow flip 碰撞避让(脱离 overflow:hidden 裁剪)。
6
- custom:显隐完全由受控 open + onOpenChange 控制,组件不自动响应 hover/click/focus,
7
- 也不启用 useDismiss 外部点击/Esc 关闭——由调用方自行决定何时显隐。
8
-
9
- spec §4 浮层 prop(复用库内浮层基建,红线 #3 命令式 + cleanup):
10
- - getPopupContainer/zIndex:floating action getContainer(回退 ConfigProvider 全局,再回退 body)+ 内联 z-index。
11
- - trapFocus/returnFocus/rememberFocus:useFocusTrap(trapTab/returnFocus/rememberFocus 选项),关闭归还触发器。
12
- - closeOnEsc/closeOnOutsideClick:useDismiss(esc/outsideClick 分别可关)。
13
- - lockScroll:useScrollLock(默认关闭,非阻断)。
14
- - destroyOnClose:关闭即卸载浮层 DOM({#if}),重开重建;默认 false 首开后保留(--hidden 隐藏)。
15
- - stopPropagation:浮层内 click/keydown/pointerdown 停止冒泡。
16
- - size:small/default/large 内边距档(token 驱动)。
17
- - motion:进场过渡开关/配置,reduced-motion 退化。
18
- -->
19
- <script lang="ts">
20
- import type { Snippet } from 'svelte';
21
- import { untrack } from 'svelte';
22
- import {
23
- useId,
24
- useDismiss,
25
- useFocusTrap,
26
- useScrollLock,
27
- makePlacement,
28
- parsePlacement,
29
- type Placement,
30
- type Side,
31
- type Align,
32
- } from '@chenzy-design/core';
33
- import { getGlobalPopupContainer } from '../config-provider/index.js';
34
- import { useLocale } from '../locale-provider/index.js';
35
- import { floating } from '../_floating/use-floating.js';
36
-
37
- type TriggerKind = 'hover' | 'click' | 'focus' | 'custom';
38
- type Position = 'top' | 'bottom' | 'left' | 'right';
39
- type Size = 'small' | 'default' | 'large';
40
-
41
- /** motion 配置:传 number 覆盖时长(ms),传 false 关闭过渡 */
42
- interface MotionConfig {
43
- /** 过渡时长(ms),缺省走 token --cd-popover-motion-duration */
44
- duration?: number;
45
- }
46
-
47
- interface Props {
48
- content?: string | Snippet;
49
- title?: string | Snippet;
50
- open?: boolean;
51
- defaultOpen?: boolean;
52
- trigger?: TriggerKind;
53
- position?: Position;
54
- align?: Align;
55
- /** 视口溢出时翻转到对侧 */
56
- autoAdjustOverflow?: boolean;
57
- showArrow?: boolean;
58
- /** start/end 对齐时箭头指向触发器中心(默认 false:贴对齐边) */
59
- arrowPointAtCenter?: boolean;
60
- spacing?: number;
61
- mouseEnterDelay?: number;
62
- mouseLeaveDelay?: number;
63
- disabled?: boolean;
64
- /** 浮层挂载容器,缺省回退 ConfigProvider 全局,再回退 document.body。非 body 容器时 floating 改 absolute 定位。 */
65
- getPopupContainer?: () => HTMLElement | null | undefined;
66
- /** 浮层层级,缺省走 token var(--cd-popover-z) */
67
- zIndex?: number;
68
- /** 是否陷入焦点(Tab 循环),缺省随 trigger==='click' */
69
- trapFocus?: boolean;
70
- /** 关闭后焦点是否归还触发器(仅 trapFocus 时生效),默认 true */
71
- returnFocus?: boolean;
72
- /** Esc 关闭,默认 true(custom 触发不生效) */
73
- closeOnEsc?: boolean;
74
- /** 外部点击关闭,默认 true(custom 触发不生效) */
75
- closeOnOutsideClick?: boolean;
76
- /** 打开时锁定背景滚动,默认 false(非阻断) */
77
- lockScroll?: boolean;
78
- /** 关闭时销毁浮层 DOM,默认 false(首开后保留,仅 --hidden 隐藏) */
79
- destroyOnClose?: boolean;
80
- /** 重新打开时恢复上次浮层内焦点位置(仅 trapFocus 时生效),默认 false */
81
- rememberFocus?: boolean;
82
- /** 阻断浮层内事件冒泡,默认 false */
83
- stopPropagation?: boolean;
84
- /** 内边距尺寸档位,默认 default */
85
- size?: Size;
86
- /** 动画开关/配置,默认 true */
87
- motion?: boolean | MotionConfig;
88
- /** 浮层右上角显示关闭按钮,默认 false */
89
- showCloseButton?: boolean;
90
- /** 自定义关闭按钮图标(showCloseButton=true 时有效) */
91
- closeIcon?: Snippet;
92
- /** 确定按钮文案(默认来自 locale) */
93
- okText?: string;
94
- /** 取消按钮文案(默认来自 locale) */
95
- cancelText?: string;
96
- /** 透传给确定 Button 的 props */
97
- okButtonProps?: Record<string, unknown>;
98
- /** 透传给取消 Button 的 props */
99
- cancelButtonProps?: Record<string, unknown>;
100
- /** 点击确定按钮回调 */
101
- onOk?: () => void;
102
- /** 点击取消按钮回调 */
103
- onCancel?: () => void;
104
- onOpenChange?: (open: boolean) => void;
105
- children?: Snippet;
106
- contentSlot?: Snippet;
107
- }
108
-
109
- let {
110
- content,
111
- title,
112
- open,
113
- defaultOpen = false,
114
- trigger = 'hover',
115
- position = 'bottom',
116
- align = 'center',
117
- autoAdjustOverflow = true,
118
- showArrow = true,
119
- arrowPointAtCenter = false,
120
- spacing = 8,
121
- mouseEnterDelay = 100,
122
- mouseLeaveDelay = 100,
123
- disabled = false,
124
- getPopupContainer,
125
- zIndex,
126
- trapFocus,
127
- returnFocus = true,
128
- closeOnEsc = true,
129
- closeOnOutsideClick = true,
130
- lockScroll = false,
131
- destroyOnClose = false,
132
- rememberFocus = false,
133
- stopPropagation = false,
134
- size = 'default',
135
- motion = true,
136
- showCloseButton = false,
137
- closeIcon,
138
- okText,
139
- cancelText,
140
- okButtonProps,
141
- cancelButtonProps,
142
- onOk,
143
- onCancel,
144
- onOpenChange,
145
- children,
146
- contentSlot,
147
- }: Props = $props();
148
-
149
- const popId = useId('cd-popover');
150
- const loc = useLocale();
151
-
152
- // ConfigProvider 全局浮层容器默认;自身 getPopupContainer prop 优先,未传时回退此值(再回退 body)。
153
- const globalPopupContainer = getGlobalPopupContainer();
154
- const resolvePopupContainer = $derived(getPopupContainer ?? globalPopupContainer);
155
-
156
- // trapFocus 缺省随 click(spec 默认值 trigger==='click')。
157
- const shouldTrapFocus = $derived(trapFocus ?? trigger === 'click');
158
-
159
- // motion:false(或 {duration:0})关闭过渡;number 形态在模板写内联时长。
160
- const motionEnabled = $derived(motion !== false);
161
- const motionDuration = $derived(
162
- typeof motion === 'object' && typeof motion.duration === 'number'
163
- ? motion.duration
164
- : undefined,
165
- );
166
-
167
- // position + align → core 12 方位 Placement
168
- const placement = $derived(makePlacement(position as Side, align));
169
-
170
- // --- 受控 open (红线 #1):不无条件回写 open,仅 onOpenChange ---
171
- const isControlled = $derived(open !== undefined);
172
- let innerOpen = $state(untrack(() => defaultOpen));
173
- const isOpen = $derived(!disabled && (isControlled ? !!open : innerOpen));
174
-
175
- function setOpen(next: boolean) {
176
- if (next === (isControlled ? !!open : innerOpen)) return;
177
- if (!isControlled) innerOpen = next;
178
- onOpenChange?.(next);
179
- }
180
-
181
- const titleText = $derived(typeof title === 'string' ? title : undefined);
182
- const titleSnippet = $derived(typeof title === 'function' ? title : undefined);
183
- const hasTitle = $derived(title !== undefined && title !== '');
184
- const titleId = $derived(`${popId}-title`);
185
-
186
- const contentText = $derived(typeof content === 'string' ? content : undefined);
187
- const contentSnippetFn = $derived(
188
- typeof content === 'function' ? content : undefined,
189
- );
190
-
191
- // --- destroyOnClose / 惰性挂载:首开才挂;关闭后 destroyOnClose=false 保留 DOM(--hidden),true 卸载。 ---
192
- let hasBeenOpened = $state(false);
193
- $effect(() => {
194
- if (isOpen) hasBeenOpened = true;
195
- });
196
- const shouldRender = $derived(isOpen || (hasBeenOpened && !destroyOnClose));
197
-
198
- // --- hover 延迟开关:setTimeout 存普通变量,cleanup 清除 ---
199
- let enterTimer: ReturnType<typeof setTimeout> | undefined;
200
- let leaveTimer: ReturnType<typeof setTimeout> | undefined;
201
-
202
- function clearTimers() {
203
- if (enterTimer !== undefined) {
204
- clearTimeout(enterTimer);
205
- enterTimer = undefined;
206
- }
207
- if (leaveTimer !== undefined) {
208
- clearTimeout(leaveTimer);
209
- leaveTimer = undefined;
210
- }
211
- }
212
-
213
- function onPointerEnter() {
214
- if (disabled || trigger !== 'hover') return;
215
- clearTimers();
216
- enterTimer = setTimeout(() => setOpen(true), mouseEnterDelay);
217
- }
218
-
219
- function onPointerLeave() {
220
- if (disabled || trigger !== 'hover') return;
221
- clearTimers();
222
- leaveTimer = setTimeout(() => setOpen(false), mouseLeaveDelay);
223
- }
224
-
225
- function onFocusIn() {
226
- if (disabled || trigger !== 'focus') return;
227
- setOpen(true);
228
- }
229
-
230
- function onFocusOut() {
231
- if (disabled || trigger !== 'focus') return;
232
- setOpen(false);
233
- }
234
-
235
- function onClick() {
236
- if (disabled || trigger !== 'click') return;
237
- setOpen(!isOpen);
238
- }
239
-
240
- // dialog 模式(click)触发器承载 button 角色:Enter/Space 键盘激活(与原生 button 一致)。
241
- // tooltip 模式(hover/focus)不挂键盘处理,触发器保持纯 generic span。
242
- function onTriggerKeydown(e: KeyboardEvent) {
243
- if (disabled || trigger !== 'click') return;
244
- if (e.key === 'Enter' || e.key === ' ' || e.key === 'Spacebar') {
245
- e.preventDefault();
246
- setOpen(!isOpen);
247
- }
248
- }
249
-
250
- // --- DOM 引用:触发包裹(浮层定位由 use:floating action 接管)---
251
- let rootEl = $state<HTMLSpanElement | null>(null);
252
- let popEl = $state<HTMLDivElement | null>(null);
253
-
254
- // 解析后的实际方位(flip 后)
255
- let resolvedPlacement = $state<Placement>(untrack(() => placement));
256
- const resolvedSide = $derived<Side>(parsePlacement(resolvedPlacement).side);
257
- let arrowOffset = $state(0);
258
-
259
- function onPlacement(info: { placement: Placement; arrowOffset: number }) {
260
- resolvedPlacement = info.placement;
261
- arrowOffset = info.arrowOffset;
262
- }
263
-
264
- // --- useDismiss (红线 #3):仅 click 触发需要 outside/Esc;popup portal 列入 extraTargets ---
265
- $effect(() => {
266
- if (!isOpen || !rootEl || trigger !== 'click') return;
267
- if (!closeOnEsc && !closeOnOutsideClick) return;
268
- const cleanup = useDismiss(rootEl, {
269
- onDismiss: (reason) => {
270
- if (reason === 'esc' && !closeOnEsc) return;
271
- if (reason === 'outsideClick' && !closeOnOutsideClick) return;
272
- setOpen(false);
273
- },
274
- escape: closeOnEsc,
275
- outsideClick: closeOnOutsideClick,
276
- extraTargets: [popEl],
277
- });
278
- return cleanup;
279
- });
280
-
281
- // --- focus-trap (红线 #3):click 且 trapFocus 时,open 后陷入焦点,关闭归还触发器。 ---
282
- // popEl 经 floating action 在挂载时即 portal 完成,$effect 运行时已在 DOM 且可聚焦,
283
- // 故同步 activate(与 Modal/Drawer 一致)。触发器 click 的默认聚焦先于 effect 结算,
284
- // activate 捕获的 previouslyFocused 即触发器,关闭后 returnFocus 归还正确。
285
- $effect(() => {
286
- if (!isOpen || !popEl || !shouldTrapFocus) return;
287
- const trap = useFocusTrap(popEl, { returnFocus, rememberFocus });
288
- trap.activate();
289
- return () => trap.deactivate();
290
- });
291
-
292
- // --- scroll-lock (红线 #3):lockScroll 时打开锁背景滚动,关闭即释放。 ---
293
- $effect(() => {
294
- if (!isOpen || !lockScroll) return;
295
- const release = useScrollLock();
296
- return release;
297
- });
298
-
299
- // cleanup hover 定时器
300
- $effect(() => clearTimers);
301
-
302
- // stopPropagation:浮层内交互事件停止冒泡(红线 #3 思路:组件内事件处理,不外泄)。
303
- function onPopEvent(e: Event) {
304
- if (stopPropagation) e.stopPropagation();
305
- }
306
-
307
- const arrowStyle = $derived(
308
- resolvedSide === 'top' || resolvedSide === 'bottom'
309
- ? `inset-inline-start:${arrowOffset}px`
310
- : `inset-block-start:${arrowOffset}px`,
311
- );
312
-
313
- // 浮层根内联样式:自定义 zIndex 覆盖 token 层级;motion duration 覆盖 token 时长。
314
- const popStyle = $derived(
315
- [
316
- zIndex !== undefined ? `z-index:${zIndex}` : '',
317
- motionDuration !== undefined
318
- ? `--cd-popover-motion-duration:${motionDuration}ms`
319
- : '',
320
- ]
321
- .filter(Boolean)
322
- .join(';'),
323
- );
324
-
325
- // --- role 派生(纯函数,红线 #2):依触发模式区分(spec §6)---
326
- // 内容信息性 + hover/focus → role="tooltip",触发器 aria-describedby 关联浮层;
327
- // 内容可交互 + click/custom → role="dialog",aria-modal=false + aria-haspopup/expanded/controls。
328
- const isTooltipRole = $derived(trigger === 'hover' || trigger === 'focus');
329
- // dialog 兜底 aria-label(无标题时,仅 dialog 模式需要)。
330
- const dialogLabel = $derived(
331
- isTooltipRole || hasTitle ? undefined : loc().t('Popover.dialogLabel'),
332
- );
333
-
334
- // 按钮文案:prop 优先,否则取 locale。
335
- const resolvedOkText = $derived(okText ?? loc().t('Popover.okText'));
336
- const resolvedCancelText = $derived(cancelText ?? loc().t('Popover.cancelText'));
337
-
338
- // 是否渲染底部按钮区。
339
- const hasFooter = $derived(onOk !== undefined || onCancel !== undefined);
340
-
341
- // 关闭按钮处理:调用 setOpen(false) 并触发 onCancel。
342
- function handleClose() {
343
- setOpen(false);
344
- onCancel?.();
345
- }
346
-
347
- // 确定按钮处理。
348
- function handleOk() {
349
- onOk?.();
350
- }
351
-
352
- // 取消按钮处理:同关闭。
353
- function handleCancel() {
354
- setOpen(false);
355
- onCancel?.();
356
- }
357
- </script>
358
-
359
- <!-- 触发包裹 span 仅转发宿主事件给真正可交互的 children;自身无障碍语义忽略 -->
360
- <!-- svelte-ignore a11y_no_static_element_interactions -->
361
- <!-- svelte-ignore a11y_click_events_have_key_events -->
362
- <span
363
- class="cd-popover"
364
- bind:this={rootEl}
365
- onpointerenter={onPointerEnter}
366
- onpointerleave={onPointerLeave}
367
- onfocusin={onFocusIn}
368
- onfocusout={onFocusOut}
369
- onclick={onClick}
370
- >
371
- <!-- dialog 模式(click/custom)触发器承载 button 角色,让 aria-haspopup/expanded/controls
372
- 挂在合法宿主上(axe aria-allowed-attr);可聚焦 + Enter/Space 激活。
373
- tooltip 模式(hover/focus)保持纯 span,仅 aria-describedby(generic 上合法)。 -->
374
- <!-- role/tabindex 动态(dialog 模式才 button),静态分析看不出 → 抑制两条误报。 -->
375
- <!-- svelte-ignore a11y_no_static_element_interactions -->
376
- <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
377
- <span
378
- class="cd-popover__trigger"
379
- role={isTooltipRole ? undefined : 'button'}
380
- tabindex={isTooltipRole ? undefined : 0}
381
- aria-haspopup={isTooltipRole ? undefined : 'dialog'}
382
- aria-expanded={isTooltipRole ? undefined : isOpen}
383
- aria-controls={!isTooltipRole && isOpen ? popId : undefined}
384
- aria-describedby={isTooltipRole && isOpen ? popId : undefined}
385
- aria-disabled={!isTooltipRole && disabled ? 'true' : undefined}
386
- onkeydown={isTooltipRole ? undefined : onTriggerKeydown}
387
- >
388
- {@render children?.()}
389
- </span>
390
-
391
- {#if shouldRender}
392
- <!-- destroyOnClose=false 时关闭仍保留 DOM(--hidden 隐藏),true 时 !isOpen 即被 {#if} 卸载。 -->
393
- <div
394
- id={popId}
395
- role={isTooltipRole ? 'tooltip' : 'dialog'}
396
- aria-modal={isTooltipRole ? undefined : 'false'}
397
- aria-labelledby={!isTooltipRole && hasTitle ? titleId : undefined}
398
- aria-label={dialogLabel}
399
- aria-hidden={!isOpen || undefined}
400
- tabindex="-1"
401
- bind:this={popEl}
402
- use:floating={{ trigger: rootEl, placement, autoAdjust: autoAdjustOverflow, offset: spacing, arrowPointAtCenter, onPlacement, getContainer: resolvePopupContainer, open: isOpen }}
403
- class="cd-popover__pop cd-popover__pop--{resolvedSide} cd-popover__pop--{size}"
404
- class:cd-popover__pop--no-arrow={!showArrow}
405
- class:cd-popover__pop--hidden={!isOpen}
406
- class:cd-popover__pop--motion={motionEnabled}
407
- style={popStyle}
408
- onclick={onPopEvent}
409
- onkeydown={onPopEvent}
410
- onpointerdown={onPopEvent}
411
- >
412
- {#if showCloseButton}
413
- <!-- svelte-ignore a11y_consider_explicit_label -->
414
- <button
415
- type="button"
416
- class="cd-popover__close-btn"
417
- aria-label={loc().t('Popover.close')}
418
- onclick={handleClose}
419
- >
420
- {#if closeIcon}
421
- {@render closeIcon()}
422
- {:else}
423
- <svg viewBox="0 0 16 16" width="12" height="12" focusable="false" aria-hidden="true">
424
- <path stroke="currentColor" stroke-width="1.6" stroke-linecap="round" d="M3 3l10 10M13 3L3 13" />
425
- </svg>
426
- {/if}
427
- </button>
428
- {/if}
429
- {#if hasTitle}
430
- <div class="cd-popover__title" id={titleId}>
431
- {#if titleSnippet}
432
- {@render titleSnippet()}
433
- {:else}
434
- {titleText}
435
- {/if}
436
- </div>
437
- {/if}
438
- <div class="cd-popover__content">
439
- {#if contentSlot}
440
- {@render contentSlot()}
441
- {:else if contentSnippetFn}
442
- {@render contentSnippetFn()}
443
- {:else}
444
- {contentText}
445
- {/if}
446
- </div>
447
- {#if hasFooter}
448
- <div class="cd-popover__footer">
449
- {#if onCancel !== undefined}
450
- <!-- svelte-ignore a11y_consider_explicit_label -->
451
- <button
452
- type="button"
453
- class="cd-popover__btn cd-popover__btn--cancel"
454
- onclick={handleCancel}
455
- {...(cancelButtonProps ?? {})}
456
- >
457
- {resolvedCancelText}
458
- </button>
459
- {/if}
460
- {#if onOk !== undefined}
461
- <!-- svelte-ignore a11y_consider_explicit_label -->
462
- <button
463
- type="button"
464
- class="cd-popover__btn cd-popover__btn--ok"
465
- onclick={handleOk}
466
- {...(okButtonProps ?? {})}
467
- >
468
- {resolvedOkText}
469
- </button>
470
- {/if}
471
- </div>
472
- {/if}
473
- {#if showArrow}
474
- <span class="cd-popover__arrow" style={arrowStyle} aria-hidden="true"></span>
475
- {/if}
476
- </div>
477
- {/if}
478
- </span>
479
-
480
- <style>
481
- .cd-popover {
482
- position: relative;
483
- display: inline-block;
484
- }
485
- .cd-popover__trigger {
486
- display: inline-block;
487
- }
488
- /* 浮层 portal 到 body,由 JS 写 position:fixed + transform 定位 */
489
- .cd-popover__pop {
490
- position: relative;
491
- z-index: var(--cd-popover-z);
492
- inline-size: max-content;
493
- max-inline-size: 20rem;
494
- padding: var(--cd-popover-padding-default);
495
- background: var(--cd-popover-bg);
496
- color: var(--cd-popover-color);
497
- border-radius: var(--cd-popover-radius);
498
- box-shadow: var(--cd-popover-shadow);
499
- }
500
- /* size 档:内边距随档位切换(token 驱动) */
501
- .cd-popover__pop--small {
502
- padding: var(--cd-popover-padding-small);
503
- }
504
- .cd-popover__pop--default {
505
- padding: var(--cd-popover-padding-default);
506
- }
507
- .cd-popover__pop--large {
508
- padding: var(--cd-popover-padding-large);
509
- }
510
- /* destroyOnClose=false 关闭后保留 DOM 但不可见、不可交互、不占位 */
511
- .cd-popover__pop--hidden {
512
- display: none;
513
- }
514
- /* motion:进场淡入 + 轻微缩放,token 时长/缓动;reduced-motion 退化 */
515
- .cd-popover__pop--motion {
516
- animation: cd-popover-in var(--cd-popover-motion-duration)
517
- var(--cd-popover-motion-easing, ease) both;
518
- }
519
- @keyframes cd-popover-in {
520
- from {
521
- opacity: 0;
522
- transform: scale(0.96);
523
- }
524
- to {
525
- opacity: 1;
526
- transform: scale(1);
527
- }
528
- }
529
- /* 关闭按钮:绝对定位于浮层右上角 */
530
- .cd-popover__close-btn {
531
- position: absolute;
532
- inset-block-start: var(--cd-spacing-2);
533
- inset-inline-end: var(--cd-spacing-2);
534
- display: inline-flex;
535
- align-items: center;
536
- justify-content: center;
537
- padding: var(--cd-spacing-1);
538
- border: none;
539
- border-radius: var(--cd-radius-1);
540
- background: transparent;
541
- color: var(--cd-color-text-2);
542
- cursor: pointer;
543
- line-height: 1;
544
- }
545
- .cd-popover__close-btn:hover {
546
- background: var(--cd-color-fill-2, rgba(0, 0, 0, 0.06));
547
- color: var(--cd-color-text-1);
548
- }
549
- .cd-popover__close-btn:focus-visible {
550
- outline: none;
551
- box-shadow: var(--cd-focus-ring);
552
- }
553
-
554
- /* 底部按钮区 */
555
- .cd-popover__footer {
556
- display: flex;
557
- justify-content: flex-end;
558
- gap: var(--cd-spacing-2);
559
- margin-block-start: var(--cd-spacing-3);
560
- }
561
- .cd-popover__btn {
562
- display: inline-flex;
563
- align-items: center;
564
- padding: var(--cd-spacing-1) var(--cd-spacing-3);
565
- border-radius: var(--cd-radius-1);
566
- border: 1px solid transparent;
567
- font: inherit;
568
- font-size: var(--cd-font-size-2);
569
- cursor: pointer;
570
- transition: background 0.15s, color 0.15s, border-color 0.15s;
571
- }
572
- .cd-popover__btn--cancel {
573
- background: var(--cd-color-bg-2, #f2f3f5);
574
- color: var(--cd-color-text-1);
575
- border-color: var(--cd-color-border, #e5e6eb);
576
- }
577
- .cd-popover__btn--cancel:hover {
578
- background: var(--cd-color-bg-3, #e5e6eb);
579
- }
580
- .cd-popover__btn--ok {
581
- background: var(--cd-color-primary, #165dff);
582
- color: #fff;
583
- border-color: var(--cd-color-primary, #165dff);
584
- }
585
- .cd-popover__btn--ok:hover {
586
- background: var(--cd-color-primary-6, #4080ff);
587
- border-color: var(--cd-color-primary-6, #4080ff);
588
- }
589
- .cd-popover__btn:focus-visible {
590
- outline: none;
591
- box-shadow: var(--cd-focus-ring);
592
- }
593
-
594
- .cd-popover__title {
595
- margin-block-end: var(--cd-spacing-2);
596
- padding-block-end: var(--cd-spacing-2);
597
- border-block-end: 1px solid var(--cd-popover-title-border);
598
- color: var(--cd-popover-title-color);
599
- font-weight: var(--cd-font-weight-medium, 600);
600
- }
601
-
602
- /* --- 箭头:方块旋转 45deg,交叉轴偏移由内联 style 控制 --- */
603
- .cd-popover__arrow {
604
- position: absolute;
605
- inline-size: var(--cd-popover-arrow-size);
606
- block-size: var(--cd-popover-arrow-size);
607
- background: var(--cd-popover-bg);
608
- box-shadow: var(--cd-popover-shadow);
609
- transform: rotate(45deg);
610
- }
611
- .cd-popover__pop--top .cd-popover__arrow,
612
- .cd-popover__pop--bottom .cd-popover__arrow {
613
- margin-inline-start: calc(var(--cd-popover-arrow-size) / -2);
614
- }
615
- .cd-popover__pop--left .cd-popover__arrow,
616
- .cd-popover__pop--right .cd-popover__arrow {
617
- margin-block-start: calc(var(--cd-popover-arrow-size) / -2);
618
- }
619
-
620
- /* 箭头吸附到浮层贴近触发器的那条边(按解析后的 side) */
621
- .cd-popover__pop--top .cd-popover__arrow {
622
- inset-block-end: calc(var(--cd-popover-arrow-size) / -2);
623
- }
624
- .cd-popover__pop--bottom .cd-popover__arrow {
625
- inset-block-start: calc(var(--cd-popover-arrow-size) / -2);
626
- }
627
- .cd-popover__pop--left .cd-popover__arrow {
628
- inset-inline-end: calc(var(--cd-popover-arrow-size) / -2);
629
- }
630
- .cd-popover__pop--right .cd-popover__arrow {
631
- inset-inline-start: calc(var(--cd-popover-arrow-size) / -2);
632
- }
633
- .cd-popover__pop--no-arrow .cd-popover__arrow {
634
- display: none;
635
- }
636
-
637
- /* reduced-motion:禁用进场动画 */
638
- @media (prefers-reduced-motion: reduce) {
639
- .cd-popover__pop--motion {
640
- animation: none;
641
- }
642
- }
643
- </style>
@@ -1,35 +0,0 @@
1
- <!--
2
- Popover a11y 测试夹具:在 LocaleProvider 内渲染 Popover。
3
- children 仅作触发文案(非交互)——dialog 模式下 Popover 的触发包裹 span 自身承载
4
- role=button + tabindex=0 + Enter/Space 激活(对齐 Dropdown),故 children 不再嵌套
5
- 原生 <button>(否则 role=button 包裹可聚焦元素 → axe nested-interactive)。
6
- 仅供 Popover.a11y.test.ts 使用,不对外导出。
7
- -->
8
- <script lang="ts">
9
- import { LocaleProvider } from '../locale-provider/index.js';
10
- import Popover from './Popover.svelte';
11
-
12
- interface Props {
13
- open?: boolean;
14
- content?: string;
15
- title?: string | undefined;
16
- trigger?: 'hover' | 'click' | 'focus' | 'custom';
17
- locale?: string;
18
- }
19
-
20
- let {
21
- open = false,
22
- content = 'Popover body content',
23
- title,
24
- trigger = 'custom',
25
- locale = 'en_US',
26
- }: Props = $props();
27
- </script>
28
-
29
- <LocaleProvider {locale}>
30
- {#if title !== undefined}
31
- <Popover {open} {content} {title} {trigger}>Open</Popover>
32
- {:else}
33
- <Popover {open} {content} {trigger}>Open</Popover>
34
- {/if}
35
- </LocaleProvider>
@@ -1,18 +0,0 @@
1
- <!--
2
- 仅供 Popover.kbd.test.ts(browser project)使用的 dialog 模式 Esc 归还 e2e 夹具。
3
- trigger='click':触发器 span 承载 role=button + tabindex=0,点击打开浮层(dialog 角色,
4
- trapFocus 默认随 click),Esc 关闭并归还焦点到触发器。content 含一个按钮供焦点陷阱断言。
5
- -->
6
- <script lang="ts">
7
- import { LocaleProvider } from '../locale-provider/index.js';
8
- import Popover from './Popover.svelte';
9
- </script>
10
-
11
- <LocaleProvider locale="en_US">
12
- <Popover trigger="click" title="More info">
13
- {#snippet contentSlot()}
14
- <button type="button" data-testid="pop-btn">action</button>
15
- {/snippet}
16
- Open
17
- </Popover>
18
- </LocaleProvider>
@@ -1,2 +0,0 @@
1
- export { default as Popover } from './Popover.svelte';
2
- export { meta as popoverMeta } from './meta.js';