@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,724 +0,0 @@
1
- <!--
2
- Popconfirm — 气泡确认(feedback)。
3
- 锚定触发元素的就地二次确认:title/content + 危险分级 type,确认/取消双按钮,
4
- 12 方位 + autoAdjustOverflow flip 碰撞避让,role=dialog non-modal。
5
- 定位:portal 到 getPopupContainer()(缺省 body)+ position:fixed(脱离 overflow:hidden 裁剪)。
6
- 触发:triggerType='click'(默认,点击 toggle)| 'hover'(悬停 enter/leave delay 开关,
7
- 指针移入浮层维持 open,复用 Dropdown 的 hover 定时器模式)。
8
- 异步确认:onConfirm 返回 Promise 时确认按钮进入 loading 态,resolve 后关闭、reject 保持打开
9
- (对齐 ConfirmModal 的异步编排)。
10
- 复用 core 原语:useId、useDismiss(外部点击/Esc 关闭,popup 列入 extraTargets)、
11
- useFocusTrap(焦点捕获+归还)、computePosition/useFloating(container 选项接 getPopupContainer)。
12
- 浮层惰性挂载(首开才挂);destroyOnClose 默认 true 关闭即卸载,false 时保留 DOM(--hidden 隐藏)。
13
- motion 默认开(淡入+轻缩放),reduced-motion 退化为无动效。arrowPointAtCenter 透传 floating。
14
- okButtonProps/cancelButtonProps 透传额外按钮属性(onclick/loading/disabled 由组件托管,不被覆盖)。
15
- 关闭回调 reason 来源细分:'confirm'(确认按钮)| 'cancel'(取消按钮)| 'trigger'(点击/键盘/hover toggle)
16
- | 'esc'(Esc 键)| 'outsideClick'(外部点击);esc/outsideClick 由 useDismiss 的 DismissReason 透传。
17
- -->
18
- <script lang="ts">
19
- import type { Snippet } from 'svelte';
20
- import { untrack } from 'svelte';
21
- import {
22
- useId,
23
- useDismiss,
24
- useFocusTrap,
25
- useLiveAnnouncer,
26
- parsePlacement,
27
- type Placement,
28
- type Side,
29
- } from '@chenzy-design/core';
30
- import { Button } from '../button/index.js';
31
- import { useLocale } from '../locale-provider/index.js';
32
- import { floating } from '../_floating/use-floating.js';
33
-
34
- type PopType = 'default' | 'danger' | 'warning';
35
- type OkType = 'primary' | 'danger';
36
- type TriggerType = 'click' | 'hover';
37
- type DismissReason = 'trigger' | 'confirm' | 'cancel' | 'esc' | 'outsideClick';
38
-
39
- /** 透传给确认/取消 Button 的额外属性(type/theme/size/block/disabled/ariaLabel 等,不含 onclick/loading:由组件托管) */
40
- type ExtraButtonProps = {
41
- type?: 'primary' | 'secondary' | 'tertiary' | 'warning' | 'danger';
42
- theme?: 'solid' | 'borderless' | 'light' | 'outline';
43
- size?: 'small' | 'default' | 'large';
44
- block?: boolean;
45
- disabled?: boolean;
46
- htmlType?: 'button' | 'submit' | 'reset';
47
- ariaLabel?: string;
48
- };
49
-
50
- /** motion 配置:传 number 覆盖时长(ms),传 false 关闭过渡 */
51
- interface MotionConfig {
52
- /** 过渡时长(ms),缺省走 token --cd-popconfirm-motion-duration */
53
- duration?: number;
54
- }
55
-
56
- interface Props {
57
- open?: boolean;
58
- /** open 别名(Semi 原始拼写) */
59
- visible?: boolean;
60
- defaultOpen?: boolean;
61
- /** 非受控初始显隐(defaultOpen 别名,优先级低于 open) */
62
- defaultVisible?: boolean;
63
- title?: string;
64
- titleSnippet?: Snippet;
65
- content?: string;
66
- contentSnippet?: Snippet;
67
- type?: PopType;
68
- icon?: Snippet | false;
69
- okText?: string;
70
- cancelText?: string;
71
- okType?: OkType;
72
- /** 取消按钮类型(对应 okType 的取消侧),透传给取消 Button 的 type;优先级高于 cancelButtonProps.type */
73
- cancelType?: 'primary' | 'secondary' | 'tertiary' | 'warning' | 'danger';
74
- /** 透传确认按钮额外属性(onclick/loading 由组件托管,传入会被忽略) */
75
- okButtonProps?: ExtraButtonProps;
76
- /** 透传取消按钮额外属性(onclick/disabled 由组件托管,传入会被忽略) */
77
- cancelButtonProps?: ExtraButtonProps;
78
- showCancel?: boolean;
79
- placement?: Placement;
80
- /** placement 别名(Semi 原始拼写) */
81
- position?: Placement;
82
- disabled?: boolean;
83
- closeOnEsc?: boolean;
84
- closeOnOutsideClick?: boolean;
85
- /** 关闭时销毁浮层 DOM,默认 true(卸载释放内存);false 时首开后保留(--hidden 隐藏) */
86
- destroyOnClose?: boolean;
87
- /** 箭头是否指向触发元素中心,默认 false */
88
- arrowPointAtCenter?: boolean;
89
- /** 是否显示箭头三角,默认 false(浮层与触发器间无连接箭头) */
90
- showArrow?: boolean;
91
- /** 入场动效开关/配置,默认 true(受 prefers-reduced-motion 覆盖) */
92
- motion?: boolean | MotionConfig;
93
- /** 触发方式:'click' 点击 toggle(默认)| 'hover' 悬停开关 */
94
- triggerType?: TriggerType;
95
- /** hover 触发:指针进入到打开的延迟(ms) */
96
- mouseEnterDelay?: number;
97
- /** hover 触发:指针离开到关闭的延迟(ms) */
98
- mouseLeaveDelay?: number;
99
- /** 浮层 portal 容器,缺省 document.body */
100
- getPopupContainer?: () => HTMLElement | null;
101
- /** 浮层 z-index,默认 1030 */
102
- zIndex?: number;
103
- /** Tab 键是否在浮层内循环(焦点陷阱),默认 true */
104
- guardFocus?: boolean;
105
- /** Esc 关闭时是否将焦点归还给触发元素,默认 true */
106
- returnFocusOnClose?: boolean;
107
- /** 点击浮层内事件是否阻止冒泡到文档,默认 true */
108
- stopPropagation?: boolean;
109
- trigger?: Snippet;
110
- onOpenChange?: (info: { open: boolean; reason: DismissReason }) => void;
111
- /** 确认回调;返回 Promise 时确认按钮 loading,resolve 关闭 / reject 保持打开 */
112
- onConfirm?: () => void | Promise<unknown>;
113
- onCancel?: () => void;
114
- /**
115
- * 点击浮层外部,在关闭逻辑前触发(区别于 onOpenChange 的 outsideClick reason)。
116
- * 调用 `event.preventDefault()` 可阻止默认关闭。
117
- */
118
- onClickOutside?: (event: MouseEvent) => void;
119
- /** onClickOutside 别名(Semi 原始大写 S 拼写) */
120
- onClickOutSide?: (event: MouseEvent) => void;
121
- /** Esc 键按下时触发(在 closeOnEsc 关闭之前) */
122
- onEscKeyDown?: (e: KeyboardEvent) => void;
123
- /** 入场动效结束、浮层完全可见 */
124
- onAfterOpen?: () => void;
125
- /** 出场动效结束、DOM 卸载后 */
126
- onAfterClose?: () => void;
127
- class?: string;
128
- }
129
-
130
- let {
131
- open,
132
- visible,
133
- defaultOpen = false,
134
- defaultVisible,
135
- title,
136
- titleSnippet,
137
- content,
138
- contentSnippet,
139
- type = 'default',
140
- icon,
141
- okText,
142
- cancelText,
143
- okType,
144
- cancelType,
145
- okButtonProps,
146
- cancelButtonProps,
147
- showCancel = true,
148
- placement,
149
- position,
150
- disabled = false,
151
- closeOnEsc = true,
152
- closeOnOutsideClick = true,
153
- destroyOnClose = true,
154
- arrowPointAtCenter = false,
155
- showArrow = false,
156
- motion = true,
157
- triggerType = 'click',
158
- mouseEnterDelay = 150,
159
- mouseLeaveDelay = 150,
160
- getPopupContainer,
161
- zIndex,
162
- guardFocus = true,
163
- returnFocusOnClose = true,
164
- stopPropagation = true,
165
- trigger,
166
- onOpenChange,
167
- onConfirm,
168
- onCancel,
169
- onClickOutside,
170
- onClickOutSide,
171
- onEscKeyDown,
172
- onAfterOpen,
173
- onAfterClose,
174
- class: className,
175
- }: Props = $props();
176
-
177
- const loc = useLocale();
178
- // 单例 live region(polite):异步确认进入 loading 时播报「处理中」给屏幕阅读器。
179
- // 命令式写入在事件回调里(confirm(),非 render 期),符合红线 #3。
180
- const announcer = useLiveAnnouncer();
181
-
182
- const popupId = useId('cd-popconfirm-popup');
183
- const titleId = useId('cd-popconfirm-title');
184
- const contentId = useId('cd-popconfirm-content');
185
-
186
- // visible 为 open 别名;open 优先。
187
- const resolvedOpen = $derived(open ?? visible);
188
- // position 为 placement 别名;placement 优先,缺省 'top'。
189
- const resolvedPlacementProp = $derived<Placement>(placement ?? position ?? 'top');
190
-
191
- // --- 受控 open (红线 #1):不无条件回写 open,仅 onOpenChange ---
192
- const isControlled = $derived(resolvedOpen !== undefined);
193
- let innerOpen = $state(getInitialOpen());
194
- const isOpen = $derived(isControlled ? !!resolvedOpen : innerOpen);
195
-
196
- function getInitialOpen(): boolean {
197
- // defaultVisible 为 defaultOpen 的别名,优先于 defaultOpen
198
- return defaultVisible ?? defaultOpen;
199
- }
200
-
201
- // 确认按钮 type 优先级:显式 okType > okButtonProps.type > 由 type 推导默认(兜底必为非空值)。
202
- type ButtonType = 'primary' | 'secondary' | 'tertiary' | 'warning' | 'danger';
203
- const resolvedOkType = $derived<ButtonType>(
204
- okType ?? okButtonProps?.type ?? (type === 'danger' ? 'danger' : 'primary'),
205
- );
206
- // 取消按钮 type 优先级:显式 cancelType > cancelButtonProps.type > 'secondary'(默认)。
207
- const resolvedCancelType = $derived<ButtonType>(
208
- cancelType ?? cancelButtonProps?.type ?? 'secondary',
209
- );
210
-
211
- const hasContent = $derived(Boolean(contentSnippet) || Boolean(content));
212
-
213
- // motion:false(或 {duration:0})关闭过渡;number/object.duration 覆盖 token 时长。
214
- const motionEnabled = $derived(motion !== false);
215
- const motionDuration = $derived(
216
- typeof motion === 'object' && typeof motion.duration === 'number'
217
- ? motion.duration
218
- : undefined,
219
- );
220
-
221
- // --- destroyOnClose / 惰性挂载(红线 #2 纯派生):首开才挂;关闭后 destroyOnClose=false 保留 DOM(--hidden),true 卸载。 ---
222
- let hasBeenOpened = $state(false);
223
- $effect(() => {
224
- if (isOpen) hasBeenOpened = true;
225
- });
226
- const shouldRender = $derived(isOpen || (hasBeenOpened && !destroyOnClose));
227
-
228
- // 浮层根内联样式:motion duration 覆盖 token 时长;zIndex 覆盖 CSS 变量。
229
- const popupStyle = $derived.by(() => {
230
- const parts: string[] = [];
231
- if (motionDuration !== undefined) parts.push(`--cd-popconfirm-motion-duration:${motionDuration}ms`);
232
- if (zIndex !== undefined) parts.push(`z-index:${zIndex}`);
233
- return parts.length > 0 ? parts.join(';') : undefined;
234
- });
235
-
236
- // flip 后的实际方位(驱动箭头朝向)+ 箭头交叉轴偏移
237
- let resolvedPlacement = $state<Placement>(untrack(() => resolvedPlacementProp));
238
- const resolvedSide = $derived<Side>(parsePlacement(resolvedPlacement).side);
239
- let arrowOffset = $state(0);
240
-
241
- const popupCls = $derived(
242
- [
243
- 'cd-popconfirm__popup',
244
- `cd-popconfirm__popup--${resolvedSide}`,
245
- className,
246
- ]
247
- .filter(Boolean)
248
- .join(' '),
249
- );
250
-
251
- const arrowStyle = $derived(
252
- resolvedSide === 'top' || resolvedSide === 'bottom'
253
- ? `inset-inline-start:${arrowOffset}px`
254
- : `inset-block-start:${arrowOffset}px`,
255
- );
256
-
257
- function setOpen(next: boolean, reason: DismissReason) {
258
- if (!isControlled) innerOpen = next;
259
- onOpenChange?.({ open: next, reason });
260
- }
261
-
262
- function onTriggerClick() {
263
- if (disabled || triggerType !== 'click') return;
264
- setOpen(!isOpen, 'trigger');
265
- }
266
-
267
- function onTriggerKeydown(e: KeyboardEvent) {
268
- if (disabled) return;
269
- // 键盘可达性:无论 click/hover,Enter/Space 都能展开(hover 模式键盘等价)。
270
- if (e.key === 'Enter' || e.key === ' ') {
271
- e.preventDefault();
272
- setOpen(!isOpen, 'trigger');
273
- }
274
- }
275
-
276
- // --- hover 延迟开关 (红线 #3):setTimeout 存普通变量,cleanup 清除。
277
- // 参考 Dropdown:enter 延迟开、leave 延迟关,指针移入浮层维持 open。 ---
278
- let enterTimer: ReturnType<typeof setTimeout> | undefined;
279
- let leaveTimer: ReturnType<typeof setTimeout> | undefined;
280
-
281
- function clearTimers() {
282
- if (enterTimer !== undefined) {
283
- clearTimeout(enterTimer);
284
- enterTimer = undefined;
285
- }
286
- if (leaveTimer !== undefined) {
287
- clearTimeout(leaveTimer);
288
- leaveTimer = undefined;
289
- }
290
- }
291
-
292
- function onTriggerPointerEnter() {
293
- if (disabled || triggerType !== 'hover') return;
294
- clearTimers();
295
- enterTimer = setTimeout(() => setOpen(true, 'trigger'), mouseEnterDelay);
296
- }
297
-
298
- function onTriggerPointerLeave() {
299
- if (disabled || triggerType !== 'hover') return;
300
- clearTimers();
301
- leaveTimer = setTimeout(() => setOpen(false, 'trigger'), mouseLeaveDelay);
302
- }
303
-
304
- // popup portal 到容器后不在 rootEl 子树内:指针移入浮层需取消关闭,移出再延迟关。
305
- function onPopupPointerEnter() {
306
- if (triggerType !== 'hover') return;
307
- clearTimers();
308
- }
309
-
310
- function onPopupPointerLeave() {
311
- if (triggerType !== 'hover') return;
312
- clearTimers();
313
- leaveTimer = setTimeout(() => setOpen(false, 'trigger'), mouseLeaveDelay);
314
- }
315
-
316
- $effect(() => clearTimers);
317
-
318
- // --- 异步确认 (红线 #3):onConfirm 返回 Promise 时确认按钮 loading,
319
- // resolve 后关闭、reject 保持打开(对齐 ConfirmModal)。 ---
320
- let confirmLoading = $state(false);
321
-
322
- async function confirm() {
323
- if (confirmLoading) return;
324
- const result = onConfirm?.();
325
- if (result instanceof Promise) {
326
- confirmLoading = true;
327
- announcer.announce(loc().t('Popconfirm.confirming'));
328
- try {
329
- await result;
330
- confirmLoading = false;
331
- setOpen(false, 'confirm');
332
- } catch {
333
- confirmLoading = false; // reject:复位,保持打开
334
- }
335
- } else {
336
- setOpen(false, 'confirm');
337
- }
338
- }
339
-
340
- function cancel() {
341
- if (confirmLoading) return;
342
- onCancel?.();
343
- setOpen(false, 'cancel');
344
- }
345
-
346
- // 外部点击/Esc 统一按取消处理,reason 由 useDismiss 细分('esc' | 'outsideClick')
347
- function dismiss(reason: DismissReason) {
348
- if (confirmLoading) return; // 异步确认进行中不被外部点击/Esc 打断
349
- onCancel?.();
350
- setOpen(false, reason);
351
- }
352
-
353
- // --- 浮层命令式编排 (红线 #3):open 且浮层就绪时,
354
- // activate focus-trap(焦点移入浮层)、绑 dismiss(Esc/外部点击);
355
- // cleanup 里 undismiss、deactivate(归还焦点) ---
356
- let popupEl = $state<HTMLElement | null>(null);
357
- let rootEl = $state<HTMLElement | null>(null);
358
-
359
- // 浮层定位由 use:floating action 接管(避免 effect cleanup 与 {#if} 卸载竞态)。
360
- function onPlacement(info: { placement: Placement; arrowOffset: number }) {
361
- resolvedPlacement = info.placement;
362
- arrowOffset = info.arrowOffset;
363
- }
364
-
365
- // --- focus-trap + dismiss (红线 #3):open 且浮层就绪时绑定,cleanup 解绑/归还焦点 ---
366
- $effect(() => {
367
- if (!isOpen || !popupEl) return;
368
- // guardFocus=true(默认)激活 Tab 循环焦点陷阱;false 时跳过(允许 Tab 离开浮层)。
369
- const trap = guardFocus ? useFocusTrap(popupEl) : null;
370
- trap?.activate();
371
- let undismiss = () => {};
372
- // popup portal 到 body 后不在 rootEl 子树内:把 popupEl 列为 extraTargets,
373
- // 否则点击浮层内部会被误判为 outsideClick。点触发器在 rootEl 内由 onclick toggle。
374
- if (closeOnEsc || closeOnOutsideClick) {
375
- undismiss = useDismiss(rootEl ?? popupEl, {
376
- onDismiss: (reason) => {
377
- // onEscKeyDown:Esc 按下时先触发回调(在 dismiss 关闭前)。
378
- if (reason === 'esc' && onEscKeyDown) {
379
- // useDismiss 的 onDismiss 不直接传 KeyboardEvent,
380
- // 以合成空事件触发回调(符合接口契约)。
381
- const syntheticEv = new KeyboardEvent('keydown', { key: 'Escape', bubbles: true });
382
- onEscKeyDown(syntheticEv);
383
- }
384
- dismiss(reason);
385
- },
386
- escape: closeOnEsc,
387
- outsideClick: closeOnOutsideClick,
388
- extraTargets: [popupEl],
389
- // 外部点击:在 useDismiss 关闭判定之前触发 onClickOutside / onClickOutSide(关闭逻辑前)。
390
- // 调用方 preventDefault() 即阻止默认关闭(返回 false 跳过 onDismiss)。
391
- onOutsidePointer: (e) => {
392
- const handler = onClickOutside ?? onClickOutSide;
393
- if (!handler) return;
394
- handler(e);
395
- if (e.defaultPrevented) return false;
396
- },
397
- });
398
- }
399
- return () => {
400
- undismiss();
401
- // returnFocusOnClose=true(默认)时归还焦点给触发元素;false 时不归还。
402
- if (trap) {
403
- if (returnFocusOnClose) {
404
- trap.deactivate();
405
- } else {
406
- trap.deactivate({ returnFocus: false });
407
- }
408
- }
409
- // 浮层关闭即复位 loading(覆盖受控 open 在 loading 中被外部关闭的边界)。
410
- confirmLoading = false;
411
- };
412
- });
413
-
414
- // --- onAfterOpen / onAfterClose (红线 #3):入场/出场动效结束钩子 ---
415
- // onAfterOpen:浮层挂载 + 入场动画 animationend;motion 关闭时下一帧即触发。
416
- $effect(() => {
417
- if (!isOpen || !popupEl) return;
418
- if (!onAfterOpen) return;
419
- const node = popupEl;
420
- let raf = 0;
421
- // 是否真正有入场动画:motion 开启、非 reduced-motion、且实际解析出非零时长。
422
- const reduced =
423
- typeof window !== 'undefined' &&
424
- window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;
425
- // token 未注入或时长为 0 时 animationend 不会触发,退回下一帧判定(避免钩子丢失)。
426
- const dur =
427
- typeof window !== 'undefined'
428
- ? parseFloat(getComputedStyle(node).animationDuration || '0')
429
- : 0;
430
- const hasAnim = motionEnabled && !reduced && dur > 0;
431
- if (hasAnim) {
432
- const onEnd = (e: AnimationEvent) => {
433
- if (e.target !== node || e.animationName !== 'cd-popconfirm-in') return;
434
- onAfterOpen?.();
435
- };
436
- node.addEventListener('animationend', onEnd, { once: true });
437
- return () => node.removeEventListener('animationend', onEnd);
438
- }
439
- // 无动画:下一帧(确保已绘制)即视为完全可见。后台标签页 rAF 会被挂起,
440
- // 补一个 setTimeout 兜底确保钩子最终触发(取先到者,避免重复)。
441
- let done = false;
442
- const fire = () => {
443
- if (done) return;
444
- done = true;
445
- onAfterOpen?.();
446
- };
447
- raf = requestAnimationFrame(fire);
448
- const t = setTimeout(fire, 32);
449
- return () => {
450
- cancelAnimationFrame(raf);
451
- clearTimeout(t);
452
- };
453
- });
454
-
455
- // onAfterClose:open 由 true→false 后触发(当前无出场动画,关闭即卸载/隐藏)。
456
- // 簿记用普通变量避免 $state 自循环(按记忆教训)。
457
- let wasOpen = false;
458
- $effect(() => {
459
- const openNow = isOpen;
460
- if (wasOpen && !openNow) onAfterClose?.();
461
- wasOpen = openNow;
462
- });
463
- </script>
464
-
465
- <!-- svelte-ignore a11y_no_static_element_interactions -->
466
- <div
467
- class="cd-popconfirm"
468
- bind:this={rootEl}
469
- onpointerenter={onTriggerPointerEnter}
470
- onpointerleave={onTriggerPointerLeave}
471
- >
472
- <div
473
- class="cd-popconfirm__trigger"
474
- role="button"
475
- tabindex={disabled ? -1 : 0}
476
- aria-haspopup="dialog"
477
- aria-expanded={isOpen}
478
- aria-controls={isOpen ? popupId : undefined}
479
- aria-disabled={disabled || undefined}
480
- onclick={onTriggerClick}
481
- onkeydown={onTriggerKeydown}
482
- >
483
- {@render trigger?.()}
484
- </div>
485
-
486
- {#if shouldRender}
487
- <!-- destroyOnClose=false 时关闭仍保留 DOM(--hidden 隐藏),true 时 !isOpen 即被 {#if} 卸载。 -->
488
- <div
489
- class={popupCls}
490
- class:cd-popconfirm__popup--hidden={!isOpen}
491
- class:cd-popconfirm__popup--motion={motionEnabled}
492
- id={popupId}
493
- style={popupStyle}
494
- bind:this={popupEl}
495
- use:floating={{ trigger: rootEl, placement: resolvedPlacementProp, autoAdjust: true, offset: 8, arrowPointAtCenter, getContainer: getPopupContainer, onPlacement, open: isOpen }}
496
- role="dialog"
497
- tabindex="-1"
498
- aria-labelledby={titleId}
499
- aria-describedby={hasContent ? contentId : undefined}
500
- aria-hidden={!isOpen || undefined}
501
- onpointerenter={onPopupPointerEnter}
502
- onpointerleave={onPopupPointerLeave}
503
- onclick={stopPropagation ? (e) => e.stopPropagation() : undefined}
504
- >
505
- {#if showArrow}
506
- <div class="cd-popconfirm__arrow" style={arrowStyle} aria-hidden="true"></div>
507
- {/if}
508
- <div class="cd-popconfirm__body">
509
- {#if icon !== false}
510
- <span
511
- class="cd-popconfirm__icon cd-popconfirm__icon--{type}"
512
- aria-hidden="true"
513
- >
514
- {#if typeof icon === 'function'}
515
- {@render icon()}
516
- {:else if type === 'danger'}
517
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
518
- <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-width="1.5" />
519
- <path
520
- d="M8 4.5v4.2"
521
- stroke="currentColor"
522
- stroke-width="1.5"
523
- stroke-linecap="round"
524
- />
525
- <circle cx="8" cy="11.3" r="0.9" fill="currentColor" />
526
- </svg>
527
- {:else if type === 'warning'}
528
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
529
- <path
530
- d="M8 2 1.5 13.5h13L8 2Z"
531
- stroke="currentColor"
532
- stroke-width="1.5"
533
- stroke-linejoin="round"
534
- />
535
- <path
536
- d="M8 6.3v3"
537
- stroke="currentColor"
538
- stroke-width="1.5"
539
- stroke-linecap="round"
540
- />
541
- <circle cx="8" cy="11.4" r="0.85" fill="currentColor" />
542
- </svg>
543
- {:else}
544
- <svg width="16" height="16" viewBox="0 0 16 16" fill="none">
545
- <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-width="1.5" />
546
- <path
547
- d="M8 7.2v4"
548
- stroke="currentColor"
549
- stroke-width="1.5"
550
- stroke-linecap="round"
551
- />
552
- <circle cx="8" cy="4.7" r="0.9" fill="currentColor" />
553
- </svg>
554
- {/if}
555
- </span>
556
- {/if}
557
- <div class="cd-popconfirm__content-wrap">
558
- <div id={titleId} class="cd-popconfirm__title">
559
- {#if titleSnippet}
560
- {@render titleSnippet()}
561
- {:else}
562
- {title}
563
- {/if}
564
- </div>
565
- {#if hasContent}
566
- <div id={contentId} class="cd-popconfirm__content">
567
- {#if contentSnippet}
568
- {@render contentSnippet()}
569
- {:else}
570
- {content}
571
- {/if}
572
- </div>
573
- {/if}
574
- </div>
575
- </div>
576
- <div class="cd-popconfirm__footer">
577
- {#if showCancel}
578
- <Button size="small" {...cancelButtonProps} type={resolvedCancelType} disabled={confirmLoading} onclick={cancel}>
579
- {cancelText ?? loc().t('Popconfirm.cancel')}
580
- </Button>
581
- {/if}
582
- <Button
583
- size="small"
584
- {...okButtonProps}
585
- type={resolvedOkType}
586
- loading={confirmLoading}
587
- onclick={confirm}
588
- >
589
- {okText ?? loc().t('Popconfirm.confirm')}
590
- </Button>
591
- </div>
592
- </div>
593
- {/if}
594
- </div>
595
-
596
- <style>
597
- .cd-popconfirm {
598
- position: relative;
599
- display: inline-block;
600
- }
601
- .cd-popconfirm__trigger {
602
- display: inline-flex;
603
- align-items: center;
604
- cursor: pointer;
605
- }
606
- .cd-popconfirm__trigger:focus-visible {
607
- outline: none;
608
- box-shadow: var(--cd-focus-ring);
609
- border-radius: var(--cd-radius-1);
610
- }
611
- .cd-popconfirm__trigger[aria-disabled='true'] {
612
- cursor: not-allowed;
613
- }
614
-
615
- /* 浮层 portal 到 body,由 JS 写 position:fixed + transform 定位 */
616
- .cd-popconfirm__popup {
617
- z-index: var(--cd-popconfirm-z);
618
- inline-size: max-content;
619
- max-inline-size: var(--cd-popconfirm-max-width);
620
- padding: var(--cd-popconfirm-padding);
621
- background: var(--cd-popconfirm-bg);
622
- border-radius: var(--cd-popconfirm-radius);
623
- box-shadow: var(--cd-popconfirm-shadow);
624
- }
625
- /* destroyOnClose=false 关闭后保留 DOM 但不可见、不可交互、不占位 */
626
- .cd-popconfirm__popup--hidden {
627
- display: none;
628
- }
629
- /* motion:进场淡入 + 轻微缩放,token 时长/缓动;reduced-motion 退化 */
630
- .cd-popconfirm__popup--motion {
631
- animation: cd-popconfirm-in var(--cd-popconfirm-motion-duration)
632
- var(--cd-popconfirm-motion-easing, ease) both;
633
- }
634
- @keyframes cd-popconfirm-in {
635
- from {
636
- opacity: 0;
637
- transform: scale(0.96);
638
- }
639
- to {
640
- opacity: 1;
641
- transform: scale(1);
642
- }
643
- }
644
-
645
- /* arrow:旋转 45° 的纯色方块,交叉轴偏移由内联 style 控制 */
646
- .cd-popconfirm__arrow {
647
- position: absolute;
648
- inline-size: var(--cd-popconfirm-arrow-size);
649
- block-size: var(--cd-popconfirm-arrow-size);
650
- background: var(--cd-popconfirm-bg);
651
- transform: rotate(45deg);
652
- }
653
- /* 交叉轴居中补偿:仅在交叉轴方向回退半个箭头尺寸 */
654
- .cd-popconfirm__popup--top .cd-popconfirm__arrow,
655
- .cd-popconfirm__popup--bottom .cd-popconfirm__arrow {
656
- margin-inline-start: calc(var(--cd-popconfirm-arrow-size) / -2);
657
- }
658
- .cd-popconfirm__popup--left .cd-popconfirm__arrow,
659
- .cd-popconfirm__popup--right .cd-popconfirm__arrow {
660
- margin-block-start: calc(var(--cd-popconfirm-arrow-size) / -2);
661
- }
662
- /* 箭头吸附到浮层贴近触发器的那条边(按解析后的 side) */
663
- .cd-popconfirm__popup--top .cd-popconfirm__arrow {
664
- inset-block-end: calc(var(--cd-popconfirm-arrow-size) / -2);
665
- }
666
- .cd-popconfirm__popup--bottom .cd-popconfirm__arrow {
667
- inset-block-start: calc(var(--cd-popconfirm-arrow-size) / -2);
668
- }
669
- .cd-popconfirm__popup--left .cd-popconfirm__arrow {
670
- inset-inline-end: calc(var(--cd-popconfirm-arrow-size) / -2);
671
- }
672
- .cd-popconfirm__popup--right .cd-popconfirm__arrow {
673
- inset-inline-start: calc(var(--cd-popconfirm-arrow-size) / -2);
674
- }
675
-
676
- .cd-popconfirm__body {
677
- display: flex;
678
- gap: var(--cd-spacing-2);
679
- }
680
- .cd-popconfirm__icon {
681
- display: inline-flex;
682
- flex-shrink: 0;
683
- line-height: 1;
684
- }
685
- .cd-popconfirm__icon--danger {
686
- color: var(--cd-popconfirm-icon-color-danger);
687
- }
688
- .cd-popconfirm__icon--warning {
689
- color: var(--cd-popconfirm-icon-color-warning);
690
- }
691
- .cd-popconfirm__icon--default {
692
- color: var(--cd-popconfirm-icon-color-info);
693
- }
694
-
695
- .cd-popconfirm__content-wrap {
696
- min-inline-size: 0;
697
- }
698
- .cd-popconfirm__title {
699
- color: var(--cd-popconfirm-title-color);
700
- font-size: var(--cd-popconfirm-title-size);
701
- font-weight: 600;
702
- line-height: 1.4;
703
- }
704
- .cd-popconfirm__content {
705
- margin-block-start: var(--cd-spacing-1);
706
- color: var(--cd-popconfirm-color-text-secondary);
707
- font-size: var(--cd-popconfirm-content-size);
708
- line-height: 1.5;
709
- }
710
-
711
- .cd-popconfirm__footer {
712
- display: flex;
713
- justify-content: flex-end;
714
- gap: var(--cd-popconfirm-gap-footer);
715
- margin-block-start: var(--cd-spacing-3);
716
- }
717
-
718
- /* reduced-motion:禁用进场动画 */
719
- @media (prefers-reduced-motion: reduce) {
720
- .cd-popconfirm__popup--motion {
721
- animation: none;
722
- }
723
- }
724
- </style>