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