@chenzy-design/svelte 0.3.1 → 0.4.1

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 (1299) hide show
  1. package/dist/_floating/use-floating.d.ts +6 -0
  2. package/dist/_floating/use-floating.d.ts.map +1 -1
  3. package/dist/_floating/use-floating.js +38 -0
  4. package/dist/ai-chat-dialogue/AIChatDialogue.svelte +243 -0
  5. package/dist/ai-chat-dialogue/AIChatDialogue.svelte.d.ts +60 -0
  6. package/dist/ai-chat-dialogue/AIChatDialogue.svelte.d.ts.map +1 -0
  7. package/dist/ai-chat-dialogue/ContentItemRenderer.svelte +318 -0
  8. package/dist/ai-chat-dialogue/ContentItemRenderer.svelte.d.ts +18 -0
  9. package/dist/ai-chat-dialogue/ContentItemRenderer.svelte.d.ts.map +1 -0
  10. package/dist/ai-chat-dialogue/DialogueBox.svelte +403 -0
  11. package/dist/ai-chat-dialogue/DialogueBox.svelte.d.ts +50 -0
  12. package/dist/ai-chat-dialogue/DialogueBox.svelte.d.ts.map +1 -0
  13. package/dist/ai-chat-dialogue/index.d.ts +8 -0
  14. package/dist/ai-chat-dialogue/index.d.ts.map +1 -0
  15. package/dist/ai-chat-dialogue/index.js +6 -0
  16. package/dist/ai-chat-dialogue/meta.d.ts +174 -0
  17. package/dist/ai-chat-dialogue/meta.d.ts.map +1 -0
  18. package/dist/ai-chat-dialogue/meta.js +66 -0
  19. package/dist/ai-chat-dialogue/render-config.d.ts +57 -0
  20. package/dist/ai-chat-dialogue/render-config.d.ts.map +1 -0
  21. package/dist/ai-chat-input/AIChatInput.svelte +1196 -0
  22. package/dist/ai-chat-input/AIChatInput.svelte.d.ts +146 -0
  23. package/dist/ai-chat-input/AIChatInput.svelte.d.ts.map +1 -0
  24. package/dist/ai-chat-input/AIChatInputConfigureButton.svelte +94 -0
  25. package/dist/ai-chat-input/AIChatInputConfigureButton.svelte.d.ts +17 -0
  26. package/dist/ai-chat-input/AIChatInputConfigureButton.svelte.d.ts.map +1 -0
  27. package/dist/ai-chat-input/AIChatInputConfigureItem.svelte +40 -0
  28. package/dist/ai-chat-input/AIChatInputConfigureItem.svelte.d.ts +16 -0
  29. package/dist/ai-chat-input/AIChatInputConfigureItem.svelte.d.ts.map +1 -0
  30. package/dist/ai-chat-input/AIChatInputConfigureMcp.svelte +94 -0
  31. package/dist/ai-chat-input/AIChatInputConfigureMcp.svelte.d.ts +18 -0
  32. package/dist/ai-chat-input/AIChatInputConfigureMcp.svelte.d.ts.map +1 -0
  33. package/dist/ai-chat-input/AIChatInputConfigureRadioButton.svelte +52 -0
  34. package/dist/ai-chat-input/AIChatInputConfigureRadioButton.svelte.d.ts +17 -0
  35. package/dist/ai-chat-input/AIChatInputConfigureRadioButton.svelte.d.ts.map +1 -0
  36. package/dist/ai-chat-input/AIChatInputConfigureSelect.svelte +50 -0
  37. package/dist/ai-chat-input/AIChatInputConfigureSelect.svelte.d.ts +16 -0
  38. package/dist/ai-chat-input/AIChatInputConfigureSelect.svelte.d.ts.map +1 -0
  39. package/dist/ai-chat-input/InputSlotNode.svelte +50 -0
  40. package/dist/ai-chat-input/InputSlotNode.svelte.d.ts +5 -0
  41. package/dist/ai-chat-input/InputSlotNode.svelte.d.ts.map +1 -0
  42. package/dist/ai-chat-input/SelectSlotNode.svelte +54 -0
  43. package/dist/ai-chat-input/SelectSlotNode.svelte.d.ts +5 -0
  44. package/dist/ai-chat-input/SelectSlotNode.svelte.d.ts.map +1 -0
  45. package/dist/ai-chat-input/SkillSlotNode.svelte +82 -0
  46. package/dist/ai-chat-input/SkillSlotNode.svelte.d.ts +5 -0
  47. package/dist/ai-chat-input/SkillSlotNode.svelte.d.ts.map +1 -0
  48. package/dist/ai-chat-input/configure-context.d.ts +12 -0
  49. package/dist/ai-chat-input/configure-context.d.ts.map +1 -0
  50. package/dist/ai-chat-input/configure-context.js +14 -0
  51. package/dist/ai-chat-input/index.d.ts +9 -0
  52. package/dist/ai-chat-input/index.d.ts.map +1 -0
  53. package/dist/ai-chat-input/index.js +9 -0
  54. package/dist/ai-chat-input/input-slot-extension.d.ts +18 -0
  55. package/dist/ai-chat-input/input-slot-extension.d.ts.map +1 -0
  56. package/dist/ai-chat-input/input-slot-extension.js +55 -0
  57. package/dist/ai-chat-input/input-slot-plugins.d.ts +34 -0
  58. package/dist/ai-chat-input/input-slot-plugins.d.ts.map +1 -0
  59. package/dist/ai-chat-input/input-slot-plugins.js +478 -0
  60. package/dist/ai-chat-input/meta.d.ts +284 -0
  61. package/dist/ai-chat-input/meta.d.ts.map +1 -0
  62. package/dist/ai-chat-input/meta.js +106 -0
  63. package/dist/ai-chat-input/select-slot-extension.d.ts +16 -0
  64. package/dist/ai-chat-input/select-slot-extension.d.ts.map +1 -0
  65. package/dist/ai-chat-input/select-slot-extension.js +35 -0
  66. package/dist/ai-chat-input/skill-slot-extension.d.ts +22 -0
  67. package/dist/ai-chat-input/skill-slot-extension.d.ts.map +1 -0
  68. package/dist/ai-chat-input/skill-slot-extension.js +46 -0
  69. package/dist/anchor/Anchor.svelte +393 -242
  70. package/dist/anchor/Anchor.svelte.d.ts +40 -17
  71. package/dist/anchor/Anchor.svelte.d.ts.map +1 -1
  72. package/dist/anchor/AnchorLink.svelte +226 -0
  73. package/dist/anchor/AnchorLink.svelte.d.ts +19 -0
  74. package/dist/anchor/AnchorLink.svelte.d.ts.map +1 -0
  75. package/dist/anchor/context.d.ts +43 -0
  76. package/dist/anchor/context.d.ts.map +1 -0
  77. package/dist/anchor/context.js +26 -0
  78. package/dist/anchor/index.d.ts +11 -2
  79. package/dist/anchor/index.d.ts.map +1 -1
  80. package/dist/anchor/index.js +10 -1
  81. package/dist/anchor/meta.d.ts +92 -43
  82. package/dist/anchor/meta.d.ts.map +1 -1
  83. package/dist/anchor/meta.js +124 -38
  84. package/dist/anchor/types.d.ts +32 -5
  85. package/dist/anchor/types.d.ts.map +1 -1
  86. package/dist/audio-player/AudioPlayer.svelte +614 -0
  87. package/dist/audio-player/AudioPlayer.svelte.d.ts +21 -0
  88. package/dist/audio-player/AudioPlayer.svelte.d.ts.map +1 -0
  89. package/dist/audio-player/AudioSlider.svelte +162 -0
  90. package/dist/audio-player/AudioSlider.svelte.d.ts +20 -0
  91. package/dist/audio-player/AudioSlider.svelte.d.ts.map +1 -0
  92. package/dist/audio-player/index.d.ts +3 -0
  93. package/dist/audio-player/index.d.ts.map +1 -0
  94. package/dist/audio-player/index.js +2 -0
  95. package/dist/audio-player/meta.d.ts +74 -0
  96. package/dist/audio-player/meta.d.ts.map +1 -0
  97. package/dist/audio-player/meta.js +96 -0
  98. package/dist/autocomplete/AutoComplete.svelte +307 -411
  99. package/dist/autocomplete/AutoComplete.svelte.d.ts +52 -47
  100. package/dist/autocomplete/AutoComplete.svelte.d.ts.map +1 -1
  101. package/dist/autocomplete/meta.d.ts +150 -34
  102. package/dist/autocomplete/meta.d.ts.map +1 -1
  103. package/dist/autocomplete/meta.js +43 -21
  104. package/dist/avatar/Avatar.svelte +784 -211
  105. package/dist/avatar/Avatar.svelte.d.ts +28 -23
  106. package/dist/avatar/Avatar.svelte.d.ts.map +1 -1
  107. package/dist/avatar/AvatarGroup.svelte +151 -70
  108. package/dist/avatar/AvatarGroup.svelte.d.ts +16 -17
  109. package/dist/avatar/AvatarGroup.svelte.d.ts.map +1 -1
  110. package/dist/avatar/TopSlotSvg.svelte +62 -0
  111. package/dist/avatar/TopSlotSvg.svelte.d.ts +8 -0
  112. package/dist/avatar/TopSlotSvg.svelte.d.ts.map +1 -0
  113. package/dist/avatar/context.d.ts +28 -1
  114. package/dist/avatar/context.d.ts.map +1 -1
  115. package/dist/avatar/index.d.ts +2 -1
  116. package/dist/avatar/index.d.ts.map +1 -1
  117. package/dist/avatar/meta.d.ts +124 -36
  118. package/dist/avatar/meta.d.ts.map +1 -1
  119. package/dist/avatar/meta.js +117 -24
  120. package/dist/back-top/BackTop.svelte +81 -231
  121. package/dist/back-top/BackTop.svelte.d.ts +10 -33
  122. package/dist/back-top/BackTop.svelte.d.ts.map +1 -1
  123. package/dist/back-top/meta.d.ts +23 -72
  124. package/dist/back-top/meta.d.ts.map +1 -1
  125. package/dist/back-top/meta.js +19 -79
  126. package/dist/badge/Badge.svelte +187 -249
  127. package/dist/badge/Badge.svelte.d.ts +23 -14
  128. package/dist/badge/Badge.svelte.d.ts.map +1 -1
  129. package/dist/badge/meta.d.ts +52 -44
  130. package/dist/badge/meta.d.ts.map +1 -1
  131. package/dist/badge/meta.js +35 -33
  132. package/dist/banner/Banner.svelte +189 -274
  133. package/dist/banner/Banner.svelte.d.ts +20 -23
  134. package/dist/banner/Banner.svelte.d.ts.map +1 -1
  135. package/dist/banner/index.d.ts +2 -1
  136. package/dist/banner/index.d.ts.map +1 -1
  137. package/dist/banner/meta.d.ts +41 -87
  138. package/dist/banner/meta.d.ts.map +1 -1
  139. package/dist/banner/meta.js +59 -79
  140. package/dist/breadcrumb/Breadcrumb.svelte +240 -118
  141. package/dist/breadcrumb/Breadcrumb.svelte.d.ts +35 -19
  142. package/dist/breadcrumb/Breadcrumb.svelte.d.ts.map +1 -1
  143. package/dist/breadcrumb/Item.svelte +5 -5
  144. package/dist/breadcrumb/meta.d.ts +26 -19
  145. package/dist/breadcrumb/meta.d.ts.map +1 -1
  146. package/dist/breadcrumb/meta.js +51 -16
  147. package/dist/breadcrumb/types.d.ts +11 -1
  148. package/dist/breadcrumb/types.d.ts.map +1 -1
  149. package/dist/button/BaseButton.svelte +479 -0
  150. package/dist/button/BaseButton.svelte.d.ts +29 -0
  151. package/dist/button/BaseButton.svelte.d.ts.map +1 -0
  152. package/dist/button/Button.svelte +166 -296
  153. package/dist/button/Button.svelte.d.ts +12 -7
  154. package/dist/button/Button.svelte.d.ts.map +1 -1
  155. package/dist/button/ButtonGroup.svelte +66 -20
  156. package/dist/button/ButtonGroup.svelte.d.ts.map +1 -1
  157. package/dist/button/SplitButtonGroup.svelte +64 -101
  158. package/dist/button/SplitButtonGroup.svelte.d.ts +1 -21
  159. package/dist/button/SplitButtonGroup.svelte.d.ts.map +1 -1
  160. package/dist/button/meta.d.ts +28 -68
  161. package/dist/button/meta.d.ts.map +1 -1
  162. package/dist/button/meta.js +33 -24
  163. package/dist/calendar/Calendar.svelte +928 -1172
  164. package/dist/calendar/Calendar.svelte.d.ts +34 -104
  165. package/dist/calendar/Calendar.svelte.d.ts.map +1 -1
  166. package/dist/calendar/meta.d.ts +78 -168
  167. package/dist/calendar/meta.d.ts.map +1 -1
  168. package/dist/calendar/meta.js +123 -78
  169. package/dist/card/Card.svelte +171 -233
  170. package/dist/card/Card.svelte.d.ts +30 -24
  171. package/dist/card/Card.svelte.d.ts.map +1 -1
  172. package/dist/card/CardGroup.svelte +74 -0
  173. package/dist/card/CardGroup.svelte.d.ts +20 -0
  174. package/dist/card/CardGroup.svelte.d.ts.map +1 -0
  175. package/dist/card/CardMeta.svelte +38 -28
  176. package/dist/card/CardMeta.svelte.d.ts +5 -0
  177. package/dist/card/CardMeta.svelte.d.ts.map +1 -1
  178. package/dist/card/index.d.ts +3 -1
  179. package/dist/card/index.d.ts.map +1 -1
  180. package/dist/card/index.js +7 -2
  181. package/dist/card/meta.d.ts +177 -75
  182. package/dist/card/meta.d.ts.map +1 -1
  183. package/dist/card/meta.js +102 -45
  184. package/dist/carousel/Carousel.svelte +569 -569
  185. package/dist/carousel/Carousel.svelte.d.ts +37 -29
  186. package/dist/carousel/Carousel.svelte.d.ts.map +1 -1
  187. package/dist/carousel/meta.d.ts +73 -65
  188. package/dist/carousel/meta.d.ts.map +1 -1
  189. package/dist/carousel/meta.js +85 -43
  190. package/dist/cascader/Cascader.svelte +725 -391
  191. package/dist/cascader/Cascader.svelte.d.ts +48 -24
  192. package/dist/cascader/Cascader.svelte.d.ts.map +1 -1
  193. package/dist/cascader/meta.d.ts +281 -32
  194. package/dist/cascader/meta.d.ts.map +1 -1
  195. package/dist/cascader/meta.js +85 -12
  196. package/dist/chat/Chat.svelte +483 -0
  197. package/dist/chat/Chat.svelte.d.ts +76 -0
  198. package/dist/chat/Chat.svelte.d.ts.map +1 -0
  199. package/dist/chat/ChatBox.svelte +207 -0
  200. package/dist/chat/ChatBox.svelte.d.ts +26 -0
  201. package/dist/chat/ChatBox.svelte.d.ts.map +1 -0
  202. package/dist/chat/ChatBoxAction.svelte +190 -0
  203. package/dist/chat/ChatBoxAction.svelte.d.ts +18 -0
  204. package/dist/chat/ChatBoxAction.svelte.d.ts.map +1 -0
  205. package/dist/chat/ChatBoxAvatar.svelte +40 -0
  206. package/dist/chat/ChatBoxAvatar.svelte.d.ts +13 -0
  207. package/dist/chat/ChatBoxAvatar.svelte.d.ts.map +1 -0
  208. package/dist/chat/ChatBoxContent.svelte +238 -0
  209. package/dist/chat/ChatBoxContent.svelte.d.ts +17 -0
  210. package/dist/chat/ChatBoxContent.svelte.d.ts.map +1 -0
  211. package/dist/chat/ChatBoxTitle.svelte +40 -0
  212. package/dist/chat/ChatBoxTitle.svelte.d.ts +13 -0
  213. package/dist/chat/ChatBoxTitle.svelte.d.ts.map +1 -0
  214. package/dist/chat/ChatCode.svelte +139 -0
  215. package/dist/chat/ChatCode.svelte.d.ts +9 -0
  216. package/dist/chat/ChatCode.svelte.d.ts.map +1 -0
  217. package/dist/chat/Hint.svelte +82 -0
  218. package/dist/chat/Hint.svelte.d.ts +13 -0
  219. package/dist/chat/Hint.svelte.d.ts.map +1 -0
  220. package/dist/chat/InputBox.svelte +365 -0
  221. package/dist/chat/InputBox.svelte.d.ts +30 -0
  222. package/dist/chat/InputBox.svelte.d.ts.map +1 -0
  223. package/dist/chat/index.d.ts +7 -0
  224. package/dist/chat/index.d.ts.map +1 -0
  225. package/dist/chat/index.js +5 -0
  226. package/dist/chat/meta.d.ts +297 -0
  227. package/dist/chat/meta.d.ts.map +1 -0
  228. package/dist/chat/meta.js +230 -0
  229. package/dist/chat/types.d.ts +94 -0
  230. package/dist/chat/types.d.ts.map +1 -0
  231. package/dist/chat/types.js +1 -0
  232. package/dist/checkbox/Checkbox.svelte +339 -148
  233. package/dist/checkbox/Checkbox.svelte.d.ts +27 -8
  234. package/dist/checkbox/Checkbox.svelte.d.ts.map +1 -1
  235. package/dist/checkbox/CheckboxGroup.svelte +52 -20
  236. package/dist/checkbox/CheckboxGroup.svelte.d.ts +7 -4
  237. package/dist/checkbox/CheckboxGroup.svelte.d.ts.map +1 -1
  238. package/dist/checkbox/context.d.ts +17 -7
  239. package/dist/checkbox/context.d.ts.map +1 -1
  240. package/dist/checkbox/index.d.ts +1 -1
  241. package/dist/checkbox/index.d.ts.map +1 -1
  242. package/dist/checkbox/meta.d.ts +49 -22
  243. package/dist/checkbox/meta.d.ts.map +1 -1
  244. package/dist/checkbox/meta.js +15 -13
  245. package/dist/code-highlight/CodeHighlight.svelte +298 -0
  246. package/dist/code-highlight/CodeHighlight.svelte.d.ts +18 -0
  247. package/dist/code-highlight/CodeHighlight.svelte.d.ts.map +1 -0
  248. package/dist/code-highlight/index.d.ts +4 -0
  249. package/dist/code-highlight/index.d.ts.map +1 -0
  250. package/dist/code-highlight/index.js +3 -0
  251. package/dist/code-highlight/meta.d.ts +61 -0
  252. package/dist/code-highlight/meta.d.ts.map +1 -0
  253. package/dist/code-highlight/meta.js +51 -0
  254. package/dist/code-highlight/prism-modules.d.ts +15 -0
  255. package/dist/collapse/Collapse.svelte +134 -324
  256. package/dist/collapse/Collapse.svelte.d.ts +24 -38
  257. package/dist/collapse/Collapse.svelte.d.ts.map +1 -1
  258. package/dist/collapse/CollapsePanel.svelte +143 -73
  259. package/dist/collapse/CollapsePanel.svelte.d.ts +16 -7
  260. package/dist/collapse/CollapsePanel.svelte.d.ts.map +1 -1
  261. package/dist/collapse/context.d.ts +18 -32
  262. package/dist/collapse/context.d.ts.map +1 -1
  263. package/dist/collapse/index.d.ts +1 -2
  264. package/dist/collapse/index.d.ts.map +1 -1
  265. package/dist/collapse/meta.d.ts +71 -54
  266. package/dist/collapse/meta.d.ts.map +1 -1
  267. package/dist/collapse/meta.js +55 -52
  268. package/dist/collapsible/Collapsible.svelte +224 -0
  269. package/dist/collapsible/Collapsible.svelte.d.ts +35 -0
  270. package/dist/collapsible/Collapsible.svelte.d.ts.map +1 -0
  271. package/dist/collapsible/index.d.ts +3 -0
  272. package/dist/collapsible/index.d.ts.map +1 -0
  273. package/dist/collapsible/index.js +2 -0
  274. package/dist/collapsible/meta.d.ts +115 -0
  275. package/dist/collapsible/meta.d.ts.map +1 -0
  276. package/dist/collapsible/meta.js +89 -0
  277. package/dist/color-picker/ColorPicker.svelte +395 -839
  278. package/dist/color-picker/ColorPicker.svelte.d.ts +29 -39
  279. package/dist/color-picker/ColorPicker.svelte.d.ts.map +1 -1
  280. package/dist/color-picker/index.d.ts +1 -0
  281. package/dist/color-picker/index.d.ts.map +1 -1
  282. package/dist/color-picker/index.js +1 -0
  283. package/dist/color-picker/meta.d.ts +43 -90
  284. package/dist/color-picker/meta.d.ts.map +1 -1
  285. package/dist/color-picker/meta.js +49 -37
  286. package/dist/components.d.ts +1773 -422
  287. package/dist/components.json +17159 -9219
  288. package/dist/config-provider/ConfigProvider.svelte +186 -151
  289. package/dist/config-provider/ConfigProvider.svelte.d.ts +12 -44
  290. package/dist/config-provider/ConfigProvider.svelte.d.ts.map +1 -1
  291. package/dist/config-provider/context.d.ts +21 -13
  292. package/dist/config-provider/context.d.ts.map +1 -1
  293. package/dist/config-provider/index.d.ts +9 -7
  294. package/dist/config-provider/index.d.ts.map +1 -1
  295. package/dist/config-provider/index.js +21 -7
  296. package/dist/config-provider/meta.d.ts +30 -75
  297. package/dist/config-provider/meta.d.ts.map +1 -1
  298. package/dist/config-provider/meta.js +30 -73
  299. package/dist/cropper/Cropper.svelte +536 -0
  300. package/dist/cropper/Cropper.svelte.d.ts +47 -0
  301. package/dist/cropper/Cropper.svelte.d.ts.map +1 -0
  302. package/dist/cropper/index.d.ts +4 -0
  303. package/dist/cropper/index.d.ts.map +1 -0
  304. package/dist/cropper/index.js +2 -0
  305. package/dist/cropper/meta.d.ts +136 -0
  306. package/dist/cropper/meta.d.ts.map +1 -0
  307. package/dist/cropper/meta.js +97 -0
  308. package/dist/date-picker/DatePicker.svelte +1646 -360
  309. package/dist/date-picker/DatePicker.svelte.d.ts +90 -37
  310. package/dist/date-picker/DatePicker.svelte.d.ts.map +1 -1
  311. package/dist/date-picker/index.d.ts +0 -2
  312. package/dist/date-picker/index.d.ts.map +1 -1
  313. package/dist/date-picker/index.js +0 -2
  314. package/dist/date-picker/meta.d.ts +309 -26
  315. package/dist/date-picker/meta.d.ts.map +1 -1
  316. package/dist/date-picker/meta.js +89 -14
  317. package/dist/descriptions/Descriptions.svelte +213 -223
  318. package/dist/descriptions/Descriptions.svelte.d.ts +16 -25
  319. package/dist/descriptions/Descriptions.svelte.d.ts.map +1 -1
  320. package/dist/descriptions/DescriptionsItem.svelte +58 -28
  321. package/dist/descriptions/DescriptionsItem.svelte.d.ts +12 -4
  322. package/dist/descriptions/DescriptionsItem.svelte.d.ts.map +1 -1
  323. package/dist/descriptions/context.d.ts +9 -5
  324. package/dist/descriptions/context.d.ts.map +1 -1
  325. package/dist/descriptions/index.d.ts +2 -2
  326. package/dist/descriptions/index.d.ts.map +1 -1
  327. package/dist/descriptions/meta.d.ts +51 -49
  328. package/dist/descriptions/meta.d.ts.map +1 -1
  329. package/dist/descriptions/meta.js +41 -20
  330. package/dist/descriptions/types.d.ts +13 -3
  331. package/dist/descriptions/types.d.ts.map +1 -1
  332. package/dist/divider/Divider.svelte +86 -94
  333. package/dist/divider/Divider.svelte.d.ts +2 -2
  334. package/dist/divider/Divider.svelte.d.ts.map +1 -1
  335. package/dist/divider/meta.d.ts +19 -25
  336. package/dist/divider/meta.d.ts.map +1 -1
  337. package/dist/divider/meta.js +29 -11
  338. package/dist/drag-move/DragMove.svelte +106 -0
  339. package/dist/drag-move/DragMove.svelte.d.ts +30 -0
  340. package/dist/drag-move/DragMove.svelte.d.ts.map +1 -0
  341. package/dist/drag-move/index.d.ts +4 -0
  342. package/dist/drag-move/index.d.ts.map +1 -0
  343. package/dist/drag-move/index.js +3 -0
  344. package/dist/drag-move/meta.d.ts +102 -0
  345. package/dist/drag-move/meta.d.ts.map +1 -0
  346. package/dist/drag-move/meta.js +77 -0
  347. package/dist/dropdown/Dropdown.svelte +426 -344
  348. package/dist/dropdown/Dropdown.svelte.d.ts +55 -58
  349. package/dist/dropdown/Dropdown.svelte.d.ts.map +1 -1
  350. package/dist/dropdown/DropdownDivider.svelte +20 -8
  351. package/dist/dropdown/DropdownDivider.svelte.d.ts +7 -16
  352. package/dist/dropdown/DropdownDivider.svelte.d.ts.map +1 -1
  353. package/dist/dropdown/DropdownItem.svelte +163 -91
  354. package/dist/dropdown/DropdownItem.svelte.d.ts +25 -11
  355. package/dist/dropdown/DropdownItem.svelte.d.ts.map +1 -1
  356. package/dist/dropdown/DropdownMenu.svelte +21 -9
  357. package/dist/dropdown/DropdownMenu.svelte.d.ts +6 -1
  358. package/dist/dropdown/DropdownMenu.svelte.d.ts.map +1 -1
  359. package/dist/dropdown/DropdownTitle.svelte +38 -20
  360. package/dist/dropdown/DropdownTitle.svelte.d.ts +6 -1
  361. package/dist/dropdown/DropdownTitle.svelte.d.ts.map +1 -1
  362. package/dist/dropdown/context.d.ts +18 -6
  363. package/dist/dropdown/context.d.ts.map +1 -1
  364. package/dist/dropdown/index.d.ts +3 -6
  365. package/dist/dropdown/index.d.ts.map +1 -1
  366. package/dist/dropdown/index.js +3 -6
  367. package/dist/dropdown/meta.d.ts +183 -63
  368. package/dist/dropdown/meta.d.ts.map +1 -1
  369. package/dist/dropdown/meta.js +122 -73
  370. package/dist/dropdown/types.d.ts +39 -42
  371. package/dist/dropdown/types.d.ts.map +1 -1
  372. package/dist/dropdown/types.js +1 -12
  373. package/dist/empty/Empty.svelte +136 -249
  374. package/dist/empty/Empty.svelte.d.ts +23 -9
  375. package/dist/empty/Empty.svelte.d.ts.map +1 -1
  376. package/dist/empty/meta.d.ts +29 -18
  377. package/dist/empty/meta.d.ts.map +1 -1
  378. package/dist/empty/meta.js +21 -26
  379. package/dist/feedback/Feedback.svelte +330 -0
  380. package/dist/feedback/Feedback.svelte.d.ts +46 -0
  381. package/dist/feedback/Feedback.svelte.d.ts.map +1 -0
  382. package/dist/feedback/index.d.ts +4 -0
  383. package/dist/feedback/index.d.ts.map +1 -0
  384. package/dist/feedback/index.js +2 -0
  385. package/dist/feedback/meta.d.ts +105 -0
  386. package/dist/feedback/meta.d.ts.map +1 -0
  387. package/dist/feedback/meta.js +65 -0
  388. package/dist/float-button/FloatButton.svelte +161 -0
  389. package/dist/float-button/FloatButton.svelte.d.ts +5 -0
  390. package/dist/float-button/FloatButton.svelte.d.ts.map +1 -0
  391. package/dist/float-button/FloatButtonGroup.svelte +90 -0
  392. package/dist/float-button/FloatButtonGroup.svelte.d.ts +5 -0
  393. package/dist/float-button/FloatButtonGroup.svelte.d.ts.map +1 -0
  394. package/dist/float-button/index.d.ts +5 -0
  395. package/dist/float-button/index.d.ts.map +1 -0
  396. package/dist/float-button/index.js +3 -0
  397. package/dist/float-button/meta.d.ts +136 -0
  398. package/dist/float-button/meta.d.ts.map +1 -0
  399. package/dist/float-button/meta.js +104 -0
  400. package/dist/float-button/types.d.ts +59 -0
  401. package/dist/float-button/types.d.ts.map +1 -0
  402. package/dist/float-button/types.js +1 -0
  403. package/dist/form/Field.svelte +315 -192
  404. package/dist/form/Field.svelte.d.ts +70 -2
  405. package/dist/form/Field.svelte.d.ts.map +1 -1
  406. package/dist/form/FieldArray.svelte +115 -21
  407. package/dist/form/FieldArray.svelte.d.ts +21 -3
  408. package/dist/form/FieldArray.svelte.d.ts.map +1 -1
  409. package/dist/form/Form.svelte +260 -52
  410. package/dist/form/Form.svelte.d.ts +84 -12
  411. package/dist/form/Form.svelte.d.ts.map +1 -1
  412. package/dist/form/FormAutoComplete.svelte +52 -0
  413. package/dist/form/FormAutoComplete.svelte.d.ts +17 -0
  414. package/dist/form/FormAutoComplete.svelte.d.ts.map +1 -0
  415. package/dist/form/FormCascader.svelte +25 -55
  416. package/dist/form/FormCascader.svelte.d.ts +2 -13
  417. package/dist/form/FormCascader.svelte.d.ts.map +1 -1
  418. package/dist/form/FormCheckbox.svelte +24 -56
  419. package/dist/form/FormCheckbox.svelte.d.ts +2 -14
  420. package/dist/form/FormCheckbox.svelte.d.ts.map +1 -1
  421. package/dist/form/FormCheckboxGroup.svelte +48 -0
  422. package/dist/form/FormCheckboxGroup.svelte.d.ts +15 -0
  423. package/dist/form/FormCheckboxGroup.svelte.d.ts.map +1 -0
  424. package/dist/form/FormDatePicker.svelte +24 -53
  425. package/dist/form/FormDatePicker.svelte.d.ts +2 -13
  426. package/dist/form/FormDatePicker.svelte.d.ts.map +1 -1
  427. package/dist/form/FormErrorMessage.svelte +75 -29
  428. package/dist/form/FormErrorMessage.svelte.d.ts +17 -4
  429. package/dist/form/FormErrorMessage.svelte.d.ts.map +1 -1
  430. package/dist/form/FormInput.svelte +31 -70
  431. package/dist/form/FormInput.svelte.d.ts +7 -19
  432. package/dist/form/FormInput.svelte.d.ts.map +1 -1
  433. package/dist/form/FormInputGroup.svelte +146 -0
  434. package/dist/form/FormInputGroup.svelte.d.ts +32 -0
  435. package/dist/form/FormInputGroup.svelte.d.ts.map +1 -0
  436. package/dist/form/FormInputNumber.svelte +74 -0
  437. package/dist/form/FormInputNumber.svelte.d.ts +20 -0
  438. package/dist/form/FormInputNumber.svelte.d.ts.map +1 -0
  439. package/dist/form/FormLabel.svelte +133 -24
  440. package/dist/form/FormLabel.svelte.d.ts +17 -4
  441. package/dist/form/FormLabel.svelte.d.ts.map +1 -1
  442. package/dist/form/FormPinCode.svelte +52 -0
  443. package/dist/form/FormPinCode.svelte.d.ts +16 -0
  444. package/dist/form/FormPinCode.svelte.d.ts.map +1 -0
  445. package/dist/form/FormRadio.svelte +23 -55
  446. package/dist/form/FormRadio.svelte.d.ts +2 -14
  447. package/dist/form/FormRadio.svelte.d.ts.map +1 -1
  448. package/dist/form/FormRadioGroup.svelte +54 -0
  449. package/dist/form/FormRadioGroup.svelte.d.ts +16 -0
  450. package/dist/form/FormRadioGroup.svelte.d.ts.map +1 -0
  451. package/dist/form/FormRating.svelte +24 -58
  452. package/dist/form/FormRating.svelte.d.ts +2 -14
  453. package/dist/form/FormRating.svelte.d.ts.map +1 -1
  454. package/dist/form/FormSection.svelte +35 -25
  455. package/dist/form/FormSection.svelte.d.ts +3 -1
  456. package/dist/form/FormSection.svelte.d.ts.map +1 -1
  457. package/dist/form/FormSelect.svelte +44 -68
  458. package/dist/form/FormSelect.svelte.d.ts +5 -16
  459. package/dist/form/FormSelect.svelte.d.ts.map +1 -1
  460. package/dist/form/FormSlider.svelte +33 -65
  461. package/dist/form/FormSlider.svelte.d.ts +2 -14
  462. package/dist/form/FormSlider.svelte.d.ts.map +1 -1
  463. package/dist/form/FormSlot.svelte +61 -20
  464. package/dist/form/FormSlot.svelte.d.ts +16 -2
  465. package/dist/form/FormSlot.svelte.d.ts.map +1 -1
  466. package/dist/form/FormSwitch.svelte +27 -59
  467. package/dist/form/FormSwitch.svelte.d.ts +4 -15
  468. package/dist/form/FormSwitch.svelte.d.ts.map +1 -1
  469. package/dist/form/FormTagInput.svelte +24 -53
  470. package/dist/form/FormTagInput.svelte.d.ts +2 -13
  471. package/dist/form/FormTagInput.svelte.d.ts.map +1 -1
  472. package/dist/form/FormTextArea.svelte +66 -0
  473. package/dist/form/FormTextArea.svelte.d.ts +18 -0
  474. package/dist/form/FormTextArea.svelte.d.ts.map +1 -0
  475. package/dist/form/FormTimePicker.svelte +51 -0
  476. package/dist/form/FormTimePicker.svelte.d.ts +15 -0
  477. package/dist/form/FormTimePicker.svelte.d.ts.map +1 -0
  478. package/dist/form/FormTreeSelect.svelte +26 -57
  479. package/dist/form/FormTreeSelect.svelte.d.ts +3 -14
  480. package/dist/form/FormTreeSelect.svelte.d.ts.map +1 -1
  481. package/dist/form/FormUpload.svelte +22 -63
  482. package/dist/form/FormUpload.svelte.d.ts +3 -15
  483. package/dist/form/FormUpload.svelte.d.ts.map +1 -1
  484. package/dist/form/GroupHookPanel.svelte +21 -0
  485. package/dist/form/GroupHookPanel.svelte.d.ts +19 -0
  486. package/dist/form/GroupHookPanel.svelte.d.ts.map +1 -0
  487. package/dist/form/context.d.ts +0 -3
  488. package/dist/form/context.d.ts.map +1 -1
  489. package/dist/form/field-props.d.ts +84 -0
  490. package/dist/form/field-props.d.ts.map +1 -0
  491. package/dist/form/field-props.js +58 -0
  492. package/dist/form/hooks.d.ts +53 -0
  493. package/dist/form/hooks.d.ts.map +1 -0
  494. package/dist/form/hooks.js +36 -0
  495. package/dist/form/index.d.ts +57 -4
  496. package/dist/form/index.d.ts.map +1 -1
  497. package/dist/form/index.js +60 -3
  498. package/dist/form/input-group-context.d.ts +7 -0
  499. package/dist/form/input-group-context.d.ts.map +1 -0
  500. package/dist/form/input-group-context.js +17 -0
  501. package/dist/form/meta.d.ts +213 -16
  502. package/dist/form/meta.d.ts.map +1 -1
  503. package/dist/form/meta.js +103 -15
  504. package/dist/grid/Col.svelte +1482 -78
  505. package/dist/grid/Col.svelte.d.ts +3 -5
  506. package/dist/grid/Col.svelte.d.ts.map +1 -1
  507. package/dist/grid/Row.svelte +151 -69
  508. package/dist/grid/Row.svelte.d.ts +9 -7
  509. package/dist/grid/Row.svelte.d.ts.map +1 -1
  510. package/dist/grid/meta.d.ts +37 -28
  511. package/dist/grid/meta.d.ts.map +1 -1
  512. package/dist/grid/meta.js +31 -25
  513. package/dist/highlight/Highlight.svelte +46 -66
  514. package/dist/highlight/Highlight.svelte.d.ts +9 -22
  515. package/dist/highlight/Highlight.svelte.d.ts.map +1 -1
  516. package/dist/highlight/meta.d.ts +12 -51
  517. package/dist/highlight/meta.d.ts.map +1 -1
  518. package/dist/highlight/meta.js +16 -46
  519. package/dist/hotkeys/HotKeys.svelte +152 -0
  520. package/dist/hotkeys/HotKeys.svelte.d.ts +28 -0
  521. package/dist/hotkeys/HotKeys.svelte.d.ts.map +1 -0
  522. package/dist/hotkeys/index.d.ts +12 -0
  523. package/dist/hotkeys/index.d.ts.map +1 -0
  524. package/dist/hotkeys/index.js +8 -0
  525. package/dist/hotkeys/meta.d.ts +103 -0
  526. package/dist/hotkeys/meta.d.ts.map +1 -0
  527. package/dist/hotkeys/meta.js +65 -0
  528. package/dist/icon/index.d.ts +1 -1
  529. package/dist/icon/index.d.ts.map +1 -1
  530. package/dist/icon/index.js +1 -1
  531. package/dist/icon/meta.d.ts +20 -28
  532. package/dist/icon/meta.d.ts.map +1 -1
  533. package/dist/icon/meta.js +20 -20
  534. package/dist/iconbutton/IconButton.svelte +89 -0
  535. package/dist/iconbutton/IconButton.svelte.d.ts +53 -0
  536. package/dist/iconbutton/IconButton.svelte.d.ts.map +1 -0
  537. package/dist/iconbutton/index.d.ts +3 -0
  538. package/dist/iconbutton/index.d.ts.map +1 -0
  539. package/dist/iconbutton/index.js +2 -0
  540. package/dist/iconbutton/meta.d.ts +150 -0
  541. package/dist/iconbutton/meta.d.ts.map +1 -0
  542. package/dist/iconbutton/meta.js +53 -0
  543. package/dist/illustrations/IllustrationConstruction.svelte +25 -0
  544. package/dist/illustrations/IllustrationConstruction.svelte.d.ts +8 -0
  545. package/dist/illustrations/IllustrationConstruction.svelte.d.ts.map +1 -0
  546. package/dist/illustrations/IllustrationConstructionDark.svelte +25 -0
  547. package/dist/illustrations/IllustrationConstructionDark.svelte.d.ts +8 -0
  548. package/dist/illustrations/IllustrationConstructionDark.svelte.d.ts.map +1 -0
  549. package/dist/illustrations/IllustrationFailure.svelte +25 -0
  550. package/dist/illustrations/IllustrationFailure.svelte.d.ts +8 -0
  551. package/dist/illustrations/IllustrationFailure.svelte.d.ts.map +1 -0
  552. package/dist/illustrations/IllustrationFailureDark.svelte +25 -0
  553. package/dist/illustrations/IllustrationFailureDark.svelte.d.ts +8 -0
  554. package/dist/illustrations/IllustrationFailureDark.svelte.d.ts.map +1 -0
  555. package/dist/illustrations/IllustrationIdle.svelte +25 -0
  556. package/dist/illustrations/IllustrationIdle.svelte.d.ts +8 -0
  557. package/dist/illustrations/IllustrationIdle.svelte.d.ts.map +1 -0
  558. package/dist/illustrations/IllustrationIdleDark.svelte +25 -0
  559. package/dist/illustrations/IllustrationIdleDark.svelte.d.ts +8 -0
  560. package/dist/illustrations/IllustrationIdleDark.svelte.d.ts.map +1 -0
  561. package/dist/illustrations/IllustrationNoAccess.svelte +25 -0
  562. package/dist/illustrations/IllustrationNoAccess.svelte.d.ts +8 -0
  563. package/dist/illustrations/IllustrationNoAccess.svelte.d.ts.map +1 -0
  564. package/dist/illustrations/IllustrationNoAccessDark.svelte +25 -0
  565. package/dist/illustrations/IllustrationNoAccessDark.svelte.d.ts +8 -0
  566. package/dist/illustrations/IllustrationNoAccessDark.svelte.d.ts.map +1 -0
  567. package/dist/illustrations/IllustrationNoContent.svelte +25 -0
  568. package/dist/illustrations/IllustrationNoContent.svelte.d.ts +8 -0
  569. package/dist/illustrations/IllustrationNoContent.svelte.d.ts.map +1 -0
  570. package/dist/illustrations/IllustrationNoContentDark.svelte +25 -0
  571. package/dist/illustrations/IllustrationNoContentDark.svelte.d.ts +8 -0
  572. package/dist/illustrations/IllustrationNoContentDark.svelte.d.ts.map +1 -0
  573. package/dist/illustrations/IllustrationNoResult.svelte +25 -0
  574. package/dist/illustrations/IllustrationNoResult.svelte.d.ts +8 -0
  575. package/dist/illustrations/IllustrationNoResult.svelte.d.ts.map +1 -0
  576. package/dist/illustrations/IllustrationNoResultDark.svelte +25 -0
  577. package/dist/illustrations/IllustrationNoResultDark.svelte.d.ts +8 -0
  578. package/dist/illustrations/IllustrationNoResultDark.svelte.d.ts.map +1 -0
  579. package/dist/illustrations/IllustrationNotFound.svelte +25 -0
  580. package/dist/illustrations/IllustrationNotFound.svelte.d.ts +8 -0
  581. package/dist/illustrations/IllustrationNotFound.svelte.d.ts.map +1 -0
  582. package/dist/illustrations/IllustrationNotFoundDark.svelte +25 -0
  583. package/dist/illustrations/IllustrationNotFoundDark.svelte.d.ts +8 -0
  584. package/dist/illustrations/IllustrationNotFoundDark.svelte.d.ts.map +1 -0
  585. package/dist/illustrations/IllustrationSuccess.svelte +25 -0
  586. package/dist/illustrations/IllustrationSuccess.svelte.d.ts +8 -0
  587. package/dist/illustrations/IllustrationSuccess.svelte.d.ts.map +1 -0
  588. package/dist/illustrations/IllustrationSuccessDark.svelte +25 -0
  589. package/dist/illustrations/IllustrationSuccessDark.svelte.d.ts +8 -0
  590. package/dist/illustrations/IllustrationSuccessDark.svelte.d.ts.map +1 -0
  591. package/dist/illustrations/index.d.ts +22 -0
  592. package/dist/illustrations/index.d.ts.map +1 -0
  593. package/dist/illustrations/index.js +21 -0
  594. package/dist/image/Image.svelte +260 -283
  595. package/dist/image/Image.svelte.d.ts +20 -21
  596. package/dist/image/Image.svelte.d.ts.map +1 -1
  597. package/dist/image/ImagePreview.svelte +201 -297
  598. package/dist/image/ImagePreview.svelte.d.ts +7 -10
  599. package/dist/image/ImagePreview.svelte.d.ts.map +1 -1
  600. package/dist/image/PreviewFooter.svelte +400 -0
  601. package/dist/image/PreviewFooter.svelte.d.ts +62 -0
  602. package/dist/image/PreviewFooter.svelte.d.ts.map +1 -0
  603. package/dist/image/PreviewHeader.svelte +93 -0
  604. package/dist/image/PreviewHeader.svelte.d.ts +16 -0
  605. package/dist/image/PreviewHeader.svelte.d.ts.map +1 -0
  606. package/dist/image/PreviewImage.svelte +296 -0
  607. package/dist/image/PreviewImage.svelte.d.ts +26 -0
  608. package/dist/image/PreviewImage.svelte.d.ts.map +1 -0
  609. package/dist/image/PreviewInner.svelte +554 -0
  610. package/dist/image/PreviewInner.svelte.d.ts +58 -0
  611. package/dist/image/PreviewInner.svelte.d.ts.map +1 -0
  612. package/dist/image/download.d.ts +8 -0
  613. package/dist/image/download.d.ts.map +1 -0
  614. package/dist/image/download.js +29 -0
  615. package/dist/image/index.d.ts +6 -7
  616. package/dist/image/index.d.ts.map +1 -1
  617. package/dist/image/index.js +5 -5
  618. package/dist/image/meta.d.ts +231 -88
  619. package/dist/image/meta.d.ts.map +1 -1
  620. package/dist/image/meta.js +93 -83
  621. package/dist/image/previewContext.d.ts +29 -0
  622. package/dist/image/previewContext.d.ts.map +1 -0
  623. package/dist/image/previewContext.js +8 -0
  624. package/dist/image/previewGeometry.d.ts +70 -0
  625. package/dist/image/previewGeometry.d.ts.map +1 -0
  626. package/dist/image/previewGeometry.js +184 -0
  627. package/dist/image/types.d.ts +66 -0
  628. package/dist/image/types.d.ts.map +1 -0
  629. package/dist/image/types.js +1 -0
  630. package/dist/index.d.ts +48 -26
  631. package/dist/index.d.ts.map +1 -1
  632. package/dist/index.js +40 -22
  633. package/dist/input/Input.svelte +537 -320
  634. package/dist/input/Input.svelte.d.ts +69 -21
  635. package/dist/input/Input.svelte.d.ts.map +1 -1
  636. package/dist/input/InputGroup.svelte +188 -0
  637. package/dist/input/InputGroup.svelte.d.ts +35 -0
  638. package/dist/input/InputGroup.svelte.d.ts.map +1 -0
  639. package/dist/input/TextArea.svelte +788 -0
  640. package/dist/input/TextArea.svelte.d.ts +104 -0
  641. package/dist/input/TextArea.svelte.d.ts.map +1 -0
  642. package/dist/input/context.d.ts +13 -0
  643. package/dist/input/context.d.ts.map +1 -0
  644. package/dist/input/context.js +5 -0
  645. package/dist/input/index.d.ts +4 -1
  646. package/dist/input/index.d.ts.map +1 -1
  647. package/dist/input/index.js +5 -1
  648. package/dist/input/meta.d.ts +802 -22
  649. package/dist/input/meta.d.ts.map +1 -1
  650. package/dist/input/meta.js +196 -17
  651. package/dist/input-number/InputNumber.svelte +446 -427
  652. package/dist/input-number/InputNumber.svelte.d.ts +73 -45
  653. package/dist/input-number/InputNumber.svelte.d.ts.map +1 -1
  654. package/dist/input-number/meta.d.ts +140 -48
  655. package/dist/input-number/meta.d.ts.map +1 -1
  656. package/dist/input-number/meta.js +39 -22
  657. package/dist/json-viewer/JsonViewer.svelte +528 -0
  658. package/dist/json-viewer/JsonViewer.svelte.d.ts +43 -0
  659. package/dist/json-viewer/JsonViewer.svelte.d.ts.map +1 -0
  660. package/dist/json-viewer/index.d.ts +4 -0
  661. package/dist/json-viewer/index.d.ts.map +1 -0
  662. package/dist/json-viewer/index.js +2 -0
  663. package/dist/json-viewer/meta.d.ts +129 -0
  664. package/dist/{lottie-icon → json-viewer}/meta.d.ts.map +1 -1
  665. package/dist/json-viewer/meta.js +130 -0
  666. package/dist/json-viewer/semi-json-viewer-core.d.ts +94 -0
  667. package/dist/layout/Content.svelte +8 -25
  668. package/dist/layout/Content.svelte.d.ts +1 -3
  669. package/dist/layout/Content.svelte.d.ts.map +1 -1
  670. package/dist/layout/Footer.svelte +7 -40
  671. package/dist/layout/Footer.svelte.d.ts +1 -4
  672. package/dist/layout/Footer.svelte.d.ts.map +1 -1
  673. package/dist/layout/Header.svelte +7 -37
  674. package/dist/layout/Header.svelte.d.ts +1 -4
  675. package/dist/layout/Header.svelte.d.ts.map +1 -1
  676. package/dist/layout/Layout.svelte +30 -17
  677. package/dist/layout/Layout.svelte.d.ts +3 -1
  678. package/dist/layout/Layout.svelte.d.ts.map +1 -1
  679. package/dist/layout/Sider.svelte +71 -186
  680. package/dist/layout/Sider.svelte.d.ts +15 -19
  681. package/dist/layout/Sider.svelte.d.ts.map +1 -1
  682. package/dist/layout/meta.d.ts +28 -91
  683. package/dist/layout/meta.d.ts.map +1 -1
  684. package/dist/layout/meta.js +38 -56
  685. package/dist/list/List.svelte +158 -825
  686. package/dist/list/List.svelte.d.ts +32 -70
  687. package/dist/list/List.svelte.d.ts.map +1 -1
  688. package/dist/list/ListItem.svelte +129 -131
  689. package/dist/list/ListItem.svelte.d.ts +21 -12
  690. package/dist/list/ListItem.svelte.d.ts.map +1 -1
  691. package/dist/list/context.d.ts +32 -23
  692. package/dist/list/context.d.ts.map +1 -1
  693. package/dist/list/index.d.ts +3 -8
  694. package/dist/list/index.d.ts.map +1 -1
  695. package/dist/list/index.js +4 -8
  696. package/dist/list/meta.d.ts +110 -98
  697. package/dist/list/meta.d.ts.map +1 -1
  698. package/dist/list/meta.js +76 -58
  699. package/dist/lottie/Lottie.svelte +138 -0
  700. package/dist/lottie/Lottie.svelte.d.ts +32 -0
  701. package/dist/lottie/Lottie.svelte.d.ts.map +1 -0
  702. package/dist/lottie/index.d.ts +3 -0
  703. package/dist/lottie/index.d.ts.map +1 -0
  704. package/dist/lottie/index.js +2 -0
  705. package/dist/lottie/meta.d.ts +76 -0
  706. package/dist/lottie/meta.d.ts.map +1 -0
  707. package/dist/lottie/meta.js +81 -0
  708. package/dist/markdown-render/HastNode.svelte +66 -0
  709. package/dist/markdown-render/HastNode.svelte.d.ts +11 -0
  710. package/dist/markdown-render/HastNode.svelte.d.ts.map +1 -0
  711. package/dist/markdown-render/MarkdownRender.svelte +152 -0
  712. package/dist/markdown-render/MarkdownRender.svelte.d.ts +26 -0
  713. package/dist/markdown-render/MarkdownRender.svelte.d.ts.map +1 -0
  714. package/dist/markdown-render/components/MdCode.svelte +20 -0
  715. package/dist/markdown-render/components/MdCode.svelte.d.ts +9 -0
  716. package/dist/markdown-render/components/MdCode.svelte.d.ts.map +1 -0
  717. package/dist/markdown-render/components/MdHeading.svelte +29 -0
  718. package/dist/markdown-render/components/MdHeading.svelte.d.ts +11 -0
  719. package/dist/markdown-render/components/MdHeading.svelte.d.ts.map +1 -0
  720. package/dist/markdown-render/components/MdImage.svelte +28 -0
  721. package/dist/markdown-render/components/MdImage.svelte.d.ts +9 -0
  722. package/dist/markdown-render/components/MdImage.svelte.d.ts.map +1 -0
  723. package/dist/markdown-render/components/MdLink.svelte +33 -0
  724. package/dist/markdown-render/components/MdLink.svelte.d.ts +10 -0
  725. package/dist/markdown-render/components/MdLink.svelte.d.ts.map +1 -0
  726. package/dist/markdown-render/components/MdParagraph.svelte +19 -0
  727. package/dist/markdown-render/components/MdParagraph.svelte.d.ts +9 -0
  728. package/dist/markdown-render/components/MdParagraph.svelte.d.ts.map +1 -0
  729. package/dist/markdown-render/components/MdPre.svelte +48 -0
  730. package/dist/markdown-render/components/MdPre.svelte.d.ts +9 -0
  731. package/dist/markdown-render/components/MdPre.svelte.d.ts.map +1 -0
  732. package/dist/markdown-render/components/MdTable.svelte +53 -0
  733. package/dist/markdown-render/components/MdTable.svelte.d.ts +9 -0
  734. package/dist/markdown-render/components/MdTable.svelte.d.ts.map +1 -0
  735. package/dist/markdown-render/components/index.d.ts +26 -0
  736. package/dist/markdown-render/components/index.d.ts.map +1 -0
  737. package/dist/markdown-render/components/index.js +27 -0
  738. package/dist/markdown-render/index.d.ts +4 -0
  739. package/dist/markdown-render/index.d.ts.map +1 -0
  740. package/dist/markdown-render/index.js +2 -0
  741. package/dist/markdown-render/meta.d.ts +81 -0
  742. package/dist/markdown-render/meta.d.ts.map +1 -0
  743. package/dist/markdown-render/meta.js +105 -0
  744. package/dist/markdown-render/props.d.ts +15 -0
  745. package/dist/markdown-render/props.d.ts.map +1 -0
  746. package/dist/markdown-render/props.js +51 -0
  747. package/dist/modal/ConfirmModal.svelte +105 -86
  748. package/dist/modal/ConfirmModal.svelte.d.ts +7 -4
  749. package/dist/modal/ConfirmModal.svelte.d.ts.map +1 -1
  750. package/dist/modal/Modal.svelte +459 -343
  751. package/dist/modal/Modal.svelte.d.ts +71 -41
  752. package/dist/modal/Modal.svelte.d.ts.map +1 -1
  753. package/dist/modal/ModalContextHolder.svelte +22 -0
  754. package/dist/modal/ModalContextHolder.svelte.d.ts +8 -0
  755. package/dist/modal/ModalContextHolder.svelte.d.ts.map +1 -0
  756. package/dist/modal/command.svelte.d.ts +7 -1
  757. package/dist/modal/command.svelte.d.ts.map +1 -1
  758. package/dist/modal/command.svelte.js +1 -1
  759. package/dist/modal/index.d.ts +7 -1
  760. package/dist/modal/index.d.ts.map +1 -1
  761. package/dist/modal/index.js +8 -2
  762. package/dist/modal/meta.d.ts +149 -103
  763. package/dist/modal/meta.d.ts.map +1 -1
  764. package/dist/modal/meta.js +95 -109
  765. package/dist/modal/use-modal.svelte.d.ts +33 -0
  766. package/dist/modal/use-modal.svelte.d.ts.map +1 -0
  767. package/dist/modal/use-modal.svelte.js +44 -0
  768. package/dist/nav/Nav.svelte +329 -146
  769. package/dist/nav/Nav.svelte.d.ts +43 -30
  770. package/dist/nav/Nav.svelte.d.ts.map +1 -1
  771. package/dist/nav/NavCollapseButton.svelte +74 -0
  772. package/dist/nav/NavCollapseButton.svelte.d.ts +12 -0
  773. package/dist/nav/NavCollapseButton.svelte.d.ts.map +1 -0
  774. package/dist/nav/NavFooter.svelte +42 -47
  775. package/dist/nav/NavFooter.svelte.d.ts +6 -2
  776. package/dist/nav/NavFooter.svelte.d.ts.map +1 -1
  777. package/dist/nav/NavHeader.svelte +61 -12
  778. package/dist/nav/NavHeader.svelte.d.ts +8 -2
  779. package/dist/nav/NavHeader.svelte.d.ts.map +1 -1
  780. package/dist/nav/NavItem.svelte +21 -17
  781. package/dist/nav/NavItem.svelte.d.ts +12 -10
  782. package/dist/nav/NavItem.svelte.d.ts.map +1 -1
  783. package/dist/nav/NavItemRender.svelte +420 -0
  784. package/dist/nav/NavItemRender.svelte.d.ts +12 -0
  785. package/dist/nav/NavItemRender.svelte.d.ts.map +1 -0
  786. package/dist/nav/NavPopupNode.svelte +119 -0
  787. package/dist/nav/NavPopupNode.svelte.d.ts +8 -0
  788. package/dist/nav/NavPopupNode.svelte.d.ts.map +1 -0
  789. package/dist/nav/NavSub.svelte +44 -6
  790. package/dist/nav/NavSub.svelte.d.ts +20 -4
  791. package/dist/nav/NavSub.svelte.d.ts.map +1 -1
  792. package/dist/nav/NavSubPopup.svelte +90 -0
  793. package/dist/nav/NavSubPopup.svelte.d.ts +14 -0
  794. package/dist/nav/NavSubPopup.svelte.d.ts.map +1 -0
  795. package/dist/nav/context.d.ts +57 -8
  796. package/dist/nav/context.d.ts.map +1 -1
  797. package/dist/nav/context.js +6 -2
  798. package/dist/nav/index.d.ts +1 -1
  799. package/dist/nav/index.d.ts.map +1 -1
  800. package/dist/nav/meta.d.ts +131 -52
  801. package/dist/nav/meta.d.ts.map +1 -1
  802. package/dist/nav/meta.js +70 -29
  803. package/dist/nav/types.d.ts +89 -22
  804. package/dist/nav/types.d.ts.map +1 -1
  805. package/dist/nav/types.js +47 -26
  806. package/dist/notification/NotificationContainer.svelte +131 -119
  807. package/dist/notification/NotificationContainer.svelte.d.ts.map +1 -1
  808. package/dist/notification/NotificationHolder.svelte +18 -0
  809. package/dist/notification/NotificationHolder.svelte.d.ts +8 -0
  810. package/dist/notification/NotificationHolder.svelte.d.ts.map +1 -0
  811. package/dist/notification/NotificationItem.svelte +235 -289
  812. package/dist/notification/NotificationItem.svelte.d.ts +1 -5
  813. package/dist/notification/NotificationItem.svelte.d.ts.map +1 -1
  814. package/dist/notification/index.d.ts +3 -2
  815. package/dist/notification/index.d.ts.map +1 -1
  816. package/dist/notification/index.js +2 -1
  817. package/dist/notification/meta.d.ts +73 -50
  818. package/dist/notification/meta.d.ts.map +1 -1
  819. package/dist/notification/meta.js +85 -74
  820. package/dist/notification/store.d.ts +59 -44
  821. package/dist/notification/store.d.ts.map +1 -1
  822. package/dist/notification/store.js +68 -74
  823. package/dist/overflow-list/OverflowList.svelte +366 -470
  824. package/dist/overflow-list/OverflowList.svelte.d.ts +37 -40
  825. package/dist/overflow-list/OverflowList.svelte.d.ts.map +1 -1
  826. package/dist/overflow-list/meta.d.ts +71 -71
  827. package/dist/overflow-list/meta.d.ts.map +1 -1
  828. package/dist/overflow-list/meta.js +63 -78
  829. package/dist/pagination/Pagination.svelte +454 -251
  830. package/dist/pagination/Pagination.svelte.d.ts +38 -39
  831. package/dist/pagination/Pagination.svelte.d.ts.map +1 -1
  832. package/dist/pagination/meta.d.ts +75 -83
  833. package/dist/pagination/meta.d.ts.map +1 -1
  834. package/dist/pagination/meta.js +78 -57
  835. package/dist/pincode/PinCode.svelte +348 -0
  836. package/dist/pincode/PinCode.svelte.d.ts +47 -0
  837. package/dist/pincode/PinCode.svelte.d.ts.map +1 -0
  838. package/dist/pincode/index.d.ts +3 -0
  839. package/dist/pincode/index.d.ts.map +1 -0
  840. package/dist/pincode/index.js +2 -0
  841. package/dist/pincode/meta.d.ts +147 -0
  842. package/dist/pincode/meta.d.ts.map +1 -0
  843. package/dist/pincode/meta.js +91 -0
  844. package/dist/popconfirm/Popconfirm.svelte +313 -599
  845. package/dist/popconfirm/Popconfirm.svelte.d.ts +65 -68
  846. package/dist/popconfirm/Popconfirm.svelte.d.ts.map +1 -1
  847. package/dist/popconfirm/meta.d.ts +85 -161
  848. package/dist/popconfirm/meta.d.ts.map +1 -1
  849. package/dist/popconfirm/meta.js +68 -185
  850. package/dist/popover/Popover.svelte +342 -564
  851. package/dist/popover/Popover.svelte.d.ts +82 -52
  852. package/dist/popover/Popover.svelte.d.ts.map +1 -1
  853. package/dist/popover/meta.d.ts +102 -74
  854. package/dist/popover/meta.d.ts.map +1 -1
  855. package/dist/popover/meta.js +103 -62
  856. package/dist/progress/Progress.svelte +248 -309
  857. package/dist/progress/Progress.svelte.d.ts +19 -27
  858. package/dist/progress/Progress.svelte.d.ts.map +1 -1
  859. package/dist/progress/index.d.ts +1 -1
  860. package/dist/progress/index.d.ts.map +1 -1
  861. package/dist/progress/meta.d.ts +70 -62
  862. package/dist/progress/meta.d.ts.map +1 -1
  863. package/dist/progress/meta.js +68 -77
  864. package/dist/radio/Radio.svelte +451 -239
  865. package/dist/radio/Radio.svelte.d.ts +13 -7
  866. package/dist/radio/Radio.svelte.d.ts.map +1 -1
  867. package/dist/radio/RadioGroup.svelte +152 -121
  868. package/dist/radio/RadioGroup.svelte.d.ts +27 -6
  869. package/dist/radio/RadioGroup.svelte.d.ts.map +1 -1
  870. package/dist/radio/context.d.ts +23 -18
  871. package/dist/radio/context.d.ts.map +1 -1
  872. package/dist/radio/index.d.ts +1 -1
  873. package/dist/radio/index.d.ts.map +1 -1
  874. package/dist/radio/meta.d.ts +62 -23
  875. package/dist/radio/meta.d.ts.map +1 -1
  876. package/dist/radio/meta.js +60 -17
  877. package/dist/rating/Rating.svelte +358 -275
  878. package/dist/rating/Rating.svelte.d.ts +25 -18
  879. package/dist/rating/Rating.svelte.d.ts.map +1 -1
  880. package/dist/rating/meta.d.ts +73 -40
  881. package/dist/rating/meta.d.ts.map +1 -1
  882. package/dist/rating/meta.js +55 -28
  883. package/dist/resizable/Resizable.svelte +354 -0
  884. package/dist/resizable/Resizable.svelte.d.ts +61 -0
  885. package/dist/resizable/Resizable.svelte.d.ts.map +1 -0
  886. package/dist/resizable/ResizeGroup.svelte +308 -0
  887. package/dist/resizable/ResizeGroup.svelte.d.ts +13 -0
  888. package/dist/resizable/ResizeGroup.svelte.d.ts.map +1 -0
  889. package/dist/resizable/ResizeHandler.svelte +87 -0
  890. package/dist/resizable/ResizeHandler.svelte.d.ts +13 -0
  891. package/dist/resizable/ResizeHandler.svelte.d.ts.map +1 -0
  892. package/dist/resizable/ResizeItem.svelte +103 -0
  893. package/dist/resizable/ResizeItem.svelte.d.ts +20 -0
  894. package/dist/resizable/ResizeItem.svelte.d.ts.map +1 -0
  895. package/dist/resizable/context.d.ts +39 -0
  896. package/dist/resizable/context.d.ts.map +1 -0
  897. package/dist/resizable/context.js +1 -0
  898. package/dist/resizable/index.d.ts +8 -0
  899. package/dist/resizable/index.d.ts.map +1 -0
  900. package/dist/resizable/index.js +7 -0
  901. package/dist/resizable/meta.d.ts +243 -0
  902. package/dist/resizable/meta.d.ts.map +1 -0
  903. package/dist/resizable/meta.js +90 -0
  904. package/dist/resize-observer/ResizeObserver.svelte +12 -0
  905. package/dist/resize-observer/ResizeObserver.svelte.d.ts +7 -0
  906. package/dist/resize-observer/ResizeObserver.svelte.d.ts.map +1 -1
  907. package/dist/resize-observer/meta.d.ts +5 -0
  908. package/dist/resize-observer/meta.d.ts.map +1 -1
  909. package/dist/resize-observer/meta.js +6 -0
  910. package/dist/scroll-list/ScrollItem.svelte +612 -0
  911. package/dist/scroll-list/ScrollItem.svelte.d.ts +29 -0
  912. package/dist/scroll-list/ScrollItem.svelte.d.ts.map +1 -0
  913. package/dist/scroll-list/ScrollList.svelte +78 -227
  914. package/dist/scroll-list/ScrollList.svelte.d.ts +12 -41
  915. package/dist/scroll-list/ScrollList.svelte.d.ts.map +1 -1
  916. package/dist/scroll-list/index.d.ts +2 -2
  917. package/dist/scroll-list/index.d.ts.map +1 -1
  918. package/dist/scroll-list/index.js +1 -0
  919. package/dist/scroll-list/meta.d.ts +96 -101
  920. package/dist/scroll-list/meta.d.ts.map +1 -1
  921. package/dist/scroll-list/meta.js +84 -65
  922. package/dist/scroll-list/types.d.ts +2 -16
  923. package/dist/scroll-list/types.d.ts.map +1 -1
  924. package/dist/select/Select.svelte +683 -232
  925. package/dist/select/Select.svelte.d.ts +170 -37
  926. package/dist/select/Select.svelte.d.ts.map +1 -1
  927. package/dist/select/meta.d.ts +186 -40
  928. package/dist/select/meta.d.ts.map +1 -1
  929. package/dist/select/meta.js +54 -20
  930. package/dist/side-sheet/SideSheet.svelte +541 -500
  931. package/dist/side-sheet/SideSheet.svelte.d.ts +36 -49
  932. package/dist/side-sheet/SideSheet.svelte.d.ts.map +1 -1
  933. package/dist/side-sheet/meta.d.ts +77 -112
  934. package/dist/side-sheet/meta.d.ts.map +1 -1
  935. package/dist/side-sheet/meta.js +71 -71
  936. package/dist/sidebar/SideBar.svelte +168 -0
  937. package/dist/sidebar/SideBar.svelte.d.ts +28 -0
  938. package/dist/sidebar/SideBar.svelte.d.ts.map +1 -0
  939. package/dist/sidebar/SideBarAnnotation.svelte +453 -0
  940. package/dist/sidebar/SideBarAnnotation.svelte.d.ts +47 -0
  941. package/dist/sidebar/SideBarAnnotation.svelte.d.ts.map +1 -0
  942. package/dist/sidebar/SideBarCodeContent.svelte +201 -0
  943. package/dist/sidebar/SideBarCodeContent.svelte.d.ts +42 -0
  944. package/dist/sidebar/SideBarCodeContent.svelte.d.ts.map +1 -0
  945. package/dist/sidebar/SideBarContainer.svelte +478 -0
  946. package/dist/sidebar/SideBarContainer.svelte.d.ts +38 -0
  947. package/dist/sidebar/SideBarContainer.svelte.d.ts.map +1 -0
  948. package/dist/sidebar/SideBarFileContent.svelte +192 -0
  949. package/dist/sidebar/SideBarFileContent.svelte.d.ts +40 -0
  950. package/dist/sidebar/SideBarFileContent.svelte.d.ts.map +1 -0
  951. package/dist/sidebar/SideBarFileItem.svelte +311 -0
  952. package/dist/sidebar/SideBarFileItem.svelte.d.ts +21 -0
  953. package/dist/sidebar/SideBarFileItem.svelte.d.ts.map +1 -0
  954. package/dist/sidebar/SideBarImageUploadNode.svelte +103 -0
  955. package/dist/sidebar/SideBarImageUploadNode.svelte.d.ts +5 -0
  956. package/dist/sidebar/SideBarImageUploadNode.svelte.d.ts.map +1 -0
  957. package/dist/sidebar/SideBarMcpConfigure.svelte +544 -0
  958. package/dist/sidebar/SideBarMcpConfigure.svelte.d.ts +60 -0
  959. package/dist/sidebar/SideBarMcpConfigure.svelte.d.ts.map +1 -0
  960. package/dist/sidebar/SideBarOptions.svelte +137 -0
  961. package/dist/sidebar/SideBarOptions.svelte.d.ts +10 -0
  962. package/dist/sidebar/SideBarOptions.svelte.d.ts.map +1 -0
  963. package/dist/sidebar/file-extensions.d.ts +37 -0
  964. package/dist/sidebar/file-extensions.d.ts.map +1 -0
  965. package/dist/sidebar/file-extensions.js +45 -0
  966. package/dist/sidebar/index.d.ts +14 -0
  967. package/dist/sidebar/index.d.ts.map +1 -0
  968. package/dist/sidebar/index.js +9 -0
  969. package/dist/sidebar/meta.d.ts +373 -0
  970. package/dist/sidebar/meta.d.ts.map +1 -0
  971. package/dist/sidebar/meta.js +219 -0
  972. package/dist/sidebar/types.d.ts +70 -0
  973. package/dist/sidebar/types.d.ts.map +1 -0
  974. package/dist/sidebar/types.js +1 -0
  975. package/dist/skeleton/Skeleton.svelte +129 -97
  976. package/dist/skeleton/Skeleton.svelte.d.ts +7 -2
  977. package/dist/skeleton/Skeleton.svelte.d.ts.map +1 -1
  978. package/dist/skeleton/SkeletonAvatar.svelte +25 -68
  979. package/dist/skeleton/SkeletonAvatar.svelte.d.ts +6 -2
  980. package/dist/skeleton/SkeletonAvatar.svelte.d.ts.map +1 -1
  981. package/dist/skeleton/SkeletonButton.svelte +6 -77
  982. package/dist/skeleton/SkeletonButton.svelte.d.ts +0 -4
  983. package/dist/skeleton/SkeletonButton.svelte.d.ts.map +1 -1
  984. package/dist/skeleton/SkeletonImage.svelte +6 -87
  985. package/dist/skeleton/SkeletonImage.svelte.d.ts +0 -3
  986. package/dist/skeleton/SkeletonImage.svelte.d.ts.map +1 -1
  987. package/dist/skeleton/SkeletonParagraph.svelte +10 -87
  988. package/dist/skeleton/SkeletonParagraph.svelte.d.ts +1 -1
  989. package/dist/skeleton/SkeletonParagraph.svelte.d.ts.map +1 -1
  990. package/dist/skeleton/SkeletonTitle.svelte +6 -61
  991. package/dist/skeleton/SkeletonTitle.svelte.d.ts +0 -2
  992. package/dist/skeleton/SkeletonTitle.svelte.d.ts.map +1 -1
  993. package/dist/skeleton/index.d.ts +1 -1
  994. package/dist/skeleton/index.d.ts.map +1 -1
  995. package/dist/skeleton/meta.d.ts +99 -23
  996. package/dist/skeleton/meta.d.ts.map +1 -1
  997. package/dist/skeleton/meta.js +70 -28
  998. package/dist/slider/Slider.svelte +418 -419
  999. package/dist/slider/Slider.svelte.d.ts +45 -54
  1000. package/dist/slider/Slider.svelte.d.ts.map +1 -1
  1001. package/dist/slider/meta.d.ts +49 -87
  1002. package/dist/slider/meta.d.ts.map +1 -1
  1003. package/dist/slider/meta.js +50 -26
  1004. package/dist/space/Space.svelte +97 -49
  1005. package/dist/space/Space.svelte.d.ts +17 -4
  1006. package/dist/space/Space.svelte.d.ts.map +1 -1
  1007. package/dist/space/meta.d.ts +30 -17
  1008. package/dist/space/meta.d.ts.map +1 -1
  1009. package/dist/space/meta.js +29 -12
  1010. package/dist/spin/Spin.svelte +160 -195
  1011. package/dist/spin/Spin.svelte.d.ts +8 -12
  1012. package/dist/spin/Spin.svelte.d.ts.map +1 -1
  1013. package/dist/spin/meta.d.ts +36 -53
  1014. package/dist/spin/meta.d.ts.map +1 -1
  1015. package/dist/spin/meta.js +27 -47
  1016. package/dist/steps/Step.svelte +236 -0
  1017. package/dist/steps/Step.svelte.d.ts +5 -0
  1018. package/dist/steps/Step.svelte.d.ts.map +1 -0
  1019. package/dist/steps/Steps.svelte +521 -274
  1020. package/dist/steps/Steps.svelte.d.ts +14 -22
  1021. package/dist/steps/Steps.svelte.d.ts.map +1 -1
  1022. package/dist/steps/context.d.ts +41 -0
  1023. package/dist/steps/context.d.ts.map +1 -0
  1024. package/dist/steps/context.js +8 -0
  1025. package/dist/steps/index.d.ts +8 -2
  1026. package/dist/steps/index.d.ts.map +1 -1
  1027. package/dist/steps/index.js +5 -1
  1028. package/dist/steps/meta.d.ts +67 -42
  1029. package/dist/steps/meta.d.ts.map +1 -1
  1030. package/dist/steps/meta.js +169 -25
  1031. package/dist/steps/types.d.ts +30 -7
  1032. package/dist/steps/types.d.ts.map +1 -1
  1033. package/dist/switch/Switch.svelte +224 -205
  1034. package/dist/switch/Switch.svelte.d.ts +22 -43
  1035. package/dist/switch/Switch.svelte.d.ts.map +1 -1
  1036. package/dist/switch/meta.d.ts +44 -51
  1037. package/dist/switch/meta.d.ts.map +1 -1
  1038. package/dist/switch/meta.js +68 -27
  1039. package/dist/table/Table.svelte +1065 -600
  1040. package/dist/table/Table.svelte.d.ts +95 -1
  1041. package/dist/table/Table.svelte.d.ts.map +1 -1
  1042. package/dist/table/meta.d.ts +221 -2
  1043. package/dist/table/meta.d.ts.map +1 -1
  1044. package/dist/table/meta.js +119 -18
  1045. package/dist/table/types.d.ts +36 -6
  1046. package/dist/table/types.d.ts.map +1 -1
  1047. package/dist/tabs/TabPane.svelte +4 -1
  1048. package/dist/tabs/TabPane.svelte.d.ts +2 -0
  1049. package/dist/tabs/TabPane.svelte.d.ts.map +1 -1
  1050. package/dist/tabs/Tabs.svelte +453 -280
  1051. package/dist/tabs/Tabs.svelte.d.ts +41 -32
  1052. package/dist/tabs/Tabs.svelte.d.ts.map +1 -1
  1053. package/dist/tabs/context.d.ts +3 -0
  1054. package/dist/tabs/context.d.ts.map +1 -1
  1055. package/dist/tabs/meta.d.ts +43 -47
  1056. package/dist/tabs/meta.d.ts.map +1 -1
  1057. package/dist/tabs/meta.js +76 -47
  1058. package/dist/tabs/types.d.ts +3 -0
  1059. package/dist/tabs/types.d.ts.map +1 -1
  1060. package/dist/tag/SplitTagGroup.svelte +62 -0
  1061. package/dist/tag/SplitTagGroup.svelte.d.ts +15 -0
  1062. package/dist/tag/SplitTagGroup.svelte.d.ts.map +1 -0
  1063. package/dist/tag/Tag.svelte +394 -261
  1064. package/dist/tag/Tag.svelte.d.ts +40 -23
  1065. package/dist/tag/Tag.svelte.d.ts.map +1 -1
  1066. package/dist/tag/TagGroup.svelte +208 -0
  1067. package/dist/tag/TagGroup.svelte.d.ts +56 -0
  1068. package/dist/tag/TagGroup.svelte.d.ts.map +1 -0
  1069. package/dist/tag/index.d.ts +2 -0
  1070. package/dist/tag/index.d.ts.map +1 -1
  1071. package/dist/tag/index.js +4 -0
  1072. package/dist/tag/meta.d.ts +157 -51
  1073. package/dist/tag/meta.d.ts.map +1 -1
  1074. package/dist/tag/meta.js +82 -45
  1075. package/dist/tag-input/TagInput.svelte +575 -261
  1076. package/dist/tag-input/TagInput.svelte.d.ts +52 -17
  1077. package/dist/tag-input/TagInput.svelte.d.ts.map +1 -1
  1078. package/dist/tag-input/meta.d.ts +132 -20
  1079. package/dist/tag-input/meta.d.ts.map +1 -1
  1080. package/dist/tag-input/meta.js +49 -21
  1081. package/dist/tag-input/split.d.ts +8 -0
  1082. package/dist/tag-input/split.d.ts.map +1 -0
  1083. package/dist/tag-input/split.js +22 -0
  1084. package/dist/time-picker/TimePicker.svelte +504 -722
  1085. package/dist/time-picker/TimePicker.svelte.d.ts +67 -47
  1086. package/dist/time-picker/TimePicker.svelte.d.ts.map +1 -1
  1087. package/dist/time-picker/meta.d.ts +201 -19
  1088. package/dist/time-picker/meta.d.ts.map +1 -1
  1089. package/dist/time-picker/meta.js +73 -16
  1090. package/dist/timeline/Timeline.svelte +212 -548
  1091. package/dist/timeline/Timeline.svelte.d.ts +9 -22
  1092. package/dist/timeline/Timeline.svelte.d.ts.map +1 -1
  1093. package/dist/timeline/TimelineItem.svelte +101 -143
  1094. package/dist/timeline/TimelineItem.svelte.d.ts +20 -20
  1095. package/dist/timeline/TimelineItem.svelte.d.ts.map +1 -1
  1096. package/dist/timeline/context.d.ts +8 -12
  1097. package/dist/timeline/context.d.ts.map +1 -1
  1098. package/dist/timeline/index.d.ts +2 -2
  1099. package/dist/timeline/index.d.ts.map +1 -1
  1100. package/dist/timeline/meta.d.ts +59 -95
  1101. package/dist/timeline/meta.d.ts.map +1 -1
  1102. package/dist/timeline/meta.js +81 -86
  1103. package/dist/timeline/types.d.ts +16 -5
  1104. package/dist/timeline/types.d.ts.map +1 -1
  1105. package/dist/toast/ToastContainer.svelte +111 -125
  1106. package/dist/toast/ToastContainer.svelte.d.ts +3 -0
  1107. package/dist/toast/ToastContainer.svelte.d.ts.map +1 -1
  1108. package/dist/toast/ToastHolder.svelte +18 -0
  1109. package/dist/toast/ToastHolder.svelte.d.ts +8 -0
  1110. package/dist/toast/ToastHolder.svelte.d.ts.map +1 -0
  1111. package/dist/toast/ToastItem.svelte +209 -191
  1112. package/dist/toast/ToastItem.svelte.d.ts +7 -0
  1113. package/dist/toast/ToastItem.svelte.d.ts.map +1 -1
  1114. package/dist/toast/index.d.ts +3 -2
  1115. package/dist/toast/index.d.ts.map +1 -1
  1116. package/dist/toast/index.js +2 -1
  1117. package/dist/toast/meta.d.ts +84 -53
  1118. package/dist/toast/meta.d.ts.map +1 -1
  1119. package/dist/toast/meta.js +69 -62
  1120. package/dist/toast/store.d.ts +79 -51
  1121. package/dist/toast/store.d.ts.map +1 -1
  1122. package/dist/toast/store.js +179 -116
  1123. package/dist/tooltip/Tooltip.svelte +533 -203
  1124. package/dist/tooltip/Tooltip.svelte.d.ts +90 -20
  1125. package/dist/tooltip/Tooltip.svelte.d.ts.map +1 -1
  1126. package/dist/tooltip/index.d.ts +1 -0
  1127. package/dist/tooltip/index.d.ts.map +1 -1
  1128. package/dist/tooltip/index.js +1 -0
  1129. package/dist/tooltip/meta.d.ts +131 -34
  1130. package/dist/tooltip/meta.d.ts.map +1 -1
  1131. package/dist/tooltip/meta.js +92 -28
  1132. package/dist/tooltip/placement.d.ts +21 -1
  1133. package/dist/tooltip/placement.d.ts.map +1 -1
  1134. package/dist/tooltip/placement.js +57 -1
  1135. package/dist/transfer/Transfer.svelte +686 -1100
  1136. package/dist/transfer/Transfer.svelte.d.ts +68 -73
  1137. package/dist/transfer/Transfer.svelte.d.ts.map +1 -1
  1138. package/dist/transfer/meta.d.ts +44 -65
  1139. package/dist/transfer/meta.d.ts.map +1 -1
  1140. package/dist/transfer/meta.js +76 -31
  1141. package/dist/transfer/types.d.ts +5 -0
  1142. package/dist/transfer/types.d.ts.map +1 -1
  1143. package/dist/tree/Tree.svelte +973 -422
  1144. package/dist/tree/Tree.svelte.d.ts +291 -72
  1145. package/dist/tree/Tree.svelte.d.ts.map +1 -1
  1146. package/dist/tree/meta.d.ts +246 -79
  1147. package/dist/tree/meta.d.ts.map +1 -1
  1148. package/dist/tree/meta.js +238 -58
  1149. package/dist/tree-select/TreeSelect.svelte +591 -240
  1150. package/dist/tree-select/TreeSelect.svelte.d.ts +88 -54
  1151. package/dist/tree-select/TreeSelect.svelte.d.ts.map +1 -1
  1152. package/dist/tree-select/meta.d.ts +344 -57
  1153. package/dist/tree-select/meta.d.ts.map +1 -1
  1154. package/dist/tree-select/meta.js +80 -26
  1155. package/dist/tree-select/types.d.ts +2 -0
  1156. package/dist/tree-select/types.d.ts.map +1 -1
  1157. package/dist/typography/Numeral.svelte +117 -0
  1158. package/dist/typography/Numeral.svelte.d.ts +35 -0
  1159. package/dist/typography/Numeral.svelte.d.ts.map +1 -0
  1160. package/dist/typography/Paragraph.svelte +20 -34
  1161. package/dist/typography/Paragraph.svelte.d.ts +8 -13
  1162. package/dist/typography/Paragraph.svelte.d.ts.map +1 -1
  1163. package/dist/typography/Text.svelte +22 -33
  1164. package/dist/typography/Text.svelte.d.ts +11 -13
  1165. package/dist/typography/Text.svelte.d.ts.map +1 -1
  1166. package/dist/typography/Title.svelte +23 -28
  1167. package/dist/typography/Title.svelte.d.ts +10 -11
  1168. package/dist/typography/Title.svelte.d.ts.map +1 -1
  1169. package/dist/typography/TypographyBase.svelte +534 -479
  1170. package/dist/typography/TypographyBase.svelte.d.ts +44 -29
  1171. package/dist/typography/TypographyBase.svelte.d.ts.map +1 -1
  1172. package/dist/typography/index.d.ts +3 -3
  1173. package/dist/typography/index.d.ts.map +1 -1
  1174. package/dist/typography/index.js +3 -3
  1175. package/dist/typography/meta.d.ts +190 -185
  1176. package/dist/typography/meta.d.ts.map +1 -1
  1177. package/dist/typography/meta.js +112 -85
  1178. package/dist/upload/FileCard.svelte +634 -0
  1179. package/dist/upload/FileCard.svelte.d.ts +40 -0
  1180. package/dist/upload/FileCard.svelte.d.ts.map +1 -0
  1181. package/dist/upload/Upload.svelte +1112 -650
  1182. package/dist/upload/Upload.svelte.d.ts +118 -66
  1183. package/dist/upload/Upload.svelte.d.ts.map +1 -1
  1184. package/dist/upload/index.d.ts +2 -1
  1185. package/dist/upload/index.d.ts.map +1 -1
  1186. package/dist/upload/index.js +1 -0
  1187. package/dist/upload/meta.d.ts +231 -72
  1188. package/dist/upload/meta.d.ts.map +1 -1
  1189. package/dist/upload/meta.js +84 -42
  1190. package/dist/upload/types.d.ts +137 -3
  1191. package/dist/upload/types.d.ts.map +1 -1
  1192. package/dist/user-guide/UserGuide.svelte +655 -0
  1193. package/dist/user-guide/UserGuide.svelte.d.ts +75 -0
  1194. package/dist/user-guide/UserGuide.svelte.d.ts.map +1 -0
  1195. package/dist/user-guide/index.d.ts +4 -0
  1196. package/dist/user-guide/index.d.ts.map +1 -0
  1197. package/dist/user-guide/index.js +2 -0
  1198. package/dist/user-guide/meta.d.ts +162 -0
  1199. package/dist/user-guide/meta.d.ts.map +1 -0
  1200. package/dist/user-guide/meta.js +60 -0
  1201. package/dist/video-player/ErrorSvg.svelte +15 -0
  1202. package/dist/video-player/ErrorSvg.svelte.d.ts +19 -0
  1203. package/dist/video-player/ErrorSvg.svelte.d.ts.map +1 -0
  1204. package/dist/video-player/VideoPlayer.svelte +769 -0
  1205. package/dist/video-player/VideoPlayer.svelte.d.ts +43 -0
  1206. package/dist/video-player/VideoPlayer.svelte.d.ts.map +1 -0
  1207. package/dist/video-player/VideoProgress.svelte +267 -0
  1208. package/dist/video-player/VideoProgress.svelte.d.ts +18 -0
  1209. package/dist/video-player/VideoProgress.svelte.d.ts.map +1 -0
  1210. package/dist/video-player/index.d.ts +4 -0
  1211. package/dist/video-player/index.d.ts.map +1 -0
  1212. package/dist/video-player/index.js +2 -0
  1213. package/dist/video-player/meta.d.ts +200 -0
  1214. package/dist/video-player/meta.d.ts.map +1 -0
  1215. package/dist/video-player/meta.js +159 -0
  1216. package/package.json +29 -4
  1217. package/dist/collapse/types.d.ts +0 -6
  1218. package/dist/collapse/types.d.ts.map +0 -1
  1219. package/dist/date-picker/RangePicker.svelte +0 -775
  1220. package/dist/date-picker/RangePicker.svelte.d.ts +0 -38
  1221. package/dist/date-picker/RangePicker.svelte.d.ts.map +0 -1
  1222. package/dist/date-picker/range-meta.d.ts +0 -100
  1223. package/dist/date-picker/range-meta.d.ts.map +0 -1
  1224. package/dist/date-picker/range-meta.js +0 -43
  1225. package/dist/drawer/Drawer.svelte +0 -554
  1226. package/dist/drawer/Drawer.svelte.d.ts +0 -54
  1227. package/dist/drawer/Drawer.svelte.d.ts.map +0 -1
  1228. package/dist/drawer/index.d.ts +0 -3
  1229. package/dist/drawer/index.d.ts.map +0 -1
  1230. package/dist/drawer/index.js +0 -2
  1231. package/dist/drawer/meta.d.ts +0 -147
  1232. package/dist/drawer/meta.d.ts.map +0 -1
  1233. package/dist/drawer/meta.js +0 -126
  1234. package/dist/dropdown/DropdownItemNode.svelte +0 -355
  1235. package/dist/dropdown/DropdownItemNode.svelte.d.ts +0 -14
  1236. package/dist/dropdown/DropdownItemNode.svelte.d.ts.map +0 -1
  1237. package/dist/dropdown/DropdownSubMenu.svelte +0 -212
  1238. package/dist/dropdown/DropdownSubMenu.svelte.d.ts +0 -15
  1239. package/dist/dropdown/DropdownSubMenu.svelte.d.ts.map +0 -1
  1240. package/dist/grid/use-breakpoint.svelte.d.ts +0 -13
  1241. package/dist/grid/use-breakpoint.svelte.d.ts.map +0 -1
  1242. package/dist/grid/use-breakpoint.svelte.js +0 -41
  1243. package/dist/icon/Icon.svelte +0 -156
  1244. package/dist/icon/Icon.svelte.d.ts +0 -23
  1245. package/dist/icon/Icon.svelte.d.ts.map +0 -1
  1246. package/dist/image/ImagePreviewGroup.svelte +0 -93
  1247. package/dist/image/ImagePreviewGroup.svelte.d.ts +0 -14
  1248. package/dist/image/ImagePreviewGroup.svelte.d.ts.map +0 -1
  1249. package/dist/image/context.d.ts +0 -16
  1250. package/dist/image/context.d.ts.map +0 -1
  1251. package/dist/image/context.js +0 -8
  1252. package/dist/list/ListMeta.svelte +0 -73
  1253. package/dist/list/ListMeta.svelte.d.ts +0 -14
  1254. package/dist/list/ListMeta.svelte.d.ts.map +0 -1
  1255. package/dist/lottie-icon/LottieIcon.svelte +0 -330
  1256. package/dist/lottie-icon/LottieIcon.svelte.d.ts +0 -44
  1257. package/dist/lottie-icon/LottieIcon.svelte.d.ts.map +0 -1
  1258. package/dist/lottie-icon/index.d.ts +0 -4
  1259. package/dist/lottie-icon/index.d.ts.map +0 -1
  1260. package/dist/lottie-icon/index.js +0 -2
  1261. package/dist/lottie-icon/meta.d.ts +0 -147
  1262. package/dist/lottie-icon/meta.js +0 -161
  1263. package/dist/menu/Menu.svelte +0 -843
  1264. package/dist/menu/Menu.svelte.d.ts +0 -95
  1265. package/dist/menu/Menu.svelte.d.ts.map +0 -1
  1266. package/dist/menu/MenuPopupNode.svelte +0 -525
  1267. package/dist/menu/MenuPopupNode.svelte.d.ts +0 -52
  1268. package/dist/menu/MenuPopupNode.svelte.d.ts.map +0 -1
  1269. package/dist/menu/index.d.ts +0 -5
  1270. package/dist/menu/index.d.ts.map +0 -1
  1271. package/dist/menu/index.js +0 -3
  1272. package/dist/menu/meta.d.ts +0 -147
  1273. package/dist/menu/meta.d.ts.map +0 -1
  1274. package/dist/menu/meta.js +0 -141
  1275. package/dist/menu/types.d.ts +0 -88
  1276. package/dist/menu/types.d.ts.map +0 -1
  1277. package/dist/menu/types.js +0 -34
  1278. package/dist/scroll-list/ScrollColumn.svelte +0 -592
  1279. package/dist/scroll-list/ScrollColumn.svelte.d.ts +0 -34
  1280. package/dist/scroll-list/ScrollColumn.svelte.d.ts.map +0 -1
  1281. package/dist/skeleton/context.d.ts +0 -10
  1282. package/dist/skeleton/context.d.ts.map +0 -1
  1283. package/dist/skeleton/context.js +0 -1
  1284. package/dist/textarea/TextArea.svelte +0 -420
  1285. package/dist/textarea/TextArea.svelte.d.ts +0 -69
  1286. package/dist/textarea/TextArea.svelte.d.ts.map +0 -1
  1287. package/dist/textarea/index.d.ts +0 -3
  1288. package/dist/textarea/index.d.ts.map +0 -1
  1289. package/dist/textarea/index.js +0 -2
  1290. package/dist/textarea/meta.d.ts +0 -170
  1291. package/dist/textarea/meta.d.ts.map +0 -1
  1292. package/dist/textarea/meta.js +0 -104
  1293. package/dist/toast/live-region.d.ts +0 -21
  1294. package/dist/toast/live-region.d.ts.map +0 -1
  1295. package/dist/toast/live-region.js +0 -57
  1296. package/dist/typography/Link.svelte +0 -120
  1297. package/dist/typography/Link.svelte.d.ts +0 -35
  1298. package/dist/typography/Link.svelte.d.ts.map +0 -1
  1299. /package/dist/{collapse/types.js → ai-chat-dialogue/render-config.js} +0 -0
