@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,511 +0,0 @@
1
- <!--
2
- Modal — see specs/components/feedback/Modal.spec.md
3
- fixed 遮罩+面板,portal 到 body(或 getContainer),role=dialog aria-modal,
4
- useFocusTrap 焦点捕获+归还、useDismiss Esc 关闭、useScrollLock 锁背景滚动,
5
- 遮罩点击关闭、ok/cancel 按钮、自定义尾部、reduced-motion。
6
- 堆叠 z-index 由 z-stack 模块级计数器分配(声明式 + 命令式共享)。
7
- destroyOnClose:关闭即卸载内容({#if}),重开重建。
8
- 命令式工厂 Modal.confirm/info/... 见 command.svelte.ts(已 Object.assign 到 Modal)。
9
- draggable:按住标题栏拖动面板,偏移 $state 派生为 transform 叠加在居中/距顶定位上,
10
- pointermove/up 绑 window 命令式 + cleanup,重开偏移重置。
11
- -->
12
- <script lang="ts">
13
- import type { Snippet } from 'svelte';
14
- import {
15
- useId,
16
- useFocusTrap,
17
- useDismiss,
18
- useScrollLock,
19
- useInertBackground,
20
- } from '@chenzy-design/core';
21
- import { Button } from '../button/index.js';
22
- import { useLocale } from '../locale-provider/index.js';
23
- import { getGlobalPopupContainer } from '../config-provider/index.js';
24
- import { acquireZIndex } from './z-stack.js';
25
-
26
- type OkType = 'primary' | 'danger';
27
-
28
- interface Props {
29
- open?: boolean;
30
- title?: string;
31
- titleSnippet?: Snippet;
32
- width?: number | string;
33
- centered?: boolean;
34
- closable?: boolean;
35
- maskClosable?: boolean;
36
- keyboard?: boolean;
37
- /** 为真时按住标题栏可拖动整个对话框。默认 false。 */
38
- draggable?: boolean;
39
- confirmLoading?: boolean;
40
- okText?: string;
41
- cancelText?: string;
42
- okType?: OkType;
43
- /** 关闭即卸载内部内容;重开重建。默认 false(保留 DOM 仅隐藏 via {#if isOpen})。 */
44
- destroyOnClose?: boolean;
45
- /** Portal 容器,缺省 document.body。脱离父层叠上下文。 */
46
- getContainer?: () => HTMLElement | null;
47
- footer?: Snippet<[{ ok: () => void; cancel: () => void }]> | null;
48
- children?: Snippet;
49
- ariaLabel?: string;
50
- onOk?: () => void;
51
- onCancel?: () => void;
52
- onOpenChange?: (open: boolean) => void;
53
- onAfterClose?: () => void;
54
- class?: string;
55
- /** 透传给确定按钮的额外 props(如 disabled、size 等)。loading 由 confirmLoading 控制,此处不重复。 */
56
- okButtonProps?: Record<string, unknown>;
57
- /** 透传给取消按钮的额外 props */
58
- cancelButtonProps?: Record<string, unknown>;
59
- /** 是否显示取消按钮。默认 true */
60
- hasCancel?: boolean;
61
- /** 预设宽度枚举,优先级低于 width prop */
62
- size?: 'small' | 'medium' | 'large' | 'full-width';
63
- /** 全屏模式 */
64
- fullScreen?: boolean;
65
- /** 关闭时保留 DOM(用 display:none 隐藏)。与 destroyOnClose 反义;默认 false(不保留,即关闭卸载) */
66
- keepDOM?: boolean;
67
- /** 配合 keepDOM 的懒挂载:true 时首次打开前不渲染内容。默认 true */
68
- lazyRender?: boolean;
69
- /** 内容区内联 style 字符串 */
70
- bodyStyle?: string;
71
- /** 遮罩层内联 style 字符串 */
72
- maskStyle?: string;
73
- /** Modal 高度 */
74
- height?: number | string;
75
- /** 底部按钮撑满宽度 */
76
- footerFill?: boolean;
77
- /** 内容区域额外 class */
78
- modalContentClass?: string;
79
- /** 自定义关闭图标(Snippet) */
80
- closeIcon?: Snippet;
81
- /** 是否显示遮罩。默认 true */
82
- mask?: boolean;
83
- }
84
-
85
- let {
86
- open,
87
- title,
88
- titleSnippet,
89
- width = 448,
90
- centered = false,
91
- closable = true,
92
- maskClosable = true,
93
- keyboard = true,
94
- draggable = false,
95
- confirmLoading = false,
96
- okText,
97
- cancelText,
98
- okType = 'primary',
99
- destroyOnClose = false,
100
- getContainer,
101
- footer,
102
- children,
103
- ariaLabel,
104
- onOk,
105
- onCancel,
106
- onOpenChange,
107
- onAfterClose,
108
- class: className,
109
- okButtonProps,
110
- cancelButtonProps,
111
- hasCancel,
112
- size,
113
- fullScreen = false,
114
- keepDOM = false,
115
- lazyRender = true,
116
- bodyStyle,
117
- maskStyle,
118
- height,
119
- footerFill = false,
120
- modalContentClass,
121
- closeIcon,
122
- mask = true,
123
- }: Props = $props();
124
-
125
- const titleId = useId('cd-modal-title');
126
- const loc = useLocale();
127
- // ConfigProvider 全局浮层容器默认;自身 getContainer prop 优先,未传时回退此值(再回退 body)。
128
- const globalPopupContainer = getGlobalPopupContainer();
129
-
130
- // --- 受控 open (红线 #1):不无条件回写 open,仅 onOpenChange/onCancel ---
131
- const isControlled = $derived(open !== undefined);
132
- let innerOpen = $state(getInitialOpen());
133
- const isOpen = $derived(isControlled ? !!open : innerOpen);
134
-
135
- function getInitialOpen(): boolean {
136
- return false;
137
- }
138
-
139
- const hasTitle = $derived(Boolean(titleSnippet) || Boolean(title));
140
-
141
- const SIZE_MAP = { small: '480px', medium: '600px', large: '800px', 'full-width': '100vw' } as const;
142
- const effectiveWidth = $derived(size ? SIZE_MAP[size] : (typeof width === 'number' ? `${width}px` : width));
143
- const heightStyle = $derived(height !== undefined ? (typeof height === 'number' ? `${height}px` : height) : '');
144
-
145
- const panelCls = $derived(['cd-modal', fullScreen ? 'cd-modal--fullscreen' : '', className].filter(Boolean).join(' '));
146
-
147
- // --- destroyOnClose:默认 false 时首开后保留 DOM(仅 isOpen 切换显隐),
148
- // true 时关闭即从 DOM 卸载({#if isOpen}),重开重建。
149
- // keepDOM=true 或 lazyRender=false 时,首开前亦渲染。 ---
150
- let hasBeenOpened = $state(false);
151
- $effect(() => {
152
- if (isOpen) hasBeenOpened = true;
153
- });
154
- const shouldRender = $derived(
155
- destroyOnClose ? isOpen : (keepDOM || !lazyRender || hasBeenOpened)
156
- );
157
-
158
- function cancel() {
159
- if (!isControlled) innerOpen = false;
160
- onOpenChange?.(false);
161
- onCancel?.();
162
- if (onAfterClose) queueMicrotask(() => onAfterClose?.());
163
- }
164
-
165
- function ok() {
166
- onOk?.();
167
- // 折中:非受控模式 ok 后自动关闭;受控模式由 onOk 回调控制 open
168
- if (!isControlled) {
169
- innerOpen = false;
170
- onOpenChange?.(false);
171
- }
172
- }
173
-
174
- function onMaskClick(e: MouseEvent) {
175
- if (maskClosable && e.target === e.currentTarget) {
176
- cancel();
177
- }
178
- }
179
-
180
- // --- 浮层命令式编排 (红线 #3):open 且面板就绪时,
181
- // activate focus-trap、绑 dismiss(Esc)、加 scroll-lock;
182
- // cleanup 里 deactivate(归还焦点)、解绑 dismiss、release scroll-lock ---
183
- let panelEl = $state<HTMLElement | null>(null);
184
- // portal 根(遮罩)—— 背景 inert 以它为锚,对兄弟节点(页面其余内容/下层浮层)生效。
185
- let maskEl = $state<HTMLElement | null>(null);
186
-
187
- $effect(() => {
188
- if (!isOpen || !panelEl) return;
189
- const trap = useFocusTrap(panelEl);
190
- trap.activate();
191
- const releaseScroll = useScrollLock();
192
- // 背景内容对 SR/键盘 inert+aria-hidden(spec §6);以遮罩为锚隐藏其兄弟节点。
193
- const releaseInert = maskEl ? useInertBackground(maskEl) : () => {};
194
- let undismiss = () => {};
195
- if (keyboard) {
196
- undismiss = useDismiss(panelEl, {
197
- onDismiss: () => cancel(),
198
- escape: true,
199
- outsideClick: false,
200
- });
201
- }
202
- return () => {
203
- undismiss();
204
- releaseInert();
205
- releaseScroll();
206
- trap.deactivate();
207
- };
208
- });
209
-
210
- // --- 堆叠 z-index (红线 #3):每次打开向模块计数器申请一层,关闭回收。
211
- // 与命令式 modal.confirm 共享计数器,多层叠放后开者在上。 ---
212
- let stackZ = $state<number | undefined>(undefined);
213
-
214
- $effect(() => {
215
- if (!isOpen) return;
216
- const { zIndex, release } = acquireZIndex();
217
- stackZ = zIndex;
218
- return () => {
219
- stackZ = undefined;
220
- release();
221
- };
222
- });
223
-
224
- // --- 拖拽 (红线 #2/#3):偏移量存 $state,派生为 transform;
225
- // pointerdown 在 header 起拖,pointermove/up 绑 window 命令式 + cleanup,
226
- // 以便拖出 header 仍跟随、松手在视口外亦能结束。重开偏移重置。 ---
227
- let dragX = $state(0);
228
- let dragY = $state(0);
229
-
230
- // 偏移叠加在现有居中/距顶定位之上(红线 #2:纯函数派生)。
231
- const panelTransform = $derived(
232
- draggable && (dragX !== 0 || dragY !== 0)
233
- ? `transform: translate(${dragX}px, ${dragY}px)`
234
- : undefined,
235
- );
236
-
237
- // 重开(isOpen 由 false→true)时重置偏移。
238
- let wasOpen = false;
239
- $effect(() => {
240
- if (isOpen && !wasOpen) {
241
- dragX = 0;
242
- dragY = 0;
243
- }
244
- wasOpen = isOpen;
245
- });
246
-
247
- function onHeaderPointerDown(e: PointerEvent) {
248
- if (!draggable) return;
249
- // 仅主键拖拽;避免拖到关闭按钮等交互元素时误触。
250
- if (e.button !== 0) return;
251
- const target = e.target as HTMLElement | null;
252
- if (target?.closest('.cd-modal__close')) return;
253
-
254
- const startX = e.clientX;
255
- const startY = e.clientY;
256
- const baseX = dragX;
257
- const baseY = dragY;
258
-
259
- function onMove(ev: PointerEvent) {
260
- let nextX = baseX + (ev.clientX - startX);
261
- let nextY = baseY + (ev.clientY - startY);
262
- // 边界:保留面板至少一部分可见(不让标题栏完全拖出视口)。
263
- if (panelEl) {
264
- const rect = panelEl.getBoundingClientRect();
265
- const margin = 40;
266
- const minX = -(rect.left - baseX) - rect.width + margin;
267
- const maxX = window.innerWidth - (rect.left - baseX) - margin;
268
- const minY = -(rect.top - baseY);
269
- const maxY = window.innerHeight - (rect.top - baseY) - margin;
270
- nextX = Math.min(Math.max(nextX, minX), maxX);
271
- nextY = Math.min(Math.max(nextY, minY), maxY);
272
- }
273
- dragX = nextX;
274
- dragY = nextY;
275
- }
276
- function onUp() {
277
- window.removeEventListener('pointermove', onMove);
278
- window.removeEventListener('pointerup', onUp);
279
- }
280
- window.addEventListener('pointermove', onMove);
281
- window.addEventListener('pointerup', onUp);
282
- }
283
-
284
- // --- portal action (红线 #3):命令式 appendChild 到 getContainer()/body,
285
- // 脱离父 DOM 层叠上下文;destroy 时 removeChild 归还/清理。 ---
286
- function portal(node: HTMLElement) {
287
- if (typeof document === 'undefined') {
288
- return { destroy() {} };
289
- }
290
- const target = getContainer?.() ?? globalPopupContainer?.() ?? document.body;
291
- target.appendChild(node);
292
- return {
293
- destroy() {
294
- if (node.parentNode) node.parentNode.removeChild(node);
295
- },
296
- };
297
- }
298
- </script>
299
-
300
- {#if shouldRender}
301
- <!-- 遮罩 role=presentation:点击关闭为鼠标增强,键盘等价为 Esc(focus-trap + useDismiss 提供)
302
- use:portal 命令式挂载到 getContainer()/body,脱离父层叠上下文;
303
- !isOpen 时(destroyOnClose=false 保留 DOM)以 hidden class 隐藏。 -->
304
- <div
305
- class="cd-modal-mask"
306
- class:cd-modal-mask--centered={centered}
307
- class:cd-modal-mask--hidden={!isOpen}
308
- class:cd-modal-mask--no-mask={!mask}
309
- bind:this={maskEl}
310
- style={[stackZ !== undefined ? `--cd-modal-z:${stackZ}` : '', maskStyle ?? ''].filter(Boolean).join('; ') || undefined}
311
- onclick={onMaskClick}
312
- role="presentation"
313
- use:portal
314
- >
315
- <div
316
- class={panelCls}
317
- bind:this={panelEl}
318
- role="dialog"
319
- aria-modal="true"
320
- aria-labelledby={hasTitle ? titleId : undefined}
321
- aria-label={hasTitle ? undefined : ariaLabel}
322
- style="inline-size: {effectiveWidth}{heightStyle ? `; block-size: ${heightStyle}` : ''}{panelTransform ? `; ${panelTransform}` : ''}"
323
- >
324
- {#if hasTitle || closable}
325
- <!-- draggable:标题栏起拖。pointerdown 命令式绑 window move/up(见脚本)。
326
- 拖拽是鼠标增强,键盘/焦点陷阱不受影响;header role=presentation 与遮罩同理
327
- (内部 h2/关闭按钮各自保留语义角色),满足静态元素交互的 a11y 规则。 -->
328
- <!-- svelte-ignore a11y_no_static_element_interactions -->
329
- <header
330
- class="cd-modal__header"
331
- class:cd-modal__header--draggable={draggable}
332
- onpointerdown={draggable ? onHeaderPointerDown : undefined}
333
- >
334
- {#if hasTitle}
335
- <h2 id={titleId} class="cd-modal__title">
336
- {#if titleSnippet}
337
- {@render titleSnippet()}
338
- {:else}
339
- {title}
340
- {/if}
341
- </h2>
342
- {:else}
343
- <span></span>
344
- {/if}
345
- {#if closable}
346
- <button
347
- type="button"
348
- class="cd-modal__close"
349
- aria-label={loc().t('Modal.close')}
350
- onclick={cancel}
351
- >
352
- {#if closeIcon}
353
- {@render closeIcon()}
354
- {:else}
355
- <svg
356
- width="16"
357
- height="16"
358
- viewBox="0 0 16 16"
359
- fill="none"
360
- aria-hidden="true"
361
- >
362
- <path
363
- d="M3 3l10 10M13 3L3 13"
364
- stroke="currentColor"
365
- stroke-width="1.5"
366
- stroke-linecap="round"
367
- />
368
- </svg>
369
- {/if}
370
- </button>
371
- {/if}
372
- </header>
373
- {/if}
374
-
375
- <div class={['cd-modal__body', modalContentClass].filter(Boolean).join(' ')} style={bodyStyle ?? undefined}>
376
- {@render children?.()}
377
- </div>
378
-
379
- {#if footer !== null}
380
- <footer class="cd-modal__footer" class:cd-modal__footer--fill={footerFill}>
381
- {#if footer}
382
- {@render footer({ ok, cancel })}
383
- {:else}
384
- {#if hasCancel !== false}
385
- <Button onclick={cancel} {...(cancelButtonProps ?? {})}>{cancelText ?? loc().t('Modal.cancelText')}</Button>
386
- {/if}
387
- <Button type={okType} onclick={ok} loading={confirmLoading} {...(okButtonProps ?? {})}>
388
- {okText ?? loc().t('Modal.okText')}
389
- </Button>
390
- {/if}
391
- </footer>
392
- {/if}
393
- </div>
394
- </div>
395
- {/if}
396
-
397
- <style>
398
- .cd-modal-mask {
399
- position: fixed;
400
- inset: 0;
401
- z-index: var(--cd-modal-z);
402
- display: flex;
403
- justify-content: center;
404
- align-items: flex-start;
405
- padding: var(--cd-modal-padding);
406
- background: var(--cd-modal-mask-bg);
407
- overflow: auto;
408
- }
409
- .cd-modal-mask--centered {
410
- align-items: center;
411
- }
412
- /* destroyOnClose=false 时关闭仅隐藏、保留 DOM 与内部状态 */
413
- .cd-modal-mask--hidden {
414
- display: none;
415
- }
416
- .cd-modal {
417
- box-sizing: border-box;
418
- max-inline-size: 90vw;
419
- max-block-size: 90vh;
420
- margin-block-start: 100px;
421
- padding: var(--cd-modal-padding);
422
- background: var(--cd-modal-bg);
423
- border-radius: var(--cd-modal-radius);
424
- box-shadow: var(--cd-modal-shadow);
425
- overflow: auto;
426
- }
427
- .cd-modal-mask--centered .cd-modal {
428
- margin-block-start: 0;
429
- }
430
- .cd-modal__header {
431
- display: flex;
432
- align-items: flex-start;
433
- justify-content: space-between;
434
- gap: var(--cd-modal-header-gap);
435
- margin-block-end: var(--cd-modal-header-gap);
436
- }
437
- .cd-modal__header--draggable {
438
- cursor: move;
439
- user-select: none;
440
- touch-action: none;
441
- }
442
- /* 关闭按钮区域保留默认指针,避免落在「可拖拽」视觉上 */
443
- .cd-modal__header--draggable .cd-modal__close {
444
- cursor: pointer;
445
- }
446
- .cd-modal__title {
447
- margin: 0;
448
- color: var(--cd-modal-title-color);
449
- font-size: var(--cd-modal-title-size);
450
- font-weight: 600;
451
- line-height: 1.4;
452
- }
453
- .cd-modal__close {
454
- display: inline-flex;
455
- align-items: center;
456
- justify-content: center;
457
- inline-size: 28px;
458
- block-size: 28px;
459
- padding: 0;
460
- border: none;
461
- border-radius: var(--cd-modal-radius);
462
- background: transparent;
463
- color: var(--cd-modal-close-color);
464
- cursor: pointer;
465
- }
466
- .cd-modal__close:hover {
467
- background: var(--cd-modal-close-hover-bg);
468
- }
469
- .cd-modal__close:focus-visible {
470
- outline: none;
471
- box-shadow: var(--cd-focus-ring);
472
- }
473
- .cd-modal__body {
474
- color: var(--cd-modal-body-color);
475
- }
476
- .cd-modal__footer {
477
- display: flex;
478
- justify-content: flex-end;
479
- gap: var(--cd-modal-footer-gap);
480
- margin-block-start: var(--cd-modal-padding);
481
- }
482
-
483
- .cd-modal--fullscreen {
484
- inline-size: 100vw !important;
485
- block-size: 100vh !important;
486
- max-inline-size: none !important;
487
- max-block-size: none !important;
488
- margin: 0 !important;
489
- border-radius: 0;
490
- }
491
- .cd-modal-mask--no-mask {
492
- background: transparent;
493
- pointer-events: none;
494
- }
495
- .cd-modal-mask--no-mask .cd-modal {
496
- pointer-events: auto;
497
- }
498
- .cd-modal__footer--fill {
499
- justify-content: stretch;
500
- }
501
- .cd-modal__footer--fill > :global(*) {
502
- flex: 1;
503
- }
504
-
505
- @media (prefers-reduced-motion: reduce) {
506
- .cd-modal-mask,
507
- .cd-modal {
508
- animation: none;
509
- }
510
- }
511
- </style>
@@ -1,24 +0,0 @@
1
- <!--
2
- 仅供 Modal.kbd.test.ts(browser project)使用的焦点陷阱 e2e 夹具。
3
- trigger 按钮控制 open(受控);测试先聚焦 trigger 再打开 Modal,
4
- 验证:打开后焦点进入对话框、Tab 被困在 Modal 内循环、关闭后焦点归还 trigger。
5
- Modal 默认 footer 有 Cancel/OK 两个按钮 + 关闭叉,构成多个可聚焦点用于测 Tab 循环。
6
- -->
7
- <script lang="ts">
8
- import { LocaleProvider } from '../locale-provider/index.js';
9
- import Modal from './Modal.svelte';
10
-
11
- let open = $state(false);
12
- </script>
13
-
14
- <LocaleProvider locale="en_US">
15
- <button type="button" data-testid="trigger" onclick={() => (open = true)}>open modal</button>
16
- <Modal
17
- {open}
18
- title="Delete item"
19
- onOpenChange={(v) => (open = v)}
20
- onCancel={() => (open = false)}
21
- >
22
- <p>Are you sure?</p>
23
- </Modal>
24
- </LocaleProvider>
@@ -1,103 +0,0 @@
1
- /**
2
- * modal — 命令式 modal.confirm/info/success/warning/error 入口。
3
- * 每次调用 mount 一个独立 ConfirmModal 到 body 的临时 host,关闭后 unmount 并移除。
4
- * z-index 随打开计数递增以支持堆叠。复用基础 Modal(焦点捕获/滚动锁/Esc)。
5
- * `.svelte.ts` 以使用 $state props 容器支持 update。
6
- * See specs/components/feedback/Modal.spec.md(命令式工厂)。
7
- */
8
-
9
- import { acquireZIndex } from './z-stack.js';
10
-
11
- type ConfirmType = 'confirm' | 'info' | 'success' | 'warning' | 'error';
12
-
13
- // Module-level registry of all active handles for destroyAll()
14
- const activeHandles = new Set<ModalCommandHandle>();
15
-
16
- export interface ModalCommandConfig {
17
- title?: string;
18
- content?: string;
19
- okText?: string;
20
- cancelText?: string;
21
- showCancel?: boolean;
22
- width?: number | string;
23
- centered?: boolean;
24
- /** 返回 Promise 时确认按钮自动 loading,resolve 后关闭、reject 保持打开 */
25
- onOk?: () => void | Promise<unknown>;
26
- onCancel?: () => void;
27
- }
28
-
29
- export interface ModalCommandHandle {
30
- /** 立即销毁该弹框 */
31
- destroy: () => void;
32
- /** 更新已打开弹框的部分配置 */
33
- update: (next: Partial<ModalCommandConfig>) => void;
34
- }
35
-
36
- function noop(): ModalCommandHandle {
37
- return { destroy: () => {}, update: () => {} };
38
- }
39
-
40
- function spawn(type: ConfirmType, config: ModalCommandConfig): ModalCommandHandle {
41
- if (typeof document === 'undefined') return noop();
42
-
43
- const { zIndex, release } = acquireZIndex();
44
-
45
- const host = document.createElement('div');
46
- host.className = 'cd-modal-command-host';
47
- document.body.appendChild(host);
48
-
49
- let unmounted = false;
50
- let api: { destroy: () => void; update: (p: Partial<ModalCommandConfig>) => void } | null = null;
51
-
52
- function cleanup() {
53
- if (unmounted) return;
54
- unmounted = true;
55
- release();
56
- api?.destroy();
57
- if (host.parentNode) host.parentNode.removeChild(host);
58
- activeHandles.delete(handle);
59
- }
60
-
61
- void (async () => {
62
- const { mount, unmount } = await import('svelte');
63
- const { default: ConfirmModal } = await import('./ConfirmModal.svelte');
64
- if (unmounted) {
65
- if (host.parentNode) host.parentNode.removeChild(host);
66
- return;
67
- }
68
- const props = $state({
69
- type,
70
- ...config,
71
- zIndex,
72
- onClose: () => cleanup(),
73
- });
74
- const instance = mount(ConfirmModal, { target: host, props });
75
- api = {
76
- destroy: () => unmount(instance, { outro: false }),
77
- update: (p) => Object.assign(props, p),
78
- };
79
- })();
80
-
81
- const handle: ModalCommandHandle = {
82
- destroy: cleanup,
83
- update: (next) => api?.update(next),
84
- };
85
- activeHandles.add(handle);
86
- return handle;
87
- }
88
-
89
- export function destroyAll(): void {
90
- for (const handle of [...activeHandles]) {
91
- handle.destroy();
92
- }
93
- }
94
-
95
- export const modal = {
96
- confirm: (config: ModalCommandConfig): ModalCommandHandle =>
97
- spawn('confirm', { showCancel: true, ...config }),
98
- info: (config: ModalCommandConfig): ModalCommandHandle => spawn('info', config),
99
- success: (config: ModalCommandConfig): ModalCommandHandle => spawn('success', config),
100
- warning: (config: ModalCommandConfig): ModalCommandHandle => spawn('warning', config),
101
- error: (config: ModalCommandConfig): ModalCommandHandle => spawn('error', config),
102
- destroyAll,
103
- };
@@ -1,30 +0,0 @@
1
- import ModalComponent from './Modal.svelte';
2
- import { modal } from './command.svelte.js';
3
- import type { ModalCommandConfig, ModalCommandHandle } from './command.svelte.js';
4
-
5
- type ModalCommands = {
6
- confirm: (config: ModalCommandConfig) => ModalCommandHandle;
7
- info: (config: ModalCommandConfig) => ModalCommandHandle;
8
- success: (config: ModalCommandConfig) => ModalCommandHandle;
9
- warning: (config: ModalCommandConfig) => ModalCommandHandle;
10
- error: (config: ModalCommandConfig) => ModalCommandHandle;
11
- };
12
-
13
- /**
14
- * Modal —— 声明式组件 + 命令式工厂(Modal.confirm/info/success/warning/error)。
15
- * 同时保留独立的 `modal` 对象供解构使用;两者共享同一实现。
16
- */
17
- export const Modal: typeof ModalComponent & ModalCommands = Object.assign(ModalComponent, {
18
- confirm: modal.confirm,
19
- info: modal.info,
20
- success: modal.success,
21
- warning: modal.warning,
22
- error: modal.error,
23
- });
24
-
25
- export { meta as modalMeta } from './meta.js';
26
- export {
27
- modal,
28
- type ModalCommandConfig,
29
- type ModalCommandHandle,
30
- } from './command.svelte.js';