@chenzy-design/svelte 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
package/dist/tree/Tree.svelte
CHANGED
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
<!--
|
|
2
|
-
Tree —
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
Tree — 严格对齐 Semi Design Tree。
|
|
3
|
+
层级展示:展开/收起、单选/多选(multiple 驱动 checkbox 父子联动含半选 mixed)、内置搜索高亮。
|
|
4
|
+
值通道统一走 value/onChange:单选为节点 key,多选为选中 key 数组(含 conduct 联动结果)。
|
|
5
|
+
受控 value/expandedKeys 不回写,仅 onChange/onExpand/onSelect/onSearch 通知(红线 #1)。
|
|
5
6
|
键盘遵循 WAI-ARIA APG Tree View(单一 tab stop + aria-activedescendant)。
|
|
6
7
|
复用 @chenzy-design/core 的纯函数树算法,不重复实现。
|
|
7
8
|
loadData:展开未加载的非叶子节点时异步取子节点,结果缓存进本地 SvelteMap
|
|
8
9
|
并派生合并树喂给所有 core 函数(不写回受控 treeData,红线 #1)。
|
|
9
10
|
showLine:层级引导线(复用 core FlatNode.isLast/ancestorIsLast,纯 CSS ├/└/竖线)。
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
结构),保持 role=tree 容器 + 行 role=treeitem
|
|
13
|
-
+ rAF 节流 + cleanup(红线 #3),可见区间 $derived 纯派生(红线 #2
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
fieldNames:自定义节点字段名(key/label/children)映射任意后端数据;派生只读标准化(红线 #1/#2),
|
|
11
|
+
virtualize:大数据树虚拟滚动(传 { itemSize, height?, width? } 对象开启,对齐 Semi)。直接用
|
|
12
|
+
core fixedRange 纯函数自建轻量 fixed 定高虚拟化(非复用 VirtualList 组件——其 role=list/listitem
|
|
13
|
+
包裹层会破坏 role=tree→treeitem 的 ARIA 结构),保持 role=tree 容器 + 行 role=treeitem 语义不变;
|
|
14
|
+
只渲染视口内切片。滚动监听命令式 + rAF 节流 + cleanup(红线 #3),可见区间 $derived 纯派生(红线 #2)。
|
|
15
|
+
键盘移动 activeKey 时 scrollToIndex 滚到可见,确保目标行进入视口并被渲染,保证键盘可用。
|
|
16
|
+
keyMaps:自定义节点字段名(key/label/children)映射任意后端数据;派生只读标准化(红线 #1/#2),
|
|
17
17
|
默认字段名时零开销直接用原 treeData,回调回传原始节点(__orig)。
|
|
18
|
-
accordion:手风琴模式,同层级最多展开一个——展开某节点时用 core 的 accordionExpand 纯函数
|
|
19
|
-
计算并收起其同父级 siblings(不同层级互不影响)。受控时只 onExpandedChange 回传新集不回写(红线 #1)。
|
|
20
18
|
-->
|
|
21
19
|
<script lang="ts">
|
|
22
20
|
import type { Snippet } from 'svelte';
|
|
@@ -24,37 +22,116 @@
|
|
|
24
22
|
useId,
|
|
25
23
|
flattenVisible,
|
|
26
24
|
collectExpandable,
|
|
27
|
-
collectExpandableToDepth,
|
|
28
25
|
conduct,
|
|
29
26
|
toggleCheck,
|
|
27
|
+
collectLeafKeys,
|
|
28
|
+
findNode,
|
|
30
29
|
computeFilteredKeys,
|
|
31
30
|
fixedRange,
|
|
32
31
|
scrollOffsetForIndex,
|
|
33
32
|
computeDropPosition,
|
|
34
33
|
isAncestorOrSelf,
|
|
35
|
-
accordionExpand,
|
|
36
34
|
type TreeKey,
|
|
37
35
|
type TreeNodeData,
|
|
38
36
|
type FlatNode,
|
|
39
37
|
type DropPosition,
|
|
40
38
|
} from '@chenzy-design/core';
|
|
41
39
|
import { SvelteMap, SvelteSet } from 'svelte/reactivity';
|
|
40
|
+
import {
|
|
41
|
+
IconSearch,
|
|
42
|
+
IconTreeTriangleDown,
|
|
43
|
+
IconFile,
|
|
44
|
+
IconFolder,
|
|
45
|
+
IconFolderOpen,
|
|
46
|
+
} from '@chenzy-design/icons';
|
|
42
47
|
import { useLocale } from '../locale-provider/index.js';
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
type
|
|
48
|
+
import Input from '../input/Input.svelte';
|
|
49
|
+
import Checkbox from '../checkbox/Checkbox.svelte';
|
|
50
|
+
import Spin from '../spin/Spin.svelte';
|
|
51
|
+
import Highlight from '../highlight/Highlight.svelte';
|
|
52
|
+
|
|
53
|
+
/** 值通道类型(对齐 Semi `Value`):单选为标量或节点对象,多选为其数组。 */
|
|
54
|
+
type TreeValue =
|
|
55
|
+
| TreeKey
|
|
56
|
+
| TreeNodeData
|
|
57
|
+
| Array<TreeKey | TreeNodeData>;
|
|
50
58
|
type DropInfo = {
|
|
51
59
|
dragNode: TreeNodeData;
|
|
52
60
|
dropNode: TreeNodeData;
|
|
53
61
|
dropPosition: DropPosition;
|
|
54
62
|
};
|
|
55
63
|
|
|
64
|
+
/** 虚拟化配置对象(对齐 Semi `Virtualize`)。itemSize 必传。 */
|
|
65
|
+
type Virtualize = {
|
|
66
|
+
/** 每行高度(px),必传 */
|
|
67
|
+
itemSize: number;
|
|
68
|
+
/** 视口高度,默认 '100%'(需父节点有确定高度)或数字 px */
|
|
69
|
+
height?: number | string;
|
|
70
|
+
/** 视口宽度,默认 '100%' */
|
|
71
|
+
width?: number | string;
|
|
72
|
+
};
|
|
73
|
+
|
|
56
74
|
/** 自定义节点字段名映射(适配任意后端数据结构)。默认 key/label/children。 */
|
|
57
|
-
type
|
|
75
|
+
type KeyMaps = { key?: string; label?: string; children?: string };
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* renderFullLabel 整行接管渲染的上下文(对齐 Semi `renderFullLabel` 参数)。
|
|
79
|
+
* 暴露节点数据、层级、内置计算好的 class、展开图标 snippet 与全部行为回调,
|
|
80
|
+
* 让使用者完全自定义整行 option 的渲染结构(叶子分组、单选高亮子节点等高级场景)。
|
|
81
|
+
*/
|
|
82
|
+
type FullLabelContext = {
|
|
83
|
+
/** 节点数据(自定义 keyMaps 时为原始节点) */
|
|
84
|
+
data: TreeNodeData;
|
|
85
|
+
/** 层级,从 0 开始 */
|
|
86
|
+
level: number;
|
|
87
|
+
/** 虚拟化时必须赋给渲染 DOM 的定位样式(否则行错位) */
|
|
88
|
+
style: string | undefined;
|
|
89
|
+
/** 内置样式类名(含缩进/选中/禁用等状态类) */
|
|
90
|
+
className: string;
|
|
91
|
+
/**
|
|
92
|
+
* 内置展开图标 snippet。可展开节点渲染可点击的箭头(点击触发展开/收起),叶子节点为占位。
|
|
93
|
+
* 用法:`{@render ctx.expandIcon(ctx.expandStatus)}`(传入展开态以渲染正确朝向)。
|
|
94
|
+
*/
|
|
95
|
+
expandIcon: Snippet<[{ expanded: boolean; loading: boolean }]>;
|
|
96
|
+
/** 是否叶子节点 */
|
|
97
|
+
isLeaf: boolean;
|
|
98
|
+
/** 选中状态 */
|
|
99
|
+
checkStatus: { checked: boolean; halfChecked: boolean };
|
|
100
|
+
/** 展开状态 */
|
|
101
|
+
expandStatus: { expanded: boolean; loading: boolean };
|
|
102
|
+
/** 该节点是否命中当前搜索 */
|
|
103
|
+
filtered: boolean;
|
|
104
|
+
/** 当前搜索框输入值 */
|
|
105
|
+
searchWord: string;
|
|
106
|
+
/** 单选/行点击回调 */
|
|
107
|
+
onClick: (e: MouseEvent) => void;
|
|
108
|
+
/** 勾选回调 */
|
|
109
|
+
onCheck: (e: MouseEvent) => void;
|
|
110
|
+
/** 展开/收起回调 */
|
|
111
|
+
onExpand: (e: MouseEvent) => void;
|
|
112
|
+
/** 右键回调 */
|
|
113
|
+
onContextMenu: (e: MouseEvent) => void;
|
|
114
|
+
/** 双击回调 */
|
|
115
|
+
onDoubleClick: (e: MouseEvent) => void;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* searchRender 自定义搜索框渲染上下文(对齐 Semi `searchRender` 收到的 inputProps)。
|
|
120
|
+
* Semi 把这些 props spread 给内置 Input;本库同样透传,snippet 可原样传给我们的 `Input` 组件。
|
|
121
|
+
*/
|
|
122
|
+
type SearchRenderContext = {
|
|
123
|
+
value: string;
|
|
124
|
+
placeholder: string;
|
|
125
|
+
/** 值变化回调(等价 Input 的 onChange/onInput) */
|
|
126
|
+
onChange: (value: string) => void;
|
|
127
|
+
/** 清除回调 */
|
|
128
|
+
onClear: () => void;
|
|
129
|
+
/** 是否显示清除按钮(对齐 Semi showClear,映射 Input 的 clearable) */
|
|
130
|
+
showClear: boolean;
|
|
131
|
+
className: string | undefined;
|
|
132
|
+
style: string | undefined;
|
|
133
|
+
disabled: boolean;
|
|
134
|
+
};
|
|
58
135
|
|
|
59
136
|
/** 标准节点附带原始节点引用,用于回调时回传用户原始数据。 */
|
|
60
137
|
type NormalizedNode = TreeNodeData & { __orig: Record<string, unknown> };
|
|
@@ -62,104 +139,248 @@
|
|
|
62
139
|
interface Props {
|
|
63
140
|
/**
|
|
64
141
|
* 树数据源。默认节点字段为 key/label/children;
|
|
65
|
-
* 用
|
|
142
|
+
* 用 keyMaps 自定义字段名时可传任意后端结构(如 { id, name, sub })。
|
|
66
143
|
*/
|
|
67
144
|
treeData?: TreeNodeData[];
|
|
145
|
+
/**
|
|
146
|
+
* 简单 JSON 形式的树数据(对齐 Semi `treeDataSimpleJson`)。传入扁平 `{ key: value }` 键值对,
|
|
147
|
+
* key 同时作为 `TreeNodeData` 的 `key` 与 `label`,value 作为节点的 `value`;
|
|
148
|
+
* 嵌套对象自动转为子树。与 `treeData` 二选一,`treeData` 非空时优先,忽略此项。
|
|
149
|
+
* 例如 `{ 中国: { 北京: 'beijing', 上海: 'shanghai' } }` → 一层「中国」含两个叶子。
|
|
150
|
+
*/
|
|
151
|
+
treeDataSimpleJson?: Record<string, unknown>;
|
|
68
152
|
/** 自定义节点字段名映射,如 { key:'id', label:'name', children:'sub' }。默认全部为标准名。 */
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
153
|
+
keyMaps?: KeyMaps;
|
|
154
|
+
/**
|
|
155
|
+
* 受控选中值(对齐 Semi `value`)。传入即为受控(不回写,红线 #1)。
|
|
156
|
+
* - 单选(multiple=false):选中节点的 key(或 onChangeWithObject 时为节点对象);
|
|
157
|
+
* - 多选(multiple=true):选中节点 key 数组(含父子联动结果;onChangeWithObject 时为对象数组)。
|
|
158
|
+
*/
|
|
159
|
+
value?: TreeValue | null;
|
|
160
|
+
/** 非受控初始选中值(对齐 Semi `defaultValue`);形态同 value。 */
|
|
161
|
+
defaultValue?: TreeValue | null;
|
|
162
|
+
/**
|
|
163
|
+
* 以对象形态回传/接收选中项(对齐 Semi `onChangeWithObject`)。开启后:
|
|
164
|
+
* - `onChange` 回调入参的 `value` 从 key(或 key 数组)变为**节点对象**(含 label/value/其它字段,
|
|
165
|
+
* 即原始节点 `toOrig`),多选时为对象数组;
|
|
166
|
+
* - 受控 `value` 与非受控 `defaultValue` 也须传对象形态(对象须含节点标识——优先取 `value` 字段,
|
|
167
|
+
* 缺省回退 `key`)。组件内部据此提取标识匹配节点。
|
|
168
|
+
* 默认 false(value 收发均为 key)。
|
|
169
|
+
*/
|
|
170
|
+
onChangeWithObject?: boolean;
|
|
171
|
+
/**
|
|
172
|
+
* 是否多选(对齐 Semi `multiple`)。默认 false。
|
|
173
|
+
* 开启后每行渲染勾选框(checkbox),父子联动勾选(含半选 mixed),选中值经 `value`/`onChange`
|
|
174
|
+
* 作为选中 key 数组收发。关闭为单选(点击整行选中,值为单个 key)。
|
|
175
|
+
*/
|
|
72
176
|
multiple?: boolean;
|
|
73
|
-
checkable?: boolean;
|
|
74
|
-
checkedKeys?: TreeKey[];
|
|
75
|
-
defaultCheckedKeys?: TreeKey[];
|
|
76
177
|
/**
|
|
77
|
-
*
|
|
78
|
-
* '
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* 任一开启(unRelated 或 checkStrictly=true)即关闭父子联动。默认 related + checkStrictly=false 保持联动。
|
|
178
|
+
* 多选时父子勾选联动关系(对齐 Semi `checkRelation`)。默认 'related'。
|
|
179
|
+
* - 'related':勾选父全选子、子全选则父选中、部分选中半选(默认联动);
|
|
180
|
+
* - 'unRelated':父子勾选互不影响,每个节点独立勾选、无半选态。
|
|
181
|
+
* 仅 multiple 时有意义。
|
|
82
182
|
*/
|
|
83
183
|
checkRelation?: 'related' | 'unRelated';
|
|
84
|
-
|
|
184
|
+
/**
|
|
185
|
+
* 严格禁用(对齐 Semi `disableStrictly`)。开启后,disabled 节点的勾选态被「严格锁定」:
|
|
186
|
+
* 不能通过父级/子级联动改变——已勾选的 disabled 节点不会被父级取消,未勾选的不会被父级勾上。
|
|
187
|
+
* 与普通 `disabled` 的区别:普通 disabled 仅禁止直接点击该节点,其勾选态仍可能因父级联动被改;
|
|
188
|
+
* `disableStrictly` 则连联动也锁死。仅在 multiple 联动(related)下有意义。默认 false。
|
|
189
|
+
*/
|
|
190
|
+
disableStrictly?: boolean;
|
|
191
|
+
/**
|
|
192
|
+
* 仅叶子回传(对齐 Semi `leafOnly`)。多选(multiple)时,`onChange` 回传的 value(选中集)
|
|
193
|
+
* 只含叶子节点,不含父/半选节点。适合「父节点仅作分组、值只关心叶子」的场景。
|
|
194
|
+
* 仅在 multiple 联动(related)下有意义;解耦(unRelated)下本就是各节点独立态,leafOnly 仍滤成只留叶子。
|
|
195
|
+
* 默认 false(回传全部命中节点)。
|
|
196
|
+
*/
|
|
197
|
+
leafOnly?: boolean;
|
|
198
|
+
/**
|
|
199
|
+
* 目录树模式(对齐 Semi `directory`)。开启后:
|
|
200
|
+
* - 默认整行块(等价 blockNode=true),点击整行即选中;
|
|
201
|
+
* - 内置目录/文件图标(可展开节点为文件夹、叶子为文件),可用 `icon` snippet 覆盖;
|
|
202
|
+
* - 默认展开触发方式为点击整行(expandAction 未显式指定时按 'click')。
|
|
203
|
+
* 默认 false。
|
|
204
|
+
*/
|
|
205
|
+
directory?: boolean;
|
|
206
|
+
/** 是否开启展开/收起动画(对齐 Semi `motion`)。默认 true;virtualize 时强制关闭。 */
|
|
207
|
+
motion?: boolean;
|
|
85
208
|
expandedKeys?: TreeKey[];
|
|
86
209
|
defaultExpandedKeys?: TreeKey[];
|
|
87
210
|
defaultExpandAll?: boolean;
|
|
88
211
|
/**
|
|
89
|
-
*
|
|
90
|
-
*
|
|
212
|
+
* 展开全部(对齐 Semi `expandAll`)。与 `defaultExpandAll` 的区别:defaultExpandAll 仅初始化生效,
|
|
213
|
+
* 数据(treeData)后续变化不再影响;expandAll 在数据变化时**仍然生效**(每次数据变化都重新展开全部)。
|
|
214
|
+
* 仅在非受控展开(未传 expandedKeys)时有意义。默认 false。
|
|
91
215
|
*/
|
|
92
|
-
|
|
216
|
+
expandAll?: boolean;
|
|
93
217
|
/**
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
218
|
+
* 自动展开父节点(对齐 Semi `autoExpandParent`,默认 false)。
|
|
219
|
+
* - 初次挂载:把初始展开节点的祖先链一次性并入展开集,使其可见(非受控经 initExpanded);
|
|
220
|
+
* - 开启后交互约束:收起某父节点时,若它仍有展开的子孙,则**阻止收起**——需先收起所有
|
|
221
|
+
* 子节点才能收起父节点(对齐 Semi「需先收起子节点」)。
|
|
222
|
+
* 默认 false(收起不受此约束,父节点可直接收起)。
|
|
97
223
|
*/
|
|
98
224
|
autoExpandParent?: boolean;
|
|
99
225
|
/**
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
226
|
+
* 展开触发方式(对齐 Semi `expandAction`)。
|
|
227
|
+
* - `false`(默认):仅点击展开箭头(switcher)才展开/收起,点击行只做选中;
|
|
228
|
+
* - `'click'`:点击整行即展开/收起;
|
|
229
|
+
* - `'doubleClick'`:双击整行才展开/收起。
|
|
230
|
+
* 注意:switcher 箭头在任意模式下都可点击展开。
|
|
231
|
+
*/
|
|
232
|
+
expandAction?: false | 'click' | 'doubleClick';
|
|
233
|
+
/**
|
|
234
|
+
* 多选 value 自动合并父子(对齐 Semi `autoMergeValue`)。默认 true。
|
|
235
|
+
* 开启后,当某父节点被完全选中时,`onChange` 回传的 value 不再包含其子孙节点(仅保留父节点);
|
|
236
|
+
* 关闭则回传全部命中节点。仅在 `multiple` 联动(related)且 `leafOnly=false` 时有意义。
|
|
103
237
|
*/
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
238
|
+
autoMergeValue?: boolean;
|
|
239
|
+
/**
|
|
240
|
+
* label 超长省略(对齐 Semi `labelEllipsis`)。默认 false;`virtualize` 时默认 true。
|
|
241
|
+
* 开启后单行 label 超出容器宽度以省略号截断;关闭则不截断(可换行/溢出由外部控制)。
|
|
242
|
+
*/
|
|
243
|
+
labelEllipsis?: boolean;
|
|
244
|
+
/**
|
|
245
|
+
* 聚焦组件内节点时是否阻止浏览器滚动文档(对齐 Semi `preventScroll`,作用于内部 focus 调用)。
|
|
246
|
+
* 默认 false(聚焦时按需滚动至可见)。
|
|
247
|
+
*/
|
|
248
|
+
preventScroll?: boolean;
|
|
249
|
+
/** 显示层级连接线(父子引导线,对齐 Semi `showLine`)。默认 false。 */
|
|
108
250
|
showLine?: boolean;
|
|
109
|
-
/** 虚拟滚动:仅渲染视口内的可见节点行,适合大数据树(1000+ 节点)。默认 false(行为不变) */
|
|
110
|
-
virtualized?: boolean;
|
|
111
|
-
/** 虚拟滚动视口高度(px)。virtualized 时生效,默认 320 */
|
|
112
|
-
height?: number;
|
|
113
|
-
/** 虚拟滚动行高(px)。virtualized 时生效,默认取 token 行高 32 */
|
|
114
|
-
itemHeight?: number;
|
|
115
|
-
filterable?: boolean;
|
|
116
251
|
/**
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
252
|
+
* 列表虚拟化(对齐 Semi `virtualize`)。传入 `{ itemSize, height?, width? }` 对象即开启:
|
|
253
|
+
* 仅渲染视口内可见节点行,适合大数据树(1000+ 节点)。`itemSize`(行高 px)必传;
|
|
254
|
+
* `height` 默认 '100%'(需父节点有确定高度);开启后强制关闭动画。默认 undefined(不虚拟化)。
|
|
255
|
+
*/
|
|
256
|
+
virtualize?: Virtualize;
|
|
257
|
+
/**
|
|
258
|
+
* 是否根据输入项筛选(对齐 Semi `filterTreeNode`)。传 `true` 用内置谓词(按 `treeNodeFilterProp`
|
|
259
|
+
* 字段包含关键词,不区分大小写);传函数 `(input, node) => boolean` 自定义命中逻辑。
|
|
260
|
+
* 命中节点的祖先链自动展开。默认 false(不渲染搜索框、不过滤)。
|
|
120
261
|
*/
|
|
121
262
|
filterTreeNode?: boolean | ((input: string, node: TreeNodeData) => boolean);
|
|
122
263
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
264
|
+
* 内置搜索过滤匹配节点的哪个字段(对齐 Semi `treeNodeFilterProp`)。默认 `'label'`。
|
|
265
|
+
* 仅在使用内置谓词(未传 filterTreeNode 函数)时生效;传自定义谓词时由该函数自行决定匹配逻辑。
|
|
266
|
+
* 例如设 `'value'` 则按节点 value 字段匹配关键词。
|
|
125
267
|
*/
|
|
126
|
-
|
|
268
|
+
treeNodeFilterProp?: string;
|
|
269
|
+
/** 搜索框占位文案(对齐 Semi `searchPlaceholder`)。不传时用内置 i18n 文案。 */
|
|
270
|
+
searchPlaceholder?: string;
|
|
127
271
|
/**
|
|
128
|
-
*
|
|
272
|
+
* 自定义搜索框渲染(对齐 Semi `searchRender`)。
|
|
273
|
+
* - 传 snippet:用它替换内置搜索框,snippet 收到 { value, placeholder, onChange, onClear, className, style };
|
|
274
|
+
* - 传 `false`:隐藏内置搜索框(仍可经组件实例 `search()` 方法驱动过滤)。
|
|
275
|
+
* 仅在搜索开启(filterTreeNode)时有意义。
|
|
276
|
+
*/
|
|
277
|
+
searchRender?: false | Snippet<[SearchRenderContext]>;
|
|
278
|
+
/** 搜索框内联样式(对齐 Semi `searchStyle`,透传到搜索框 input 的 style)。 */
|
|
279
|
+
searchStyle?: string;
|
|
280
|
+
/** 搜索框附加 class(对齐 Semi `searchClassName`,追加到搜索框 input 的 class)。 */
|
|
281
|
+
searchClassName?: string;
|
|
282
|
+
/**
|
|
283
|
+
* 搜索框是否显示清除按钮(对齐 Semi `showClear`)。默认 true。
|
|
284
|
+
* 有输入内容时在搜索框尾部显示清除按钮,点击清空搜索词。
|
|
285
|
+
*/
|
|
286
|
+
showClear?: boolean;
|
|
287
|
+
/**
|
|
288
|
+
* 搜索状态下是否只展示过滤后的结果(对齐 Semi `showFilteredOnly`)。
|
|
289
|
+
* 默认 false:命中节点的祖先链自动展开,全树可见(未命中节点也渲染,仅命中项高亮)。
|
|
290
|
+
* true:搜索激活时只渲染命中节点及其祖先链,隐藏其它未命中且无命中后代的节点;
|
|
291
|
+
* 配合虚拟化可减少大数据树的多余渲染。默认 false(行为不变)。
|
|
292
|
+
*/
|
|
293
|
+
showFilteredOnly?: boolean;
|
|
294
|
+
/**
|
|
295
|
+
* 搜索关键词变化回调(对齐 Semi `onSearch`)。参数 (value, filteredExpandedKeys):
|
|
129
296
|
* - value:当前搜索词;
|
|
130
|
-
* -
|
|
297
|
+
* - filteredExpandedKeys:因搜索而展开的节点 key(命中节点的祖先链),配合展开受控使用。
|
|
131
298
|
*/
|
|
132
|
-
onSearch?: (value: string,
|
|
299
|
+
onSearch?: (value: string, filteredExpandedKeys: string[]) => void;
|
|
133
300
|
blockNode?: boolean;
|
|
134
301
|
disabled?: boolean;
|
|
135
|
-
size?: Size;
|
|
136
|
-
status?: Status;
|
|
137
302
|
emptyContent?: string;
|
|
138
303
|
ariaLabel?: string;
|
|
304
|
+
/** 根容器内联样式(对齐 Semi `style`)。可设 width/height/border 等;设 height 时列表区自动限高滚动。 */
|
|
305
|
+
style?: string;
|
|
306
|
+
/** 根元素自定义类名(对齐 Semi `className`;本库/Svelte 惯例用 `class`,叠加在内置 class 之后)。 */
|
|
307
|
+
class?: string;
|
|
139
308
|
/** 异步加载子节点:展开未加载的非叶子节点时调用,返回该节点的子节点数组 */
|
|
140
309
|
loadData?: (node: TreeNodeData) => Promise<TreeNodeData[]>;
|
|
310
|
+
/**
|
|
311
|
+
* 受控已加载节点 key(对齐 Semi `loadedKeys`)。传入时以此为准判断哪些节点已加载,
|
|
312
|
+
* 已在集合内的节点展开时不再触发 loadData。配合 loadData 使用;不传则由组件内部维护加载态。
|
|
313
|
+
*/
|
|
314
|
+
loadedKeys?: TreeKey[];
|
|
141
315
|
/** 异步加载完成回调 */
|
|
142
316
|
onLoad?: (loadedKeys: string[], info: { event: 'load'; node: TreeNodeData }) => void;
|
|
143
317
|
/** 启用 HTML5 拖拽排序:节点可拖动改变层级/顺序。默认 false(行为不变) */
|
|
144
318
|
draggable?: boolean;
|
|
319
|
+
/**
|
|
320
|
+
* 拖拽到节点上(inside)时是否自动展开该节点(对齐 Semi `autoExpandWhenDragEnter`)。默认 true。
|
|
321
|
+
* 关闭后拖到可展开节点内部时不再延时自动展开(需手动展开后再拖入)。仅 draggable 时有意义。
|
|
322
|
+
*/
|
|
323
|
+
autoExpandWhenDragEnter?: boolean;
|
|
324
|
+
/**
|
|
325
|
+
* 是否隐藏拖拽时跟随光标的拖拽影像 dragImg(对齐 Semi `hideDraggingNode`)。默认 false。
|
|
326
|
+
* 开启后设置透明 drag image,只保留组件内的插入指示线/高亮,不显示浏览器默认幽灵。仅 draggable 时有意义。
|
|
327
|
+
*/
|
|
328
|
+
hideDraggingNode?: boolean;
|
|
329
|
+
/**
|
|
330
|
+
* 自定义拖拽影像 dragImg 的 DOM 元素(对齐 Semi `renderDraggingNode`)。
|
|
331
|
+
* `(nodeInstance, node) => HTMLElement`:传入被拖拽行的 DOM 元素与节点数据,返回用作 drag image 的 HTML 元素。
|
|
332
|
+
* 优先级高于 `hideDraggingNode`;返回的元素须已在文档中(或离屏挂载)以便浏览器拾取。仅 draggable 时有意义。
|
|
333
|
+
*/
|
|
334
|
+
renderDraggingNode?: (nodeInstance: HTMLElement, node: TreeNodeData) => HTMLElement;
|
|
145
335
|
/** 放下时回调(受控数据,组件不内部改 treeData,由父组件按 info 重排)。 */
|
|
146
336
|
onDrop?: (info: DropInfo) => void;
|
|
147
|
-
/**
|
|
148
|
-
|
|
337
|
+
/** 节点双击回调(对齐 Semi `onDoubleClick`)。 */
|
|
338
|
+
onDoubleClick?: (e: MouseEvent, node: TreeNodeData) => void;
|
|
339
|
+
/** 节点右键菜单回调(对齐 Semi `onContextMenu`)。 */
|
|
340
|
+
onContextMenu?: (e: MouseEvent, node: TreeNodeData) => void;
|
|
149
341
|
/** 开始拖拽节点 */
|
|
150
342
|
onDragStart?: (node: TreeNodeData) => void;
|
|
151
343
|
/** 拖拽进入候选目标节点 */
|
|
152
344
|
onDragEnter?: (info: { dragNode: TreeNodeData; dropNode: TreeNodeData }) => void;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
345
|
+
/** 拖拽悬停在候选目标节点上(对齐 Semi `onDragOver`)。 */
|
|
346
|
+
onDragOver?: (info: { dragNode: TreeNodeData; dropNode: TreeNodeData }) => void;
|
|
347
|
+
/** 拖拽离开候选目标节点(对齐 Semi `onDragLeave`)。 */
|
|
348
|
+
onDragLeave?: (info: { dragNode: TreeNodeData; dropNode: TreeNodeData }) => void;
|
|
349
|
+
/** 拖拽结束(无论是否成功放下,对齐 Semi `onDragEnd`)。 */
|
|
350
|
+
onDragEnd?: (info: { dragNode: TreeNodeData }) => void;
|
|
351
|
+
/**
|
|
352
|
+
* 单个节点被选中时回调(对齐 Semi `onSelect`)。参数 (key, selected, node):
|
|
353
|
+
* 选中节点时触发,早于 onChange。key 为该节点 key,selected 为选中后状态。
|
|
354
|
+
*/
|
|
355
|
+
onSelect?: (key: TreeKey, selected: boolean, node: TreeNodeData) => void;
|
|
356
|
+
/**
|
|
357
|
+
* 选中变更回调(对齐 Semi `onChange`)。参数 value:
|
|
358
|
+
* - 单选:选中节点的 key(或 onChangeWithObject 时的节点对象);
|
|
359
|
+
* - 多选:选中节点 key 数组(含父子联动 / autoMergeValue / leafOnly 处理结果)。
|
|
360
|
+
*/
|
|
361
|
+
onChange?: (value: TreeValue) => void;
|
|
362
|
+
/**
|
|
363
|
+
* 展开/收起回调(对齐 Semi `onExpand`)。参数 (expandedKeys, { expanded, node }):
|
|
364
|
+
* expandedKeys 为变更后的全部展开 key,第二参含本次操作的展开态与节点。
|
|
365
|
+
*/
|
|
366
|
+
onExpand?: (
|
|
367
|
+
expandedKeys: TreeKey[],
|
|
368
|
+
info: { expanded: boolean; node: TreeNodeData },
|
|
369
|
+
) => void;
|
|
370
|
+
/** 自定义节点内容渲染(对齐 Semi `renderLabel`);参数含节点、层级、当前搜索词、选中/勾选态。 */
|
|
371
|
+
renderLabel?: Snippet<
|
|
157
372
|
[{ node: TreeNodeData; level: number; searchValue: string; selected: boolean; checked: boolean }]
|
|
158
373
|
>;
|
|
159
|
-
/**
|
|
374
|
+
/**
|
|
375
|
+
* 完全接管整行渲染(对齐 Semi `renderFullLabel`)。传入后忽略内置的 switcher/checkbox/icon/label
|
|
376
|
+
* 结构,由 snippet 用 FullLabelContext 自绘整行(含 class/expandIcon/checkStatus/回调)。
|
|
377
|
+
* 用于「叶子分组勾选」「单选高亮子节点」等高级场景。虚拟化时须把 ctx.style 赋给渲染根节点。
|
|
378
|
+
*/
|
|
379
|
+
renderFullLabel?: Snippet<[FullLabelContext]>;
|
|
380
|
+
/** 自定义节点图标(对齐 Semi `icon`);参数含节点、展开态与是否叶子。传入时渲染在 label 前。 */
|
|
160
381
|
icon?: Snippet<[{ node: TreeNodeData; expanded: boolean; isLeaf: boolean }]>;
|
|
161
382
|
/** 自定义展开/收起箭头;参数含节点、展开态与加载态 */
|
|
162
|
-
|
|
383
|
+
expandIcon?: Snippet<[{ node: TreeNodeData; expanded: boolean; loading: boolean }]>;
|
|
163
384
|
/** 节点尾部操作区(渲染在 label 右侧) */
|
|
164
385
|
suffix?: Snippet<[{ node: TreeNodeData }]>;
|
|
165
386
|
/** 自定义拖拽幽灵节点 */
|
|
@@ -168,54 +389,78 @@
|
|
|
168
389
|
|
|
169
390
|
let {
|
|
170
391
|
treeData = [],
|
|
171
|
-
|
|
392
|
+
treeDataSimpleJson,
|
|
393
|
+
keyMaps,
|
|
172
394
|
value,
|
|
173
395
|
defaultValue = null,
|
|
396
|
+
onChangeWithObject = false,
|
|
174
397
|
multiple = false,
|
|
175
|
-
checkable = false,
|
|
176
|
-
checkedKeys,
|
|
177
|
-
defaultCheckedKeys = [],
|
|
178
398
|
checkRelation = 'related',
|
|
179
|
-
|
|
399
|
+
disableStrictly = false,
|
|
400
|
+
leafOnly = false,
|
|
401
|
+
directory = false,
|
|
402
|
+
motion = true,
|
|
180
403
|
expandedKeys,
|
|
181
404
|
defaultExpandedKeys = [],
|
|
182
405
|
defaultExpandAll = false,
|
|
183
|
-
|
|
184
|
-
autoExpandParent =
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
406
|
+
expandAll = false,
|
|
407
|
+
autoExpandParent = false,
|
|
408
|
+
expandAction,
|
|
409
|
+
autoMergeValue = true,
|
|
410
|
+
labelEllipsis,
|
|
411
|
+
preventScroll = false,
|
|
188
412
|
showLine = false,
|
|
189
|
-
|
|
190
|
-
height = 320,
|
|
191
|
-
itemHeight = 32,
|
|
192
|
-
filterable = false,
|
|
413
|
+
virtualize,
|
|
193
414
|
filterTreeNode,
|
|
194
|
-
|
|
415
|
+
treeNodeFilterProp = 'label',
|
|
416
|
+
searchPlaceholder,
|
|
417
|
+
searchRender,
|
|
418
|
+
searchStyle,
|
|
419
|
+
searchClassName,
|
|
420
|
+
showClear = true,
|
|
421
|
+
showFilteredOnly = false,
|
|
195
422
|
onSearch,
|
|
196
|
-
blockNode =
|
|
423
|
+
blockNode = true,
|
|
197
424
|
disabled = false,
|
|
198
|
-
size = 'default',
|
|
199
|
-
status = 'default',
|
|
200
425
|
emptyContent,
|
|
201
426
|
ariaLabel,
|
|
427
|
+
style: rootStyle,
|
|
428
|
+
class: rootClassName,
|
|
202
429
|
loadData,
|
|
430
|
+
loadedKeys: loadedKeysProp,
|
|
203
431
|
onLoad,
|
|
204
432
|
draggable = false,
|
|
433
|
+
autoExpandWhenDragEnter = true,
|
|
434
|
+
hideDraggingNode = false,
|
|
435
|
+
renderDraggingNode,
|
|
205
436
|
onDrop,
|
|
206
|
-
|
|
437
|
+
onDoubleClick,
|
|
438
|
+
onContextMenu,
|
|
207
439
|
onDragStart,
|
|
208
440
|
onDragEnter,
|
|
441
|
+
onDragOver,
|
|
442
|
+
onDragLeave,
|
|
443
|
+
onDragEnd,
|
|
444
|
+
onSelect,
|
|
209
445
|
onChange,
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
446
|
+
onExpand,
|
|
447
|
+
renderLabel,
|
|
448
|
+
renderFullLabel,
|
|
213
449
|
icon,
|
|
214
|
-
|
|
450
|
+
expandIcon,
|
|
215
451
|
suffix,
|
|
216
452
|
dragGhost,
|
|
217
453
|
}: Props = $props();
|
|
218
454
|
|
|
455
|
+
// directory 目录树:默认整行块 + 点击整行展开(expandAction 未显式指定时按 'click')。
|
|
456
|
+
const effBlockNode = $derived(blockNode || directory);
|
|
457
|
+
const effExpandAction = $derived(expandAction ?? (directory ? 'click' : false));
|
|
458
|
+
// 虚拟化:virtualize 对象存在即开启;行高取 itemSize,视口高取 height(数字 px,字符串走 CSS)。
|
|
459
|
+
const virtualized = $derived(virtualize != null);
|
|
460
|
+
const virtualItemSize = $derived(virtualize?.itemSize ?? 32);
|
|
461
|
+
// motion:virtualize 时强制关闭动画(对齐 Semi)。
|
|
462
|
+
const motionEnabled = $derived(motion && !virtualized);
|
|
463
|
+
|
|
219
464
|
const loc = useLocale();
|
|
220
465
|
|
|
221
466
|
const baseId = useId('cd-tree-item');
|
|
@@ -224,16 +469,36 @@
|
|
|
224
469
|
return `${baseId}-${String(key)}`;
|
|
225
470
|
}
|
|
226
471
|
|
|
227
|
-
// ---
|
|
472
|
+
// --- keyMaps 字段映射:把用户自定义字段名的数据派生为标准 {key,label,children} 结构 ---
|
|
228
473
|
// 默认(全标准名)时直接返回原 treeData 引用,零额外开销(红线 #3);映射为纯 $derived(红线 #2),
|
|
229
474
|
// 不写回 treeData(红线 #1)。每个标准节点附带 __orig 指向用户原始节点,回调时回传原始数据。
|
|
230
|
-
const keyField = $derived(
|
|
231
|
-
const labelField = $derived(
|
|
232
|
-
const childrenField = $derived(
|
|
233
|
-
const
|
|
475
|
+
const keyField = $derived(keyMaps?.key ?? 'key');
|
|
476
|
+
const labelField = $derived(keyMaps?.label ?? 'label');
|
|
477
|
+
const childrenField = $derived(keyMaps?.children ?? 'children');
|
|
478
|
+
const keyMapsDefault = $derived(
|
|
234
479
|
keyField === 'key' && labelField === 'label' && childrenField === 'children',
|
|
235
480
|
);
|
|
236
481
|
|
|
482
|
+
// treeDataSimpleJson → TreeNodeData[]:扁平 { key: value } 转树(对齐 Semi)。
|
|
483
|
+
// key 同时作 key/label;原始值为对象则递归成子树,否则作叶子的 value。纯函数、不依赖响应式。
|
|
484
|
+
function simpleJsonToTree(json: Record<string, unknown>): TreeNodeData[] {
|
|
485
|
+
return Object.entries(json).map(([k, v]) => {
|
|
486
|
+
if (v !== null && typeof v === 'object' && !Array.isArray(v)) {
|
|
487
|
+
return {
|
|
488
|
+
key: k,
|
|
489
|
+
label: k,
|
|
490
|
+
children: simpleJsonToTree(v as Record<string, unknown>),
|
|
491
|
+
} as TreeNodeData;
|
|
492
|
+
}
|
|
493
|
+
return { key: k, label: k, value: v } as unknown as TreeNodeData;
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
// 实际数据源:treeData 非空时优先用它;否则若传了 treeDataSimpleJson 则转换之。
|
|
498
|
+
const sourceData = $derived<TreeNodeData[]>(
|
|
499
|
+
treeData.length > 0 || !treeDataSimpleJson ? treeData : simpleJsonToTree(treeDataSimpleJson),
|
|
500
|
+
);
|
|
501
|
+
|
|
237
502
|
function normalizeNodes(nodes: TreeNodeData[]): NormalizedNode[] {
|
|
238
503
|
const kf = keyField;
|
|
239
504
|
const lf = labelField;
|
|
@@ -253,21 +518,31 @@
|
|
|
253
518
|
});
|
|
254
519
|
}
|
|
255
520
|
|
|
256
|
-
//
|
|
521
|
+
// 标准化后的树:默认时即数据源原引用(零开销),否则递归映射字段名。
|
|
257
522
|
const normalizedData = $derived<TreeNodeData[]>(
|
|
258
|
-
|
|
523
|
+
keyMapsDefault ? sourceData : normalizeNodes(sourceData),
|
|
259
524
|
);
|
|
260
525
|
|
|
261
|
-
/** 回调回传:自定义
|
|
526
|
+
/** 回调回传:自定义 keyMaps 时回原始节点,否则回标准节点本身。 */
|
|
262
527
|
function toOrig(node: TreeNodeData): TreeNodeData {
|
|
263
528
|
const orig = (node as Partial<NormalizedNode>).__orig;
|
|
264
529
|
return (orig as TreeNodeData | undefined) ?? node;
|
|
265
530
|
}
|
|
266
531
|
|
|
532
|
+
/** 在合并树中按 key 查标准化节点(供 onChangeWithObject 还原节点对象等使用)。 */
|
|
533
|
+
function findMerged(key: TreeKey): TreeNodeData | undefined {
|
|
534
|
+
return findNode(mergedData, key);
|
|
535
|
+
}
|
|
536
|
+
|
|
267
537
|
// --- 异步加载:本地缓存子节点 + loading/loaded 标记(不写回受控 treeData,红线 #1)---
|
|
268
538
|
const loadedChildren = new SvelteMap<TreeKey, TreeNodeData[]>();
|
|
269
539
|
const loadingKeys = new SvelteSet<TreeKey>();
|
|
270
540
|
const loadedKeys = new SvelteSet<TreeKey>();
|
|
541
|
+
// 受控 loadedKeys(对齐 Semi):并入内部已加载集,判断加载态时两者取并。
|
|
542
|
+
const controlledLoaded = $derived(new Set<TreeKey>(loadedKeysProp ?? []));
|
|
543
|
+
function isLoaded(key: TreeKey): boolean {
|
|
544
|
+
return loadedKeys.has(key) || controlledLoaded.has(key);
|
|
545
|
+
}
|
|
271
546
|
|
|
272
547
|
// 合并树:把已加载的子节点注入对应节点,喂给所有 core 纯函数。
|
|
273
548
|
// 无加载时返回原 treeData 引用,零开销。
|
|
@@ -288,17 +563,17 @@
|
|
|
288
563
|
if (flatHasChildren) return true;
|
|
289
564
|
if (!loadData || node.isLeaf === true) return false;
|
|
290
565
|
// 已加载且为空 → 不可展开;未加载 → 显示箭头(异步占位)
|
|
291
|
-
if (
|
|
566
|
+
if (isLoaded(node.key)) return (loadedChildren.get(node.key)?.length ?? 0) > 0;
|
|
292
567
|
return true;
|
|
293
568
|
}
|
|
294
569
|
|
|
295
570
|
async function loadChildren(node: TreeNodeData) {
|
|
296
|
-
if (!loadData || loadingKeys.has(node.key) ||
|
|
571
|
+
if (!loadData || loadingKeys.has(node.key) || isLoaded(node.key)) return;
|
|
297
572
|
loadingKeys.add(node.key);
|
|
298
573
|
try {
|
|
299
|
-
// loadData 收到用户原始节点(自定义字段名形态),返回结果按
|
|
574
|
+
// loadData 收到用户原始节点(自定义字段名形态),返回结果按 keyMaps 标准化后缓存。
|
|
300
575
|
const kids = await loadData(toOrig(node));
|
|
301
|
-
loadedChildren.set(node.key,
|
|
576
|
+
loadedChildren.set(node.key, keyMapsDefault ? kids : normalizeNodes(kids));
|
|
302
577
|
} finally {
|
|
303
578
|
loadingKeys.delete(node.key);
|
|
304
579
|
loadedKeys.add(node.key);
|
|
@@ -307,127 +582,156 @@
|
|
|
307
582
|
}
|
|
308
583
|
|
|
309
584
|
// --- selection: 受控 value 不回写 (红线 #1) ---
|
|
585
|
+
// onChangeWithObject 时 value/defaultValue 为节点对象(或对象数组);内部 state 统一按 key 存储,
|
|
586
|
+
// 收发对象时用下面的 helper 在「对象 ↔ key」间转换。对象标识优先取 value 字段,缺省回退 key。
|
|
587
|
+
type ValueEntry = TreeKey | TreeNodeData;
|
|
588
|
+
/**
|
|
589
|
+
* 从一个 value 项(原始 key 或对象)提取内部节点标识 key。
|
|
590
|
+
* 本库节点身份为 key:对象优先取 `key`,缺省回退 `value`(对齐 Semi 对象含 value 键的约定)。
|
|
591
|
+
*/
|
|
592
|
+
function entryToKey(entry: ValueEntry): TreeKey | null {
|
|
593
|
+
if (entry !== null && typeof entry === 'object') {
|
|
594
|
+
const obj = entry as unknown as Record<string, unknown>;
|
|
595
|
+
const id = (obj.key ?? obj.value) as TreeKey | undefined;
|
|
596
|
+
return id ?? null;
|
|
597
|
+
}
|
|
598
|
+
return entry as TreeKey;
|
|
599
|
+
}
|
|
600
|
+
/** 把内部 key 转成回调/受控所需的输出形态:onChangeWithObject 时回原始节点对象,否则回 key。 */
|
|
601
|
+
function keyToOutput(key: TreeKey): TreeKey | TreeNodeData {
|
|
602
|
+
if (!onChangeWithObject) return key;
|
|
603
|
+
const node = findMerged(key);
|
|
604
|
+
return node ? toOrig(node) : key;
|
|
605
|
+
}
|
|
310
606
|
function initValue(): TreeKey | TreeKey[] | null {
|
|
311
|
-
|
|
312
|
-
|
|
607
|
+
const dv = defaultValue as ValueEntry | ValueEntry[] | null;
|
|
608
|
+
if (multiple) {
|
|
609
|
+
if (Array.isArray(dv)) return dv.map(entryToKey).filter((k): k is TreeKey => k !== null);
|
|
610
|
+
return dv === null || dv === undefined ? [] : ([entryToKey(dv)].filter((k): k is TreeKey => k !== null));
|
|
611
|
+
}
|
|
612
|
+
if (Array.isArray(dv)) return dv.length > 0 ? entryToKey(dv[0] as ValueEntry) : null;
|
|
613
|
+
return dv === null ? null : entryToKey(dv);
|
|
313
614
|
}
|
|
314
615
|
const isValueControlled = $derived(value !== undefined);
|
|
315
616
|
let innerValue = $state<TreeKey | TreeKey[] | null>(initValue());
|
|
316
|
-
|
|
317
|
-
|
|
617
|
+
// 受控 value:onChangeWithObject 时为对象形态,统一归一为内部 key 集合。
|
|
618
|
+
// 单选时集合含 0/1 个 key;多选时含全部选中 key(父子联动结果的 value 侧输入)。
|
|
619
|
+
const valueSet = $derived.by(() => {
|
|
318
620
|
const set = new Set<TreeKey>();
|
|
319
|
-
|
|
320
|
-
|
|
621
|
+
const src: TreeKey | TreeKey[] | null = isValueControlled
|
|
622
|
+
? (() => {
|
|
623
|
+
const v = value as ValueEntry | ValueEntry[] | null | undefined;
|
|
624
|
+
if (v === undefined || v === null) return multiple ? [] : null;
|
|
625
|
+
if (Array.isArray(v))
|
|
626
|
+
return v.map(entryToKey).filter((k): k is TreeKey => k !== null);
|
|
627
|
+
return entryToKey(v);
|
|
628
|
+
})()
|
|
629
|
+
: innerValue;
|
|
630
|
+
if (Array.isArray(src)) for (const k of src) set.add(k);
|
|
631
|
+
else if (src !== null) set.add(src);
|
|
321
632
|
return set;
|
|
322
633
|
});
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
const
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
isCheckControlled ? new Set(checkedKeys ?? []) : innerCheckedBase,
|
|
332
|
-
);
|
|
333
|
-
// 父子是否联动:checkStrictly 或 checkRelation==='unRelated' 任一开启即解耦(无联动、无半选)。
|
|
334
|
-
const checkLinked = $derived(!checkStrictly && checkRelation !== 'unRelated');
|
|
335
|
-
// 解耦时直接用 base 当 checked,无半选;联动时用 conduct 归一
|
|
634
|
+
// 单选高亮集:仅单选模式使用(多选无「选中高亮」,靠 checkbox 表达)。
|
|
635
|
+
const selectedSet = $derived(multiple ? new Set<TreeKey>() : valueSet);
|
|
636
|
+
|
|
637
|
+
// --- check(多选,对齐 Semi:multiple 驱动勾选,值走 value 通道)---
|
|
638
|
+
// 父子是否联动:checkRelation==='related'(默认)联动含半选;'unRelated' 解耦无联动无半选。
|
|
639
|
+
const checkLinked = $derived(checkRelation !== 'unRelated');
|
|
640
|
+
// 勾选态由 value(valueSet)派生:related 时用 conduct 归一(value 里的 key 视为已勾选,
|
|
641
|
+
// 补齐 checked/halfChecked,disableStrictly 锁定禁用节点);unRelated 时直接用 valueSet。
|
|
336
642
|
const checkState = $derived.by(() => {
|
|
643
|
+
if (!multiple) return { checked: new Set<TreeKey>(), half: new Set<TreeKey>() };
|
|
337
644
|
if (!checkLinked) {
|
|
338
|
-
return { checked: new Set(
|
|
645
|
+
return { checked: new Set(valueSet), half: new Set<TreeKey>() };
|
|
339
646
|
}
|
|
340
|
-
return conduct(mergedData,
|
|
647
|
+
return conduct(mergedData, valueSet, disableStrictly);
|
|
341
648
|
});
|
|
342
649
|
|
|
343
650
|
// --- expand: 受控 expandedKeys 不回写 (红线 #1) ---
|
|
344
651
|
function initExpanded(): Set<TreeKey> {
|
|
345
|
-
// 需用标准化后的 key(
|
|
346
|
-
const
|
|
347
|
-
|
|
652
|
+
// 需用标准化后的 key(keyMaps 自定义时 collectExpandable* 才能识别 children)。
|
|
653
|
+
const rawSource =
|
|
654
|
+
treeData.length > 0 || !treeDataSimpleJson
|
|
655
|
+
? treeData
|
|
656
|
+
: simpleJsonToTree(treeDataSimpleJson);
|
|
657
|
+
const base = keyMapsDefault ? rawSource : normalizeNodes(rawSource);
|
|
658
|
+
if (defaultExpandAll || expandAll) {
|
|
348
659
|
return new Set(collectExpandable(base));
|
|
349
660
|
}
|
|
350
|
-
// expandedDepth:展开 ≤N 层的有子节点(与 defaultExpandedKeys 取并集)。优先级低于 defaultExpandAll。
|
|
351
661
|
const init = new Set<TreeKey>(defaultExpandedKeys);
|
|
352
|
-
|
|
353
|
-
|
|
662
|
+
// autoExpandParent:初次挂载时把初始展开节点的祖先链一次性并入(对齐 Semi「初次挂载为 true」)。
|
|
663
|
+
// 仅初始化做一次,此后交互不再强制(否则父节点收不起)。受控 expandedKeys 由外部自行含父节点。
|
|
664
|
+
if (autoExpandParent && init.size > 0) {
|
|
665
|
+
for (const k of [...init]) collectAncestorsInto(base, k, init);
|
|
354
666
|
}
|
|
355
667
|
return init;
|
|
356
668
|
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
const baseExpandedSet = $derived(
|
|
360
|
-
isExpandControlled ? new Set(expandedKeys ?? []) : innerExpanded,
|
|
361
|
-
);
|
|
362
|
-
// autoExpandParent:展开节点的所有祖先也纳入展开集(派生,不写回,红线 #1)。
|
|
363
|
-
// 实现:对 baseExpandedSet 中每个 key,递归向上收集祖先 key(深度优先搜索)。
|
|
364
|
-
function collectAncestors(data: TreeNodeData[], targetKey: TreeKey, acc: Set<TreeKey>): boolean {
|
|
669
|
+
// 收集 targetKey 的祖先链并入 acc(DFS)。纯函数辅助,供 autoExpandParent 初始化用。
|
|
670
|
+
function collectAncestorsInto(data: TreeNodeData[], targetKey: TreeKey, acc: Set<TreeKey>): boolean {
|
|
365
671
|
for (const node of data) {
|
|
366
672
|
if (node.key === targetKey) return true;
|
|
367
|
-
if (node.children &&
|
|
673
|
+
if (node.children && collectAncestorsInto(node.children, targetKey, acc)) {
|
|
368
674
|
acc.add(node.key);
|
|
369
675
|
return true;
|
|
370
676
|
}
|
|
371
677
|
}
|
|
372
678
|
return false;
|
|
373
679
|
}
|
|
374
|
-
const
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
680
|
+
const isExpandControlled = $derived(expandedKeys !== undefined);
|
|
681
|
+
let innerExpanded = $state<Set<TreeKey>>(initExpanded());
|
|
682
|
+
// expandAll(对齐 Semi):数据(mergedData)变化时,非受控展开集重新展开全部——区别于
|
|
683
|
+
// defaultExpandAll 仅初始化生效。仅在 expandAll 且非受控时挂载此 effect(红线 #3 无副作用泄漏)。
|
|
684
|
+
$effect(() => {
|
|
685
|
+
if (!expandAll || isExpandControlled) return;
|
|
686
|
+
// 读取 mergedData 建立依赖:数据变化即重算全展开集。
|
|
687
|
+
innerExpanded = new Set(collectExpandable(mergedData));
|
|
381
688
|
});
|
|
689
|
+
const baseExpandedSet = $derived(
|
|
690
|
+
isExpandControlled ? new Set(expandedKeys ?? []) : innerExpanded,
|
|
691
|
+
);
|
|
692
|
+
// autoExpandParent(对齐 Semi:默认 false,「初次挂载时为 true」——仅初始化阶段把展开节点的
|
|
693
|
+
// 祖先链一次性并入展开集,使其可见;此后用户交互(收起父节点)以实际展开集为准,不再强制把
|
|
694
|
+
// 祖先加回,否则父节点将「收不起来」。实现:并祖先只在 initExpanded 里做一次;currentExpandedSet
|
|
695
|
+
// 直接用 baseExpandedSet(受控 expandedKeys 或非受控 innerExpanded),不再持续派生强制。
|
|
696
|
+
const currentExpandedSet = $derived(baseExpandedSet);
|
|
382
697
|
|
|
383
|
-
// ---
|
|
384
|
-
// 受控:searchValueProp 传入时直接用,input 事件仅触发 onSearch 回调,不更新内部 state(红线 #1)。
|
|
385
|
-
// 非受控:用内部 state,input 事件更新 innerSearchValue 并触发 onSearch。
|
|
386
|
-
const isSearchControlled = $derived(searchValueProp !== undefined);
|
|
698
|
+
// --- 搜索(对齐 Semi):内部非受控 state,input 事件更新 innerSearchValue 并触发 onSearch。---
|
|
387
699
|
let innerSearchValue = $state('');
|
|
388
|
-
const searchValue = $derived(
|
|
700
|
+
const searchValue = $derived(innerSearchValue);
|
|
389
701
|
const trimmedSearch = $derived(searchValue.trim());
|
|
390
|
-
// 搜索框是否渲染/启用:
|
|
391
|
-
const searchEnabled = $derived(
|
|
702
|
+
// 搜索框是否渲染/启用:filterTreeNode 为 true 或自定义谓词函数即开启(对齐 Semi)。
|
|
703
|
+
const searchEnabled = $derived(filterTreeNode === true || typeof filterTreeNode === 'function');
|
|
392
704
|
const searchActive = $derived(searchEnabled && trimmedSearch.length > 0);
|
|
393
705
|
// 过滤谓词:传函数则用自定义 (input, node);否则内置 label 包含(不区分大小写)。
|
|
706
|
+
// 内置谓词按 treeNodeFilterProp 指定字段匹配(默认 label);字段缺省回退 label。
|
|
707
|
+
function nodeFilterText(node: TreeNodeData): string {
|
|
708
|
+
const raw = (node as unknown as Record<string, unknown>)[treeNodeFilterProp];
|
|
709
|
+
const v = raw ?? node.label;
|
|
710
|
+
return v == null ? '' : String(v);
|
|
711
|
+
}
|
|
394
712
|
const matchPredicate = $derived.by(() => {
|
|
395
713
|
if (typeof filterTreeNode === 'function') {
|
|
396
714
|
const fn = filterTreeNode;
|
|
397
|
-
// 回传原始节点(
|
|
715
|
+
// 回传原始节点(keyMaps 自定义时),与其它回调一致。
|
|
398
716
|
return (node: TreeNodeData) => fn(trimmedSearch, toOrig(node));
|
|
399
717
|
}
|
|
400
718
|
const lower = trimmedSearch.toLowerCase();
|
|
401
|
-
return (node: TreeNodeData) => node.
|
|
719
|
+
return (node: TreeNodeData) => nodeFilterText(node).toLowerCase().includes(lower);
|
|
402
720
|
});
|
|
403
721
|
const filterResult = $derived.by(() => {
|
|
404
722
|
if (!searchActive) return { matched: new Set<TreeKey>(), expand: new Set<TreeKey>() };
|
|
405
723
|
return computeFilteredKeys(mergedData, matchPredicate);
|
|
406
724
|
});
|
|
407
725
|
|
|
408
|
-
//
|
|
409
|
-
function
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
if (trimmed.length > 0 && searchEnabled) {
|
|
418
|
-
let pred: (node: TreeNodeData) => boolean;
|
|
419
|
-
if (typeof filterTreeNode === 'function') {
|
|
420
|
-
const fn = filterTreeNode;
|
|
421
|
-
pred = (node: TreeNodeData) => fn(trimmed, toOrig(node));
|
|
422
|
-
} else {
|
|
423
|
-
const lower = trimmed.toLowerCase();
|
|
424
|
-
pred = (node: TreeNodeData) => node.label.toLowerCase().includes(lower);
|
|
425
|
-
}
|
|
426
|
-
const result = computeFilteredKeys(mergedData, pred);
|
|
427
|
-
fKeys = [...result.matched].map(String);
|
|
428
|
-
}
|
|
429
|
-
onSearch(val, fKeys);
|
|
430
|
-
}
|
|
726
|
+
// 供 searchRender 自定义搜索框的 onChange 回调(直接接受值)。
|
|
727
|
+
function handleSearchValue(val: string) {
|
|
728
|
+
search(val);
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
// 清除搜索:清空内部 state 并回调 onSearch('')。
|
|
732
|
+
function clearSearch() {
|
|
733
|
+
innerSearchValue = '';
|
|
734
|
+
onSearch?.('', []);
|
|
431
735
|
}
|
|
432
736
|
|
|
433
737
|
// 搜索激活时把过滤展开集并入可见展开集(派生,不写回)
|
|
@@ -440,9 +744,10 @@
|
|
|
440
744
|
|
|
441
745
|
// --- 可见扁平节点 ---
|
|
442
746
|
const flat = $derived(flattenVisible(mergedData, effectiveExpanded));
|
|
443
|
-
//
|
|
747
|
+
// showFilteredOnly(对齐 Semi):搜索激活时仅保留命中节点及其祖先链(expand 集即祖先链 +
|
|
748
|
+
// 自身有命中后代者),隐藏其它未命中节点。默认 false 时展示全树(命中项高亮、祖先自动展开)。
|
|
444
749
|
const visibleFlat = $derived.by(() => {
|
|
445
|
-
if (!searchActive) return flat;
|
|
750
|
+
if (!searchActive || !showFilteredOnly) return flat;
|
|
446
751
|
return flat.filter(
|
|
447
752
|
(f) => filterResult.matched.has(f.node.key) || filterResult.expand.has(f.node.key),
|
|
448
753
|
);
|
|
@@ -467,17 +772,64 @@
|
|
|
467
772
|
const VIRTUAL_OVERSCAN = 4;
|
|
468
773
|
// viewport 元素普通引用(bind:this),不参与响应式几何读取。
|
|
469
774
|
let viewportEl = $state<HTMLDivElement | null>(null);
|
|
775
|
+
// 非虚拟化时的 role=tree 容器引用,供命令式 focus() 使用(preventScroll 传递给此处)。
|
|
776
|
+
let listEl = $state<HTMLDivElement | null>(null);
|
|
777
|
+
|
|
778
|
+
/**
|
|
779
|
+
* 命令式聚焦树容器(对齐 Semi 组件内 focus 方法)。
|
|
780
|
+
* 尊重 preventScroll:为 true 时聚焦不触发浏览器滚动文档。可经组件实例调用。
|
|
781
|
+
*/
|
|
782
|
+
export function focus(): void {
|
|
783
|
+
const el = viewportEl ?? listEl;
|
|
784
|
+
el?.focus({ preventScroll });
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
/**
|
|
788
|
+
* 命令式触发搜索(对齐 Semi `search` 方法)。写入内部搜索词并触发过滤/回调。
|
|
789
|
+
* 常配合 searchRender={false}(隐藏内置搜索框)使用,由外部输入框驱动。
|
|
790
|
+
* onSearch 第二参回传 filteredExpandedKeys(因搜索而展开的祖先链 key,对齐 Semi)。
|
|
791
|
+
*/
|
|
792
|
+
export function search(value: string): void {
|
|
793
|
+
innerSearchValue = value;
|
|
794
|
+
if (onSearch) {
|
|
795
|
+
const trimmed = value.trim();
|
|
796
|
+
let expandKeys: string[] = [];
|
|
797
|
+
if (trimmed.length > 0 && searchEnabled) {
|
|
798
|
+
let pred: (node: TreeNodeData) => boolean;
|
|
799
|
+
if (typeof filterTreeNode === 'function') {
|
|
800
|
+
const fn = filterTreeNode;
|
|
801
|
+
pred = (n: TreeNodeData) => fn(trimmed, toOrig(n));
|
|
802
|
+
} else {
|
|
803
|
+
const lower = trimmed.toLowerCase();
|
|
804
|
+
pred = (n: TreeNodeData) => nodeFilterText(n).toLowerCase().includes(lower);
|
|
805
|
+
}
|
|
806
|
+
// filteredExpandedKeys:命中节点的祖先链(computeFilteredKeys 的 expand 集),供展开受控回写。
|
|
807
|
+
expandKeys = [...computeFilteredKeys(mergedData, pred).expand].map(String);
|
|
808
|
+
}
|
|
809
|
+
onSearch(value, expandKeys);
|
|
810
|
+
}
|
|
811
|
+
}
|
|
470
812
|
// 仅由命令式 scroll 回调写入的本地 scrollTop,render 期只读。
|
|
471
813
|
let scrollTop = $state(0);
|
|
472
814
|
// rAF 节流句柄(非响应式)。
|
|
473
815
|
let rafId = 0;
|
|
474
816
|
|
|
475
|
-
|
|
817
|
+
// labelEllipsis:未显式传时默认跟随虚拟化(虚拟化下默认省略,对齐 Semi)。
|
|
818
|
+
const ellipsis = $derived(labelEllipsis ?? virtualized);
|
|
819
|
+
|
|
820
|
+
// 虚拟化视口高度(数字 px 用于几何计算;字符串 '100%' 走 CSS,几何回退 320)。
|
|
821
|
+
const virtualHeightCss = $derived<string>(
|
|
822
|
+
typeof virtualize?.height === 'number'
|
|
823
|
+
? `${virtualize.height}px`
|
|
824
|
+
: (virtualize?.height as string | undefined) ?? '100%',
|
|
825
|
+
);
|
|
826
|
+
const virtualHeightPx = $derived(typeof virtualize?.height === 'number' ? virtualize.height : 320);
|
|
827
|
+
const rowHeight = $derived(virtualItemSize > 0 ? virtualItemSize : 32);
|
|
476
828
|
const totalHeight = $derived(visibleFlat.length * rowHeight);
|
|
477
829
|
// 可视区间:纯 $derived,仅依赖本地 $state,render-safe(不读 DOM)(红线 #2)。
|
|
478
830
|
const vRange = $derived(
|
|
479
831
|
virtualized
|
|
480
|
-
? fixedRange(scrollTop,
|
|
832
|
+
? fixedRange(scrollTop, virtualHeightPx, rowHeight, visibleFlat.length, VIRTUAL_OVERSCAN)
|
|
481
833
|
: { startIndex: 0, endIndex: visibleFlat.length },
|
|
482
834
|
);
|
|
483
835
|
// 实际喂给 #each 的行集合:virtualized 时只取视口内切片,否则全量。
|
|
@@ -528,83 +880,162 @@
|
|
|
528
880
|
scrollIndexIntoView(i);
|
|
529
881
|
}
|
|
530
882
|
|
|
883
|
+
/**
|
|
884
|
+
* 命令式滚动到指定节点(对齐 Semi `scrollTo` 方法)。仅虚拟化 Tree 生效,
|
|
885
|
+
* 目标须为当前已展开(可见)节点。align 决定对齐位置,默认 'center'。
|
|
886
|
+
*/
|
|
887
|
+
export function scrollTo(opts: {
|
|
888
|
+
key: TreeKey;
|
|
889
|
+
align?: 'center' | 'start' | 'end' | 'smart' | 'auto';
|
|
890
|
+
}): void {
|
|
891
|
+
const el = viewportEl;
|
|
892
|
+
if (!el || !virtualized) return;
|
|
893
|
+
const index = visibleFlat.findIndex((f) => f.node.key === opts.key);
|
|
894
|
+
if (index < 0) return;
|
|
895
|
+
const align = opts.align ?? 'center';
|
|
896
|
+
const itemStart = index * rowHeight;
|
|
897
|
+
if (align === 'center') {
|
|
898
|
+
const target = itemStart - (el.clientHeight - rowHeight) / 2;
|
|
899
|
+
const clamped = Math.max(0, Math.min(target, totalHeight - el.clientHeight));
|
|
900
|
+
el.scrollTop = clamped;
|
|
901
|
+
scrollTop = clamped;
|
|
902
|
+
return;
|
|
903
|
+
}
|
|
904
|
+
if (align === 'auto' || align === 'smart') {
|
|
905
|
+
scrollIndexIntoView(index);
|
|
906
|
+
return;
|
|
907
|
+
}
|
|
908
|
+
// start / end:复用 core scrollOffsetForIndex。
|
|
909
|
+
const target = scrollOffsetForIndex(itemStart, rowHeight, el.clientHeight, totalHeight, align);
|
|
910
|
+
el.scrollTop = target;
|
|
911
|
+
scrollTop = target;
|
|
912
|
+
}
|
|
913
|
+
|
|
531
914
|
function isNodeDisabled(node: TreeNodeData): boolean {
|
|
532
915
|
return disabled || !!node.disabled;
|
|
533
916
|
}
|
|
534
917
|
|
|
918
|
+
// 单选:非多选模式下、未禁用的节点可点击选中。
|
|
535
919
|
function isSelectable(node: TreeNodeData): boolean {
|
|
536
|
-
return
|
|
920
|
+
return !multiple && !isNodeDisabled(node);
|
|
537
921
|
}
|
|
538
922
|
|
|
923
|
+
// 多选勾选:多选模式下、未禁用的节点可勾选。
|
|
539
924
|
function isCheckableNode(node: TreeNodeData): boolean {
|
|
540
|
-
return
|
|
925
|
+
return multiple && !isNodeDisabled(node);
|
|
541
926
|
}
|
|
542
927
|
|
|
543
928
|
function isExpanded(key: TreeKey): boolean {
|
|
544
929
|
return effectiveExpanded.has(key);
|
|
545
930
|
}
|
|
546
931
|
|
|
932
|
+
// autoMergeValue(对齐 Semi):从 checked 集中剔除「有已选中祖先」的后代 key,
|
|
933
|
+
// 使某父节点被完全选中时输出仅保留该父节点,不含其子孙。纯函数,不修改入参。
|
|
934
|
+
function mergeCheckedKeys(data: TreeNodeData[], checked: Set<TreeKey>): TreeKey[] {
|
|
935
|
+
const out: TreeKey[] = [];
|
|
936
|
+
const walk = (nodes: TreeNodeData[], ancestorChecked: boolean) => {
|
|
937
|
+
for (const n of nodes) {
|
|
938
|
+
const selfChecked = checked.has(n.key);
|
|
939
|
+
const isLeaf = !n.children || n.children.length === 0;
|
|
940
|
+
// 仅当自身被选中且无已选中祖先时保留(顶层完全选中节点)。
|
|
941
|
+
if (selfChecked && !ancestorChecked) out.push(n.key);
|
|
942
|
+
// disableStrictly 下,被选中的 disabled 叶子必须显式保留——即便其父级已完全选中:
|
|
943
|
+
// 受控回填时父级 key 经 conduct 无法把 disabled 叶子重新联动勾上(disabled 不受父级联动),
|
|
944
|
+
// 若被合并剔除就会丢失该叶子的勾选态(对齐 Semi disableStrictly 语义)。
|
|
945
|
+
else if (
|
|
946
|
+
disableStrictly &&
|
|
947
|
+
selfChecked &&
|
|
948
|
+
ancestorChecked &&
|
|
949
|
+
isLeaf &&
|
|
950
|
+
!!n.disabled
|
|
951
|
+
) {
|
|
952
|
+
out.push(n.key);
|
|
953
|
+
}
|
|
954
|
+
if (n.children && n.children.length > 0) {
|
|
955
|
+
walk(n.children, ancestorChecked || selfChecked);
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
};
|
|
959
|
+
walk(data, false);
|
|
960
|
+
return out;
|
|
961
|
+
}
|
|
962
|
+
|
|
547
963
|
// --- 状态写入:仅非受控写 inner,受控只回调 (红线 #1) ---
|
|
964
|
+
// 把内部选中 key 集转成 onChange/受控所需的 value 输出形态(多选数组 / 单选标量;
|
|
965
|
+
// onChangeWithObject 时元素转节点对象)。
|
|
966
|
+
function toChangeValue(keys: TreeKey[], singleKey: TreeKey | null): TreeValue {
|
|
967
|
+
if (multiple) return keys.map(keyToOutput) as Array<TreeKey | TreeNodeData>;
|
|
968
|
+
return singleKey === null ? ('' as TreeKey) : keyToOutput(singleKey);
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
// 单选:点击整行选中该节点(对齐 Semi 单选,值为单个 key)。
|
|
548
972
|
function emitSelect(node: TreeNodeData) {
|
|
549
973
|
if (!isSelectable(node)) return;
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
if (idx >= 0) {
|
|
556
|
-
arr.splice(idx, 1);
|
|
557
|
-
selected = false;
|
|
558
|
-
} else {
|
|
559
|
-
arr.push(node.key);
|
|
560
|
-
selected = true;
|
|
561
|
-
}
|
|
562
|
-
next = arr;
|
|
563
|
-
} else {
|
|
564
|
-
// 单选:点击直接选中该节点(不取消),selected 恒为 true
|
|
565
|
-
next = node.key;
|
|
566
|
-
selected = true;
|
|
567
|
-
}
|
|
568
|
-
if (!isValueControlled) innerValue = next;
|
|
569
|
-
onChange?.({ value: next, node: toOrig(node), selected });
|
|
974
|
+
const nextKey = node.key;
|
|
975
|
+
if (!isValueControlled) innerValue = nextKey;
|
|
976
|
+
// onSelect(对齐 Semi):早于 onChange,回传 (key, selected, node)。单选点击恒为选中。
|
|
977
|
+
onSelect?.(node.key, true, toOrig(node));
|
|
978
|
+
onChange?.(toChangeValue([nextKey], nextKey));
|
|
570
979
|
}
|
|
571
980
|
|
|
981
|
+
// 多选:勾选/取消勾选该节点,父子联动,值走 value 通道(对齐 Semi multiple + onChange)。
|
|
572
982
|
function emitCheck(node: TreeNodeData) {
|
|
573
983
|
if (!isCheckableNode(node)) return;
|
|
574
|
-
|
|
984
|
+
// 以当前 checkState.checked 作为勾选基集切换(valueSet 经 conduct 归一后的完整勾选集)。
|
|
985
|
+
let nextChecked: Set<TreeKey>;
|
|
575
986
|
if (!checkLinked) {
|
|
576
|
-
// 解耦(
|
|
577
|
-
|
|
578
|
-
if (
|
|
579
|
-
else
|
|
987
|
+
// 解耦(unRelated):仅翻转该节点自身,不触达父子。
|
|
988
|
+
nextChecked = new Set(checkState.checked);
|
|
989
|
+
if (nextChecked.has(node.key)) nextChecked.delete(node.key);
|
|
990
|
+
else nextChecked.add(node.key);
|
|
580
991
|
} else {
|
|
581
|
-
|
|
992
|
+
nextChecked = toggleCheck(mergedData, checkState.checked, node.key, disableStrictly);
|
|
582
993
|
}
|
|
583
|
-
if (!isCheckControlled) innerCheckedBase = nextBase;
|
|
584
994
|
const resolved = !checkLinked
|
|
585
|
-
? { checked: new Set(
|
|
586
|
-
: conduct(mergedData,
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
995
|
+
? { checked: new Set(nextChecked), half: new Set<TreeKey>() }
|
|
996
|
+
: conduct(mergedData, nextChecked, disableStrictly);
|
|
997
|
+
// 是否勾选后为选中态(供 onSelect 语义)。
|
|
998
|
+
const selected = resolved.checked.has(node.key);
|
|
999
|
+
// 输出优先级:leafOnly(只留叶子)> autoMergeValue(合并父子、剔除已选祖先的后代)> 全量。
|
|
1000
|
+
let checkedOut: TreeKey[];
|
|
1001
|
+
if (leafOnly) {
|
|
1002
|
+
checkedOut = collectLeafKeys(mergedData, resolved.checked);
|
|
1003
|
+
} else if (autoMergeValue && checkLinked) {
|
|
1004
|
+
checkedOut = mergeCheckedKeys(mergedData, resolved.checked);
|
|
1005
|
+
} else {
|
|
1006
|
+
checkedOut = [...resolved.checked];
|
|
1007
|
+
}
|
|
1008
|
+
if (!isValueControlled) innerValue = checkedOut;
|
|
1009
|
+
// onSelect(对齐 Semi):早于 onChange,回传 (key, selected, node)。
|
|
1010
|
+
onSelect?.(node.key, selected, toOrig(node));
|
|
1011
|
+
onChange?.(toChangeValue(checkedOut, null));
|
|
592
1012
|
}
|
|
593
1013
|
|
|
594
1014
|
function emitExpand(node: TreeNodeData, expand: boolean) {
|
|
595
|
-
// accordion:展开时同层级只保留一个,自动收起同父级其它已展开节点(纯函数 core,红线 #2)。
|
|
596
|
-
// 不同层级互不影响;收起仅移除自身。受控时也只回调收起 siblings 后的新集,不回写(红线 #1)。
|
|
597
1015
|
let next: Set<TreeKey>;
|
|
598
1016
|
if (expand) {
|
|
599
|
-
next =
|
|
600
|
-
? accordionExpand(mergedData, currentExpandedSet, node.key)
|
|
601
|
-
: new Set(currentExpandedSet).add(node.key);
|
|
1017
|
+
next = new Set(currentExpandedSet).add(node.key);
|
|
602
1018
|
} else {
|
|
1019
|
+
// autoExpandParent(对齐 Semi):收起某节点时,若其仍有展开中的子孙,则阻止收起——
|
|
1020
|
+
// 需先收起所有子节点才能收起父节点。无展开子孙时正常收起。
|
|
1021
|
+
if (autoExpandParent && hasExpandedDescendant(node, currentExpandedSet)) {
|
|
1022
|
+
return;
|
|
1023
|
+
}
|
|
603
1024
|
next = new Set(currentExpandedSet);
|
|
604
1025
|
next.delete(node.key);
|
|
605
1026
|
}
|
|
606
1027
|
if (!isExpandControlled) innerExpanded = next;
|
|
607
|
-
|
|
1028
|
+
onExpand?.([...next], { expanded: expand, node: toOrig(node) });
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
// 节点是否有仍在展开集中的子孙(供 autoExpandParent 判断「父节点能否收起」)。
|
|
1032
|
+
function hasExpandedDescendant(node: TreeNodeData, expandedSet: ReadonlySet<TreeKey>): boolean {
|
|
1033
|
+
if (!node.children) return false;
|
|
1034
|
+
for (const child of node.children) {
|
|
1035
|
+
if (expandedSet.has(child.key)) return true;
|
|
1036
|
+
if (hasExpandedDescendant(child, expandedSet)) return true;
|
|
1037
|
+
}
|
|
1038
|
+
return false;
|
|
608
1039
|
}
|
|
609
1040
|
|
|
610
1041
|
function toggleExpand(node: TreeNodeData) {
|
|
@@ -612,7 +1043,7 @@
|
|
|
612
1043
|
if (!isExpandable(node, hasOwnKids)) return;
|
|
613
1044
|
const willExpand = !isExpanded(node.key);
|
|
614
1045
|
// 展开未加载的异步节点:先取数据再展开(数据到位后合并树派生即显示子节点)
|
|
615
|
-
if (willExpand && !hasOwnKids && loadData && !
|
|
1046
|
+
if (willExpand && !hasOwnKids && loadData && !isLoaded(node.key)) {
|
|
616
1047
|
void loadChildren(node);
|
|
617
1048
|
}
|
|
618
1049
|
emitExpand(node, willExpand);
|
|
@@ -621,8 +1052,24 @@
|
|
|
621
1052
|
function onRowClick(node: TreeNodeData) {
|
|
622
1053
|
if (isNodeDisabled(node)) return;
|
|
623
1054
|
activeKey = node.key;
|
|
624
|
-
|
|
625
|
-
|
|
1055
|
+
const expandable = isExpandable(node, (node.children?.length ?? 0) > 0);
|
|
1056
|
+
if (isSelectable(node)) {
|
|
1057
|
+
emitSelect(node);
|
|
1058
|
+
// expandAction='click':可选中节点点击整行时,选中与展开同时发生(对齐 Semi)。
|
|
1059
|
+
if (effExpandAction === 'click' && expandable) toggleExpand(node);
|
|
1060
|
+
} else if (expandable) {
|
|
1061
|
+
// 不可选中的可展开节点:默认点击即展开(沿用原行为),expandAction='click' 语义一致,不重复触发。
|
|
1062
|
+
toggleExpand(node);
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
// 节点双击:先回调 onDoubleClick;expandAction='doubleClick' 时再触发展开/收起。
|
|
1067
|
+
function onRowDblClick(e: MouseEvent, node: TreeNodeData) {
|
|
1068
|
+
if (isNodeDisabled(node)) return;
|
|
1069
|
+
onDoubleClick?.(e, toOrig(node));
|
|
1070
|
+
if (effExpandAction === 'doubleClick' && isExpandable(node, (node.children?.length ?? 0) > 0)) {
|
|
1071
|
+
toggleExpand(node);
|
|
1072
|
+
}
|
|
626
1073
|
}
|
|
627
1074
|
|
|
628
1075
|
// --- 键盘导航 (红线 #2: 全部基于派生 visibleFlat 与 activeKey) ---
|
|
@@ -684,7 +1131,7 @@
|
|
|
684
1131
|
if (next.has(sib.node.key)) continue;
|
|
685
1132
|
// 触发未加载异步节点的子节点拉取(数据到位后合并树派生显示)。
|
|
686
1133
|
const hasOwnKids = (sib.node.children?.length ?? 0) > 0;
|
|
687
|
-
if (!hasOwnKids && loadData && !
|
|
1134
|
+
if (!hasOwnKids && loadData && !isLoaded(sib.node.key)) {
|
|
688
1135
|
void loadChildren(sib.node);
|
|
689
1136
|
}
|
|
690
1137
|
next.add(sib.node.key);
|
|
@@ -693,8 +1140,8 @@
|
|
|
693
1140
|
}
|
|
694
1141
|
if (!changed || lastNode === null) return;
|
|
695
1142
|
if (!isExpandControlled) innerExpanded = next;
|
|
696
|
-
// 一次性回调(node 取最后展开者,
|
|
697
|
-
|
|
1143
|
+
// 一次性回调(node 取最后展开者,expanded=true);受控时不回写(红线 #1)。
|
|
1144
|
+
onExpand?.([...next], { expanded: true, node: toOrig(lastNode) });
|
|
698
1145
|
}
|
|
699
1146
|
|
|
700
1147
|
// typeahead:连续输入字符在可见节点间按 label 前缀跳转(APG,spec §6)。
|
|
@@ -866,6 +1313,18 @@
|
|
|
866
1313
|
e.dataTransfer.effectAllowed = 'move';
|
|
867
1314
|
// 必须 setData 否则部分浏览器不触发 drop。
|
|
868
1315
|
e.dataTransfer.setData('text/plain', String(node.key));
|
|
1316
|
+
// 自定义拖拽影像:renderDraggingNode 优先,其次 hideDraggingNode 用透明图隐藏默认幽灵。
|
|
1317
|
+
const rowEl = e.currentTarget as HTMLElement;
|
|
1318
|
+
if (renderDraggingNode) {
|
|
1319
|
+
const custom = renderDraggingNode(rowEl, toOrig(node));
|
|
1320
|
+
if (custom) e.dataTransfer.setDragImage(custom, 0, 0);
|
|
1321
|
+
} else if (hideDraggingNode) {
|
|
1322
|
+
// 1x1 透明图片:绝大多数浏览器据此隐藏默认 dragImg。
|
|
1323
|
+
const img = new Image();
|
|
1324
|
+
img.src =
|
|
1325
|
+
'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';
|
|
1326
|
+
e.dataTransfer.setDragImage(img, 0, 0);
|
|
1327
|
+
}
|
|
869
1328
|
}
|
|
870
1329
|
onDragStart?.(toOrig(node));
|
|
871
1330
|
}
|
|
@@ -894,8 +1353,18 @@
|
|
|
894
1353
|
}
|
|
895
1354
|
dropKey = node.key;
|
|
896
1355
|
dropPos = pos;
|
|
897
|
-
//
|
|
898
|
-
if (
|
|
1356
|
+
// onDragOver(对齐 Semi):每次悬停在候选目标上回传。
|
|
1357
|
+
if (onDragOver) {
|
|
1358
|
+
const dragNode = findFlatNode(dragKey);
|
|
1359
|
+
if (dragNode) onDragOver({ dragNode: toOrig(dragNode), dropNode: toOrig(node) });
|
|
1360
|
+
}
|
|
1361
|
+
// 拖到内部时自动展开目标(便于放入),延时避免误触。autoExpandWhenDragEnter=false 时关闭。
|
|
1362
|
+
if (
|
|
1363
|
+
autoExpandWhenDragEnter &&
|
|
1364
|
+
pos === 'inside' &&
|
|
1365
|
+
isExpandable(node, f.hasChildren) &&
|
|
1366
|
+
!isExpanded(node.key)
|
|
1367
|
+
) {
|
|
899
1368
|
if (expandTimer === undefined) {
|
|
900
1369
|
expandTimer = setTimeout(() => {
|
|
901
1370
|
expandTimer = undefined;
|
|
@@ -912,6 +1381,11 @@
|
|
|
912
1381
|
const related = e.relatedTarget as Node | null;
|
|
913
1382
|
const cur = e.currentTarget as HTMLElement;
|
|
914
1383
|
if (related && cur.contains(related)) return;
|
|
1384
|
+
// onDragLeave(对齐 Semi):真正离开该行时回传。
|
|
1385
|
+
if (onDragLeave && dragKey !== null) {
|
|
1386
|
+
const dragNode = findFlatNode(dragKey);
|
|
1387
|
+
if (dragNode) onDragLeave({ dragNode: toOrig(dragNode), dropNode: toOrig(node) });
|
|
1388
|
+
}
|
|
915
1389
|
if (dropKey === node.key) {
|
|
916
1390
|
clearExpandTimer();
|
|
917
1391
|
dropKey = null;
|
|
@@ -938,6 +1412,11 @@
|
|
|
938
1412
|
}
|
|
939
1413
|
|
|
940
1414
|
function onNodeDragEnd() {
|
|
1415
|
+
// onDragEnd(对齐 Semi):拖拽结束无论是否成功放下都回传被拖节点。
|
|
1416
|
+
if (onDragEnd && dragKey !== null) {
|
|
1417
|
+
const dragNode = findFlatNode(dragKey);
|
|
1418
|
+
if (dragNode) onDragEnd({ dragNode: toOrig(dragNode) });
|
|
1419
|
+
}
|
|
941
1420
|
resetDrag();
|
|
942
1421
|
}
|
|
943
1422
|
|
|
@@ -946,25 +1425,6 @@
|
|
|
946
1425
|
return f?.node;
|
|
947
1426
|
}
|
|
948
1427
|
|
|
949
|
-
// --- 搜索高亮:把命中子串包 <mark>,返回片段数组供模板渲染 ---
|
|
950
|
-
type Part = { text: string; mark: boolean };
|
|
951
|
-
function highlightParts(text: string): Part[] {
|
|
952
|
-
if (!searchActive) return [{ text, mark: false }];
|
|
953
|
-
const lower = text.toLowerCase();
|
|
954
|
-
const term = trimmedSearch.toLowerCase();
|
|
955
|
-
const parts: Part[] = [];
|
|
956
|
-
let from = 0;
|
|
957
|
-
let idx = lower.indexOf(term, from);
|
|
958
|
-
while (idx !== -1) {
|
|
959
|
-
if (idx > from) parts.push({ text: text.slice(from, idx), mark: false });
|
|
960
|
-
parts.push({ text: text.slice(idx, idx + term.length), mark: true });
|
|
961
|
-
from = idx + term.length;
|
|
962
|
-
idx = lower.indexOf(term, from);
|
|
963
|
-
}
|
|
964
|
-
if (from < text.length) parts.push({ text: text.slice(from), mark: false });
|
|
965
|
-
return parts;
|
|
966
|
-
}
|
|
967
|
-
|
|
968
1428
|
function rowChecked(node: TreeNodeData): boolean {
|
|
969
1429
|
return checkState.checked.has(node.key);
|
|
970
1430
|
}
|
|
@@ -980,28 +1440,69 @@
|
|
|
980
1440
|
const cls = $derived(
|
|
981
1441
|
[
|
|
982
1442
|
'cd-tree',
|
|
983
|
-
`cd-tree--${size}`,
|
|
984
|
-
`cd-tree--${status}`,
|
|
985
1443
|
disabled && 'cd-tree--disabled',
|
|
986
1444
|
showLine && 'cd-tree--line',
|
|
1445
|
+
effBlockNode && 'cd-tree--block',
|
|
1446
|
+
directory && 'cd-tree--directory',
|
|
1447
|
+
motionEnabled && 'cd-tree--motion',
|
|
1448
|
+
rootClassName,
|
|
987
1449
|
]
|
|
988
1450
|
.filter(Boolean)
|
|
989
1451
|
.join(' '),
|
|
990
1452
|
);
|
|
1453
|
+
|
|
1454
|
+
// renderFullLabel 上下文构造:把内置计算好的状态与行为回调封装给使用者 snippet。
|
|
1455
|
+
// className 汇总内置状态类(缩进由 padding 处理,此处给状态类),供自定义渲染沿用内置样式。
|
|
1456
|
+
function fullLabelClass(f: FlatNode, selected: boolean, nodeDisabled: boolean, active: boolean): string {
|
|
1457
|
+
return [
|
|
1458
|
+
'cd-tree__node',
|
|
1459
|
+
`cd-tree__node--fulllabel`,
|
|
1460
|
+
`cd-tree__node--level-${f.level + 1}`,
|
|
1461
|
+
selected && 'cd-tree__node--selected',
|
|
1462
|
+
nodeDisabled && 'cd-tree__node--disabled',
|
|
1463
|
+
active && 'cd-tree__node--active',
|
|
1464
|
+
]
|
|
1465
|
+
.filter(Boolean)
|
|
1466
|
+
.join(' ');
|
|
1467
|
+
}
|
|
991
1468
|
</script>
|
|
992
1469
|
|
|
993
|
-
<div class={cls}>
|
|
994
|
-
{#if searchEnabled}
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
{
|
|
1004
|
-
|
|
1470
|
+
<div class={cls} style={rootStyle}>
|
|
1471
|
+
{#if searchEnabled && searchRender !== false}
|
|
1472
|
+
{@const placeholder = searchPlaceholder ?? loc().t('Tree.searchPlaceholder')}
|
|
1473
|
+
<!-- 搜索框容器(对齐 Semi tree-search-wrapper:paddingY 8 / paddingX 12) -->
|
|
1474
|
+
<div
|
|
1475
|
+
class={['cd-tree__search', searchClassName].filter(Boolean).join(' ')}
|
|
1476
|
+
style={searchStyle}
|
|
1477
|
+
>
|
|
1478
|
+
{#if searchRender}
|
|
1479
|
+
<!-- 自定义搜索框(对齐 Semi searchRender):透传 inputProps,使用者可原样传给 Input。 -->
|
|
1480
|
+
{@render searchRender({
|
|
1481
|
+
value: searchValue,
|
|
1482
|
+
placeholder,
|
|
1483
|
+
onChange: handleSearchValue,
|
|
1484
|
+
onClear: clearSearch,
|
|
1485
|
+
showClear,
|
|
1486
|
+
className: searchClassName,
|
|
1487
|
+
style: searchStyle,
|
|
1488
|
+
disabled,
|
|
1489
|
+
})}
|
|
1490
|
+
{:else}
|
|
1491
|
+
<!-- 内置搜索框复用库内 Input:IconSearch 前缀 + clearable(对齐 Semi 用 Input + showClear)。 -->
|
|
1492
|
+
<Input
|
|
1493
|
+
value={searchValue}
|
|
1494
|
+
{placeholder}
|
|
1495
|
+
ariaLabel={placeholder}
|
|
1496
|
+
{disabled}
|
|
1497
|
+
{showClear}
|
|
1498
|
+
onInput={handleSearchValue}
|
|
1499
|
+
onClear={clearSearch}
|
|
1500
|
+
>
|
|
1501
|
+
{#snippet prefix()}
|
|
1502
|
+
<IconSearch />
|
|
1503
|
+
{/snippet}
|
|
1504
|
+
</Input>
|
|
1505
|
+
{/if}
|
|
1005
1506
|
</div>
|
|
1006
1507
|
{/if}
|
|
1007
1508
|
|
|
@@ -1014,12 +1515,12 @@
|
|
|
1014
1515
|
class="cd-tree__list cd-tree__list--virtual"
|
|
1015
1516
|
role="tree"
|
|
1016
1517
|
aria-label={ariaLabel}
|
|
1017
|
-
aria-multiselectable={multiple
|
|
1518
|
+
aria-multiselectable={multiple}
|
|
1018
1519
|
aria-activedescendant={activeDescId}
|
|
1019
1520
|
aria-disabled={disabled || undefined}
|
|
1020
1521
|
tabindex={disabled ? -1 : 0}
|
|
1021
1522
|
bind:this={viewportEl}
|
|
1022
|
-
style={`block-size:${
|
|
1523
|
+
style={`block-size:${virtualHeightCss}; overflow:auto`}
|
|
1023
1524
|
onkeydown={onKeydown}
|
|
1024
1525
|
>
|
|
1025
1526
|
<div class="cd-tree__spacer" style={`block-size:${totalHeight}px`}>
|
|
@@ -1033,10 +1534,11 @@
|
|
|
1033
1534
|
class="cd-tree__list"
|
|
1034
1535
|
role="tree"
|
|
1035
1536
|
aria-label={ariaLabel}
|
|
1036
|
-
aria-multiselectable={multiple
|
|
1537
|
+
aria-multiselectable={multiple}
|
|
1037
1538
|
aria-activedescendant={activeDescId}
|
|
1038
1539
|
aria-disabled={disabled || undefined}
|
|
1039
1540
|
tabindex={disabled ? -1 : 0}
|
|
1541
|
+
bind:this={listEl}
|
|
1040
1542
|
onkeydown={onKeydown}
|
|
1041
1543
|
>
|
|
1042
1544
|
{#each visibleFlat as f (f.node.key)}
|
|
@@ -1046,6 +1548,18 @@
|
|
|
1046
1548
|
{/if}
|
|
1047
1549
|
</div>
|
|
1048
1550
|
|
|
1551
|
+
{#snippet fullLabelSwitcher(s: { expanded: boolean; loading: boolean })}
|
|
1552
|
+
{#if s.loading}
|
|
1553
|
+
<span class="cd-tree__switcher cd-tree__switcher--loading" aria-hidden="true">
|
|
1554
|
+
<Spin size="small" />
|
|
1555
|
+
</span>
|
|
1556
|
+
{:else}
|
|
1557
|
+
<span class="cd-tree__switcher" class:cd-tree__switcher--open={s.expanded} aria-hidden="true">
|
|
1558
|
+
<IconTreeTriangleDown size="small" />
|
|
1559
|
+
</span>
|
|
1560
|
+
{/if}
|
|
1561
|
+
{/snippet}
|
|
1562
|
+
|
|
1049
1563
|
{#snippet row(f: FlatNode, posStyle: string | undefined)}
|
|
1050
1564
|
{@const node = f.node}
|
|
1051
1565
|
{@const expandable = isExpandable(node, f.hasChildren)}
|
|
@@ -1057,7 +1571,28 @@
|
|
|
1057
1571
|
{@const active = activeKey === node.key}
|
|
1058
1572
|
{@const dragging = dragKey === node.key}
|
|
1059
1573
|
{@const isDropTarget = dropKey === node.key}
|
|
1060
|
-
{@const indentStyle = showLine ? '' : `padding-inline-start: calc(${f.level} * var(--cd-tree-
|
|
1574
|
+
{@const indentStyle = showLine ? '' : `padding-inline-start: calc(var(--cd-spacing-tree-option-level1-padding-left) + ${f.level} * var(--cd-spacing-tree-option-level-padding-left))`}
|
|
1575
|
+
{#if renderFullLabel}
|
|
1576
|
+
<!-- renderFullLabel:整行完全由使用者接管(对齐 Semi)。提供内置状态类/图标/回调,
|
|
1577
|
+
使用者自绘结构;虚拟化时须把 ctx.style 赋给渲染根节点。 -->
|
|
1578
|
+
{@render renderFullLabel({
|
|
1579
|
+
data: toOrig(node),
|
|
1580
|
+
level: f.level,
|
|
1581
|
+
style: [posStyle, indentStyle].filter(Boolean).join('; ') || undefined,
|
|
1582
|
+
className: fullLabelClass(f, selected, nodeDisabled, active),
|
|
1583
|
+
expandIcon: fullLabelSwitcher,
|
|
1584
|
+
isLeaf: !expandable,
|
|
1585
|
+
checkStatus: { checked, halfChecked: rowHalf(node) },
|
|
1586
|
+
expandStatus: { expanded, loading },
|
|
1587
|
+
filtered: searchActive && filterResult.matched.has(node.key),
|
|
1588
|
+
searchWord: trimmedSearch,
|
|
1589
|
+
onClick: () => onRowClick(node),
|
|
1590
|
+
onCheck: () => emitCheck(node),
|
|
1591
|
+
onExpand: () => toggleExpand(node),
|
|
1592
|
+
onContextMenu: (e: MouseEvent) => { e.preventDefault(); onContextMenu?.(e, toOrig(node)); },
|
|
1593
|
+
onDoubleClick: (e: MouseEvent) => onRowDblClick(e, node),
|
|
1594
|
+
})}
|
|
1595
|
+
{:else}
|
|
1061
1596
|
<!-- treeitem 焦点经容器 aria-activedescendant 漫游管理,行本身 tabindex=-1,键盘统一在 role=tree 容器处理 -->
|
|
1062
1597
|
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
1063
1598
|
<div
|
|
@@ -1066,7 +1601,7 @@
|
|
|
1066
1601
|
class:cd-tree__node--selected={selected}
|
|
1067
1602
|
class:cd-tree__node--disabled={nodeDisabled}
|
|
1068
1603
|
class:cd-tree__node--active={active}
|
|
1069
|
-
class:cd-tree__node--block={
|
|
1604
|
+
class:cd-tree__node--block={effBlockNode}
|
|
1070
1605
|
class:cd-tree__node--dragging={dragging}
|
|
1071
1606
|
class:cd-tree__node--drop-before={isDropTarget && dropPos === 'before'}
|
|
1072
1607
|
class:cd-tree__node--drop-inside={isDropTarget && dropPos === 'inside'}
|
|
@@ -1078,12 +1613,15 @@
|
|
|
1078
1613
|
aria-setsize={f.setSize}
|
|
1079
1614
|
aria-posinset={f.posInSet}
|
|
1080
1615
|
aria-expanded={expandable ? expanded : undefined}
|
|
1081
|
-
aria-selected={
|
|
1082
|
-
aria-checked={
|
|
1616
|
+
aria-selected={!multiple ? selected : undefined}
|
|
1617
|
+
aria-checked={multiple ? ariaCheckedValue(node) : undefined}
|
|
1083
1618
|
aria-disabled={nodeDisabled || undefined}
|
|
1084
1619
|
style={[posStyle, indentStyle].filter(Boolean).join('; ') || undefined}
|
|
1085
1620
|
onclick={() => onRowClick(node)}
|
|
1086
|
-
|
|
1621
|
+
ondblclick={onDoubleClick || effExpandAction === 'doubleClick'
|
|
1622
|
+
? (e) => onRowDblClick(e, node)
|
|
1623
|
+
: undefined}
|
|
1624
|
+
oncontextmenu={onContextMenu ? (e) => { e.preventDefault(); onContextMenu(e, toOrig(node)); } : undefined}
|
|
1087
1625
|
ondragstart={draggable ? (e) => onNodeDragStart(e, node) : undefined}
|
|
1088
1626
|
ondragover={draggable ? (e) => onNodeDragOver(e, f) : undefined}
|
|
1089
1627
|
ondragleave={draggable ? (e) => onNodeDragLeave(e, node) : undefined}
|
|
@@ -1104,15 +1642,16 @@
|
|
|
1104
1642
|
{/each}
|
|
1105
1643
|
{/if}
|
|
1106
1644
|
{#if loading}
|
|
1107
|
-
{#if
|
|
1108
|
-
{@render
|
|
1645
|
+
{#if expandIcon}
|
|
1646
|
+
{@render expandIcon({ node, expanded: false, loading: true })}
|
|
1109
1647
|
{:else}
|
|
1648
|
+
<!-- 加载态复用 Spin 组件(对齐 Semi Tree 内部用 Spin) -->
|
|
1110
1649
|
<span class="cd-tree__switcher cd-tree__switcher--loading" aria-hidden="true">
|
|
1111
|
-
<
|
|
1650
|
+
<Spin size="small" />
|
|
1112
1651
|
</span>
|
|
1113
1652
|
{/if}
|
|
1114
1653
|
{:else if expandable}
|
|
1115
|
-
{#if
|
|
1654
|
+
{#if expandIcon}
|
|
1116
1655
|
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
1117
1656
|
<span
|
|
1118
1657
|
role="button"
|
|
@@ -1123,7 +1662,7 @@
|
|
|
1123
1662
|
if (!nodeDisabled) toggleExpand(node);
|
|
1124
1663
|
}}
|
|
1125
1664
|
>
|
|
1126
|
-
{@render
|
|
1665
|
+
{@render expandIcon({ node, expanded, loading: false })}
|
|
1127
1666
|
</span>
|
|
1128
1667
|
{:else}
|
|
1129
1668
|
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
@@ -1138,69 +1677,68 @@
|
|
|
1138
1677
|
if (!nodeDisabled) toggleExpand(node);
|
|
1139
1678
|
}}
|
|
1140
1679
|
>
|
|
1141
|
-
<
|
|
1142
|
-
<path fill="currentColor" d="M6 4l4 4-4 4V4Z" />
|
|
1143
|
-
</svg>
|
|
1680
|
+
<IconTreeTriangleDown size="small" />
|
|
1144
1681
|
</span>
|
|
1145
1682
|
{/if}
|
|
1146
1683
|
{:else}
|
|
1147
|
-
{#if
|
|
1148
|
-
{@render
|
|
1684
|
+
{#if expandIcon}
|
|
1685
|
+
{@render expandIcon({ node, expanded: false, loading: false })}
|
|
1149
1686
|
{:else}
|
|
1150
1687
|
<span class="cd-tree__switcher cd-tree__switcher--leaf" aria-hidden="true"></span>
|
|
1151
1688
|
{/if}
|
|
1152
1689
|
{/if}
|
|
1153
1690
|
|
|
1154
|
-
{#if
|
|
1691
|
+
{#if multiple}
|
|
1692
|
+
<!-- 勾选框复用 Checkbox 组件(对齐 Semi Tree 内部用 Checkbox)。
|
|
1693
|
+
交互由 Checkbox 自身的 onChange 触发 emitCheck(不要在外层容器加 onclick——
|
|
1694
|
+
Checkbox 内部是 label+input,点 label 会双触发 click,导致 toggle 抵消)。
|
|
1695
|
+
外层 span 仅阻止点击冒泡到行(避免额外触发行选中/展开)。 -->
|
|
1696
|
+
<!-- span 仅拦截冒泡、非交互元素(交互由内部 Checkbox 承载),故忽略静态元素交互告警 -->
|
|
1697
|
+
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
1698
|
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
1155
1699
|
<span
|
|
1156
1700
|
class="cd-tree__checkbox"
|
|
1157
|
-
|
|
1158
|
-
class:cd-tree__checkbox--half={!checked && rowHalf(node)}
|
|
1159
|
-
class:cd-tree__checkbox--disabled={!isCheckableNode(node)}
|
|
1160
|
-
role="button"
|
|
1161
|
-
tabindex="-1"
|
|
1162
|
-
aria-hidden="true"
|
|
1163
|
-
onclick={(e) => {
|
|
1164
|
-
e.stopPropagation();
|
|
1165
|
-
emitCheck(node);
|
|
1166
|
-
}}
|
|
1701
|
+
onclick={(e) => e.stopPropagation()}
|
|
1167
1702
|
>
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
stroke-linejoin="round"
|
|
1176
|
-
d="M3.5 8.5l3 3 6-6.5"
|
|
1177
|
-
/>
|
|
1178
|
-
</svg>
|
|
1179
|
-
{:else if rowHalf(node)}
|
|
1180
|
-
<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true" focusable="false">
|
|
1181
|
-
<path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M4 8h8" />
|
|
1182
|
-
</svg>
|
|
1183
|
-
{/if}
|
|
1703
|
+
<Checkbox
|
|
1704
|
+
checked={checked}
|
|
1705
|
+
indeterminate={!checked && rowHalf(node)}
|
|
1706
|
+
disabled={!isCheckableNode(node)}
|
|
1707
|
+
ariaLabel={node.label}
|
|
1708
|
+
onChange={() => emitCheck(node)}
|
|
1709
|
+
/>
|
|
1184
1710
|
</span>
|
|
1185
1711
|
{/if}
|
|
1186
1712
|
|
|
1187
|
-
{#if
|
|
1713
|
+
{#if icon || directory}
|
|
1188
1714
|
{@const isLeaf = !expandable}
|
|
1189
|
-
<span class="cd-tree__icon" aria-hidden="true">
|
|
1190
|
-
{#if icon}
|
|
1715
|
+
<span class="cd-tree__icon" class:cd-tree__icon--directory={directory && !icon} aria-hidden="true">
|
|
1716
|
+
{#if icon}
|
|
1717
|
+
{@render icon({ node, expanded, isLeaf })}
|
|
1718
|
+
{:else if directory}
|
|
1719
|
+
<!-- directory 模式内置目录/文件图标(对齐 Semi IconFolder/IconFolderOpen/IconFile);可用 icon snippet 覆盖 -->
|
|
1720
|
+
{#if isLeaf}
|
|
1721
|
+
<IconFile />
|
|
1722
|
+
{:else if expanded}
|
|
1723
|
+
<IconFolderOpen />
|
|
1724
|
+
{:else}
|
|
1725
|
+
<IconFolder />
|
|
1726
|
+
{/if}
|
|
1727
|
+
{/if}
|
|
1191
1728
|
</span>
|
|
1192
1729
|
{/if}
|
|
1193
1730
|
|
|
1194
|
-
<span class="cd-tree__label">
|
|
1195
|
-
{#if
|
|
1196
|
-
{@render
|
|
1197
|
-
{:else}
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
{
|
|
1202
|
-
|
|
1203
|
-
|
|
1731
|
+
<span class="cd-tree__label" class:cd-tree__label--ellipsis={ellipsis}>
|
|
1732
|
+
{#if renderLabel}
|
|
1733
|
+
{@render renderLabel({ node, level: f.level, searchValue: trimmedSearch, selected, checked })}
|
|
1734
|
+
{:else if searchActive}
|
|
1735
|
+
<!-- 搜索命中高亮复用 Highlight 组件(对齐 Semi Tree 内部用 Highlight) -->
|
|
1736
|
+
<Highlight
|
|
1737
|
+
sourceString={node.label}
|
|
1738
|
+
searchWords={trimmedSearch}
|
|
1739
|
+
highlightClassName="cd-tree__highlight"
|
|
1740
|
+
/>
|
|
1741
|
+
{:else}{node.label}{/if}
|
|
1204
1742
|
</span>
|
|
1205
1743
|
|
|
1206
1744
|
{#if suffix}
|
|
@@ -1215,6 +1753,7 @@
|
|
|
1215
1753
|
</span>
|
|
1216
1754
|
{/if}
|
|
1217
1755
|
</div>
|
|
1756
|
+
{/if}
|
|
1218
1757
|
{/snippet}
|
|
1219
1758
|
|
|
1220
1759
|
<style>
|
|
@@ -1223,8 +1762,11 @@
|
|
|
1223
1762
|
display: flex;
|
|
1224
1763
|
flex-direction: column;
|
|
1225
1764
|
gap: var(--cd-spacing-extra-tight);
|
|
1226
|
-
color: var(--cd-tree-
|
|
1227
|
-
font-size: var(--cd-font-size
|
|
1765
|
+
color: var(--cd-color-tree-option-text-default);
|
|
1766
|
+
font-size: var(--cd-tree-node-font-size);
|
|
1767
|
+
box-sizing: border-box;
|
|
1768
|
+
/* 通过 style prop 设 height 时生效:容器不溢出,由列表区自身滚动 */
|
|
1769
|
+
overflow: hidden;
|
|
1228
1770
|
}
|
|
1229
1771
|
.cd-tree--small {
|
|
1230
1772
|
--cd-tree-row-height: var(--cd-tree-node-height-small);
|
|
@@ -1233,39 +1775,30 @@
|
|
|
1233
1775
|
--cd-tree-row-height: var(--cd-tree-node-height-large);
|
|
1234
1776
|
}
|
|
1235
1777
|
.cd-tree--disabled {
|
|
1236
|
-
color: var(--cd-tree-
|
|
1778
|
+
color: var(--cd-color-tree-option-disabled-text-default);
|
|
1237
1779
|
}
|
|
1238
1780
|
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
padding
|
|
1243
|
-
|
|
1244
|
-
background: var(--cd-color-bg-1, transparent);
|
|
1245
|
-
border: 1px solid var(--cd-tree-border-color);
|
|
1246
|
-
border-radius: var(--cd-radius-small, 4px);
|
|
1247
|
-
font: inherit;
|
|
1248
|
-
}
|
|
1249
|
-
.cd-tree--warning .cd-tree__search-input {
|
|
1250
|
-
border-color: var(--cd-tree-border-color-warning);
|
|
1251
|
-
}
|
|
1252
|
-
.cd-tree--error .cd-tree__search-input {
|
|
1253
|
-
border-color: var(--cd-tree-border-color-error);
|
|
1254
|
-
}
|
|
1255
|
-
.cd-tree__search-input:focus-visible {
|
|
1256
|
-
outline: none;
|
|
1257
|
-
border-color: var(--cd-tree-focus-ring);
|
|
1258
|
-
box-shadow: 0 0 0 2px var(--cd-tree-focus-ring);
|
|
1781
|
+
/* 搜索框容器:对齐 Semi tree-search-wrapper(paddingY 8 / paddingX 12)。
|
|
1782
|
+
内部搜索框复用 Input 组件,边框/清除/聚焦样式由 Input 自带(无需 Tree 再写)。 */
|
|
1783
|
+
.cd-tree__search {
|
|
1784
|
+
padding: var(--cd-spacing-tree-search-wrapper-padding-y)
|
|
1785
|
+
var(--cd-spacing-tree-search-wrapper-padding-x);
|
|
1259
1786
|
}
|
|
1260
1787
|
|
|
1261
1788
|
.cd-tree__list {
|
|
1262
1789
|
display: flex;
|
|
1263
1790
|
flex-direction: column;
|
|
1264
1791
|
outline: none;
|
|
1792
|
+
/* 对齐 Semi tree-option-list(paddingY 8 / paddingX 0;flex:1 占满剩余高度,超出滚动) */
|
|
1793
|
+
padding: var(--cd-spacing-tree-option-list-padding-y) var(--cd-spacing-tree-option-list-padding-x);
|
|
1794
|
+
flex: 1 1 auto;
|
|
1795
|
+
min-block-size: 0;
|
|
1796
|
+
overflow-y: auto;
|
|
1797
|
+
overflow-x: hidden;
|
|
1265
1798
|
}
|
|
1266
1799
|
.cd-tree__list:focus-visible {
|
|
1267
1800
|
box-shadow: 0 0 0 2px var(--cd-tree-focus-ring);
|
|
1268
|
-
border-radius: var(--cd-radius-
|
|
1801
|
+
border-radius: var(--cd-radius-tree-checkbox-addon);
|
|
1269
1802
|
}
|
|
1270
1803
|
/* 虚拟滚动:容器自身滚动,display block 以便 spacer 绝对定位行布局生效 */
|
|
1271
1804
|
.cd-tree__list--virtual {
|
|
@@ -1282,23 +1815,38 @@
|
|
|
1282
1815
|
align-items: center;
|
|
1283
1816
|
gap: var(--cd-spacing-extra-tight);
|
|
1284
1817
|
block-size: var(--cd-tree-row-height);
|
|
1285
|
-
|
|
1286
|
-
|
|
1818
|
+
/* 首层左内边距 + 行右内边距(对齐 Semi $spacing-tree_option_level1-paddingLeft 8px) */
|
|
1819
|
+
padding-inline: var(--cd-spacing-tree-option-level1-padding-left);
|
|
1820
|
+
border-radius: var(--cd-radius-tree-checkbox-addon);
|
|
1287
1821
|
cursor: pointer;
|
|
1288
1822
|
transition: background-color var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
|
|
1289
1823
|
}
|
|
1290
1824
|
.cd-tree__node:hover {
|
|
1291
|
-
background: var(--cd-tree-
|
|
1825
|
+
background: var(--cd-color-tree-option-bg-hover);
|
|
1826
|
+
}
|
|
1827
|
+
/* 按下态(对齐 Semi $color-tree_option_selected-bg-default = fill-1) */
|
|
1828
|
+
.cd-tree__node:active {
|
|
1829
|
+
background: var(--cd-color-tree-option-selected-bg-default);
|
|
1292
1830
|
}
|
|
1293
1831
|
.cd-tree__node--selected {
|
|
1294
|
-
color: var(--cd-tree-
|
|
1295
|
-
background: var(--cd-tree-
|
|
1832
|
+
color: var(--cd-color-tree-option-text-default);
|
|
1833
|
+
background: var(--cd-color-tree-option-bg-active);
|
|
1834
|
+
}
|
|
1835
|
+
.cd-tree__node--selected:hover,
|
|
1836
|
+
.cd-tree__node--selected:active {
|
|
1837
|
+
background: var(--cd-color-tree-option-bg-active);
|
|
1296
1838
|
}
|
|
1297
|
-
|
|
1298
|
-
|
|
1839
|
+
/* 键盘 roving 焦点(当前项):对齐 Semi 无 border,仅用背景区分;焦点可见性靠背景差异。 */
|
|
1840
|
+
.cd-tree__node--active:not(.cd-tree__node--selected) {
|
|
1841
|
+
background: var(--cd-color-tree-option-bg-hover);
|
|
1842
|
+
}
|
|
1843
|
+
/* 键盘操作时(容器 focus-visible 内)给当前项一个可见焦点环,鼠标交互不显示 border。 */
|
|
1844
|
+
.cd-tree__list:focus-visible .cd-tree__node--active {
|
|
1845
|
+
outline: 2px solid var(--cd-tree-focus-ring);
|
|
1846
|
+
outline-offset: -2px;
|
|
1299
1847
|
}
|
|
1300
1848
|
.cd-tree__node--disabled {
|
|
1301
|
-
color: var(--cd-tree-
|
|
1849
|
+
color: var(--cd-color-tree-option-disabled-text-default);
|
|
1302
1850
|
cursor: not-allowed;
|
|
1303
1851
|
}
|
|
1304
1852
|
.cd-tree__node--disabled:hover {
|
|
@@ -1306,6 +1854,14 @@
|
|
|
1306
1854
|
}
|
|
1307
1855
|
|
|
1308
1856
|
/* --- 拖拽排序:被拖节点半透明 + 插入指示线 / 内部高亮 --- */
|
|
1857
|
+
/* 可拖拽行的内边距(对齐 Semi $spacing-tree_option_draggable-paddingY 2 / paddingX 0) */
|
|
1858
|
+
.cd-tree__node[draggable='true'] {
|
|
1859
|
+
padding-block: var(--cd-spacing-tree-option-draggable-padding-y);
|
|
1860
|
+
padding-inline-end: calc(
|
|
1861
|
+
var(--cd-spacing-tree-option-level1-padding-left) +
|
|
1862
|
+
var(--cd-spacing-tree-option-draggable-padding-x)
|
|
1863
|
+
);
|
|
1864
|
+
}
|
|
1309
1865
|
.cd-tree__node--dragging {
|
|
1310
1866
|
opacity: 0.5;
|
|
1311
1867
|
}
|
|
@@ -1315,8 +1871,8 @@
|
|
|
1315
1871
|
content: '';
|
|
1316
1872
|
position: absolute;
|
|
1317
1873
|
inset-inline: 0;
|
|
1318
|
-
block-size:
|
|
1319
|
-
background: var(--cd-tree-
|
|
1874
|
+
block-size: var(--cd-width-tree-option-draggable-border);
|
|
1875
|
+
background: var(--cd-color-tree-option-draggable-insert-border-default);
|
|
1320
1876
|
border-radius: 1px;
|
|
1321
1877
|
pointer-events: none;
|
|
1322
1878
|
}
|
|
@@ -1328,8 +1884,8 @@
|
|
|
1328
1884
|
}
|
|
1329
1885
|
/* inside:成为子节点 → 整行高亮框 */
|
|
1330
1886
|
.cd-tree__node--drop-inside {
|
|
1331
|
-
background: var(--cd-tree-
|
|
1332
|
-
box-shadow: inset 0 0 0 1px var(--cd-tree-
|
|
1887
|
+
background: var(--cd-color-tree-option-bg-hover);
|
|
1888
|
+
box-shadow: inset 0 0 0 1px var(--cd-color-tree-option-draggable-insert-border-default);
|
|
1333
1889
|
}
|
|
1334
1890
|
/* 节点需相对定位以承载绝对定位的指示线;虚拟化行已 position:absolute,非虚拟行设 relative */
|
|
1335
1891
|
.cd-tree__node {
|
|
@@ -1340,7 +1896,7 @@
|
|
|
1340
1896
|
.cd-tree__line {
|
|
1341
1897
|
position: relative;
|
|
1342
1898
|
flex: 0 0 auto;
|
|
1343
|
-
inline-size: var(--cd-tree-
|
|
1899
|
+
inline-size: var(--cd-spacing-tree-option-level-padding-left);
|
|
1344
1900
|
align-self: stretch;
|
|
1345
1901
|
}
|
|
1346
1902
|
/* 贯穿竖线(祖先非末层) */
|
|
@@ -1349,8 +1905,8 @@
|
|
|
1349
1905
|
position: absolute;
|
|
1350
1906
|
inset-block: 0;
|
|
1351
1907
|
inset-inline-start: 50%;
|
|
1352
|
-
inline-size:
|
|
1353
|
-
background: var(--cd-tree-line
|
|
1908
|
+
inline-size: var(--cd-width-tree-option-line);
|
|
1909
|
+
background: var(--cd-color-tree-option-line);
|
|
1354
1910
|
}
|
|
1355
1911
|
/* ├ 形:竖线贯穿 + 横线到右 */
|
|
1356
1912
|
.cd-tree__line--tee::before {
|
|
@@ -1358,8 +1914,8 @@
|
|
|
1358
1914
|
position: absolute;
|
|
1359
1915
|
inset-block: 0;
|
|
1360
1916
|
inset-inline-start: 50%;
|
|
1361
|
-
inline-size:
|
|
1362
|
-
background: var(--cd-tree-line
|
|
1917
|
+
inline-size: var(--cd-width-tree-option-line);
|
|
1918
|
+
background: var(--cd-color-tree-option-line);
|
|
1363
1919
|
}
|
|
1364
1920
|
/* └ 形:竖线 top→中 + 横线到右 */
|
|
1365
1921
|
.cd-tree__line--elbow::before {
|
|
@@ -1368,8 +1924,8 @@
|
|
|
1368
1924
|
inset-block-start: 0;
|
|
1369
1925
|
block-size: 50%;
|
|
1370
1926
|
inset-inline-start: 50%;
|
|
1371
|
-
inline-size:
|
|
1372
|
-
background: var(--cd-tree-line
|
|
1927
|
+
inline-size: var(--cd-width-tree-option-line);
|
|
1928
|
+
background: var(--cd-color-tree-option-line);
|
|
1373
1929
|
}
|
|
1374
1930
|
.cd-tree__line--tee::after,
|
|
1375
1931
|
.cd-tree__line--elbow::after {
|
|
@@ -1378,8 +1934,8 @@
|
|
|
1378
1934
|
inset-block-start: 50%;
|
|
1379
1935
|
inset-inline-start: 50%;
|
|
1380
1936
|
inset-inline-end: 0;
|
|
1381
|
-
block-size:
|
|
1382
|
-
background: var(--cd-tree-line
|
|
1937
|
+
block-size: var(--cd-width-tree-option-line);
|
|
1938
|
+
background: var(--cd-color-tree-option-line);
|
|
1383
1939
|
}
|
|
1384
1940
|
|
|
1385
1941
|
.cd-tree__switcher {
|
|
@@ -1387,56 +1943,43 @@
|
|
|
1387
1943
|
align-items: center;
|
|
1388
1944
|
justify-content: center;
|
|
1389
1945
|
flex: 0 0 auto;
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1946
|
+
/* 对齐 Semi $width-tree_emptyIcon(展开图标宽 12)+ marginRight 8 */
|
|
1947
|
+
inline-size: var(--cd-width-tree-empty-icon);
|
|
1948
|
+
block-size: var(--cd-width-tree-empty-icon);
|
|
1949
|
+
margin-inline-end: var(--cd-spacing-tree-icon-margin-right);
|
|
1950
|
+
color: var(--cd-color-tree-option-icon-default);
|
|
1393
1951
|
cursor: pointer;
|
|
1394
1952
|
transition: transform var(--cd-motion-duration-fast) var(--cd-motion-ease-standard);
|
|
1953
|
+
/* IconTreeTriangleDown 默认朝下(=展开态外观,对齐 Semi);收起态旋转 -90deg 指向右侧。 */
|
|
1954
|
+
transform: rotate(-90deg);
|
|
1955
|
+
}
|
|
1956
|
+
.cd-tree__switcher:hover {
|
|
1957
|
+
color: var(--cd-color-tree-option-icon-hover);
|
|
1958
|
+
}
|
|
1959
|
+
.cd-tree__switcher:active {
|
|
1960
|
+
color: var(--cd-color-tree-option-icon-active);
|
|
1395
1961
|
}
|
|
1396
1962
|
.cd-tree__switcher--open {
|
|
1397
|
-
transform: rotate(
|
|
1963
|
+
transform: rotate(0deg);
|
|
1398
1964
|
}
|
|
1399
1965
|
.cd-tree__switcher--leaf {
|
|
1400
1966
|
cursor: default;
|
|
1967
|
+
transform: none;
|
|
1401
1968
|
}
|
|
1402
1969
|
.cd-tree__switcher--loading {
|
|
1403
1970
|
cursor: default;
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
inline-size:
|
|
1407
|
-
block-size:
|
|
1408
|
-
border: 2px solid var(--cd-color-border, currentColor);
|
|
1409
|
-
border-block-start-color: var(--cd-color-primary);
|
|
1410
|
-
border-radius: 50%;
|
|
1411
|
-
animation: cd-tree-spin 0.7s linear infinite;
|
|
1412
|
-
}
|
|
1413
|
-
@keyframes cd-tree-spin {
|
|
1414
|
-
to {
|
|
1415
|
-
transform: rotate(360deg);
|
|
1416
|
-
}
|
|
1971
|
+
transform: none;
|
|
1972
|
+
/* 加载 spin 尺寸对齐 Semi $width-tree_spinIcon(12) */
|
|
1973
|
+
inline-size: var(--cd-width-tree-spin-icon);
|
|
1974
|
+
block-size: var(--cd-width-tree-spin-icon);
|
|
1417
1975
|
}
|
|
1418
1976
|
|
|
1977
|
+
/* 勾选框:框体样式由 Checkbox 组件自带,此处仅负责在行内的定位与右间距(对齐 Semi label withIcon marginRight 8) */
|
|
1419
1978
|
.cd-tree__checkbox {
|
|
1420
1979
|
display: inline-flex;
|
|
1421
1980
|
align-items: center;
|
|
1422
|
-
justify-content: center;
|
|
1423
1981
|
flex: 0 0 auto;
|
|
1424
|
-
inline-
|
|
1425
|
-
block-size: 1rem;
|
|
1426
|
-
color: #fff;
|
|
1427
|
-
background: var(--cd-color-bg-1, #fff);
|
|
1428
|
-
border: 1px solid var(--cd-color-border);
|
|
1429
|
-
border-radius: var(--cd-radius-small, 3px);
|
|
1430
|
-
cursor: pointer;
|
|
1431
|
-
}
|
|
1432
|
-
.cd-tree__checkbox--checked,
|
|
1433
|
-
.cd-tree__checkbox--half {
|
|
1434
|
-
background: var(--cd-color-primary);
|
|
1435
|
-
border-color: var(--cd-color-primary);
|
|
1436
|
-
}
|
|
1437
|
-
.cd-tree__checkbox--disabled {
|
|
1438
|
-
cursor: not-allowed;
|
|
1439
|
-
opacity: 0.5;
|
|
1982
|
+
margin-inline-end: var(--cd-spacing-tree-label-with-icon-margin-right);
|
|
1440
1983
|
}
|
|
1441
1984
|
|
|
1442
1985
|
.cd-tree__icon {
|
|
@@ -1445,20 +1988,24 @@
|
|
|
1445
1988
|
justify-content: center;
|
|
1446
1989
|
flex: 0 0 auto;
|
|
1447
1990
|
inline-size: 0;
|
|
1448
|
-
block-size:
|
|
1449
|
-
color: var(--cd-tree-
|
|
1991
|
+
block-size: var(--cd-width-tree-empty-icon);
|
|
1992
|
+
color: var(--cd-color-tree-option-icon-default);
|
|
1450
1993
|
}
|
|
1451
|
-
/* 有自定义图标内容时撑开尺寸 */
|
|
1994
|
+
/* 有自定义图标内容时撑开尺寸 + 右间距(对齐 Semi label withIcon marginRight 8) */
|
|
1452
1995
|
.cd-tree__icon:not(:empty) {
|
|
1453
|
-
inline-size:
|
|
1996
|
+
inline-size: var(--cd-width-tree-empty-icon);
|
|
1997
|
+
margin-inline-end: var(--cd-spacing-tree-label-with-icon-margin-right);
|
|
1454
1998
|
}
|
|
1455
1999
|
|
|
1456
2000
|
.cd-tree__label {
|
|
2001
|
+
flex: 1 1 auto;
|
|
2002
|
+
min-inline-size: 0;
|
|
2003
|
+
}
|
|
2004
|
+
/* labelEllipsis:超长单行省略(默认关闭;虚拟化下默认开启) */
|
|
2005
|
+
.cd-tree__label--ellipsis {
|
|
1457
2006
|
overflow: hidden;
|
|
1458
2007
|
white-space: nowrap;
|
|
1459
2008
|
text-overflow: ellipsis;
|
|
1460
|
-
flex: 1 1 auto;
|
|
1461
|
-
min-inline-size: 0;
|
|
1462
2009
|
}
|
|
1463
2010
|
|
|
1464
2011
|
.cd-tree__suffix {
|
|
@@ -1476,26 +2023,30 @@
|
|
|
1476
2023
|
pointer-events: none;
|
|
1477
2024
|
}
|
|
1478
2025
|
|
|
1479
|
-
|
|
2026
|
+
/* 搜索命中高亮:class 注入到 Highlight 子组件内部的 mark,需 :global 穿透 scoped CSS。
|
|
2027
|
+
对齐 Semi:primary 文字 + bold + 无独立背景(inherit)。 */
|
|
2028
|
+
.cd-tree__label :global(.cd-tree__highlight) {
|
|
1480
2029
|
padding: 0;
|
|
1481
|
-
color: var(--cd-tree-
|
|
1482
|
-
background:
|
|
1483
|
-
font-weight: var(--cd-tree-
|
|
2030
|
+
color: var(--cd-color-tree-option-highlight-text);
|
|
2031
|
+
background: inherit;
|
|
2032
|
+
font-weight: var(--cd-font-tree-option-highlight-weight);
|
|
1484
2033
|
}
|
|
1485
2034
|
|
|
1486
2035
|
.cd-tree__empty {
|
|
1487
2036
|
padding: var(--cd-spacing-base-tight);
|
|
1488
|
-
color: var(--cd-tree-
|
|
2037
|
+
color: var(--cd-color-tree-option-disabled-text-default);
|
|
1489
2038
|
text-align: center;
|
|
1490
2039
|
}
|
|
1491
2040
|
|
|
2041
|
+
/* motion 开关(对齐 Semi motion):仅 cd-tree--motion 时启用 switcher 旋转过渡。 */
|
|
2042
|
+
.cd-tree:not(.cd-tree--motion) .cd-tree__switcher {
|
|
2043
|
+
transition: none;
|
|
2044
|
+
}
|
|
2045
|
+
|
|
1492
2046
|
@media (prefers-reduced-motion: reduce) {
|
|
1493
2047
|
.cd-tree__node,
|
|
1494
2048
|
.cd-tree__switcher {
|
|
1495
2049
|
transition: none;
|
|
1496
2050
|
}
|
|
1497
|
-
.cd-tree__spinner {
|
|
1498
|
-
animation: none;
|
|
1499
|
-
}
|
|
1500
2051
|
}
|
|
1501
2052
|
</style>
|