@@ -5,18 +5,39 @@
5
5
  disabledTime: dateTime 时/分/秒列按日期禁用值置灰跳过;presets: 面板侧边快捷日期按钮。
6
6
  format: 传 token 串(YYYY/MM/DD/HH/mm/ss)时,触发器变可输入文本框,显示与手输解析均走
7
7
  core 的 formatDate/parseDateString 纯函数(红线 #2);不传则沿用 Intl.DateTimeFormat 显示(向后兼容)。
8
+ 年月滚轮(PANEL_YAM,对齐 Semi):点头部年/月标题展开年 + 月两列 ScrollList 快速跳转面板游标(复用 scroll-list,不重写滚轮)。
8
9
  -->
9
10
  <script lang="ts">
10
- import { tick, type Snippet } from 'svelte';
11
- import { useId, useDismiss, useFocusTrap, isSameDay, startOfDay, addMonths, getMonthGrid, weekdayOrder, gridFocusMove, formatDate, parseDateString, type GridFocusKey } from '@chenzy-design/core';
11
+ import { tick, untrack, getContext, type Snippet } from 'svelte';
12
+ import { useId, useDismiss, useFocusTrap, isSameDay, startOfDay, addMonths, getMonthGrid, weekdayOrder, gridFocusMove, formatDate, parseDateString, zonedWallTime, daysBetween, buildHourOptions, buildMinuteOptions, buildSecondOptions, applyHideDisabled, type GridFocusKey, type ScrollItemData, type ScrollItemSelectPayload } from '@chenzy-design/core';
12
13
  import { useLocale } from '../locale-provider/index.js';
14
+ import { CONFIG_CONTEXT_KEY, type ConfigContextValue } from '../config-provider/index.js';
15
+ import { floating } from '../_floating/use-floating.js';
16
+ import type { Placement } from '@chenzy-design/core';
17
+ import ScrollList from '../scroll-list/ScrollList.svelte';
18
+ import ScrollItem from '../scroll-list/ScrollItem.svelte';
19
+ import Button from '../button/Button.svelte';
20
+ import { IconClear, IconCalendar, IconCalendarClock, IconChevronLeft, IconChevronRight, IconDoubleChevronLeft, IconDoubleChevronRight } from '@chenzy-design/icons';
21
+ import { getInputGroupContext } from '../input/context.js';
13
22
 
14
23
  type Size = 'small' | 'default' | 'large';
15
- type Status = 'default' | 'warning' | 'error';
24
+ type ValidateStatus = 'default' | 'warning' | 'error';
16
25
  type WeekStart = 0 | 1 | 2 | 3 | 4 | 5 | 6;
17
- type PickerType = 'date' | 'dateTime' | 'month' | 'year';
26
+ // 对齐 Semi TYPE_SET(constants.ts:49):单组件靠 type 枚举承载 7 种形态(含 3 种 range)。
27
+ type PickerType =
28
+ | 'date'
29
+ | 'dateRange'
30
+ | 'year'
31
+ | 'month'
32
+ | 'monthRange'
33
+ | 'dateTime'
34
+ | 'dateTimeRange';
18
35
  type CSSProperties = Record<string, string | number>;
19
36
  type PresetPosition = 'left' | 'right' | 'top' | 'bottom';
37
+ // range 值:起止元组(各端 Date|null)。
38
+ type RangeValue = [Date | null, Date | null];
39
+ // range 双输入框焦点态(对齐 Semi rangeInputFocus):由用户点哪个输入框驱动落 start/end。
40
+ type RangeInputFocus = 'rangeStart' | 'rangeEnd' | false;
20
41
 
21
42
  // 时间列禁用配置 (Semi/AntD 风格):按当前日期返回各列禁用值
22
43
  interface DisabledTime {
@@ -25,10 +46,10 @@
25
46
  disabledSeconds?: (hour: number, minute: number) => number[];
26
47
  }
27
48
 
28
- // 快捷日期项:value 可为 Date 或惰性求值函数 (点击时才计算,如「今天」)
49
+ // 快捷日期项:单选 value Date 或惰性函数;range 为 [start,end] 元组或惰性函数(点击即时求值)。
29
50
  interface Preset {
30
51
  label: string;
31
- value: Date | (() => Date);
52
+ value: Date | (() => Date) | [Date, Date] | (() => [Date, Date]);
32
53
  }
33
54
 
34
55
  interface DayStatus {
@@ -40,43 +61,92 @@
40
61
 
41
62
  interface Props {
42
63
  type?: PickerType;
43
- value?: Date | Date[] | null;
44
- defaultValue?: Date | Date[] | null;
64
+ /** 单选为 Date|Date[](multiple);range [start,end] 元组。 */
65
+ value?: Date | Date[] | RangeValue | null;
66
+ defaultValue?: Date | Date[] | RangeValue | null;
45
67
  open?: boolean;
46
68
  defaultOpen?: boolean;
47
69
  placeholder?: string;
70
+ /** range 起始输入框占位(对齐 Semi)。 */
71
+ startPlaceholder?: string;
72
+ /** range 结束输入框占位(对齐 Semi)。 */
73
+ endPlaceholder?: string;
48
74
  size?: Size;
49
- status?: Status;
75
+ /** 校验态(对齐 Semi validateStatus)。 */
76
+ validateStatus?: ValidateStatus;
50
77
  disabled?: boolean;
51
- clearable?: boolean;
52
78
  disabledDate?: (date: Date) => boolean;
53
79
  disabledTime?: (date: Date) => DisabledTime;
54
80
  presets?: Preset[];
55
- weekStart?: WeekStart;
56
- showSecond?: boolean;
57
81
  locale?: string;
82
+ /** range 起止跨度上限(天)。选定起始后超出该跨度的日期禁用。 */
83
+ maxRange?: number;
84
+ /**
85
+ * 单击范围选择(周选择):与 endDateOffset 同时提供后,单击某日即选定区间
86
+ * [startDateOffset(clicked), endDateOffset(clicked)],一步完成不进双输入焦点流转。
87
+ * 仅 dateRange/dateTimeRange 生效。
88
+ */
89
+ startDateOffset?: (date: Date) => Date;
90
+ /** 单击范围选择的结束偏移;与 startDateOffset 同时提供才生效。 */
91
+ endDateOffset?: (date: Date) => Date;
92
+ /** range 双面板同步翻月(对齐 Semi syncSwitchMonth,默认 false)。 */
93
+ syncSwitchMonth?: boolean;
94
+ /** range 起止输入框之间的自定义分隔节点(对齐 Semi rangeSeparatorNode)。 */
95
+ rangeSeparatorNode?: Snippet | string;
96
+ /** 透传给内部时间列的配置(对齐 Semi timePickerOpts):showSecond 等。 */
97
+ timePickerOpts?: { showSecond?: boolean; use12Hours?: boolean } & Record<string, unknown>;
98
+ /**
99
+ * 面板初始定位日期(非受控,仅控制面板首次展开时显示哪个月/年)。
100
+ * 与 value 无关:不改变选中值,只 seed 面板游标。range 场景可传 Date[](取首个)。
101
+ * 仅在无选中值时生效;有选中值时面板对齐到选中值所在月份(对齐 Semi)。
102
+ */
103
+ defaultPickerValue?: Date | Date[];
104
+ /**
105
+ * 按指定 IANA 时区显示/解析日期时间(如 'Asia/Tokyo')。
106
+ * 实现边界:仅作用于「显示格式化层」——所有 Intl.DateTimeFormat 附加 { timeZone },
107
+ * 使触发器/头部/内嵌输入的文案按该时区呈现。底层 value 仍是系统本地时钟的 Date 对象,
108
+ * 不做完整的跨时区值转换(选中/解析得到的 Date 其绝对时刻不变)。
109
+ * format 串走 core formatDate 的可编辑模式不受 timeZone 影响(按 Date 本地字段序列化)。
110
+ */
111
+ timeZone?: string | number;
58
112
  /** token 格式串 (YYYY/MM/DD/HH/mm/ss)。传入则触发器变可输入文本框,显示+手输解析按此格式。 */
59
113
  format?: string;
60
- onChange?: (v: Date | Date[] | null) => void;
114
+ /**
115
+ * 值变化回调。第二参 dateString 为按当前格式化规则得到的字符串(multiple/range 用
116
+ * rangeSeparator 连接)。参数顺序由 onChangeWithDateFirst 控制:默认 (value, dateString);
117
+ * onChangeWithDateFirst=false 时 (dateString, value)。历史用法仅取第一参 value,故默认保持 value-first。
118
+ */
119
+ onChange?: (value: Date | Date[] | RangeValue | null, dateString: string) => void;
61
120
  onOpenChange?: (open: boolean) => void;
62
- /** 手动键入解析失败 (editable 模式)。 */
63
- onParseError?: (e: { text: string }) => void;
64
121
  /** 可见年月切换 (头部导航)。 */
65
122
  onPanelChange?: (e: { panelDate: Date }) => void;
66
- /** 点击快捷选项。 */
67
- onPresetClick?: (e: { preset: Preset }) => void;
123
+ /** 点击快捷选项(对齐 Semi (item, e))。 */
124
+ onPresetClick?: (item: Preset, e?: MouseEvent) => void;
68
125
  /** 点击清除。 */
69
126
  onClear?: (e: Record<string, never>) => void;
70
127
  /** 点击确认按钮 (dateTime / needConfirm)。 */
71
- onConfirm?: (e: { value: Date | Date[] | null }) => void;
128
+ onConfirm?: (e: { value: Date | Date[] | RangeValue | null }) => void;
72
129
  /** 触发器获得焦点。 */
73
130
  onFocus?: (e: FocusEvent) => void;
74
131
  /** 触发器失去焦点。 */
75
132
  onBlur?: (e: FocusEvent) => void;
76
133
  ariaLabel?: string;
77
- /** Snippet 自定义范围分隔符,优先于 rangeSeparator 字符串。 */
78
- rangeSeparatorNode?: Snippet;
79
- /** 选完月/年后自动切换到日视图(默认 true)。 */
134
+ /** aria-labelledby:关联外部 label 元素(Form.Field 透传 labelId,对齐 Semi)。 */
135
+ ariaLabelledby?: string;
136
+ /** aria-describedby:关联 helpText / extraText(Form.Field 透传)。 */
137
+ ariaDescribedby?: string;
138
+ /** aria-errormessage:error 态关联错误信息容器(Form.Field 透传)。 */
139
+ ariaErrormessage?: string;
140
+ /** aria-required:必填语义(Form.Field required 透传)。 */
141
+ ariaRequired?: boolean;
142
+ /** 内嵌标签:浮入触发器左侧的常驻标签(纯展示,不影响值/解析)。 */
143
+ insetLabel?: string | Snippet;
144
+ /**
145
+ * insetLabel 的 id,挂到内嵌标签元素上并经 aria-labelledby 关联触发器 combobox,
146
+ * 使屏幕阅读器把内嵌标签朗读为触发器可访问名的一部分。仅 insetLabel 存在时生效。
147
+ */
148
+ insetLabelId?: string;
149
+ /** 年月滚轮(PANEL_YAM)里选完年/月后自动切回日期网格视图(默认 true)。 */
80
150
  autoSwitchDate?: boolean;
81
151
  /** 浮层自动调整位置防溢出(默认 true)。 */
82
152
  autoAdjustOverflow?: boolean;
@@ -88,11 +158,14 @@
88
158
  spacing?: number;
89
159
  /** 浮层挂载容器。 */
90
160
  getPopupContainer?: () => HTMLElement;
91
- /** weekStart 别名。 */
161
+ /** 一周起始日(0=周日 6=周六)。 */
92
162
  weekStartsOn?: WeekStart;
93
- /** 点击取消按钮。 */
94
- onCancel?: (date: Date | Date[] | null, dateStr: string) => void;
95
- /** onChange 参数改为 dateFirst(仅声明,透传语义)。 */
163
+ /** 点击取消按钮(对齐 Semi 无参)。 */
164
+ onCancel?: () => void;
165
+ /**
166
+ * 控制 onChange 参数顺序。默认 true → (value, dateString)(对齐 Semi 默认,且与历史 value-first 用法一致);
167
+ * 设为 false → (dateString, value)。
168
+ */
96
169
  onChangeWithDateFirst?: boolean;
97
170
  /** 点击外部关闭时触发。 */
98
171
  onClickOutSide?: (e: MouseEvent) => void;
@@ -130,6 +203,10 @@
130
203
  preventScroll?: boolean;
131
204
  /** 阻止浮层点击事件冒泡(默认 true) */
132
205
  stopPropagation?: boolean;
206
+ /** 根节点额外 className */
207
+ class?: string;
208
+ /** 根节点内联样式 */
209
+ style?: string;
133
210
 
134
211
  // --- 插槽类 ---
135
212
  /** 面板顶部额外区域 */
@@ -146,18 +223,12 @@
146
223
  multiple?: boolean;
147
224
  /** multiple=true 时最多选择数量 */
148
225
  max?: number;
149
- /** 范围日期分隔符(默认 '~') */
226
+ /** 范围日期分隔符(默认 ' ~ ',对齐 Semi DEFAULT_SEPARATOR_RANGE) */
150
227
  rangeSeparator?: string;
151
- /** 单击选择范围的起始偏移 */
152
- startDateOffset?: (date: Date) => Date;
153
- /** 单击选择范围的结束偏移 */
154
- endDateOffset?: (date: Date) => Date;
155
228
  /** 年份滚轮最小年 */
156
229
  startYear?: number;
157
230
  /** 年份滚轮最大年 */
158
231
  endYear?: number;
159
- /** 范围选择双面板同步切换月份(默认 false) */
160
- syncSwitchMonth?: boolean;
161
232
 
162
233
  // --- 自定义渲染 ---
163
234
  /** 自定义日期单元格内容 */
@@ -165,11 +236,9 @@
165
236
  /** 完全自定义日期格子 */
166
237
  renderFullDate?: Snippet<[{ day: number; fullDate: string; dayStatus: DayStatus }]>;
167
238
  /** 完全自定义触发器 */
168
- triggerRender?: Snippet<[{ value: Date | Date[] | null; placeholder: string }]>;
239
+ triggerRender?: Snippet<[{ value: Date | Date[] | RangeValue | null; placeholder: string }]>;
169
240
 
170
241
  // --- 时间相关 ---
171
- /** 透传给内部 TimePicker 的参数 */
172
- timePickerOpts?: Record<string, unknown>;
173
242
  /** 隐藏禁止的时间选项 */
174
243
  hideDisabledOptions?: boolean;
175
244
  /** 禁止时间选择 */
@@ -190,23 +259,29 @@
190
259
  type = 'date',
191
260
  value,
192
261
  defaultValue = null,
193
- open,
262
+ open: openProp,
194
263
  defaultOpen = false,
195
264
  placeholder,
196
- size = 'default',
197
- status = 'default',
198
- disabled = false,
199
- clearable = true,
265
+ startPlaceholder,
266
+ endPlaceholder,
267
+ size: sizeProp,
268
+ validateStatus = 'default',
269
+ disabled: disabledProp,
200
270
  disabledDate,
201
271
  disabledTime,
202
272
  presets,
203
- weekStart = 0,
204
- showSecond = true,
205
273
  locale = 'zh-CN',
274
+ maxRange,
275
+ startDateOffset,
276
+ endDateOffset,
277
+ syncSwitchMonth = false,
278
+ rangeSeparatorNode,
279
+ timePickerOpts,
280
+ defaultPickerValue,
281
+ timeZone,
206
282
  format,
207
283
  onChange,
208
284
  onOpenChange,
209
- onParseError,
210
285
  onPanelChange,
211
286
  onPresetClick,
212
287
  onClear,
@@ -214,18 +289,23 @@
214
289
  onFocus,
215
290
  onBlur,
216
291
  ariaLabel,
217
- rangeSeparatorNode,
218
- rangeSeparator = '~',
292
+ ariaLabelledby,
293
+ ariaDescribedby,
294
+ ariaErrormessage,
295
+ ariaRequired,
296
+ insetLabel,
297
+ insetLabelId,
298
+ rangeSeparator = ' ~ ',
219
299
  autoSwitchDate = true,
220
300
  autoAdjustOverflow = true,
221
301
  insetInput = false,
222
302
  position = 'bottomLeft',
223
303
  spacing,
224
304
  getPopupContainer,
225
- weekStartsOn,
305
+ weekStartsOn = 0,
226
306
  yearAndMonthOpts,
227
307
  onCancel,
228
- onChangeWithDateFirst = false,
308
+ onChangeWithDateFirst = true,
229
309
  onClickOutSide,
230
310
  // 外观类
231
311
  borderless = false,
@@ -244,6 +324,8 @@
244
324
  motion = true,
245
325
  preventScroll = false,
246
326
  stopPropagation = true,
327
+ class: className = '',
328
+ style = undefined,
247
329
  // 插槽类
248
330
  topSlot,
249
331
  bottomSlot,
@@ -252,30 +334,37 @@
252
334
  // 日期范围增强
253
335
  multiple = false,
254
336
  max,
255
- startDateOffset,
256
- endDateOffset,
257
337
  startYear,
258
338
  endYear,
259
- syncSwitchMonth = false,
260
339
  // 自定义渲染
261
340
  renderDate,
262
341
  renderFullDate,
263
342
  triggerRender,
264
343
  // 时间相关
265
- timePickerOpts,
266
344
  hideDisabledOptions = false,
267
345
  disabledTimePicker = false,
268
- needConfirm = false,
346
+ needConfirm,
269
347
  // 快捷选项
270
348
  presetPosition = 'bottom',
271
349
  }: Props = $props();
272
350
 
273
- const isDateTime = $derived(type === 'dateTime');
274
- const isMonth = $derived(type === 'month');
351
+ // InputGroup 组级默认(size/disabled):显式 prop 始终优先,否则回退组级,再回退组件默认。
352
+ const group = getInputGroupContext();
353
+ const size = $derived<Size>(sizeProp ?? group?.size ?? 'default');
354
+ const disabled = $derived<boolean>(disabledProp ?? group?.disabled ?? false);
355
+
356
+ // --- 7-type 派生分派(对齐 Semi isRangeType /range/i.test + monthsGridFoundation)---
357
+ const isRange = $derived(/range/i.test(type));
358
+ const isDateTime = $derived(/dateTime/i.test(type)); // dateTime | dateTimeRange
359
+ const isMonth = $derived(type === 'month' || type === 'monthRange');
275
360
  const isYear = $derived(type === 'year');
361
+ // showSecond:Semi 走 timePickerOpts.showSecond;默认 true。
362
+ const showSecond = $derived(timePickerOpts?.showSecond ?? true);
363
+ // needConfirm:显式传优先;dateTimeRange 默认 true,其它默认 false(对齐 Semi)。
364
+ const effNeedConfirm = $derived(needConfirm ?? type === 'dateTimeRange');
276
365
 
277
- // weekStartsOn weekStart 的别名,weekStart 优先
278
- const effWeekStart = $derived(weekStart ?? weekStartsOn ?? 0);
366
+ // 一周起始(保留 weekStartsOn 单名,删旧 weekStart 别名)。
367
+ const effWeekStart = $derived(weekStartsOn ?? 0);
279
368
 
280
369
  const loc = useLocale();
281
370
 
@@ -286,34 +375,82 @@
286
375
  // --- 受控 value (红线 #1): 不无条件回写 value,仅 onChange ---
287
376
  const isValueControlled = $derived(value !== undefined);
288
377
 
378
+ // monthRange/dateRange/dateTimeRange 归一:把 raw value 折成 [start,end]。
379
+ // svelte-ignore state_referenced_locally
380
+ function normOneRange(d: Date | null | undefined): Date | null {
381
+ if (!d) return null;
382
+ if (type === 'dateTimeRange') return new Date(d);
383
+ if (type === 'monthRange') return startOfDay(new Date(d.getFullYear(), d.getMonth(), 1));
384
+ return startOfDay(d);
385
+ }
386
+ function toRangePair(v: unknown): RangeValue {
387
+ if (Array.isArray(v)) {
388
+ const a = v[0] instanceof Date ? v[0] : null;
389
+ const b = v[1] instanceof Date ? v[1] : null;
390
+ return [normOneRange(a), normOneRange(b)];
391
+ }
392
+ return [null, null];
393
+ }
394
+
289
395
  // multiple 模式下 value 为 Date[],单选为 Date | null
290
396
  function getInitialValue(): Date | Date[] | null {
291
397
  if (multiple) {
292
- if (Array.isArray(defaultValue)) return defaultValue;
398
+ if (Array.isArray(defaultValue)) return defaultValue as Date[];
293
399
  if (defaultValue instanceof Date) return [defaultValue];
294
400
  return [];
295
401
  }
296
- if (Array.isArray(defaultValue)) return defaultValue[0] ?? null;
297
- return defaultValue ?? null;
402
+ if (Array.isArray(defaultValue)) return (defaultValue as Date[])[0] ?? null;
403
+ return (defaultValue as Date | null) ?? null;
298
404
  }
299
405
 
300
406
  let innerValue = $state<Date | Date[] | null>(getInitialValue());
301
- const current = $derived<Date | Date[] | null>(isValueControlled ? (value ?? null) : innerValue);
407
+ const current = $derived<Date | Date[] | null>(
408
+ isValueControlled ? ((value as Date | Date[] | null) ?? null) : innerValue,
409
+ );
302
410
 
303
411
  // 单一 Date 视图(multiple 时取第一个,非 multiple 直接用)
304
412
  const currentSingle = $derived<Date | null>(
305
413
  Array.isArray(current) ? (current[0] ?? null) : current,
306
414
  );
307
415
 
416
+ // --- range 值模型(与 single/multiple 平行)---
417
+ let innerRange = $state<RangeValue>(untrack(() => toRangePair(defaultValue)));
418
+ const currentRange = $derived<RangeValue>(
419
+ isValueControlled ? toRangePair(value) : innerRange,
420
+ );
421
+
308
422
  function setValue(next: Date | Date[] | null) {
309
423
  if (!isValueControlled) innerValue = next;
310
- onChange?.(next);
424
+ if (onChange) {
425
+ // 第二参 dateString:按当前格式化规则序列化 next(multiple 用 rangeSeparator 连接)。
426
+ const dateStr = Array.isArray(next)
427
+ ? next.map(formatSingle).join(rangeSeparator)
428
+ : formatSingle(next);
429
+ // onChangeWithDateFirst 默认 true → (value, dateString);false → (dateString, value)。
430
+ if (onChangeWithDateFirst) onChange(next, dateStr);
431
+ // onChangeWithDateFirst=false:故意反转为 (dateString, value),类型以默认 value-first 声明,此处 cast。
432
+ else (onChange as (a: unknown, b: unknown) => void)(dateStr, next);
433
+ }
434
+ }
435
+
436
+ // range 提交:写内部值 + onChange(第二参为 'start ~ end' 串)。
437
+ function setRangeValue(next: RangeValue) {
438
+ const emptied = next[0] === null && next[1] === null;
439
+ if (!isValueControlled) innerRange = next;
440
+ if (onChange) {
441
+ const dateStr = emptied
442
+ ? ''
443
+ : `${formatSingle(next[0])}${rangeSeparator}${formatSingle(next[1])}`;
444
+ const outVal = emptied ? null : next;
445
+ if (onChangeWithDateFirst) onChange(outVal, dateStr);
446
+ else (onChange as (a: unknown, b: unknown) => void)(dateStr, outVal);
447
+ }
311
448
  }
312
449
 
313
450
  // --- 受控 open (红线 #1): 不无条件回写 open,仅 onOpenChange ---
314
- const isOpenControlled = $derived(open !== undefined);
451
+ const isOpenControlled = $derived(openProp !== undefined);
315
452
  let innerOpen = $state(getInitialOpen());
316
- const isOpen = $derived(isOpenControlled ? !!open : innerOpen);
453
+ const isOpen = $derived(isOpenControlled ? !!openProp : innerOpen);
317
454
 
318
455
  function getInitialOpen(): boolean {
319
456
  return defaultOpen;
@@ -330,18 +467,45 @@
330
467
  setOpen(!isOpen);
331
468
  }
332
469
 
470
+ // --- 命令式 Methods(对齐 Semi API 形状)---
471
+ export function open(): void {
472
+ setOpen(true);
473
+ }
474
+ export function close(): void {
475
+ setOpen(false);
476
+ }
477
+ export function focus(): void {
478
+ triggerEl?.focus({ preventScroll });
479
+ }
480
+ export function blur(): void {
481
+ triggerEl?.blur();
482
+ }
483
+
333
484
  // --- 面板游标月份 (本地 $state),打开时同步到 value/today 月份 ---
334
485
  const today = startOfDay(new Date());
335
- // 初始化游标用 defaultValue(不依赖 $derived 的 currentSingle 避免 state_referenced_locally)
486
+ // defaultPickerValue:面板初始定位日期(一次性初值),仅在无选中值时用于 seed 游标。
487
+ // svelte-ignore state_referenced_locally
488
+ const _pickerSeed: Date | null = Array.isArray(defaultPickerValue)
489
+ ? (defaultPickerValue[0] ?? null)
490
+ : (defaultPickerValue instanceof Date ? defaultPickerValue : null);
491
+ // 初始化游标用 defaultValue(刻意静态读初值,default 语义仅取一次,不回写);
492
+ // 无 defaultValue 时回退到 defaultPickerValue,再无则今天。
493
+ // svelte-ignore state_referenced_locally
336
494
  const _initCursorDate: Date | null = Array.isArray(defaultValue)
337
495
  ? (defaultValue[0] ?? null)
338
496
  : (defaultValue instanceof Date ? defaultValue : null);
339
- let cursor = $state(startOfDay(_initCursorDate ?? new Date()));
497
+ let cursor = $state(startOfDay(_initCursorDate ?? _pickerSeed ?? new Date()));
498
+ // 双面板游标:左=cursor、右=cursor+1 月(monthRange 右=+1 年=+12 月)。
499
+ const rightCursor = $derived(addMonths(cursor, isMonth ? 12 : 1));
340
500
 
341
- // 当面板打开时把游标对齐到当前选中值(或今天)所在月份
501
+ // 当面板打开时把游标对齐到当前选中值所在月份;range 对齐到起始端;无值回退 defaultPickerValue/今天。
342
502
  $effect(() => {
343
503
  if (isOpen) {
344
- cursor = startOfDay(currentSingle ?? new Date());
504
+ if (isRange) {
505
+ cursor = startOfDay(currentRange[0] ?? _pickerSeed ?? new Date());
506
+ } else {
507
+ cursor = startOfDay(currentSingle ?? _pickerSeed ?? new Date());
508
+ }
345
509
  }
346
510
  });
347
511
 
@@ -354,7 +518,68 @@
354
518
  }
355
519
  });
