@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,775 +0,0 @@
1
- <!--
2
- RangePicker — see specs/components/input/DatePicker.spec.md(range 范围选择)
3
- 双面板(两个月并排,右面板=左面板+1)序列选择:第一次点击设起始、第二次设结束,
4
- 自动排序 start<=end,起止可落在不同面板,hover 跨面板预览区间。
5
- 受控 value=[start,end](Date|null 元组)不回写 (红线 #1),仅 onChange。
6
- 本地化走 Intl.DateTimeFormat。useDismiss / 几何由 $effect 管理 (红线 #3)。
7
- 复用 @chenzy-design/core 日期纯函数(getMonthGrid/addMonths/isSameDay/startOfDay/weekdayOrder)。
8
- maxRange: 起止跨度上限(天)。选定起始后,超出 maxRange 天的日期置灰禁用(daysBetween 纯函数判定,红线 #2)。
9
- -->
10
- <script lang="ts">
11
- import { untrack, tick } from 'svelte';
12
- import {
13
- useId,
14
- useDismiss,
15
- useFocusTrap,
16
- isSameDay,
17
- startOfDay,
18
- addMonths,
19
- getMonthGrid,
20
- weekdayOrder,
21
- gridFocusMove,
22
- daysBetween,
23
- type GridFocusKey,
24
- } from '@chenzy-design/core';
25
- import { useLocale } from '../locale-provider/index.js';
26
-
27
- type Size = 'small' | 'default' | 'large';
28
- type Status = 'default' | 'warning' | 'error';
29
- type WeekStart = 0 | 1;
30
- type RangeValue = [Date | null, Date | null];
31
-
32
- interface Props {
33
- value?: RangeValue | null;
34
- defaultValue?: RangeValue | null;
35
- open?: boolean;
36
- defaultOpen?: boolean;
37
- startPlaceholder?: string;
38
- endPlaceholder?: string;
39
- size?: Size;
40
- status?: Status;
41
- disabled?: boolean;
42
- clearable?: boolean;
43
- disabledDate?: (date: Date) => boolean;
44
- /** 起止跨度上限(天)。选定起始后,超出该跨度的日期被禁用。 */
45
- maxRange?: number;
46
- weekStart?: WeekStart;
47
- locale?: string;
48
- onChange?: (v: RangeValue | null) => void;
49
- onOpenChange?: (open: boolean) => void;
50
- /** 可见年月切换 (头部导航)。panelDate 为左面板月份。 */
51
- onPanelChange?: (e: { panelDate: Date }) => void;
52
- /** 点击清除。 */
53
- onClear?: (e: Record<string, never>) => void;
54
- /** 触发器获得焦点。 */
55
- onFocus?: (e: FocusEvent) => void;
56
- /** 触发器失去焦点。 */
57
- onBlur?: (e: FocusEvent) => void;
58
- ariaLabel?: string;
59
- }
60
-
61
- let {
62
- value,
63
- defaultValue = null,
64
- open,
65
- defaultOpen = false,
66
- startPlaceholder,
67
- endPlaceholder,
68
- size = 'default',
69
- status = 'default',
70
- disabled = false,
71
- clearable = true,
72
- disabledDate,
73
- maxRange,
74
- weekStart = 0,
75
- locale = 'zh-CN',
76
- onChange,
77
- onOpenChange,
78
- onPanelChange,
79
- onClear,
80
- onFocus,
81
- onBlur,
82
- ariaLabel,
83
- }: Props = $props();
84
-
85
- const loc = useLocale();
86
- const dialogId = useId('cd-range-picker-panel');
87
- // 左右两个日期网格容器 id(aria-activedescendant 指向其中的 cell id 前缀)
88
- const leftGridId = useId('cd-range-picker-grid-l');
89
- const rightGridId = useId('cd-range-picker-grid-r');
90
-
91
- function normPair(v: RangeValue | null | undefined): RangeValue {
92
- if (!v) return [null, null];
93
- return [v[0] ? startOfDay(v[0]) : null, v[1] ? startOfDay(v[1]) : null];
94
- }
95
-
96
- // --- 受控 value (红线 #1) ---
97
- const isValueControlled = $derived(value !== undefined);
98
- let innerValue = $state<RangeValue>(untrack(() => normPair(defaultValue)));
99
- const current = $derived<RangeValue>(isValueControlled ? normPair(value) : innerValue);
100
- const startVal = $derived(current[0]);
101
- const endVal = $derived(current[1]);
102
-
103
- function setValue(next: RangeValue) {
104
- if (!isValueControlled) innerValue = next;
105
- onChange?.(next[0] === null && next[1] === null ? null : next);
106
- }
107
-
108
- // --- 受控 open (红线 #1) ---
109
- const isOpenControlled = $derived(open !== undefined);
110
- let innerOpen = $state(untrack(() => defaultOpen));
111
- const isOpen = $derived(isOpenControlled ? !!open : innerOpen);
112
-
113
- function setOpen(next: boolean) {
114
- if (next === isOpen) return;
115
- if (!isOpenControlled) innerOpen = next;
116
- onOpenChange?.(next);
117
- }
118
-
119
- function toggleOpen() {
120
- if (disabled) return;
121
- setOpen(!isOpen);
122
- }
123
-
124
- // --- 选择状态机:null=待选起始;'end'=已选起始待选结束 ---
125
- const today = startOfDay(new Date());
126
- let phase = $state<'start' | 'end'>('start');
127
- let pendingStart = $state<Date | null>(null);
128
- let previewEnd = $state<Date | null>(null);
129
-
130
- // --- 面板游标月份 ---
131
- let cursor = $state(untrack(() => startOfDay(normPair(defaultValue)[0] ?? new Date())));
132
- // 键盘高亮日 (网格 roving 焦点;aria-activedescendant 指向它)
133
- let highlight = $state<Date | null>(null);
134
- $effect(() => {
135
- if (isOpen) {
136
- cursor = startOfDay(startVal ?? new Date());
137
- phase = 'start';
138
- pendingStart = null;
139
- previewEnd = null;
140
- highlight = startOfDay(startVal ?? new Date());
141
- } else {
142
- highlight = null;
143
- }
144
- });
145
-
146
- // --- Intl 格式化 ---
147
- const triggerFormat = $derived(
148
- new Intl.DateTimeFormat(locale, { year: 'numeric', month: '2-digit', day: '2-digit' }),
149
- );
150
- const headerFormat = $derived(new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'long' }));
151
- const weekdayFormat = $derived(new Intl.DateTimeFormat(locale, { weekday: 'short' }));
152
- const weekdayLongFormat = $derived(new Intl.DateTimeFormat(locale, { weekday: 'long' }));
153
-
154
- const startText = $derived(
155
- startVal ? triggerFormat.format(startVal) : (startPlaceholder ?? loc().t('DatePicker.startPlaceholder')),
156
- );
157
- const endText = $derived(
158
- endVal ? triggerFormat.format(endVal) : (endPlaceholder ?? loc().t('DatePicker.endPlaceholder')),
159
- );
160
- // --- 双面板:cursor = 左面板月份,右面板 = 左 + 1 ---
161
- const rightCursor = $derived(addMonths(cursor, 1));
162
- const leftHeaderText = $derived(headerFormat.format(cursor));
163
- const rightHeaderText = $derived(headerFormat.format(rightCursor));
164
- const weekdayNames = $derived(
165
- weekdayOrder(weekStart).map((dow) => weekdayFormat.format(new Date(2023, 0, 1 + dow))),
166
- );
167
- const weekdayLongNames = $derived(
168
- weekdayOrder(weekStart).map((dow) => weekdayLongFormat.format(new Date(2023, 0, 1 + dow))),
169
- );
170
- const leftGrid = $derived(getMonthGrid(cursor, weekStart));
171
- const rightGrid = $derived(getMonthGrid(rightCursor, weekStart));
172
- // 6×7 行结构 (role=row / gridcell)。getMonthGrid 固定返回 42 格。
173
- const leftRows = $derived(Array.from({ length: 6 }, (_, r) => leftGrid.slice(r * 7, r * 7 + 7)));
174
- const rightRows = $derived(Array.from({ length: 6 }, (_, r) => rightGrid.slice(r * 7, r * 7 + 7)));
175
- function cellId(prefix: string, date: Date): string {
176
- return `${prefix}-${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;
177
- }
178
- const showClear = $derived(clearable && !disabled && (startVal !== null || endVal !== null));
179
-
180
- // 整体左右翻一个月(左面板 −1 / 右面板 +1 联动,两面板始终相邻)
181
- function setCursor(next: Date) {
182
- cursor = next;
183
- onPanelChange?.({ panelDate: next });
184
- }
185
- function prevMonth() {
186
- setCursor(addMonths(cursor, -1));
187
- }
188
- function nextMonth() {
189
- setCursor(addMonths(cursor, 1));
190
- }
191
-
192
- // 选区端点(选择中用 pendingStart + previewEnd,否则用已提交值)
193
- const rangeStart = $derived(phase === 'end' ? pendingStart : startVal);
194
- const rangeEnd = $derived(phase === 'end' ? previewEnd : endVal);
195
- // 归一后的 [lo, hi](用于区间内判定)
196
- const span = $derived.by<[number, number] | null>(() => {
197
- const a = rangeStart;
198
- const b = rangeEnd;
199
- if (!a || !b) return null;
200
- const ta = a.getTime();
201
- const tb = b.getTime();
202
- return ta <= tb ? [ta, tb] : [tb, ta];
203
- });
204
-
205
- function inRange(date: Date): boolean {
206
- if (!span) return false;
207
- const t = startOfDay(date).getTime();
208
- return t > span[0] && t < span[1];
209
- }
210
- function isEdge(date: Date): boolean {
211
- return isSameDay(date, rangeStart) || isSameDay(date, rangeEnd);
212
- }
213
-
214
- // maxRange:选定起始(phase==='end')后,离 pendingStart 超过 maxRange-1 天的日期禁用
215
- // (跨度含两端,故 maxRange=7 表示最多 7 天,即间隔 ≤ 6)
216
- function exceedsMaxRange(date: Date): boolean {
217
- if (maxRange == null || maxRange <= 0) return false;
218
- if (phase !== 'end' || !pendingStart) return false;
219
- return Math.abs(daysBetween(pendingStart, date)) > maxRange - 1;
220
- }
221
-
222
- // 单元格综合禁用:外部 disabledDate 或 超出 maxRange
223
- function isCellDisabled(date: Date): boolean {
224
- return (disabledDate?.(date) ?? false) || exceedsMaxRange(date);
225
- }
226
-
227
- function selectDate(date: Date) {
228
- if (isCellDisabled(date)) return;
229
- const day = startOfDay(date);
230
- if (phase === 'start') {
231
- pendingStart = day;
232
- previewEnd = day;
233
- phase = 'end';
234
- return;
235
- }
236
- // phase === 'end':定第二端,排序后提交
237
- const a = pendingStart ?? day;
238
- const [lo, hi] = a.getTime() <= day.getTime() ? [a, day] : [day, a];
239
- setValue([lo, hi]);
240
- phase = 'start';
241
- pendingStart = null;
242
- previewEnd = null;
243
- setOpen(false);
244
- }
245
-
246
- function onCellHover(date: Date) {
247
- if (phase === 'end' && !isCellDisabled(date)) previewEnd = startOfDay(date);
248
- }
249
-
250
- function clear(e: MouseEvent) {
251
- e.stopPropagation();
252
- if (disabled) return;
253
- setValue([null, null]);
254
- phase = 'start';
255
- pendingStart = null;
256
- previewEnd = null;
257
- onClear?.({});
258
- }
259
-
260
- // 高亮所在面板:在左面板月份则左,否则右(决定 aria-activedescendant 落哪个网格)
261
- const highlightInLeft = $derived(
262
- !!highlight &&
263
- highlight.getFullYear() === cursor.getFullYear() &&
264
- highlight.getMonth() === cursor.getMonth(),
265
- );
266
- const leftActiveId = $derived(
267
- highlight && highlightInLeft ? cellId(leftGridId, highlight) : undefined,
268
- );
269
- const rightActiveId = $derived(
270
- highlight && !highlightInLeft ? cellId(rightGridId, highlight) : undefined,
271
- );
272
-
273
- // 把高亮移到 next,跨出双面板可见范围时整体翻页(cursor=左面板月份)
274
- function setHighlight(next: Date) {
275
- highlight = startOfDay(next);
276
- // 双面板显示 cursor 月 + cursor+1 月;高亮落在其中一个则不翻页
277
- const inLeft = next.getFullYear() === cursor.getFullYear() && next.getMonth() === cursor.getMonth();
278
- const inRight =
279
- next.getFullYear() === rightCursor.getFullYear() && next.getMonth() === rightCursor.getMonth();
280
- if (!inLeft && !inRight) {
281
- setCursor(startOfDay(new Date(next.getFullYear(), next.getMonth(), 1)));
282
- }
283
- }
284
-
285
- const GRID_NAV_KEYS = new Set<string>([
286
- 'ArrowLeft',
287
- 'ArrowRight',
288
- 'ArrowUp',
289
- 'ArrowDown',
290
- 'PageUp',
291
- 'PageDown',
292
- 'Home',
293
- 'End',
294
- ]);
295
-
296
- // 日期网格键盘导航 (WAI-ARIA grid,红线 #2:方向用纯 gridFocusMove)
297
- function onGridKeydown(e: KeyboardEvent) {
298
- const key = e.key;
299
- if (key === 'Enter' || key === ' ') {
300
- e.preventDefault();
301
- if (highlight) selectDate(highlight);
302
- return;
303
- }
304
- if (key === 'Escape') {
305
- e.preventDefault();
306
- setOpen(false);
307
- return;
308
- }
309
- const base = highlight ?? today;
310
- if (e.shiftKey && (key === 'PageUp' || key === 'PageDown')) {
311
- e.preventDefault();
312
- setHighlight(addMonths(base, key === 'PageUp' ? -12 : 12));
313
- return;
314
- }
315
- if (!GRID_NAV_KEYS.has(key)) return;
316
- e.preventDefault();
317
- const next = gridFocusMove(base, key as GridFocusKey, 'month', weekStart);
318
- if (next) {
319
- setHighlight(next);
320
- if (phase === 'end' && !isCellDisabled(next)) previewEnd = startOfDay(next);
321
- }
322
- }
323
-
324
- function onTriggerKeydown(e: KeyboardEvent) {
325
- if (disabled) return;
326
- if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') {
327
- e.preventDefault();
328
- setOpen(true);
329
- } else if (e.key === 'Escape' && isOpen) {
330
- e.preventDefault();
331
- setOpen(false);
332
- }
333
- }
334
-
335
- // --- useDismiss (红线 #3) ---
336
- let rootEl = $state<HTMLDivElement | null>(null);
337
- let panelEl = $state<HTMLDivElement | null>(null);
338
- let leftGridEl = $state<HTMLDivElement | null>(null);
339
- let rightGridEl = $state<HTMLDivElement | null>(null);
340
- $effect(() => {
341
- if (!isOpen || !rootEl) return;
342
- return useDismiss(rootEl, {
343
- onDismiss: () => setOpen(false),
344
- escape: true,
345
- outsideClick: true,
346
- });
347
- });
348
-
349
- // --- focus trap (红线 #3): 困住 Tab、关闭归还焦点;进场落焦高亮所在网格 ---
350
- $effect(() => {
351
- if (!isOpen || !panelEl) return;
352
- const trap = useFocusTrap(panelEl, { trapTab: true, returnFocus: true });
353
- trap.activate();
354
- void tick().then(() => {
355
- const target = highlightInLeft ? leftGridEl : rightGridEl;
356
- target?.focus();
357
- });
358
- return () => trap.deactivate();
359
- });
360
-
361
- const cls = $derived(
362
- [
363
- 'cd-range-picker',
364
- `cd-range-picker--${size}`,
365
- `cd-range-picker--${status}`,
366
- disabled && 'cd-range-picker--disabled',
367
- isOpen && 'cd-range-picker--open',
368
- ]
369
- .filter(Boolean)
370
- .join(' '),
371
- );
372
- </script>
373
-
374
- <div class={cls} bind:this={rootEl} aria-invalid={status === 'error' || undefined}>
375
- <div class="cd-range-picker__control">
376
- <button
377
- type="button"
378
- class="cd-range-picker__trigger"
379
- aria-haspopup="dialog"
380
- aria-expanded={isOpen}
381
- aria-controls={dialogId}
382
- aria-label={ariaLabel}
383
- {disabled}
384
- onclick={toggleOpen}
385
- onkeydown={onTriggerKeydown}
386
- onfocus={onFocus}
387
- onblur={onBlur}
388
- >
389
- <span class="cd-range-picker__value" class:cd-range-picker__value--placeholder={startVal === null}>
390
- {startText}
391
- </span>
392
- <span class="cd-range-picker__sep" aria-hidden="true">→</span>
393
- <span class="cd-range-picker__value" class:cd-range-picker__value--placeholder={endVal === null}>
394
- {endText}
395
- </span>
396
- </button>
397
-
398
- {#if showClear}
399
- <button type="button" class="cd-range-picker__clear" aria-label={loc().t('DatePicker.clear')} onclick={clear}>
400
- <svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false">
401
- <path
402
- fill="currentColor"
403
- d="M8 1a7 7 0 1 0 0 14A7 7 0 0 0 8 1Zm2.5 9.1-1.4 1.4L8 9.4 6.5 11l-1.4-1.4L6.6 8 5.1 6.5 6.5 5.1 8 6.6 9.5 5.1l1.4 1.4L9.4 8l1.1 1.1Z"
404
- />
405
- </svg>
406
- </button>
407
- {/if}
408
- </div>
409
-
410
- {#if isOpen}
411
- <div bind:this={panelEl} class="cd-range-picker__panel" id={dialogId} role="dialog" aria-modal="false" aria-label={loc().t('DatePicker.rangeTriggerLabel')} tabindex="-1">
412
- <div class="cd-range-picker__panels">
413
- <!-- 左面板 -->
414
- <div class="cd-range-picker__month">
415
- <div class="cd-range-picker__header">
416
- <button type="button" class="cd-range-picker__nav" aria-label={loc().t('DatePicker.prevMonth')} onclick={prevMonth}>
417
- <svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true" focusable="false">
418
- <path fill="currentColor" d="M10 3.5 5.5 8l4.5 4.5 1-1L7.5 8 11 4.5l-1-1Z" />
419
- </svg>
420
- </button>
421
- <span class="cd-range-picker__title">{leftHeaderText}</span>
422
- <span class="cd-range-picker__nav cd-range-picker__nav--ghost" aria-hidden="true"></span>
423
- </div>
424
-
425
- <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
426
- <div
427
- bind:this={leftGridEl}
428
- class="cd-range-picker__grid"
429
- role="grid"
430
- tabindex="0"
431
- aria-label={leftHeaderText}
432
- aria-activedescendant={leftActiveId}
433
- onkeydown={onGridKeydown}
434
- >
435
- <div class="cd-range-picker__row cd-range-picker__row--head" role="row">
436
- {#each weekdayNames as name, i (i)}
437
- <span class="cd-range-picker__weekday" role="columnheader" aria-label={weekdayLongNames[i]}>{name}</span>
438
- {/each}
439
- </div>
440
- {#each leftRows as row, wi (wi)}
441
- <div class="cd-range-picker__row" role="row">
442
- {#each row as cell (cell.date.getTime())}
443
- {@const edge = isEdge(cell.date)}
444
- {@const within = inRange(cell.date)}
445
- {@const isToday = isSameDay(cell.date, today)}
446
- {@const isHighlight = isSameDay(cell.date, highlight)}
447
- {@const isDisabled = isCellDisabled(cell.date)}
448
- <button
449
- type="button"
450
- id={cellId(leftGridId, cell.date)}
451
- class="cd-range-picker__cell"
452
- class:cd-range-picker__cell--muted={!cell.inMonth}
453
- class:cd-range-picker__cell--edge={edge}
454
- class:cd-range-picker__cell--in-range={within}
455
- class:cd-range-picker__cell--today={isToday}
456
- class:cd-range-picker__cell--highlight={isHighlight}
457
- role="gridcell"
458
- aria-selected={edge}
459
- aria-disabled={isDisabled || undefined}
460
- disabled={isDisabled}
461
- tabindex={-1}
462
- onclick={() => selectDate(cell.date)}
463
- onpointerenter={() => onCellHover(cell.date)}
464
- >
465
- {cell.date.getDate()}
466
- </button>
467
- {/each}
468
- </div>
469
- {/each}
470
- </div>
471
- </div>
472
-
473
- <!-- 右面板 -->
474
- <div class="cd-range-picker__month">
475
- <div class="cd-range-picker__header">
476
- <span class="cd-range-picker__nav cd-range-picker__nav--ghost" aria-hidden="true"></span>
477
- <span class="cd-range-picker__title">{rightHeaderText}</span>
478
- <button type="button" class="cd-range-picker__nav" aria-label={loc().t('DatePicker.nextMonth')} onclick={nextMonth}>
479
- <svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true" focusable="false">
480
- <path fill="currentColor" d="M6 3.5 5 4.5 8.5 8 5 11.5l1 1L10.5 8 6 3.5Z" />
481
- </svg>
482
- </button>
483
- </div>
484
-
485
- <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
486
- <div
487
- bind:this={rightGridEl}
488
- class="cd-range-picker__grid"
489
- role="grid"
490
- tabindex="0"
491
- aria-label={rightHeaderText}
492
- aria-activedescendant={rightActiveId}
493
- onkeydown={onGridKeydown}
494
- >
495
- <div class="cd-range-picker__row cd-range-picker__row--head" role="row">
496
- {#each weekdayNames as name, i (i)}
497
- <span class="cd-range-picker__weekday" role="columnheader" aria-label={weekdayLongNames[i]}>{name}</span>
498
- {/each}
499
- </div>
500
- {#each rightRows as row, wi (wi)}
501
- <div class="cd-range-picker__row" role="row">
502
- {#each row as cell (cell.date.getTime())}
503
- {@const edge = isEdge(cell.date)}
504
- {@const within = inRange(cell.date)}
505
- {@const isToday = isSameDay(cell.date, today)}
506
- {@const isHighlight = isSameDay(cell.date, highlight)}
507
- {@const isDisabled = isCellDisabled(cell.date)}
508
- <button
509
- type="button"
510
- id={cellId(rightGridId, cell.date)}
511
- class="cd-range-picker__cell"
512
- class:cd-range-picker__cell--muted={!cell.inMonth}
513
- class:cd-range-picker__cell--edge={edge}
514
- class:cd-range-picker__cell--in-range={within}
515
- class:cd-range-picker__cell--today={isToday}
516
- class:cd-range-picker__cell--highlight={isHighlight}
517
- role="gridcell"
518
- aria-selected={edge}
519
- aria-disabled={isDisabled || undefined}
520
- disabled={isDisabled}
521
- tabindex={-1}
522
- onclick={() => selectDate(cell.date)}
523
- onpointerenter={() => onCellHover(cell.date)}
524
- >
525
- {cell.date.getDate()}
526
- </button>
527
- {/each}
528
- </div>
529
- {/each}
530
- </div>
531
- </div>
532
- </div>
533
- </div>
534
- {/if}
535
- </div>
536
-
537
- <style>
538
- .cd-range-picker {
539
- position: relative;
540
- display: inline-flex;
541
- inline-size: 100%;
542
- font-size: var(--cd-input-font-size);
543
- }
544
- .cd-range-picker__control {
545
- position: relative;
546
- inline-size: 100%;
547
- }
548
- .cd-range-picker__trigger {
549
- display: flex;
550
- align-items: center;
551
- gap: var(--cd-spacing-2);
552
- inline-size: 100%;
553
- block-size: var(--cd-input-height-default);
554
- padding-inline: var(--cd-input-padding-x);
555
- background: var(--cd-input-color-bg);
556
- color: var(--cd-input-color-text);
557
- border: 1px solid var(--cd-input-border);
558
- border-radius: var(--cd-input-radius);
559
- font: inherit;
560
- text-align: start;
561
- cursor: pointer;
562
- transition: border-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
563
- }
564
- .cd-range-picker--small .cd-range-picker__trigger {
565
- block-size: var(--cd-input-height-small);
566
- font-size: var(--cd-font-size-1);
567
- }
568
- .cd-range-picker--large .cd-range-picker__trigger {
569
- block-size: var(--cd-input-height-large);
570
- font-size: var(--cd-font-size-3);
571
- }
572
- .cd-range-picker__trigger:focus-visible {
573
- outline: none;
574
- border-color: var(--cd-input-border-active);
575
- box-shadow: var(--cd-focus-ring);
576
- }
577
- .cd-range-picker--open .cd-range-picker__trigger {
578
- border-color: var(--cd-input-border-active);
579
- }
580
- .cd-range-picker--warning .cd-range-picker__trigger {
581
- border-color: var(--cd-input-border-warning);
582
- }
583
- .cd-range-picker--error .cd-range-picker__trigger {
584
- border-color: var(--cd-input-border-error);
585
- }
586
- .cd-range-picker--disabled .cd-range-picker__trigger {
587
- background: var(--cd-color-fill-0);
588
- color: var(--cd-color-text-3);
589
- cursor: not-allowed;
590
- }
591
- .cd-range-picker__value {
592
- flex: 1 1 auto;
593
- overflow: hidden;
594
- white-space: nowrap;
595
- text-overflow: ellipsis;
596
- text-align: center;
597
- }
598
- .cd-range-picker__value--placeholder {
599
- color: var(--cd-input-color-placeholder);
600
- }
601
- .cd-range-picker__sep {
602
- flex: 0 0 auto;
603
- color: var(--cd-color-text-2);
604
- }
605
- .cd-range-picker__clear {
606
- position: absolute;
607
- inset-block-start: 50%;
608
- inset-inline-end: var(--cd-input-padding-x);
609
- transform: translateY(-50%);
610
- display: inline-flex;
611
- align-items: center;
612
- justify-content: center;
613
- padding: 0;
614
- border: none;
615
- background: var(--cd-input-color-bg);
616
- color: var(--cd-color-text-2);
617
- cursor: pointer;
618
- opacity: 0;
619
- transition: opacity var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
620
- }
621
- .cd-range-picker__control:hover .cd-range-picker__clear,
622
- .cd-range-picker__clear:focus-visible {
623
- opacity: 1;
624
- }
625
- .cd-range-picker__clear:hover {
626
- color: var(--cd-color-text-0);
627
- }
628
- .cd-range-picker__clear:focus-visible {
629
- outline: none;
630
- box-shadow: var(--cd-focus-ring);
631
- border-radius: var(--cd-radius-1);
632
- }
633
- .cd-range-picker__panel {
634
- position: absolute;
635
- inset-block-start: calc(100% + var(--cd-spacing-1));
636
- inset-inline-start: 0;
637
- z-index: var(--cd-date-picker-panel-z);
638
- padding: var(--cd-spacing-3);
639
- background: var(--cd-date-picker-panel-bg);
640
- border-radius: var(--cd-date-picker-panel-radius);
641
- box-shadow: var(--cd-date-picker-panel-shadow);
642
- }
643
- .cd-range-picker__panel:focus-visible {
644
- outline: none;
645
- }
646
- /* 双面板:左右两个月历并排 */
647
- .cd-range-picker__panels {
648
- display: flex;
649
- align-items: flex-start;
650
- gap: var(--cd-spacing-4);
651
- }
652
- .cd-range-picker__month {
653
- flex: 0 0 auto;
654
- }
655
- .cd-range-picker__nav--ghost {
656
- background: transparent;
657
- cursor: default;
658
- pointer-events: none;
659
- }
660
- .cd-range-picker__nav--ghost:hover {
661
- background: transparent;
662
- }
663
- .cd-range-picker__header {
664
- display: flex;
665
- align-items: center;
666
- justify-content: space-between;
667
- gap: var(--cd-spacing-2);
668
- margin-block-end: var(--cd-spacing-2);
669
- }
670
- .cd-range-picker__title {
671
- flex: 1 1 auto;
672
- text-align: center;
673
- color: var(--cd-date-picker-header-color);
674
- font-weight: var(--cd-font-weight-medium);
675
- }
676
- .cd-range-picker__nav {
677
- display: inline-flex;
678
- align-items: center;
679
- justify-content: center;
680
- flex: 0 0 auto;
681
- inline-size: var(--cd-date-picker-cell-size);
682
- block-size: var(--cd-date-picker-cell-size);
683
- padding: 0;
684
- border: none;
685
- background: transparent;
686
- color: var(--cd-color-text-2);
687
- border-radius: var(--cd-date-picker-cell-radius);
688
- cursor: pointer;
689
- }
690
- .cd-range-picker__nav:hover {
691
- background: var(--cd-date-picker-cell-bg-hover);
692
- color: var(--cd-color-text-0);
693
- }
694
- .cd-range-picker__nav:focus-visible {
695
- outline: none;
696
- box-shadow: var(--cd-focus-ring);
697
- }
698
- .cd-range-picker__grid {
699
- display: flex;
700
- flex-direction: column;
701
- gap: 2px;
702
- }
703
- .cd-range-picker__grid:focus-visible {
704
- outline: none;
705
- }
706
- .cd-range-picker__row {
707
- display: grid;
708
- grid-template-columns: repeat(7, var(--cd-date-picker-cell-size));
709
- gap: 2px;
710
- }
711
- .cd-range-picker__weekday {
712
- display: inline-flex;
713
- align-items: center;
714
- justify-content: center;
715
- block-size: var(--cd-date-picker-cell-size);
716
- color: var(--cd-date-picker-weekday-color);
717
- font-size: var(--cd-font-size-1);
718
- }
719
- .cd-range-picker__cell {
720
- position: relative;
721
- display: inline-flex;
722
- align-items: center;
723
- justify-content: center;
724
- inline-size: var(--cd-date-picker-cell-size);
725
- block-size: var(--cd-date-picker-cell-size);
726
- padding: 0;
727
- border: none;
728
- background: transparent;
729
- color: var(--cd-color-text-0);
730
- border-radius: var(--cd-date-picker-cell-radius);
731
- font: inherit;
732
- cursor: pointer;
733
- transition: background var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
734
- }
735
- .cd-range-picker__cell:hover {
736
- background: var(--cd-date-picker-cell-bg-hover);
737
- }
738
- .cd-range-picker__cell:focus-visible {
739
- outline: none;
740
- box-shadow: var(--cd-focus-ring);
741
- }
742
- .cd-range-picker__cell--muted {
743
- color: var(--cd-date-picker-cell-color-muted);
744
- }
745
- .cd-range-picker__cell--today {
746
- border-block-end: 2px solid var(--cd-date-picker-cell-bg-selected);
747
- }
748
- /* 键盘高亮格(aria-activedescendant 当前格):浅底提示 */
749
- .cd-range-picker__cell--highlight {
750
- background: var(--cd-date-picker-cell-bg-hover);
751
- }
752
- /* 区间内:浅底连续条 */
753
- .cd-range-picker__cell--in-range {
754
- background: var(--cd-date-picker-cell-bg-hover);
755
- border-radius: 0;
756
- }
757
- /* 端点:实心高亮 */
758
- .cd-range-picker__cell--edge,
759
- .cd-range-picker__cell--edge:hover {
760
- background: var(--cd-date-picker-cell-bg-selected);
761
- color: var(--cd-date-picker-cell-color-selected);
762
- }
763
- .cd-range-picker__cell:disabled {
764
- color: var(--cd-color-text-3);
765
- cursor: not-allowed;
766
- background: transparent;
767
- }
768
- @media (prefers-reduced-motion: reduce) {
769
- .cd-range-picker__trigger,
770
- .cd-range-picker__clear,
771
- .cd-range-picker__cell {
772
- transition: none;
773
- }
774
- }
775
- </style>