@flowdrop/flowdrop 1.0.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/LICENSE +21 -0
- package/README.md +252 -0
- package/dist/adapters/WorkflowAdapter.d.ts +167 -0
- package/dist/adapters/WorkflowAdapter.js +368 -0
- package/dist/adapters/agentspec/AgentSpecAdapter.d.ts +96 -0
- package/dist/adapters/agentspec/AgentSpecAdapter.js +626 -0
- package/dist/adapters/agentspec/agentAdapter.d.ts +59 -0
- package/dist/adapters/agentspec/agentAdapter.js +91 -0
- package/dist/adapters/agentspec/autoLayout.d.ts +34 -0
- package/dist/adapters/agentspec/autoLayout.js +127 -0
- package/dist/adapters/agentspec/componentTypeDefaults.d.ts +73 -0
- package/dist/adapters/agentspec/componentTypeDefaults.js +238 -0
- package/dist/adapters/agentspec/defaultNodeTypes.d.ts +53 -0
- package/dist/adapters/agentspec/defaultNodeTypes.js +561 -0
- package/dist/adapters/agentspec/index.d.ts +37 -0
- package/dist/adapters/agentspec/index.js +39 -0
- package/dist/adapters/agentspec/validator.d.ts +34 -0
- package/dist/adapters/agentspec/validator.js +169 -0
- package/dist/api/enhanced-client.d.ts +183 -0
- package/dist/api/enhanced-client.js +430 -0
- package/dist/components/App.svelte +981 -0
- package/dist/components/App.svelte.d.ts +54 -0
- package/dist/components/CanvasBanner.stories.svelte +29 -0
- package/dist/components/CanvasBanner.stories.svelte.d.ts +27 -0
- package/dist/components/CanvasBanner.svelte +57 -0
- package/dist/components/CanvasBanner.svelte.d.ts +8 -0
- package/dist/components/ConfigForm.svelte +1138 -0
- package/dist/components/ConfigForm.svelte.d.ts +44 -0
- package/dist/components/ConfigModal.svelte +188 -0
- package/dist/components/ConfigModal.svelte.d.ts +13 -0
- package/dist/components/ConfigPanel.stories.svelte +47 -0
- package/dist/components/ConfigPanel.stories.svelte.d.ts +27 -0
- package/dist/components/ConfigPanel.svelte +182 -0
- package/dist/components/ConfigPanel.svelte.d.ts +32 -0
- package/dist/components/ConnectionLine.svelte +32 -0
- package/dist/components/ConnectionLine.svelte.d.ts +3 -0
- package/dist/components/EdgeRefresher.svelte +41 -0
- package/dist/components/EdgeRefresher.svelte.d.ts +9 -0
- package/dist/components/FlowDropZone.svelte +83 -0
- package/dist/components/FlowDropZone.svelte.d.ts +13 -0
- package/dist/components/LoadingSpinner.stories.svelte +30 -0
- package/dist/components/LoadingSpinner.stories.svelte.d.ts +27 -0
- package/dist/components/LoadingSpinner.svelte +36 -0
- package/dist/components/LoadingSpinner.svelte.d.ts +8 -0
- package/dist/components/Logo.stories.svelte +22 -0
- package/dist/components/Logo.stories.svelte.d.ts +27 -0
- package/dist/components/Logo.svelte +102 -0
- package/dist/components/Logo.svelte.d.ts +26 -0
- package/dist/components/LogsSidebar.svelte +563 -0
- package/dist/components/LogsSidebar.svelte.d.ts +17 -0
- package/dist/components/MarkdownDisplay.stories.svelte +36 -0
- package/dist/components/MarkdownDisplay.stories.svelte.d.ts +27 -0
- package/dist/components/MarkdownDisplay.svelte +29 -0
- package/dist/components/MarkdownDisplay.svelte.d.ts +7 -0
- package/dist/components/Navbar.stories.svelte +53 -0
- package/dist/components/Navbar.stories.svelte.d.ts +27 -0
- package/dist/components/Navbar.svelte +726 -0
- package/dist/components/Navbar.svelte.d.ts +29 -0
- package/dist/components/NodeSidebar.svelte +762 -0
- package/dist/components/NodeSidebar.svelte.d.ts +9 -0
- package/dist/components/NodeStatusOverlay.stories.svelte +85 -0
- package/dist/components/NodeStatusOverlay.stories.svelte.d.ts +27 -0
- package/dist/components/NodeStatusOverlay.svelte +327 -0
- package/dist/components/NodeStatusOverlay.svelte.d.ts +11 -0
- package/dist/components/PipelineStatus.svelte +314 -0
- package/dist/components/PipelineStatus.svelte.d.ts +20 -0
- package/dist/components/PortCoordinateTracker.svelte +58 -0
- package/dist/components/PortCoordinateTracker.svelte.d.ts +12 -0
- package/dist/components/ReadOnlyDetails.svelte +170 -0
- package/dist/components/ReadOnlyDetails.svelte.d.ts +25 -0
- package/dist/components/SchemaForm.stories.svelte +116 -0
- package/dist/components/SchemaForm.stories.svelte.d.ts +27 -0
- package/dist/components/SchemaForm.svelte +536 -0
- package/dist/components/SchemaForm.svelte.d.ts +83 -0
- package/dist/components/SettingsModal.svelte +279 -0
- package/dist/components/SettingsModal.svelte.d.ts +23 -0
- package/dist/components/SettingsPanel.svelte +638 -0
- package/dist/components/SettingsPanel.svelte.d.ts +21 -0
- package/dist/components/StatusIcon.stories.svelte +60 -0
- package/dist/components/StatusIcon.stories.svelte.d.ts +27 -0
- package/dist/components/StatusIcon.svelte +119 -0
- package/dist/components/StatusIcon.svelte.d.ts +10 -0
- package/dist/components/StatusLabel.stories.svelte +17 -0
- package/dist/components/StatusLabel.stories.svelte.d.ts +27 -0
- package/dist/components/StatusLabel.svelte +33 -0
- package/dist/components/StatusLabel.svelte.d.ts +7 -0
- package/dist/components/ThemeToggle.stories.svelte +25 -0
- package/dist/components/ThemeToggle.stories.svelte.d.ts +27 -0
- package/dist/components/ThemeToggle.svelte +185 -0
- package/dist/components/ThemeToggle.svelte.d.ts +14 -0
- package/dist/components/UniversalNode.svelte +155 -0
- package/dist/components/UniversalNode.svelte.d.ts +15 -0
- package/dist/components/WorkflowEditor.svelte +1035 -0
- package/dist/components/WorkflowEditor.svelte.d.ts +23 -0
- package/dist/components/form/FormArray.svelte +1049 -0
- package/dist/components/form/FormArray.svelte.d.ts +22 -0
- package/dist/components/form/FormAutocomplete.svelte +1009 -0
- package/dist/components/form/FormAutocomplete.svelte.d.ts +25 -0
- package/dist/components/form/FormCheckboxGroup.stories.svelte +28 -0
- package/dist/components/form/FormCheckboxGroup.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormCheckboxGroup.svelte +155 -0
- package/dist/components/form/FormCheckboxGroup.svelte.d.ts +17 -0
- package/dist/components/form/FormCodeEditor.svelte +458 -0
- package/dist/components/form/FormCodeEditor.svelte.d.ts +25 -0
- package/dist/components/form/FormField.svelte +417 -0
- package/dist/components/form/FormField.svelte.d.ts +29 -0
- package/dist/components/form/FormFieldLight.svelte +425 -0
- package/dist/components/form/FormFieldLight.svelte.d.ts +18 -0
- package/dist/components/form/FormFieldWrapper.stories.svelte +53 -0
- package/dist/components/form/FormFieldWrapper.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormFieldWrapper.svelte +125 -0
- package/dist/components/form/FormFieldWrapper.svelte.d.ts +18 -0
- package/dist/components/form/FormFieldset.svelte +142 -0
- package/dist/components/form/FormFieldset.svelte.d.ts +11 -0
- package/dist/components/form/FormMarkdownEditor.svelte +752 -0
- package/dist/components/form/FormMarkdownEditor.svelte.d.ts +33 -0
- package/dist/components/form/FormNumberField.stories.svelte +36 -0
- package/dist/components/form/FormNumberField.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormNumberField.svelte +112 -0
- package/dist/components/form/FormNumberField.svelte.d.ts +25 -0
- package/dist/components/form/FormRangeField.stories.svelte +31 -0
- package/dist/components/form/FormRangeField.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormRangeField.svelte +246 -0
- package/dist/components/form/FormRangeField.svelte.d.ts +23 -0
- package/dist/components/form/FormSelect.stories.svelte +50 -0
- package/dist/components/form/FormSelect.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormSelect.svelte +129 -0
- package/dist/components/form/FormSelect.svelte.d.ts +20 -0
- package/dist/components/form/FormTemplateEditor.svelte +825 -0
- package/dist/components/form/FormTemplateEditor.svelte.d.ts +41 -0
- package/dist/components/form/FormTextField.stories.svelte +30 -0
- package/dist/components/form/FormTextField.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormTextField.svelte +91 -0
- package/dist/components/form/FormTextField.svelte.d.ts +19 -0
- package/dist/components/form/FormTextarea.stories.svelte +34 -0
- package/dist/components/form/FormTextarea.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormTextarea.svelte +97 -0
- package/dist/components/form/FormTextarea.svelte.d.ts +21 -0
- package/dist/components/form/FormToggle.stories.svelte +30 -0
- package/dist/components/form/FormToggle.stories.svelte.d.ts +27 -0
- package/dist/components/form/FormToggle.svelte +126 -0
- package/dist/components/form/FormToggle.svelte.d.ts +19 -0
- package/dist/components/form/FormUISchemaRenderer.svelte +136 -0
- package/dist/components/form/FormUISchemaRenderer.svelte.d.ts +32 -0
- package/dist/components/form/index.d.ts +50 -0
- package/dist/components/form/index.js +54 -0
- package/dist/components/form/templateAutocomplete.d.ts +29 -0
- package/dist/components/form/templateAutocomplete.js +254 -0
- package/dist/components/form/types.d.ts +485 -0
- package/dist/components/form/types.js +73 -0
- package/dist/components/interrupt/ChoicePrompt.stories.svelte +52 -0
- package/dist/components/interrupt/ChoicePrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/ChoicePrompt.svelte +401 -0
- package/dist/components/interrupt/ChoicePrompt.svelte.d.ts +23 -0
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte +71 -0
- package/dist/components/interrupt/ConfirmationPrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/ConfirmationPrompt.svelte +292 -0
- package/dist/components/interrupt/ConfirmationPrompt.svelte.d.ts +25 -0
- package/dist/components/interrupt/FormPrompt.svelte +236 -0
- package/dist/components/interrupt/FormPrompt.svelte.d.ts +23 -0
- package/dist/components/interrupt/InterruptBubble.svelte +601 -0
- package/dist/components/interrupt/InterruptBubble.svelte.d.ts +16 -0
- package/dist/components/interrupt/ReviewPrompt.stories.svelte +67 -0
- package/dist/components/interrupt/ReviewPrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/ReviewPrompt.svelte +861 -0
- package/dist/components/interrupt/ReviewPrompt.svelte.d.ts +23 -0
- package/dist/components/interrupt/TextInputPrompt.stories.svelte +47 -0
- package/dist/components/interrupt/TextInputPrompt.stories.svelte.d.ts +27 -0
- package/dist/components/interrupt/TextInputPrompt.svelte +346 -0
- package/dist/components/interrupt/TextInputPrompt.svelte.d.ts +23 -0
- package/dist/components/interrupt/index.d.ts +13 -0
- package/dist/components/interrupt/index.js +15 -0
- package/dist/components/layouts/MainLayout.svelte +718 -0
- package/dist/components/layouts/MainLayout.svelte.d.ts +62 -0
- package/dist/components/nodes/GatewayNode.stories.svelte +108 -0
- package/dist/components/nodes/GatewayNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/GatewayNode.svelte +591 -0
- package/dist/components/nodes/GatewayNode.svelte.d.ts +15 -0
- package/dist/components/nodes/IdeaNode.stories.svelte +52 -0
- package/dist/components/nodes/IdeaNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/IdeaNode.svelte +455 -0
- package/dist/components/nodes/IdeaNode.svelte.d.ts +24 -0
- package/dist/components/nodes/NotesNode.stories.svelte +76 -0
- package/dist/components/nodes/NotesNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/NotesNode.svelte +378 -0
- package/dist/components/nodes/NotesNode.svelte.d.ts +24 -0
- package/dist/components/nodes/SimpleNode.stories.svelte +159 -0
- package/dist/components/nodes/SimpleNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/SimpleNode.svelte +451 -0
- package/dist/components/nodes/SimpleNode.svelte.d.ts +25 -0
- package/dist/components/nodes/SquareNode.stories.svelte +82 -0
- package/dist/components/nodes/SquareNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/SquareNode.svelte +407 -0
- package/dist/components/nodes/SquareNode.svelte.d.ts +25 -0
- package/dist/components/nodes/TerminalNode.stories.svelte +25 -0
- package/dist/components/nodes/TerminalNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/TerminalNode.svelte +690 -0
- package/dist/components/nodes/TerminalNode.svelte.d.ts +25 -0
- package/dist/components/nodes/ToolNode.stories.svelte +189 -0
- package/dist/components/nodes/ToolNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/ToolNode.svelte +471 -0
- package/dist/components/nodes/ToolNode.svelte.d.ts +36 -0
- package/dist/components/nodes/WorkflowNode.stories.svelte +55 -0
- package/dist/components/nodes/WorkflowNode.stories.svelte.d.ts +26 -0
- package/dist/components/nodes/WorkflowNode.svelte +571 -0
- package/dist/components/nodes/WorkflowNode.svelte.d.ts +15 -0
- package/dist/components/playground/ChatPanel.svelte +905 -0
- package/dist/components/playground/ChatPanel.svelte.d.ts +46 -0
- package/dist/components/playground/ExecutionLogs.svelte +488 -0
- package/dist/components/playground/ExecutionLogs.svelte.d.ts +14 -0
- package/dist/components/playground/InputCollector.svelte +444 -0
- package/dist/components/playground/InputCollector.svelte.d.ts +16 -0
- package/dist/components/playground/MessageBubble.stories.svelte +62 -0
- package/dist/components/playground/MessageBubble.stories.svelte.d.ts +27 -0
- package/dist/components/playground/MessageBubble.svelte +633 -0
- package/dist/components/playground/MessageBubble.svelte.d.ts +24 -0
- package/dist/components/playground/Playground.svelte +1075 -0
- package/dist/components/playground/Playground.svelte.d.ts +25 -0
- package/dist/components/playground/PlaygroundModal.svelte +220 -0
- package/dist/components/playground/PlaygroundModal.svelte.d.ts +25 -0
- package/dist/components/playground/SessionManager.svelte +538 -0
- package/dist/components/playground/SessionManager.svelte.d.ts +20 -0
- package/dist/config/agentSpecEndpoints.d.ts +70 -0
- package/dist/config/agentSpecEndpoints.js +65 -0
- package/dist/config/constants.d.ts +43 -0
- package/dist/config/constants.js +31 -0
- package/dist/config/defaultCategories.d.ts +7 -0
- package/dist/config/defaultCategories.js +126 -0
- package/dist/config/defaultPortConfig.d.ts +6 -0
- package/dist/config/defaultPortConfig.js +201 -0
- package/dist/config/endpoints.d.ts +160 -0
- package/dist/config/endpoints.js +146 -0
- package/dist/config/runtimeConfig.d.ts +47 -0
- package/dist/config/runtimeConfig.js +80 -0
- package/dist/core/index.d.ts +75 -0
- package/dist/core/index.js +92 -0
- package/dist/display/index.d.ts +29 -0
- package/dist/display/index.js +36 -0
- package/dist/editor/index.d.ts +95 -0
- package/dist/editor/index.js +138 -0
- package/dist/form/code.d.ts +101 -0
- package/dist/form/code.js +168 -0
- package/dist/form/fieldRegistry.d.ts +169 -0
- package/dist/form/fieldRegistry.js +152 -0
- package/dist/form/full.d.ts +56 -0
- package/dist/form/full.js +80 -0
- package/dist/form/index.d.ts +77 -0
- package/dist/form/index.js +91 -0
- package/dist/form/markdown.d.ts +69 -0
- package/dist/form/markdown.js +103 -0
- package/dist/helpers/nodeLayoutHelper.d.ts +14 -0
- package/dist/helpers/nodeLayoutHelper.js +19 -0
- package/dist/helpers/proximityConnect.d.ts +94 -0
- package/dist/helpers/proximityConnect.js +314 -0
- package/dist/helpers/workflowEditorHelper.d.ts +183 -0
- package/dist/helpers/workflowEditorHelper.js +595 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.js +64 -0
- package/dist/mocks/app-environment.d.ts +8 -0
- package/dist/mocks/app-environment.js +16 -0
- package/dist/mocks/app-forms.d.ts +2 -0
- package/dist/mocks/app-forms.js +22 -0
- package/dist/mocks/app-navigation.d.ts +5 -0
- package/dist/mocks/app-navigation.js +36 -0
- package/dist/mocks/app-stores.d.ts +14 -0
- package/dist/mocks/app-stores.js +26 -0
- package/dist/playground/index.d.ts +131 -0
- package/dist/playground/index.js +172 -0
- package/dist/playground/mount.d.ts +203 -0
- package/dist/playground/mount.js +235 -0
- package/dist/registry/BaseRegistry.d.ts +92 -0
- package/dist/registry/BaseRegistry.js +124 -0
- package/dist/registry/builtinFormats.d.ts +23 -0
- package/dist/registry/builtinFormats.js +70 -0
- package/dist/registry/builtinNodes.d.ts +77 -0
- package/dist/registry/builtinNodes.js +211 -0
- package/dist/registry/index.d.ts +8 -0
- package/dist/registry/index.js +12 -0
- package/dist/registry/nodeComponentRegistry.d.ts +276 -0
- package/dist/registry/nodeComponentRegistry.js +262 -0
- package/dist/registry/plugin.d.ts +215 -0
- package/dist/registry/plugin.js +249 -0
- package/dist/registry/workflowFormatRegistry.d.ts +122 -0
- package/dist/registry/workflowFormatRegistry.js +96 -0
- package/dist/schema/index.d.ts +23 -0
- package/dist/schema/index.js +23 -0
- package/dist/schemas/v1/workflow.schema.json +1078 -0
- package/dist/services/agentSpecExecutionService.d.ts +106 -0
- package/dist/services/agentSpecExecutionService.js +334 -0
- package/dist/services/api.d.ts +115 -0
- package/dist/services/api.js +214 -0
- package/dist/services/apiVariableService.d.ts +114 -0
- package/dist/services/apiVariableService.js +338 -0
- package/dist/services/autoSaveService.d.ts +112 -0
- package/dist/services/autoSaveService.js +227 -0
- package/dist/services/categoriesApi.d.ts +14 -0
- package/dist/services/categoriesApi.js +49 -0
- package/dist/services/draftStorage.d.ts +171 -0
- package/dist/services/draftStorage.js +299 -0
- package/dist/services/dynamicSchemaService.d.ts +108 -0
- package/dist/services/dynamicSchemaService.js +444 -0
- package/dist/services/globalSave.d.ts +69 -0
- package/dist/services/globalSave.js +248 -0
- package/dist/services/historyService.d.ts +208 -0
- package/dist/services/historyService.js +321 -0
- package/dist/services/interruptService.d.ts +133 -0
- package/dist/services/interruptService.js +280 -0
- package/dist/services/nodeExecutionService.d.ts +63 -0
- package/dist/services/nodeExecutionService.js +266 -0
- package/dist/services/playgroundService.d.ts +130 -0
- package/dist/services/playgroundService.js +321 -0
- package/dist/services/portConfigApi.d.ts +14 -0
- package/dist/services/portConfigApi.js +54 -0
- package/dist/services/settingsService.d.ts +92 -0
- package/dist/services/settingsService.js +196 -0
- package/dist/services/toastService.d.ts +156 -0
- package/dist/services/toastService.js +265 -0
- package/dist/services/variableService.d.ts +141 -0
- package/dist/services/variableService.js +463 -0
- package/dist/services/workflowStorage.d.ts +37 -0
- package/dist/services/workflowStorage.js +116 -0
- package/dist/settings/index.d.ts +25 -0
- package/dist/settings/index.js +33 -0
- package/dist/stores/categoriesStore.svelte.d.ts +32 -0
- package/dist/stores/categoriesStore.svelte.js +77 -0
- package/dist/stores/editorStateMachine.svelte.d.ts +42 -0
- package/dist/stores/editorStateMachine.svelte.js +132 -0
- package/dist/stores/historyStore.svelte.d.ts +136 -0
- package/dist/stores/historyStore.svelte.js +207 -0
- package/dist/stores/interruptStore.svelte.d.ts +179 -0
- package/dist/stores/interruptStore.svelte.js +346 -0
- package/dist/stores/playgroundStore.svelte.d.ts +230 -0
- package/dist/stores/playgroundStore.svelte.js +515 -0
- package/dist/stores/portCoordinateStore.svelte.d.ts +66 -0
- package/dist/stores/portCoordinateStore.svelte.js +186 -0
- package/dist/stores/settingsStore.svelte.d.ts +158 -0
- package/dist/stores/settingsStore.svelte.js +544 -0
- package/dist/stores/workflowStore.svelte.d.ts +260 -0
- package/dist/stores/workflowStore.svelte.js +649 -0
- package/dist/stories/CanvasDecorator.svelte +49 -0
- package/dist/stories/CanvasDecorator.svelte.d.ts +8 -0
- package/dist/stories/NodeDecorator.svelte +73 -0
- package/dist/stories/NodeDecorator.svelte.d.ts +8 -0
- package/dist/stories/utils.d.ts +93 -0
- package/dist/stories/utils.js +122 -0
- package/dist/styles/base.css +1300 -0
- package/dist/styles/toast.css +35 -0
- package/dist/styles/tokens.css +475 -0
- package/dist/svelte-app.d.ts +150 -0
- package/dist/svelte-app.js +295 -0
- package/dist/types/agentspec.d.ts +318 -0
- package/dist/types/agentspec.js +48 -0
- package/dist/types/auth.d.ts +263 -0
- package/dist/types/auth.js +229 -0
- package/dist/types/config.d.ts +151 -0
- package/dist/types/config.js +7 -0
- package/dist/types/events.d.ts +190 -0
- package/dist/types/events.js +30 -0
- package/dist/types/index.d.ts +1234 -0
- package/dist/types/index.js +27 -0
- package/dist/types/interrupt.d.ts +390 -0
- package/dist/types/interrupt.js +145 -0
- package/dist/types/interruptState.d.ts +211 -0
- package/dist/types/interruptState.js +308 -0
- package/dist/types/playground.d.ts +351 -0
- package/dist/types/playground.js +95 -0
- package/dist/types/settings.d.ts +189 -0
- package/dist/types/settings.js +97 -0
- package/dist/types/uischema.d.ts +144 -0
- package/dist/types/uischema.js +51 -0
- package/dist/utils/colors.d.ts +288 -0
- package/dist/utils/colors.js +548 -0
- package/dist/utils/config.d.ts +37 -0
- package/dist/utils/config.js +226 -0
- package/dist/utils/connections.d.ts +125 -0
- package/dist/utils/connections.js +414 -0
- package/dist/utils/errors.d.ts +28 -0
- package/dist/utils/errors.js +44 -0
- package/dist/utils/fetchWithAuth.d.ts +25 -0
- package/dist/utils/fetchWithAuth.js +34 -0
- package/dist/utils/handleIds.d.ts +35 -0
- package/dist/utils/handleIds.js +58 -0
- package/dist/utils/handlePositioning.d.ts +31 -0
- package/dist/utils/handlePositioning.js +35 -0
- package/dist/utils/icons.d.ts +106 -0
- package/dist/utils/icons.js +157 -0
- package/dist/utils/logger.d.ts +47 -0
- package/dist/utils/logger.js +72 -0
- package/dist/utils/nodeStatus.d.ts +53 -0
- package/dist/utils/nodeStatus.js +183 -0
- package/dist/utils/nodeTypes.d.ts +117 -0
- package/dist/utils/nodeTypes.js +244 -0
- package/dist/utils/nodeWrapper.d.ts +39 -0
- package/dist/utils/nodeWrapper.js +62 -0
- package/dist/utils/performanceUtils.d.ts +30 -0
- package/dist/utils/performanceUtils.js +108 -0
- package/dist/utils/sanitize.d.ts +19 -0
- package/dist/utils/sanitize.js +31 -0
- package/dist/utils/uischema.d.ts +52 -0
- package/dist/utils/uischema.js +88 -0
- package/dist/utils/validation.d.ts +29 -0
- package/dist/utils/validation.js +39 -0
- package/package.json +292 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form Field Component Registry
|
|
3
|
+
*
|
|
4
|
+
* Provides a registry system for form field components that enables:
|
|
5
|
+
* - Tree-shaking: Heavy components (code editor, markdown) are only bundled when registered
|
|
6
|
+
* - Dynamic field types: Users can add custom field renderers
|
|
7
|
+
* - Lazy loading: Components can be registered at runtime
|
|
8
|
+
*
|
|
9
|
+
* Extends BaseRegistry for shared mechanics (subscribe, onClear, etc.).
|
|
10
|
+
*
|
|
11
|
+
* @module form/fieldRegistry
|
|
12
|
+
*
|
|
13
|
+
* @example Basic usage with light fields only (no codemirror):
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { SchemaForm } from "@flowdrop/flowdrop/form";
|
|
16
|
+
* // Uses only basic fields - small bundle size
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @example Adding code editor support:
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { fieldComponentRegistry } from "@flowdrop/flowdrop/form";
|
|
22
|
+
* import { FormCodeEditor, codeEditorFieldMatcher } from "@flowdrop/flowdrop/form/code";
|
|
23
|
+
*
|
|
24
|
+
* fieldComponentRegistry.register("code-editor", {
|
|
25
|
+
* component: FormCodeEditor,
|
|
26
|
+
* matcher: codeEditorFieldMatcher,
|
|
27
|
+
* priority: 100
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
import { BaseRegistry } from '../registry/BaseRegistry.js';
|
|
32
|
+
/**
|
|
33
|
+
* Class-based field component registry.
|
|
34
|
+
* Extends BaseRegistry with priority-based field resolution.
|
|
35
|
+
*/
|
|
36
|
+
class FieldComponentRegistry extends BaseRegistry {
|
|
37
|
+
/** Cached ordered keys by priority (highest first), invalidated on mutation */
|
|
38
|
+
orderedKeys = null;
|
|
39
|
+
/**
|
|
40
|
+
* Register a field component.
|
|
41
|
+
* Silently overwrites existing registrations (preserves legacy behavior).
|
|
42
|
+
*
|
|
43
|
+
* @param type - Unique identifier for this field type
|
|
44
|
+
* @param registration - The field component registration
|
|
45
|
+
*/
|
|
46
|
+
register(type, registration) {
|
|
47
|
+
this.items.set(type, registration);
|
|
48
|
+
this.orderedKeys = null;
|
|
49
|
+
this.notifyListeners();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Override unregister to invalidate the priority cache.
|
|
53
|
+
*/
|
|
54
|
+
unregister(key) {
|
|
55
|
+
const result = super.unregister(key);
|
|
56
|
+
if (result) {
|
|
57
|
+
this.orderedKeys = null;
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Override clear to invalidate the priority cache.
|
|
63
|
+
*/
|
|
64
|
+
clear() {
|
|
65
|
+
super.clear();
|
|
66
|
+
this.orderedKeys = null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Resolve which component should render a given field schema.
|
|
70
|
+
* Checks registered matchers in priority order (highest first).
|
|
71
|
+
*
|
|
72
|
+
* @param schema - The field schema to resolve
|
|
73
|
+
* @returns The matching registration or null if no match
|
|
74
|
+
*/
|
|
75
|
+
resolveFieldComponent(schema) {
|
|
76
|
+
const keys = this.getOrderedKeys();
|
|
77
|
+
for (const key of keys) {
|
|
78
|
+
const registration = this.items.get(key);
|
|
79
|
+
if (registration && registration.matcher(schema)) {
|
|
80
|
+
return registration;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get keys ordered by priority (cached).
|
|
87
|
+
*/
|
|
88
|
+
getOrderedKeys() {
|
|
89
|
+
if (this.orderedKeys === null) {
|
|
90
|
+
this.orderedKeys = Array.from(this.items.entries())
|
|
91
|
+
.sort((a, b) => b[1].priority - a[1].priority)
|
|
92
|
+
.map(([key]) => key);
|
|
93
|
+
}
|
|
94
|
+
return this.orderedKeys;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/** Singleton instance of the field component registry */
|
|
98
|
+
export const fieldComponentRegistry = new FieldComponentRegistry();
|
|
99
|
+
// ============================================================================
|
|
100
|
+
// Built-in Field Matchers (for light fields)
|
|
101
|
+
// These are always available and used by the base FormField component
|
|
102
|
+
// ============================================================================
|
|
103
|
+
/**
|
|
104
|
+
* Matcher for hidden fields (should not render)
|
|
105
|
+
*/
|
|
106
|
+
export const hiddenFieldMatcher = (schema) => schema.format === 'hidden';
|
|
107
|
+
/**
|
|
108
|
+
* Matcher for checkbox group fields (enum with multiple)
|
|
109
|
+
*/
|
|
110
|
+
export const checkboxGroupMatcher = (schema) => Boolean(schema.enum && schema.multiple);
|
|
111
|
+
/**
|
|
112
|
+
* Matcher for enum select fields
|
|
113
|
+
*/
|
|
114
|
+
export const enumSelectMatcher = (schema) => Boolean(schema.enum && !schema.multiple);
|
|
115
|
+
/**
|
|
116
|
+
* Matcher for multiline textarea fields
|
|
117
|
+
*/
|
|
118
|
+
export const textareaMatcher = (schema) => schema.type === 'string' && schema.format === 'multiline';
|
|
119
|
+
/**
|
|
120
|
+
* Matcher for range slider fields
|
|
121
|
+
*/
|
|
122
|
+
export const rangeMatcher = (schema) => (schema.type === 'number' || schema.type === 'integer') && schema.format === 'range';
|
|
123
|
+
/**
|
|
124
|
+
* Matcher for string text fields
|
|
125
|
+
*/
|
|
126
|
+
export const textFieldMatcher = (schema) => schema.type === 'string' && !schema.format;
|
|
127
|
+
/**
|
|
128
|
+
* Matcher for number fields
|
|
129
|
+
*/
|
|
130
|
+
export const numberFieldMatcher = (schema) => (schema.type === 'number' || schema.type === 'integer') && schema.format !== 'range';
|
|
131
|
+
/**
|
|
132
|
+
* Matcher for boolean toggle fields
|
|
133
|
+
*/
|
|
134
|
+
export const toggleMatcher = (schema) => schema.type === 'boolean';
|
|
135
|
+
/**
|
|
136
|
+
* Matcher for select fields with labeled options (JSON Schema oneOf pattern)
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```json
|
|
140
|
+
* { "type": "string", "oneOf": [{ "const": "a", "title": "Option A" }] }
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
export const selectOptionsMatcher = (schema) => Boolean(schema.oneOf && schema.oneOf.length > 0);
|
|
144
|
+
/**
|
|
145
|
+
* Matcher for array fields
|
|
146
|
+
*/
|
|
147
|
+
export const arrayMatcher = (schema) => schema.type === 'array' && Boolean(schema.items);
|
|
148
|
+
/**
|
|
149
|
+
* Matcher for autocomplete fields
|
|
150
|
+
* Matches when format is "autocomplete" and autocomplete config with URL is provided
|
|
151
|
+
*/
|
|
152
|
+
export const autocompleteMatcher = (schema) => schema.format === 'autocomplete' && Boolean(schema.autocomplete?.url);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowDrop Form Full Module
|
|
3
|
+
*
|
|
4
|
+
* Convenience module that imports and registers all form field types,
|
|
5
|
+
* including heavy editors (CodeMirror).
|
|
6
|
+
*
|
|
7
|
+
* This is equivalent to importing from the light form module and manually
|
|
8
|
+
* registering all editor types.
|
|
9
|
+
*
|
|
10
|
+
* @module form/full
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Single import that sets up everything
|
|
15
|
+
* import { SchemaForm, initializeAllFieldTypes } from "@flowdrop/flowdrop/form/full";
|
|
16
|
+
*
|
|
17
|
+
* // Call once at app startup
|
|
18
|
+
* initializeAllFieldTypes();
|
|
19
|
+
*
|
|
20
|
+
* // Now all field types are available
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export { SchemaForm, FormField, FormFieldFull, FormFieldWrapper, FormTextField, FormTextarea, FormNumberField, FormRangeField, FormToggle, FormSelect, FormCheckboxGroup, FormArray, FormFieldset, FormUISchemaRenderer } from './index.js';
|
|
24
|
+
export type { FieldSchema, FieldType, FieldFormat, FieldOption, OneOfItem, SchemaFormProps, BaseFieldProps, TextFieldProps, TextareaFieldProps, NumberFieldProps, ToggleFieldProps, RangeFieldProps, SelectFieldProps, CheckboxGroupFieldProps, ArrayFieldProps, FormFieldFactoryProps, FormFieldWrapperProps, FieldComponentProps, FieldMatcher, FieldMatcherRegistration, FieldComponent, FieldComponentRegistration } from './index.js';
|
|
25
|
+
export { isFieldOptionArray, isOneOfArray, normalizeOptions, oneOfToOptions, getSchemaOptions } from './index.js';
|
|
26
|
+
export { fieldComponentRegistry, hiddenFieldMatcher, checkboxGroupMatcher, enumSelectMatcher, textareaMatcher, rangeMatcher, textFieldMatcher, numberFieldMatcher, toggleMatcher, selectOptionsMatcher, arrayMatcher } from './index.js';
|
|
27
|
+
export { FormCodeEditor, FormTemplateEditor } from './code.js';
|
|
28
|
+
export { FormMarkdownEditor } from './markdown.js';
|
|
29
|
+
export { registerCodeEditorField, registerTemplateEditorField, registerAllCodeEditors, isCodeEditorRegistered, isTemplateEditorRegistered, codeEditorFieldMatcher, templateEditorFieldMatcher } from './code.js';
|
|
30
|
+
export { registerMarkdownEditorField, isMarkdownEditorRegistered, markdownEditorFieldMatcher } from './markdown.js';
|
|
31
|
+
/**
|
|
32
|
+
* Initialize all form field types including heavy editors
|
|
33
|
+
*
|
|
34
|
+
* Call this once at application startup to enable all field types.
|
|
35
|
+
* This includes:
|
|
36
|
+
* - Code/JSON editor (CodeMirror)
|
|
37
|
+
* - Template editor (CodeMirror with Twig/Liquid syntax)
|
|
38
|
+
* - Markdown editor (CodeMirror 6)
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* import { initializeAllFieldTypes } from "@flowdrop/flowdrop/form/full";
|
|
43
|
+
*
|
|
44
|
+
* // In your app's entry point
|
|
45
|
+
* initializeAllFieldTypes();
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare function initializeAllFieldTypes(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Check if all field types have been initialized
|
|
51
|
+
*/
|
|
52
|
+
export declare function areAllFieldTypesInitialized(): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Reset initialization state (useful for testing)
|
|
55
|
+
*/
|
|
56
|
+
export declare function resetFieldTypeInitialization(): void;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowDrop Form Full Module
|
|
3
|
+
*
|
|
4
|
+
* Convenience module that imports and registers all form field types,
|
|
5
|
+
* including heavy editors (CodeMirror).
|
|
6
|
+
*
|
|
7
|
+
* This is equivalent to importing from the light form module and manually
|
|
8
|
+
* registering all editor types.
|
|
9
|
+
*
|
|
10
|
+
* @module form/full
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // Single import that sets up everything
|
|
15
|
+
* import { SchemaForm, initializeAllFieldTypes } from "@flowdrop/flowdrop/form/full";
|
|
16
|
+
*
|
|
17
|
+
* // Call once at app startup
|
|
18
|
+
* initializeAllFieldTypes();
|
|
19
|
+
*
|
|
20
|
+
* // Now all field types are available
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
// Re-export everything from the light form module
|
|
24
|
+
// Components
|
|
25
|
+
export { SchemaForm, FormField, FormFieldFull, FormFieldWrapper, FormTextField, FormTextarea, FormNumberField, FormRangeField, FormToggle, FormSelect, FormCheckboxGroup, FormArray, FormFieldset, FormUISchemaRenderer } from './index.js';
|
|
26
|
+
// Utility functions
|
|
27
|
+
export { isFieldOptionArray, isOneOfArray, normalizeOptions, oneOfToOptions, getSchemaOptions } from './index.js';
|
|
28
|
+
// Field Registry
|
|
29
|
+
export { fieldComponentRegistry, hiddenFieldMatcher, checkboxGroupMatcher, enumSelectMatcher, textareaMatcher, rangeMatcher, textFieldMatcher, numberFieldMatcher, toggleMatcher, selectOptionsMatcher, arrayMatcher } from './index.js';
|
|
30
|
+
// Import registration functions
|
|
31
|
+
import { registerCodeEditorField, registerTemplateEditorField } from './code.js';
|
|
32
|
+
import { registerMarkdownEditorField } from './markdown.js';
|
|
33
|
+
// Re-export heavy editor components for direct access
|
|
34
|
+
export { FormCodeEditor, FormTemplateEditor } from './code.js';
|
|
35
|
+
export { FormMarkdownEditor } from './markdown.js';
|
|
36
|
+
// Re-export registration functions
|
|
37
|
+
export { registerCodeEditorField, registerTemplateEditorField, registerAllCodeEditors, isCodeEditorRegistered, isTemplateEditorRegistered, codeEditorFieldMatcher, templateEditorFieldMatcher } from './code.js';
|
|
38
|
+
export { registerMarkdownEditorField, isMarkdownEditorRegistered, markdownEditorFieldMatcher } from './markdown.js';
|
|
39
|
+
/**
|
|
40
|
+
* Track if all field types have been initialized
|
|
41
|
+
*/
|
|
42
|
+
let allFieldTypesInitialized = false;
|
|
43
|
+
/**
|
|
44
|
+
* Initialize all form field types including heavy editors
|
|
45
|
+
*
|
|
46
|
+
* Call this once at application startup to enable all field types.
|
|
47
|
+
* This includes:
|
|
48
|
+
* - Code/JSON editor (CodeMirror)
|
|
49
|
+
* - Template editor (CodeMirror with Twig/Liquid syntax)
|
|
50
|
+
* - Markdown editor (CodeMirror 6)
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* import { initializeAllFieldTypes } from "@flowdrop/flowdrop/form/full";
|
|
55
|
+
*
|
|
56
|
+
* // In your app's entry point
|
|
57
|
+
* initializeAllFieldTypes();
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export function initializeAllFieldTypes() {
|
|
61
|
+
if (allFieldTypesInitialized) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
registerCodeEditorField();
|
|
65
|
+
registerTemplateEditorField();
|
|
66
|
+
registerMarkdownEditorField();
|
|
67
|
+
allFieldTypesInitialized = true;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if all field types have been initialized
|
|
71
|
+
*/
|
|
72
|
+
export function areAllFieldTypesInitialized() {
|
|
73
|
+
return allFieldTypesInitialized;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Reset initialization state (useful for testing)
|
|
77
|
+
*/
|
|
78
|
+
export function resetFieldTypeInitialization() {
|
|
79
|
+
allFieldTypesInitialized = false;
|
|
80
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowDrop Form Module
|
|
3
|
+
*
|
|
4
|
+
* Provides SchemaForm and form field components for building dynamic forms
|
|
5
|
+
* from JSON Schema definitions. This is the "light" version that includes
|
|
6
|
+
* only basic field types (text, number, select, checkbox, etc.).
|
|
7
|
+
*
|
|
8
|
+
* For code editor support (CodeMirror), import from "@flowdrop/flowdrop/form/code"
|
|
9
|
+
* For markdown editor support (CodeMirror 6), import from "@flowdrop/flowdrop/form/markdown"
|
|
10
|
+
*
|
|
11
|
+
* @module form
|
|
12
|
+
*
|
|
13
|
+
* @example Basic usage (small bundle - ~20KB):
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { SchemaForm } from "@flowdrop/flowdrop/form";
|
|
16
|
+
*
|
|
17
|
+
* const schema = {
|
|
18
|
+
* type: "object",
|
|
19
|
+
* properties: {
|
|
20
|
+
* name: { type: "string", title: "Name" },
|
|
21
|
+
* age: { type: "number", title: "Age" }
|
|
22
|
+
* }
|
|
23
|
+
* };
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example Select field with labeled options (JSON Schema standard):
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const schema = {
|
|
29
|
+
* type: "object",
|
|
30
|
+
* properties: {
|
|
31
|
+
* status: {
|
|
32
|
+
* type: "string",
|
|
33
|
+
* title: "Status",
|
|
34
|
+
* oneOf: [
|
|
35
|
+
* { const: "draft", title: "Draft" },
|
|
36
|
+
* { const: "published", title: "Published" },
|
|
37
|
+
* { const: "archived", title: "Archived" }
|
|
38
|
+
* ]
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* };
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @example With code editor support (adds ~300KB):
|
|
45
|
+
* ```typescript
|
|
46
|
+
* import { SchemaForm } from "@flowdrop/flowdrop/form";
|
|
47
|
+
* import { registerCodeEditorField } from "@flowdrop/flowdrop/form/code";
|
|
48
|
+
*
|
|
49
|
+
* // Register code editor support before using
|
|
50
|
+
* registerCodeEditorField();
|
|
51
|
+
*
|
|
52
|
+
* const schema = {
|
|
53
|
+
* type: "object",
|
|
54
|
+
* properties: {
|
|
55
|
+
* config: { type: "object", format: "json", title: "Configuration" }
|
|
56
|
+
* }
|
|
57
|
+
* };
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export { default as SchemaForm } from '../components/SchemaForm.svelte';
|
|
61
|
+
export { default as FormField } from '../components/form/FormFieldLight.svelte';
|
|
62
|
+
export { default as FormFieldFull } from '../components/form/FormField.svelte';
|
|
63
|
+
export { default as FormFieldWrapper } from '../components/form/FormFieldWrapper.svelte';
|
|
64
|
+
export { default as FormTextField } from '../components/form/FormTextField.svelte';
|
|
65
|
+
export { default as FormTextarea } from '../components/form/FormTextarea.svelte';
|
|
66
|
+
export { default as FormNumberField } from '../components/form/FormNumberField.svelte';
|
|
67
|
+
export { default as FormRangeField } from '../components/form/FormRangeField.svelte';
|
|
68
|
+
export { default as FormToggle } from '../components/form/FormToggle.svelte';
|
|
69
|
+
export { default as FormSelect } from '../components/form/FormSelect.svelte';
|
|
70
|
+
export { default as FormCheckboxGroup } from '../components/form/FormCheckboxGroup.svelte';
|
|
71
|
+
export { default as FormArray } from '../components/form/FormArray.svelte';
|
|
72
|
+
export { default as FormFieldset } from '../components/form/FormFieldset.svelte';
|
|
73
|
+
export { default as FormUISchemaRenderer } from '../components/form/FormUISchemaRenderer.svelte';
|
|
74
|
+
export type { FieldSchema, FieldType, FieldFormat, FieldOption, OneOfItem, SchemaFormProps, BaseFieldProps, TextFieldProps, TextareaFieldProps, NumberFieldProps, ToggleFieldProps, RangeFieldProps, SelectFieldProps, CheckboxGroupFieldProps, ArrayFieldProps, FormFieldFactoryProps, FormFieldWrapperProps } from '../components/form/types.js';
|
|
75
|
+
export { isFieldOptionArray, isOneOfArray, normalizeOptions, oneOfToOptions, getSchemaOptions } from '../components/form/types.js';
|
|
76
|
+
export { fieldComponentRegistry, hiddenFieldMatcher, checkboxGroupMatcher, enumSelectMatcher, textareaMatcher, rangeMatcher, textFieldMatcher, numberFieldMatcher, toggleMatcher, selectOptionsMatcher, arrayMatcher } from './fieldRegistry.js';
|
|
77
|
+
export type { FieldComponentProps, FieldMatcher, FieldMatcherRegistration, FieldComponent, FieldComponentRegistration } from './fieldRegistry.js';
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowDrop Form Module
|
|
3
|
+
*
|
|
4
|
+
* Provides SchemaForm and form field components for building dynamic forms
|
|
5
|
+
* from JSON Schema definitions. This is the "light" version that includes
|
|
6
|
+
* only basic field types (text, number, select, checkbox, etc.).
|
|
7
|
+
*
|
|
8
|
+
* For code editor support (CodeMirror), import from "@flowdrop/flowdrop/form/code"
|
|
9
|
+
* For markdown editor support (CodeMirror 6), import from "@flowdrop/flowdrop/form/markdown"
|
|
10
|
+
*
|
|
11
|
+
* @module form
|
|
12
|
+
*
|
|
13
|
+
* @example Basic usage (small bundle - ~20KB):
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { SchemaForm } from "@flowdrop/flowdrop/form";
|
|
16
|
+
*
|
|
17
|
+
* const schema = {
|
|
18
|
+
* type: "object",
|
|
19
|
+
* properties: {
|
|
20
|
+
* name: { type: "string", title: "Name" },
|
|
21
|
+
* age: { type: "number", title: "Age" }
|
|
22
|
+
* }
|
|
23
|
+
* };
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example Select field with labeled options (JSON Schema standard):
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const schema = {
|
|
29
|
+
* type: "object",
|
|
30
|
+
* properties: {
|
|
31
|
+
* status: {
|
|
32
|
+
* type: "string",
|
|
33
|
+
* title: "Status",
|
|
34
|
+
* oneOf: [
|
|
35
|
+
* { const: "draft", title: "Draft" },
|
|
36
|
+
* { const: "published", title: "Published" },
|
|
37
|
+
* { const: "archived", title: "Archived" }
|
|
38
|
+
* ]
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* };
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @example With code editor support (adds ~300KB):
|
|
45
|
+
* ```typescript
|
|
46
|
+
* import { SchemaForm } from "@flowdrop/flowdrop/form";
|
|
47
|
+
* import { registerCodeEditorField } from "@flowdrop/flowdrop/form/code";
|
|
48
|
+
*
|
|
49
|
+
* // Register code editor support before using
|
|
50
|
+
* registerCodeEditorField();
|
|
51
|
+
*
|
|
52
|
+
* const schema = {
|
|
53
|
+
* type: "object",
|
|
54
|
+
* properties: {
|
|
55
|
+
* config: { type: "object", format: "json", title: "Configuration" }
|
|
56
|
+
* }
|
|
57
|
+
* };
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// Main Components
|
|
62
|
+
// ============================================================================
|
|
63
|
+
export { default as SchemaForm } from '../components/SchemaForm.svelte';
|
|
64
|
+
// ============================================================================
|
|
65
|
+
// Form Field Components (Light - no heavy dependencies)
|
|
66
|
+
// ============================================================================
|
|
67
|
+
// Use the light version of FormField that uses the registry for heavy editors
|
|
68
|
+
export { default as FormField } from '../components/form/FormFieldLight.svelte';
|
|
69
|
+
// Also export the original (full) version for users who want everything
|
|
70
|
+
export { default as FormFieldFull } from '../components/form/FormField.svelte';
|
|
71
|
+
export { default as FormFieldWrapper } from '../components/form/FormFieldWrapper.svelte';
|
|
72
|
+
export { default as FormTextField } from '../components/form/FormTextField.svelte';
|
|
73
|
+
export { default as FormTextarea } from '../components/form/FormTextarea.svelte';
|
|
74
|
+
export { default as FormNumberField } from '../components/form/FormNumberField.svelte';
|
|
75
|
+
export { default as FormRangeField } from '../components/form/FormRangeField.svelte';
|
|
76
|
+
export { default as FormToggle } from '../components/form/FormToggle.svelte';
|
|
77
|
+
export { default as FormSelect } from '../components/form/FormSelect.svelte';
|
|
78
|
+
export { default as FormCheckboxGroup } from '../components/form/FormCheckboxGroup.svelte';
|
|
79
|
+
export { default as FormArray } from '../components/form/FormArray.svelte';
|
|
80
|
+
// UISchema rendering components
|
|
81
|
+
export { default as FormFieldset } from '../components/form/FormFieldset.svelte';
|
|
82
|
+
export { default as FormUISchemaRenderer } from '../components/form/FormUISchemaRenderer.svelte';
|
|
83
|
+
export { isFieldOptionArray, isOneOfArray, normalizeOptions, oneOfToOptions, getSchemaOptions } from '../components/form/types.js';
|
|
84
|
+
// ============================================================================
|
|
85
|
+
// Field Registry (for dynamic field registration)
|
|
86
|
+
// ============================================================================
|
|
87
|
+
export {
|
|
88
|
+
// Registry singleton
|
|
89
|
+
fieldComponentRegistry,
|
|
90
|
+
// Built-in matchers for custom components
|
|
91
|
+
hiddenFieldMatcher, checkboxGroupMatcher, enumSelectMatcher, textareaMatcher, rangeMatcher, textFieldMatcher, numberFieldMatcher, toggleMatcher, selectOptionsMatcher, arrayMatcher } from './fieldRegistry.js';
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowDrop Form Markdown Editor Module
|
|
3
|
+
*
|
|
4
|
+
* Adds CodeMirror 6-based markdown editor support to SchemaForm.
|
|
5
|
+
* Uses @codemirror/lang-markdown for syntax highlighting and marked for preview.
|
|
6
|
+
*
|
|
7
|
+
* @module form/markdown
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { SchemaForm } from "@flowdrop/flowdrop/form";
|
|
12
|
+
* import { registerMarkdownEditorField } from "@flowdrop/flowdrop/form/markdown";
|
|
13
|
+
*
|
|
14
|
+
* // Register markdown editor support (call once at app startup)
|
|
15
|
+
* registerMarkdownEditorField();
|
|
16
|
+
*
|
|
17
|
+
* // Now SchemaForm will render markdown editors for format: "markdown"
|
|
18
|
+
* const schema = {
|
|
19
|
+
* type: "object",
|
|
20
|
+
* properties: {
|
|
21
|
+
* content: { type: "string", format: "markdown", title: "Content" }
|
|
22
|
+
* }
|
|
23
|
+
* };
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import type { FieldComponent } from './fieldRegistry.js';
|
|
27
|
+
import type { FieldSchema } from '../components/form/types.js';
|
|
28
|
+
export { default as FormMarkdownEditor } from '../components/form/FormMarkdownEditor.svelte';
|
|
29
|
+
export type { MarkdownEditorFieldProps } from '../components/form/types.js';
|
|
30
|
+
/**
|
|
31
|
+
* Matcher for markdown editor fields
|
|
32
|
+
* Matches: format "markdown"
|
|
33
|
+
*/
|
|
34
|
+
export declare function markdownEditorFieldMatcher(schema: FieldSchema): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Register the markdown editor field component
|
|
37
|
+
*
|
|
38
|
+
* Call this function once at application startup to enable
|
|
39
|
+
* markdown editor fields in SchemaForm.
|
|
40
|
+
*
|
|
41
|
+
* @param priority - Priority for field matching (default: 100)
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // In your app's entry point:
|
|
46
|
+
* import { registerMarkdownEditorField } from "@flowdrop/flowdrop/form/markdown";
|
|
47
|
+
*
|
|
48
|
+
* registerMarkdownEditorField();
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function registerMarkdownEditorField(priority?: number): void;
|
|
52
|
+
/**
|
|
53
|
+
* Synchronously register markdown editor field using the imported component
|
|
54
|
+
*
|
|
55
|
+
* Use this when you've already imported the component and want immediate registration.
|
|
56
|
+
*
|
|
57
|
+
* @param priority - Priority for field matching (default: 100)
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* import { registerMarkdownEditorFieldWithComponent, FormMarkdownEditor } from "@flowdrop/flowdrop/form/markdown";
|
|
62
|
+
* registerMarkdownEditorFieldWithComponent(FormMarkdownEditor);
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare function registerMarkdownEditorFieldWithComponent(component: FieldComponent, priority?: number): void;
|
|
66
|
+
/**
|
|
67
|
+
* Check if markdown editor field is registered
|
|
68
|
+
*/
|
|
69
|
+
export declare function isMarkdownEditorRegistered(): boolean;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowDrop Form Markdown Editor Module
|
|
3
|
+
*
|
|
4
|
+
* Adds CodeMirror 6-based markdown editor support to SchemaForm.
|
|
5
|
+
* Uses @codemirror/lang-markdown for syntax highlighting and marked for preview.
|
|
6
|
+
*
|
|
7
|
+
* @module form/markdown
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { SchemaForm } from "@flowdrop/flowdrop/form";
|
|
12
|
+
* import { registerMarkdownEditorField } from "@flowdrop/flowdrop/form/markdown";
|
|
13
|
+
*
|
|
14
|
+
* // Register markdown editor support (call once at app startup)
|
|
15
|
+
* registerMarkdownEditorField();
|
|
16
|
+
*
|
|
17
|
+
* // Now SchemaForm will render markdown editors for format: "markdown"
|
|
18
|
+
* const schema = {
|
|
19
|
+
* type: "object",
|
|
20
|
+
* properties: {
|
|
21
|
+
* content: { type: "string", format: "markdown", title: "Content" }
|
|
22
|
+
* }
|
|
23
|
+
* };
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import { fieldComponentRegistry } from './fieldRegistry.js';
|
|
27
|
+
// Re-export the component for direct usage if needed
|
|
28
|
+
export { default as FormMarkdownEditor } from '../components/form/FormMarkdownEditor.svelte';
|
|
29
|
+
/**
|
|
30
|
+
* Matcher for markdown editor fields
|
|
31
|
+
* Matches: format "markdown"
|
|
32
|
+
*/
|
|
33
|
+
export function markdownEditorFieldMatcher(schema) {
|
|
34
|
+
return schema.format === 'markdown';
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Track if markdown editor is registered
|
|
38
|
+
*/
|
|
39
|
+
let markdownEditorRegistered = false;
|
|
40
|
+
// Sync registration flag with registry.clear() for test isolation
|
|
41
|
+
fieldComponentRegistry.onClear(() => {
|
|
42
|
+
markdownEditorRegistered = false;
|
|
43
|
+
});
|
|
44
|
+
/**
|
|
45
|
+
* Register the markdown editor field component
|
|
46
|
+
*
|
|
47
|
+
* Call this function once at application startup to enable
|
|
48
|
+
* markdown editor fields in SchemaForm.
|
|
49
|
+
*
|
|
50
|
+
* @param priority - Priority for field matching (default: 100)
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* // In your app's entry point:
|
|
55
|
+
* import { registerMarkdownEditorField } from "@flowdrop/flowdrop/form/markdown";
|
|
56
|
+
*
|
|
57
|
+
* registerMarkdownEditorField();
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export function registerMarkdownEditorField(priority = 100) {
|
|
61
|
+
if (markdownEditorRegistered) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Dynamic import to ensure proper code splitting
|
|
65
|
+
import('../components/form/FormMarkdownEditor.svelte').then((module) => {
|
|
66
|
+
fieldComponentRegistry.register('markdown-editor', {
|
|
67
|
+
component: module.default,
|
|
68
|
+
matcher: markdownEditorFieldMatcher,
|
|
69
|
+
priority
|
|
70
|
+
});
|
|
71
|
+
markdownEditorRegistered = true;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Synchronously register markdown editor field using the imported component
|
|
76
|
+
*
|
|
77
|
+
* Use this when you've already imported the component and want immediate registration.
|
|
78
|
+
*
|
|
79
|
+
* @param priority - Priority for field matching (default: 100)
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* import { registerMarkdownEditorFieldWithComponent, FormMarkdownEditor } from "@flowdrop/flowdrop/form/markdown";
|
|
84
|
+
* registerMarkdownEditorFieldWithComponent(FormMarkdownEditor);
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export function registerMarkdownEditorFieldWithComponent(component, priority = 100) {
|
|
88
|
+
if (markdownEditorRegistered) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
fieldComponentRegistry.register('markdown-editor', {
|
|
92
|
+
component,
|
|
93
|
+
matcher: markdownEditorFieldMatcher,
|
|
94
|
+
priority
|
|
95
|
+
});
|
|
96
|
+
markdownEditorRegistered = true;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if markdown editor field is registered
|
|
100
|
+
*/
|
|
101
|
+
export function isMarkdownEditorRegistered() {
|
|
102
|
+
return markdownEditorRegistered;
|
|
103
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node layout helper
|
|
3
|
+
* Utilities for node dimensions and port positions aligned to a 10px grid.
|
|
4
|
+
* Used so edge connection points (handle centers) land on multiples of 10.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Y position (in px) for the center of a port handle in a list-based node
|
|
8
|
+
* (WorkflowNode, GatewayNode). Layout: header 60px, then section title row 20px,
|
|
9
|
+
* then port rows 20px each. First port center = 90px, then 110, 130, … (multiples of 10).
|
|
10
|
+
*
|
|
11
|
+
* @param portIndex - Zero-based index in the combined list (section title counts as row 0; first port is index 0)
|
|
12
|
+
* @returns Y coordinate in px for the handle center (use with transform: translateY(-50%))
|
|
13
|
+
*/
|
|
14
|
+
export declare function getPortCenterY(portIndex: number): number;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node layout helper
|
|
3
|
+
* Utilities for node dimensions and port positions aligned to a 10px grid.
|
|
4
|
+
* Used so edge connection points (handle centers) land on multiples of 10.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Y position (in px) for the center of a port handle in a list-based node
|
|
8
|
+
* (WorkflowNode, GatewayNode). Layout: header 60px, then section title row 20px,
|
|
9
|
+
* then port rows 20px each. First port center = 90px, then 110, 130, … (multiples of 10).
|
|
10
|
+
*
|
|
11
|
+
* @param portIndex - Zero-based index in the combined list (section title counts as row 0; first port is index 0)
|
|
12
|
+
* @returns Y coordinate in px for the handle center (use with transform: translateY(-50%))
|
|
13
|
+
*/
|
|
14
|
+
export function getPortCenterY(portIndex) {
|
|
15
|
+
const headerHeight = 60;
|
|
16
|
+
const sectionTitleHeight = 20;
|
|
17
|
+
const rowHeight = 20;
|
|
18
|
+
return headerHeight + sectionTitleHeight + (portIndex + 0.5) * rowHeight;
|
|
19
|
+
}
|