356
520
 
357
- // --- Intl 本地化格式化器 (不手拼日期串) ---
521
+ // ============================================================================
522
+ // range 状态机(对齐 Semi):阶段 3 把 phase 两步机升级为 rangeInputFocus 双输入框驱动。
523
+ // 值语义:currentRange=[start,end];needConfirm 时选择进 pendingRange 缓冲、点确定才提交。
524
+ // ============================================================================
525
+ // rangeInputFocus:点起始输入框→'rangeStart'、点结束输入框→'rangeEnd'、未聚焦→false。
526
+ let rangeInputFocus = $state<RangeInputFocus>(false);
527
+ // 用户是否手动点过某端输入框(对齐 Semi isAnotherPanelHasOpened:允许只改一端不自动流转)。
528
+ let rangeStartFocused = $state(false);
529
+ let rangeEndFocused = $state(false);
530
+ // range 选择缓冲:pendingRange 暂存起止(含时间),提交前的工作值。
531
+ let pendingRange = $state<RangeValue>([null, null]);
532
+ // hover 预览端点(选起点后 hover 目标 = 预览终点;offset 周选择时预览整段)。
533
+ let hoverDay = $state<Date | null>(null);
534
+ let offsetPreviewStart = $state<Date | null>(null);
535
+ let offsetPreviewEnd = $state<Date | null>(null);
536
+ // 时间列作用的当前激活端(dateTimeRange)。
537
+ let activeEnd = $state<'start' | 'end'>('start');
538
+
539
+ // 单击范围选择(周选择):start+end offset 都提供且非 monthRange。
540
+ const offsetSelect = $derived(!isMonth && !!startDateOffset && !!endDateOffset);
541
+
542
+ // range 面板生效的起止(needConfirm 用 pending,否则用已提交值)。
543
+ const panelRangeStart = $derived<Date | null>(effNeedConfirm ? pendingRange[0] : currentRange[0]);
544
+ const panelRangeEnd = $derived<Date | null>(effNeedConfirm ? pendingRange[1] : currentRange[1]);
545
+
546
+ // 触发器显示端点(对齐 currentRange,触发器双输入框各显示一端)。
547
+ const rangeStart = $derived<Date | null>(currentRange[0]);
548
+ const rangeEnd = $derived<Date | null>(currentRange[1]);
549
+
550
+ // 打开面板时初始化 range 状态机。
551
+ $effect(() => {
552
+ if (!isRange) return;
553
+ if (isOpen) {
554
+ untrack(() => {
555
+ pendingRange = [currentRange[0], currentRange[1]];
556
+ rangeInputFocus = 'rangeStart';
557
+ rangeStartFocused = false;
558
+ rangeEndFocused = false;
559
+ hoverDay = null;
560
+ offsetPreviewStart = null;
561
+ offsetPreviewEnd = null;
562
+ activeEnd = 'start';
563
+ });
564
+ } else {
565
+ untrack(() => {
566
+ hoverDay = null;
567
+ offsetPreviewStart = null;
568
+ offsetPreviewEnd = null;
569
+ });
570
+ }
571
+ });
572
+
573
+ // --- 时区(对齐 Semi utcToZonedTime 值层语义,不给 Intl 传 timeZone)---
574
+ // Semi 的 timeZone 不在显示格式化器上附加时区,而是在值层把选中的绝对时刻转成「目标时区
575
+ // 墙上时间」的 Date,再按其本地字段序列化。自身 timeZone prop 优先,未传回退 ConfigProvider
576
+ // 的 timeZone(对齐 Semi:DatePicker 用 timeZone={config} 作默认再被自身 prop 覆盖)。
577
+ // 取值支持数字偏移 / 'GMT±HH:mm';具名 IANA(无 tz 数据库)不做转换。
578
+ const configCtx = getContext<ConfigContextValue | undefined>(CONFIG_CONTEXT_KEY);
579
+ const configTimeZone = $derived(configCtx?.current.timeZone);
580
+ const effectiveTimeZone = $derived<string | number | undefined>(timeZone ?? configTimeZone);
581
+
582
+ // --- Intl 本地化格式化器 (不手拼日期串;不传 timeZone,时区在值层由 zonedWallTime 处理) ---
358
583
  const triggerFormat = $derived(
359
584
  new Intl.DateTimeFormat(
360
585
  locale,
@@ -383,10 +608,12 @@
383
608
  // 完整星期名 (columnheader aria-label,朗读用)
384
609
  const weekdayLongFormat = $derived(new Intl.DateTimeFormat(locale, { weekday: 'long' }));
385
610
 
386
- // format 串优先用 core 纯函数序列化;否则沿用 Intl (向后兼容)
611
+ // 触发器/输入显示:选中值先转目标时区墙上时间,再序列化(format core 纯函数按本地字段,
612
+ // 无 format 走 Intl 本地字段),使显示随 timeZone 变化。对齐 Semi 值层转换语义。
387
613
  function formatSingle(d: Date | null): string {
388
614
  if (!d) return '';
389
- return format ? formatDate(d, format) : triggerFormat.format(d);
615
+ const shown = zonedWallTime(d, effectiveTimeZone);
616
+ return format ? formatDate(shown, format) : triggerFormat.format(shown);
390
617
  }
391
618
 
392
619
  const formattedValue = $derived(
@@ -418,7 +645,6 @@
418
645
  } else {
419
646
  // 解析失败:回退到当前值的规范文本
420
647
  inputText = formattedValue;
421
- onParseError?.({ text: raw });
422
648
  }
423
649
  }
424
650
 
@@ -438,6 +664,95 @@
438
664
  }
