windmill-components 1.70.0 → 1.75.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/assets/app.css +12 -1
- package/components/AppConnect.svelte +4 -3
- package/components/DisplayResult.svelte +27 -9
- package/components/FieldHeader.svelte +12 -8
- package/components/FlowBuilder.svelte +107 -39
- package/components/FlowBuilder.svelte.d.ts +5 -0
- package/components/FlowGraphViewer.svelte +5 -4
- package/components/FlowJobResult.svelte +3 -3
- package/components/FlowPreviewContent.svelte +3 -8
- package/components/FlowStatusViewer.svelte +21 -8
- package/components/GroupEditor.svelte +8 -0
- package/components/InputTransformForm.svelte +13 -20
- package/components/InputTransformSchemaForm.svelte +103 -0
- package/components/InputTransformSchemaForm.svelte.d.ts +24 -0
- package/components/LogViewer.svelte +1 -1
- package/components/ModulePreview.svelte +3 -2
- package/components/Multiselect.svelte +1 -1
- package/components/Path.svelte +15 -11
- package/components/Popover.svelte +2 -13
- package/components/ResourcePicker.svelte +33 -14
- package/components/RunChart.svelte +24 -5
- package/components/RunForm.svelte +5 -6
- package/components/RunForm.svelte.d.ts +1 -0
- package/components/SchemaForm.svelte +59 -57
- package/components/SchemaForm.svelte.d.ts +0 -5
- package/components/ScriptBuilder.svelte +30 -14
- package/components/ScriptPicker.svelte +3 -0
- package/components/SimpleEditor.svelte +4 -1
- package/components/SimpleEditor.svelte.d.ts +2 -0
- package/components/Slider.svelte +6 -1
- package/components/Slider.svelte.d.ts +1 -0
- package/components/TemplateEditor.svelte +1 -1
- package/components/TestJobLoader.svelte +2 -2
- package/components/Toggle.svelte +17 -4
- package/components/Toggle.svelte.d.ts +2 -0
- package/components/Tooltip.svelte +1 -1
- package/components/UserSettings.svelte +2 -0
- package/components/apps/components/buttons/AppButton.svelte +38 -22
- package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
- package/components/apps/components/buttons/AppForm.svelte +16 -6
- package/components/apps/components/buttons/AppForm.svelte.d.ts +3 -0
- package/components/apps/components/buttons/AppFormButton.svelte +12 -4
- package/components/apps/components/buttons/AppFormButton.svelte.d.ts +3 -0
- package/components/apps/components/display/AppBarChart.svelte +15 -7
- package/components/apps/components/display/AppBarChart.svelte.d.ts +3 -0
- package/components/apps/components/display/AppDisplayComponent.svelte +17 -12
- package/components/apps/components/display/AppDisplayComponent.svelte.d.ts +1 -0
- package/components/apps/components/display/AppHtml.svelte +18 -4
- package/components/apps/components/display/AppHtml.svelte.d.ts +3 -0
- package/components/apps/components/display/AppIcon.svelte +20 -8
- package/components/apps/components/display/AppIcon.svelte.d.ts +3 -0
- package/components/apps/components/display/AppImage.svelte +17 -10
- package/components/apps/components/display/AppImage.svelte.d.ts +3 -0
- package/components/apps/components/display/AppMap.svelte +214 -0
- package/components/apps/components/display/AppMap.svelte.d.ts +23 -0
- package/components/apps/components/display/AppPdf.svelte +304 -0
- package/components/apps/components/display/AppPdf.svelte.d.ts +24 -0
- package/components/apps/components/display/AppPieChart.svelte +15 -7
- package/components/apps/components/display/AppPieChart.svelte.d.ts +3 -0
- package/components/apps/components/display/AppScatterChart.svelte +12 -4
- package/components/apps/components/display/AppScatterChart.svelte.d.ts +3 -0
- package/components/apps/components/display/AppText.svelte +38 -32
- package/components/apps/components/display/AppText.svelte.d.ts +1 -0
- package/components/apps/components/display/AppTimeseries.svelte +12 -4
- package/components/apps/components/display/AppTimeseries.svelte.d.ts +3 -0
- package/components/apps/components/display/PlotlyHtml.svelte +8 -14
- package/components/apps/components/display/PlotlyHtml.svelte.d.ts +1 -1
- package/components/apps/components/display/VegaLiteHtml.svelte +3 -8
- package/components/apps/components/display/VegaLiteHtml.svelte.d.ts +1 -0
- package/components/apps/components/display/index.d.ts +3 -0
- package/components/apps/components/display/index.js +3 -0
- package/components/apps/components/display/table/AppAggridTable.svelte +16 -7
- package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
- package/components/apps/components/display/table/AppTable.svelte +65 -20
- package/components/apps/components/display/table/AppTable.svelte.d.ts +3 -1
- package/components/apps/components/display/table/AppTableFooter.svelte +8 -1
- package/components/apps/components/display/table/AppTableFooter.svelte.d.ts +2 -0
- package/components/apps/components/helpers/AlignWrapper.svelte +13 -7
- package/components/apps/components/helpers/AlignWrapper.svelte.d.ts +3 -1
- package/components/apps/components/helpers/HiddenComponent.svelte +2 -1
- package/components/apps/components/helpers/InputValue.svelte +38 -15
- package/components/apps/components/helpers/NonRunnableComponent.svelte +18 -3
- package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +1 -0
- package/components/apps/components/helpers/RefreshButton.svelte +1 -1
- package/components/apps/components/helpers/ResizeWrapper.svelte +24 -0
- package/components/apps/components/helpers/ResizeWrapper.svelte.d.ts +19 -0
- package/components/apps/components/helpers/RunnableComponent.svelte +76 -68
- package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +3 -1
- package/components/apps/components/helpers/RunnableWrapper.svelte +9 -5
- package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +3 -1
- package/components/apps/components/inputs/AppCheckbox.svelte +8 -2
- package/components/apps/components/inputs/AppCheckbox.svelte.d.ts +3 -0
- package/components/apps/components/inputs/AppDateInput.svelte +25 -18
- package/components/apps/components/inputs/AppDateInput.svelte.d.ts +6 -1
- package/components/apps/components/inputs/AppFileInput.svelte +22 -14
- package/components/apps/components/inputs/AppFileInput.svelte.d.ts +3 -0
- package/components/apps/components/inputs/AppMultiSelect.svelte +82 -0
- package/components/apps/components/inputs/AppMultiSelect.svelte.d.ts +27 -0
- package/components/apps/components/inputs/AppNumberInput.svelte +20 -16
- package/components/apps/components/inputs/AppNumberInput.svelte.d.ts +5 -0
- package/components/apps/components/inputs/AppRangeInput.svelte +55 -14
- package/components/apps/components/inputs/AppRangeInput.svelte.d.ts +3 -0
- package/components/apps/components/inputs/AppSelect.svelte +58 -21
- package/components/apps/components/inputs/AppSelect.svelte.d.ts +3 -0
- package/components/apps/components/inputs/AppSliderInputs.svelte +41 -9
- package/components/apps/components/inputs/AppSliderInputs.svelte.d.ts +3 -0
- package/components/apps/components/inputs/AppTextInput.svelte +53 -19
- package/components/apps/components/inputs/AppTextInput.svelte.d.ts +6 -0
- package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +13 -3
- package/components/apps/components/inputs/currency/AppCurrencyInput.svelte.d.ts +3 -0
- package/components/apps/components/inputs/currency/CurrencyInput.svelte +2 -0
- package/components/apps/components/inputs/currency/CurrencyInput.svelte.d.ts +1 -0
- package/components/apps/components/layout/AppContainer.svelte +21 -13
- package/components/apps/components/layout/AppContainer.svelte.d.ts +3 -0
- package/components/apps/components/layout/AppDivider.svelte +24 -4
- package/components/apps/components/layout/AppDivider.svelte.d.ts +3 -1
- package/components/apps/components/layout/AppDrawer.svelte +89 -0
- package/components/apps/components/layout/AppDrawer.svelte.d.ts +24 -0
- package/components/apps/components/layout/AppSplitpanes.svelte +88 -0
- package/components/apps/components/layout/AppSplitpanes.svelte.d.ts +26 -0
- package/components/apps/components/layout/AppTabs.svelte +62 -21
- package/components/apps/components/layout/AppTabs.svelte.d.ts +3 -0
- package/components/apps/components/layout/index.d.ts +2 -0
- package/components/apps/components/layout/index.js +2 -0
- package/components/apps/editor/AppEditor.svelte +83 -19
- package/components/apps/editor/AppEditor.svelte.d.ts +3 -1
- package/components/apps/editor/AppEditorHeader.svelte +107 -32
- package/components/apps/editor/AppInputs.svelte +3 -3
- package/components/apps/editor/AppPreview.svelte +20 -7
- package/components/apps/editor/ComponentHeader.svelte +14 -3
- package/components/apps/editor/ComponentHeader.svelte.d.ts +1 -0
- package/components/apps/editor/GridEditor.svelte +85 -71
- package/components/apps/editor/GridPanel.svelte +29 -0
- package/components/apps/editor/GridPanel.svelte.d.ts +18 -0
- package/components/apps/editor/RecomputeAllComponents.svelte +8 -6
- package/components/apps/editor/SettingsPanel.svelte +14 -24
- package/components/apps/editor/SubGridEditor.svelte +46 -18
- package/components/apps/editor/SubGridEditor.svelte.d.ts +5 -0
- package/components/apps/editor/appUtils.d.ts +12 -2
- package/components/apps/editor/appUtils.js +121 -21
- package/components/apps/editor/component/Component.svelte +282 -57
- package/components/apps/editor/component/Component.svelte.d.ts +3 -1
- package/components/apps/editor/component/ComponentNavigation.svelte +125 -0
- package/components/apps/editor/component/ComponentNavigation.svelte.d.ts +14 -0
- package/components/apps/editor/component/components.d.ts +14 -2
- package/components/apps/editor/component/components.js +417 -43
- package/components/apps/editor/component/default-codes.js +6 -6
- package/components/apps/editor/component/sets.js +11 -3
- package/components/apps/editor/componentsPanel/ComponentList.svelte +72 -29
- package/components/apps/editor/componentsPanel/CssProperty.svelte +59 -23
- package/components/apps/editor/componentsPanel/CssProperty.svelte.d.ts +2 -1
- package/components/apps/editor/componentsPanel/CssSettings.svelte +56 -9
- package/components/apps/editor/componentsPanel/ListItem.svelte +23 -12
- package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +1 -0
- package/components/apps/editor/componentsPanel/componentStaticValues.js +14 -2
- package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +1 -1
- package/components/apps/editor/contextPanel/ContextPanel.svelte +107 -61
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +13 -3
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +63 -25
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +5 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +11 -5
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +26 -17
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +95 -85
- package/components/apps/editor/inlineScriptsPanel/utils.d.ts +5 -9
- package/components/apps/editor/inlineScriptsPanel/utils.js +19 -8
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +10 -9
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +21 -12
- package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +1 -1
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte +95 -56
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +1 -0
- package/components/apps/editor/settingsPanel/GridPane.svelte +75 -0
- package/components/apps/editor/settingsPanel/GridPane.svelte.d.ts +20 -0
- package/components/apps/editor/settingsPanel/GridTab.svelte +5 -5
- package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +2 -0
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -1
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +1 -1
- package/components/apps/editor/settingsPanel/MoveToOtherGrid.svelte +13 -6
- package/components/apps/editor/settingsPanel/Recompute.svelte +1 -1
- package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +1 -1
- package/components/apps/editor/settingsPanel/TableActions.svelte +28 -1
- package/components/apps/editor/settingsPanel/common/PanelSection.svelte +2 -2
- package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte +48 -0
- package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte.d.ts +19 -0
- package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +1 -1
- package/components/apps/editor/settingsPanel/inputEditor/EvalInputEditor.svelte +1 -1
- package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +27 -3
- package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +2 -0
- package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte +2 -2
- package/components/apps/editor/settingsPanel/inputEditor/JsonEditor.svelte.d.ts +2 -1
- package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +54 -6
- package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +1 -0
- package/components/apps/editor/settingsPanel/inputEditor/UploadInputEditor.svelte +7 -9
- package/components/apps/editor/settingsPanel/inputEditor/UploadInputEditor.svelte.d.ts +1 -1
- package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte +1 -0
- package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte.d.ts +1 -0
- package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +1 -1
- package/components/apps/inputType.d.ts +6 -5
- package/components/apps/rx.js +2 -1
- package/components/apps/store.d.ts +6 -1
- package/components/apps/types.d.ts +14 -4
- package/components/apps/utils.d.ts +2 -2
- package/components/apps/utils.js +21 -49
- package/components/common/button/ButtonPopup.svelte +2 -0
- package/components/common/button/ButtonPopup.svelte.d.ts +1 -0
- package/components/common/button/UndoRedo.svelte +32 -0
- package/components/common/button/UndoRedo.svelte.d.ts +20 -0
- package/components/common/drawer/Drawer.svelte +10 -4
- package/components/common/drawer/Drawer.svelte.d.ts +3 -1
- package/components/common/drawer/DrawerContent.svelte +0 -1
- package/components/common/fileInput/FileInput.svelte +47 -21
- package/components/common/fileInput/FileInput.svelte.d.ts +3 -1
- package/components/common/fileInput/model.d.ts +1 -0
- package/components/common/fileInput/model.js +1 -0
- package/components/common/index.d.ts +1 -0
- package/components/common/index.js +1 -0
- package/components/common/menu/Menu.svelte +3 -2
- package/components/common/menu/Menu.svelte.d.ts +2 -1
- package/components/common/modal/Modal.svelte +9 -4
- package/components/common/modal/Modal.svelte.d.ts +2 -0
- package/components/common/table/AppRow.svelte +13 -4
- package/components/common/table/AppRow.svelte.d.ts +1 -0
- package/components/common/table/FlowRow.svelte +21 -8
- package/components/common/table/FlowRow.svelte.d.ts +1 -0
- package/components/common/table/ScriptRow.svelte +42 -10
- package/components/common/table/ScriptRow.svelte.d.ts +1 -0
- package/components/common/tabs/Tab.svelte +12 -5
- package/components/common/tabs/Tab.svelte.d.ts +4 -1
- package/components/common/tabs/Tabs.svelte +8 -6
- package/components/common/tabs/Tabs.svelte.d.ts +3 -1
- package/components/flows/FlowEditor.svelte +6 -4
- package/components/flows/common/FlowCardHeader.svelte +4 -1
- package/components/flows/content/BranchPredicateEditor.svelte +3 -4
- package/components/flows/content/CapturePayload.svelte +1 -2
- package/components/flows/content/FlowBranchesAllWrapper.svelte +1 -1
- package/components/flows/content/FlowConstants.svelte +7 -13
- package/components/flows/content/FlowEditorPanel.svelte +4 -3
- package/components/flows/content/FlowFailureModule.svelte +2 -1
- package/components/flows/content/FlowInput.svelte +4 -2
- package/components/flows/content/FlowLoop.svelte +3 -4
- package/components/flows/content/FlowModuleComponent.svelte +23 -11
- package/components/flows/content/FlowModuleEarlyStop.svelte +3 -1
- package/components/flows/content/FlowModuleHeader.svelte +26 -3
- package/components/flows/content/FlowModuleHeader.svelte.d.ts +1 -0
- package/components/flows/content/FlowModuleSleep.svelte +2 -2
- package/components/flows/content/FlowModuleWrapper.svelte +2 -8
- package/components/flows/content/FlowSchedules.svelte +1 -2
- package/components/flows/content/FlowSettings.svelte +17 -37
- package/components/flows/content/ScriptEditorDrawer.svelte +98 -0
- package/components/flows/content/ScriptEditorDrawer.svelte.d.ts +19 -0
- package/components/flows/flowState.d.ts +2 -3
- package/components/flows/flowState.js +1 -4
- package/components/flows/flowStateUtils.d.ts +7 -6
- package/components/flows/flowStateUtils.js +5 -9
- package/components/flows/flowStore.d.ts +5 -4
- package/components/flows/flowStore.js +5 -17
- package/components/flows/header/FlowImportExportMenu.svelte +2 -1
- package/components/flows/map/FlowConstantsItem.svelte +2 -2
- package/components/flows/map/FlowErrorHandlerItem.svelte +12 -13
- package/components/flows/map/FlowInputsItem.svelte +2 -3
- package/components/flows/map/FlowModuleSchemaItem.svelte +88 -91
- package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +3 -3
- package/components/flows/map/FlowModuleSchemaMap.svelte +164 -138
- package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +1 -2
- package/components/flows/map/FlowSettingsItem.svelte +5 -4
- package/components/flows/map/InsertModuleButton.svelte +12 -10
- package/components/flows/map/InsertModuleButton.svelte.d.ts +1 -0
- package/components/flows/map/MapItem.svelte +176 -103
- package/components/flows/map/MapItem.svelte.d.ts +20 -2
- package/components/flows/map/VirtualItem.svelte +129 -0
- package/components/flows/map/VirtualItem.svelte.d.ts +44 -0
- package/components/flows/pickers/WorkspaceScriptPicker.svelte +1 -1
- package/components/flows/previousResults.d.ts +1 -1
- package/components/flows/previousResults.js +32 -17
- package/components/flows/types.d.ts +13 -1
- package/components/flows/utils.js +1 -1
- package/components/graph/FlowGraph.svelte +227 -167
- package/components/graph/FlowGraph.svelte.d.ts +14 -1
- package/components/graph/model.d.ts +6 -36
- package/components/graph/model.js +1 -1
- package/components/graph/svelvet/LICENSE +21 -0
- package/components/graph/svelvet/collapsible/controllers/util.d.ts +15 -0
- package/components/graph/svelvet/collapsible/controllers/util.js +144 -0
- package/components/graph/svelvet/collapsible/models/Collapsible.d.ts +17 -0
- package/components/graph/svelvet/collapsible/models/Collapsible.js +25 -0
- package/components/graph/svelvet/collapsible/types/types.d.ts +8 -0
- package/components/graph/svelvet/collapsible/types/types.js +1 -0
- package/components/graph/svelvet/container/README.md +7 -0
- package/components/graph/svelvet/container/controllers/middleware.d.ts +18 -0
- package/components/graph/svelvet/container/controllers/middleware.js +101 -0
- package/components/graph/svelvet/container/views/GraphView.svelte +252 -0
- package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +25 -0
- package/components/graph/svelvet/container/views/Svelvet.svelte +131 -0
- package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +41 -0
- package/components/graph/svelvet/customCss/controllers/getCss.d.ts +2 -0
- package/components/graph/svelvet/customCss/controllers/getCss.js +57 -0
- package/components/graph/svelvet/d3/controllers/README.md +3 -0
- package/components/graph/svelvet/d3/controllers/d3.d.ts +5 -0
- package/components/graph/svelvet/d3/controllers/d3.js +59 -0
- package/components/graph/svelvet/d3/controllers/d3Old.d.ts +1 -0
- package/components/graph/svelvet/d3/controllers/d3Old.js +43 -0
- package/components/graph/svelvet/docs/CHANGELOG.md +145 -0
- package/components/graph/svelvet/docs/DESIGN_PATTERNS.md +44 -0
- package/components/graph/svelvet/docs/DOCUMENTATION.md +5 -0
- package/components/graph/svelvet/docs/README.md +34 -0
- package/components/graph/svelvet/docs/TODO.md +14 -0
- package/components/graph/svelvet/docs/Tutorials.md +25 -0
- package/components/graph/svelvet/docs/images/css-background-after.png +0 -0
- package/components/graph/svelvet/docs/images/css-background-before.png +0 -0
- package/components/graph/svelvet/docs/images/custom-edges-after.png +0 -0
- package/components/graph/svelvet/docs/images/custom-edges-before.png +0 -0
- package/components/graph/svelvet/docs/images/custom-nodes-after.png +0 -0
- package/components/graph/svelvet/docs/images/custom-nodes-before.png +0 -0
- package/components/graph/svelvet/docs/images/custom-svelte-components-after.png +0 -0
- package/components/graph/svelvet/docs/images/custom-svelte-components-before.png +0 -0
- package/components/graph/svelvet/docs/images/html-docs-after.png +0 -0
- package/components/graph/svelvet/docs/images/html-docs-before.png +0 -0
- package/components/graph/svelvet/docs/images/minimap-after.png +0 -0
- package/components/graph/svelvet/docs/images/minimap-before.png +0 -0
- package/components/graph/svelvet/docs/images/node-classes-after.png +0 -0
- package/components/graph/svelvet/docs/images/node-classes-before.png +0 -0
- package/components/graph/svelvet/docs/images/node-create-after.png +0 -0
- package/components/graph/svelvet/docs/images/node-create-before.png +0 -0
- package/components/graph/svelvet/edges/controllers/anchorCbDev.d.ts +4 -0
- package/components/graph/svelvet/edges/controllers/anchorCbDev.js +92 -0
- package/components/graph/svelvet/edges/controllers/anchorCbUser.d.ts +57 -0
- package/components/graph/svelvet/edges/controllers/anchorCbUser.js +73 -0
- package/components/graph/svelvet/edges/controllers/util.d.ts +37 -0
- package/components/graph/svelvet/edges/controllers/util.js +72 -0
- package/components/graph/svelvet/edges/models/Anchor.d.ts +48 -0
- package/components/graph/svelvet/edges/models/Anchor.js +122 -0
- package/components/graph/svelvet/edges/models/Edge.d.ts +47 -0
- package/components/graph/svelvet/edges/models/Edge.js +107 -0
- package/components/graph/svelvet/edges/types/types.d.ts +18 -0
- package/components/graph/svelvet/edges/types/types.js +1 -0
- package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte +105 -0
- package/components/graph/svelvet/edges/views/Edges/BaseEdge.svelte.d.ts +18 -0
- package/components/graph/svelvet/edges/views/Edges/EdgeAnchor.svelte +12 -0
- package/components/graph/svelvet/edges/views/Edges/EdgeAnchor.svelte.d.ts +17 -0
- package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte +43 -0
- package/components/graph/svelvet/edges/views/Edges/EdgeText.svelte.d.ts +17 -0
- package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte +137 -0
- package/components/graph/svelvet/edges/views/Edges/SimpleBezierEdge.svelte.d.ts +17 -0
- package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte +176 -0
- package/components/graph/svelvet/edges/views/Edges/SmoothStepEdge.svelte.d.ts +60 -0
- package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte +8 -0
- package/components/graph/svelvet/edges/views/Edges/StepEdge.svelte.d.ts +25 -0
- package/components/graph/svelvet/edges/views/Edges/types.d.ts +52 -0
- package/components/graph/svelvet/edges/views/Edges/types.js +1 -0
- package/components/graph/svelvet/edges/views/Edges/utils.d.ts +33 -0
- package/components/graph/svelvet/edges/views/Edges/utils.js +31 -0
- package/components/graph/svelvet/editEdges/views/EditEdge.svelte +151 -0
- package/components/graph/svelvet/editEdges/views/EditEdge.svelte.d.ts +20 -0
- package/components/graph/svelvet/nodes/controllers/util.d.ts +9 -0
- package/components/graph/svelvet/nodes/controllers/util.js +13 -0
- package/components/graph/svelvet/nodes/models/Node.d.ts +78 -0
- package/components/graph/svelvet/nodes/models/Node.js +195 -0
- package/components/graph/svelvet/nodes/views/EditNode.svelte +147 -0
- package/components/graph/svelvet/nodes/views/EditNode.svelte.d.ts +33 -0
- package/components/graph/svelvet/nodes/views/Node.svelte +85 -0
- package/components/graph/svelvet/nodes/views/Node.svelte.d.ts +22 -0
- package/components/graph/svelvet/resizableNodes/controllers/util.d.ts +11 -0
- package/components/graph/svelvet/resizableNodes/controllers/util.js +24 -0
- package/components/graph/svelvet/resizableNodes/models/ResizeNode.d.ts +33 -0
- package/components/graph/svelvet/resizableNodes/models/ResizeNode.js +71 -0
- package/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte +81 -0
- package/components/graph/svelvet/resizableNodes/views/ResizeNode.svelte.d.ts +20 -0
- package/components/graph/svelvet/store/controllers/storeApi.d.ts +32 -0
- package/components/graph/svelvet/store/controllers/storeApi.js +111 -0
- package/components/graph/svelvet/store/controllers/userApi.d.ts +3 -0
- package/components/graph/svelvet/store/controllers/userApi.js +18 -0
- package/components/graph/svelvet/store/controllers/util.d.ts +31 -0
- package/components/graph/svelvet/store/controllers/util.js +180 -0
- package/components/graph/svelvet/store/models/store.d.ts +12 -0
- package/components/graph/svelvet/store/models/store.js +9 -0
- package/components/graph/svelvet/store/types/types.d.ts +134 -0
- package/components/graph/svelvet/store/types/types.js +1 -0
- package/components/graph/svelvet/types/README.md +3 -0
- package/components/graph/svelvet/types/index.d.ts +2 -0
- package/components/graph/svelvet/types/index.js +1 -0
- package/components/graph/svelvet/types/types.d.ts +49 -0
- package/components/graph/svelvet/types/types.js +18 -0
- package/components/graph/util.js +2 -2
- package/components/home/ItemsList.svelte +53 -5
- package/components/home/ItemsList.svelte.d.ts +1 -0
- package/components/home/ListFilters.svelte +7 -2
- package/components/jobs/JobDetail.svelte +12 -1
- package/components/propertyPicker/ObjectViewer.svelte +6 -4
- package/consts.d.ts +1 -0
- package/consts.js +1 -0
- package/defaults.d.ts +4 -0
- package/defaults.js +4 -0
- package/history.d.ts +9 -0
- package/history.js +56 -0
- package/package.json +92 -8
- package/script_helpers.d.ts +1 -1
- package/script_helpers.js +1 -0
- package/scripts.d.ts +1 -1
- package/scripts.js +8 -1
- package/utils.d.ts +9 -4
- package/utils.js +44 -8
- package/components/apps/editor/TablePanel.svelte +0 -19
- package/components/apps/editor/TablePanel.svelte.d.ts +0 -17
- package/components/flows/map/FlowBranchAllMap.svelte +0 -100
- package/components/flows/map/FlowBranchAllMap.svelte.d.ts +0 -17
- package/components/flows/map/FlowBranchOneMap.svelte +0 -124
- package/components/flows/map/FlowBranchOneMap.svelte.d.ts +0 -17
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 OSLabs Beta
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { EdgeType, NodeType, ResizeNodeType, StoreType } from '../../store/types/types';
|
|
2
|
+
import type { UserEdgeType, UserNodeType } from '../../types/types';
|
|
3
|
+
import type { CollapsibleType } from '../types/types';
|
|
4
|
+
import type { AnchorType } from '../../edges/types/types';
|
|
5
|
+
export declare function populateCollapsibleStore(store: StoreType, userNodes: UserNodeType[], userEdges: UserEdgeType[], canvasId: string): void;
|
|
6
|
+
export declare function toggleExpandAndCollapse(store: StoreType, nodeId: string): void;
|
|
7
|
+
export declare function getCollapsibles(store: StoreType, filter?: {
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
}): CollapsibleType[];
|
|
10
|
+
export declare function filterByCollapsible(store: StoreType, nodes: NodeType[], resizeNodes: ResizeNodeType[], anchors: AnchorType[], edges: EdgeType[]): {
|
|
11
|
+
filteredNodes: NodeType[];
|
|
12
|
+
filteredResizeNodes: ResizeNodeType[];
|
|
13
|
+
filteredAnchors: AnchorType[];
|
|
14
|
+
filteredEdges: EdgeType[];
|
|
15
|
+
};
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { Collapsible } from '../models/Collapsible';
|
|
2
|
+
import { get } from 'svelte/store';
|
|
3
|
+
import { getAnchorById } from '../../edges/controllers/util';
|
|
4
|
+
import { getAnchors } from '../../edges/controllers/util';
|
|
5
|
+
const pkStringGenerator = () => (Math.random() + 1).toString(36).substring(7);
|
|
6
|
+
/*
|
|
7
|
+
Initializes store with array of Collapsible objects. You shoould only use this if you want the collapsible feature enabled.
|
|
8
|
+
*/
|
|
9
|
+
export function populateCollapsibleStore(store, userNodes, userEdges, canvasId) {
|
|
10
|
+
const newCollapsibleStore = [];
|
|
11
|
+
for (let userNode of userNodes) {
|
|
12
|
+
const collapsible = new Collapsible(pkStringGenerator(), userNode.id, 0, 'expanded');
|
|
13
|
+
newCollapsibleStore.push(collapsible);
|
|
14
|
+
}
|
|
15
|
+
store.collapsibleStore.set(newCollapsibleStore);
|
|
16
|
+
}
|
|
17
|
+
/*
|
|
18
|
+
|
|
19
|
+
*/
|
|
20
|
+
function incrementHideCount(store, nodeId) {
|
|
21
|
+
const collapsibles = get(store.collapsibleStore);
|
|
22
|
+
for (let collapsible of collapsibles)
|
|
23
|
+
if (collapsible.nodeId === nodeId)
|
|
24
|
+
collapsible.hideCount++;
|
|
25
|
+
store.collapsibleStore.set(collapsibles);
|
|
26
|
+
}
|
|
27
|
+
// Given a nodeId, find ids of all connecting target nodes
|
|
28
|
+
function findTargets(store, nodeId) {
|
|
29
|
+
// get source anchors on the node
|
|
30
|
+
const anchors = getAnchors(store, {
|
|
31
|
+
nodeId: nodeId,
|
|
32
|
+
sourceOrTarget: 'source',
|
|
33
|
+
});
|
|
34
|
+
// get target anchors on other node, and record the node id
|
|
35
|
+
const targetNodeIds = [];
|
|
36
|
+
for (const anchor of anchors) {
|
|
37
|
+
const targetAnchorId = anchor.getOtherAnchorId();
|
|
38
|
+
const targetAnchor = getAnchorById(store, targetAnchorId);
|
|
39
|
+
targetNodeIds.push(targetAnchor.nodeId);
|
|
40
|
+
}
|
|
41
|
+
return targetNodeIds;
|
|
42
|
+
}
|
|
43
|
+
// traverses tree and increments hideCount
|
|
44
|
+
function traverseAndIncrement(store, nodeId, operation) {
|
|
45
|
+
const collapsibles = get(store.collapsibleStore);
|
|
46
|
+
recursiveTraverse(nodeId);
|
|
47
|
+
store.collapsibleStore.set(collapsibles);
|
|
48
|
+
function recursiveTraverse(nId) {
|
|
49
|
+
for (const collapsible of collapsibles) {
|
|
50
|
+
if (collapsible.nodeId === nId) {
|
|
51
|
+
if (operation === 'increment')
|
|
52
|
+
collapsible.hideCount++;
|
|
53
|
+
else
|
|
54
|
+
collapsible.hideCount--;
|
|
55
|
+
const targetIds = findTargets(store, nId);
|
|
56
|
+
for (const targetId of targetIds) {
|
|
57
|
+
recursiveTraverse(targetId);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function collapse(store, nodeId) {
|
|
64
|
+
const targetNodeIds = findTargets(store, nodeId);
|
|
65
|
+
for (const targetNodeId of targetNodeIds)
|
|
66
|
+
traverseAndIncrement(store, targetNodeId, 'increment');
|
|
67
|
+
}
|
|
68
|
+
function expand(store, nodeId) {
|
|
69
|
+
const targetNodeIds = findTargets(store, nodeId);
|
|
70
|
+
for (const targetNodeId of targetNodeIds)
|
|
71
|
+
traverseAndIncrement(store, targetNodeId, 'decrement');
|
|
72
|
+
}
|
|
73
|
+
export function toggleExpandAndCollapse(store, nodeId) {
|
|
74
|
+
const collapsibles = getCollapsibles(store, { nodeId: nodeId });
|
|
75
|
+
if (collapsibles.length === 0)
|
|
76
|
+
return; // when the collapsible feature is disabled, there will be no collapbsible objects
|
|
77
|
+
if (collapsibles.length > 1)
|
|
78
|
+
throw 'there should only be one collapsible object per node';
|
|
79
|
+
const collapsible = collapsibles[0];
|
|
80
|
+
if (collapsible.state === 'expanded')
|
|
81
|
+
collapse(store, nodeId);
|
|
82
|
+
else
|
|
83
|
+
expand(store, nodeId);
|
|
84
|
+
store.collapsibleStore.update((arr) => {
|
|
85
|
+
for (const c of arr)
|
|
86
|
+
if (c.id === collapsible.id)
|
|
87
|
+
c.toggleState();
|
|
88
|
+
return [...arr];
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
export function getCollapsibles(store, filter) {
|
|
92
|
+
let collapsibles = Object.values(get(store.collapsibleStore));
|
|
93
|
+
// filter the array of anchors for elements that match filter
|
|
94
|
+
// Example: if filter = {sourceOrTarget: 'source', positionX: 35} then we will
|
|
95
|
+
//return all anchors with sourceOrTarget = source AND poxitionX = 35
|
|
96
|
+
if (filter !== undefined) {
|
|
97
|
+
collapsibles = collapsibles.filter((collapsible) => {
|
|
98
|
+
for (let filterKey in filter) {
|
|
99
|
+
const filterValue = filter[filterKey];
|
|
100
|
+
if (collapsible[filterKey] !== filterValue)
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
return true;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
// return list of anchors
|
|
107
|
+
return collapsibles;
|
|
108
|
+
}
|
|
109
|
+
/*
|
|
110
|
+
This function is responsible for filtering nodes should be displayed based on Collapsible.
|
|
111
|
+
It also filters node-associated elements such as anchors, edges, etc. so that when you collapse a node, the
|
|
112
|
+
edges also hide.
|
|
113
|
+
There is a better way to implement this with foreign keys; when collapsing a node, you would also collapse any rows with a foreign key
|
|
114
|
+
linking to that node (like a cascading delete in SQL, but with hiding instead of deleting)
|
|
115
|
+
*/
|
|
116
|
+
export function filterByCollapsible(store, nodes, resizeNodes, anchors, edges) {
|
|
117
|
+
// filter nodes for the collapsible nodes feature
|
|
118
|
+
const filteredNodes = nodes.filter((node) => {
|
|
119
|
+
const nodeId = node.id;
|
|
120
|
+
const collapssibleObj = get(store.collapsibleStore).find((e) => e.nodeId === nodeId);
|
|
121
|
+
if (collapssibleObj === undefined)
|
|
122
|
+
return true;
|
|
123
|
+
return collapssibleObj.isHidden() === false;
|
|
124
|
+
});
|
|
125
|
+
const filteredNodeIds = filteredNodes.map((e) => e.id);
|
|
126
|
+
// filter resizeNodes
|
|
127
|
+
const filteredResizeNodes = resizeNodes.filter((resizeNode) => filteredNodeIds.includes(resizeNode.nodeId));
|
|
128
|
+
const filteredAnchors = anchors.filter((selfAnchor) => {
|
|
129
|
+
const otherAnchorId = selfAnchor.getOtherAnchorId();
|
|
130
|
+
const otherAnchor = get(store.anchorsStore)[otherAnchorId];
|
|
131
|
+
if (filteredNodeIds.includes(selfAnchor.nodeId) &&
|
|
132
|
+
filteredNodeIds.includes(otherAnchor.nodeId))
|
|
133
|
+
return true;
|
|
134
|
+
return false;
|
|
135
|
+
});
|
|
136
|
+
const filteredEdgeIds = new Set(filteredAnchors.map((e) => e.edgeId));
|
|
137
|
+
const filteredEdges = edges.filter((edge) => filteredEdgeIds.has(edge.id));
|
|
138
|
+
return {
|
|
139
|
+
filteredNodes,
|
|
140
|
+
filteredResizeNodes,
|
|
141
|
+
filteredAnchors,
|
|
142
|
+
filteredEdges,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This model implements functionality for nodes to expand and collapse their children
|
|
3
|
+
*/
|
|
4
|
+
import type { CollapsibleType } from '../types/types';
|
|
5
|
+
/** Class that implements collapsible/expandable functionality for Node objects
|
|
6
|
+
* @param {string} id Unique string that serves as a primary key
|
|
7
|
+
* @param {string} nodeId Foreign key to a Node Object
|
|
8
|
+
*/
|
|
9
|
+
export declare class Collapsible implements CollapsibleType {
|
|
10
|
+
id: string;
|
|
11
|
+
nodeId: string;
|
|
12
|
+
hideCount: number;
|
|
13
|
+
state: 'expanded' | 'collapsed';
|
|
14
|
+
constructor(id: string, nodeId: string, hideCount: number, state: 'expanded' | 'collapsed');
|
|
15
|
+
isHidden(): boolean;
|
|
16
|
+
toggleState(): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This model implements functionality for nodes to expand and collapse their children
|
|
3
|
+
*/
|
|
4
|
+
/** Class that implements collapsible/expandable functionality for Node objects
|
|
5
|
+
* @param {string} id Unique string that serves as a primary key
|
|
6
|
+
* @param {string} nodeId Foreign key to a Node Object
|
|
7
|
+
*/
|
|
8
|
+
export class Collapsible {
|
|
9
|
+
id;
|
|
10
|
+
nodeId;
|
|
11
|
+
hideCount;
|
|
12
|
+
state;
|
|
13
|
+
constructor(id, nodeId, hideCount, state) {
|
|
14
|
+
this.id = id;
|
|
15
|
+
this.nodeId = nodeId;
|
|
16
|
+
this.hideCount = hideCount;
|
|
17
|
+
this.state = state;
|
|
18
|
+
}
|
|
19
|
+
isHidden() {
|
|
20
|
+
return this.hideCount > 0;
|
|
21
|
+
}
|
|
22
|
+
toggleState() {
|
|
23
|
+
this.state = this.state === 'expanded' ? 'collapsed' : 'expanded';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { StoreType } from '../../store/types/types';
|
|
2
|
+
import type { UserEdgeType, UserNodeType } from '../../types/types';
|
|
3
|
+
/**
|
|
4
|
+
* sanitizeCanvasOptions will sanitize the canvas level options so that incompatible features will not be run simulataneously
|
|
5
|
+
* @param store The array of nodes that have a UserNodeType
|
|
6
|
+
* @returns void. The store is modified directly
|
|
7
|
+
*/
|
|
8
|
+
export declare function sanitizeCanvasOptions(store: StoreType): void;
|
|
9
|
+
/**
|
|
10
|
+
* sanitizeUserNodesAndEdges will sanitize the data initially passed in to Svelvet component. For example, the node that user specified have an integar as its id but to instantiate a Node and be compatible with uuid we will need to convert the integar id to a string.
|
|
11
|
+
* @param userNodes The array of nodes that have a UserNodeType
|
|
12
|
+
* @param userEdges The array of edges that have a UserEdgeType
|
|
13
|
+
* @returns An object of sanitized userNodes and userEdges
|
|
14
|
+
*/
|
|
15
|
+
export declare function sanitizeUserNodesAndEdges(userNodes: UserNodeType[], userEdges: UserEdgeType[]): {
|
|
16
|
+
userNodes: UserNodeType[];
|
|
17
|
+
userEdges: UserEdgeType[];
|
|
18
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/*
|
|
2
|
+
This file contains "middleware" functions that sanitize user input (UserNodeType and UserEdgeType). Put functions that
|
|
3
|
+
maintain consistency between previous
|
|
4
|
+
|
|
5
|
+
*/
|
|
6
|
+
import { get } from 'svelte/store';
|
|
7
|
+
import { bottomCb, leftCb, rightCb, topCb, } from '../../edges/controllers/anchorCbUser';
|
|
8
|
+
/**
|
|
9
|
+
* sanitizeCanvasOptions will sanitize the canvas level options so that incompatible features will not be run simulataneously
|
|
10
|
+
* @param store The array of nodes that have a UserNodeType
|
|
11
|
+
* @returns void. The store is modified directly
|
|
12
|
+
*/
|
|
13
|
+
export function sanitizeCanvasOptions(store) {
|
|
14
|
+
enforceCollapsibleCompatibility(store);
|
|
15
|
+
}
|
|
16
|
+
function enforceCollapsibleCompatibility(store) {
|
|
17
|
+
if (get(store.collapsibleOption)) {
|
|
18
|
+
store.nodeCreate.set(false);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* sanitizeUserNodesAndEdges will sanitize the data initially passed in to Svelvet component. For example, the node that user specified have an integar as its id but to instantiate a Node and be compatible with uuid we will need to convert the integar id to a string.
|
|
23
|
+
* @param userNodes The array of nodes that have a UserNodeType
|
|
24
|
+
* @param userEdges The array of edges that have a UserEdgeType
|
|
25
|
+
* @returns An object of sanitized userNodes and userEdges
|
|
26
|
+
*/
|
|
27
|
+
export function sanitizeUserNodesAndEdges(userNodes, userEdges) {
|
|
28
|
+
convertIdToString(userNodes);
|
|
29
|
+
convertEdgeIdsToString(userEdges);
|
|
30
|
+
convertAnchorPositionsToCallbacks(userNodes, userEdges);
|
|
31
|
+
setDefaultEdgeType(userEdges);
|
|
32
|
+
return { userNodes, userEdges };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* setDefaultEdgeType ensures a default edge type of 'bezier' if the user does not set one, or sets a nonsense type.
|
|
36
|
+
* @param userEdges The array of edges that have a UserEdgeType
|
|
37
|
+
* @returns No return, the function edits the objects in place
|
|
38
|
+
*/
|
|
39
|
+
function setDefaultEdgeType(userEdges) {
|
|
40
|
+
for (let userEdge of userEdges) {
|
|
41
|
+
if (!['smoothstep', 'step', 'bezier', 'straight'].includes(userEdge.type))
|
|
42
|
+
userEdge.type = 'bezier';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* convertAnchorPositionsToCallbacks
|
|
47
|
+
* @description
|
|
48
|
+
* WHY: This function is in order to maintain compliance with earlier versions of Svelvet.
|
|
49
|
+
* HISTORY: In Svelvet<=5, anchor points were hard-coded onto each node. Each node had a "sourcePosition"
|
|
50
|
+
* "targetPosition" where the edges would be attached. In Svelvet6, the store was re-designed
|
|
51
|
+
* from the ground up into an object-relational data model where anchor points could be attached
|
|
52
|
+
* at any point on the node using callbacks. This enabled features such as custom edge position,
|
|
53
|
+
* adaptive edge positioning, and dynamic edges.
|
|
54
|
+
* The purpose of this function is to parse the old way of specifying edge positions (as two source/target
|
|
55
|
+
* anchors on the node) into the Svelvet6 (where anchors are separate objects) in order to maintain a
|
|
56
|
+
* consistent user experience. However, we suggest that this functionality (parsing Svelvet5 syntax into
|
|
57
|
+
* Svelvet6 syntax) be removed completely in favor of only using Svelvet6 syntax in order to reduce edge cases.
|
|
58
|
+
*/
|
|
59
|
+
function convertAnchorPositionsToCallbacks(userNodes, userEdges) {
|
|
60
|
+
// convert userNodes array into object for constant time lookup by id
|
|
61
|
+
const userNodesObj = {};
|
|
62
|
+
for (let userNode of userNodes)
|
|
63
|
+
userNodesObj[userNode.id] = userNode;
|
|
64
|
+
// iterate through userEdges, and check the source/target nodes.
|
|
65
|
+
for (let userEdge of userEdges) {
|
|
66
|
+
const userNodeSource = userNodesObj[userEdge.source];
|
|
67
|
+
const userNodeTarget = userNodesObj[userEdge.target];
|
|
68
|
+
const sourcePosition = userNodeSource.sourcePosition;
|
|
69
|
+
const targetPosition = userNodeTarget.targetPosition;
|
|
70
|
+
const cbs = { left: leftCb, right: rightCb, top: topCb, bottom: bottomCb };
|
|
71
|
+
if (sourcePosition)
|
|
72
|
+
userEdge.sourceAnchorCb = cbs[sourcePosition];
|
|
73
|
+
if (targetPosition)
|
|
74
|
+
userEdge.targetAnchorCb = cbs[targetPosition];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Converts node id's to strings. For Svelvet<6, node id's were numbers. These were switched to strings for compatibility with uuid. This function does not return a new array, instead it mutates and sanitizes the original array.
|
|
79
|
+
* @param userNodes The array of userNodes (not yet sanitized)
|
|
80
|
+
*/
|
|
81
|
+
function convertIdToString(userNodes) {
|
|
82
|
+
userNodes = userNodes.map((node) => {
|
|
83
|
+
node.id = node.id.toString();
|
|
84
|
+
node.childNodes =
|
|
85
|
+
node.childNodes === undefined
|
|
86
|
+
? []
|
|
87
|
+
: node.childNodes.map((childId) => childId.toString());
|
|
88
|
+
return node;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Converts source/target node id's to string. For Svelvet<6, id's were numbers. These were switched to strings for compatibility with uuid. This function does not return a new array, instead it mutates and sanitizes the original array.
|
|
93
|
+
* @param userEdges The array of userEdges (not yet sanitized)
|
|
94
|
+
*/
|
|
95
|
+
function convertEdgeIdsToString(userEdges) {
|
|
96
|
+
userEdges = userEdges.map((edge) => {
|
|
97
|
+
edge.source = edge.source.toString();
|
|
98
|
+
edge.target = edge.target.toString();
|
|
99
|
+
return edge;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
<script>import { onMount } from 'svelte';
|
|
2
|
+
import { zoom, zoomTransform, zoomIdentity } from 'd3-zoom';
|
|
3
|
+
import { select, selectAll, pointer } from 'd3-selection';
|
|
4
|
+
import SimpleBezierEdge from '../../edges/views/Edges/SimpleBezierEdge.svelte';
|
|
5
|
+
import StepEdge from '../../edges/views/Edges/StepEdge.svelte';
|
|
6
|
+
import SmoothStepEdge from '../../edges/views/Edges/SmoothStepEdge.svelte';
|
|
7
|
+
import Node from '../../nodes/views/Node.svelte';
|
|
8
|
+
import { findStore } from '../../store/controllers/storeApi';
|
|
9
|
+
import { determineD3Instance, zoomInit } from '../..//d3/controllers/d3';
|
|
10
|
+
import { filterByCollapsible } from '../../collapsible/controllers/util';
|
|
11
|
+
import { onDestroy } from 'svelte';
|
|
12
|
+
//these are typscripted as any, however they have been transformed inside of store.ts
|
|
13
|
+
export let canvasId;
|
|
14
|
+
export let width;
|
|
15
|
+
export let height;
|
|
16
|
+
export let initialZoom = 3;
|
|
17
|
+
export let initialLocation;
|
|
18
|
+
export let boundary = false;
|
|
19
|
+
export let minimap = false;
|
|
20
|
+
export let scroll = false;
|
|
21
|
+
// here we lookup the store using the unique key
|
|
22
|
+
const store = findStore(canvasId);
|
|
23
|
+
const { edgesStore, nodesStore, anchorsStore, potentialAnchorsStore, temporaryEdgeStore, resizeNodesStore, nodeSelected, backgroundStore, movementStore, widthStore, heightStore, d3Scale, collapsibleStore } = store;
|
|
24
|
+
$: nodes = Object.values($nodesStore);
|
|
25
|
+
$: edges = Object.values($edgesStore);
|
|
26
|
+
$: anchors = Object.values($anchorsStore);
|
|
27
|
+
$: resizeNodes = Object.values($resizeNodesStore);
|
|
28
|
+
$: potentialAnchors = Object.values($potentialAnchorsStore);
|
|
29
|
+
$: tempEdges = $temporaryEdgeStore;
|
|
30
|
+
/*
|
|
31
|
+
This block of code is responsible for reactivity of the collapsible feature
|
|
32
|
+
When collaspsibleStore changes, nodes/edges/resizeNodes/anchors are filtered so that
|
|
33
|
+
only the visible ones are displayed
|
|
34
|
+
*/
|
|
35
|
+
let filteredNodes;
|
|
36
|
+
let filteredEdges;
|
|
37
|
+
let filteredResizeNodes;
|
|
38
|
+
let filteredAnchors;
|
|
39
|
+
$: {
|
|
40
|
+
const tmp = $collapsibleStore; // assignment is necessary for reactivity
|
|
41
|
+
const obj = filterByCollapsible(store, nodes, resizeNodes, anchors, edges);
|
|
42
|
+
filteredNodes = obj['filteredNodes'];
|
|
43
|
+
filteredEdges = obj['filteredEdges'];
|
|
44
|
+
filteredResizeNodes = obj['filteredResizeNodes'];
|
|
45
|
+
filteredAnchors = obj['filteredAnchors'];
|
|
46
|
+
}
|
|
47
|
+
// declaring the grid and dot size for d3's transformations and zoom
|
|
48
|
+
const gridSize = 15;
|
|
49
|
+
const dotSize = 10;
|
|
50
|
+
// leveraging d3 library to zoom/pan
|
|
51
|
+
let d3 = {
|
|
52
|
+
zoom,
|
|
53
|
+
zoomTransform,
|
|
54
|
+
zoomIdentity,
|
|
55
|
+
select,
|
|
56
|
+
selectAll,
|
|
57
|
+
pointer
|
|
58
|
+
};
|
|
59
|
+
let d3Zoom = determineD3Instance(boundary, d3, nodeSelected, width, height, movementStore, backgroundStore, gridSize, dotSize, canvasId, d3Scale, handleZoom);
|
|
60
|
+
// d3Translate is used for the minimap
|
|
61
|
+
let d3Translate = { x: 0, y: 0, k: 1 };
|
|
62
|
+
onMount(() => {
|
|
63
|
+
// actualizes the d3 instance
|
|
64
|
+
const nodes = d3.select(`.zoomable`).call(d3Zoom).on('dblclick.zoom', null);
|
|
65
|
+
if (!scroll) {
|
|
66
|
+
;
|
|
67
|
+
[nodes].forEach((d3Instance) => {
|
|
68
|
+
d3Instance
|
|
69
|
+
.on('wheel.zoom', null)
|
|
70
|
+
.on('mousewheel.zoom', null)
|
|
71
|
+
.on('mousemove.zoom', null)
|
|
72
|
+
.on('DOMMouseScroll.zoom', null);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
d3.select('#zoom_in').on('click', function () {
|
|
76
|
+
try {
|
|
77
|
+
d3Zoom.scaleBy(nodes.transition().duration(250), 1.4);
|
|
78
|
+
// d3Zoom.translateTo(edgesd3, d3Translate.x, d3Translate.y)
|
|
79
|
+
// d3Zoom.translateTo(nodesd3, d3Translate.x, d3Translate.y)
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
console.log('error', e);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
d3.select('#zoom_out').on('click', function () {
|
|
86
|
+
try {
|
|
87
|
+
d3Zoom.scaleBy(nodes.transition().duration(250), 0.714);
|
|
88
|
+
// d3Zoom.translateTo(edgesd3.transition().duration(0), d3Translate.x, d3Translate.y)
|
|
89
|
+
// d3Zoom.translateTo(nodesd3.transition().duration(0), d3Translate.x, d3Translate.y)
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
console.log('error', e);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
// })
|
|
96
|
+
// d3Translate = zoomInit(d3, canvasId, d3Zoom, d3Translate, initialLocation, initialZoom, d3Scale)
|
|
97
|
+
});
|
|
98
|
+
onDestroy(() => {
|
|
99
|
+
d3.select('svg').remove();
|
|
100
|
+
});
|
|
101
|
+
// This is necessary to make Graphview reactive to changes in initialZoom
|
|
102
|
+
// When initialZoom changes, then zoomInit will set the zoom/position
|
|
103
|
+
// let prevZoom = initialZoom
|
|
104
|
+
// let prevInitialLocationX = initialLocation.x
|
|
105
|
+
// let prevInitialLocationY = initialLocation.y
|
|
106
|
+
// $: if (
|
|
107
|
+
// initialZoom !== prevZoom ||
|
|
108
|
+
// prevInitialLocationX !== initialLocation.x ||
|
|
109
|
+
// prevInitialLocationY !== initialLocation.y
|
|
110
|
+
// ) {
|
|
111
|
+
// prevZoom = initialZoom
|
|
112
|
+
// prevInitialLocationX = initialLocation.x
|
|
113
|
+
// prevInitialLocationY = initialLocation.y
|
|
114
|
+
// d3Translate = zoomInit(d3, canvasId, d3Zoom, d3Translate, initialLocation, initialZoom, d3Scale)
|
|
115
|
+
// }
|
|
116
|
+
// moves canvas when you click on the minimap
|
|
117
|
+
// handles case for when minimap sends message back to initiate translation event (click to traverse minimap)
|
|
118
|
+
// moves camera to the clicked node
|
|
119
|
+
const key = canvasId;
|
|
120
|
+
function handleZoom(e) {
|
|
121
|
+
if (!$movementStore)
|
|
122
|
+
return;
|
|
123
|
+
//add a store that contains the current value of the d3-zoom's scale to be used in onMouseMove function
|
|
124
|
+
d3Scale.set(e.transform.k);
|
|
125
|
+
// transform 'g' SVG elements (edge, edge text, edge anchor)
|
|
126
|
+
d3.select(`.Edges-${canvasId} g`).attr('transform', e.transform);
|
|
127
|
+
// transform div elements (nodes)
|
|
128
|
+
//@ts-ignore
|
|
129
|
+
let transform = d3.zoomTransform(this);
|
|
130
|
+
d3Translate = transform;
|
|
131
|
+
store.d3ZoomParameters.set({ ...transform }); // record x,y position of pan, and zoom level
|
|
132
|
+
// selects and transforms all node divs from class 'Node' and performs transformation
|
|
133
|
+
d3.select(`.Node-${canvasId}`)
|
|
134
|
+
.style('transform', 'translate(' + transform.x + 'px,' + transform.y + 'px) scale(' + transform.k + ')')
|
|
135
|
+
.style('transform-origin', '0 0');
|
|
136
|
+
}
|
|
137
|
+
</script>
|
|
138
|
+
|
|
139
|
+
<div class="zoomable">
|
|
140
|
+
<!-- This is the container that holds GraphView and we have disabled right click functionality to prevent a sticking behavior -->
|
|
141
|
+
<div id="graphview-container">
|
|
142
|
+
<div class={`Nodes Nodes-${canvasId}`} on:contextmenu|preventDefault>
|
|
143
|
+
<!-- This container is transformed by d3zoom -->
|
|
144
|
+
<div class={`Node Node-${canvasId}`}>
|
|
145
|
+
{#each filteredNodes as node}
|
|
146
|
+
{#if node.data.html}
|
|
147
|
+
<Node {node} {canvasId} nodeId={node.id}>{@html node.data.html}</Node>
|
|
148
|
+
{:else if node.data.custom}
|
|
149
|
+
<Node isCustom {node} {canvasId} nodeId={node.id}>
|
|
150
|
+
<svelte:component
|
|
151
|
+
this={node.data.custom.component}
|
|
152
|
+
on:new={(e) => node?.data?.custom?.cb?.('new', e.detail)}
|
|
153
|
+
on:delete={(e) => node?.data?.custom?.cb?.('delete', e.detail)}
|
|
154
|
+
on:select={(e) => node?.data?.custom?.cb?.('select', e.detail)}
|
|
155
|
+
on:insert={(e) => node?.data?.custom?.cb?.('insert', e.detail)}
|
|
156
|
+
on:newBranch={(e) => node?.data?.custom?.cb?.('newBranch', e.detail)}
|
|
157
|
+
on:deleteBranch={(e) => node?.data?.custom?.cb?.('deleteBranch', e.detail)}
|
|
158
|
+
on:move={(e) => node?.data?.custom?.cb?.('move', e.detail)}
|
|
159
|
+
{...node.data.custom.props}
|
|
160
|
+
/>
|
|
161
|
+
</Node>
|
|
162
|
+
{:else}
|
|
163
|
+
<Node {node} {canvasId} nodeId={node.id}>{node.data.label}</Node>
|
|
164
|
+
{/if}
|
|
165
|
+
{/each}
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
<!-- rendering dots on the background depending on the zoom level -->
|
|
170
|
+
<svg
|
|
171
|
+
class={`Edges Edges-${canvasId}`}
|
|
172
|
+
viewBox="0 0 {$widthStore} {$heightStore}"
|
|
173
|
+
on:contextmenu|preventDefault
|
|
174
|
+
>
|
|
175
|
+
<defs>
|
|
176
|
+
<pattern
|
|
177
|
+
id={`background-${canvasId}`}
|
|
178
|
+
x="0"
|
|
179
|
+
y="0"
|
|
180
|
+
width={gridSize}
|
|
181
|
+
height={gridSize}
|
|
182
|
+
patternUnits="userSpaceOnUse"
|
|
183
|
+
>
|
|
184
|
+
<circle
|
|
185
|
+
id="dot"
|
|
186
|
+
cx={gridSize / 2 - dotSize / 2}
|
|
187
|
+
cy={gridSize / 2 - dotSize / 2}
|
|
188
|
+
r="0.5"
|
|
189
|
+
style="fill: gray"
|
|
190
|
+
/>
|
|
191
|
+
</pattern>
|
|
192
|
+
</defs>
|
|
193
|
+
|
|
194
|
+
<!-- <g> tag defines which edge type to render depending on properties of edge object -->
|
|
195
|
+
<g>
|
|
196
|
+
{#each filteredEdges as edge}
|
|
197
|
+
{#if edge.type === 'smoothstep'}
|
|
198
|
+
<SmoothStepEdge {edge} {canvasId} />
|
|
199
|
+
{:else if edge.type === 'step'}
|
|
200
|
+
<StepEdge {edge} {canvasId} />
|
|
201
|
+
{:else}
|
|
202
|
+
<SimpleBezierEdge edgeId={edge.id} {canvasId} />
|
|
203
|
+
{/if}
|
|
204
|
+
{/each}
|
|
205
|
+
|
|
206
|
+
<!-- {#each filteredAnchors as anchor} -->
|
|
207
|
+
<!-- note that these are SVG -->
|
|
208
|
+
<!-- <EdgeAnchor x={anchor.positionX} y={anchor.positionY} /> -->
|
|
209
|
+
<!-- {/each} -->
|
|
210
|
+
</g>
|
|
211
|
+
</svg>
|
|
212
|
+
</div>
|
|
213
|
+
<div id="buttons">
|
|
214
|
+
<button id="zoom_in">+</button>
|
|
215
|
+
<button id="zoom_out">-</button>
|
|
216
|
+
</div>
|
|
217
|
+
|
|
218
|
+
<style>
|
|
219
|
+
#buttons {
|
|
220
|
+
position: absolute;
|
|
221
|
+
top: 4px;
|
|
222
|
+
right: 4px;
|
|
223
|
+
z-index: 20;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
#buttons > button {
|
|
227
|
+
border-radius: 4px;
|
|
228
|
+
background-color: white;
|
|
229
|
+
border: #999 solid 1px;
|
|
230
|
+
padding-right: 4px;
|
|
231
|
+
padding-left: 4px;
|
|
232
|
+
width: 24px;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
svg {
|
|
236
|
+
}
|
|
237
|
+
.Nodes {
|
|
238
|
+
position: absolute;
|
|
239
|
+
width: 100%;
|
|
240
|
+
height: 100%;
|
|
241
|
+
}
|
|
242
|
+
.Node {
|
|
243
|
+
color: black; /* remove this once color is set to default via types */
|
|
244
|
+
width: 100%;
|
|
245
|
+
height: 100%;
|
|
246
|
+
}
|
|
247
|
+
#graphview-container {
|
|
248
|
+
pointer-events: none;
|
|
249
|
+
}
|
|
250
|
+
.pointer-events-auto {
|
|
251
|
+
pointer-events: auto;
|
|
252
|
+
}</style>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
canvasId: string;
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
initialZoom?: number | undefined;
|
|
8
|
+
initialLocation: any;
|
|
9
|
+
boundary?: boolean | undefined;
|
|
10
|
+
minimap?: boolean | undefined;
|
|
11
|
+
scroll?: boolean | undefined;
|
|
12
|
+
};
|
|
13
|
+
events: {
|
|
14
|
+
contextmenu: MouseEvent;
|
|
15
|
+
} & {
|
|
16
|
+
[evt: string]: CustomEvent<any>;
|
|
17
|
+
};
|
|
18
|
+
slots: {};
|
|
19
|
+
};
|
|
20
|
+
export type GraphViewProps = typeof __propDef.props;
|
|
21
|
+
export type GraphViewEvents = typeof __propDef.events;
|
|
22
|
+
export type GraphViewSlots = typeof __propDef.slots;
|
|
23
|
+
export default class GraphView extends SvelteComponentTyped<GraphViewProps, GraphViewEvents, GraphViewSlots> {
|
|
24
|
+
}
|
|
25
|
+
export {};
|