@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
@@ -1,1344 +1,1100 @@
1
1
  <!--
2
- Calendar — see specs/components/show/Calendar.spec.md
3
- 月/周/日视图日历:日格网格 + 事件展示与 +N 折叠,today/selected/outside/weekend/disabled 态。
4
- mode='month'(6×7) | 'week'(1×7) | 'day'(单日时间轴,纵向小时段);selectionMode='single'(选中日) | 'range'(范围选择,起止+区间高亮+hover 预览)
5
- day 模式:dayStartHour~dayEndHour 逐小时一行,带时间事件按起始小时入对应时段、全天/跨天延续事件入顶部「全天」区(纯派生 timelineForDay,纯 CSS 布局)。
6
- 受控 value(锚点)/selectedDate/rangeValue 不回写,仅 onChange/onSelect/onRangeChange/onDateClick/onMoreClick 通知。
7
- 复用 @chenzy-design/core 的纯日期/分组算法(getMonthGrid/getWeekGrid/getDayHours/addMonths/addWeeks/addDays/timelineForDay/gridFocusMove…),不重复实现。
8
- roving 键盘焦点:网格内仅活动格 tabindex=0,方向键(←→天/↑↓周/PageUp-Down月/Home-End周首末)移动焦点,跨月/周自动翻页并落焦,Enter/Space 选中(纯 gridFocusMove 派生 + 命令式 focus)。
9
- popup 弹层模式:渲染 trigger,日历门户浮出(复用 _floating),外部点击/Esc 关闭(useDismiss)并归还焦点。
10
- 虚拟化:day 视图小时时间轴按阈值用 core fixedRange 视口渲染(滚动监听命令式 + cleanup,红线 #3)。
2
+ Calendar — 纯事件展示日历,DOM 结构与 class 名完全照搬 Semi Design Calendar(semi-calendar → cd-calendar)。
3
+ 四视图 mode='day'|'week'|'month'|'range',分别对齐 Semi dayCalendar/weekCalendar/monthCalendar/rangeCalendar:
4
+ - day:cd-calendar-day(overflow:auto) > day-sticky-top(header + all-day) + day-scroll-wrapper > day-scroll > (time + grid)
5
+ - week/range:cd-calendar-week > week-sticky-top(header + week-header + all-day) + week-scroll-wrapper > week-scroll > (time + N×grid)
6
+ - month:cd-calendar-month > month-sticky-top(header + month-header) + month-grid-wrapper > month-week > grid-col > N×month-weekrow
7
+ displayValue 决定展示锚点;onClick 回调点击的精确时间点(日/周精确到半小时,月精确到日)。
8
+ 事件定位全部来自 @chenzy-design/core 的纯算法;事件内容由 event.children 承载(字符串直出 / snippet @render),对齐 Semi children。
9
+ 头部对齐 Semi:无默认导航,仅当传入 header snippet 时渲染自定义头部。
11
10
  -->
12
11
  <script lang="ts">
13
- import { untrack, tick, type Snippet } from 'svelte';
12
+ import type { Snippet } from 'svelte';
14
13
  import {
14
+ getDailyEvents,
15
+ parseWeekSpanEvents,
16
+ parseSpanEvents,
17
+ allDayEventMap,
18
+ calcRowHeight,
19
+ getMonthEvents,
20
+ parseEvents,
21
+ startOfWeek,
22
+ addDaysLocal,
23
+ differenceInCalendarDays,
24
+ isSameDay,
25
+ isSameMonth,
26
+ isWeekend,
27
+ getPos,
15
28
  getMonthGrid,
16
- getWeekGrid,
17
- getDayHours,
18
29
  weekdayOrder,
19
- isSameDay,
20
- startOfDay,
21
- addMonths,
22
- addWeeks,
23
- addDays,
24
- groupEventsByDays,
25
- timelineForDay,
26
- dayKey,
27
- isPastDay,
28
- gridFocusMove,
29
- fixedRange,
30
- useDismiss,
31
- useLiveAnnouncer,
32
- type GridFocusKey,
33
30
  type CalendarEvent,
34
- type Placement,
31
+ type PositionedDayEvent,
32
+ type PositionedSpanEvent,
33
+ type WeekStartsOn,
35
34
  } from '@chenzy-design/core';
36
- import { floating } from '../_floating/use-floating.js';
37
35
  import { useLocale } from '../locale-provider/index.js';
36
+ import { Popover } from '../popover/index.js';
38
37
 
39
- type WeekStart = 0 | 1 | 2 | 3 | 4 | 5 | 6;
40
- type Mode = 'month' | 'week' | 'day';
41
- type SelectionMode = 'single' | 'range';
42
- type RangeValue = [Date, Date];
38
+ type Mode = 'day' | 'week' | 'month' | 'range';
43
39
 
44
40
  interface Props {
45
- value?: Date;
46
- defaultValue?: Date;
47
- mode?: Mode;
48
- selectionMode?: SelectionMode;
49
- events?: CalendarEvent[];
50
- weekStartsOn?: WeekStart;
51
- maxEventsPerDay?: number;
52
- dayStartHour?: number;
53
- dayEndHour?: number;
54
- weekendDays?: number[];
55
- markWeekend?: boolean;
56
- disabledDate?: (date: Date) => boolean;
57
- selectedDate?: Date;
58
- defaultSelectedDate?: Date;
59
- rangeValue?: RangeValue | null;
60
- defaultRangeValue?: RangeValue | null;
61
- locale?: string;
62
- onChange?: (info: { value: Date }) => void;
63
- onSelect?: (info: { date: Date }) => void;
64
- onRangeChange?: (info: { range: RangeValue }) => void;
65
- onDateClick?: (info: { date: Date }) => void;
66
- onMoreClick?: (info: { date: Date; events: CalendarEvent[] }) => void;
67
- /** 点击/键盘激活事件块(spec §a11y:事件块 role=button + Enter/Space 触发)。 */
68
- onEventClick?: (info: { event: CalendarEvent; nativeEvent: Event }) => void;
69
- /** 关闭回调(popup 模式) */
70
- onClose?: () => void;
71
- dateCell?: Snippet<
72
- [{ date: Date; events: CalendarEvent[]; isToday: boolean; isOutside: boolean; disabled: boolean }]
73
- >;
74
- event?: Snippet<[{ event: CalendarEvent }]>;
75
- /** 自定义头部内容,替换默认头部 */
41
+ /** 展示锚点日期,默认 new Date() */
42
+ displayValue?: Date;
43
+ /** mode='range' 时必传,左闭右开 [start, end) */
44
+ range?: [Date, Date];
45
+ /** 自定义头部内容(对齐 Semi header;缺省不渲染头部) */
76
46
  header?: Snippet;
77
- /** 自定义单元格额外内容 (dateString: 'YYYY-MM-DD', date: Date) */
78
- dateGridRender?: (dateString: string, date: Date) => Snippet | null | undefined;
79
- /** 自定义全天事件区域渲染 */
80
- allDayEventsRender?: (events: CalendarEvent[]) => Snippet | null | undefined;
81
- /** 自定义时间文案 (hour: 0-23) */
82
- renderTimeDisplay?: (hour: number) => string;
83
- /** 自定义日期文案 */
84
- renderDateDisplay?: (date: Date) => string;
85
- /** 是否显示当前时间红线(day/week 视图,默认 true) */
47
+ /** 事件列表 */
48
+ events?: CalendarEvent[];
49
+ /** 视图模式,默认 'week' */
50
+ mode?: Mode;
51
+ /** 显示当前时间红线(日/周/多日视图),默认 true */
86
52
  showCurrTime?: boolean;
87
- /** day/week 视图默认滚动高度(px,默认 400) */
53
+ /** 周起始,默认 0(周日) */
54
+ weekStartsOn?: WeekStartsOn;
55
+ /** 日/周视图默认滚动高度(px),默认 400 */
88
56
  scrollTop?: number;
89
- /** 事件块最小高度(px) */
57
+ /** 区分周末列(灰底),默认 false */
58
+ markWeekend?: boolean;
59
+ /** 日/周/多日视图事件最小高度(px),默认 Number.MIN_SAFE_INTEGER */
90
60
  minEventHeight?: number;
91
61
  /** 日历整体宽度 */
92
62
  width?: number | string;
93
- /** 日历整体高度 */
63
+ /** 日历整体高度,默认 600 */
94
64
  height?: number | string;
95
- /** 范围选择的日期区间(mode='range' 时用于初始化,同 rangeValue) */
96
- range?: [Date, Date] | null;
97
- /** 受控展示锚点(Semi API: displayValue,等同于 value) */
98
- displayValue?: Date;
99
- ariaLabel?: string;
100
- // --- 弹层模式 (popup) ---
101
- /** 弹层模式:渲染 trigger,日历作为浮层弹出(复用 _floating 门户定位) */
102
- popup?: boolean;
103
- /** 受控展开态(popup 模式),受控时不回写仅 onOpenChange (红线 #1) */
104
- open?: boolean;
105
- /** 非受控初始展开态 */
106
- defaultOpen?: boolean;
107
- /** 展开态变化回调 */
108
- onOpenChange?: (info: { open: boolean }) => void;
109
- /** 浮层相对 trigger 的位置 */
110
- placement?: Placement;
111
- /** 浮层门户挂载容器(默认 document.body) */
112
- getContainer?: () => HTMLElement | null | undefined;
113
- /** trigger 自定义内容(popup 模式);不传则渲染默认按钮显示标题 */
114
- trigger?: Snippet<[{ open: boolean; toggle: () => void }]>;
115
- // --- 虚拟化 (day 视图时间轴) ---
116
- /**
117
- * day 视图小时时间轴虚拟化:当行数 ≥ virtualizeThreshold 时仅渲染视口行。
118
- * 'auto'(默认)按阈值自动;true 强制;false 关闭。
119
- */
120
- virtualizeDay?: boolean | 'auto';
121
- /** 触发虚拟化的最少行数(virtualizeDay='auto' 时生效) */
122
- virtualizeThreshold?: number;
123
- /** day 视图时间轴视口高度(px,虚拟化时滚动容器高度) */
124
- timelineViewportHeight?: number;
65
+ /** 点击日期格(对齐 Semi function(e, date)):日/周视图精确到半小时,月视图精确到日 */
66
+ onClick?: (e: Event, date: Date) => void;
67
+ /** 月视图 +N 卡片关闭回调(对齐 Semi function(e)) */
68
+ onClose?: (e: Event) => void;
69
+ /** 月视图点「还有 N 项」回调(对齐 Semi function(e, date, remaining)) */
70
+ onMoreClick?: (e: Event, date: Date, remaining: number) => void;
71
+ /** 自定义日/周视图时间文案 */
72
+ renderTimeDisplay?: (hour: number) => unknown;
73
+ /** 自定义日期文案(week/range 视图日期头)。对齐 Semi renderDateDisplay(date)=>ReactNode。 */
74
+ renderDateDisplay?: Snippet<[Date]>;
75
+ /** 自定义单元格/列(绝对定位);返回 Snippet 覆盖默认渲染 */
76
+ dateGridRender?: (dateString: string, date: Date) => Snippet | null | undefined;
77
+ /** 自定义顶部全天区;返回 Snippet 覆盖默认全天渲染 */
78
+ allDayEventsRender?: (events: CalendarEvent[]) => Snippet | null | undefined;
125
79
  }
126
80
 
127
81
  let {
128
- value,
129
- defaultValue,
130
82
  displayValue,
131
- mode = 'month',
132
- selectionMode = 'single',
133
- events = [],
134
- weekStartsOn = 0,
135
- maxEventsPerDay = 3,
136
- dayStartHour = 0,
137
- dayEndHour = 23,
138
- weekendDays = [0, 6],
139
- markWeekend = true,
140
- disabledDate,
141
- selectedDate,
142
- defaultSelectedDate,
143
- rangeValue,
144
- defaultRangeValue,
145
83
  range,
146
- locale = 'zh-CN',
147
- onChange,
148
- onSelect,
149
- onRangeChange,
150
- onDateClick,
151
- onMoreClick,
152
- onEventClick,
153
- onClose,
154
- dateCell,
155
- event,
156
84
  header,
157
- dateGridRender,
158
- allDayEventsRender,
159
- renderTimeDisplay,
160
- renderDateDisplay,
85
+ events = [],
86
+ mode = 'week',
161
87
  showCurrTime = true,
88
+ weekStartsOn = 0,
162
89
  scrollTop = 400,
163
- minEventHeight,
90
+ markWeekend = false,
91
+ minEventHeight = Number.MIN_SAFE_INTEGER,
164
92
  width,
165
- height,
166
- ariaLabel,
167
- popup = false,
168
- open,
169
- defaultOpen = false,
170
- onOpenChange,
171
- placement = 'bottomStart',
172
- getContainer,
173
- trigger,
174
- virtualizeDay = 'auto',
175
- virtualizeThreshold = 18,
176
- timelineViewportHeight = 360,
93
+ height = 600,
94
+ onClick,
95
+ onClose,
96
+ onMoreClick,
97
+ renderTimeDisplay,
98
+ renderDateDisplay,
99
+ dateGridRender,
100
+ allDayEventsRender,
177
101
  }: Props = $props();
178
102
 
179
- // displayValue 作为 value 的别名(Semi API),优先级低于 value
180
- const resolvedValue = $derived(value ?? displayValue);
181
-
182
- // range 作为 rangeValue 的别名(Semi API),优先级低于 rangeValue
183
- const resolvedRangeValue = $derived(rangeValue ?? range);
184
-
185
103
  const loc = useLocale();
186
- // 单例 live region(polite):切月/年、移动焦点、选中日期时播报可读文本(红线 #3:命令式)。
187
- const announcer = useLiveAnnouncer();
188
-
189
- // 一次性常量:今天(render 用于派生 today/past 态,不放 $state 反复 new)
190
- const today = new Date();
191
-
192
- // --- 锚点 value:受控不回写 (红线 #1) ---
193
- // resolvedValue = value ?? displayValue(displayValue 是 Semi API 的别名)
194
- function initValue(): Date {
195
- return defaultValue ?? new Date();
196
- }
197
- const isValueControlled = $derived(resolvedValue !== undefined);
198
- let innerValue = $state<Date>(initValue());
199
- const currentValue = $derived(isValueControlled ? (resolvedValue as Date) : innerValue);
200
104
 
201
- // --- 选中日 selectedDate:受控不回写 (红线 #1) ---
202
- function initSelected(): Date | null {
203
- return defaultSelectedDate ?? null;
204
- }
205
- const isSelectedControlled = $derived(selectedDate !== undefined);
206
- let innerSelected = $state<Date | null>(initSelected());
207
- const currentSelected = $derived(
208
- isSelectedControlled ? (selectedDate as Date) : innerSelected,
209
- );
210
-
211
- // --- 选中范围 rangeValue:受控不回写 (红线 #1) ---
212
- function normRange(r: RangeValue | null | undefined): RangeValue | null {
213
- if (!r) return null;
214
- const a = startOfDay(r[0]);
215
- const b = startOfDay(r[1]);
216
- return a.getTime() <= b.getTime() ? [a, b] : [b, a];
217
- }
218
- // resolvedRangeValue = rangeValue ?? range(range 是 Semi API 的别名)
219
- const isRangeControlled = $derived(resolvedRangeValue !== undefined);
220
- let innerRange = $state<RangeValue | null>(untrack(() => normRange(defaultRangeValue)));
221
- const currentRange = $derived(
222
- isRangeControlled ? normRange(resolvedRangeValue) : innerRange,
223
- );
224
-
225
- // --- range 选择状态机:'start'=待选起点;'end'=已选起点待选终点 ---
226
- let phase = $state<'start' | 'end'>('start');
227
- let pendingStart = $state<Date | null>(null);
228
- let previewEnd = $state<Date | null>(null);
229
-
230
- // --- 弹层展开态:受控不回写仅 onOpenChange (红线 #1) ---
231
- const isOpenControlled = $derived(open !== undefined);
232
- let innerOpen = $state(untrack(() => defaultOpen));
233
- const isOpen = $derived(isOpenControlled ? (open as boolean) : innerOpen);
234
- function setOpen(next: boolean) {
235
- if (next === isOpen) return;
236
- if (!isOpenControlled) innerOpen = next;
237
- onOpenChange?.({ open: next });
238
- }
239
- function toggleOpen() {
240
- setOpen(!isOpen);
241
- }
105
+ // 展示锚点:纯受控 displayValue(缺省 today)。对齐 Semi——无内置导航。
106
+ const fallbackAnchor = new Date();
107
+ const anchor = $derived(displayValue ?? fallbackAnchor);
242
108
 
243
- // --- roving 焦点:被聚焦的日期(纯 $state,网格只有一个 tabindex=0 的格) ---
244
- // 初值跟随锚点;用户方向键移动时更新,跨月/周则锚点随动重渲染网格。
245
- let focusedDate = $state<Date | null>(null);
246
- // 标记下一次重渲染后需把 DOM 焦点落到 focusedDate 对应的格上
247
- let pendingFocus = $state(false);
109
+ // 当前时刻(红线用),每 30s 刷新一次。
110
+ let now = $state(new Date());
111
+ $effect(() => {
112
+ if (!showCurrTime) return;
113
+ const id = setInterval(() => {
114
+ now = new Date();
115
+ }, 30_000);
116
+ return () => clearInterval(id);
117
+ });
248
118
 
249
- let rootEl = $state<HTMLElement | null>(null);
250
- let triggerEl = $state<HTMLElement | null>(null);
251
- let panelEl = $state<HTMLElement | null>(null);
119
+ // 滚动内容区像素高度:绝对定位事件的 top/height 需按它换算。
120
+ let scrollContentHeight = $state(0);
252
121
 
253
- // --- 网格与分组:全部从 props/本地 $state 派生 (红线 #2) ---
254
- // day 模式不需要日格网格;给出空数组避免下游再分支
255
- const cells = $derived(
256
- mode === 'day'
257
- ? []
258
- : mode === 'week'
259
- ? getWeekGrid(currentValue, weekStartsOn)
260
- : getMonthGrid(currentValue, weekStartsOn),
261
- );
262
- const weeks = $derived(
263
- mode === 'week'
264
- ? [cells]
265
- : mode === 'day'
266
- ? []
267
- : Array.from({ length: 6 }, (_, i) => cells.slice(i * 7, (i + 1) * 7)),
268
- );
269
- const dayMap = $derived(
270
- groupEventsByDays(
271
- events,
272
- cells.map((c) => c.date),
273
- maxEventsPerDay,
274
- ),
275
- );
122
+ // 根滚动视口(对齐 Semi:dom 即根 .calendar-day/week,overflow:auto)。初始滚到 scrollTop 偏移
123
+ // (对齐 Semi componentDidMount: dom.scrollTop = props.scrollTop)。
124
+ let rootEl = $state<HTMLDivElement | null>(null);
125
+ $effect(() => {
126
+ if (!isTimeGrid || !rootEl) return;
127
+ void mode;
128
+ rootEl.scrollTop = scrollTop;
129
+ });
276
130
 
277
- // --- day 视图:单日时间轴(纯派生,红线 #2/#3) ---
278
- const hourSlots = $derived(
279
- mode === 'day' ? getDayHours(currentValue, dayStartHour, dayEndHour) : [],
280
- );
281
- const dayTimeline = $derived(
282
- mode === 'day'
283
- ? timelineForDay(events, currentValue, dayStartHour, dayEndHour)
284
- : { allDay: [], byHour: new Map<number, CalendarEvent[]>() },
131
+ // --- Intl 格式化器(语言来自 LocaleProvider 的 loc().code) ---
132
+ const localeCode = $derived(loc().code);
133
+ const weekdayFmt = $derived(new Intl.DateTimeFormat(localeCode, { weekday: 'short' }));
134
+ const weekdayLongFmt = $derived(new Intl.DateTimeFormat(localeCode, { weekday: 'long' }));
135
+ const monthShortFmt = $derived(new Intl.DateTimeFormat(localeCode, { month: 'short' }));
136
+ const titleFmt = $derived(new Intl.DateTimeFormat(localeCode, { year: 'numeric', month: 'long' }));
137
+ const fullDateFmt = $derived(
138
+ new Intl.DateTimeFormat(localeCode, { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long' }),
285
139
  );
140
+ const slotTimeFmt = $derived(new Intl.DateTimeFormat(localeCode, { hour: '2-digit', minute: '2-digit' }));
286
141
 
287
- // --- day 时间轴虚拟化(复用 core fixedRange,红线 #2 派生 / #3 滚动监听命令式)---
288
- const ROW_H = 40; // 与 --cd-calendar-hour-min-h 默认值对齐(固定行高视口渲染)
289
- const useVirtual = $derived(
290
- mode === 'day' &&
291
- (virtualizeDay === true ||
292
- (virtualizeDay === 'auto' && hourSlots.length >= virtualizeThreshold)),
293
- );
294
- let timelineScrollTop = $state(0);
295
- // 视口可见行区间(含 overscan),仅虚拟化时计算
296
- const visibleRange = $derived(
297
- useVirtual
298
- ? fixedRange(timelineScrollTop, timelineViewportHeight, ROW_H, hourSlots.length, 3)
299
- : { startIndex: 0, endIndex: hourSlots.length },
300
- );
301
- const visibleSlots = $derived(
302
- useVirtual ? hourSlots.slice(visibleRange.startIndex, visibleRange.endIndex) : hourSlots,
303
- );
304
- // 上/下空白撑高,保证滚动条与 hour 行绝对位置正确
305
- const padTop = $derived(useVirtual ? visibleRange.startIndex * ROW_H : 0);
306
- const totalHeight = $derived(useVirtual ? hourSlots.length * ROW_H : 0);
307
-
308
- // 命令式滚动监听 + cleanup(红线 #3):只在虚拟化时绑定
309
- let timelineEl = $state<HTMLElement | null>(null);
310
-
311
- // scrollTop:day 视图初始滚动位置(命令式,红线 #3)
312
- $effect(() => {
313
- if (mode !== 'day' || !timelineEl) return;
314
- // 使用 untrack 避免把 scrollTop prop 加入 effect 依赖,只在 timelineEl mount 时执行一次
315
- const top = scrollTop;
316
- timelineEl.scrollTop = top;
317
- });
142
+ // 纯日期数字(对齐 Semi date-fns format(date,'d'))。
143
+ function dayString(d: Date): string {
144
+ return String(d.getDate());
145
+ }
146
+ function weekdayName(d: Date): string {
147
+ return weekdayFmt.format(d);
148
+ }
318
149
 
319
- // showCurrTime:当前时间红线,每分钟更新一次(命令式定时器,红线 #3)
320
- let currTimePercent = $state<number | null>(null);
321
- $effect(() => {
322
- if (mode !== 'day' || !showCurrTime) {
323
- currTimePercent = null;
324
- return;
150
+ // --- 每个视图展示的「列」(一列 = 一天) ---
151
+ const columnDates = $derived.by<Date[]>(() => {
152
+ if (mode === 'day') return [anchor];
153
+ if (mode === 'week') {
154
+ const ws = startOfWeek(anchor, weekStartsOn);
155
+ return Array.from({ length: 7 }, (_, i) => addDaysLocal(ws, i));
325
156
  }
326
- const compute = () => {
327
- const now = new Date();
328
- const h = now.getHours();
329
- const m = now.getMinutes();
330
- const totalHours = dayEndHour - dayStartHour + 1;
331
- if (h < dayStartHour || h > dayEndHour) {
332
- currTimePercent = null;
333
- return;
334
- }
335
- currTimePercent = ((h - dayStartHour + m / 60) / totalHours) * 100;
336
- };
337
- compute();
338
- // 剩余秒数到下一分钟
339
- const now = new Date();
340
- const msToNextMin = (60 - now.getSeconds()) * 1000 - now.getMilliseconds();
341
- let timer: ReturnType<typeof setTimeout>;
342
- let interval: ReturnType<typeof setInterval>;
343
- timer = setTimeout(() => {
344
- compute();
345
- interval = setInterval(compute, 60_000);
346
- }, msToNextMin);
347
- return () => {
348
- clearTimeout(timer);
349
- clearInterval(interval);
350
- };
351
- });
352
- $effect(() => {
353
- if (!useVirtual || !timelineEl) return;
354
- const el = timelineEl;
355
- let frame = 0;
356
- const onScroll = () => {
357
- if (frame) return;
358
- frame = requestAnimationFrame(() => {
359
- frame = 0;
360
- timelineScrollTop = el.scrollTop;
361
- });
362
- };
363
- el.addEventListener('scroll', onScroll, { passive: true });
364
- timelineScrollTop = el.scrollTop;
365
- return () => {
366
- if (frame) cancelAnimationFrame(frame);
367
- el.removeEventListener('scroll', onScroll);
368
- };
157
+ if (mode === 'range') {
158
+ if (!range) return [anchor];
159
+ const n = Math.max(1, differenceInCalendarDays(range[1], range[0]));
160
+ return Array.from({ length: n }, (_, i) => addDaysLocal(range[0], i));
161
+ }
162
+ return [];
369
163
  });
370
164
 
371
- // --- Intl 格式化 ---
372
- const titleFormatter = $derived(
373
- new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'long' }),
374
- );
375
- const weekdayFormatter = $derived(new Intl.DateTimeFormat(locale, { weekday: 'short' }));
376
- // week 模式标题:本周首日 ~ 末日(同月则只展示一次月份)
377
- const rangeTitleFormatter = $derived(
378
- new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'long', day: 'numeric' }),
379
- );
380
- const dayTitleFormatter = $derived(new Intl.DateTimeFormat(locale, { day: 'numeric' }));
381
- const weekTitle = $derived.by(() => {
382
- const first = cells[0]?.date;
383
- const last = cells[cells.length - 1]?.date;
384
- if (!first || !last) return '';
385
- const startText = rangeTitleFormatter.format(first);
386
- const endText =
387
- first.getMonth() === last.getMonth() && first.getFullYear() === last.getFullYear()
388
- ? dayTitleFormatter.format(last)
389
- : rangeTitleFormatter.format(last);
390
- return `${startText} – ${endText}`;
391
- });
392
- // day 模式标题:完整日期(含星期)
393
- const dayTitleFullFormatter = $derived(
394
- new Intl.DateTimeFormat(locale, {
395
- year: 'numeric',
396
- month: 'long',
397
- day: 'numeric',
398
- weekday: 'long',
399
- }),
400
- );
401
- // 时间轴每行的小时标签(如 09:00)
402
- const hourLabelFormatter = $derived(
403
- new Intl.DateTimeFormat(locale, { hour: '2-digit', minute: '2-digit', hour12: false }),
404
- );
405
- const title = $derived(
406
- mode === 'week'
407
- ? weekTitle
408
- : mode === 'day'
409
- ? dayTitleFullFormatter.format(currentValue)
410
- : titleFormatter.format(currentValue),
411
- );
165
+ const isTimeGrid = $derived(mode === 'day' || mode === 'week' || mode === 'range');
166
+ // week/range 共用 weekCalendar 结构(同 class 前缀 cd-calendar-week);day 用 dayCalendar 结构。
167
+ const isWeekLike = $derived(mode === 'week' || mode === 'range');
412
168
 
413
- // 星期表头:用首周 7 格的 date 生成名称(顺序与 weekStartsOn 一致)
414
- const weekdayOrderList = $derived(weekdayOrder(weekStartsOn));
415
- const weekdayNames = $derived(
416
- cells.slice(0, 7).map((c) => weekdayFormatter.format(c.date)),
417
- );
169
+ // 全天/跨天事件桶。
170
+ const allDayBucket = $derived(allDayEventMap(events));
418
171
 
419
- // --- roving 焦点目标(纯派生,红线 #2)---
420
- // 网格里唯一获得 tabindex=0 的「活动格」:优先用户已聚焦日期,否则选中日/今天/锚点。
421
- // focusedDate 不在当前网格(跨月翻页后),仍以 focusedDate 为准——它就是要落焦的格。
422
- const activeDate = $derived.by<Date>(() => {
423
- if (focusedDate) return focusedDate;
424
- if (selectionMode === 'single' && currentSelected) return currentSelected;
425
- const inGridToday = cells.some((c) => isSameDay(c.date, today));
426
- if (inGridToday) return today;
427
- // 月视图回退到当月 1 号所在的格,周/日回退到锚点
428
- return mode === 'month' ? startOfDay(new Date(currentValue.getFullYear(), currentValue.getMonth(), 1)) : currentValue;
172
+ const eventByKey = $derived.by(() => {
173
+ const m = new Map<CalendarEvent['key'], CalendarEvent>();
174
+ for (const e of events) m.set(e.key, e);
175
+ return m;
429
176
  });
430
- function isActiveCell(date: Date): boolean {
431
- return isSameDay(date, activeDate);
432
- }
433
-
434
- // --- 状态写入:仅非受控写 inner,受控只回调 (红线 #1) ---
435
- function setAnchor(next: Date) {
436
- if (!isValueControlled) innerValue = next;
437
- onChange?.({ value: next });
177
+ function origEvent(key: CalendarEvent['key'], children: unknown): CalendarEvent {
178
+ return eventByKey.get(key) ?? ({ key, children } as CalendarEvent);
438
179
  }
439
180
 
440
- function step(delta: number): Date {
441
- if (mode === 'day') return addDays(currentValue, delta);
442
- if (mode === 'week') return addWeeks(currentValue, delta);
443
- return addMonths(currentValue, delta);
444
- }
445
- // 切月/年/今日:把焦点带到新锚点并 polite 播报其可读全文(formatter 仅依赖 locale,可安全用于任意日期)。
446
- function announceFocusDate(date: Date) {
447
- announcer.announce(dayTitleFullFormatter.format(date));
448
- }
449
- function goPrev() {
450
- const next = step(-1);
451
- setAnchor(next);
452
- announceFocusDate(next);
453
- }
454
- function goNext() {
455
- const next = step(1);
456
- setAnchor(next);
457
- announceFocusDate(next);
458
- }
459
- function goToday() {
460
- const next = new Date();
461
- setAnchor(next);
462
- announceFocusDate(next);
463
- }
181
+ // --- 时间轴视图:顶部跨天/全天条布局 ---
182
+ const spanEvents = $derived.by<PositionedSpanEvent[]>(() => {
183
+ if (!isTimeGrid) return [];
184
+ if (mode === 'week') return parseWeekSpanEvents(allDayBucket, startOfWeek(anchor, weekStartsOn), weekStartsOn);
185
+ if (mode === 'range' && range) return parseSpanEvents(allDayBucket, range[0], range[1]);
186
+ if (mode === 'day') return parseSpanEvents(allDayBucket, anchor, addDaysLocal(anchor, 1));
187
+ return [];
188
+ });
189
+ const allDayRows = $derived(isTimeGrid ? Math.max(1, calcRowHeight(spanEvents)) : 0);
464
190
 
465
- function setSelected(date: Date) {
466
- if (!isSelectedControlled) innerSelected = date;
467
- onSelect?.({ date });
468
- // 选中日期 polite 播报可读全文。
469
- announcer.announce(
470
- loc().t('Calendar.selectedDateAnnounce', { date: dayTitleFullFormatter.format(date) }),
471
- );
191
+ const dayBucket = $derived(parseEvents(events).day);
192
+ function positionedDay(date: Date): PositionedDayEvent[] {
193
+ return getDailyEvents(dayBucket, date).day;
472
194
  }
473
195
 
474
- function setRange(next: RangeValue) {
475
- if (!isRangeControlled) innerRange = next;
476
- onRangeChange?.({ range: next });
477
- }
196
+ // --- month 视图 ---
197
+ const monthWeeks = $derived.by(() => {
198
+ if (mode !== 'month') return [];
199
+ const cells = getMonthGrid(anchor, weekStartsOn);
200
+ const out: (typeof cells)[] = [];
201
+ for (let i = 0; i < cells.length; i += 7) out.push(cells.slice(i, i + 7));
202
+ return out;
203
+ });
204
+ const monthEventMap = $derived(mode === 'month' ? getMonthEvents(events, anchor, weekStartsOn) : {});
205
+ // 对齐 Semi calcItemLimit = ceil((cellHeight - 60) / 24),按周行实测高度动态算。
206
+ let monthWeekH = $state(0);
207
+ const MONTH_CONTENT_PADDING = 60;
208
+ const MONTH_CONTENT_HEIGHT = 24;
209
+ const monthItemLimit = $derived(
210
+ monthWeekH > 0 ? Math.max(0, Math.ceil((monthWeekH - MONTH_CONTENT_PADDING) / MONTH_CONTENT_HEIGHT)) : 2,
211
+ );
478
212
 
479
- function isDisabled(date: Date): boolean {
480
- return disabledDate?.(date) ?? false;
481
- }
213
+ // 月视图星期表头(用第一周的日期生成本地化星期名)。
214
+ const monthHeaderWeekdays = $derived.by<{ name: string; weekend: boolean }[]>(() => {
215
+ const ws = startOfWeek(anchor, weekStartsOn);
216
+ return weekdayOrder(weekStartsOn).map((_, i) => {
217
+ const d = addDaysLocal(ws, i);
218
+ return { name: weekdayName(d), weekend: isWeekend(d) };
219
+ });
220
+ });
482
221
 
483
- // range 选择:点第一天设起、第二天设止(排序后提交)
484
- function onRangeActivate(date: Date) {
485
- const day = startOfDay(date);
486
- if (phase === 'start') {
487
- pendingStart = day;
488
- previewEnd = day;
489
- phase = 'end';
490
- return;
222
+ // --- 头部标题(仅 aria-label 用;Semi 无标题) ---
223
+ const title = $derived.by(() => {
224
+ if (mode === 'day') return fullDateFmt.format(anchor);
225
+ if (mode === 'week') {
226
+ const cols = columnDates;
227
+ const first = cols[0];
228
+ const last = cols[cols.length - 1];
229
+ return first && last ? `${monthShortFmt.format(first)} ${dayString(first)} – ${dayString(last)}` : '';
491
230
  }
492
- const a = pendingStart ?? day;
493
- const next: RangeValue =
494
- a.getTime() <= day.getTime() ? [a, day] : [day, a];
495
- setRange(next);
496
- phase = 'start';
497
- pendingStart = null;
498
- previewEnd = null;
499
- }
231
+ if (mode === 'range' && range) return `${titleFmt.format(range[0])}`;
232
+ return titleFmt.format(anchor);
233
+ });
500
234
 
501
- function onCellActivate(date: Date) {
502
- if (isDisabled(date)) return;
503
- onDateClick?.({ date });
504
- if (selectionMode === 'range') {
505
- onRangeActivate(date);
506
- } else {
507
- setSelected(date);
508
- }
509
- }
235
+ // 头部月份标签(对齐 Semi renderHeader 的 month = format(value,'LLL'))。
236
+ const monthLabel = $derived(monthShortFmt.format(anchor));
510
237
 
511
- function onCellHover(date: Date) {
512
- if (selectionMode === 'range' && phase === 'end' && !isDisabled(date)) {
513
- previewEnd = startOfDay(date);
238
+ // --- 时间列(对齐 Semi timeCol:Array(24)=0..23,第 0 项文案清空)---
239
+ const HOURS = Array.from({ length: 24 }, (_, h) => h);
240
+ function hourLabel(h: number): string {
241
+ if (renderTimeDisplay) {
242
+ const v = renderTimeDisplay(h);
243
+ return typeof v === 'string' ? v : String(v ?? '');
514
244
  }
245
+ if (h === 0) return '';
246
+ const isAM = h < 12;
247
+ const time = h === 12 ? 12 : isAM ? h : h - 12;
248
+ return loc().t(isAM ? 'Calendar.AM' : 'Calendar.PM', { time });
515
249
  }
516
250
 
517
- const NAV_KEYS = new Set<string>([
518
- 'ArrowLeft',
519
- 'ArrowRight',
520
- 'ArrowUp',
521
- 'ArrowDown',
522
- 'PageUp',
523
- 'PageDown',
524
- 'Home',
525
- 'End',
526
- ]);
527
-
528
- // 将 DOM 焦点落到 activeDate 对应的格(重渲染后调用,命令式 + 无监听需 cleanup)
529
- async function focusActiveCell() {
530
- await tick();
531
- const host = rootEl ?? panelEl;
532
- if (!host) return;
533
- const el = host.querySelector<HTMLElement>('.cd-calendar__cell--active');
534
- el?.focus();
251
+ // --- 点击回调 ---
252
+ function emitTimeClick(colDate: Date, halfIndex: number, e: Event) {
253
+ const hour = Math.floor(halfIndex / 2);
254
+ const minute = halfIndex % 2 === 0 ? 0 : 30;
255
+ const d = new Date(colDate.getFullYear(), colDate.getMonth(), colDate.getDate(), hour, minute, 0, 0);
256
+ onClick?.(e, d);
535
257
  }
536
-
537
- // 网格级 roving 键盘导航(WAI-ARIA grid 模式,红线 #2 派生用纯 gridFocusMove)
538
- function onGridKeydown(e: KeyboardEvent) {
539
- const key = e.key;
540
- if (key === 'Enter' || key === ' ') {
541
- e.preventDefault();
542
- onCellActivate(activeDate);
543
- return;
544
- }
545
- // Shift+PageUp/Down:切年(gridFocusMove 不含年级,组件层 ±12 月)
546
- if (e.shiftKey && (key === 'PageUp' || key === 'PageDown')) {
547
- e.preventDefault();
548
- const nextYearDate = addMonths(activeDate, key === 'PageUp' ? -12 : 12);
549
- focusedDate = nextYearDate;
550
- const stillVisible = cells.some((c) => isSameDay(c.date, nextYearDate));
551
- if (!stillVisible) setAnchor(nextYearDate);
552
- pendingFocus = true;
553
- announceFocusDate(nextYearDate);
554
- return;
555
- }
556
- if (!NAV_KEYS.has(key)) return;
557
- e.preventDefault();
558
- const next = gridFocusMove(
559
- activeDate,
560
- key as GridFocusKey,
561
- mode === 'week' ? 'week' : 'month',
562
- weekStartsOn,
563
- );
564
- if (!next) return;
565
- focusedDate = next;
566
- // 跨出当前展示月/周:锚点随动,触发网格重渲染(受控锚点只回调,红线 #1)
567
- const stillVisible = cells.some((c) => isSameDay(c.date, next));
568
- if (!stillVisible) setAnchor(next);
569
- pendingFocus = true;
570
- announceFocusDate(next);
258
+ function slotLabel(colDate: Date, halfIndex: number): string {
259
+ const hour = Math.floor(halfIndex / 2);
260
+ const minute = halfIndex % 2 === 0 ? 0 : 30;
261
+ const d = new Date(colDate.getFullYear(), colDate.getMonth(), colDate.getDate(), hour, minute);
262
+ return `${fullDateFmt.format(colDate)} ${slotTimeFmt.format(d)}`;
263
+ }
264
+ function emitDayClick(d: Date, e: Event) {
265
+ onClick?.(e, new Date(d.getFullYear(), d.getMonth(), d.getDate()));
571
266
  }
572
267
 
573
- // 焦点落格:activeDate / 网格内容变化后,若有待定焦点则把 DOM 焦点移到活动格
574
- $effect(() => {
575
- // 依赖 activeDate + cells 确保翻页重渲染后再落焦
576
- void activeDate;
577
- void cells;
578
- if (pendingFocus) {
579
- pendingFocus = false;
580
- void focusActiveCell();
581
- }
582
- });
583
-
584
- // --- range 区间端点 / 区间内判定(纯派生,红线 #2) ---
585
- const rangeStart = $derived(phase === 'end' ? pendingStart : (currentRange?.[0] ?? null));
586
- const rangeEnd = $derived(phase === 'end' ? previewEnd : (currentRange?.[1] ?? null));
587
- const span = $derived.by<[number, number] | null>(() => {
588
- if (!rangeStart || !rangeEnd) return null;
589
- const ta = rangeStart.getTime();
590
- const tb = rangeEnd.getTime();
591
- return ta <= tb ? [ta, tb] : [tb, ta];
592
- });
593
-
594
- function isRangeEdge(date: Date): boolean {
595
- if (selectionMode !== 'range') return false;
596
- return isSameDay(date, rangeStart) || isSameDay(date, rangeEnd);
268
+ function childrenIsSnippet(c: unknown): c is Snippet {
269
+ return typeof c === 'function';
597
270
  }
598
- function isInRange(date: Date): boolean {
599
- if (selectionMode !== 'range' || !span) return false;
600
- const t = startOfDay(date).getTime();
601
- return t > span[0] && t < span[1];
271
+ function childrenText(c: unknown): string {
272
+ return typeof c === 'string' ? c : '';
602
273
  }
603
274
 
604
- function onMore(date: Date, total: CalendarEvent[]) {
605
- onMoreClick?.({ date, events: total });
275
+ // 事件绝对定位样式(时间轴列内,对齐 Semi DayCol renderEvents)。
276
+ function timedStyle(ev: PositionedDayEvent, h: number): string {
277
+ const top = ev.startPos * h;
278
+ const rawH = (ev.endPos - ev.startPos) * h;
279
+ const eh = Math.max(minEventHeight, rawH);
280
+ const left = typeof ev.left === 'number' ? `${ev.left}px` : ev.left;
281
+ return `top:${top}px;height:${eh}px;left:${left};`;
606
282
  }
607
-
608
- // 事件块激活(点击或 Enter/Space)。阻止冒泡避免连带触发日格选择。
609
- function activateEvent(ev: CalendarEvent, e: Event) {
610
- e.stopPropagation();
611
- if (ev.disabled) return;
612
- onEventClick?.({ event: ev, nativeEvent: e });
613
- }
614
- function onEventKeydown(ev: CalendarEvent, e: KeyboardEvent) {
615
- if (e.key === 'Enter' || e.key === ' ') {
616
- e.preventDefault();
617
- activateEvent(ev, e);
618
- }
283
+ // 全天条样式(对齐 Semi renderAllDayEvents:left/width%, top:${topInd}em)。
284
+ function spanStyle(ev: PositionedSpanEvent): string {
285
+ return `left:${ev.leftPos * 100}%;width:${ev.width * 100}%;top:${ev.topInd}em;`;
619
286
  }
620
-
621
- // --- popup 外部点击 / Esc 关闭(红线 #3:open 时绑、cleanup 解绑)---
622
- $effect(() => {
623
- if (!popup || !isOpen || !triggerEl) return;
624
- return useDismiss(triggerEl, {
625
- onDismiss: (reason) => {
626
- setOpen(false);
627
- onClose?.();
628
- // 仅 Esc 归还焦点到 trigger(外部点击焦点应留在点击处)
629
- if (reason === 'esc') {
630
- const btn = triggerEl?.querySelector<HTMLElement>(
631
- '.cd-calendar-popup__trigger, [data-calendar-trigger]',
632
- );
633
- (btn ?? triggerEl)?.focus();
634
- }
635
- },
636
- escape: true,
637
- outsideClick: true,
638
- // 浮层门户到 body,点击浮层内部不算外部
639
- extraTargets: [panelEl],
640
- });
641
- });
642
-
643
- // popup 打开后把焦点落到活动格,关闭后归还 trigger(命令式)
644
- $effect(() => {
645
- if (!popup) return;
646
- if (isOpen) {
647
- pendingFocus = true;
648
- void focusActiveCell();
649
- }
650
- });
651
-
652
- function dayNumber(date: Date): number {
653
- return date.getDate();
287
+ // 月视图跨天条样式(对齐 Semi renderEvents:left/width%, top:${topInd}em)。
288
+ function monthSpanStyle(ev: PositionedSpanEvent): string {
289
+ return `left:${ev.leftPos * 100}%;width:${ev.width * 100}%;top:${ev.topInd}em;`;
654
290
  }
655
291
 
656
- function isWeekendDay(date: Date): boolean {
657
- return markWeekend && weekendDays.includes(date.getDay());
292
+ // 当前时间红线位置(滚动内容内),仅当天列显示。
293
+ const currTimeTop = $derived(showCurrTime ? getPos(now) * scrollContentHeight : 0);
294
+ function isNowColumn(d: Date): boolean {
295
+ return isSameDay(d, now);
658
296
  }
659
297
 
660
- function isTodayDay(date: Date): boolean {
661
- return isSameDay(date, today);
662
- }
298
+ const sizePx = (v: number | string | undefined) =>
299
+ v === undefined ? undefined : typeof v === 'number' ? `${v}px` : v;
663
300
 
664
- function isSelectedDay(date: Date): boolean {
665
- if (selectionMode === 'range') return false;
666
- return isSameDay(date, currentSelected);
301
+ interface MonthCellEvent {
302
+ key: CalendarEvent['key'];
303
+ children: unknown;
304
+ }
305
+ // 某周内 topInd < limit 的跨天条(对齐 Semi renderEvents)。
306
+ function monthWeekSpans(weekIndex: number): PositionedSpanEvent[] {
307
+ const week = monthEventMap[weekIndex];
308
+ if (!week) return [];
309
+ return week.display.filter((s) => s.topInd < monthItemLimit);
310
+ }
311
+ function monthCellOverflow(
312
+ weekIndex: number,
313
+ colIndex: number,
314
+ ): { remaining: number; all: MonthCellEvent[] } {
315
+ const week = monthEventMap[weekIndex];
316
+ if (!week) return { remaining: 0, all: [] };
317
+ const col: MonthCellEvent[] = (week.day[colIndex] ?? [])
318
+ .filter((x) => x != null)
319
+ .map((x) => ({ key: x.key, children: x.children }));
320
+ const remaining = Math.max(0, col.length - monthItemLimit);
321
+ return { remaining, all: col };
667
322
  }
668
323
  </script>
669
324
 
670
- {#snippet calendarBody()}
671
- {#if header}
672
- {@render header()}
325
+ {#snippet eventContent(ev: CalendarEvent)}
326
+ {#if childrenIsSnippet(ev.children)}
327
+ {@render (ev.children as Snippet)()}
673
328
  {:else}
674
- <div class="cd-calendar__toolbar">
675
- <button
676
- type="button"
677
- class="cd-calendar__nav"
678
- aria-label={loc().t('Calendar.prev')}
679
- onclick={goPrev}
680
- >
681
- <svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false">
682
- <path
683
- fill="none"
684
- stroke="currentColor"
685
- stroke-width="2"
686
- stroke-linecap="round"
687
- stroke-linejoin="round"
688
- d="M10 3L5 8l5 5"
689
- />
690
- </svg>
691
- </button>
692
- <button type="button" class="cd-calendar__today" onclick={goToday}>{loc().t('Calendar.today')}</button>
693
- <div class="cd-calendar__title">{renderDateDisplay ? renderDateDisplay(currentValue) : title}</div>
694
- <button
695
- type="button"
696
- class="cd-calendar__nav"
697
- aria-label={loc().t('Calendar.next')}
698
- onclick={goNext}
699
- >
700
- <svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false">
701
- <path
702
- fill="none"
703
- stroke="currentColor"
704
- stroke-width="2"
705
- stroke-linecap="round"
706
- stroke-linejoin="round"
707
- d="M6 3l5 5-5 5"
708
- />
709
- </svg>
710
- </button>
711
- </div>
329
+ {childrenText(ev.children)}
712
330
  {/if}
331
+ {/snippet}
713
332
 
714
- {#if mode === 'day'}
715
- <div class="cd-calendar__timeline" aria-label={ariaLabel ?? title}>
716
- {#if dayTimeline.allDay.length > 0}
717
- <div class="cd-calendar__allday">
718
- <div class="cd-calendar__allday-label">{loc().t('Calendar.allDay')}</div>
719
- {#if allDayEventsRender}
720
- {@render allDayEventsRender(dayTimeline.allDay)?.()}
721
- {:else}
722
- <div class="cd-calendar__allday-events">
723
- {#each dayTimeline.allDay as ev (ev.key)}
724
- {#if event}
725
- {@render event({ event: ev })}
726
- {:else}
727
- <div
728
- class="cd-calendar__event"
729
- class:cd-calendar__event--disabled={ev.disabled}
730
- style:--cd-calendar-event-accent={ev.color ?? 'var(--cd-calendar-event-default-bg)'}
731
- role="button"
732
- tabindex={ev.disabled ? -1 : 0}
733
- aria-disabled={ev.disabled || undefined}
734
- aria-label={ev.title}
735
- title={ev.title}
736
- onclick={(e) => activateEvent(ev, e)}
737
- onkeydown={(e) => onEventKeydown(ev, e)}
738
- >
739
- <span class="cd-calendar__event-bar" aria-hidden="true"></span>
740
- <span class="cd-calendar__event-title">{ev.title}</span>
741
- </div>
742
- {/if}
743
- {/each}
744
- </div>
745
- {/if}
746
- </div>
333
+ <!-- 时间列(对齐 Semi TimeCol:ul.calendar-time-items > li.calendar-time-item > span) -->
334
+ {#snippet timeCol()}
335
+ <div class="cd-calendar-time cd-calendar-{isWeekLike ? 'week' : 'day'}-sticky-left" aria-hidden="true">
336
+ <ul class="cd-calendar-time-items">
337
+ {#each HOURS as h (h)}
338
+ <li class="cd-calendar-time-item"><span>{hourLabel(h)}</span></li>
339
+ {/each}
340
+ </ul>
341
+ </div>
342
+ {/snippet}
343
+
344
+ <!-- 单日列(对齐 Semi DayCol:div.grid > div.grid-content > (curr + ul.grid-skeleton(50 li) + dateGridRender + ul.event-items)) -->
345
+ {#snippet dayCol(colDate: Date, showCurr: boolean, weekend: boolean)}
346
+ {@const positioned = positionedDay(colDate)}
347
+ <div class="cd-calendar-grid" role="presentation">
348
+ <div class="cd-calendar-grid-content" role="gridcell" aria-label={fullDateFmt.format(colDate)}>
349
+ {#if showCurr && showCurrTime && isNowColumn(colDate)}
350
+ <div class="cd-calendar-grid-curr-circle" style:top={`${currTimeTop}px`}></div>
351
+ <div class="cd-calendar-grid-curr-line" style:top={`${currTimeTop}px`}></div>
747
352
  {/if}
748
- <div
749
- class="cd-calendar__hours"
750
- class:cd-calendar__hours--virtual={useVirtual}
751
- role="list"
752
- bind:this={timelineEl}
753
- style:max-block-size={useVirtual ? `${timelineViewportHeight}px` : undefined}
754
- style:position="relative"
755
- >
756
- <!-- showCurrTime 红线:绝对定位,top% 由派生纯函数算出(红线 #2 -->
757
- {#if showCurrTime && currTimePercent !== null}
758
- <div
759
- class="cd-calendar__curr-time"
760
- aria-hidden="true"
761
- style:top={`${currTimePercent}%`}
762
- ></div>
763
- {/if}
764
- {#if useVirtual}
765
- <!-- 撑高占位 + 上空白 padding,仅渲染视口行(复用 core fixedRange)-->
766
- <div class="cd-calendar__hours-spacer" style:block-size={`${totalHeight}px`}>
767
- <div style:transform={`translateY(${padTop}px)`}>
768
- {#each visibleSlots as slot (slot.hour)}
769
- {@const hourEvents = dayTimeline.byHour.get(slot.hour) ?? []}
770
- <div class="cd-calendar__hour" role="listitem" style:min-block-size={`${ROW_H}px`}>
771
- <div class="cd-calendar__hour-label" aria-hidden="true">
772
- {renderTimeDisplay ? renderTimeDisplay(slot.hour) : hourLabelFormatter.format(slot.date)}
773
- </div>
774
- <div class="cd-calendar__hour-slot">
775
- {#each hourEvents as ev (ev.key)}
776
- {#if event}
777
- {@render event({ event: ev })}
778
- {:else}
779
- <div
780
- class="cd-calendar__event cd-calendar__event--timed"
781
- class:cd-calendar__event--disabled={ev.disabled}
782
- style:--cd-calendar-event-accent={ev.color ?? 'var(--cd-calendar-event-default-bg)'}
783
- style:min-block-size={minEventHeight ? `${minEventHeight}px` : undefined}
784
- role="button"
785
- tabindex={ev.disabled ? -1 : 0}
786
- aria-disabled={ev.disabled || undefined}
787
- aria-label={`${hourLabelFormatter.format(ev.start)} ${ev.title}`}
788
- title={ev.title}
789
- onclick={(e) => activateEvent(ev, e)}
790
- onkeydown={(e) => onEventKeydown(ev, e)}
791
- >
792
- <span class="cd-calendar__event-bar" aria-hidden="true"></span>
793
- <span class="cd-calendar__event-time">{hourLabelFormatter.format(ev.start)}</span>
794
- <span class="cd-calendar__event-title">{ev.title}</span>
795
- </div>
796
- {/if}
797
- {/each}
798
- </div>
799
- </div>
800
- {/each}
801
- </div>
802
- </div>
803
- {:else}
804
- {#each hourSlots as slot (slot.hour)}
805
- {@const hourEvents = dayTimeline.byHour.get(slot.hour) ?? []}
806
- <div class="cd-calendar__hour" role="listitem">
807
- <div class="cd-calendar__hour-label" aria-hidden="true">
808
- {renderTimeDisplay ? renderTimeDisplay(slot.hour) : hourLabelFormatter.format(slot.date)}
809
- </div>
810
- <div class="cd-calendar__hour-slot">
811
- {#each hourEvents as ev (ev.key)}
812
- {#if event}
813
- {@render event({ event: ev })}
814
- {:else}
815
- <div
816
- class="cd-calendar__event cd-calendar__event--timed"
817
- class:cd-calendar__event--disabled={ev.disabled}
818
- style:--cd-calendar-event-accent={ev.color ?? 'var(--cd-calendar-event-default-bg)'}
819
- style:min-block-size={minEventHeight ? `${minEventHeight}px` : undefined}
820
- title={ev.title}
821
- >
822
- <span class="cd-calendar__event-bar" aria-hidden="true"></span>
823
- <span class="cd-calendar__event-time">{hourLabelFormatter.format(ev.start)}</span>
824
- <span class="cd-calendar__event-title">{ev.title}</span>
825
- </div>
826
- {/if}
827
- {/each}
828
- </div>
829
- </div>
353
+ <!-- 对齐 Semi dayCol renderGrid:25×2 个空 <li data-time onClick>,整点 li 有 row-line class。
354
+ 点击绑 li 本身(无 button 子元素);li 加 role/tabindex/keydown 保留键盘可达。 -->
355
+ <!-- svelte-ignore a11y_no_noninteractive_element_to_interactive_role -->
356
+ <ul class="cd-calendar-grid-skeleton" class:cd-calendar-weekend={weekend} role="row">
357
+ {#each { length: 25 } as _, item (item)}
358
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
359
+ <li
360
+ class="cd-calendar-grid-skeleton-row-line"
361
+ data-time={`${String(item).padStart(2, '0')}:00:00`}
362
+ role="button"
363
+ tabindex="-1"
364
+ aria-label={slotLabel(colDate, item * 2)}
365
+ onclick={(e) => emitTimeClick(colDate, item * 2, e)}
366
+ onkeydown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); emitTimeClick(colDate, item * 2, e); } }}
367
+ ></li>
368
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
369
+ <li
370
+ data-time={`${String(item).padStart(2, '0')}:30:00`}
371
+ role="button"
372
+ tabindex="-1"
373
+ aria-label={slotLabel(colDate, item * 2 + 1)}
374
+ onclick={(e) => emitTimeClick(colDate, item * 2 + 1, e)}
375
+ onkeydown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); emitTimeClick(colDate, item * 2 + 1, e); } }}
376
+ ></li>
377
+ {/each}
378
+ </ul>
379
+ {#if dateGridRender}
380
+ {@const extra = dateGridRender(colDate.toString(), colDate)}
381
+ {#if extra}{@render extra()}{/if}
382
+ {/if}
383
+ <ul class="cd-calendar-event-items">
384
+ {#each positioned as ev (ev.key)}
385
+ <li class="cd-calendar-event-item cd-calendar-event-day" style={timedStyle(ev, scrollContentHeight)}>
386
+ {@render eventContent(origEvent(ev.key, ev.children))}
387
+ </li>
388
+ {/each}
389
+ </ul>
390
+ </div>
391
+ </div>
392
+ {/snippet}
393
+
394
+ <!-- 全天区(对齐 Semi renderAllDay:div.all-day > ul.tag.all-day-tag.sticky-left + div.all-day-content > [skeleton] + ul.event-items) -->
395
+ {#snippet allDayRow()}
396
+ <div class="cd-calendar-all-day" style:height={isWeekLike ? `${allDayRows}em` : undefined}>
397
+ <ul class="cd-calendar-tag cd-calendar-all-day-tag cd-calendar-{isWeekLike ? 'week' : 'day'}-sticky-left">
398
+ <span>{loc().t('Calendar.allDay')}</span>
399
+ </ul>
400
+ <!-- 对齐 Semi:week/range 全天区 content 有 calendar-content class,day 只有 all-day-content -->
401
+ <div class="cd-calendar-all-day-content" class:cd-calendar-content={isWeekLike} role="gridcell">
402
+ {#if isWeekLike}
403
+ <!-- week/range 全天区有列骨架(对齐 Semi all-day-skeleton) -->
404
+ <ul class="cd-calendar-all-day-skeleton">
405
+ {#each columnDates as d (d.getTime())}
406
+ <li class:cd-calendar-weekend={markWeekend && isWeekend(d)}></li>
830
407
  {/each}
831
- {/if}
408
+ </ul>
409
+ {/if}
410
+ {#if allDayEventsRender}
411
+ {@const rendered = allDayEventsRender(allDayBucket)}
412
+ {#if rendered}{@render rendered()}{/if}
413
+ {:else}
414
+ <ul class="cd-calendar-event-items">
415
+ {#each spanEvents as ev (ev.key)}
416
+ <li class="cd-calendar-event-item cd-calendar-event-allday" style={spanStyle(ev)}>
417
+ {@render eventContent(origEvent(ev.key, ev.children))}
418
+ </li>
419
+ {/each}
420
+ </ul>
421
+ {/if}
422
+ </div>
423
+ </div>
424
+ {/snippet}
425
+
426
+ {#if mode === 'day'}
427
+ <!-- ===== day 视图(对齐 Semi dayCalendar:根无 role)===== -->
428
+ <div
429
+ class="cd-calendar-day"
430
+ bind:this={rootEl}
431
+ style:height={sizePx(height)}
432
+ style:width={sizePx(width)}
433
+ >
434
+ <div class="cd-calendar-day-sticky-top">
435
+ {#if header}{@render header()}{/if}
436
+ {@render allDayRow()}
437
+ </div>
438
+ <div class="cd-calendar-day-scroll-wrapper">
439
+ <div class="cd-calendar-day-scroll" bind:clientHeight={scrollContentHeight}>
440
+ {@render timeCol()}
441
+ {@render dayCol(anchor, true, markWeekend && isWeekend(anchor))}
832
442
  </div>
833
443
  </div>
834
- {:else}
835
- <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
444
+ </div>
445
+ {:else if isWeekLike}
446
+ <!-- ===== week / range 视图(对齐 Semi weekCalendar / rangeCalendar:根无 role)===== -->
836
447
  <div
837
- class="cd-calendar__grid"
838
- role="grid"
839
- aria-label={ariaLabel ?? title}
840
- tabindex="-1"
841
- onkeydown={onGridKeydown}
448
+ class="cd-calendar-week"
449
+ bind:this={rootEl}
450
+ style:height={sizePx(height)}
451
+ style:width={sizePx(width)}
452
+ style:--cd-calendar-col-count={columnDates.length}
842
453
  >
843
- <div class="cd-calendar__row cd-calendar__row--head" role="row">
844
- {#each weekdayNames as name, i (weekdayOrderList[i])}
845
- {@const weekend = markWeekend && weekendDays.includes(weekdayOrderList[i] as number)}
846
- <div
847
- class="cd-calendar__weekday"
848
- class:cd-calendar__weekday--weekend={weekend}
849
- role="columnheader"
850
- >
851
- {name}
454
+ <div class="cd-calendar-week-sticky-top">
455
+ {#if header}{@render header()}{/if}
456
+ <!-- 日期表头(对齐 Semi weekCalendar.renderHeader:week-header role,li role;grid 有 role=gridcell) -->
457
+ <div class="cd-calendar-week-header">
458
+ <ul class="cd-calendar-tag cd-calendar-week-tag cd-calendar-week-sticky-left"><span>{monthLabel}</span></ul>
459
+ <div class="cd-calendar-week-grid" role="gridcell">
460
+ <ul class="cd-calendar-week-grid-row">
461
+ {#each columnDates as d (d.getTime())}
462
+ <li
463
+ class:cd-calendar-today={isSameDay(d, now)}
464
+ class:cd-calendar-weekend={markWeekend && isWeekend(d)}
465
+ >
466
+ {#if renderDateDisplay}
467
+ {@render renderDateDisplay(d)}
468
+ {:else}
469
+ <span class="cd-calendar-today-date">{dayString(d)}</span>
470
+ <span>{weekdayName(d)}</span>
471
+ {/if}
472
+ </li>
473
+ {/each}
474
+ </ul>
852
475
  </div>
853
- {/each}
476
+ </div>
477
+ {@render allDayRow()}
854
478
  </div>
855
-
856
- {#each weeks as week, wi (wi)}
857
- <div class="cd-calendar__row" role="row">
858
- {#each week as cell (dayKey(cell.date))}
859
- {@const date = cell.date}
860
- {@const outside = !cell.inMonth}
861
- {@const disabled = isDisabled(date)}
862
- {@const isToday = isTodayDay(date)}
863
- {@const selected = isSelectedDay(date)}
864
- {@const weekend = isWeekendDay(date)}
865
- {@const past = isPastDay(date, today)}
866
- {@const rangeEdgeCell = isRangeEdge(date)}
867
- {@const inRangeCell = isInRange(date)}
868
- {@const active = isActiveCell(date)}
869
- {@const dayData = dayMap.get(dayKey(date))}
870
- {@const visible = dayData?.visible ?? []}
871
- {@const total = dayData?.total ?? []}
872
- {@const overflow = dayData?.overflow ?? 0}
873
- <!-- 键盘交互由网格容器统一处理(roving + Enter/Space),格本身只响应点击 -->
874
- <!-- svelte-ignore a11y_click_events_have_key_events -->
875
- <div
876
- class="cd-calendar__cell"
877
- class:cd-calendar__cell--week={mode === 'week'}
878
- class:cd-calendar__cell--today={isToday}
879
- class:cd-calendar__cell--selected={selected}
880
- class:cd-calendar__cell--range-edge={rangeEdgeCell}
881
- class:cd-calendar__cell--in-range={inRangeCell}
882
- class:cd-calendar__cell--outside={outside}
883
- class:cd-calendar__cell--weekend={weekend}
884
- class:cd-calendar__cell--disabled={disabled}
885
- class:cd-calendar__cell--past={past}
886
- class:cd-calendar__cell--active={active}
887
- role="gridcell"
888
- tabindex={disabled ? undefined : active ? 0 : -1}
889
- aria-selected={selected || rangeEdgeCell || undefined}
890
- aria-disabled={disabled || undefined}
891
- aria-current={isToday ? 'date' : undefined}
892
- onclick={() => onCellActivate(date)}
893
- onpointerenter={() => onCellHover(date)}
894
- >
895
- {#if dateCell}
896
- {@render dateCell({ date, events: total, isToday, isOutside: outside, disabled })}
897
- {:else}
898
- <div class="cd-calendar__date">{dayNumber(date)}</div>
899
- {#if dateGridRender}
900
- {@const extraSnippet = dateGridRender(dayKey(date), date)}
901
- {#if extraSnippet}{@render extraSnippet()}{/if}
902
- {/if}
903
- <div class="cd-calendar__events">
904
- {#each visible as ev (ev.key)}
905
- {#if event}
906
- {@render event({ event: ev })}
479
+ <div class="cd-calendar-week-scroll-wrapper">
480
+ <div class="cd-calendar-week-scroll" bind:clientHeight={scrollContentHeight}>
481
+ {@render timeCol()}
482
+ {#each columnDates as d (d.getTime())}
483
+ {@render dayCol(d, true, markWeekend && isWeekend(d))}
484
+ {/each}
485
+ </div>
486
+ </div>
487
+ </div>
488
+ {:else}
489
+ <!-- ===== month 视图(对齐 Semi monthCalendar)===== -->
490
+ <div class="cd-calendar-month" role="grid" aria-label={title} style:height={sizePx(height)} style:width={sizePx(width)}>
491
+ <div class="cd-calendar-month-sticky-top" role="presentation">
492
+ {#if header}{@render header()}{/if}
493
+ <!-- 星期表头(对齐 Semi renderHeader:month-header > grid > grid-row li) -->
494
+ <div class="cd-calendar-month-header" role="presentation">
495
+ <div class="cd-calendar-month-grid" role="presentation">
496
+ <!-- svelte-ignore a11y_no_noninteractive_element_to_interactive_role -->
497
+ <ul class="cd-calendar-month-grid-row" role="row">
498
+ {#each monthHeaderWeekdays as wd, i (i)}
499
+ <!-- svelte-ignore a11y_no_noninteractive_element_to_interactive_role -->
500
+ <li
501
+ class:cd-calendar-weekend={markWeekend && wd.weekend}
502
+ role="columnheader"
503
+ aria-label={wd.name}
504
+ ><span>{wd.name}</span></li>
505
+ {/each}
506
+ </ul>
507
+ </div>
508
+ </div>
509
+ </div>
510
+ <div class="cd-calendar-month-grid-wrapper" role="presentation">
511
+ <div class="cd-calendar-month-week" role="presentation">
512
+ <ul class="cd-calendar-month-grid-col" role="presentation">
513
+ {#each monthWeeks as week, wi (wi)}
514
+ <!-- 每周行(对齐 Semi renderWeekRow:weekrow role=presentation > skeleton(li) + event-items) -->
515
+ <div class="cd-calendar-month-weekrow" role="presentation" bind:clientHeight={monthWeekH}>
516
+ <!-- svelte-ignore a11y_no_noninteractive_element_to_interactive_role -->
517
+ <ul class="cd-calendar-month-skeleton" role="row">
518
+ {#each week as cell, ci (cell.date.getTime())}
519
+ {@const { remaining, all } = monthCellOverflow(wi, ci)}
520
+ {@const isToday = isSameDay(cell.date, now)}
521
+ {@const sameMonth = isSameMonth(cell.date, anchor)}
522
+ {#snippet monthDate()}
523
+ {#if renderDateDisplay}
524
+ {@render renderDateDisplay(cell.date)}
525
+ {:else if dayString(cell.date) === '1'}
526
+ <!-- 对齐 Semi formatDayString:每月 1 号显示「X月 1」(月份缩写 + today-date) -->
527
+ <span class="cd-calendar-month-date">{monthShortFmt.format(cell.date)}<span class="cd-calendar-today-date">&nbsp;{dayString(cell.date)}</span></span>
528
+ {:else}
529
+ <span class="cd-calendar-month-date"><span class="cd-calendar-today-date">{dayString(cell.date)}</span></span>
530
+ {/if}
531
+ {/snippet}
532
+ {#if remaining > 0}
533
+ <Popover
534
+ trigger="click"
535
+ position="bottom"
536
+ onVisibleChange={(open) => { if (!open) onClose?.(new Event('close')); }}
537
+ >
538
+ <!-- svelte-ignore a11y_no_noninteractive_element_to_interactive_role -->
539
+ <li
540
+ class:cd-calendar-today={isToday}
541
+ class:cd-calendar-weekend={markWeekend && isWeekend(cell.date)}
542
+ class:cd-calendar-month-same={sameMonth}
543
+ role="gridcell"
544
+ aria-label={cell.date.toLocaleDateString()}
545
+ aria-current={isToday ? 'date' : undefined}
546
+ onclick={(e) => emitDayClick(cell.date, e)}
547
+ onkeydown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); emitDayClick(cell.date, e); } }}
548
+ >
549
+ {@render monthDate()}
550
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
551
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
552
+ <div
553
+ class="cd-calendar-month-event-card-wrapper"
554
+ onclick={(e) => { e.stopPropagation(); onMoreClick?.(e, cell.date, remaining); }}
555
+ >{loc().t('Calendar.remaining', { count: remaining })}</div>
556
+ {#if dateGridRender}
557
+ {@const extra = dateGridRender(cell.date.toString(), cell.date)}
558
+ {#if extra}{@render extra()}{/if}
559
+ {/if}
560
+ </li>
561
+ {#snippet content()}
562
+ <div class="cd-calendar-month-event-card">
563
+ <div class="cd-calendar-month-event-card-header">
564
+ <div class="cd-calendar-month-event-card-header-info">
565
+ <div class="cd-calendar-month-event-card-header-info-weekday">{weekdayLongFmt.format(cell.date)}</div>
566
+ <div class="cd-calendar-month-event-card-header-info-date">{dayString(cell.date)}</div>
567
+ </div>
568
+ </div>
569
+ <div class="cd-calendar-month-event-card-body">
570
+ <ul class="cd-calendar-month-event-card-list">
571
+ {#each all as ev (ev.key)}
572
+ <li>{@render eventContent(origEvent(ev.key, ev.children))}</li>
573
+ {/each}
574
+ </ul>
575
+ </div>
576
+ </div>
577
+ {/snippet}
578
+ </Popover>
907
579
  {:else}
908
- <div
909
- class="cd-calendar__event"
910
- class:cd-calendar__event--disabled={ev.disabled}
911
- style:--cd-calendar-event-accent={ev.color ?? 'var(--cd-calendar-event-default-bg)'}
912
- role="button"
913
- tabindex={ev.disabled ? -1 : 0}
914
- aria-disabled={ev.disabled || undefined}
915
- aria-label={ev.title}
916
- title={ev.title}
917
- onclick={(e) => activateEvent(ev, e)}
918
- onkeydown={(e) => onEventKeydown(ev, e)}
580
+ <!-- svelte-ignore a11y_no_noninteractive_element_to_interactive_role -->
581
+ <li
582
+ class:cd-calendar-today={isToday}
583
+ class:cd-calendar-weekend={markWeekend && isWeekend(cell.date)}
584
+ class:cd-calendar-month-same={sameMonth}
585
+ role="gridcell"
586
+ aria-label={cell.date.toLocaleDateString()}
587
+ aria-current={isToday ? 'date' : undefined}
588
+ onclick={(e) => emitDayClick(cell.date, e)}
589
+ onkeydown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); emitDayClick(cell.date, e); } }}
919
590
  >
920
- <span class="cd-calendar__event-bar" aria-hidden="true"></span>
921
- <span class="cd-calendar__event-title">{ev.title}</span>
922
- </div>
591
+ {@render monthDate()}
592
+ {#if dateGridRender}
593
+ {@const extra = dateGridRender(cell.date.toString(), cell.date)}
594
+ {#if extra}{@render extra()}{/if}
595
+ {/if}
596
+ </li>
923
597
  {/if}
924
598
  {/each}
925
- {#if overflow > 0}
926
- <button
927
- type="button"
928
- class="cd-calendar__more"
929
- onclick={(e) => {
930
- e.stopPropagation();
931
- onMore(date, total);
932
- }}
933
- >
934
- {loc().t('Calendar.moreCount', { count: overflow })}
935
- </button>
936
- {/if}
937
- </div>
938
- {/if}
939
- </div>
940
- {/each}
941
- </div>
942
- {/each}
943
- </div>
944
- {/if}
945
- {/snippet}
946
-
947
- {#if popup}
948
- <div class="cd-calendar-popup" bind:this={triggerEl}>
949
- {#if trigger}
950
- {@render trigger({ open: isOpen, toggle: toggleOpen })}
951
- {:else}
952
- <button
953
- type="button"
954
- class="cd-calendar-popup__trigger"
955
- aria-haspopup="dialog"
956
- aria-expanded={isOpen}
957
- onclick={toggleOpen}
958
- >
959
- <span>{title}</span>
960
- <svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true" focusable="false">
961
- <path fill="currentColor" 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" />
962
- </svg>
963
- </button>
964
- {/if}
965
- {#if isOpen}
966
- <div
967
- bind:this={panelEl}
968
- class="cd-calendar cd-calendar--popup"
969
- role="dialog"
970
- aria-label={ariaLabel ?? title}
971
- use:floating={{ trigger: triggerEl, placement, offset: 8, autoAdjust: true, getContainer }}
972
- style:inline-size={width ? (typeof width === 'number' ? `${width}px` : width) : undefined}
973
- style:block-size={height ? (typeof height === 'number' ? `${height}px` : height) : undefined}
974
- >
975
- {@render calendarBody()}
599
+ </ul>
600
+ <ul class="cd-calendar-event-items">
601
+ {#each monthWeekSpans(wi) as ev (ev.key)}
602
+ <li class="cd-calendar-event-item cd-calendar-event-month" style={monthSpanStyle(ev)}>
603
+ {@render eventContent(origEvent(ev.key, ev.children))}
604
+ </li>
605
+ {/each}
606
+ </ul>
607
+ </div>
608
+ {/each}
609
+ </ul>
976
610
  </div>
977
- {/if}
978
- </div>
979
- {:else}
980
- <div
981
- class="cd-calendar"
982
- bind:this={rootEl}
983
- style:inline-size={width ? (typeof width === 'number' ? `${width}px` : width) : undefined}
984
- style:block-size={height ? (typeof height === 'number' ? `${height}px` : height) : undefined}
985
- >
986
- {@render calendarBody()}
611
+ </div>
987
612
  </div>
988
613
  {/if}
989
614
 
990
615
  <style>
991
- .cd-calendar {
992
- display: flex;
993
- flex-direction: column;
994
- gap: var(--cd-spacing-tight);
995
- color: var(--cd-calendar-text);
996
- background: var(--cd-calendar-bg);
997
- border: 1px solid var(--cd-calendar-border);
998
- border-radius: var(--cd-calendar-radius);
999
- font-size: var(--cd-font-size-body);
616
+ /* ============================ 通用(对齐 Semi calendar.scss:根无 border/背景/圆角,仅 ul/li reset)============================ */
617
+ /* ul/li reset 用 :where() 保持 0 特异性,避免压过组件自身 class 的 padding(如 tag padding-right)。 */
618
+ .cd-calendar-day :global(:where(ul, li)),
619
+ .cd-calendar-week :global(:where(ul, li)),
620
+ .cd-calendar-month :global(:where(ul, li)) {
621
+ padding: 0;
622
+ margin: 0;
623
+ list-style: none;
1000
624
  }
1001
625
 
1002
- .cd-calendar__toolbar {
1003
- display: flex;
1004
- align-items: center;
1005
- gap: var(--cd-spacing-tight);
1006
- padding: var(--cd-spacing-tight) var(--cd-spacing-base-tight);
1007
- background: var(--cd-calendar-header-bg);
1008
- border-bottom: 1px solid var(--cd-calendar-border);
1009
- border-start-start-radius: var(--cd-calendar-radius);
1010
- border-start-end-radius: var(--cd-calendar-radius);
626
+ /* sticky 顶部(对齐 Semi -sticky-top) */
627
+ .cd-calendar-day-sticky-top,
628
+ .cd-calendar-week-sticky-top,
629
+ .cd-calendar-month-sticky-top {
630
+ position: sticky;
631
+ inset-block-start: 0;
632
+ inset-inline: 0;
633
+ z-index: var(--cd-calendar-z-stickytop);
634
+ background: var(--cd-calendar-color-sticky-bg);
1011
635
  }
1012
636
 
1013
- .cd-calendar__title {
1014
- flex: 1 1 auto;
1015
- font-weight: 600;
637
+ /* 周末底色(对齐 Semi .calendar-weekend) */
638
+ .cd-calendar-weekend {
639
+ background: var(--cd-calendar-color-weekend-bg);
1016
640
  }
1017
641
 
1018
- .cd-calendar__nav,
1019
- .cd-calendar__today {
1020
- display: inline-flex;
1021
- align-items: center;
1022
- justify-content: center;
1023
- padding: var(--cd-spacing-extra-tight) var(--cd-spacing-tight);
1024
- color: inherit;
1025
- background: transparent;
1026
- border: 1px solid var(--cd-calendar-border);
1027
- border-radius: var(--cd-calendar-radius);
1028
- cursor: pointer;
1029
- font: inherit;
1030
- transition: background-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
642
+ /* 事件容器(对齐 Semi .event-items { pointer-events:none; & > * { auto } .event-day {...} }) */
643
+ .cd-calendar-event-items {
644
+ pointer-events: none;
1031
645
  }
1032
- .cd-calendar__nav:hover,
1033
- .cd-calendar__today:hover {
1034
- background: var(--cd-calendar-cell-bg-hover);
646
+ .cd-calendar-event-items > :global(*) {
647
+ pointer-events: auto;
1035
648
  }
1036
- .cd-calendar__nav:focus-visible,
1037
- .cd-calendar__today:focus-visible {
1038
- outline: none;
1039
- box-shadow: 0 0 0 2px var(--cd-focus-ring);
649
+ .cd-calendar-event-item {
650
+ overflow: hidden;
1040
651
  }
1041
-
1042
- .cd-calendar__grid {
1043
- display: flex;
1044
- flex-direction: column;
652
+ /* 对齐 Semi .event-day:定位/尺寸/溢出,外观由 children 决定 */
653
+ .cd-calendar-event-day {
654
+ position: absolute;
655
+ left: 0;
656
+ right: 0;
657
+ z-index: var(--cd-calendar-z-item);
658
+ }
659
+ /* 对齐 Semi .event-allday { position:absolute; & > * { font-size-regular } }:
660
+ 父全天区 font-size:26px 令 1em=26px → top:${topInd}em 步长=26px;条高=26px(与步长一致,不重叠);
661
+ children 恢复 regular 字号并 height:100% 撑满条。 */
662
+ .cd-calendar-event-allday,
663
+ .cd-calendar-event-month {
664
+ position: absolute;
1045
665
  }
1046
-
1047
- .cd-calendar__row {
1048
- display: grid;
1049
- grid-template-columns: repeat(7, 1fr);
666
+ .cd-calendar-event-allday {
667
+ height: var(--cd-calendar-height-allday);
1050
668
  }
1051
-
1052
- .cd-calendar__weekday {
1053
- padding: var(--cd-spacing-extra-tight);
1054
- color: var(--cd-calendar-text-secondary);
1055
- text-align: center;
1056
- font-weight: 500;
1057
- border-block-end: 1px solid var(--cd-calendar-border);
669
+ .cd-calendar-event-allday > :global(*) {
670
+ font-size: var(--cd-font-size-regular);
1058
671
  }
1059
- .cd-calendar__weekday--weekend {
1060
- background: var(--cd-calendar-weekend-bg);
672
+ .cd-calendar-event-month > :global(*) {
673
+ font-size: var(--cd-font-size-regular);
1061
674
  }
1062
675
 
1063
- .cd-calendar__cell {
1064
- display: flex;
1065
- flex-direction: column;
1066
- gap: var(--cd-spacing-extra-tight);
1067
- min-block-size: var(--cd-calendar-cell-min-h);
1068
- padding: var(--cd-spacing-extra-tight);
1069
- border-inline-end: 1px solid var(--cd-calendar-border);
1070
- border-block-end: 1px solid var(--cd-calendar-border);
1071
- cursor: pointer;
1072
- outline: none;
1073
- transition: background-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
676
+ /* ============================ day / week 共用(对齐 Semi .calendar-day, .calendar-week)============================ */
677
+ /* 对齐 Semi .calendar-day, .calendar-week { overflow: auto }(根滚动容器,day 为默认 block)。 */
678
+ .cd-calendar-day,
679
+ .cd-calendar-week {
680
+ overflow: auto;
1074
681
  }
1075
- .cd-calendar__cell:hover {
1076
- background: var(--cd-calendar-cell-bg-hover);
1077
- }
1078
- .cd-calendar__cell:focus-visible {
1079
- box-shadow: inset 0 0 0 2px var(--cd-focus-ring);
682
+ /* 对齐 Semi .calendar-week { position: relative; display: grid }。 */
683
+ .cd-calendar-week {
684
+ position: relative;
685
+ display: grid;
1080
686
  }
1081
- /* grid roving 焦点容器自身不需可见焦点环(焦点落在活动格) */
1082
- .cd-calendar__grid:focus {
1083
- outline: none;
687
+
688
+ /* sticky 左列(时间列 / tag 列,对齐 Semi -sticky-left) */
689
+ .cd-calendar-day-sticky-left,
690
+ .cd-calendar-week-sticky-left {
691
+ position: sticky;
692
+ inset-inline-start: 0;
693
+ z-index: var(--cd-calendar-z-stickyleft);
694
+ background: var(--cd-calendar-color-sticky-bg);
1084
695
  }
1085
696
 
1086
- .cd-calendar__cell--weekend {
1087
- background: var(--cd-calendar-weekend-bg);
697
+ /* tag(月份 / 全天标签列)——逐字对齐 Semi .tag { font-size-regular; min-width:70px; color:day-text }。
698
+ box-sizing:content-box 对齐 Semi(全局默认 content-box):min-width 70 + padding-right 8 = 78,
699
+ 与 time 列(timeItems 70 + time padding 8 = 78)同宽,竖线对齐。文档站全局 border-box 会污染,故显式声明。 */
700
+ .cd-calendar-tag {
701
+ box-sizing: content-box;
702
+ min-width: var(--cd-calendar-width-tag-col);
703
+ color: var(--cd-calendar-color-day-text-default);
704
+ font-size: var(--cd-font-size-regular);
1088
705
  }
1089
- .cd-calendar__cell--today {
1090
- background: var(--cd-calendar-today-bg);
706
+ /* 对齐 Semi .all-day .tag { text-align:right; padding-right:8px; span { line-height:26px } } */
707
+ .cd-calendar-all-day-tag {
708
+ text-align: right;
709
+ padding-right: var(--cd-calendar-spacing-allday-tag-padding-right);
1091
710
  }
1092
- .cd-calendar__cell--today .cd-calendar__date {
1093
- color: var(--cd-calendar-today-fg);
1094
- font-weight: 700;
711
+ .cd-calendar-all-day-tag span {
712
+ line-height: var(--cd-calendar-height-allday);
1095
713
  }
1096
- .cd-calendar__cell--selected {
1097
- box-shadow: inset 0 0 0 2px var(--cd-calendar-selected-border);
714
+ /* 对齐 Semi .week &-tag { text-align:right; line-height:26px; &:first-child { padding-right:8px } } */
715
+ .cd-calendar-week-tag {
716
+ text-align: right;
717
+ line-height: var(--cd-calendar-height-allday);
718
+ padding-right: var(--cd-calendar-spacing-tag-child-padding-right);
1098
719
  }
1099
- /* range 区间内:浅底连续填充 */
1100
- .cd-calendar__cell--in-range {
1101
- background: var(--cd-calendar-range-bg, var(--cd-calendar-today-bg));
720
+
721
+ /* 全天区(对齐 Semi .all-day) */
722
+ .cd-calendar-all-day {
723
+ display: flex;
724
+ flex: 1 1 auto;
725
+ border-bottom: 1px solid var(--cd-calendar-color-day-border);
1102
726
  }
1103
- /* range 端点:实心边框高亮(起止) */
1104
- .cd-calendar__cell--range-edge {
1105
- background: var(--cd-calendar-range-edge-bg, var(--cd-calendar-today-bg));
1106
- box-shadow: inset 0 0 0 2px var(--cd-calendar-selected-border);
727
+ /* 对齐 Semi .calendar-week .all-day { font-size: $font-calendar_day_allDay-fontSize(26px) }:
728
+ 令全天区内 1em=26px,跨天条 top:${topInd}em 步长=26px、行高=26px,行与行不重叠。 */
729
+ .cd-calendar-week .cd-calendar-all-day {
730
+ font-size: var(--cd-calendar-font-day-allday-font-size);
1107
731
  }
1108
- /* week 模式:单行更高,事件区有更多展示空间 */
1109
- .cd-calendar__cell--week {
1110
- min-block-size: var(--cd-calendar-week-cell-min-h, calc(var(--cd-calendar-cell-min-h) * 3));
732
+ .cd-calendar-all-day-content {
733
+ position: relative;
734
+ display: flex;
735
+ flex: 1 0 auto;
736
+ height: 100%;
737
+ min-height: var(--cd-calendar-height-allday);
738
+ min-width: calc(var(--cd-calendar-col-count, 1) * var(--cd-calendar-width-day-grid));
1111
739
  }
1112
- .cd-calendar__cell--outside .cd-calendar__date {
1113
- color: var(--cd-calendar-text-secondary);
740
+ /* week 全天区列骨架(对齐 Semi .all-day-skeleton) */
741
+ .cd-calendar-all-day-skeleton {
742
+ display: flex;
743
+ flex: 1 1 auto;
1114
744
  }
1115
- .cd-calendar__cell--past .cd-calendar__date {
1116
- opacity: 0.6;
745
+ .cd-calendar-all-day-skeleton li {
746
+ flex: 1 1 auto;
747
+ min-width: var(--cd-calendar-width-day-grid);
748
+ box-sizing: border-box;
749
+ border-right: 1px solid var(--cd-calendar-color-day-border);
1117
750
  }
1118
- .cd-calendar__cell--disabled {
1119
- background: var(--cd-calendar-disabled-bg);
1120
- cursor: not-allowed;
1121
- background-image: repeating-linear-gradient(
1122
- 45deg,
1123
- transparent,
1124
- transparent 4px,
1125
- var(--cd-calendar-disabled-bg) 4px,
1126
- var(--cd-calendar-disabled-bg) 8px
1127
- );
751
+ .cd-calendar-all-day-skeleton li:last-child {
752
+ border-right: 1px solid transparent;
1128
753
  }
1129
- .cd-calendar__cell--disabled:hover {
1130
- background-color: var(--cd-calendar-disabled-bg);
754
+ .cd-calendar-all-day .cd-calendar-event-items {
755
+ position: absolute;
756
+ inset-inline: 0;
757
+ width: 100%;
1131
758
  }
1132
759
 
1133
- .cd-calendar__date {
1134
- align-self: flex-end;
1135
- font-size: var(--cd-font-size-body);
1136
- line-height: 1.2;
760
+ /* 滚动区容器高度(对齐 Semi -scroll-wrapper:100% - 表头/全天区高,约束滚动区不撑破容器) */
761
+ .cd-calendar-day-scroll-wrapper {
762
+ height: var(--cd-calendar-height-day-scroll-wrapper);
763
+ }
764
+ .cd-calendar-week-scroll-wrapper {
765
+ height: var(--cd-calendar-height-week-scroll-wrapper);
766
+ }
767
+ /* 滚动内容区(对齐 Semi -scroll:无自身 overflow,滚动由根 .calendar-day/week 承担) */
768
+ .cd-calendar-day-scroll,
769
+ .cd-calendar-week-scroll {
770
+ display: flex;
771
+ flex: 1 1 auto;
772
+ position: relative;
773
+ align-items: flex-start;
1137
774
  }
1138
775
 
1139
- .cd-calendar__events {
776
+ /* 时间列(对齐 Semi .calendar-time / .time-items / .time-item) */
777
+ .cd-calendar-time {
778
+ height: auto;
1140
779
  display: flex;
1141
- flex-direction: column;
1142
- gap: 2px;
1143
- min-inline-size: 0;
780
+ flex: none;
781
+ align-items: flex-start;
782
+ padding-right: var(--cd-calendar-spacing-time-padding-right);
783
+ }
784
+ .cd-calendar-time-items {
785
+ position: relative;
786
+ min-width: var(--cd-calendar-width-tag-col);
787
+ background: var(--cd-calendar-color-bg);
788
+ box-sizing: border-box;
789
+ margin-left: auto;
790
+ }
791
+ .cd-calendar-time-item {
792
+ position: relative;
793
+ height: var(--cd-calendar-height-day-grid);
794
+ text-align: right;
795
+ }
796
+ .cd-calendar-time-item span {
797
+ display: block;
798
+ position: relative;
799
+ top: var(--cd-calendar-spacing-time-item-span-top);
800
+ color: var(--cd-calendar-color-day-text-default);
801
+ font-size: var(--cd-font-size-regular);
1144
802
  }
1145
803
 
1146
- .cd-calendar__event {
804
+ /* 单日列(对齐 Semi .calendar-grid { display:flex; align-items:flex-start; flex:1 1 auto; position:relative }) */
805
+ .cd-calendar-grid {
1147
806
  display: flex;
1148
- align-items: center;
1149
- gap: var(--cd-spacing-extra-tight);
1150
- min-inline-size: 0;
1151
- padding-block: 1px;
1152
- padding-inline: var(--cd-spacing-extra-tight);
1153
- color: var(--cd-calendar-text);
1154
- background: var(--cd-calendar-cell-bg-hover);
1155
- border-radius: var(--cd-calendar-radius);
1156
- font-size: 0.75rem;
1157
- line-height: 1.4;
1158
- }
1159
- .cd-calendar__event--disabled {
1160
- opacity: 0.5;
1161
- }
1162
- /* 事件块作为 role=button:键盘焦点环可见 */
1163
- .cd-calendar__event[role='button'] {
1164
- cursor: pointer;
1165
- text-align: start;
807
+ align-items: flex-start;
808
+ flex: 1 1 auto;
809
+ position: relative;
1166
810
  }
1167
- .cd-calendar__event[role='button']:focus-visible {
1168
- outline: none;
1169
- box-shadow: 0 0 0 2px var(--cd-focus-ring);
811
+ .cd-calendar-grid-content {
812
+ flex: 1 0 auto;
813
+ min-width: var(--cd-calendar-width-day-grid);
814
+ height: 100%;
815
+ position: relative;
1170
816
  }
1171
- .cd-calendar__event--disabled[role='button'] {
1172
- cursor: not-allowed;
817
+ .cd-calendar-grid-skeleton {
818
+ position: relative;
819
+ box-sizing: border-box;
1173
820
  }
1174
- .cd-calendar__event-bar {
1175
- flex: 0 0 auto;
1176
- inline-size: 3px;
1177
- align-self: stretch;
1178
- min-block-size: 0.9em;
1179
- background: var(--cd-calendar-event-accent, var(--cd-calendar-event-default-bg));
1180
- border-radius: 2px;
821
+ .cd-calendar-grid-skeleton li {
822
+ position: relative;
823
+ height: calc(var(--cd-calendar-height-day-grid) / 2);
1181
824
  }
1182
- .cd-calendar__event-title {
1183
- overflow: hidden;
1184
- white-space: nowrap;
1185
- text-overflow: ellipsis;
825
+ .cd-calendar-grid-skeleton li:last-child,
826
+ .cd-calendar-grid-skeleton li:nth-last-child(2) {
827
+ height: 0;
1186
828
  }
1187
-
1188
- .cd-calendar__more {
1189
- align-self: flex-start;
1190
- padding: 0;
1191
- color: var(--cd-calendar-more-color);
1192
- background: transparent;
1193
- border: none;
1194
- cursor: pointer;
1195
- font: inherit;
1196
- font-size: var(--cd-font-size-caption, 0.85em);
829
+ /* 整点横线(对齐 Semi .grid-skeleton-row-line::after),首条不画 */
830
+ /* 对齐 Semi .grid-skeleton-row-line::after:只有 left/right,无 top/bottom
831
+ (横线停在整点 li 静态流位置 = 整点处,与时间标签垂直对齐)。 */
832
+ .cd-calendar-grid-skeleton-row-line::after {
833
+ content: '';
834
+ border-bottom: 1px solid var(--cd-calendar-color-day-border);
835
+ position: absolute;
836
+ left: 0;
837
+ right: 0;
838
+ z-index: var(--cd-calendar-z-line);
839
+ pointer-events: none;
1197
840
  }
1198
- .cd-calendar__more:hover {
1199
- text-decoration: underline;
841
+ .cd-calendar-grid-skeleton-row-line:first-child::after {
842
+ border: 0;
1200
843
  }
1201
- .cd-calendar__more:focus-visible {
844
+ /* 半小时可点击格:对齐 Semi——空 li 可点击,无 hover 背景,仅 focus 环 */
845
+ .cd-calendar-grid-skeleton li {
846
+ cursor: pointer;
847
+ }
848
+ .cd-calendar-grid-skeleton li:focus-visible {
1202
849
  outline: none;
1203
- box-shadow: 0 0 0 2px var(--cd-focus-ring);
1204
- border-radius: var(--cd-calendar-radius);
850
+ box-shadow: inset 0 0 0 2px var(--cd-focus-ring);
1205
851
  }
1206
852
 
1207
- /* --- day 视图:单日时间轴 --- */
1208
- .cd-calendar__timeline {
1209
- display: flex;
1210
- flex-direction: column;
853
+ /* 当前时间红线 + 原点(对齐 Semi .grid-curr-line / -circle) */
854
+ .cd-calendar-grid-curr-circle {
855
+ background: var(--cd-calendar-color-currcircle-bg-default);
856
+ border-radius: var(--cd-calendar-radius-today-date);
857
+ position: absolute;
858
+ height: var(--cd-calendar-width-currcircle);
859
+ width: var(--cd-calendar-width-currcircle);
860
+ margin-top: var(--cd-calendar-spacing-currcircle-margin-top);
861
+ z-index: var(--cd-calendar-z-curr);
862
+ }
863
+ .cd-calendar-grid-curr-line {
864
+ position: absolute;
865
+ left: 0;
866
+ right: 0;
867
+ z-index: var(--cd-calendar-z-curr);
868
+ border-top: 1px solid var(--cd-calendar-color-curr-border);
869
+ pointer-events: none;
1211
870
  }
1212
871
 
1213
- .cd-calendar__allday {
872
+ /* ============================ week / range 表头(对齐 Semi .calendar-week-header / -grid-row)============================ */
873
+ .cd-calendar-week-header {
1214
874
  display: flex;
875
+ flex: 1 1 auto;
1215
876
  align-items: flex-start;
1216
- gap: var(--cd-spacing-tight);
1217
- padding: var(--cd-spacing-extra-tight) var(--cd-spacing-tight);
1218
- border-block-end: 1px solid var(--cd-calendar-border);
1219
- background: var(--cd-calendar-header-bg);
1220
- }
1221
- .cd-calendar__allday-label {
1222
- flex: 0 0 var(--cd-calendar-hour-label-w, 56px);
1223
- color: var(--cd-calendar-text-secondary);
1224
- font-weight: 500;
1225
- text-align: end;
1226
- }
1227
- .cd-calendar__allday-events {
877
+ font-size: var(--cd-font-size-regular);
878
+ color: var(--cd-calendar-color-day-text-default);
879
+ border-bottom: 1px solid var(--cd-calendar-color-day-border);
880
+ }
881
+ .cd-calendar-week-grid {
1228
882
  display: flex;
1229
- flex-direction: column;
1230
- gap: 2px;
1231
- min-inline-size: 0;
1232
- flex: 1 1 auto;
883
+ flex: 1 0 auto;
884
+ min-width: calc(var(--cd-calendar-col-count, 7) * var(--cd-calendar-width-day-grid));
885
+ }
886
+ .cd-calendar-week-grid-row {
887
+ display: flex;
888
+ flex: 1 0 auto;
889
+ }
890
+ .cd-calendar-week-grid-row li {
891
+ display: flex;
892
+ flex: 1 1 0;
893
+ min-width: var(--cd-calendar-width-day-grid);
894
+ border-right: 1px solid transparent;
895
+ box-sizing: border-box;
896
+ justify-content: center;
897
+ align-items: center;
898
+ height: auto;
899
+ line-height: var(--cd-calendar-height-allday);
900
+ }
901
+ .cd-calendar-week-grid-row li > :global(span) {
902
+ display: flex;
903
+ align-items: center;
904
+ justify-content: center;
905
+ line-height: var(--cd-calendar-height-allday);
906
+ }
907
+ /* 星期名 span(对齐 Semi li > span:last-child { padding: 0 4px }) */
908
+ .cd-calendar-week-grid-row li > :global(span:last-child) {
909
+ padding: 0 var(--cd-calendar-spacing-grid-row-span-child-padding-x);
910
+ }
911
+ /* today 日期圆标(对齐 Semi .today .today-date) */
912
+ .cd-calendar-today .cd-calendar-today-date {
913
+ width: var(--cd-calendar-width-today-date);
914
+ height: var(--cd-calendar-width-today-date);
915
+ line-height: var(--cd-calendar-width-today-date);
916
+ text-align: center;
917
+ border-radius: var(--cd-calendar-radius-today-date);
918
+ background: var(--cd-calendar-color-bg-active);
919
+ color: var(--cd-calendar-color-text-active);
920
+ }
921
+
922
+ /* week 列竖线(对齐 Semi .week .grid-skeleton li border-right,最后列不画) */
923
+ .cd-calendar-week .cd-calendar-grid-skeleton li {
924
+ border-right: 1px solid var(--cd-calendar-color-day-border);
925
+ }
926
+ .cd-calendar-week .cd-calendar-grid:last-child .cd-calendar-grid-content .cd-calendar-grid-skeleton li {
927
+ border-right: 0;
1233
928
  }
1234
929
 
1235
- .cd-calendar__hours {
930
+ /* ============================ month 视图(对齐 Semi .calendar-month)============================ */
931
+ .cd-calendar-month {
1236
932
  display: flex;
1237
933
  flex-direction: column;
934
+ overflow: hidden;
935
+ font-size: var(--cd-font-size-regular);
1238
936
  }
1239
- .cd-calendar__hour {
937
+ .cd-calendar-month-header {
1240
938
  display: flex;
1241
- align-items: stretch;
1242
- gap: var(--cd-spacing-tight);
1243
- min-block-size: var(--cd-calendar-hour-min-h, 40px);
1244
- border-block-end: 1px solid var(--cd-calendar-border);
1245
- }
1246
- .cd-calendar__hour:last-child {
1247
- border-block-end: none;
1248
- }
1249
- .cd-calendar__hour-label {
1250
- flex: 0 0 var(--cd-calendar-hour-label-w, 56px);
1251
- padding: var(--cd-spacing-extra-tight) var(--cd-spacing-tight);
1252
- color: var(--cd-calendar-text-secondary);
1253
- text-align: end;
1254
- font-variant-numeric: tabular-nums;
1255
- border-inline-end: 1px solid var(--cd-calendar-border);
1256
- }
1257
- .cd-calendar__hour-slot {
939
+ flex: 1 1 auto;
940
+ align-items: flex-start;
941
+ color: var(--cd-calendar-color-day-text-default);
942
+ }
943
+ .cd-calendar-month-grid {
944
+ flex: 1 1 auto;
945
+ box-sizing: border-box;
946
+ }
947
+ .cd-calendar-month-grid-row {
1258
948
  display: flex;
1259
- flex-direction: column;
1260
- gap: 2px;
949
+ box-sizing: border-box;
950
+ }
951
+ .cd-calendar-month-grid-row li {
952
+ flex: 1;
953
+ white-space: nowrap;
954
+ text-align: right;
955
+ padding-right: var(--cd-calendar-spacing-skeletion-grid-row-li-padding-right);
956
+ box-sizing: border-box;
957
+ border-bottom: 1px solid var(--cd-calendar-color-day-border);
958
+ color: var(--cd-calendar-color-day-text-default);
959
+ line-height: var(--cd-calendar-height-allday);
960
+ }
961
+ .cd-calendar-month-grid-row li span {
962
+ display: inline-block;
963
+ text-align: right;
964
+ }
965
+ .cd-calendar-month-grid-wrapper {
1261
966
  flex: 1 1 auto;
1262
- min-inline-size: 0;
1263
- padding: var(--cd-spacing-extra-tight);
967
+ min-height: 0;
1264
968
  }
1265
- .cd-calendar__event--timed {
1266
- padding-block: 2px;
969
+ .cd-calendar-month-week {
970
+ height: 100%;
1267
971
  }
1268
- .cd-calendar__event-time {
1269
- flex: 0 0 auto;
1270
- color: var(--cd-calendar-text-secondary);
1271
- font-variant-numeric: tabular-nums;
1272
- font-size: 0.75rem;
972
+ .cd-calendar-month-grid-col {
973
+ display: flex;
974
+ flex-direction: column;
975
+ flex: 1;
976
+ height: 100%;
1273
977
  }
1274
-
1275
- /* --- 虚拟化时间轴:滚动视口(block 布局,避免 flex 压缩撑高占位)--- */
1276
- .cd-calendar__hours--virtual {
1277
- display: block;
1278
- overflow-y: auto;
978
+ /* 每周行(对齐 Semi .month-weekrow) */
979
+ .cd-calendar-month-weekrow {
980
+ flex: 1 1 auto;
1279
981
  position: relative;
982
+ min-height: 0;
1280
983
  }
1281
- .cd-calendar__hours-spacer {
1282
- position: relative;
1283
- flex: none;
984
+ /* 日格骨架(对齐 Semi .month-skeleton,绝对定位铺满整周行) */
985
+ .cd-calendar-month-skeleton {
986
+ display: flex;
987
+ box-sizing: border-box;
988
+ position: absolute;
989
+ inset: 0;
990
+ overflow: hidden;
1284
991
  }
1285
-
1286
- /* --- 弹层模式 --- */
1287
- .cd-calendar-popup {
992
+ .cd-calendar-month-skeleton li {
993
+ flex: 1;
1288
994
  position: relative;
1289
- display: inline-block;
1290
- }
1291
- .cd-calendar-popup__trigger {
1292
- display: inline-flex;
1293
- align-items: center;
1294
- gap: var(--cd-spacing-tight);
1295
- padding: var(--cd-spacing-extra-tight) var(--cd-spacing-base-tight);
1296
- color: var(--cd-calendar-text);
1297
- background: var(--cd-calendar-bg);
1298
- border: 1px solid var(--cd-calendar-border);
1299
- border-radius: var(--cd-calendar-radius);
995
+ overflow: hidden;
996
+ height: 100%;
997
+ white-space: nowrap;
998
+ text-align: right;
999
+ padding-right: var(--cd-calendar-spacing-skeletion-grid-row-li-padding-right);
1000
+ padding-top: var(--cd-calendar-spacing-skeleton-li-child-padding-top);
1001
+ box-sizing: border-box;
1002
+ border-right: 1px solid var(--cd-calendar-color-day-border);
1003
+ border-bottom: 1px solid var(--cd-calendar-color-day-border);
1004
+ color: var(--cd-calendar-color-day-text-default);
1300
1005
  cursor: pointer;
1301
- font: inherit;
1006
+ outline: none;
1302
1007
  }
1303
- .cd-calendar-popup__trigger:hover {
1304
- background: var(--cd-calendar-cell-bg-hover);
1008
+ .cd-calendar-month-skeleton li:last-child {
1009
+ border-right: none;
1305
1010
  }
1306
- .cd-calendar-popup__trigger:focus-visible {
1307
- outline: none;
1308
- box-shadow: 0 0 0 2px var(--cd-focus-ring);
1011
+ .cd-calendar-month-skeleton li:focus-visible {
1012
+ box-shadow: inset 0 0 0 2px var(--cd-focus-ring);
1309
1013
  }
1310
- .cd-calendar--popup {
1311
- z-index: var(--cd-z-popover, 1050);
1312
- inline-size: max-content;
1313
- box-shadow: var(--cd-shadow-elevated, 0 4px 16px rgb(0 0 0 / 0.12));
1014
+ /* 当月日期文字深黑色——逐字对齐 Semi .month-skeleton .month-same { color: date-text-default }
1015
+ (后代 selector 特异性 0,2,0 > .month-skeleton li 的 0,1,1,深黑压过灰)。 */
1016
+ .cd-calendar-month-skeleton .cd-calendar-month-same {
1017
+ color: var(--cd-calendar-color-date-text-default);
1314
1018
  }
1315
-
1316
- /* showCurrTime 当前时间红线:绝对定位,跨越整个小时列区域 */
1317
- .cd-calendar__curr-time {
1019
+ /* 日期数字(对齐 Semi .month-date:绝对定位右上,today-date 圆标) */
1020
+ .cd-calendar-month-date {
1318
1021
  position: absolute;
1319
- inset-inline: 0;
1320
- block-size: 2px;
1321
- background: var(--cd-calendar-curr-time-color, var(--cd-color-danger, #f5222d));
1322
- z-index: 1;
1323
- pointer-events: none;
1022
+ right: var(--cd-calendar-spacing-month-date-right);
1023
+ z-index: var(--cd-calendar-z-line);
1324
1024
  }
1325
- .cd-calendar__curr-time::before {
1326
- content: '';
1025
+ .cd-calendar-today .cd-calendar-month-date .cd-calendar-today-date {
1026
+ display: inline-flex;
1027
+ align-items: center;
1028
+ justify-content: center;
1029
+ width: var(--cd-calendar-width-today-date);
1030
+ height: var(--cd-calendar-width-today-date);
1031
+ border-radius: var(--cd-calendar-radius-today-date);
1032
+ background: var(--cd-calendar-color-bg-active);
1033
+ color: var(--cd-calendar-color-text-active);
1034
+ }
1035
+ /* 跨天条层(对齐 Semi .month .event-items { position:absolute; top:31px; right:0; bottom:20px; left:0; overflow:hidden }) */
1036
+ .cd-calendar-month-weekrow .cd-calendar-event-items {
1037
+ position: absolute;
1038
+ top: var(--cd-calendar-spacing-event-items-top);
1039
+ right: 0;
1040
+ bottom: var(--cd-calendar-spacing-event-items-bottom);
1041
+ left: 0;
1042
+ overflow: hidden;
1043
+ }
1044
+ .cd-calendar-month-weekrow .cd-calendar-event-month {
1045
+ height: var(--cd-calendar-height-month-week-row-event-month);
1046
+ white-space: nowrap;
1047
+ text-overflow: ellipsis;
1048
+ }
1049
+ /* 「还有 N 项」(对齐 Semi .month-event-card-wrapper:右下角,可点击) */
1050
+ .cd-calendar-month-event-card-wrapper {
1051
+ font-size: var(--cd-font-size-small);
1052
+ display: block;
1327
1053
  position: absolute;
1328
- inset-block-start: 50%;
1329
- inset-inline-start: var(--cd-calendar-hour-label-w, 56px);
1330
- transform: translateY(-50%);
1331
- inline-size: 8px;
1332
- block-size: 8px;
1333
- border-radius: 50%;
1334
- background: var(--cd-calendar-curr-time-color, var(--cd-color-danger, #f5222d));
1054
+ right: var(--cd-calendar-spacing-month-event-card-wrapper-right);
1055
+ bottom: 0;
1056
+ z-index: var(--cd-calendar-z-item);
1057
+ padding-top: var(--cd-calendar-spacing-month-event-card-wrapper-padding-top);
1058
+ padding-inline: 2px;
1059
+ color: var(--cd-calendar-color-day-text-default);
1060
+ background: var(--cd-color-bg-2);
1061
+ border-radius: var(--cd-border-radius-small, 3px);
1062
+ user-select: none;
1063
+ cursor: pointer;
1064
+ }
1065
+ .cd-calendar-month-event-card-wrapper:hover {
1066
+ text-decoration: underline;
1335
1067
  }
1336
1068
 
1337
- @media (prefers-reduced-motion: reduce) {
1338
- .cd-calendar__cell,
1339
- .cd-calendar__nav,
1340
- .cd-calendar__today {
1341
- transition: none;
1342
- }
1069
+ /* +N 卡片(对齐 Semi .month-event-card / -header-info / -body / -list) */
1070
+ .cd-calendar-month-event-card {
1071
+ width: var(--cd-calendar-width-card);
1072
+ max-width: 100%;
1073
+ }
1074
+ .cd-calendar-month-event-card-header-info {
1075
+ display: flex;
1076
+ flex-direction: column;
1077
+ align-items: center;
1078
+ }
1079
+ .cd-calendar-month-event-card-header-info-weekday {
1080
+ color: var(--cd-calendar-color-day-text-default);
1081
+ font-size: var(--cd-font-size-small);
1082
+ }
1083
+ .cd-calendar-month-event-card-header-info-date {
1084
+ color: var(--cd-calendar-color-date-text-default);
1085
+ font-size: var(--cd-font-size-header, 1.5rem);
1086
+ font-weight: 600;
1087
+ margin-top: var(--cd-calendar-spacing-header-info-date-margin-top);
1088
+ }
1089
+ .cd-calendar-month-event-card-body {
1090
+ padding: 0 var(--cd-calendar-spacing-body-pading-x);
1091
+ }
1092
+ .cd-calendar-month-event-card-list {
1093
+ display: flex;
1094
+ flex-direction: column;
1095
+ gap: var(--cd-spacing-extra-tight);
1096
+ }
1097
+ .cd-calendar-month-event-card-list li {
1098
+ padding: var(--cd-spacing-extra-tight) 0;
1343
1099
  }
1344
1100
  </style>