439
665
  }
440
666
 
667
+ // --- insetInput 面板内嵌输入 (对齐 Semi InsetDateInput / InsetTimeInput) ---
668
+ // 面板顶部渲染可编辑输入框:date 一个日期框;dateTime 日期框 + 时间框。
669
+ // 与面板选择双向同步:点日历/选时间 → currentSingle 变 → 派生文本刷新;键入 → 解析 → 写回。
670
+ // 解析/序列化复用 core 纯函数 formatDate/parseDateString(红线 #2),不重写解析。
671
+ // insetInput 仅在 date / dateTime 面板生效(month/year 无内嵌输入,对齐 Semi)。
672
+ const insetEnabled = $derived(insetInput && !multiple && (type === 'date' || type === 'dateTime'));
673
+ // 内嵌输入用的日期/时间格式串:优先复用用户 format(拆出日期段与时间段),否则用默认。
674
+ const insetDateFormat = $derived(deriveInsetDateFormat());
675
+ const insetTimeFormat = $derived(deriveInsetTimeFormat());
676
+
677
+ // 从 format 提取「日期部分」token(YYYY/MM/DD 及其分隔符),无 format 时回退 YYYY-MM-DD。
678
+ function deriveInsetDateFormat(): string {
679
+ if (format) {
680
+ const m = format.match(/^[^Hms]*(?=(?:\s+)?(?:HH|mm|ss)|$)/);
681
+ const datePart = (m?.[0] ?? '').trim();
682
+ if (datePart) return datePart;
683
+ }
684
+ return 'YYYY-MM-DD';
685
+ }
686
+ // 从 format 提取「时间部分」token(HH/mm/ss),无 format 时按 showSecond 回退。
687
+ function deriveInsetTimeFormat(): string {
688
+ if (format) {
689
+ const idx = format.search(/HH|mm|ss/);
690
+ if (idx >= 0) return format.slice(idx).trim();
691
+ }
692
+ return showSecond ? 'HH:mm:ss' : 'HH:mm';
693
+ }
694
+
695
+ // 内嵌输入草稿文本:从当前值派生(非编辑态跟随面板选择刷新)。
696
+ let insetDateText = $state('');
697
+ let insetTimeText = $state('');
698
+ $effect(() => {
699
+ if (!insetEnabled) return;
700
+ insetDateText = currentSingle ? formatDate(currentSingle, insetDateFormat) : '';
701
+ insetTimeText = currentSingle ? formatDate(currentSingle, insetTimeFormat) : '';
702
+ });
703
+
704
+ // 提交内嵌日期输入:解析日期段,保留已选时间(combine),写回。
705
+ function commitInsetDate() {
706
+ if (!insetEnabled) return;
707
+ const raw = insetDateText.trim();
708
+ if (raw === '') return;
709
+ const parsed = parseDateString(raw, insetDateFormat);
710
+ if (parsed && !(disabledDate?.(parsed) ?? false)) {
711
+ const next = combine(parsed);
712
+ if (effNeedConfirm) pendingValue = next;
713
+ else setValue(next);
714
+ } else {
715
+ insetDateText = currentSingle ? formatDate(currentSingle, insetDateFormat) : '';
716
+ }
717
+ }
718
+
719
+ // 提交内嵌时间输入:解析时/分/秒,合并到当前日期(无则今天),写回。
720
+ function commitInsetTime() {
721
+ if (!insetEnabled || !isDateTime) return;
722
+ const raw = insetTimeText.trim();
723
+ if (raw === '') return;
724
+ const parsedTime = parseDateString(raw, insetTimeFormat);
725
+ if (parsedTime) {
726
+ const base = currentSingle ? new Date(currentSingle) : startOfDay(today);
727
+ base.setHours(parsedTime.getHours(), parsedTime.getMinutes(), parsedTime.getSeconds(), 0);
728
+ if (effNeedConfirm) pendingValue = base;
729
+ else setValue(base);
730
+ } else {
731
+ insetTimeText = currentSingle ? formatDate(currentSingle, insetTimeFormat) : '';
732
+ }
733
+ }
734
+
735
+ function onInsetDateKeydown(e: KeyboardEvent) {
736
+ if (disabled) return;
737
+ if (e.key === 'Enter') {
738
+ e.preventDefault();
739
+ commitInsetDate();
740
+ } else if (e.key === 'Escape' && isOpen) {
741
+ e.preventDefault();
742
+ setOpen(false);
743
+ }
744
+ }
745
+ function onInsetTimeKeydown(e: KeyboardEvent) {
746
+ if (disabled) return;
747
+ if (e.key === 'Enter') {
748
+ e.preventDefault();
749
+ commitInsetTime();
750
+ } else if (e.key === 'Escape' && isOpen) {
751
+ e.preventDefault();
752
+ setOpen(false);
753
+ }
754
+ }
755
+
441
756
  // --- 十年范围 (year 面板):以 cursor 年所在的十年起点对齐 ---
