@flowdrop/flowdrop 1.0.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -50
- package/dist/adapters/WorkflowAdapter.d.ts +1 -1
- package/dist/adapters/WorkflowAdapter.js +25 -25
- package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +2 -2
- package/dist/adapters/agentspec/AgentSpecAdapter.js +133 -122
- package/dist/adapters/agentspec/agentAdapter.d.ts +2 -2
- package/dist/adapters/agentspec/agentAdapter.js +10 -10
- package/dist/adapters/agentspec/autoLayout.d.ts +1 -1
- package/dist/adapters/agentspec/autoLayout.js +2 -2
- package/dist/adapters/agentspec/componentTypeDefaults.d.ts +1 -1
- package/dist/adapters/agentspec/componentTypeDefaults.js +120 -120
- package/dist/adapters/agentspec/defaultNodeTypes.d.ts +2 -2
- package/dist/adapters/agentspec/defaultNodeTypes.js +307 -307
- package/dist/adapters/agentspec/index.d.ts +10 -10
- package/dist/adapters/agentspec/index.js +6 -6
- package/dist/adapters/agentspec/validator.d.ts +2 -2
- package/dist/adapters/agentspec/validator.js +22 -20
- package/dist/api/enhanced-client.d.ts +3 -3
- package/dist/api/enhanced-client.js +73 -72
- package/dist/components/App.svelte +1090 -961
- package/dist/components/App.svelte.d.ts +9 -6
- package/dist/components/CanvasBanner.stories.svelte +23 -20
- package/dist/components/CanvasBanner.stories.svelte.d.ts +1 -1
- package/dist/components/CanvasBanner.svelte +52 -46
- package/dist/components/ConfigForm.svelte +1164 -1065
- package/dist/components/ConfigForm.svelte.d.ts +2 -2
- package/dist/components/ConfigModal.svelte +180 -180
- package/dist/components/ConfigModal.svelte.d.ts +1 -1
- package/dist/components/ConfigPanel.stories.svelte +35 -35
- package/dist/components/ConfigPanel.stories.svelte.d.ts +1 -1
- package/dist/components/ConfigPanel.svelte +178 -167
- package/dist/components/ConfigPanel.svelte.d.ts +1 -1
- package/dist/components/ConnectionLine.svelte +25 -25
- package/dist/components/EdgeRefresher.svelte +26 -26
- package/dist/components/FlowDropEdge.stories.svelte +179 -143
- package/dist/components/FlowDropEdge.svelte +147 -147
- package/dist/components/FlowDropEdge.svelte.d.ts +1 -1
- package/dist/components/FlowDropZone.svelte +63 -60
- package/dist/components/FlowDropZone.svelte.d.ts +1 -1
- package/dist/components/LoadingSpinner.stories.svelte +19 -19
- package/dist/components/LoadingSpinner.stories.svelte.d.ts +1 -1
- package/dist/components/LoadingSpinner.svelte +21 -21
- package/dist/components/LoadingSpinner.svelte.d.ts +1 -1
- package/dist/components/Logo.stories.svelte +13 -13
- package/dist/components/Logo.stories.svelte.d.ts +1 -1
- package/dist/components/Logo.svelte +101 -95
- package/dist/components/LogsSidebar.svelte +553 -546
- package/dist/components/LogsSidebar.svelte.d.ts +1 -1
- package/dist/components/MarkdownDisplay.stories.svelte +29 -23
- package/dist/components/MarkdownDisplay.stories.svelte.d.ts +1 -1
- package/dist/components/MarkdownDisplay.svelte +16 -14
- package/dist/components/Navbar.stories.svelte +43 -38
- package/dist/components/Navbar.stories.svelte.d.ts +1 -1
- package/dist/components/Navbar.svelte +760 -706
- package/dist/components/Navbar.svelte.d.ts +1 -1
- package/dist/components/NodeSidebar.svelte +905 -746
- package/dist/components/NodeSidebar.svelte.d.ts +5 -1
- package/dist/components/NodeStatusOverlay.stories.svelte +82 -70
- package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +1 -1
- package/dist/components/NodeStatusOverlay.svelte +295 -280
- package/dist/components/NodeStatusOverlay.svelte.d.ts +3 -3
- package/dist/components/PipelineStatus.svelte +326 -300
- package/dist/components/PipelineStatus.svelte.d.ts +4 -4
- package/dist/components/PortCoordinateTracker.svelte +49 -47
- package/dist/components/PortCoordinateTracker.svelte.d.ts +1 -1
- package/dist/components/ReadOnlyDetails.svelte +156 -156
- package/dist/components/SchemaForm.stories.svelte +106 -98
- package/dist/components/SchemaForm.stories.svelte.d.ts +1 -1
- package/dist/components/SchemaForm.svelte +490 -463
- package/dist/components/SchemaForm.svelte.d.ts +2 -2
- package/dist/components/SettingsModal.svelte +226 -223
- package/dist/components/SettingsModal.svelte.d.ts +1 -1
- package/dist/components/SettingsPanel.svelte +637 -601
- package/dist/components/SettingsPanel.svelte.d.ts +1 -1
- package/dist/components/StatusIcon.stories.svelte +62 -49
- package/dist/components/StatusIcon.stories.svelte.d.ts +1 -1
- package/dist/components/StatusIcon.svelte +87 -87
- package/dist/components/StatusIcon.svelte.d.ts +2 -2
- package/dist/components/StatusLabel.stories.svelte +12 -12
- package/dist/components/StatusLabel.stories.svelte.d.ts +1 -1
- package/dist/components/StatusLabel.svelte +19 -19
- package/dist/components/ThemeToggle.stories.svelte +16 -16
- package/dist/components/ThemeToggle.stories.svelte.d.ts +1 -1
- package/dist/components/ThemeToggle.svelte +180 -169
- package/dist/components/ThemeToggle.svelte.d.ts +1 -1
- package/dist/components/UniversalNode.svelte +150 -138
- package/dist/components/UniversalNode.svelte.d.ts +3 -3
- package/dist/components/WorkflowEditor.svelte +1069 -1014
- package/dist/components/WorkflowEditor.svelte.d.ts +4 -4
- package/dist/components/form/FormArray.svelte +1034 -973
- package/dist/components/form/FormArray.svelte.d.ts +1 -1
- package/dist/components/form/FormAutocomplete.svelte +1021 -978
- package/dist/components/form/FormAutocomplete.svelte.d.ts +1 -1
- package/dist/components/form/FormCheckboxGroup.stories.svelte +23 -20
- package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormCheckboxGroup.svelte +136 -136
- package/dist/components/form/FormCodeEditor.svelte +452 -434
- package/dist/components/form/FormField.svelte +366 -355
- package/dist/components/form/FormField.svelte.d.ts +2 -2
- package/dist/components/form/FormFieldLight.svelte +400 -384
- package/dist/components/form/FormFieldLight.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldWrapper.stories.svelte +42 -42
- package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldWrapper.svelte +100 -93
- package/dist/components/form/FormFieldWrapper.svelte.d.ts +1 -1
- package/dist/components/form/FormFieldset.svelte +108 -108
- package/dist/components/form/FormFieldset.svelte.d.ts +2 -2
- package/dist/components/form/FormMarkdownEditor.svelte +758 -725
- package/dist/components/form/FormNumberField.stories.svelte +25 -25
- package/dist/components/form/FormNumberField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormNumberField.svelte +88 -88
- package/dist/components/form/FormRangeField.stories.svelte +20 -20
- package/dist/components/form/FormRangeField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormRangeField.svelte +234 -226
- package/dist/components/form/FormSelect.stories.svelte +38 -38
- package/dist/components/form/FormSelect.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormSelect.svelte +101 -101
- package/dist/components/form/FormSelect.svelte.d.ts +1 -1
- package/dist/components/form/FormTemplateEditor.svelte +847 -798
- package/dist/components/form/FormTemplateEditor.svelte.d.ts +1 -1
- package/dist/components/form/FormTextField.stories.svelte +29 -23
- package/dist/components/form/FormTextField.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormTextField.svelte +68 -68
- package/dist/components/form/FormTextarea.stories.svelte +28 -25
- package/dist/components/form/FormTextarea.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormTextarea.svelte +74 -74
- package/dist/components/form/FormToggle.stories.svelte +23 -20
- package/dist/components/form/FormToggle.stories.svelte.d.ts +1 -1
- package/dist/components/form/FormToggle.svelte +98 -98
- package/dist/components/form/FormUISchemaRenderer.svelte +120 -113
- package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +3 -3
- package/dist/components/form/index.d.ts +19 -19
- package/dist/components/form/index.js +18 -18
- package/dist/components/form/templateAutocomplete.d.ts +2 -2
- package/dist/components/form/templateAutocomplete.js +64 -55
- package/dist/components/form/types.d.ts +6 -6
- package/dist/components/form/types.js +9 -4
- package/dist/components/icons/AlertCircleIcon.svelte +11 -0
- package/dist/components/icons/AlertCircleIcon.svelte.d.ts +26 -0
- package/dist/components/icons/CogIcon.svelte +11 -0
- package/dist/components/icons/CogIcon.svelte.d.ts +26 -0
- package/dist/components/interrupt/ChoicePrompt.stories.svelte +54 -38
- package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ChoicePrompt.svelte +407 -383
- package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +48 -48
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ConfirmationPrompt.svelte +280 -274
- package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/FormPrompt.svelte +223 -218
- package/dist/components/interrupt/FormPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/InterruptBubble.svelte +617 -583
- package/dist/components/interrupt/InterruptBubble.svelte.d.ts +2 -2
- package/dist/components/interrupt/ReviewPrompt.stories.svelte +66 -56
- package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/ReviewPrompt.svelte +861 -841
- package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/TextInputPrompt.stories.svelte +38 -33
- package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +1 -1
- package/dist/components/interrupt/TextInputPrompt.svelte +333 -328
- package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +1 -1
- package/dist/components/interrupt/index.d.ts +5 -5
- package/dist/components/interrupt/index.js +5 -5
- package/dist/components/layouts/MainLayout.svelte +724 -691
- package/dist/components/layouts/MainLayout.svelte.d.ts +6 -6
- package/dist/components/nodes/GatewayNode.stories.svelte +100 -99
- package/dist/components/nodes/GatewayNode.svelte +605 -571
- package/dist/components/nodes/GatewayNode.svelte.d.ts +3 -3
- package/dist/components/nodes/IdeaNode.stories.svelte +44 -43
- package/dist/components/nodes/IdeaNode.svelte +451 -437
- package/dist/components/nodes/IdeaNode.svelte.d.ts +1 -1
- package/dist/components/nodes/NotesNode.stories.svelte +65 -64
- package/dist/components/nodes/NotesNode.svelte +380 -369
- package/dist/components/nodes/NotesNode.svelte.d.ts +1 -1
- package/dist/components/nodes/SimpleNode.stories.svelte +145 -144
- package/dist/components/nodes/SimpleNode.svelte +486 -424
- package/dist/components/nodes/SimpleNode.svelte.d.ts +1 -1
- package/dist/components/nodes/SquareNode.stories.svelte +73 -73
- package/dist/components/nodes/SquareNode.svelte +439 -380
- package/dist/components/nodes/SquareNode.svelte.d.ts +1 -1
- package/dist/components/nodes/TerminalNode.stories.svelte +13 -13
- package/dist/components/nodes/TerminalNode.svelte +709 -670
- package/dist/components/nodes/TerminalNode.svelte.d.ts +1 -1
- package/dist/components/nodes/ToolNode.stories.svelte +181 -180
- package/dist/components/nodes/ToolNode.svelte +505 -447
- package/dist/components/nodes/ToolNode.svelte.d.ts +1 -1
- package/dist/components/nodes/WorkflowNode.stories.svelte +70 -46
- package/dist/components/nodes/WorkflowNode.svelte +621 -551
- package/dist/components/nodes/WorkflowNode.svelte.d.ts +3 -3
- package/dist/components/playground/ChatPanel.svelte +945 -889
- package/dist/components/playground/ExecutionLogs.svelte +495 -472
- package/dist/components/playground/InputCollector.svelte +449 -428
- package/dist/components/playground/MessageBubble.stories.svelte +47 -47
- package/dist/components/playground/MessageBubble.stories.svelte.d.ts +1 -1
- package/dist/components/playground/MessageBubble.svelte +626 -610
- package/dist/components/playground/MessageBubble.svelte.d.ts +1 -1
- package/dist/components/playground/Playground.svelte +1088 -1057
- package/dist/components/playground/Playground.svelte.d.ts +3 -3
- package/dist/components/playground/PlaygroundModal.svelte +208 -204
- package/dist/components/playground/PlaygroundModal.svelte.d.ts +3 -3
- package/dist/components/playground/SessionManager.svelte +527 -521
- package/dist/components/playground/SessionManager.svelte.d.ts +1 -1
- package/dist/config/agentSpecEndpoints.d.ts +1 -1
- package/dist/config/agentSpecEndpoints.js +20 -20
- package/dist/config/constants.js +2 -2
- package/dist/config/defaultCategories.d.ts +1 -1
- package/dist/config/defaultCategories.js +86 -86
- package/dist/config/defaultPortConfig.d.ts +1 -1
- package/dist/config/defaultPortConfig.js +144 -144
- package/dist/config/endpoints.d.ts +4 -4
- package/dist/config/endpoints.js +65 -65
- package/dist/config/runtimeConfig.d.ts +2 -2
- package/dist/config/runtimeConfig.js +8 -8
- package/dist/core/index.d.ts +63 -59
- package/dist/core/index.js +35 -33
- package/dist/display/index.d.ts +2 -2
- package/dist/display/index.js +2 -2
- package/dist/editor/index.d.ts +62 -62
- package/dist/editor/index.js +53 -53
- package/dist/form/code.d.ts +5 -5
- package/dist/form/code.js +14 -14
- package/dist/form/fieldRegistry.d.ts +3 -3
- package/dist/form/fieldRegistry.js +11 -9
- package/dist/form/full.d.ts +8 -8
- package/dist/form/full.js +9 -9
- package/dist/form/index.d.ts +18 -18
- package/dist/form/index.js +16 -16
- package/dist/form/markdown.d.ts +4 -4
- package/dist/form/markdown.js +8 -8
- package/dist/helpers/proximityConnect.d.ts +3 -3
- package/dist/helpers/proximityConnect.js +34 -32
- package/dist/helpers/workflowEditorHelper.d.ts +5 -5
- package/dist/helpers/workflowEditorHelper.js +108 -96
- package/dist/index.d.ts +6 -6
- package/dist/index.js +6 -6
- package/dist/mocks/app-environment.js +2 -2
- package/dist/mocks/app-forms.js +9 -9
- package/dist/mocks/app-navigation.js +11 -11
- package/dist/mocks/app-stores.js +8 -8
- package/dist/playground/index.d.ts +19 -19
- package/dist/playground/index.js +16 -16
- package/dist/playground/mount.d.ts +3 -3
- package/dist/playground/mount.js +24 -24
- package/dist/registry/builtinFormats.js +13 -13
- package/dist/registry/builtinNodes.d.ts +2 -2
- package/dist/registry/builtinNodes.js +77 -77
- package/dist/registry/index.d.ts +4 -4
- package/dist/registry/index.js +4 -4
- package/dist/registry/nodeComponentRegistry.d.ts +8 -8
- package/dist/registry/nodeComponentRegistry.js +11 -9
- package/dist/registry/plugin.d.ts +2 -2
- package/dist/registry/plugin.js +11 -11
- package/dist/registry/workflowFormatRegistry.d.ts +3 -3
- package/dist/registry/workflowFormatRegistry.js +2 -2
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.js +2 -2
- package/dist/services/agentSpecExecutionService.d.ts +3 -3
- package/dist/services/agentSpecExecutionService.js +59 -55
- package/dist/services/api.d.ts +2 -2
- package/dist/services/api.js +37 -37
- package/dist/services/apiVariableService.d.ts +1 -1
- package/dist/services/apiVariableService.js +41 -34
- package/dist/services/autoSaveService.js +8 -8
- package/dist/services/categoriesApi.d.ts +2 -2
- package/dist/services/categoriesApi.js +8 -8
- package/dist/services/draftStorage.d.ts +1 -1
- package/dist/services/draftStorage.js +11 -11
- package/dist/services/dynamicSchemaService.d.ts +1 -1
- package/dist/services/dynamicSchemaService.js +41 -39
- package/dist/services/globalSave.d.ts +2 -2
- package/dist/services/globalSave.js +41 -38
- package/dist/services/historyService.d.ts +1 -1
- package/dist/services/historyService.js +8 -8
- package/dist/services/interruptService.d.ts +1 -1
- package/dist/services/interruptService.js +35 -29
- package/dist/services/nodeExecutionService.d.ts +1 -1
- package/dist/services/nodeExecutionService.js +45 -44
- package/dist/services/playgroundService.d.ts +1 -1
- package/dist/services/playgroundService.js +29 -29
- package/dist/services/portConfigApi.d.ts +2 -2
- package/dist/services/portConfigApi.js +8 -8
- package/dist/services/settingsService.d.ts +2 -2
- package/dist/services/settingsService.js +25 -19
- package/dist/services/toastService.d.ts +4 -4
- package/dist/services/toastService.js +33 -33
- package/dist/services/variableService.d.ts +1 -1
- package/dist/services/variableService.js +36 -36
- package/dist/services/workflowStorage.d.ts +2 -2
- package/dist/services/workflowStorage.js +13 -13
- package/dist/settings/index.d.ts +7 -7
- package/dist/settings/index.js +6 -6
- package/dist/skins/default.d.ts +2 -0
- package/dist/skins/default.js +1 -0
- package/dist/skins/index.d.ts +13 -0
- package/dist/skins/index.js +30 -0
- package/dist/skins/slate.d.ts +2 -0
- package/dist/skins/slate.js +78 -0
- package/dist/stores/categoriesStore.svelte.d.ts +1 -1
- package/dist/stores/categoriesStore.svelte.js +5 -5
- package/dist/stores/editorStateMachine.svelte.d.ts +2 -2
- package/dist/stores/editorStateMachine.svelte.js +65 -33
- package/dist/stores/historyStore.svelte.d.ts +4 -4
- package/dist/stores/historyStore.svelte.js +4 -4
- package/dist/stores/interruptStore.svelte.d.ts +3 -3
- package/dist/stores/interruptStore.svelte.js +21 -21
- package/dist/stores/playgroundStore.svelte.d.ts +2 -2
- package/dist/stores/playgroundStore.svelte.js +25 -18
- package/dist/stores/portCoordinateStore.svelte.d.ts +2 -2
- package/dist/stores/portCoordinateStore.svelte.js +15 -8
- package/dist/stores/settingsStore.svelte.d.ts +2 -2
- package/dist/stores/settingsStore.svelte.js +62 -57
- package/dist/stores/workflowStore.svelte.d.ts +3 -3
- package/dist/stores/workflowStore.svelte.js +50 -47
- package/dist/stories/CanvasDecorator.svelte +35 -32
- package/dist/stories/CanvasDecorator.svelte.d.ts +2 -2
- package/dist/stories/EdgeDecorator.svelte +102 -99
- package/dist/stories/EdgeDecorator.svelte.d.ts +1 -1
- package/dist/stories/NodeDecorator.svelte +59 -53
- package/dist/stories/NodeDecorator.svelte.d.ts +1 -1
- package/dist/stories/utils.d.ts +2 -2
- package/dist/stories/utils.js +105 -67
- package/dist/styles/base.css +599 -595
- package/dist/styles/toast.css +14 -14
- package/dist/styles/tokens.css +409 -378
- package/dist/svelte-app.d.ts +12 -9
- package/dist/svelte-app.js +40 -39
- package/dist/themes/default.d.ts +2 -0
- package/dist/themes/default.js +9 -0
- package/dist/themes/index.d.ts +13 -0
- package/dist/themes/index.js +44 -0
- package/dist/themes/minimal.d.ts +2 -0
- package/dist/themes/minimal.js +11 -0
- package/dist/types/agentspec.d.ts +18 -18
- package/dist/types/agentspec.js +2 -2
- package/dist/types/auth.d.ts +1 -1
- package/dist/types/auth.js +6 -6
- package/dist/types/config.d.ts +6 -6
- package/dist/types/events.d.ts +2 -2
- package/dist/types/events.js +2 -2
- package/dist/types/index.d.ts +32 -32
- package/dist/types/index.js +6 -6
- package/dist/types/interrupt.d.ts +6 -6
- package/dist/types/interrupt.js +21 -21
- package/dist/types/interruptState.d.ts +12 -12
- package/dist/types/interruptState.js +66 -66
- package/dist/types/playground.d.ts +7 -7
- package/dist/types/playground.js +14 -14
- package/dist/types/settings.d.ts +5 -3
- package/dist/types/settings.js +25 -18
- package/dist/types/skin.d.ts +31 -0
- package/dist/types/skin.js +1 -0
- package/dist/types/theme.d.ts +35 -0
- package/dist/types/theme.js +1 -0
- package/dist/types/uischema.d.ts +4 -4
- package/dist/types/uischema.js +3 -3
- package/dist/utils/colors.d.ts +1 -1
- package/dist/utils/colors.js +97 -95
- package/dist/utils/config.d.ts +2 -2
- package/dist/utils/config.js +48 -48
- package/dist/utils/connections.d.ts +2 -2
- package/dist/utils/connections.js +15 -15
- package/dist/utils/errors.js +3 -3
- package/dist/utils/fetchWithAuth.d.ts +1 -1
- package/dist/utils/fetchWithAuth.js +2 -2
- package/dist/utils/handleIds.d.ts +2 -2
- package/dist/utils/handleIds.js +8 -8
- package/dist/utils/handlePositioning.d.ts +1 -1
- package/dist/utils/handlePositioning.js +2 -2
- package/dist/utils/icons.d.ts +1 -1
- package/dist/utils/icons.js +74 -74
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.js +7 -7
- package/dist/utils/nodeStatus.d.ts +1 -1
- package/dist/utils/nodeStatus.js +48 -48
- package/dist/utils/nodeTypes.d.ts +1 -1
- package/dist/utils/nodeTypes.js +21 -20
- package/dist/utils/nodeWrapper.d.ts +7 -7
- package/dist/utils/nodeWrapper.js +21 -19
- package/dist/utils/performanceUtils.d.ts +1 -1
- package/dist/utils/performanceUtils.js +2 -1
- package/dist/utils/sanitize.js +1 -1
- package/dist/utils/uischema.d.ts +2 -2
- package/dist/utils/uischema.js +8 -8
- package/dist/utils/validation.js +20 -8
- package/package.json +1 -1
|
@@ -10,301 +10,330 @@
|
|
|
10
10
|
-->
|
|
11
11
|
|
|
12
12
|
<script lang="ts">
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
13
|
+
import { onMount } from "svelte";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Configuration props for the MainLayout component
|
|
17
|
+
*/
|
|
18
|
+
interface Props {
|
|
19
|
+
/** Height of the header in pixels */
|
|
20
|
+
headerHeight?: number;
|
|
21
|
+
/** Height of the footer in pixels */
|
|
22
|
+
footerHeight?: number;
|
|
23
|
+
/** Whether to show the header */
|
|
24
|
+
showHeader?: boolean;
|
|
25
|
+
/** Whether to show the footer */
|
|
26
|
+
showFooter?: boolean;
|
|
27
|
+
/** Whether to show the left sidebar */
|
|
28
|
+
showLeftSidebar?: boolean;
|
|
29
|
+
/** Whether to show the right sidebar */
|
|
30
|
+
showRightSidebar?: boolean;
|
|
31
|
+
/** Whether to show the bottom panel */
|
|
32
|
+
showBottomPanel?: boolean;
|
|
33
|
+
/** Initial width of the left sidebar in pixels */
|
|
34
|
+
leftSidebarWidth?: number;
|
|
35
|
+
/** Initial width of the right sidebar in pixels */
|
|
36
|
+
rightSidebarWidth?: number;
|
|
37
|
+
/** Initial height of the bottom panel in pixels */
|
|
38
|
+
bottomPanelHeight?: number;
|
|
39
|
+
/** Minimum width for left sidebar in pixels */
|
|
40
|
+
leftSidebarMinWidth?: number;
|
|
41
|
+
/** Maximum width for left sidebar in pixels */
|
|
42
|
+
leftSidebarMaxWidth?: number;
|
|
43
|
+
/** Minimum width for right sidebar in pixels */
|
|
44
|
+
rightSidebarMinWidth?: number;
|
|
45
|
+
/** Maximum width for right sidebar in pixels */
|
|
46
|
+
rightSidebarMaxWidth?: number;
|
|
47
|
+
/** Minimum height for bottom panel in pixels */
|
|
48
|
+
bottomPanelMinHeight?: number;
|
|
49
|
+
/** Maximum height for bottom panel in pixels */
|
|
50
|
+
bottomPanelMaxHeight?: number;
|
|
51
|
+
/** Whether to enable split pane resizing for left sidebar */
|
|
52
|
+
enableLeftSplitPane?: boolean;
|
|
53
|
+
/** Whether to enable split pane resizing for right sidebar */
|
|
54
|
+
enableRightSplitPane?: boolean;
|
|
55
|
+
/** Whether to enable split pane resizing for bottom panel */
|
|
56
|
+
enableBottomSplitPane?: boolean;
|
|
57
|
+
/** Background color for the main layout */
|
|
58
|
+
backgroundColor?: string;
|
|
59
|
+
/** Custom CSS class for the layout container */
|
|
60
|
+
class?: string;
|
|
61
|
+
/** Slot for header content */
|
|
62
|
+
header?: import("svelte").Snippet;
|
|
63
|
+
/** Slot for left sidebar content */
|
|
64
|
+
leftSidebar?: import("svelte").Snippet;
|
|
65
|
+
/** Slot for right sidebar content */
|
|
66
|
+
rightSidebar?: import("svelte").Snippet;
|
|
67
|
+
/** Slot for bottom panel content */
|
|
68
|
+
bottomPanel?: import("svelte").Snippet;
|
|
69
|
+
/** Slot for footer content */
|
|
70
|
+
footer?: import("svelte").Snippet;
|
|
71
|
+
/** Slot for main content (default slot) */
|
|
72
|
+
children?: import("svelte").Snippet;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
let {
|
|
76
|
+
headerHeight = 60,
|
|
77
|
+
footerHeight = 48,
|
|
78
|
+
showHeader = true,
|
|
79
|
+
showFooter = false,
|
|
80
|
+
showLeftSidebar = true,
|
|
81
|
+
showRightSidebar = true,
|
|
82
|
+
showBottomPanel = false,
|
|
83
|
+
leftSidebarWidth: initialLeftWidth = 280,
|
|
84
|
+
rightSidebarWidth: initialRightWidth = 320,
|
|
85
|
+
bottomPanelHeight: initialBottomHeight = 300,
|
|
86
|
+
leftSidebarMinWidth = 200,
|
|
87
|
+
leftSidebarMaxWidth = 500,
|
|
88
|
+
rightSidebarMinWidth = 200,
|
|
89
|
+
rightSidebarMaxWidth = 500,
|
|
90
|
+
bottomPanelMinHeight = 150,
|
|
91
|
+
bottomPanelMaxHeight = 500,
|
|
92
|
+
enableLeftSplitPane = true,
|
|
93
|
+
enableRightSplitPane = true,
|
|
94
|
+
enableBottomSplitPane = true,
|
|
95
|
+
backgroundColor = "var(--fd-layout-background)",
|
|
96
|
+
class: customClass = "",
|
|
97
|
+
header,
|
|
98
|
+
leftSidebar,
|
|
99
|
+
rightSidebar,
|
|
100
|
+
bottomPanel,
|
|
101
|
+
footer,
|
|
102
|
+
children,
|
|
103
|
+
}: Props = $props();
|
|
104
|
+
|
|
105
|
+
/** Current width of the left sidebar */
|
|
106
|
+
// svelte-ignore state_referenced_locally — initial default, component owns draggable state
|
|
107
|
+
let leftSidebarWidth = $state(initialLeftWidth);
|
|
108
|
+
|
|
109
|
+
/** Current width of the right sidebar */
|
|
110
|
+
// svelte-ignore state_referenced_locally
|
|
111
|
+
let rightSidebarWidth = $state(initialRightWidth);
|
|
112
|
+
|
|
113
|
+
/** Current height of the bottom panel */
|
|
114
|
+
// svelte-ignore state_referenced_locally
|
|
115
|
+
let bottomPanelHeightState = $state(initialBottomHeight);
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Sync left sidebar width with prop changes
|
|
119
|
+
* This allows external control (e.g., collapsed state) to update the width
|
|
120
|
+
*/
|
|
121
|
+
$effect(() => {
|
|
122
|
+
leftSidebarWidth = initialLeftWidth;
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
/** Whether the user is currently dragging the left divider */
|
|
126
|
+
let isDraggingLeft = $state(false);
|
|
127
|
+
|
|
128
|
+
/** Whether the user is currently dragging the right divider */
|
|
129
|
+
let isDraggingRight = $state(false);
|
|
130
|
+
|
|
131
|
+
/** Whether the user is currently dragging the bottom divider */
|
|
132
|
+
let isDraggingBottom = $state(false);
|
|
133
|
+
|
|
134
|
+
/** Reference to the layout container element */
|
|
135
|
+
let layoutRef: HTMLDivElement | null = null;
|
|
136
|
+
|
|
137
|
+
/** Reference to the main content wrapper for bottom panel calculations */
|
|
138
|
+
let mainContentRef: HTMLDivElement | null = null;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Handles the start of a drag operation on the left divider
|
|
142
|
+
* @param event - The mouse event that triggered the drag
|
|
143
|
+
*/
|
|
144
|
+
function handleLeftDragStart(event: MouseEvent): void {
|
|
145
|
+
if (!enableLeftSplitPane) return;
|
|
146
|
+
event.preventDefault();
|
|
147
|
+
isDraggingLeft = true;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Handles the start of a drag operation on the right divider
|
|
152
|
+
* @param event - The mouse event that triggered the drag
|
|
153
|
+
*/
|
|
154
|
+
function handleRightDragStart(event: MouseEvent): void {
|
|
155
|
+
if (!enableRightSplitPane) return;
|
|
156
|
+
event.preventDefault();
|
|
157
|
+
isDraggingRight = true;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Handles the start of a drag operation on the bottom divider
|
|
162
|
+
* @param event - The mouse event that triggered the drag
|
|
163
|
+
*/
|
|
164
|
+
function handleBottomDragStart(event: MouseEvent): void {
|
|
165
|
+
if (!enableBottomSplitPane) return;
|
|
166
|
+
event.preventDefault();
|
|
167
|
+
isDraggingBottom = true;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Handles mouse movement during drag operations
|
|
172
|
+
* Updates sidebar widths and bottom panel height based on mouse position
|
|
173
|
+
* @param event - The mouse event during drag
|
|
174
|
+
*/
|
|
175
|
+
function handleMouseMove(event: MouseEvent): void {
|
|
176
|
+
if (!layoutRef) return;
|
|
177
|
+
|
|
178
|
+
const layoutRect = layoutRef.getBoundingClientRect();
|
|
179
|
+
|
|
180
|
+
if (isDraggingLeft) {
|
|
181
|
+
// Calculate new width from the left edge of the layout
|
|
182
|
+
const newWidth = event.clientX - layoutRect.left;
|
|
183
|
+
// Clamp the width between min and max values
|
|
184
|
+
leftSidebarWidth = Math.min(
|
|
185
|
+
Math.max(newWidth, leftSidebarMinWidth),
|
|
186
|
+
leftSidebarMaxWidth,
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (isDraggingRight) {
|
|
191
|
+
// Calculate new width from the right edge of the layout
|
|
192
|
+
const newWidth = layoutRect.right - event.clientX;
|
|
193
|
+
// Clamp the width between min and max values
|
|
194
|
+
rightSidebarWidth = Math.min(
|
|
195
|
+
Math.max(newWidth, rightSidebarMinWidth),
|
|
196
|
+
rightSidebarMaxWidth,
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
if (isDraggingBottom && mainContentRef) {
|
|
201
|
+
// Calculate new height from the bottom of the main content area
|
|
202
|
+
const mainRect = mainContentRef.getBoundingClientRect();
|
|
203
|
+
const newHeight = mainRect.bottom - event.clientY;
|
|
204
|
+
// Clamp the height between min and max values
|
|
205
|
+
bottomPanelHeightState = Math.min(
|
|
206
|
+
Math.max(newHeight, bottomPanelMinHeight),
|
|
207
|
+
bottomPanelMaxHeight,
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Handles the end of a drag operation
|
|
214
|
+
* Resets dragging state for all dividers
|
|
215
|
+
*/
|
|
216
|
+
function handleMouseUp(): void {
|
|
217
|
+
isDraggingLeft = false;
|
|
218
|
+
isDraggingRight = false;
|
|
219
|
+
isDraggingBottom = false;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Handles keyboard navigation for accessibility
|
|
224
|
+
* Allows resizing with arrow keys when divider is focused
|
|
225
|
+
* @param event - The keyboard event
|
|
226
|
+
* @param side - Which divider is being adjusted
|
|
227
|
+
*/
|
|
228
|
+
function handleKeyDown(
|
|
229
|
+
event: KeyboardEvent,
|
|
230
|
+
side: "left" | "right" | "bottom",
|
|
231
|
+
): void {
|
|
232
|
+
// Check if the specific side's split pane is enabled
|
|
233
|
+
if (side === "left" && !enableLeftSplitPane) return;
|
|
234
|
+
if (side === "right" && !enableRightSplitPane) return;
|
|
235
|
+
if (side === "bottom" && !enableBottomSplitPane) return;
|
|
236
|
+
|
|
237
|
+
const step = event.shiftKey ? 50 : 10;
|
|
238
|
+
|
|
239
|
+
if (side === "left") {
|
|
240
|
+
if (event.key === "ArrowRight") {
|
|
241
|
+
event.preventDefault();
|
|
242
|
+
leftSidebarWidth = Math.min(
|
|
243
|
+
leftSidebarWidth + step,
|
|
244
|
+
leftSidebarMaxWidth,
|
|
245
|
+
);
|
|
246
|
+
} else if (event.key === "ArrowLeft") {
|
|
247
|
+
event.preventDefault();
|
|
248
|
+
leftSidebarWidth = Math.max(
|
|
249
|
+
leftSidebarWidth - step,
|
|
250
|
+
leftSidebarMinWidth,
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
} else if (side === "right") {
|
|
254
|
+
if (event.key === "ArrowLeft") {
|
|
255
|
+
event.preventDefault();
|
|
256
|
+
rightSidebarWidth = Math.min(
|
|
257
|
+
rightSidebarWidth + step,
|
|
258
|
+
rightSidebarMaxWidth,
|
|
259
|
+
);
|
|
260
|
+
} else if (event.key === "ArrowRight") {
|
|
261
|
+
event.preventDefault();
|
|
262
|
+
rightSidebarWidth = Math.max(
|
|
263
|
+
rightSidebarWidth - step,
|
|
264
|
+
rightSidebarMinWidth,
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
} else if (side === "bottom") {
|
|
268
|
+
if (event.key === "ArrowUp") {
|
|
269
|
+
event.preventDefault();
|
|
270
|
+
bottomPanelHeightState = Math.min(
|
|
271
|
+
bottomPanelHeightState + step,
|
|
272
|
+
bottomPanelMaxHeight,
|
|
273
|
+
);
|
|
274
|
+
} else if (event.key === "ArrowDown") {
|
|
275
|
+
event.preventDefault();
|
|
276
|
+
bottomPanelHeightState = Math.max(
|
|
277
|
+
bottomPanelHeightState - step,
|
|
278
|
+
bottomPanelMinHeight,
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// Set up global mouse event listeners for drag operations
|
|
285
|
+
onMount(() => {
|
|
286
|
+
/**
|
|
287
|
+
* Global mouse move handler for tracking drag operations
|
|
288
|
+
*/
|
|
289
|
+
const mouseMoveHandler = (e: MouseEvent) => {
|
|
290
|
+
if (isDraggingLeft || isDraggingRight || isDraggingBottom) {
|
|
291
|
+
handleMouseMove(e);
|
|
292
|
+
}
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* Global mouse up handler to end drag operations
|
|
297
|
+
*/
|
|
298
|
+
const mouseUpHandler = () => {
|
|
299
|
+
handleMouseUp();
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
// Attach event listeners to window for drag tracking
|
|
303
|
+
window.addEventListener("mousemove", mouseMoveHandler);
|
|
304
|
+
window.addEventListener("mouseup", mouseUpHandler);
|
|
305
|
+
|
|
306
|
+
// Cleanup on component unmount
|
|
307
|
+
return () => {
|
|
308
|
+
window.removeEventListener("mousemove", mouseMoveHandler);
|
|
309
|
+
window.removeEventListener("mouseup", mouseUpHandler);
|
|
310
|
+
};
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
/** Computed CSS variable for header height */
|
|
314
|
+
const headerHeightVar = $derived(`${headerHeight}px`);
|
|
315
|
+
|
|
316
|
+
/** Computed CSS variable for footer height */
|
|
317
|
+
const footerHeightVar = $derived(`${footerHeight}px`);
|
|
318
|
+
|
|
319
|
+
/** Computed CSS variable for left sidebar width */
|
|
320
|
+
const leftWidthVar = $derived(`${leftSidebarWidth}px`);
|
|
321
|
+
|
|
322
|
+
/** Computed CSS variable for right sidebar width */
|
|
323
|
+
const rightWidthVar = $derived(`${rightSidebarWidth}px`);
|
|
324
|
+
|
|
325
|
+
/** Computed CSS variable for bottom panel height */
|
|
326
|
+
const bottomHeightVar = $derived(`${bottomPanelHeightState}px`);
|
|
300
327
|
</script>
|
|
301
328
|
|
|
302
329
|
<div
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
330
|
+
bind:this={layoutRef}
|
|
331
|
+
class="flowdrop-main-layout {customClass}"
|
|
332
|
+
class:flowdrop-main-layout--dragging={isDraggingLeft ||
|
|
333
|
+
isDraggingRight ||
|
|
334
|
+
isDraggingBottom}
|
|
335
|
+
class:flowdrop-main-layout--dragging-vertical={isDraggingBottom}
|
|
336
|
+
style="
|
|
308
337
|
--layout-header-height: {headerHeightVar};
|
|
309
338
|
--layout-footer-height: {footerHeightVar};
|
|
310
339
|
--layout-left-sidebar-width: {leftWidthVar};
|
|
@@ -313,406 +342,410 @@
|
|
|
313
342
|
--layout-background: {backgroundColor};
|
|
314
343
|
"
|
|
315
344
|
>
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
345
|
+
<!-- Header Section -->
|
|
346
|
+
{#if showHeader && header}
|
|
347
|
+
<header class="flowdrop-main-layout__header">
|
|
348
|
+
{@render header()}
|
|
349
|
+
</header>
|
|
350
|
+
{/if}
|
|
351
|
+
|
|
352
|
+
<!-- Main Content Area -->
|
|
353
|
+
<div class="flowdrop-main-layout__body">
|
|
354
|
+
<!-- Left Sidebar -->
|
|
355
|
+
{#if showLeftSidebar && leftSidebar}
|
|
356
|
+
<aside
|
|
357
|
+
class="flowdrop-main-layout__sidebar flowdrop-main-layout__sidebar--left"
|
|
358
|
+
>
|
|
359
|
+
{@render leftSidebar()}
|
|
360
|
+
</aside>
|
|
361
|
+
|
|
362
|
+
<!-- Left Divider (Resizable Handle) -->
|
|
363
|
+
{#if enableLeftSplitPane}
|
|
364
|
+
<!-- svelte-ignore a11y_no_noninteractive_tabindex -->
|
|
365
|
+
<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
|
|
366
|
+
<div
|
|
367
|
+
class="flowdrop-main-layout__divider flowdrop-main-layout__divider--left"
|
|
368
|
+
class:flowdrop-main-layout__divider--active={isDraggingLeft}
|
|
369
|
+
onmousedown={handleLeftDragStart}
|
|
370
|
+
onkeydown={(e) => handleKeyDown(e, "left")}
|
|
371
|
+
role="separator"
|
|
372
|
+
aria-orientation="vertical"
|
|
373
|
+
aria-valuenow={leftSidebarWidth}
|
|
374
|
+
aria-valuemin={leftSidebarMinWidth}
|
|
375
|
+
aria-valuemax={leftSidebarMaxWidth}
|
|
376
|
+
aria-label="Resize left sidebar"
|
|
377
|
+
tabindex="0"
|
|
378
|
+
>
|
|
379
|
+
<div class="flowdrop-main-layout__divider-handle"></div>
|
|
380
|
+
</div>
|
|
381
|
+
{/if}
|
|
382
|
+
{/if}
|
|
383
|
+
|
|
384
|
+
<!-- Center Main Content Wrapper (with optional bottom panel) -->
|
|
385
|
+
<div
|
|
386
|
+
bind:this={mainContentRef}
|
|
387
|
+
class="flowdrop-main-layout__main-wrapper"
|
|
388
|
+
class:flowdrop-main-layout__main-wrapper--with-bottom={showBottomPanel &&
|
|
389
|
+
bottomPanel}
|
|
390
|
+
>
|
|
391
|
+
<!-- Main Content Area -->
|
|
392
|
+
<main class="flowdrop-main-layout__main">
|
|
393
|
+
{#if children}
|
|
394
|
+
{@render children()}
|
|
395
|
+
{/if}
|
|
396
|
+
</main>
|
|
397
|
+
|
|
398
|
+
<!-- Bottom Panel Divider -->
|
|
399
|
+
{#if showBottomPanel && bottomPanel && enableBottomSplitPane}
|
|
400
|
+
<!-- svelte-ignore a11y_no_noninteractive_tabindex -->
|
|
401
|
+
<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
|
|
402
|
+
<div
|
|
403
|
+
class="flowdrop-main-layout__divider flowdrop-main-layout__divider--bottom"
|
|
404
|
+
class:flowdrop-main-layout__divider--active={isDraggingBottom}
|
|
405
|
+
onmousedown={handleBottomDragStart}
|
|
406
|
+
onkeydown={(e) => handleKeyDown(e, "bottom")}
|
|
407
|
+
role="separator"
|
|
408
|
+
aria-orientation="horizontal"
|
|
409
|
+
aria-valuenow={bottomPanelHeightState}
|
|
410
|
+
aria-valuemin={bottomPanelMinHeight}
|
|
411
|
+
aria-valuemax={bottomPanelMaxHeight}
|
|
412
|
+
aria-label="Resize bottom panel"
|
|
413
|
+
tabindex="0"
|
|
414
|
+
>
|
|
415
|
+
<div
|
|
416
|
+
class="flowdrop-main-layout__divider-handle flowdrop-main-layout__divider-handle--horizontal"
|
|
417
|
+
></div>
|
|
418
|
+
</div>
|
|
419
|
+
{/if}
|
|
420
|
+
|
|
421
|
+
<!-- Bottom Panel -->
|
|
422
|
+
{#if showBottomPanel && bottomPanel}
|
|
423
|
+
<aside
|
|
424
|
+
class="flowdrop-main-layout__panel flowdrop-main-layout__panel--bottom"
|
|
425
|
+
>
|
|
426
|
+
{@render bottomPanel()}
|
|
427
|
+
</aside>
|
|
428
|
+
{/if}
|
|
429
|
+
</div>
|
|
430
|
+
|
|
431
|
+
<!-- Right Divider (Resizable Handle) -->
|
|
432
|
+
{#if showRightSidebar && rightSidebar && enableRightSplitPane}
|
|
433
|
+
<!-- svelte-ignore a11y_no_noninteractive_tabindex -->
|
|
434
|
+
<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
|
|
435
|
+
<div
|
|
436
|
+
class="flowdrop-main-layout__divider flowdrop-main-layout__divider--right"
|
|
437
|
+
class:flowdrop-main-layout__divider--active={isDraggingRight}
|
|
438
|
+
onmousedown={handleRightDragStart}
|
|
439
|
+
onkeydown={(e) => handleKeyDown(e, "right")}
|
|
440
|
+
role="separator"
|
|
441
|
+
aria-orientation="vertical"
|
|
442
|
+
aria-valuenow={rightSidebarWidth}
|
|
443
|
+
aria-valuemin={rightSidebarMinWidth}
|
|
444
|
+
aria-valuemax={rightSidebarMaxWidth}
|
|
445
|
+
aria-label="Resize right sidebar"
|
|
446
|
+
tabindex="0"
|
|
447
|
+
>
|
|
448
|
+
<div class="flowdrop-main-layout__divider-handle"></div>
|
|
449
|
+
</div>
|
|
450
|
+
{/if}
|
|
451
|
+
|
|
452
|
+
<!-- Right Sidebar -->
|
|
453
|
+
{#if showRightSidebar && rightSidebar}
|
|
454
|
+
<aside
|
|
455
|
+
class="flowdrop-main-layout__sidebar flowdrop-main-layout__sidebar--right"
|
|
456
|
+
>
|
|
457
|
+
{@render rightSidebar()}
|
|
458
|
+
</aside>
|
|
459
|
+
{/if}
|
|
460
|
+
</div>
|
|
461
|
+
|
|
462
|
+
<!-- Footer Section -->
|
|
463
|
+
{#if showFooter && footer}
|
|
464
|
+
<footer class="flowdrop-main-layout__footer">
|
|
465
|
+
{@render footer()}
|
|
466
|
+
</footer>
|
|
467
|
+
{/if}
|
|
432
468
|
</div>
|
|
433
469
|
|
|
434
470
|
<style>
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
right: 0;
|
|
716
|
-
}
|
|
717
|
-
}
|
|
471
|
+
/* Main Layout Container */
|
|
472
|
+
.flowdrop-main-layout {
|
|
473
|
+
display: flex;
|
|
474
|
+
flex-direction: column;
|
|
475
|
+
height: 100vh;
|
|
476
|
+
width: 100%;
|
|
477
|
+
background: var(
|
|
478
|
+
--fd-layout-background,
|
|
479
|
+
linear-gradient(135deg, #f9fafb 0%, #e0e7ff 50%, #c7d2fe 100%)
|
|
480
|
+
);
|
|
481
|
+
overflow: hidden;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
/* Disable text selection and pointer events during drag */
|
|
485
|
+
.flowdrop-main-layout--dragging {
|
|
486
|
+
user-select: none;
|
|
487
|
+
cursor: col-resize;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
.flowdrop-main-layout--dragging * {
|
|
491
|
+
pointer-events: none;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
.flowdrop-main-layout--dragging .flowdrop-main-layout__divider {
|
|
495
|
+
pointer-events: auto;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
/* Header Section */
|
|
499
|
+
.flowdrop-main-layout__header {
|
|
500
|
+
height: var(--layout-header-height);
|
|
501
|
+
min-height: var(--layout-header-height);
|
|
502
|
+
max-height: var(--layout-header-height);
|
|
503
|
+
width: 100%;
|
|
504
|
+
background-color: var(--fd-background);
|
|
505
|
+
border-bottom: 1px solid var(--fd-border);
|
|
506
|
+
display: flex;
|
|
507
|
+
align-items: center;
|
|
508
|
+
z-index: 100;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
/* Main Body Container */
|
|
512
|
+
.flowdrop-main-layout__body {
|
|
513
|
+
flex: 1;
|
|
514
|
+
display: flex;
|
|
515
|
+
min-height: 0;
|
|
516
|
+
overflow: hidden;
|
|
517
|
+
position: relative;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
/* Sidebar Base Styles */
|
|
521
|
+
.flowdrop-main-layout__sidebar {
|
|
522
|
+
height: 100%;
|
|
523
|
+
background-color: var(--fd-background);
|
|
524
|
+
overflow-y: auto;
|
|
525
|
+
overflow-x: hidden;
|
|
526
|
+
display: flex;
|
|
527
|
+
flex-direction: column;
|
|
528
|
+
z-index: 10;
|
|
529
|
+
|
|
530
|
+
/* Custom scrollbar styling */
|
|
531
|
+
scrollbar-width: thin;
|
|
532
|
+
scrollbar-color: var(--fd-scrollbar-thumb) var(--fd-scrollbar-track);
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
.flowdrop-main-layout__sidebar::-webkit-scrollbar {
|
|
536
|
+
width: 8px;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
.flowdrop-main-layout__sidebar::-webkit-scrollbar-track {
|
|
540
|
+
background: var(--fd-scrollbar-track);
|
|
541
|
+
border-radius: 4px;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
.flowdrop-main-layout__sidebar::-webkit-scrollbar-thumb {
|
|
545
|
+
background: var(--fd-scrollbar-thumb);
|
|
546
|
+
border-radius: 4px;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
.flowdrop-main-layout__sidebar::-webkit-scrollbar-thumb:hover {
|
|
550
|
+
background: var(--fd-scrollbar-thumb-hover);
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/* Left Sidebar */
|
|
554
|
+
.flowdrop-main-layout__sidebar--left {
|
|
555
|
+
width: var(--layout-left-sidebar-width);
|
|
556
|
+
min-width: var(--layout-left-sidebar-width);
|
|
557
|
+
border-right: 1px solid var(--fd-border);
|
|
558
|
+
box-shadow: 2px 0 4px rgba(0, 0, 0, 0.05);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/* Right Sidebar */
|
|
562
|
+
.flowdrop-main-layout__sidebar--right {
|
|
563
|
+
width: var(--layout-right-sidebar-width);
|
|
564
|
+
min-width: var(--layout-right-sidebar-width);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
/* Main Content Wrapper - Contains main content and optional bottom panel */
|
|
568
|
+
.flowdrop-main-layout__main-wrapper {
|
|
569
|
+
flex: 1;
|
|
570
|
+
min-width: 0;
|
|
571
|
+
display: flex;
|
|
572
|
+
flex-direction: column;
|
|
573
|
+
position: relative;
|
|
574
|
+
overflow: hidden;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
/* Main Content Area */
|
|
578
|
+
.flowdrop-main-layout__main {
|
|
579
|
+
flex: 1;
|
|
580
|
+
min-width: 0;
|
|
581
|
+
min-height: 0;
|
|
582
|
+
overflow: auto;
|
|
583
|
+
position: relative;
|
|
584
|
+
display: flex;
|
|
585
|
+
flex-direction: column;
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
/* When bottom panel is shown, main area should shrink */
|
|
589
|
+
.flowdrop-main-layout__main-wrapper--with-bottom .flowdrop-main-layout__main {
|
|
590
|
+
height: calc(100% - var(--layout-bottom-panel-height) - 8px);
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
/* Divider (Resize Handle) Base Styles */
|
|
594
|
+
.flowdrop-main-layout__divider {
|
|
595
|
+
width: 8px;
|
|
596
|
+
height: 100%;
|
|
597
|
+
display: flex;
|
|
598
|
+
align-items: center;
|
|
599
|
+
justify-content: center;
|
|
600
|
+
cursor: col-resize;
|
|
601
|
+
background-color: var(--fd-background);
|
|
602
|
+
position: relative;
|
|
603
|
+
z-index: 20;
|
|
604
|
+
flex-shrink: 0;
|
|
605
|
+
transition: background-color 0.2s ease;
|
|
606
|
+
border-right: 1px solid var(--fd-border);
|
|
607
|
+
border-left: 1px solid var(--fd-border);
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
.flowdrop-main-layout__divider:hover,
|
|
611
|
+
.flowdrop-main-layout__divider:focus {
|
|
612
|
+
background-color: var(--fd-primary-muted);
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
.flowdrop-main-layout__divider:focus {
|
|
616
|
+
outline: none;
|
|
617
|
+
background-color: var(--fd-primary-muted);
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
.flowdrop-main-layout__divider--active {
|
|
621
|
+
background-color: var(--fd-primary-muted);
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
/* Divider Handle (Visual Indicator) */
|
|
625
|
+
.flowdrop-main-layout__divider-handle {
|
|
626
|
+
width: 4px;
|
|
627
|
+
height: 48px;
|
|
628
|
+
background-color: var(--fd-border-strong);
|
|
629
|
+
border-radius: 4px;
|
|
630
|
+
transition:
|
|
631
|
+
background-color 0.2s ease,
|
|
632
|
+
transform 0.2s ease;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
.flowdrop-main-layout__divider:hover .flowdrop-main-layout__divider-handle,
|
|
636
|
+
.flowdrop-main-layout__divider:focus .flowdrop-main-layout__divider-handle {
|
|
637
|
+
background-color: var(--fd-primary);
|
|
638
|
+
transform: scaleY(1.2);
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
.flowdrop-main-layout__divider--active .flowdrop-main-layout__divider-handle {
|
|
642
|
+
background-color: var(--fd-primary-hover);
|
|
643
|
+
transform: scaleY(1.4);
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
/* Bottom Divider (Horizontal) */
|
|
647
|
+
.flowdrop-main-layout__divider--bottom {
|
|
648
|
+
width: 100%;
|
|
649
|
+
height: 8px;
|
|
650
|
+
cursor: row-resize;
|
|
651
|
+
flex-shrink: 0;
|
|
652
|
+
border-top: 1px solid var(--fd-border);
|
|
653
|
+
border-bottom: 1px solid var(--fd-border);
|
|
654
|
+
border-left: none;
|
|
655
|
+
border-right: none;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
/* Horizontal Divider Handle */
|
|
659
|
+
.flowdrop-main-layout__divider-handle--horizontal {
|
|
660
|
+
width: 48px;
|
|
661
|
+
height: 4px;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
.flowdrop-main-layout__divider--bottom:hover
|
|
665
|
+
.flowdrop-main-layout__divider-handle--horizontal,
|
|
666
|
+
.flowdrop-main-layout__divider--bottom:focus
|
|
667
|
+
.flowdrop-main-layout__divider-handle--horizontal {
|
|
668
|
+
transform: scaleX(1.2);
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
.flowdrop-main-layout__divider--bottom.flowdrop-main-layout__divider--active
|
|
672
|
+
.flowdrop-main-layout__divider-handle--horizontal {
|
|
673
|
+
transform: scaleX(1.4);
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
/* Bottom Panel Styles */
|
|
677
|
+
.flowdrop-main-layout__panel--bottom {
|
|
678
|
+
height: var(--layout-bottom-panel-height);
|
|
679
|
+
min-height: var(--layout-bottom-panel-height);
|
|
680
|
+
max-height: var(--layout-bottom-panel-height);
|
|
681
|
+
width: 100%;
|
|
682
|
+
background-color: var(--fd-background);
|
|
683
|
+
overflow-y: auto;
|
|
684
|
+
overflow-x: hidden;
|
|
685
|
+
display: flex;
|
|
686
|
+
flex-direction: column;
|
|
687
|
+
flex-shrink: 0;
|
|
688
|
+
border-top: 1px solid var(--fd-border);
|
|
689
|
+
box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.05);
|
|
690
|
+
|
|
691
|
+
/* Custom scrollbar styling */
|
|
692
|
+
scrollbar-width: thin;
|
|
693
|
+
scrollbar-color: var(--fd-scrollbar-thumb) var(--fd-scrollbar-track);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
.flowdrop-main-layout__panel--bottom::-webkit-scrollbar {
|
|
697
|
+
width: 8px;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
.flowdrop-main-layout__panel--bottom::-webkit-scrollbar-track {
|
|
701
|
+
background: var(--fd-scrollbar-track);
|
|
702
|
+
border-radius: 4px;
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
.flowdrop-main-layout__panel--bottom::-webkit-scrollbar-thumb {
|
|
706
|
+
background: var(--fd-scrollbar-thumb);
|
|
707
|
+
border-radius: 4px;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
.flowdrop-main-layout__panel--bottom::-webkit-scrollbar-thumb:hover {
|
|
711
|
+
background: var(--fd-scrollbar-thumb-hover);
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
/* Vertical dragging cursor override */
|
|
715
|
+
.flowdrop-main-layout--dragging-vertical {
|
|
716
|
+
cursor: row-resize;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
/* Footer Section */
|
|
720
|
+
.flowdrop-main-layout__footer {
|
|
721
|
+
height: var(--layout-footer-height);
|
|
722
|
+
min-height: var(--layout-footer-height);
|
|
723
|
+
max-height: var(--layout-footer-height);
|
|
724
|
+
width: 100%;
|
|
725
|
+
background-color: var(--fd-background);
|
|
726
|
+
border-top: 1px solid var(--fd-border);
|
|
727
|
+
display: flex;
|
|
728
|
+
align-items: center;
|
|
729
|
+
z-index: 100;
|
|
730
|
+
box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.05);
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
/* Responsive Adjustments */
|
|
734
|
+
@media (max-width: 768px) {
|
|
735
|
+
.flowdrop-main-layout__sidebar--left,
|
|
736
|
+
.flowdrop-main-layout__sidebar--right {
|
|
737
|
+
position: absolute;
|
|
738
|
+
top: 0;
|
|
739
|
+
bottom: 0;
|
|
740
|
+
z-index: 50;
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
.flowdrop-main-layout__sidebar--left {
|
|
744
|
+
left: 0;
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
.flowdrop-main-layout__sidebar--right {
|
|
748
|
+
right: 0;
|
|
749
|
+
}
|
|
750
|
+
}
|
|
718
751
|
</style>
|