442
757
  const decadeStart = $derived(Math.floor(cursor.getFullYear() / 10) * 10);
443
758
  const headerText = $derived(
@@ -490,12 +805,48 @@
490
805
  // 当前高亮格 id(aria-activedescendant)
491
806
  const activeCellId = $derived(highlight ? cellId(highlight) : undefined);
492
807
 
493
- // showClear 综合判断:clearable & !disabled & 有值 & showClearProp=true
808
+ // --- range 双面板网格派生 ---
809
+ const rangeRightGridId = useId('cd-date-picker-grid-r');
810
+ const leftGrid = $derived(getMonthGrid(cursor, effWeekStart));
811
+ const rightGrid = $derived(getMonthGrid(rightCursor, effWeekStart));
812
+ const leftRows = $derived(Array.from({ length: 6 }, (_, r) => leftGrid.slice(r * 7, r * 7 + 7)));
813
+ const rightRows = $derived(Array.from({ length: 6 }, (_, r) => rightGrid.slice(r * 7, r * 7 + 7)));
814
+ function rangeCellId(prefix: string, date: Date): string {
815
+ return `${prefix}-${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;
816
+ }
817
+ // range monthRange 双面板月格。
818
+ const leftMonthCells = $derived(
819
+ Array.from({ length: 12 }, (_, m) => {
820
+ const date = new Date(cursor.getFullYear(), m, 1);
821
+ return { date, label: monthShortFormat.format(date), month: m };
822
+ }),
823
+ );
824
+ const rightMonthCells = $derived(
825
+ Array.from({ length: 12 }, (_, m) => {
826
+ const date = new Date(rightCursor.getFullYear(), m, 1);
827
+ return { date, label: monthShortFormat.format(date), month: m };
828
+ }),
829
+ );
830
+ // range 头部文案:dateRange 显示「年 月」;monthRange 仅显示年。
831
+ const rangeLeftHeaderText = $derived(isMonth ? yearFormat.format(cursor) : headerFormat.format(cursor));
832
+ const rangeRightHeaderText = $derived(isMonth ? yearFormat.format(rightCursor) : headerFormat.format(rightCursor));
833
+ // 触发器双输入框各端显示文本。
834
+ const startText = $derived(
835
+ rangeStart ? triggerFormat.format(zonedWallTime(rangeStart, effectiveTimeZone)) : '',
836
+ );
837
+ const endText = $derived(
838
+ rangeEnd ? triggerFormat.format(zonedWallTime(rangeEnd, effectiveTimeZone)) : '',
839
+ );
840
+
841
+ // showClear 综合判断(对齐 Semi 单一 showClear):showClear & !disabled & 有值。
494
842
  const showClearDerived = $derived(
495
- clearable &&
496
843
  showClearProp &&
497
844
  !disabled &&
498
- (multiple ? (Array.isArray(current) && current.length > 0) : currentSingle !== null),
845
+ (isRange
846
+ ? (rangeStart !== null || rangeEnd !== null)
847
+ : multiple
848
+ ? (Array.isArray(current) && current.length > 0)
849
+ : currentSingle !== null),
499
850
  );
500
851
 
501
852
  // 头部导航切换可见年月:更新游标并通知 onPanelChange(红线 #1:panelDate 是面板视图态,非 value)
@@ -540,6 +891,9 @@
540
891
  // 头部导航按面板类型分派(month=切年, year=切十年, 其它=切月)
541
892
  const onPrev = $derived(isYear ? prevDecade : isMonth ? prevYear : prevMonth);
542
893
  const onNext = $derived(isYear ? nextDecade : isMonth ? nextYear : nextMonth);
894
+ // 头部箭头图标:date/dateTime 面板翻「月」用单箭头 Chevron;month 翻「年」/ year 翻「十年」
895
+ // 均属年级跳转,对齐 Semi Navigation(翻年用 DoubleChevron),用双箭头。
896
+ const navIsYearJump = $derived(isYear || isMonth);
543
897
  const prevLabel = $derived(
544
898
  isYear
545
899
  ? loc().t('DatePicker.prevDecade')
@@ -554,16 +908,94 @@
554
908
  ? loc().t('DatePicker.nextYear')
555
909
  : loc().t('DatePicker.nextMonth'),
556
910
  );
911
+ // date/dateTime 面板(日历日格视图):对齐 Semi Navigation 有翻年双箭头 + 翻月单箭头两组。
912
+ // month/year 面板走年月滚轮,仍单组 prev/next(切年 / 切十年)。
913
+ const isDayPanel = $derived(!isMonth && !isYear);
914
+ const prevYearLabel = $derived(loc().t('DatePicker.prevYear'));
915
+ const nextYearLabel = $derived(loc().t('DatePicker.nextYear'));
916
+
917
+ // --- 年月滚轮快速跳转 (PANEL_YAM,对齐 Semi):点头部年/月标题展开年+月滚轮列 ---
918
+ // yearAndMonthOpts 归一化:仅取 yearCyclic/monthCyclic(其余键透传语义暂不消费)。
919
+ const yamYearCyclic = $derived(
920
+ typeof (yearAndMonthOpts as { yearCyclic?: boolean } | undefined)?.yearCyclic === 'boolean'
921
+ ? (yearAndMonthOpts as { yearCyclic: boolean }).yearCyclic
922
+ : false,
923
+ );
924
+ const yamMonthCyclic = $derived(
925
+ typeof (yearAndMonthOpts as { monthCyclic?: boolean } | undefined)?.monthCyclic === 'boolean'
926
+ ? (yearAndMonthOpts as { monthCyclic: boolean }).monthCyclic
927
+ : false,
928
+ );
929
+
930
+ // 滚轮展开态(本地 $state);面板关闭时复位(红线 #2 在 isOpen effect 内一并处理)。
931
+ let yamOpen = $state(false);
932
+
933
+ // 年份滚轮范围:对齐 Semi getYears(默认 今年±100,可用 startYear/endYear 收窄)。
934
+ const yamYears = $derived.by(() => {
935
+ const cur = new Date().getFullYear();
936
+ let start = typeof startYear === 'number' ? startYear : cur - 100;
937
+ let end = typeof endYear === 'number' ? endYear : cur + 100;
938
+ if (end < start) [start, end] = [end, start];
939
+ return Array.from({ length: end - start + 1 }, (_, i) => start + i);
940
+ });
941
+
942
+ // 月份全名(Intl 本地化,朗读/显示用)。
943
+ const monthLongFormat = $derived(new Intl.DateTimeFormat(locale, { month: 'long' }));
944
+
945
+ // 年列 ScrollItem list:value=年份数字,text 本地化(中文加「年」)。
946
+ const isCJK = $derived(locale.startsWith('zh') || locale.startsWith('ja') || locale.startsWith('ko'));
947
+ const yamYearItems = $derived<ScrollItemData[]>(
948
+ yamYears.map((y) => ({
949
+ value: y,
950
+ text: isCJK ? `${y}年` : `${y}`,
951
+ // 该年 12 个月全被禁用 → 整年禁用(对齐 Semi isAllMonthDisabled)。
952
+ disabled: Array.from({ length: 12 }, (_, m) => new Date(y, m, 1)).every(
953
+ (d) => disabledDate?.(d) ?? false,
954
+ ),
955
+ })),
956
+ );
957
+ // 月列 ScrollItem list:value=0..11 月序,text 本地化月名。
958
+ const yamMonthItems = $derived<ScrollItemData[]>(
959
+ Array.from({ length: 12 }, (_, m) => {
960
+ const d = new Date(cursor.getFullYear(), m, 1);
961
+ return {
962
+ value: m,
963
+ text: monthLongFormat.format(d),
964
+ disabled: disabledDate?.(d) ?? false,
965
+ };
966
+ }),
967
+ );
968
+ // 各列当前选中索引(受控给 ScrollItem.selectedIndex):年 = cursor 年在 yamYears 的位置;月 = cursor 月序。
969
+ const yamYearIndex = $derived(Math.max(0, yamYears.indexOf(cursor.getFullYear())));
970
+ const yamMonthIndex = $derived(cursor.getMonth());
971
+
972
+ // 滚轮选中 → 只跳转面板游标(不写 value,对齐 Semi「选完回主面板继续选日」)。
973
+ // autoSwitchDate=true 且当前面板存在日期网格(type='date'/'dateTime')时,选完年/月
974
+ // 自动切回日期网格视图(关闭滚轮);否则停留在滚轮(对齐 Semi autoSwitchDate)。
975
+ function onYamSelect(data: ScrollItemSelectPayload): void {
976
+ const year = data.type === 'year' && typeof data.value === 'number' ? data.value : cursor.getFullYear();
977
+ const month = data.type === 'month' && typeof data.value === 'number' ? data.value : cursor.getMonth();
978
+ setCursor(new Date(year, month, 1));
979
+ if (autoSwitchDate && (type === 'date' || type === 'dateTime')) {
980
+ yamOpen = false;
981
+ }
982
+ }
983
+
984
+ // 点头部标题:year 面板仍用十年格切换(不进滚轮),其余面板进年月滚轮。
985
+ const yamEnabled = $derived(!isYear);
986
+ function toggleYam(): void {
987
+ if (!yamEnabled) return;
988
+ yamOpen = !yamOpen;
989
+ }
990
+ function backToMain(): void {
991
+ yamOpen = false;
992
+ }
557
993
 
558
994
  // --- 时间部分 (dateTime):复用 TimePicker 的列逻辑 ---
559
995
  const selectedHour = $derived(currentSingle ? currentSingle.getHours() : 0);
560
996
  const selectedMinute = $derived(currentSingle ? currentSingle.getMinutes() : 0);
561
997
  const selectedSecond = $derived(currentSingle ? currentSingle.getSeconds() : 0);
562
998
 
563
- const hours = Array.from({ length: 24 }, (_, i) => i);
564
- const minutes = Array.from({ length: 60 }, (_, i) => i);
565
- const seconds = Array.from({ length: 60 }, (_, i) => i);
566
-
567
999
  function pad2(n: number): string {
568
1000
  return n < 10 ? `0${n}` : `${n}`;
569
1001
  }
@@ -604,7 +1036,7 @@
604
1036
  if (max !== undefined && arr.length >= max) return;
605
1037
  next = [...arr, startOfDay(date)];
606
1038
  }
607
- if (needConfirm) {
1039
+ if (effNeedConfirm) {
608
1040
  pendingValue = next;
609
1041
  } else {
610
1042
  setValue(next);
@@ -613,7 +1045,7 @@
613
1045
  }
614
1046
 
615
1047
  const combined = combine(date);
616
- if (needConfirm) {
1048
+ if (effNeedConfirm) {
617
1049
  pendingValue = combined;
618
1050
  // dateTime needConfirm:选日期后保留面板
619
1051
  } else {
@@ -643,7 +1075,7 @@
643
1075
  function commitTime(h: number, m: number, s: number) {
644
1076
  const base = currentSingle ? new Date(currentSingle) : startOfDay(today);
645
1077
  base.setHours(h, m, s, 0);
646
- if (needConfirm) {
1078
+ if (effNeedConfirm) {
647
1079
  pendingValue = base;
648
1080
  } else {
649
1081
  setValue(base);
@@ -662,10 +1094,323 @@
662
1094
  commitTime(selectedHour, selectedMinute, s);
663
1095
  }
664
1096
 
665
- // --- presets:点击快捷项直接选中 (惰性 value 即时求值) ---
666
- function selectPreset(preset: Preset) {
667
- onPresetClick?.({ preset });
668
- const date = typeof preset.value === 'function' ? preset.value() : preset.value;
1097
+ // ============================================================================
1098
+ // range 选择逻辑(双面板 + rangeInputFocus 状态机,对齐 Semi handleRangeSelected)
1099
+ // ============================================================================
1100
+ function startOfMonthD(d: Date): Date {
1101
+ return startOfDay(new Date(d.getFullYear(), d.getMonth(), 1));
1102
+ }
1103
+ // range 比较单位:monthRange 按月,其余按日。
1104
+ function normUnit(d: Date): Date {
1105
+ return isMonth ? startOfMonthD(d) : startOfDay(d);
1106
+ }
1107
+ function isSameUnit(a: Date | null | undefined, b: Date | null | undefined): boolean {
1108
+ if (!a || !b) return false;
1109
+ return isMonth
1110
+ ? a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth()
1111
+ : isSameDay(a, b);
1112
+ }
1113
+ function resetRangeSelection() {
1114
+ hoverDay = null;
1115
+ offsetPreviewStart = null;
1116
+ offsetPreviewEnd = null;
1117
+ }
1118
+
1119
+ // range 区间可视端点:offset 预览优先;否则 pending 起点 + hover 预览终点,再否则面板生效值。
1120
+ const visRangeStart = $derived<Date | null>(
1121
+ offsetSelect && offsetPreviewStart
1122
+ ? offsetPreviewStart
1123
+ : (pendingRange[0] ?? panelRangeStart),
1124
+ );
1125
+ const visRangeEnd = $derived<Date | null>(
1126
+ offsetSelect && offsetPreviewEnd
1127
+ ? offsetPreviewEnd
1128
+ : pendingRange[0] !== null && pendingRange[1] === null && hoverDay
1129
+ ? hoverDay
1130
+ : (pendingRange[1] ?? panelRangeEnd),
1131
+ );
1132
+ const rangeSpan = $derived.by<[number, number] | null>(() => {
1133
+ const a = visRangeStart;
1134
+ const b = visRangeEnd;
1135
+ if (!a || !b) return null;
1136
+ const ta = normUnit(a).getTime();
1137
+ const tb = normUnit(b).getTime();
1138
+ return ta <= tb ? [ta, tb] : [tb, ta];
1139
+ });
1140
+ function inRange(date: Date): boolean {
1141
+ if (!rangeSpan) return false;
1142
+ const t = normUnit(date).getTime();
1143
+ return t > rangeSpan[0] && t < rangeSpan[1];
1144
+ }
1145
+ function isEdge(date: Date): boolean {
1146
+ return isSameUnit(date, visRangeStart) || isSameUnit(date, visRangeEnd);
1147
+ }
1148
+
1149
+ // maxRange:选定起始后离 pending 起点超过 maxRange-1 天的日期禁用。
1150
+ function exceedsMaxRange(date: Date): boolean {
1151
+ if (isMonth) return false;
1152
+ if (maxRange == null || maxRange <= 0) return false;
1153
+ if (pendingRange[0] === null || pendingRange[1] !== null) return false;
1154
+ return Math.abs(daysBetween(pendingRange[0], date)) > maxRange - 1;
1155
+ }
1156
+ function isRangeCellDisabled(date: Date): boolean {
1157
+ return (disabledDate?.(date) ?? false) || exceedsMaxRange(date);
1158
+ }
1159
+
1160
+ // 合并 day 与某端已有时分秒(dateTimeRange 保时间,dateRange 归零,monthRange 归月 1 号)。
1161
+ function combineRangeDay(day: Date, base: Date | null): Date {
1162
+ if (isMonth) return startOfMonthD(day);
1163
+ if (!isDateTime) return startOfDay(day);
1164
+ const next = startOfDay(day);
1165
+ if (base) next.setHours(base.getHours(), base.getMinutes(), base.getSeconds(), 0);
1166
+ return next;
1167
+ }
1168
+
1169
+ // 点击日期(range):对齐 Semi handleRangeSelected,由 rangeInputFocus 决定落 start/end。
1170
+ function selectRangeDate(date: Date) {
1171
+ if (isRangeCellDisabled(date)) return;
1172
+ const day = isMonth ? startOfMonthD(date) : startOfDay(date);
1173
+
1174
+ // 单击范围选择(周选择):一步算出起止提交。
1175
+ if (offsetSelect && startDateOffset && endDateOffset) {
1176
+ const s = startOfDay(startDateOffset(date));
1177
+ const en = startOfDay(endDateOffset(date));
1178
+ const [loDay, hiDay] = s.getTime() <= en.getTime() ? [s, en] : [en, s];
1179
+ const lo = combineRangeDay(loDay, isDateTime ? pendingRange[0] : null);
1180
+ const hi = combineRangeDay(hiDay, isDateTime ? pendingRange[1] : null);
1181
+ resetRangeSelection();
1182
+ if (effNeedConfirm) {
1183
+ pendingRange = [lo, hi];
1184
+ } else {
1185
+ setRangeValue([lo, hi]);
1186
+ setOpen(false);
1187
+ }
1188
+ return;
1189
+ }
1190
+
1191
+ let start = pendingRange[0];
1192
+ let end = pendingRange[1];
1193
+
1194
+ if (rangeInputFocus === 'rangeEnd') {
1195
+ end = combineRangeDay(day, pendingRange[1]);
1196
+ activeEnd = 'end';
1197
+ // 新 end 早于旧 start → reset start(对齐 Semi)。
1198
+ if (start && normUnit(end).getTime() < normUnit(start).getTime()) {
1199
+ start = null;
1200
+ }
1201
+ } else {
1202
+ // 'rangeStart' 或 false(打开后未点输入框直接选日)。
1203
+ start = combineRangeDay(day, pendingRange[0]);
1204
+ activeEnd = 'start';
1205
+ if (end && normUnit(end).getTime() < normUnit(start).getTime()) {
1206
+ end = null;
1207
+ }
1208
+ }
1209
+ pendingRange = [start, end];
1210
+
1211
+ // 焦点流转(对齐 Semi):设完一端切另一端,但已手动 focus 过另一端则不强切(允许只改一端)。
1212
+ if (rangeInputFocus === 'rangeEnd') {
1213
+ if (!rangeStartFocused || !start) rangeInputFocus = 'rangeStart';
1214
+ } else {
1215
+ if (!rangeEndFocused || !end) rangeInputFocus = 'rangeEnd';
1216
+ }
1217
+
1218
+ // 完成判定:两端都有值 → 提交(非 needConfirm 关面板)。
1219
+ const complete = start !== null && end !== null;
1220
+ if (complete) {
1221
+ if (!effNeedConfirm) {
1222
+ setRangeValue([start, end]);
1223
+ // 双端完成后关闭:仅当两端都是本轮选定(避免只改一端时误关)。
1224
+ if (!rangeStartFocused && !rangeEndFocused) setOpen(false);
1225
+ }
1226
+ } else if (!effNeedConfirm) {
1227
+ // 单端已选、另一端仍空:即时回写(Semi 完成即 notify,未完成也保留部分)。
1228
+ setRangeValue([start, end]);
1229
+ }
1230
+ }
1231
+
1232
+ function onRangeCellHover(date: Date) {
1233
+ if (offsetSelect && startDateOffset && endDateOffset) {
1234
+ if (isRangeCellDisabled(date)) return;
1235
+ offsetPreviewStart = startOfDay(startDateOffset(date));
1236
+ offsetPreviewEnd = startOfDay(endDateOffset(date));
1237
+ return;
1238
+ }
1239
+ // 有起点、无终点时 hover 预览终点。
1240
+ if (pendingRange[0] !== null && pendingRange[1] === null && !isRangeCellDisabled(date)) {
1241
+ hoverDay = isMonth ? startOfMonthD(date) : startOfDay(date);
1242
+ }
1243
+ }
1244
+
1245
+ // 点起止输入框切换 rangeInputFocus(阶段 3 双输入框驱动)。
1246
+ function focusRangeInput(which: 'rangeStart' | 'rangeEnd') {
1247
+ rangeInputFocus = which;
1248
+ if (which === 'rangeStart') { rangeStartFocused = true; activeEnd = 'start'; }
1249
+ else { rangeEndFocused = true; activeEnd = 'end'; }
1250
+ if (!isOpen) setOpen(true);
1251
+ }
1252
+
1253
+ // range 头部翻月(对齐 Semi handleSwitchMonthOrYear + syncSwitchMonth + 防同月)。
1254
+ function rangePrev() {
1255
+ const delta = isMonth ? -12 : -1;
1256
+ setCursor(addMonths(cursor, delta));
1257
+ }
1258
+ function rangeNext() {
1259
+ const delta = isMonth ? 12 : 1;
1260
+ setCursor(addMonths(cursor, delta));
1261
+ }
1262
+
1263
+ // range 时间列:作用于 activeEnd(对齐 RangePicker)。
1264
+ const rangeActiveDate = $derived<Date | null>(
1265
+ activeEnd === 'start' ? pendingRange[0] : pendingRange[1],
1266
+ );
1267
+ const rangeActiveHour = $derived(rangeActiveDate ? rangeActiveDate.getHours() : 0);
1268
+ const rangeActiveMinute = $derived(rangeActiveDate ? rangeActiveDate.getMinutes() : 0);
1269
+ const rangeActiveSecond = $derived(rangeActiveDate ? rangeActiveDate.getSeconds() : 0);
1270
+ const rangeDisabledTimeCfg = $derived(
1271
+ isDateTime && disabledTime ? disabledTime(rangeActiveDate ?? today) : undefined,
1272
+ );
1273
+ const rangeDisabledHourSet = $derived(new Set(rangeDisabledTimeCfg?.disabledHours?.() ?? []));
1274
+ const rangeDisabledMinuteSet = $derived(new Set(rangeDisabledTimeCfg?.disabledMinutes?.(rangeActiveHour) ?? []));
1275
+ const rangeDisabledSecondSet = $derived(new Set(rangeDisabledTimeCfg?.disabledSeconds?.(rangeActiveHour, rangeActiveMinute) ?? []));
1276
+
1277
+ function commitRangeTime(h: number, m: number, s: number) {
1278
+ const baseSrc = rangeActiveDate ?? startOfDay(today);
1279
+ const base = new Date(baseSrc);
1280
+ base.setHours(h, m, s, 0);
1281
+ const nextPair: RangeValue =
1282
+ activeEnd === 'start' ? [base, pendingRange[1]] : [pendingRange[0], base];
1283
+ pendingRange = nextPair;
1284
+ if (!effNeedConfirm) setRangeValue(nextPair);
1285
+ }
1286
+ function pickRangeHour(h: number) { if (!rangeDisabledHourSet.has(h)) commitRangeTime(h, rangeActiveMinute, rangeActiveSecond); }
1287
+ function pickRangeMinute(m: number) { if (!rangeDisabledMinuteSet.has(m)) commitRangeTime(rangeActiveHour, m, rangeActiveSecond); }
1288
+ function pickRangeSecond(s: number) { if (!rangeDisabledSecondSet.has(s)) commitRangeTime(rangeActiveHour, rangeActiveMinute, s); }
1289
+
1290
+ // ============================================================================
1291
+ // 时间列数据构造(ScrollItemData):复用 core time.ts 的 buildXxxOptions + applyHideDisabled,
1292
+ // 走 ScrollList+ScrollItem(对齐 Semi Combobox)。DatePicker 时间列仅 24h,无 ampm 列。
1293
+ // 选中态单位后缀 transform(对齐 Semi `value + locale.hour`)。
1294
+ // ============================================================================
1295
+ function makeTimeList(
1296
+ opts: import('@chenzy-design/core').TimeOption[],
1297
+ suffix: string,
1298
+ ): ScrollItemData[] {
1299
+ return opts.map((o) => ({
1300
+ value: o.value,
1301
+ text: pad2(o.value),
1302
+ disabled: o.disabled,
1303
+ transform: (_v: unknown, t: string) => t + suffix,
1304
+ }));
1305
+ }
1306
+ // 单选(date/dateTime)三列。
1307
+ const hourListSingle = $derived(
1308
+ makeTimeList(
1309
+ applyHideDisabled(
1310
+ buildHourOptions(1, false, 'am', disabledTimeCfg?.disabledHours),
1311
+ hideDisabledOptions,
1312
+ ),
1313
+ loc().t('TimePicker.hour'),
1314
+ ),
1315
+ );
1316
+ const minuteListSingle = $derived(
1317
+ makeTimeList(
1318
+ applyHideDisabled(
1319
+ buildMinuteOptions(1, selectedHour, disabledTimeCfg?.disabledMinutes),
1320
+ hideDisabledOptions,
1321
+ ),
1322
+ loc().t('TimePicker.minute'),
1323
+ ),
1324
+ );
1325
+ const secondListSingle = $derived(
1326
+ makeTimeList(
1327
+ applyHideDisabled(
1328
+ buildSecondOptions(1, selectedHour, selectedMinute, disabledTimeCfg?.disabledSeconds),
1329
+ hideDisabledOptions,
1330
+ ),
1331
+ loc().t('TimePicker.second'),
1332
+ ),
1333
+ );
1334
+ // 列表中值 v 对应的 selectedIndex(-1 时回退 0,避免 ScrollItem 越界)。
1335
+ function timeIndexOf(list: ScrollItemData[], v: number): number {
1336
+ const i = list.findIndex((it) => it.value === v);
1337
+ return i < 0 ? 0 : i;
1338
+ }
1339
+ // 单选列 onSelect:按列写入。
1340
+ function onSelectHourSingle(p: ScrollItemSelectPayload) { pickHour(p.value as number); }
1341
+ function onSelectMinuteSingle(p: ScrollItemSelectPayload) { pickMinute(p.value as number); }
1342
+ function onSelectSecondSingle(p: ScrollItemSelectPayload) { pickSecond(p.value as number); }
1343
+
1344
+ // range(dateTimeRange):起止两组,作用于该端(先切 activeEnd 再写)。
1345
+ function rangeEndDate(end: 'start' | 'end'): Date | null {
1346
+ return end === 'start' ? pendingRange[0] : pendingRange[1];
1347
+ }
1348
+ // 某端的 disabledTime 配置(联动该端已选时分)。
1349
+ function rangeDisabledCfg(end: 'start' | 'end') {
1350
+ const d = rangeEndDate(end);
1351
+ return isDateTime && disabledTime ? disabledTime(d ?? today) : undefined;
1352
+ }
1353
+ function rangeHourList(end: 'start' | 'end'): ScrollItemData[] {
1354
+ return makeTimeList(
1355
+ applyHideDisabled(
1356
+ buildHourOptions(1, false, 'am', rangeDisabledCfg(end)?.disabledHours),
1357
+ hideDisabledOptions,
1358
+ ),
1359
+ loc().t('TimePicker.hour'),
1360
+ );
1361
+ }
1362
+ function rangeMinuteList(end: 'start' | 'end'): ScrollItemData[] {
1363
+ const d = rangeEndDate(end);
1364
+ return makeTimeList(
1365
+ applyHideDisabled(
1366
+ buildMinuteOptions(1, d ? d.getHours() : 0, rangeDisabledCfg(end)?.disabledMinutes),
1367
+ hideDisabledOptions,
1368
+ ),
1369
+ loc().t('TimePicker.minute'),
1370
+ );
1371
+ }
1372
+ function rangeSecondList(end: 'start' | 'end'): ScrollItemData[] {
1373
+ const d = rangeEndDate(end);
1374
+ return makeTimeList(
1375
+ applyHideDisabled(
1376
+ buildSecondOptions(1, d ? d.getHours() : 0, d ? d.getMinutes() : 0, rangeDisabledCfg(end)?.disabledSeconds),
1377
+ hideDisabledOptions,
1378
+ ),
1379
+ loc().t('TimePicker.second'),
1380
+ );
1381
+ }
1382
+ // range 列 onSelect:先切 activeEnd 再写该端。
1383
+ function onSelectRangeHour(end: 'start' | 'end') {
1384
+ return (p: ScrollItemSelectPayload) => { activeEnd = end; pickRangeHour(p.value as number); };
1385
+ }
1386
+ function onSelectRangeMinute(end: 'start' | 'end') {
1387
+ return (p: ScrollItemSelectPayload) => { activeEnd = end; pickRangeMinute(p.value as number); };
1388
+ }
1389
+ function onSelectRangeSecond(end: 'start' | 'end') {
1390
+ return (p: ScrollItemSelectPayload) => { activeEnd = end; pickRangeSecond(p.value as number); };
1391
+ }
1392
+
1393
+ // --- presets:点击快捷项直接选中 (惰性 value 即时求值)。range/单选分派。 ---
1394
+ function selectPreset(preset: Preset, e?: MouseEvent) {
1395
+ // 对齐 Semi onPresetClick(item, e)。
1396
+ onPresetClick?.(preset, e);
1397
+ const raw = typeof preset.value === 'function' ? preset.value() : preset.value;
1398
+ if (isRange) {
1399
+ if (!Array.isArray(raw)) return;
1400
+ const s = normOneRange(raw[0]);
1401
+ const en = normOneRange(raw[1]);
1402
+ if (!s || !en) return;
1403
+ const [lo, hi] = s.getTime() <= en.getTime() ? [s, en] : [en, s];
1404
+ resetRangeSelection();
1405
+ if (effNeedConfirm) {
1406
+ pendingRange = [lo, hi];
1407
+ } else {
1408
+ setRangeValue([lo, hi]);
1409
+ setOpen(false);
1410
+ }
1411
+ return;
1412
+ }
1413
+ const date = raw as Date;
669
1414
  if (disabledDate?.(date)) return;
670
1415
  if (isMonth) {
671
1416
  setValue(startOfDay(new Date(date.getFullYear(), date.getMonth(), 1)));
@@ -683,49 +1428,48 @@
683
1428
  }
684
1429
 
685
1430
  function confirm() {
686
- const val = needConfirm ? pendingValue : current;
1431
+ if (isRange) {
1432
+ onConfirm?.({ value: pendingRange[0] === null && pendingRange[1] === null ? null : pendingRange });
1433
+ setRangeValue(pendingRange);
1434
+ setOpen(false);
1435
+ return;
1436
+ }
1437
+ const val = effNeedConfirm ? pendingValue : current;
687
1438
  onConfirm?.({ value: val });
688
- if (needConfirm && pendingValue !== null) {
1439
+ if (effNeedConfirm && pendingValue !== null) {
689
1440
  setValue(pendingValue);
690
1441
  }
691
1442
  setOpen(false);
692
1443
  }
693
1444
 
694
1445
  function cancelConfirm() {
695
- const dateStr = Array.isArray(current)
696
- ? current.map(formatSingle).join(` ${rangeSeparator} `)
697
- : formatSingle(currentSingle);
698
- onCancel?.(current, dateStr);
699
- pendingValue = current;
1446
+ // 对齐 Semi onCancel 无参。
1447
+ onCancel?.();
1448
+ if (isRange) {
1449
+ pendingRange = [currentRange[0], currentRange[1]];
1450
+ } else {
1451
+ pendingValue = current;
1452
+ }
700
1453
  setOpen(false);
701
1454
  }
702
1455
 
703
- // 时间列容器引用 (红线 #3: 普通 bind:this,scrollIntoView 命令式调用)
704
- let hourCol = $state<HTMLUListElement | null>(null);
705
- let minuteCol = $state<HTMLUListElement | null>(null);
706
- let secondCol = $state<HTMLUListElement | null>(null);
707
-
708
- function scrollColToSelected(col: HTMLUListElement | null) {
709
- if (!col) return;
710
- const target = col.querySelector<HTMLElement>('[aria-selected="true"]');
711
- target?.scrollIntoView({ block: 'center' });
712
- }
713
-
714
- // 打开时把时间列各自滚到选中项 (命令式,不放响应式 attachment)
715
- $effect(() => {
716
- if (!isOpen || !isDateTime) return;
717
- void tick().then(() => {
718
- scrollColToSelected(hourCol);
719
- scrollColToSelected(minuteCol);
720
- if (showSecond) scrollColToSelected(secondCol);
721
- });
722
- });
1456
+ // 时间列滚动定位由 ScrollItem 自行按 selectedIndex 处理(复用 ScrollList,对齐 Semi Combobox),
1457
+ // 无需组件层命令式 scrollIntoView。
723
1458
 
724
1459
  function clear(e: MouseEvent) {
725
1460
  e.stopPropagation();
726
1461
  if (disabled) return;
727
- const emptyVal = multiple ? [] : null;
728
- setValue(emptyVal);
1462
+ if (isRange) {
1463
+ setRangeValue([null, null]);
1464
+ pendingRange = [null, null];
1465
+ rangeInputFocus = 'rangeStart';
1466
+ rangeStartFocused = false;
1467
+ rangeEndFocused = false;
1468
+ resetRangeSelection();
1469
+ } else {
1470
+ const emptyVal = multiple ? [] : null;
1471
+ setValue(emptyVal);
1472
+ }
729
1473
  onClear?.({});
730
1474
  }
731
1475
 
@@ -758,6 +1502,8 @@
758
1502
  highlight = startOfDay(currentSingle ?? today);
759
1503
  } else {
760
1504
  highlight = null;
1505
+ // 关闭面板复位年月滚轮展开态(红线 #2)。
1506
+ yamOpen = false;
761
1507
  }
762
1508
  });
763
1509
 
@@ -784,7 +1530,10 @@
784
1530
  const key = e.key;
785
1531
  if (key === 'Enter' || key === ' ') {
786
1532
  e.preventDefault();
787
- if (highlight) selectDate(highlight);
1533
+ if (highlight) {
1534
+ if (isRange) selectRangeDate(highlight);
1535
+ else selectDate(highlight);
1536
+ }
788
1537
  return;
789
1538
  }
790
1539
  if (key === 'Escape') {
@@ -802,7 +1551,13 @@
802
1551
  if (!GRID_NAV_KEYS.has(key)) return;
803
1552
  e.preventDefault();
804
1553
  const next = gridFocusMove(base, key as GridFocusKey, 'month', effWeekStart);
805
- if (next) setHighlight(next);
1554
+ if (next) {
1555
+ setHighlight(next);
1556
+ // range 选择中:方向键移动即刷新 hover 预览终点。
1557
+ if (isRange && pendingRange[0] !== null && pendingRange[1] === null && !isRangeCellDisabled(next)) {
1558
+ hoverDay = isMonth ? startOfMonthD(next) : startOfDay(next);
1559
+ }
1560
+ }
806
1561
  }
807
1562
 
808
1563
  // --- useDismiss (红线 #3): 绑定放进 $effect,open 时绑、cleanup 解绑 ---
@@ -812,6 +1567,17 @@
812
1567
  let gridEl = $state<HTMLDivElement | null>(null);
813
1568
  let triggerEl = $state<HTMLButtonElement | HTMLInputElement | null>(null);
814
1569
 
1570
+ // insetLabel 提供 insetLabelId 时,把内嵌标签纳入 combobox 的 aria-labelledby,
1571
+ // 使屏幕阅读器把内嵌标签朗读为触发器可访问名的一部分(仅 insetLabel 存在时生效)。
1572
+ const hasInsetLabel = $derived(insetLabel !== undefined);
1573
+ // aria-labelledby 来源(对齐 Semi withField):外部 ariaLabelledby(Form label id) 优先;
1574
+ // 否则 insetLabel 提供 insetLabelId 时把内嵌标签纳入可访问名。inset 场景两者为同一 id。
1575
+ const triggerLabelledby = $derived(
1576
+ ariaLabelledby ?? (hasInsetLabel && insetLabelId ? insetLabelId : undefined),
1577
+ );
1578
+ // aria-labelledby 存在时不再重复设 aria-label(避免可访问名冗余)。
1579
+ const triggerAriaLabel = $derived(triggerLabelledby ? undefined : ariaLabel);
1580
+
815
1581
  // autoFocus: 挂载后聚焦触发器
816
1582
  $effect(() => {
817
1583
  if (autoFocus && triggerEl) {
@@ -825,17 +1591,21 @@
825
1591
  if (!isOpen || !rootEl) return;
826
1592
  // onClickOutSide 额外监听
827
1593
  function handleDocClick(e: MouseEvent) {
828
- if (rootEl && !rootEl.contains(e.target as Node)) {
1594
+ const target = e.target as Node;
1595
+ // panel portal 出 root 子树,需一并排除,否则面板内点击被误判为外部点击。
1596
+ if (rootEl && !rootEl.contains(target) && !panelEl?.contains(target)) {
829
1597
  onClickOutSide?.(e);
830
1598
  }
831
1599
  }
832
1600
  if (onClickOutSide) {
833
1601
  document.addEventListener('click', handleDocClick, true);
834
1602
  }
1603
+ // panel portal 出 root 子树后列入 extraTargets,否则面板内点击被判为外部点击而误关。
835
1604
  const cleanup = useDismiss(rootEl, {
836
1605
  onDismiss: () => setOpen(false),
837
1606
  escape: true,
838
1607
  outsideClick: true,
1608
+ extraTargets: [panelEl],
839
1609
  });
840
1610
  return () => {
841
1611
  if (onClickOutSide) {
@@ -857,18 +1627,6 @@
857
1627
  return () => trap.deactivate();
858
1628
  });
859
1629
 
860
- // onClickOutSide: 监听 document mousedown,点击不在 rootEl 内时触发
861
- $effect(() => {
862
- if (!onClickOutSide) return;
863
- function handler(e: MouseEvent) {
864
- if (rootEl && !rootEl.contains(e.target as Node)) {
865
- onClickOutSide!(e);
866
- }
867
- }
868
- document.addEventListener('mousedown', handler);
869
- return () => document.removeEventListener('mousedown', handler);
870
- });
871
-
872
1630
  // stopPropagation:面板点击阻止冒泡
873
1631
  function onPanelClick(e: MouseEvent) {
874
1632
  if (stopPropagation) e.stopPropagation();
@@ -891,11 +1649,39 @@
891
1649
  [dropdownStyleStr, `z-index:${zIndex}`].filter(Boolean).join(';'),
892
1650
  );
893
1651
 
1652
+ // position('bottomLeft'/'bottomRight'/'topLeft'/…)→ use:floating 的 Placement。
1653
+ // 缺省或未知值回退 'bottomStart'(触发器正下方偏左,与原 CSS 视觉一致)。
1654
+ const POSITION_TO_PLACEMENT: Record<string, Placement> = {
1655
+ bottomLeft: 'bottomStart',
1656
+ bottomRight: 'bottomEnd',
1657
+ bottom: 'bottom',
1658
+ topLeft: 'topStart',
1659
+ topRight: 'topEnd',
1660
+ top: 'top',
1661
+ leftTop: 'leftStart',
1662
+ leftBottom: 'leftEnd',
1663
+ left: 'left',
1664
+ rightTop: 'rightStart',
1665
+ rightBottom: 'rightEnd',
1666
+ right: 'right',
1667
+ };
1668
+ const resolvedPlacement = $derived<Placement>(POSITION_TO_PLACEMENT[position] ?? 'bottomStart');
1669
+
1670
+ // 触发器与浮层间距:spacing(number)优先,未传回退默认 4(近似原
1671
+ // calc(100% + extra-tight) 的紧邻视觉);再叠加 dropdownMargin(number 直接加,
1672
+ // 对象取 y ?? 0;x 方向本 action 不单独支持,忽略)。
1673
+ const resolvedOffset = $derived.by(() => {
1674
+ const base = spacing ?? 4;
1675
+ if (typeof dropdownMargin === 'number') return base + dropdownMargin;
1676
+ if (dropdownMargin && typeof dropdownMargin === 'object') return base + (dropdownMargin.y ?? 0);
1677
+ return base;
1678
+ });
1679
+
894
1680
  const cls = $derived(
895
1681
  [
896
1682
  'cd-date-picker',
897
1683
  `cd-date-picker--${size}`,
898
- `cd-date-picker--${status}`,
1684
+ `cd-date-picker--${validateStatus}`,
899
1685
  disabled && 'cd-date-picker--disabled',
900
1686
  isOpen && 'cd-date-picker--open',
901
1687
  insetInput && 'cd-date-picker--inset-input',
@@ -903,6 +1689,7 @@
903
1689
  borderless && 'cd-date-picker--borderless',
904
1690
  density === 'compact' && 'cd-date-picker--compact',
905
1691
  !motion && 'cd-date-picker--no-motion',
1692
+ className,
906
1693
  ]
907
1694
  .filter(Boolean)
908
1695
  .join(' '),
@@ -925,10 +1712,64 @@
925
1712
  const presetsVertical = $derived(presetPosition === 'left' || presetPosition === 'right');
926
1713
  </script>
927
1714
 
928
- <div class={cls} bind:this={rootEl} aria-invalid={status === 'error' || undefined} data-position={position}>
929
- <div class="cd-date-picker__control">
1715
+ <div class={cls} style={style || undefined} bind:this={rootEl} aria-invalid={validateStatus === 'error' || undefined} data-position={position}>
1716
+ <div class="cd-date-picker__control" class:cd-date-picker__control--inset-label={hasInsetLabel}>
1717
+ {#if hasInsetLabel}
1718
+ <span class="cd-date-picker__inset-label" id={insetLabelId}>
1719
+ {#if typeof insetLabel === 'string'}
1720
+ {insetLabel}
1721
+ {:else if insetLabel}
1722
+ {@render insetLabel()}
1723
+ {/if}
1724
+ </span>
1725
+ {/if}
930
1726
  {#if triggerRender}
931
- {@render triggerRender({ value: current, placeholder: placeholder ?? loc().t('DatePicker.placeholder') })}
1727
+ {@render triggerRender({ value: isRange ? currentRange : current, placeholder: placeholder ?? loc().t('DatePicker.placeholder') })}
1728
+ {:else if isRange}
1729
+ <!-- range 触发器:起止双输入框 + 分隔节点(对齐 Semi dateInput range 分支)。 -->
1730
+ <div
1731
+ class="cd-date-picker__range-input"
1732
+ class:cd-date-picker__range-input--start-active={isOpen && rangeInputFocus === 'rangeStart'}
1733
+ class:cd-date-picker__range-input--end-active={isOpen && rangeInputFocus === 'rangeEnd'}
1734
+ >
1735
+ <input
1736
+ type="text"
1737
+ class="cd-date-picker__range-field cd-date-picker__range-field--start"
1738
+ role="combobox"
1739
+ aria-haspopup="dialog"
1740
+ aria-expanded={isOpen}
1741
+ aria-controls={dialogId}
1742
+ aria-label={triggerAriaLabel ?? loc().t('DatePicker.startPlaceholder')}
1743
+ placeholder={startPlaceholder ?? loc().t('DatePicker.startPlaceholder')}
1744
+ value={startText}
1745
+ readonly
1746
+ {disabled}
1747
+ bind:this={triggerEl as HTMLInputElement}
1748
+ onclick={() => focusRangeInput('rangeStart')}
1749
+ onfocus={(e) => { focusRangeInput('rangeStart'); onFocus?.(e); }}
1750
+ onkeydown={onTriggerKeydown}
1751
+ onblur={onBlur}
1752
+ />
1753
+ <span class="cd-date-picker__range-sep" aria-hidden="true">
1754
+ {#if rangeSeparatorNode}
1755
+ {#if typeof rangeSeparatorNode === 'string'}{rangeSeparatorNode}{:else}{@render rangeSeparatorNode()}{/if}
1756
+ {:else}
1757
+ {rangeSeparator}
1758
+ {/if}
1759
+ </span>
1760
+ <input
1761
+ type="text"
1762
+ class="cd-date-picker__range-field cd-date-picker__range-field--end"
1763
+ aria-label={loc().t('DatePicker.endPlaceholder')}
1764
+ placeholder={endPlaceholder ?? loc().t('DatePicker.endPlaceholder')}
1765
+ value={endText}
1766
+ readonly
1767
+ {disabled}
1768
+ onclick={() => focusRangeInput('rangeEnd')}
1769
+ onfocus={() => focusRangeInput('rangeEnd')}
1770
+ onkeydown={onTriggerKeydown}
1771
+ />
1772
+ </div>
932
1773
  {:else if editable}
933
1774
  <input
934
1775
  type="text"
@@ -937,7 +1778,11 @@
937
1778
  aria-haspopup="dialog"
938
1779
  aria-expanded={isOpen}
939
1780
  aria-controls={dialogId}
940
- aria-label={ariaLabel}
1781
+ aria-label={triggerAriaLabel}
1782
+ aria-labelledby={triggerLabelledby}
1783
+ aria-describedby={ariaDescribedby}
1784
+ aria-errormessage={ariaErrormessage}
1785
+ aria-required={ariaRequired || undefined}
941
1786
  placeholder={placeholder ?? format}
942
1787
  {disabled}
943
1788
  readonly={inputReadOnly}
@@ -959,7 +1804,9 @@
959
1804
  aria-haspopup="dialog"
960
1805
  aria-expanded={isOpen}
961
1806
  aria-controls={dialogId}
962
- aria-label={ariaLabel}
1807
+ aria-label={triggerAriaLabel}
1808
+ aria-labelledby={triggerLabelledby}
1809
+ aria-describedby={ariaDescribedby}
963
1810
  {disabled}
964
1811
  style={inputStyleStr}
965
1812
  bind:this={triggerEl as HTMLButtonElement}
@@ -988,29 +1835,31 @@
988
1835
  {#if clearIcon}
989
1836
  {@render clearIcon()}
990
1837
  {:else}
991
- <svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false">
992
- <path
993
- fill="currentColor"
994
- 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"
995
- />
996
- </svg>
1838
+ <IconClear aria-hidden="true" />
997
1839
  {/if}
998
1840
  </button>
999
1841
  {/if}
1000
1842
 
1001
1843
  <span class="cd-date-picker__icon" aria-hidden="true">
1002
- <svg viewBox="0 0 16 16" width="14" height="14" focusable="false">
1003
- <path
1004
- fill="currentColor"
1005
- d="M5 1v1H3.5A1.5 1.5 0 0 0 2 3.5v9A1.5 1.5 0 0 0 3.5 14h9a1.5 1.5 0 0 0 1.5-1.5v-9A1.5 1.5 0 0 0 12.5 2H11V1h-1v1H6V1H5Zm7.5 4.5v7h-9v-7h9Z"
1006
- />
1007
- </svg>
1844
+ {#if isDateTime}
1845
+ <IconCalendarClock aria-hidden="true" />
1846
+ {:else}
1847
+ <IconCalendar aria-hidden="true" />
1848
+ {/if}
1008
1849
  </span>
1009
1850
  </div>
1010
1851
 
1011
1852
  {#if isOpen}
1012
1853
  <div
1013
1854
  bind:this={panelEl}
1855
+ use:floating={{
1856
+ trigger: rootEl,
1857
+ placement: resolvedPlacement,
1858
+ autoAdjust: autoAdjustOverflow,
1859
+ offset: resolvedOffset,
1860
+ getContainer: getPopupContainer,
1861
+ open: isOpen,
1862
+ }}
1014
1863
  class={['cd-date-picker__panel', dropdownClassName].filter(Boolean).join(' ')}
1015
1864
  class:cd-date-picker__panel--datetime={isDateTime}
1016
1865
  id={dialogId}
@@ -1050,45 +1899,278 @@
1050
1899
  aria-label={loc().t('DatePicker.triggerLabel')}
1051
1900
  >
1052
1901
  {#each presets as preset, i (i)}
1053
- <button
1054
- type="button"
1902
+ <!-- preset:small primary Button(对齐 Semi quickControl.tsx:86)。 -->
1903
+ <Button
1904
+ size="small"
1905
+ type="primary"
1055
1906
  class="cd-date-picker__preset"
1056
- onclick={() => selectPreset(preset)}
1907
+ onclick={(e) => selectPreset(preset, e)}
1057
1908
  >
1058
1909
  {preset.label}
1059
- </button>
1910
+ </Button>
1060
1911
  {/each}
1061
1912
  </div>
1062
1913
  {/if}
1063
1914
 
1064
1915
  <div class="cd-date-picker__main">
1916
+ {#if insetEnabled}
1917
+ <div class="cd-date-picker__inset-input" class:cd-date-picker__inset-input--datetime={isDateTime}>
1918
+ <input
1919
+ type="text"
1920
+ class="cd-date-picker__inset-field cd-date-picker__inset-field--date"
1921
+ aria-label={loc().t('DatePicker.triggerLabel')}
1922
+ placeholder={insetDateFormat}
1923
+ {disabled}
1924
+ bind:value={insetDateText}
1925
+ onkeydown={onInsetDateKeydown}
1926
+ onblur={commitInsetDate}
1927
+ />
1928
+ {#if isDateTime}
1929
+ <input
1930
+ type="text"
1931
+ class="cd-date-picker__inset-field cd-date-picker__inset-field--time"
1932
+ aria-label={loc().t('TimePicker.hour')}
1933
+ placeholder={insetTimeFormat}
1934
+ {disabled}
1935
+ bind:value={insetTimeText}
1936
+ onkeydown={onInsetTimeKeydown}
1937
+ onblur={commitInsetTime}
1938
+ />
1939
+ {/if}
1940
+ </div>
1941
+ {/if}
1065
1942
  <div class="cd-date-picker__body">
1943
+ {#if isRange}
1944
+ <!-- ================= range 双面板 ================= -->
1945
+ <div class="cd-date-picker__panels">
1946
+ {#each [{ cur: cursor, header: rangeLeftHeaderText, rows: leftRows, months: leftMonthCells, side: 'left', gid: gridId }, { cur: rightCursor, header: rangeRightHeaderText, rows: rightRows, months: rightMonthCells, side: 'right', gid: rangeRightGridId }] as panel (panel.side)}
1947
+ <div class="cd-date-picker__month">
1948
+ <div class="cd-date-picker__header">
1949
+ {#if panel.side === 'left'}
1950
+ <button type="button" class="cd-date-picker__nav" aria-label={isMonth ? loc().t('DatePicker.prevYear') : loc().t('DatePicker.prevMonth')} onclick={rangePrev}>
1951
+ {#if isMonth}<IconDoubleChevronLeft size="small" aria-hidden="true" />{:else}<IconChevronLeft size="small" aria-hidden="true" />{/if}
1952
+ </button>
1953
+ {:else}
1954
+ <span class="cd-date-picker__nav cd-date-picker__nav--ghost" aria-hidden="true"></span>
1955
+ {/if}
1956
+ <span class="cd-date-picker__title">{panel.header}</span>
1957
+ {#if panel.side === 'right'}
1958
+ <button type="button" class="cd-date-picker__nav" aria-label={isMonth ? loc().t('DatePicker.nextYear') : loc().t('DatePicker.nextMonth')} onclick={rangeNext}>
1959
+ {#if isMonth}<IconDoubleChevronRight size="small" aria-hidden="true" />{:else}<IconChevronRight size="small" aria-hidden="true" />{/if}
1960
+ </button>
1961
+ {:else}
1962
+ <span class="cd-date-picker__nav cd-date-picker__nav--ghost" aria-hidden="true"></span>
1963
+ {/if}
1964
+ </div>
1965
+ {#if isMonth}
1966
+ <div class="cd-date-picker__grid cd-date-picker__grid--month" role="grid" aria-label={panel.header}>
1967
+ {#each panel.months as cell (cell.month)}
1968
+ {@const edge = isEdge(cell.date)}
1969
+ {@const within = inRange(cell.date)}
1970
+ {@const isCurrentMonth = today.getFullYear() === cell.date.getFullYear() && today.getMonth() === cell.month}
1971
+ {@const isDisabled = isRangeCellDisabled(cell.date)}
1972
+ <button
1973
+ type="button"
1974
+ class="cd-date-picker__cell cd-date-picker__cell--block"
1975
+ class:cd-date-picker__cell--edge={edge}
1976
+ class:cd-date-picker__cell--in-range={within}
1977
+ class:cd-date-picker__cell--today={isCurrentMonth}
1978
+ role="gridcell"
1979
+ aria-selected={edge}
1980
+ aria-disabled={isDisabled || undefined}
1981
+ disabled={isDisabled}
1982
+ onclick={() => selectRangeDate(cell.date)}
1983
+ onpointerenter={() => onRangeCellHover(cell.date)}
1984
+ >
1985
+ {cell.label}
1986
+ </button>
1987
+ {/each}
1988
+ </div>
1989
+ {:else}
1990
+ <!-- svelte-ignore a11y_no_noninteractive_tabindex -->
1991
+ <div class="cd-date-picker__grid" role="grid" tabindex="0" aria-label={panel.header} onkeydown={onGridKeydown}>
1992
+ <div class="cd-date-picker__row cd-date-picker__row--head" role="row">
1993
+ {#each weekdayNames as name, i (i)}
1994
+ <span class="cd-date-picker__weekday" role="columnheader" aria-label={weekdayLongNames[i]}>{name}</span>
1995
+ {/each}
1996
+ </div>
1997
+ {#each panel.rows as row, wi (wi)}
1998
+ <div class="cd-date-picker__row" role="row">
1999
+ {#each row as cell (cell.date.getTime())}
2000
+ {@const edge = isEdge(cell.date)}
2001
+ {@const within = inRange(cell.date)}
2002
+ {@const isTodayCell = isSameDay(cell.date, today)}
2003
+ {@const isHighlight = isSameDay(cell.date, highlight)}
2004
+ {@const isDisabled = isRangeCellDisabled(cell.date)}
2005
+ <button
2006
+ type="button"
2007
+ id={rangeCellId(panel.gid, cell.date)}
2008
+ class="cd-date-picker__cell"
2009
+ class:cd-date-picker__cell--muted={!cell.inMonth}
2010
+ class:cd-date-picker__cell--edge={edge}
2011
+ class:cd-date-picker__cell--in-range={within}
2012
+ class:cd-date-picker__cell--today={isTodayCell}
2013
+ class:cd-date-picker__cell--highlight={isHighlight}
2014
+ role="gridcell"
2015
+ aria-selected={edge}
2016
+ aria-disabled={isDisabled || undefined}
2017
+ disabled={isDisabled}
2018
+ tabindex={-1}
2019
+ onclick={() => selectRangeDate(cell.date)}
2020
+ onpointerenter={() => onRangeCellHover(cell.date)}
2021
+ >
2022
+ {cell.date.getDate()}
2023
+ </button>
2024
+ {/each}
2025
+ </div>
2026
+ {/each}
2027
+ </div>
2028
+ {/if}
2029
+ </div>
2030
+ {/each}
2031
+
2032
+ {#if isDateTime && !disabledTimePicker}
2033
+ <!-- range 起止两组时间列复用 ScrollList+ScrollItem(对齐 Semi Combobox),作用于 activeEnd。 -->
2034
+ <div class="cd-date-picker__times">
2035
+ {#each ['start', 'end'] as const as end (end)}
2036
+ {@const isActive = activeEnd === end}
2037
+ {@const endDate = end === 'start' ? pendingRange[0] : pendingRange[1]}
2038
+ {@const hh = endDate ? endDate.getHours() : 0}
2039
+ {@const mm = endDate ? endDate.getMinutes() : 0}
2040
+ {@const ss = endDate ? endDate.getSeconds() : 0}
2041
+ {@const hL = rangeHourList(end)}
2042
+ {@const mL = rangeMinuteList(end)}
2043
+ {@const sL = rangeSecondList(end)}
2044
+ <div class="cd-date-picker__time" class:cd-date-picker__time--active={isActive} role="group" aria-label={end === 'start' ? loc().t('DatePicker.startPlaceholder') : loc().t('DatePicker.endPlaceholder')}>
2045
+ <ScrollList>
2046
+ <ScrollItem
2047
+ mode="normal"
2048
+ class="cd-date-picker__panel-list-hour"
2049
+ list={hL}
2050
+ selectedIndex={timeIndexOf(hL, hh)}
2051
+ type="hour"
2052
+ onSelect={onSelectRangeHour(end)}
2053
+ ariaLabel={loc().t('TimePicker.hour')}
2054
+ />
2055
+ <ScrollItem
2056
+ mode="normal"
2057
+ class="cd-date-picker__panel-list-minute"
2058
+ list={mL}
2059
+ selectedIndex={timeIndexOf(mL, mm)}
2060
+ type="minute"
2061
+ onSelect={onSelectRangeMinute(end)}
2062
+ ariaLabel={loc().t('TimePicker.minute')}
2063
+ />
2064
+ {#if showSecond}
2065
+ <ScrollItem
2066
+ mode="normal"
2067
+ class="cd-date-picker__panel-list-second"
2068
+ list={sL}
2069
+ selectedIndex={timeIndexOf(sL, ss)}
2070
+ type="second"
2071
+ onSelect={onSelectRangeSecond(end)}
2072
+ ariaLabel={loc().t('TimePicker.second')}
2073
+ />
2074
+ {/if}
2075
+ </ScrollList>
2076
+ </div>
2077
+ {/each}
2078
+ </div>
2079
+ {/if}
2080
+ </div>
2081
+ {:else}
1066
2082
  <div class="cd-date-picker__calendar">
1067
2083
  <div class="cd-date-picker__header">
2084
+ {#if isDayPanel}
2085
+ <!-- 翻年双箭头(对齐 Semi Navigation prevYear «):date/dateTime 面板一键翻年 -->
2086
+ <button
2087
+ type="button"
2088
+ class="cd-date-picker__nav"
2089
+ aria-label={prevYearLabel}
2090
+ onclick={prevYear}
2091
+ >
2092
+ <IconDoubleChevronLeft size="small" aria-hidden="true" />
2093
+ </button>
2094
+ {/if}
1068
2095
  <button
1069
2096
  type="button"
1070
2097
  class="cd-date-picker__nav"
1071
2098
  aria-label={prevLabel}
1072
2099
  onclick={onPrev}
1073
2100
  >
1074
- <svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true" focusable="false">
1075
- <path fill="currentColor" d="M10 3.5 5.5 8l4.5 4.5 1-1L7.5 8 11 4.5l-1-1Z" />
1076
- </svg>
2101
+ {#if navIsYearJump}
2102
+ <IconDoubleChevronLeft size="small" aria-hidden="true" />
2103
+ {:else}
2104
+ <IconChevronLeft size="small" aria-hidden="true" />
2105
+ {/if}
1077
2106
  </button>
1078
- <span class="cd-date-picker__title">{headerText}</span>
2107
+ {#if yamEnabled}
2108
+ <button
2109
+ type="button"
2110
+ class="cd-date-picker__title cd-date-picker__title--button"
2111
+ aria-label={loc().t('DatePicker.switchYearMonth')}
2112
+ aria-expanded={yamOpen}
2113
+ onclick={toggleYam}
2114
+ >
2115
+ {headerText}
2116
+ </button>
2117
+ {:else}
2118
+ <span class="cd-date-picker__title">{headerText}</span>
2119
+ {/if}
1079
2120
  <button
1080
2121
  type="button"
1081
2122
  class="cd-date-picker__nav"
1082
2123
  aria-label={nextLabel}
1083
2124
  onclick={onNext}
1084
2125
  >
1085
- <svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true" focusable="false">
1086
- <path fill="currentColor" d="M6 3.5 5 4.5 8.5 8 5 11.5l1 1L10.5 8 6 3.5Z" />
1087
- </svg>
2126
+ {#if navIsYearJump}
2127
+ <IconDoubleChevronRight size="small" aria-hidden="true" />
2128
+ {:else}
2129
+ <IconChevronRight size="small" aria-hidden="true" />
2130
+ {/if}
1088
2131
  </button>
2132
+ {#if isDayPanel}
2133
+ <!-- 翻年双箭头(对齐 Semi Navigation nextYear »):date/dateTime 面板一键翻年 -->
2134
+ <button
2135
+ type="button"
2136
+ class="cd-date-picker__nav"
2137
+ aria-label={nextYearLabel}
2138
+ onclick={nextYear}
2139
+ >
2140
+ <IconDoubleChevronRight size="small" aria-hidden="true" />
2141
+ </button>
2142
+ {/if}
1089
2143
  </div>
1090
2144
 
1091
- {#if isMonth}
2145
+ {#if yamOpen && yamEnabled}
2146
+ <!-- 年月滚轮快速跳转面板 (PANEL_YAM):ScrollList 容器 + 年/月两 wheel 列(对齐 Semi),
2147
+ 选中即跳转 cursor(不写 value);yearCyclic/monthCyclic 控制循环滚动。 -->
2148
+ <div class="cd-date-picker__yam" role="group" aria-label={loc().t('DatePicker.switchYearMonth')}>
2149
+ <ScrollList>
2150
+ <ScrollItem
2151
+ mode="wheel"
2152
+ list={yamYearItems}
2153
+ type="year"
2154
+ cycled={yamYearCyclic}
2155
+ selectedIndex={yamYearIndex}
2156
+ onSelect={onYamSelect}
2157
+ ariaLabel={loc().t('DatePicker.yearColumnLabel')}
2158
+ />
2159
+ <ScrollItem
2160
+ mode="wheel"
2161
+ list={yamMonthItems}
2162
+ type="month"
2163
+ cycled={yamMonthCyclic}
2164
+ selectedIndex={yamMonthIndex}
2165
+ onSelect={onYamSelect}
2166
+ ariaLabel={loc().t('DatePicker.monthColumnLabel')}
2167
+ />
2168
+ </ScrollList>
2169
+ <button type="button" class="cd-date-picker__yam-back" onclick={backToMain}>
2170
+ {loc().t('DatePicker.backToDate')}
2171
+ </button>
2172
+ </div>
2173
+ {:else if isMonth}
1092
2174
  <div class="cd-date-picker__grid cd-date-picker__grid--month" role="grid">
1093
2175
  {#each monthCells as cell (cell.month)}
1094
2176
  {@const isSelected =
@@ -1197,101 +2279,62 @@
1197
2279
  </div>
1198
2280
 
1199
2281
  {#if isDateTime && !disabledTimePicker}
2282
+ <!-- 单选时间列复用 ScrollList+ScrollItem(对齐 Semi Combobox),列内 mode=normal 点击选中。 -->
1200
2283
  <div class="cd-date-picker__time">
1201
- <ul class="cd-date-picker__time-col" role="listbox" aria-label={loc().t('TimePicker.hour')} bind:this={hourCol}>
1202
- {#each hours as h (h)}
1203
- {@const isHourDisabled = disabledHourSet.has(h)}
1204
- {#if !(hideDisabledOptions && isHourDisabled)}
1205
- <li
1206
- class="cd-date-picker__time-item"
1207
- class:cd-date-picker__time-item--selected={h === selectedHour}
1208
- class:cd-date-picker__time-item--disabled={isHourDisabled}
1209
- role="option"
1210
- aria-selected={h === selectedHour}
1211
- aria-disabled={isHourDisabled || undefined}
1212
- tabindex="-1"
1213
- onclick={() => pickHour(h)}
1214
- onkeydown={(e) => {
1215
- if (e.key === 'Enter' || e.key === ' ') {
1216
- e.preventDefault();
1217
- pickHour(h);
1218
- }
1219
- }}
1220
- >
1221
- {pad2(h)}
1222
- </li>
1223
- {/if}
1224
- {/each}
1225
- </ul>
1226
- <ul class="cd-date-picker__time-col" role="listbox" aria-label={loc().t('TimePicker.minute')} bind:this={minuteCol}>
1227
- {#each minutes as m (m)}
1228
- {@const isMinuteDisabled = disabledMinuteSet.has(m)}
1229
- {#if !(hideDisabledOptions && isMinuteDisabled)}
1230
- <li
1231
- class="cd-date-picker__time-item"
1232
- class:cd-date-picker__time-item--selected={m === selectedMinute}
1233
- class:cd-date-picker__time-item--disabled={isMinuteDisabled}
1234
- role="option"
1235
- aria-selected={m === selectedMinute}
1236
- aria-disabled={isMinuteDisabled || undefined}
1237
- tabindex="-1"
1238
- onclick={() => pickMinute(m)}
1239
- onkeydown={(e) => {
1240
- if (e.key === 'Enter' || e.key === ' ') {
1241
- e.preventDefault();
1242
- pickMinute(m);
1243
- }
1244
- }}
1245
- >
1246
- {pad2(m)}
1247
- </li>
1248
- {/if}
1249
- {/each}
1250
- </ul>
1251
- {#if showSecond}
1252
- <ul class="cd-date-picker__time-col" role="listbox" aria-label={loc().t('TimePicker.second')} bind:this={secondCol}>
1253
- {#each seconds as s (s)}
1254
- {@const isSecondDisabled = disabledSecondSet.has(s)}
1255
- {#if !(hideDisabledOptions && isSecondDisabled)}
1256
- <li
1257
- class="cd-date-picker__time-item"
1258
- class:cd-date-picker__time-item--selected={s === selectedSecond}
1259
- class:cd-date-picker__time-item--disabled={isSecondDisabled}
1260
- role="option"
1261
- aria-selected={s === selectedSecond}
1262
- aria-disabled={isSecondDisabled || undefined}
1263
- tabindex="-1"
1264
- onclick={() => pickSecond(s)}
1265
- onkeydown={(e) => {
1266
- if (e.key === 'Enter' || e.key === ' ') {
1267
- e.preventDefault();
1268
- pickSecond(s);
1269
- }
1270
- }}
1271
- >
1272
- {pad2(s)}
1273
- </li>
1274
- {/if}
1275
- {/each}
1276
- </ul>
1277
- {/if}
2284
+ <ScrollList>
2285
+ <ScrollItem
2286
+ mode="normal"
2287
+ class="cd-date-picker__panel-list-hour"
2288
+ list={hourListSingle}
2289
+ selectedIndex={timeIndexOf(hourListSingle, selectedHour)}
2290
+ type="hour"
2291
+ onSelect={onSelectHourSingle}
2292
+ ariaLabel={loc().t('TimePicker.hour')}
2293
+ />
2294
+ <ScrollItem
2295
+ mode="normal"
2296
+ class="cd-date-picker__panel-list-minute"
2297
+ list={minuteListSingle}
2298
+ selectedIndex={timeIndexOf(minuteListSingle, selectedMinute)}
2299
+ type="minute"
2300
+ onSelect={onSelectMinuteSingle}
2301
+ ariaLabel={loc().t('TimePicker.minute')}
2302
+ />
2303
+ {#if showSecond}
2304
+ <ScrollItem
2305
+ mode="normal"
2306
+ class="cd-date-picker__panel-list-second"
2307
+ list={secondListSingle}
2308
+ selectedIndex={timeIndexOf(secondListSingle, selectedSecond)}
2309
+ type="second"
2310
+ onSelect={onSelectSecondSingle}
2311
+ ariaLabel={loc().t('TimePicker.second')}
2312
+ />
2313
+ {/if}
2314
+ </ScrollList>
1278
2315
  </div>
1279
2316
  {/if}
2317
+ {/if}
1280
2318
  </div>
1281
2319
 
1282
2320
  <div class="cd-date-picker__footer">
1283
- <button type="button" class="cd-date-picker__today" onclick={selectToday}>
1284
- {loc().t('DatePicker.today')}
1285
- </button>
1286
- {#if isDateTime || needConfirm}
1287
- {#if needConfirm}
1288
- <button type="button" class="cd-date-picker__cancel" onclick={cancelConfirm}>
2321
+ {#if !isRange}
2322
+ <!-- today:borderless Button(对齐 Semi footer 复用 Button)。 -->
2323
+ <Button theme="borderless" class="cd-date-picker__today" onclick={selectToday}>
2324
+ {loc().t('DatePicker.today')}
2325
+ </Button>
2326
+ {/if}
2327
+ {#if isDateTime || effNeedConfirm}
2328
+ {#if isRange || effNeedConfirm}
2329
+ <!-- 取消:borderless(对齐 Semi footer.tsx:21)。 -->
2330
+ <Button theme="borderless" class="cd-date-picker__cancel" onclick={cancelConfirm}>
1289
2331
  {loc().t('DatePicker.cancel') ?? '取消'}
1290
- </button>
2332
+ </Button>
1291
2333
  {/if}
1292
- <button type="button" class="cd-date-picker__ok" onclick={confirm}>
2334
+ <!-- 确认:solid(对齐 Semi footer.tsx:24)。 -->
2335
+ <Button theme="solid" class="cd-date-picker__ok" onclick={confirm}>
1293
2336
  {loc().t('TimePicker.confirm')}
1294
- </button>
2337
+ </Button>
1295
2338
  {/if}
1296
2339
  </div>
1297
2340
  </div>
@@ -1304,13 +2347,15 @@
1304
2347
  aria-label={loc().t('DatePicker.triggerLabel')}
1305
2348
  >
1306
2349
  {#each presets as preset, i (i)}
1307
- <button
1308
- type="button"
2350
+ <!-- preset:small primary Button(对齐 Semi quickControl.tsx:86)。 -->
2351
+ <Button
2352
+ size="small"
2353
+ type="primary"
1309
2354
  class="cd-date-picker__preset"
1310
- onclick={() => selectPreset(preset)}
2355
+ onclick={(e) => selectPreset(preset, e)}
1311
2356
  >
1312
2357
  {preset.label}
1313
- </button>
2358
+ </Button>
1314
2359
  {/each}
1315
2360
  </div>
1316
2361
  {/if}
@@ -1332,54 +2377,80 @@
1332
2377
  </div>
1333
2378
 
1334
2379
  <style>
2380
+ /* 对齐 Semi semi-datepicker:inline-block 内容宽,不撑满父。
2381
+ 需填满时由外部 style="width:100%" 或 Form 字段控制;
2382
+ 在 InputGroup 的 flex 里避免 width:100% 与容器内在尺寸循环依赖导致的病态换行。 */
1335
2383
  .cd-date-picker {
1336
2384
  position: relative;
1337
- display: inline-flex;
1338
- inline-size: 100%;
1339
- font-size: var(--cd-input-font-size);
2385
+ display: inline-block;
2386
+ font-size: var(--cd-font-size-regular);
1340
2387
  }
1341
2388
  .cd-date-picker__control {
1342
2389
  position: relative;
1343
2390
  inline-size: 100%;
1344
2391
  }
2392
+ /* insetLabel:内嵌标签浮入触发器左侧,与触发器同处一个边框内。 */
2393
+ .cd-date-picker__control--inset-label {
2394
+ display: flex;
2395
+ align-items: center;
2396
+ background: var(--cd-color-input-default-bg-default);
2397
+ border: 1px solid var(--cd-color-input-default-border-default);
2398
+ border-radius: var(--cd-radius-input-wrapper);
2399
+ }
2400
+ .cd-date-picker__control--inset-label .cd-date-picker__trigger {
2401
+ border: none;
2402
+ background: transparent;
2403
+ }
2404
+ .cd-date-picker__inset-label {
2405
+ display: inline-flex;
2406
+ align-items: center;
2407
+ flex: 0 0 auto;
2408
+ padding-inline-start: var(--cd-spacing-input-paddingleft);
2409
+ color: var(--cd-color-text-2);
2410
+ user-select: none;
2411
+ white-space: nowrap;
2412
+ }
1345
2413
  .cd-date-picker__trigger {
1346
2414
  display: flex;
1347
2415
  align-items: center;
1348
2416
  gap: var(--cd-spacing-tight);
1349
2417
  inline-size: 100%;
1350
- block-size: var(--cd-input-height-default);
1351
- padding-inline-start: var(--cd-input-padding-x);
1352
- padding-inline-end: calc(var(--cd-input-padding-x) + 1.25rem);
1353
- background: var(--cd-input-color-bg);
1354
- color: var(--cd-input-color-text);
1355
- border: 1px solid var(--cd-input-border);
1356
- border-radius: var(--cd-input-radius);
2418
+ /* trigger 是承载边框的外层,高度对齐 Input 的 wrapper 层(含 2px 边框),
2419
+ 而非内层 -input- 值,否则在 InputGroup 里与 Input 差 2px。 */
2420
+ block-size: var(--cd-height-input-wrapper-default);
2421
+ box-sizing: border-box;
2422
+ padding-inline-start: var(--cd-spacing-input-paddingleft);
2423
+ padding-inline-end: calc(var(--cd-spacing-input-paddingleft) + 1.25rem);
2424
+ background: var(--cd-color-input-default-bg-default);
2425
+ color: var(--cd-color-input-default-text-default);
2426
+ border: 1px solid var(--cd-color-input-default-border-default);
2427
+ border-radius: var(--cd-radius-input-wrapper);
1357
2428
  font: inherit;
1358
2429
  text-align: start;
1359
2430
  cursor: pointer;
1360
2431
  transition: border-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
1361
2432
  }
1362
2433
  .cd-date-picker--small .cd-date-picker__trigger {
1363
- block-size: var(--cd-input-height-small);
2434
+ block-size: var(--cd-height-input-wrapper-small);
1364
2435
  font-size: var(--cd-font-size-small);
1365
2436
  }
1366
2437
  .cd-date-picker--large .cd-date-picker__trigger {
1367
- block-size: var(--cd-input-height-large);
2438
+ block-size: var(--cd-height-input-wrapper-large);
1368
2439
  font-size: var(--cd-font-size-header-6);
1369
2440
  }
1370
2441
  .cd-date-picker__trigger:focus-visible {
1371
2442
  outline: none;
1372
- border-color: var(--cd-input-border-active);
2443
+ border-color: var(--cd-color-input-default-border-focus);
1373
2444
  box-shadow: var(--cd-focus-ring);
1374
2445
  }
1375
2446
  .cd-date-picker--open .cd-date-picker__trigger {
1376
- border-color: var(--cd-input-border-active);
2447
+ border-color: var(--cd-color-input-default-border-focus);
1377
2448
  }
1378
2449
  .cd-date-picker--warning .cd-date-picker__trigger {
1379
- border-color: var(--cd-input-border-warning);
2450
+ border-color: var(--cd-color-input-warning-border-focus);
1380
2451
  }
1381
2452
  .cd-date-picker--error .cd-date-picker__trigger {
1382
- border-color: var(--cd-input-border-error);
2453
+ border-color: var(--cd-color-input-danger-border-focus);
1383
2454
  }
1384
2455
  .cd-date-picker--disabled .cd-date-picker__trigger {
1385
2456
  background: var(--cd-color-fill-0);
@@ -1395,13 +2466,18 @@
1395
2466
  .cd-date-picker--compact .cd-date-picker__panel {
1396
2467
  padding: var(--cd-spacing-tight);
1397
2468
  }
2469
+ /* compact 密度:Semi 精确 28/24 双层($width-datepicker_day_compact / _main_compact),非 32*0.85 近似 */
2470
+ .cd-date-picker--compact .cd-date-picker__row {
2471
+ grid-template-columns: repeat(7, var(--cd-width-date-picker-day-compact));
2472
+ }
1398
2473
  .cd-date-picker--compact .cd-date-picker__cell {
1399
- inline-size: calc(var(--cd-date-picker-cell-size) * 0.85);
1400
- block-size: calc(var(--cd-date-picker-cell-size) * 0.85);
2474
+ inline-size: var(--cd-width-date-picker-day-main-compact);
2475
+ block-size: var(--cd-width-date-picker-day-main-compact);
1401
2476
  font-size: var(--cd-font-size-small);
1402
2477
  }
1403
2478
  .cd-date-picker--compact .cd-date-picker__weekday {
1404
- block-size: calc(var(--cd-date-picker-cell-size) * 0.85);
2479
+ inline-size: var(--cd-width-date-picker-day-compact);
2480
+ block-size: var(--cd-width-date-picker-day-main-compact);
1405
2481
  font-size: var(--cd-font-size-small);
1406
2482
  }
1407
2483
  /* no-motion */
@@ -1415,7 +2491,7 @@
1415
2491
  text-overflow: ellipsis;
1416
2492
  }
1417
2493
  .cd-date-picker__value--placeholder {
1418
- color: var(--cd-input-color-placeholder);
2494
+ color: var(--cd-color-input-placeholder-text-default);
1419
2495
  }
1420
2496
  .cd-date-picker__prefix {
1421
2497
  flex: 0 0 auto;
@@ -1423,7 +2499,7 @@
1423
2499
  }
1424
2500
  /* format 可输入模式:原生 input 复用 trigger 外观 */
1425
2501
  .cd-date-picker__input::placeholder {
1426
- color: var(--cd-input-color-placeholder);
2502
+ color: var(--cd-color-input-placeholder-text-default);
1427
2503
  }
1428
2504
  .cd-date-picker__input:disabled {
1429
2505
  background: var(--cd-color-fill-0);
@@ -1434,7 +2510,7 @@
1434
2510
  .cd-date-picker__icon {
1435
2511
  position: absolute;
1436
2512
  inset-block-start: 50%;
1437
- inset-inline-end: var(--cd-input-padding-x);
2513
+ inset-inline-end: var(--cd-spacing-input-paddingleft);
1438
2514
  transform: translateY(-50%);
1439
2515
  display: inline-flex;
1440
2516
  align-items: center;
@@ -1445,7 +2521,7 @@
1445
2521
  .cd-date-picker__clear {
1446
2522
  padding: 0;
1447
2523
  border: none;
1448
- background: var(--cd-input-color-bg);
2524
+ background: var(--cd-color-input-default-bg-default);
1449
2525
  cursor: pointer;
1450
2526
  opacity: 0;
1451
2527
  pointer-events: auto;
@@ -1464,14 +2540,12 @@
1464
2540
  color: var(--cd-color-text-0);
1465
2541
  }
1466
2542
  .cd-date-picker__panel {
1467
- position: absolute;
1468
- inset-block-start: calc(100% + var(--cd-spacing-extra-tight));
1469
- inset-inline-start: 0;
1470
- z-index: var(--cd-date-picker-panel-z, 1030);
2543
+ /* 定位(position/inset/transform)由 use:floating action 接管;此处仅保留视觉样式。 */
2544
+ z-index: var(--cd-z-date-picker-panel, 1030);
1471
2545
  padding: var(--cd-spacing-base-tight);
1472
- background: var(--cd-date-picker-panel-bg);
1473
- border-radius: var(--cd-date-picker-panel-radius);
1474
- box-shadow: var(--cd-date-picker-panel-shadow);
2546
+ background: var(--cd-color-date-picker-panel-bg-default);
2547
+ border-radius: var(--cd-radius-date-picker-panel);
2548
+ box-shadow: var(--cd-shadow-date-picker-panel);
1475
2549
  }
1476
2550
  .cd-date-picker__panel:focus-visible {
1477
2551
  outline: none;
@@ -1509,7 +2583,7 @@
1509
2583
  gap: var(--cd-spacing-extra-tight);
1510
2584
  margin-inline-end: var(--cd-spacing-base-tight);
1511
2585
  padding-inline-end: var(--cd-spacing-base-tight);
1512
- border-inline-end: 1px solid var(--cd-color-border);
2586
+ border-inline-end: 1px solid var(--cd-color-date-picker-border-bg-default);
1513
2587
  min-inline-size: 5rem;
1514
2588
  }
1515
2589
  /* top/bottom 时横向排列 presets */
@@ -1521,7 +2595,7 @@
1521
2595
  border-inline-end: none;
1522
2596
  margin-block-end: var(--cd-spacing-tight);
1523
2597
  padding-block-end: var(--cd-spacing-tight);
1524
- border-block-end: 1px solid var(--cd-color-border);
2598
+ border-block-end: 1px solid var(--cd-color-date-picker-border-bg-default);
1525
2599
  min-inline-size: unset;
1526
2600
  }
1527
2601
  /* right 侧预设:切换 margin/border 方向 */
@@ -1531,7 +2605,7 @@
1531
2605
  border-inline-end: none;
1532
2606
  margin-inline-start: var(--cd-spacing-base-tight);
1533
2607
  padding-inline-start: var(--cd-spacing-base-tight);
1534
- border-inline-start: 1px solid var(--cd-color-border);
2608
+ border-inline-start: 1px solid var(--cd-color-date-picker-border-bg-default);
1535
2609
  }
1536
2610
  /* bottom 预sets */
1537
2611
  .cd-date-picker__layout--presets-bottom .cd-date-picker__presets {
@@ -1540,15 +2614,15 @@
1540
2614
  border-block-end: none;
1541
2615
  margin-block-start: var(--cd-spacing-tight);
1542
2616
  padding-block-start: var(--cd-spacing-tight);
1543
- border-block-start: 1px solid var(--cd-color-border);
2617
+ border-block-start: 1px solid var(--cd-color-date-picker-border-bg-default);
1544
2618
  }
1545
2619
  .cd-date-picker__preset {
1546
2620
  padding-inline: var(--cd-spacing-tight);
1547
2621
  padding-block: var(--cd-spacing-extra-tight);
1548
2622
  border: none;
1549
- border-radius: var(--cd-border-radius-small);
1550
- background: transparent;
1551
- color: var(--cd-color-text-0);
2623
+ border-radius: var(--cd-width-date-picker-quick-control-border-radius);
2624
+ background: var(--cd-color-date-picker-quick-bg-default);
2625
+ color: var(--cd-color-date-picker-date-text-default);
1552
2626
  font: inherit;
1553
2627
  text-align: start;
1554
2628
  white-space: nowrap;
@@ -1556,8 +2630,8 @@
1556
2630
  transition: background var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
1557
2631
  }
1558
2632
  .cd-date-picker__preset:hover {
1559
- background: var(--cd-date-picker-cell-bg-hover);
1560
- color: var(--cd-color-primary);
2633
+ background: var(--cd-color-date-picker-date-bg-hover);
2634
+ color: var(--cd-color-date-picker-quick-button-text-default);
1561
2635
  }
1562
2636
  .cd-date-picker__preset:focus-visible {
1563
2637
  outline: none;
@@ -1571,54 +2645,33 @@
1571
2645
  display: flex;
1572
2646
  margin-inline-start: var(--cd-spacing-tight);
1573
2647
  padding-inline-start: var(--cd-spacing-tight);
1574
- border-inline-start: 1px solid var(--cd-color-border);
1575
- }
1576
- .cd-date-picker__time-col {
1577
- inline-size: var(--cd-time-picker-time-col-width);
1578
- block-size: calc(var(--cd-time-picker-time-item-height) * 7);
1579
- margin: 0;
1580
- padding: 0;
1581
- overflow-y: auto;
1582
- list-style: none;
1583
- scrollbar-width: thin;
1584
- }
1585
- .cd-date-picker__time-col + .cd-date-picker__time-col {
1586
- border-inline-start: 1px solid var(--cd-color-border);
2648
+ border-inline-start: 1px solid var(--cd-color-date-picker-border-bg-default);
1587
2649
  }
1588
- .cd-date-picker__time-item {
1589
- display: flex;
1590
- align-items: center;
1591
- justify-content: center;
1592
- block-size: var(--cd-time-picker-time-item-height);
1593
- color: var(--cd-color-text-0);
1594
- cursor: pointer;
1595
- transition: background var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
2650
+ /* --- 时间列复用 ScrollList+ScrollItem(对齐 Semi Combobox):解除等分、设列宽 + 面板高 +
2651
+ 重算居中留白(参照 TimePicker CSS 注释)。列都在同一 svelte scope 内(未 portal),故直接用
2652
+ scoped 后代选择器即可,无需 :global 裸类。 --- */
2653
+ .cd-date-picker__time :global(.cd-scrolllist-item) {
2654
+ flex: none;
2655
+ inline-size: var(--cd-width-date-picker-panel-list);
1596
2656
  }
1597
- .cd-date-picker__time-item:hover {
1598
- background: var(--cd-date-picker-cell-bg-hover);
2657
+ .cd-date-picker__time :global(.cd-scrolllist-body) {
2658
+ block-size: var(--cd-height-date-picker-panel-list-body);
1599
2659
  }
1600
- .cd-date-picker__time-item:focus-visible {
1601
- outline: none;
1602
- box-shadow: var(--cd-focus-ring);
1603
- }
1604
- .cd-date-picker__time-item--selected,
1605
- .cd-date-picker__time-item--selected:hover {
1606
- background: var(--cd-date-picker-cell-bg-selected);
1607
- color: var(--cd-date-picker-cell-color-selected);
2660
+ /* 居中留白按面板高重算:(body - item) * 0.5(对齐 TimePicker,ScrollList 默认按 300px 视窗算,
2661
+ 此处面板收窄需覆盖 :before 与 padding-bottom,否则选中项垂直不居中)。 */
2662
+ .cd-date-picker__time :global(.cd-scrolllist-item > ul::before) {
2663
+ block-size: calc((var(--cd-height-date-picker-panel-list-body) - var(--cd-height-scroll-list-item)) * 0.5);
1608
2664
  }
1609
- .cd-date-picker__time-item--disabled,
1610
- .cd-date-picker__time-item--disabled:hover {
1611
- color: var(--cd-color-text-3);
1612
- cursor: not-allowed;
1613
- background: transparent;
2665
+ .cd-date-picker__time :global(.cd-scrolllist-item > ul) {
2666
+ padding-block-end: calc((var(--cd-height-date-picker-panel-list-body) - var(--cd-height-scroll-list-item)) * 0.5);
1614
2667
  }
1615
2668
  .cd-date-picker__ok {
1616
2669
  padding-inline: var(--cd-spacing-tight);
1617
2670
  padding-block: var(--cd-spacing-extra-tight);
1618
2671
  border: none;
1619
- border-radius: var(--cd-border-radius-small);
1620
- background: var(--cd-color-primary);
1621
- color: var(--cd-color-white, #fff);
2672
+ border-radius: var(--cd-width-date-picker-quick-control-border-radius);
2673
+ background: var(--cd-color-date-picker-date-selected-bg-default);
2674
+ color: var(--cd-color-date-picker-date-selected-text-default);
1622
2675
  font: inherit;
1623
2676
  cursor: pointer;
1624
2677
  }
@@ -1632,16 +2685,16 @@
1632
2685
  .cd-date-picker__cancel {
1633
2686
  padding-inline: var(--cd-spacing-tight);
1634
2687
  padding-block: var(--cd-spacing-extra-tight);
1635
- border: 1px solid var(--cd-color-border);
1636
- border-radius: var(--cd-border-radius-small);
2688
+ border: 1px solid var(--cd-color-date-picker-border-bg-default);
2689
+ border-radius: var(--cd-width-date-picker-quick-control-border-radius);
1637
2690
  background: transparent;
1638
- color: var(--cd-color-text-0);
2691
+ color: var(--cd-color-date-picker-date-text-default);
1639
2692
  font: inherit;
1640
2693
  cursor: pointer;
1641
2694
  }
1642
2695
  .cd-date-picker__cancel:hover {
1643
- border-color: var(--cd-color-primary);
1644
- color: var(--cd-color-primary);
2696
+ border-color: var(--cd-color-date-picker-quick-button-text-default);
2697
+ color: var(--cd-color-date-picker-quick-button-text-default);
1645
2698
  }
1646
2699
  .cd-date-picker__cancel:focus-visible {
1647
2700
  outline: none;
@@ -1657,7 +2710,7 @@
1657
2710
  .cd-date-picker__title {
1658
2711
  flex: 1 1 auto;
1659
2712
  text-align: center;
1660
- color: var(--cd-date-picker-header-color);
2713
+ color: var(--cd-color-date-picker-day-text-active);
1661
2714
  font-weight: var(--cd-font-weight-medium);
1662
2715
  }
1663
2716
  .cd-date-picker__nav {
@@ -1665,18 +2718,18 @@
1665
2718
  align-items: center;
1666
2719
  justify-content: center;
1667
2720
  flex: 0 0 auto;
1668
- inline-size: var(--cd-date-picker-cell-size);
1669
- block-size: var(--cd-date-picker-cell-size);
2721
+ inline-size: var(--cd-width-date-picker-day-main);
2722
+ block-size: var(--cd-width-date-picker-day-main);
1670
2723
  padding: 0;
1671
2724
  border: none;
1672
2725
  background: transparent;
1673
- color: var(--cd-color-text-2);
1674
- border-radius: var(--cd-date-picker-cell-radius);
2726
+ color: var(--cd-color-date-picker-nav-icon-text-default);
2727
+ border-radius: var(--cd-radius-date-picker-day-main);
1675
2728
  cursor: pointer;
1676
2729
  }
1677
2730
  .cd-date-picker__nav:hover {
1678
- background: var(--cd-date-picker-cell-bg-hover);
1679
- color: var(--cd-color-text-0);
2731
+ background: var(--cd-color-date-picker-date-bg-hover);
2732
+ color: var(--cd-color-date-picker-nav-month-icon-text-default);
1680
2733
  }
1681
2734
  .cd-date-picker__nav:focus-visible {
1682
2735
  outline: none;
@@ -1691,10 +2744,12 @@
1691
2744
  .cd-date-picker__grid:focus-visible {
1692
2745
  outline: none;
1693
2746
  }
2747
+ /* 日期格双层(对齐 Semi):行网格列宽 = 外框 36px($width-datepicker_day),
2748
+ 日期格内容 = 32px($width-datepicker_day_main)居中,(36-32)/2=2px 天然间距,无需 gap。 */
1694
2749
  .cd-date-picker__row {
1695
2750
  display: grid;
1696
- grid-template-columns: repeat(7, var(--cd-date-picker-cell-size));
1697
- gap: 2px;
2751
+ grid-template-columns: repeat(7, var(--cd-width-date-picker-day));
2752
+ gap: 0;
1698
2753
  }
1699
2754
  /* month/year 面板:3 列大格 (仍用 grid 容器) */
1700
2755
  .cd-date-picker__grid--month,
@@ -1702,59 +2757,62 @@
1702
2757
  display: grid;
1703
2758
  grid-template-columns: repeat(3, 1fr);
1704
2759
  gap: var(--cd-spacing-extra-tight);
1705
- inline-size: calc(var(--cd-date-picker-cell-size) * 7 + 2px * 6);
2760
+ inline-size: calc(var(--cd-width-date-picker-day) * 7);
1706
2761
  }
1707
2762
  .cd-date-picker__cell--block {
1708
2763
  inline-size: auto;
2764
+ place-self: stretch;
1709
2765
  padding-inline: var(--cd-spacing-tight);
1710
- block-size: calc(var(--cd-date-picker-cell-size) * 1.4);
2766
+ block-size: calc(var(--cd-width-date-picker-day-main) * 1.4);
1711
2767
  }
1712
2768
  .cd-date-picker__weekday {
1713
2769
  display: inline-flex;
1714
2770
  align-items: center;
1715
2771
  justify-content: center;
1716
- block-size: var(--cd-date-picker-cell-size);
1717
- color: var(--cd-date-picker-weekday-color);
2772
+ inline-size: var(--cd-width-date-picker-day);
2773
+ block-size: var(--cd-width-date-picker-day-main);
2774
+ color: var(--cd-color-date-picker-day-text-default);
1718
2775
  font-size: var(--cd-font-size-small);
1719
2776
  }
1720
2777
  .cd-date-picker__cell {
1721
2778
  display: inline-flex;
1722
2779
  align-items: center;
1723
2780
  justify-content: center;
1724
- inline-size: var(--cd-date-picker-cell-size);
1725
- block-size: var(--cd-date-picker-cell-size);
2781
+ place-self: center;
2782
+ inline-size: var(--cd-width-date-picker-day-main);
2783
+ block-size: var(--cd-width-date-picker-day-main);
1726
2784
  padding: 0;
1727
2785
  border: none;
1728
2786
  background: transparent;
1729
- color: var(--cd-color-text-0);
1730
- border-radius: var(--cd-date-picker-cell-radius);
2787
+ color: var(--cd-color-date-picker-date-text-default);
2788
+ border-radius: var(--cd-radius-date-picker-day-main);
1731
2789
  font: inherit;
1732
2790
  cursor: pointer;
1733
2791
  transition: background var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
1734
2792
  }
1735
2793
  .cd-date-picker__cell:hover {
1736
- background: var(--cd-date-picker-cell-bg-hover);
2794
+ background: var(--cd-color-date-picker-date-bg-hover);
1737
2795
  }
1738
2796
  .cd-date-picker__cell:focus-visible {
1739
2797
  outline: none;
1740
2798
  box-shadow: var(--cd-focus-ring);
1741
2799
  }
1742
2800
  .cd-date-picker__cell--muted {
1743
- color: var(--cd-date-picker-cell-color-muted);
2801
+ color: var(--cd-color-date-picker-date-muted-text-default);
1744
2802
  }
1745
2803
  .cd-date-picker__cell--today {
1746
- border-block-end: 2px solid var(--cd-date-picker-cell-bg-selected);
2804
+ border-block-end: 2px solid var(--cd-color-date-picker-date-selected-bg-default);
1747
2805
  }
1748
2806
  .cd-date-picker__cell--highlight {
1749
- background: var(--cd-date-picker-cell-bg-hover);
2807
+ background: var(--cd-color-date-picker-date-bg-hover);
1750
2808
  }
1751
2809
  .cd-date-picker__cell--selected,
1752
2810
  .cd-date-picker__cell--selected:hover {
1753
- background: var(--cd-date-picker-cell-bg-selected);
1754
- color: var(--cd-date-picker-cell-color-selected);
2811
+ background: var(--cd-color-date-picker-date-selected-bg-default);
2812
+ color: var(--cd-color-date-picker-date-selected-text-default);
1755
2813
  }
1756
2814
  .cd-date-picker__cell:disabled {
1757
- color: var(--cd-color-text-3);
2815
+ color: var(--cd-color-date-picker-date-disabled-text-default);
1758
2816
  cursor: not-allowed;
1759
2817
  background: transparent;
1760
2818
  }
@@ -1765,8 +2823,8 @@
1765
2823
  gap: var(--cd-spacing-tight);
1766
2824
  margin-block-start: var(--cd-spacing-tight);
1767
2825
  padding-block-start: var(--cd-spacing-tight);
1768
- border-block-start: 1px solid var(--cd-color-border);
1769
- background: var(--cd-date-picker-footer-bg); /* 对齐 Semi footer 背景 fill-0 */
2826
+ border-block-start: 1px solid var(--cd-color-date-picker-border-bg-default);
2827
+ background: var(--cd-color-date-picker-footer-bg-default); /* 对齐 Semi footer 背景 fill-0 */
1770
2828
  }
1771
2829
  .cd-date-picker__panel--datetime .cd-date-picker__footer,
1772
2830
  .cd-date-picker__footer:has(.cd-date-picker__ok) {
@@ -1776,7 +2834,7 @@
1776
2834
  padding: 0;
1777
2835
  border: none;
1778
2836
  background: transparent;
1779
- color: var(--cd-color-primary);
2837
+ color: var(--cd-color-date-picker-date-today-text-default);
1780
2838
  font: inherit;
1781
2839
  cursor: pointer;
1782
2840
  }
@@ -1788,11 +2846,239 @@
1788
2846
  box-shadow: var(--cd-focus-ring);
1789
2847
  border-radius: var(--cd-border-radius-small);
1790
2848
  }
2849
+ /* insetInput 面板内嵌输入框(对齐 Semi InsetDateInput / InsetTimeInput) */
2850
+ .cd-date-picker__inset-input {
2851
+ display: flex;
2852
+ gap: var(--cd-spacing-date-picker-inset-input-separator-padding-x);
2853
+ box-sizing: border-box;
2854
+ inline-size: var(--cd-width-date-picker-inset-input-date-type-wrapper);
2855
+ max-inline-size: 100%;
2856
+ margin-block-end: var(--cd-spacing-date-picker-inset-input-wrapper-margin);
2857
+ padding-block: var(--cd-spacing-date-picker-inset-input-wrapper-padding-y)
2858
+ var(--cd-spacing-date-picker-inset-input-wrapper-padding-bottom);
2859
+ padding-inline: var(--cd-spacing-date-picker-inset-input-wrapper-padding-x);
2860
+ }
2861
+ .cd-date-picker__inset-field {
2862
+ flex: 1 1 auto;
2863
+ min-inline-size: 0;
2864
+ block-size: var(--cd-height-date-picker-range-input-default);
2865
+ padding-inline: var(--cd-spacing-input-paddingleft);
2866
+ background: var(--cd-color-date-picker-range-input-bg-default);
2867
+ color: var(--cd-color-input-default-text-default);
2868
+ border: var(--cd-width-date-picker-range-input-border) solid var(--cd-color-date-picker-range-input-border-default);
2869
+ border-radius: var(--cd-radius-date-picker-range-input-input-wrapper);
2870
+ font: inherit;
2871
+ transition: var(--cd-transition-date-picker-range-input);
2872
+ }
2873
+ .cd-date-picker__inset-field:hover {
2874
+ background: var(--cd-color-date-picker-range-input-bg-hover);
2875
+ }
2876
+ .cd-date-picker__inset-field:focus-visible {
2877
+ outline: none;
2878
+ border-color: var(--cd-color-date-picker-range-input-border-active);
2879
+ background: var(--cd-color-date-picker-range-input-input-wrapper-bg-focus);
2880
+ box-shadow: var(--cd-focus-ring);
2881
+ }
2882
+ .cd-date-picker__inset-field::placeholder {
2883
+ color: var(--cd-color-input-placeholder-text-default);
2884
+ }
2885
+ .cd-date-picker__inset-field:disabled {
2886
+ color: var(--cd-color-date-picker-range-input-disabled-text-default);
2887
+ background: var(--cd-color-date-picker-range-input-disabled-bg-default);
2888
+ cursor: not-allowed;
2889
+ }
2890
+ .cd-date-picker__inset-field--time {
2891
+ flex: 0 0 auto;
2892
+ inline-size: 40%;
2893
+ }
2894
+ .cd-date-picker--compact .cd-date-picker__inset-input {
2895
+ inline-size: var(--cd-width-date-picker-inset-input-date-type-wrapper-compact);
2896
+ margin-block-end: var(--cd-spacing-date-picker-inset-input-wrapper-compact-margin);
2897
+ padding-block: var(--cd-spacing-date-picker-inset-input-wrapper-compact-padding-y)
2898
+ var(--cd-spacing-date-picker-inset-input-wrapper-compact-padding-bottom);
2899
+ padding-inline: var(--cd-spacing-date-picker-inset-input-wrapper-compact-padding-x);
2900
+ }
2901
+ .cd-date-picker--compact .cd-date-picker__inset-field {
2902
+ block-size: var(--cd-height-date-picker-inset-input-wrapper-compact);
2903
+ font-size: var(--cd-font-size-date-picker-inset-input-compact-font-size);
2904
+ }
2905
+ /* 头部标题可点(进年月滚轮)时的按钮样式 */
2906
+ .cd-date-picker__title--button {
2907
+ padding-inline: var(--cd-spacing-date-picker-yam-header-padding-x);
2908
+ padding-block: var(--cd-spacing-date-picker-yam-header-padding-y);
2909
+ border: none;
2910
+ background: transparent;
2911
+ color: var(--cd-color-date-picker-nav-month-icon-text-default);
2912
+ border-radius: var(--cd-width-date-picker-yam-header-border-radius);
2913
+ font: inherit;
2914
+ font-weight: var(--cd-font-weight-medium);
2915
+ cursor: pointer;
2916
+ transition: background var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
2917
+ }
2918
+ .cd-date-picker__title--button:hover {
2919
+ background: var(--cd-color-date-picker-date-bg-hover);
2920
+ }
2921
+ .cd-date-picker__title--button:focus-visible {
2922
+ outline: none;
2923
+ box-shadow: var(--cd-focus-ring);
2924
+ }
2925
+ /* 年月滚轮面板 (PANEL_YAM):年 + 月两列 ScrollList,消费 yam token */
2926
+ .cd-date-picker__yam {
2927
+ display: flex;
2928
+ flex-direction: column;
2929
+ inline-size: var(--cd-width-date-picker-yam-showing-min);
2930
+ max-inline-size: 100%;
2931
+ min-block-size: var(--cd-height-date-picker-yam-showing-min);
2932
+ padding: var(--cd-spacing-date-picker-scrolllist-body-padding);
2933
+ }
2934
+ .cd-date-picker__yam :global(.cd-scrolllist) {
2935
+ block-size: var(--cd-height-date-picker-panel-yam-scrolllist);
2936
+ box-shadow: none;
2937
+ }
2938
+ .cd-date-picker__yam :global(.cd-scrolllist-body) {
2939
+ block-size: var(--cd-height-date-picker-panel-yam-scrolllist);
2940
+ padding: 0;
2941
+ }
2942
+ .cd-date-picker__yam :global(.cd-scrolllist-item-wheel) {
2943
+ min-inline-size: var(--cd-width-date-picker-panel-yam-scrolllist-li-min);
2944
+ }
2945
+ .cd-date-picker__yam-back {
2946
+ margin-block-start: auto;
2947
+ padding: var(--cd-spacing-date-picker-scrolllist-header-padding);
2948
+ min-block-size: var(--cd-height-date-picker-timepicker-header-min);
2949
+ border: none;
2950
+ border-block-start: var(--cd-width-date-picker-border) solid var(--cd-color-date-picker-border-bg-default);
2951
+ background: transparent;
2952
+ color: var(--cd-color-date-picker-quick-button-text-default);
2953
+ font: inherit;
2954
+ cursor: pointer;
2955
+ }
2956
+ .cd-date-picker__yam-back:hover {
2957
+ text-decoration: underline;
2958
+ }
2959
+ .cd-date-picker__yam-back:focus-visible {
2960
+ outline: none;
2961
+ box-shadow: var(--cd-focus-ring);
2962
+ border-radius: var(--cd-border-radius-small);
2963
+ }
2964
+
2965
+ /* ============================ range 触发器双输入框 ============================ */
2966
+ .cd-date-picker__range-input {
2967
+ display: flex;
2968
+ align-items: center;
2969
+ gap: var(--cd-spacing-tight);
2970
+ inline-size: 100%;
2971
+ block-size: var(--cd-height-input-default);
2972
+ padding-inline: var(--cd-spacing-input-paddingleft);
2973
+ background: var(--cd-color-input-default-bg-default);
2974
+ color: var(--cd-color-input-default-text-default);
2975
+ border: 1px solid var(--cd-color-input-default-border-default);
2976
+ border-radius: var(--cd-radius-input-wrapper);
2977
+ transition: border-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
2978
+ }
2979
+ .cd-date-picker--small .cd-date-picker__range-input {
2980
+ block-size: var(--cd-height-input-small);
2981
+ font-size: var(--cd-font-size-small);
2982
+ }
2983
+ .cd-date-picker--large .cd-date-picker__range-input {
2984
+ block-size: var(--cd-height-input-large);
2985
+ font-size: var(--cd-font-size-header-6);
2986
+ }
2987
+ .cd-date-picker--open .cd-date-picker__range-input {
2988
+ border-color: var(--cd-color-input-default-border-focus);
2989
+ }
2990
+ .cd-date-picker--warning .cd-date-picker__range-input {
2991
+ border-color: var(--cd-color-input-warning-border-focus);
2992
+ }
2993
+ .cd-date-picker--error .cd-date-picker__range-input {
2994
+ border-color: var(--cd-color-input-danger-border-focus);
2995
+ }
2996
+ .cd-date-picker--disabled .cd-date-picker__range-input {
2997
+ background: var(--cd-color-fill-0);
2998
+ color: var(--cd-color-text-3);
2999
+ cursor: not-allowed;
3000
+ }
3001
+ .cd-date-picker__range-field {
3002
+ flex: 1 1 0;
3003
+ min-inline-size: 0;
3004
+ inline-size: 100%;
3005
+ block-size: 100%;
3006
+ padding: 0;
3007
+ border: none;
3008
+ background: transparent;
3009
+ color: inherit;
3010
+ font: inherit;
3011
+ text-align: center;
3012
+ cursor: pointer;
3013
+ outline: none;
3014
+ }
3015
+ .cd-date-picker__range-field::placeholder {
3016
+ color: var(--cd-color-input-placeholder-text-default);
3017
+ }
3018
+ .cd-date-picker__range-field:disabled {
3019
+ cursor: not-allowed;
3020
+ }
3021
+ /* 激活端下划线提示(对齐 Semi range 输入焦点态) */
3022
+ .cd-date-picker__range-input--start-active .cd-date-picker__range-field--start,
3023
+ .cd-date-picker__range-input--end-active .cd-date-picker__range-field--end {
3024
+ box-shadow: inset 0 -2px 0 0 var(--cd-color-date-picker-range-input-border-active);
3025
+ }
3026
+ .cd-date-picker__range-sep {
3027
+ flex: 0 0 auto;
3028
+ color: var(--cd-color-text-2);
3029
+ }
3030
+
3031
+ /* ============================ range 双面板 ============================ */
3032
+ .cd-date-picker__panels {
3033
+ display: flex;
3034
+ align-items: flex-start;
3035
+ gap: var(--cd-spacing-base);
3036
+ }
3037
+ .cd-date-picker__month {
3038
+ flex: 0 0 auto;
3039
+ }
3040
+ .cd-date-picker__nav--ghost {
3041
+ background: transparent;
3042
+ cursor: default;
3043
+ pointer-events: none;
3044
+ }
3045
+ .cd-date-picker__nav--ghost:hover {
3046
+ background: transparent;
3047
+ }
3048
+ /* range 区间内:浅底连续条(对齐 Semi primary-light 区间底色) */
3049
+ .cd-date-picker__cell--in-range {
3050
+ background: var(--cd-color-date-picker-date-in-hover-bg-default);
3051
+ border-radius: 0;
3052
+ }
3053
+ /* range 端点:实心高亮 */
3054
+ .cd-date-picker__cell--edge,
3055
+ .cd-date-picker__cell--edge:hover {
3056
+ background: var(--cd-color-date-picker-date-selected-bg-default);
3057
+ color: var(--cd-color-date-picker-date-selected-text-default);
3058
+ border-radius: var(--cd-radius-date-picker-day-main);
3059
+ }
3060
+
3061
+ /* ============================ range 时间列 ============================ */
3062
+ .cd-date-picker__times {
3063
+ display: flex;
3064
+ margin-inline-start: var(--cd-spacing-tight);
3065
+ padding-inline-start: var(--cd-spacing-tight);
3066
+ border-inline-start: 1px solid var(--cd-color-date-picker-border-bg-default);
3067
+ gap: var(--cd-spacing-tight);
3068
+ }
3069
+ .cd-date-picker__time--active {
3070
+ background: var(--cd-color-date-picker-date-in-hover-bg-default);
3071
+ border-radius: var(--cd-radius-date-picker-day-main);
3072
+ }
3073
+
1791
3074
  @media (prefers-reduced-motion: reduce) {
1792
3075
  .cd-date-picker__trigger,
3076
+ .cd-date-picker__range-input,
1793
3077
  .cd-date-picker__clear,
1794
3078
  .cd-date-picker__cell,
1795
- .cd-date-picker__preset {
3079
+ .cd-date-picker__preset,
3080
+ .cd-date-picker__inset-field,
3081
+ .cd-date-picker__title--button {
1796
3082
  transition: none;
1797
3083
  }
1798
3084
  }