windmill-components 1.60.4 → 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 +15 -1
- package/common.d.ts +5 -1
- package/components/ApiConnectForm.svelte +66 -5
- package/components/AppConnect.svelte +26 -10
- package/components/ArgInput.svelte +1 -1
- package/components/CliHelpBox.svelte +49 -0
- package/components/CliHelpBox.svelte.d.ts +14 -0
- package/components/DisplayResult.svelte +78 -10
- package/components/DisplayResult.svelte.d.ts +1 -0
- package/components/Editor.svelte +17 -7
- package/components/EditorBar.svelte +129 -111
- 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 +13 -5
- package/components/FlowJobResult.svelte.d.ts +1 -0
- package/components/FlowMetadata.svelte +24 -8
- package/components/FlowPreviewContent.svelte +5 -11
- package/components/FlowStatusViewer.svelte +62 -17
- package/components/FolderEditor.svelte +3 -2
- package/components/GroupEditor.svelte +8 -0
- package/components/HighlightCode.svelte +7 -1
- package/components/InlineCodeCopy.svelte +11 -0
- package/components/InlineCodeCopy.svelte.d.ts +16 -0
- package/components/InputTransformForm.svelte +22 -25
- package/components/InputTransformSchemaForm.svelte +103 -0
- package/components/InputTransformSchemaForm.svelte.d.ts +24 -0
- package/components/LogViewer.svelte +7 -1
- package/components/LogViewer.svelte.d.ts +1 -0
- package/components/ModulePreview.svelte +13 -3
- package/components/MoveDrawer.svelte +1 -1
- package/components/Multiselect.svelte +1 -1
- package/components/Multiselect.svelte.d.ts +2 -2
- package/components/ObjectResourceInput.svelte +6 -1
- package/components/Path.svelte +29 -16
- package/components/Popover.svelte +10 -15
- package/components/Popover.svelte.d.ts +1 -0
- package/components/Range.svelte.d.ts +2 -2
- package/components/ResourceEditor.svelte +39 -16
- package/components/ResourcePicker.svelte +33 -15
- package/components/RunChart.svelte +24 -5
- package/components/RunForm.svelte +26 -3
- package/components/RunForm.svelte.d.ts +2 -0
- package/components/ScheduleEditor.svelte +1 -1
- package/components/SchemaEditor.svelte +2 -2
- package/components/SchemaForm.svelte +72 -60
- package/components/SchemaForm.svelte.d.ts +1 -5
- package/components/ScriptBuilder.svelte +69 -30
- package/components/ScriptBuilder.svelte.d.ts +1 -0
- package/components/ScriptEditor.svelte +1 -0
- package/components/ScriptPicker.svelte +3 -0
- package/components/SharedBadge.svelte +5 -5
- package/components/SimpleEditor.svelte +4 -1
- package/components/SimpleEditor.svelte.d.ts +2 -0
- package/components/Slider.svelte +19 -0
- package/components/Slider.svelte.d.ts +20 -0
- package/components/StringTypeNarrowing.svelte +0 -1
- package/components/SuperadminSettings.svelte +11 -3
- package/components/SuperadminSettings.svelte.d.ts +2 -0
- package/components/TemplateEditor.svelte +1 -1
- package/components/TemplateEditor.svelte.d.ts +204 -0
- package/components/TestJobLoader.svelte +5 -5
- package/components/Toggle.svelte +18 -6
- package/components/Toggle.svelte.d.ts +2 -0
- package/components/Tooltip.svelte +1 -1
- package/components/UserSettings.svelte +13 -3
- package/components/UserSettings.svelte.d.ts +2 -0
- package/components/VariableEditor.svelte +1 -1
- package/components/WhitelistIp.svelte +23 -0
- package/components/WhitelistIp.svelte.d.ts +14 -0
- package/components/apps/components/buttons/AppButton.svelte +79 -17
- package/components/apps/components/buttons/AppButton.svelte.d.ts +4 -0
- package/components/apps/components/{form → buttons}/AppForm.svelte +19 -7
- package/components/apps/components/{form → buttons}/AppForm.svelte.d.ts +3 -0
- package/components/apps/components/buttons/AppFormButton.svelte +145 -0
- package/components/apps/components/buttons/AppFormButton.svelte.d.ts +28 -0
- package/components/apps/components/buttons/index.d.ts +3 -0
- package/components/apps/components/buttons/index.js +3 -0
- package/components/apps/components/{dataDisplay → display}/AppBarChart.svelte +27 -8
- package/components/apps/components/{dataDisplay → display}/AppBarChart.svelte.d.ts +4 -0
- package/components/apps/components/display/AppDisplayComponent.svelte +36 -0
- package/components/apps/components/display/AppDisplayComponent.svelte.d.ts +24 -0
- package/components/apps/components/display/AppHtml.svelte +46 -0
- package/components/apps/components/{dataDisplay → display}/AppHtml.svelte.d.ts +4 -1
- package/components/apps/components/display/AppIcon.svelte +47 -0
- package/components/apps/components/display/AppIcon.svelte.d.ts +25 -0
- package/components/apps/components/display/AppImage.svelte +34 -0
- package/components/apps/components/display/AppImage.svelte.d.ts +25 -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/{dataDisplay → display}/AppPieChart.svelte +16 -7
- package/components/apps/components/{dataDisplay → display}/AppPieChart.svelte.d.ts +4 -0
- package/components/apps/components/{dataDisplay → display}/AppScatterChart.svelte +13 -4
- package/components/apps/components/{dataDisplay → display}/AppScatterChart.svelte.d.ts +4 -0
- package/components/apps/components/{dataDisplay → display}/AppText.svelte +42 -34
- package/components/apps/components/{dataDisplay → display}/AppText.svelte.d.ts +4 -0
- package/components/apps/components/{dataDisplay → display}/AppTimeseries.svelte +14 -5
- package/components/apps/components/{dataDisplay → display}/AppTimeseries.svelte.d.ts +4 -0
- package/components/apps/components/display/PlotlyHtml.svelte +32 -0
- package/components/apps/components/display/PlotlyHtml.svelte.d.ts +24 -0
- package/components/apps/components/{dataDisplay → display}/VegaLiteHtml.svelte +4 -10
- package/components/apps/components/{dataDisplay → display}/VegaLiteHtml.svelte.d.ts +2 -0
- package/components/apps/components/display/index.d.ts +15 -0
- package/components/apps/components/display/index.js +15 -0
- package/components/apps/components/display/table/AppAggridTable.svelte +92 -0
- package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +25 -0
- package/components/apps/components/{table → display/table}/AppTable.svelte +85 -29
- package/components/apps/components/{table → display/table}/AppTable.svelte.d.ts +6 -2
- package/components/apps/components/{table → display/table}/AppTableFooter.svelte +9 -2
- package/components/apps/components/{table → display/table}/AppTableFooter.svelte.d.ts +2 -0
- package/components/apps/components/helpers/AlignWrapper.svelte +29 -23
- package/components/apps/components/helpers/AlignWrapper.svelte.d.ts +6 -2
- package/components/apps/components/helpers/HiddenComponent.svelte +23 -0
- package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +25 -0
- package/components/apps/components/helpers/InputDefaultValue.svelte +17 -0
- package/components/apps/components/helpers/InputDefaultValue.svelte.d.ts +17 -0
- package/components/apps/components/helpers/InputValue.svelte +39 -18
- package/components/apps/components/helpers/InputValue.svelte.d.ts +0 -1
- 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 +99 -102
- package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +5 -2
- package/components/apps/components/helpers/RunnableWrapper.svelte +16 -7
- package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +5 -2
- package/components/apps/components/helpers/index.d.ts +10 -0
- package/components/apps/components/helpers/index.js +10 -0
- package/components/apps/components/icon.d.ts +1 -0
- package/components/apps/components/icon.js +18 -0
- package/components/apps/components/index.d.ts +5 -0
- package/components/apps/components/index.js +5 -0
- package/components/apps/components/{selectInputs → inputs}/AppCheckbox.svelte +12 -4
- package/components/apps/components/{selectInputs → inputs}/AppCheckbox.svelte.d.ts +3 -0
- package/components/apps/components/inputs/AppDateInput.svelte +47 -0
- package/components/apps/components/{dateInputs → inputs}/AppDateInput.svelte.d.ts +6 -1
- package/components/apps/components/inputs/AppFileInput.svelte +42 -0
- package/components/apps/components/inputs/AppFileInput.svelte.d.ts +23 -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 +52 -0
- package/components/apps/components/{numberInputs → inputs}/AppNumberInput.svelte.d.ts +5 -0
- package/components/apps/components/inputs/AppRangeInput.svelte +85 -0
- package/components/apps/components/inputs/AppRangeInput.svelte.d.ts +26 -0
- package/components/apps/components/inputs/AppSelect.svelte +127 -0
- package/components/apps/components/{selectInputs → inputs}/AppSelect.svelte.d.ts +5 -0
- package/components/apps/components/inputs/AppSliderInputs.svelte +73 -0
- package/components/apps/components/{numberInputs → inputs}/AppSliderInputs.svelte.d.ts +3 -0
- package/components/apps/components/inputs/AppTextInput.svelte +71 -0
- package/components/apps/components/{textInputs → inputs}/AppTextInput.svelte.d.ts +6 -0
- package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +59 -0
- package/components/apps/components/inputs/currency/AppCurrencyInput.svelte.d.ts +24 -0
- package/components/apps/components/inputs/currency/CurrencyInput.svelte +183 -0
- package/components/apps/components/inputs/currency/CurrencyInput.svelte.d.ts +33 -0
- package/components/apps/components/inputs/index.d.ts +9 -0
- package/components/apps/components/inputs/index.js +9 -0
- package/components/apps/components/layout/AppContainer.svelte +40 -0
- package/components/apps/components/layout/AppContainer.svelte.d.ts +24 -0
- package/components/apps/components/layout/AppDivider.svelte +40 -0
- package/components/apps/components/layout/AppDivider.svelte.d.ts +24 -0
- 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 +99 -0
- package/components/apps/components/layout/AppTabs.svelte.d.ts +27 -0
- package/components/apps/components/layout/index.d.ts +5 -0
- package/components/apps/components/layout/index.js +5 -0
- package/components/apps/editor/AppComponentInput.svelte +33 -0
- package/components/apps/editor/AppComponentInput.svelte.d.ts +18 -0
- package/components/apps/editor/AppComponentInputs.svelte +13 -0
- package/components/apps/editor/AppComponentInputs.svelte.d.ts +20 -0
- package/components/apps/editor/AppEditor.svelte +134 -35
- package/components/apps/editor/AppEditor.svelte.d.ts +4 -1
- package/components/apps/editor/AppEditorHeader.svelte +178 -47
- package/components/apps/editor/AppEditorHeader.svelte.d.ts +1 -0
- package/components/apps/editor/AppInputs.svelte +60 -0
- package/components/apps/editor/AppInputs.svelte.d.ts +14 -0
- package/components/apps/editor/AppPreview.svelte +30 -12
- package/components/apps/editor/ComponentHeader.svelte +52 -3
- package/components/apps/editor/ComponentHeader.svelte.d.ts +2 -1
- package/components/apps/editor/GridEditor.svelte +134 -77
- package/components/apps/editor/GridEditor.svelte.d.ts +2 -0
- 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 +26 -8
- package/components/apps/editor/SubGridEditor.svelte +139 -0
- package/components/apps/editor/SubGridEditor.svelte.d.ts +29 -0
- package/components/apps/editor/appUtils.d.ts +19 -0
- package/components/apps/editor/appUtils.js +241 -0
- package/components/apps/editor/component/Component.svelte +434 -0
- package/components/apps/editor/{ComponentEditor.svelte.d.ts → component/Component.svelte.d.ts} +7 -5
- 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/README.md +15 -0
- package/components/apps/editor/component/components.d.ts +77 -0
- package/components/apps/editor/component/components.js +1476 -0
- package/components/apps/editor/component/default-codes.d.ts +3 -0
- package/components/apps/editor/component/default-codes.js +322 -0
- package/components/apps/editor/component/index.d.ts +4 -0
- package/components/apps/editor/component/index.js +4 -0
- package/components/apps/editor/component/sets.d.ts +2 -0
- package/components/apps/editor/component/sets.js +55 -0
- package/components/apps/editor/componentsPanel/ComponentList.svelte +75 -108
- package/components/apps/editor/componentsPanel/CssProperty.svelte +67 -0
- package/components/apps/editor/componentsPanel/CssProperty.svelte.d.ts +21 -0
- package/components/apps/editor/componentsPanel/CssSettings.svelte +188 -0
- package/components/apps/editor/componentsPanel/CssSettings.svelte.d.ts +14 -0
- package/components/apps/editor/componentsPanel/ListItem.svelte +39 -0
- package/components/apps/editor/componentsPanel/ListItem.svelte.d.ts +20 -0
- package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +5 -1
- package/components/apps/editor/componentsPanel/componentStaticValues.js +16 -1
- package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +1 -1
- package/components/apps/editor/contextPanel/ContextPanel.svelte +115 -67
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +109 -10
- package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +1 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +88 -41
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +5 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +32 -6
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +1 -0
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +75 -8
- package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +128 -72
- package/components/apps/editor/inlineScriptsPanel/utils.d.ts +5 -5
- package/components/apps/editor/inlineScriptsPanel/utils.js +48 -7
- package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +1 -1
- package/components/apps/editor/settingsPanel/AlignmentEditor.svelte.d.ts +1 -1
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +14 -10
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +68 -1
- package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +1 -1
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte +130 -61
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +6 -3
- 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 +73 -0
- package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +20 -0
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +5 -1
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +2 -2
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +93 -78
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +1 -0
- package/components/apps/editor/settingsPanel/MoveToOtherGrid.svelte +92 -0
- package/components/apps/editor/settingsPanel/MoveToOtherGrid.svelte.d.ts +18 -0
- package/components/apps/editor/settingsPanel/Recompute.svelte +5 -2
- package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +1 -1
- package/components/apps/editor/settingsPanel/TableActions.svelte +45 -7
- package/components/apps/editor/settingsPanel/TableActions.svelte.d.ts +2 -1
- package/components/apps/editor/settingsPanel/common/PanelSection.svelte +6 -4
- 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 +107 -0
- package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +21 -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 +59 -6
- package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +3 -0
- package/components/apps/editor/settingsPanel/inputEditor/UploadInputEditor.svelte +21 -0
- package/components/apps/editor/settingsPanel/inputEditor/UploadInputEditor.svelte.d.ts +17 -0
- 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 +4 -21
- package/components/apps/gridUtils.d.ts +3 -1
- package/components/apps/gridUtils.js +5 -3
- package/components/apps/inputType.d.ts +34 -6
- package/components/apps/rx.js +2 -1
- package/components/apps/store.d.ts +6 -1
- package/components/apps/types.d.ts +47 -42
- package/components/apps/types.js +1 -1
- package/components/apps/utils.d.ts +6 -5
- package/components/apps/utils.js +63 -95
- package/components/common/button/Button.svelte +12 -5
- package/components/common/button/Button.svelte.d.ts +3 -1
- package/components/common/button/ButtonPopup.svelte +2 -0
- package/components/common/button/ButtonPopup.svelte.d.ts +2 -1
- package/components/common/button/UndoRedo.svelte +32 -0
- package/components/common/button/UndoRedo.svelte.d.ts +20 -0
- package/components/common/button/model.d.ts +2 -2
- package/components/common/button/model.js +21 -6
- package/components/common/confirmationModal/ConfirmationModal.svelte +8 -1
- package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +4 -4
- package/components/common/drawer/Drawer.svelte +13 -5
- package/components/common/drawer/Drawer.svelte.d.ts +3 -1
- package/components/common/drawer/DrawerContent.svelte +0 -1
- package/components/common/fileInput/FileInput.svelte +138 -0
- package/components/common/fileInput/FileInput.svelte.d.ts +29 -0
- package/components/common/fileInput/model.d.ts +1 -0
- package/components/common/fileInput/model.js +1 -0
- package/components/common/index.d.ts +2 -0
- package/components/common/index.js +2 -0
- package/components/common/kbd/Kbd.svelte.d.ts +2 -2
- package/components/common/menu/Menu.svelte +3 -2
- package/components/common/menu/Menu.svelte.d.ts +2 -1
- package/components/common/modal/Modal.svelte +79 -0
- package/components/common/modal/Modal.svelte.d.ts +24 -0
- package/components/common/popup/Popup.svelte +34 -17
- package/components/common/popup/Popup.svelte.d.ts +11 -4
- package/components/common/table/AppRow.svelte +13 -4
- package/components/common/table/AppRow.svelte.d.ts +1 -0
- package/components/common/table/FlowRow.svelte +40 -8
- package/components/common/table/FlowRow.svelte.d.ts +1 -0
- package/components/common/table/LanguageBadge.svelte +10 -4
- package/components/common/table/Row.svelte +1 -1
- package/components/common/table/ScriptRow.svelte +44 -12
- 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 +12 -8
- package/components/common/tabs/Tabs.svelte.d.ts +6 -2
- package/components/flows/CreateActionsFlow.svelte +2 -3
- package/components/flows/FlowEditor.svelte +6 -4
- package/components/flows/common/FlowCardHeader.svelte +4 -1
- package/components/flows/content/BranchPredicateEditor.svelte +13 -12
- 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/FlowInputs.svelte +109 -99
- package/components/flows/content/FlowLoop.svelte +4 -5
- package/components/flows/content/FlowModuleComponent.svelte +26 -13
- 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/FlowRetries.svelte +8 -6
- package/components/flows/content/FlowSchedules.svelte +1 -2
- package/components/flows/content/FlowSettings.svelte +77 -51
- 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 -2
- package/components/flows/flowState.js +1 -3
- package/components/flows/flowStateUtils.d.ts +7 -6
- package/components/flows/flowStateUtils.js +9 -11
- package/components/flows/flowStore.d.ts +5 -3
- package/components/flows/flowStore.js +6 -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 +163 -130
- package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +1 -1
- package/components/flows/map/FlowSettingsItem.svelte +5 -4
- package/components/flows/map/InsertModuleButton.svelte +34 -18
- package/components/flows/map/InsertModuleButton.svelte.d.ts +2 -0
- package/components/flows/map/MapItem.svelte +176 -101
- 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 +17 -11
- package/components/graph/FlowGraph.svelte +247 -164
- package/components/graph/FlowGraph.svelte.d.ts +15 -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/icons/SquareIcon.svelte +9 -0
- package/components/icons/SquareIcon.svelte.d.ts +17 -0
- package/components/icons/index.d.ts +2 -0
- package/components/icons/index.js +2 -0
- package/components/jobs/JobDetail.svelte +40 -5
- package/components/propertyPicker/ObjectViewer.svelte +14 -9
- package/components/propertyPicker/ObjectViewer.svelte.d.ts +1 -0
- package/components/propertyPicker/PropPicker.svelte +8 -1
- package/components/propertyPicker/PropPickerResult.svelte +1 -1
- package/components/random_positive_adjetive.d.ts +1 -0
- package/components/random_positive_adjetive.js +961 -0
- package/components/scriptEditor/LogPanel.svelte +2 -1
- package/components/sidebar/SidebarContent.svelte +1 -1
- package/components/sidebar/UserMenu.svelte +46 -16
- package/components/sidebar/UserMenu.svelte.d.ts +0 -3
- package/components/sidebar/WorkspaceMenu.svelte +3 -1
- package/components/sidebar/settings.d.ts +2 -0
- package/components/sidebar/settings.js +2 -0
- package/consts.d.ts +1 -0
- package/consts.js +1 -0
- package/defaults.d.ts +4 -0
- package/defaults.js +4 -0
- package/gen/core/OpenAPI.js +1 -1
- package/gen/models/CompletedJob.d.ts +1 -0
- package/gen/models/FlowModule.d.ts +0 -1
- package/gen/models/QueuedJob.d.ts +1 -0
- package/gen/models/WorkerPing.d.ts +1 -1
- package/gen/services/FlowService.d.ts +9 -0
- package/gen/services/FlowService.js +15 -0
- package/gen/services/JobService.d.ts +97 -15
- package/gen/services/JobService.js +74 -15
- package/gen/services/ScriptService.d.ts +10 -1
- package/gen/services/ScriptService.js +16 -1
- package/gen/services/VariableService.d.ts +4 -2
- package/gen/services/VariableService.js +8 -2
- package/gen/services/WorkspaceService.d.ts +17 -0
- package/gen/services/WorkspaceService.js +16 -0
- package/history.d.ts +9 -0
- package/history.js +56 -0
- package/infer.js +3 -0
- package/init_scripts/python_failure_module.py +10 -0
- package/init_scripts/python_init_code.py +37 -0
- package/init_scripts/python_init_code_clear.py +5 -0
- package/init_scripts/python_init_code_trigger.py +14 -0
- package/logout.js +2 -1
- package/package.json +661 -522
- package/script_helpers.d.ts +6 -5
- package/script_helpers.js +8 -73
- package/scripts.d.ts +1 -1
- package/scripts.js +8 -1
- package/stores.d.ts +5 -1
- package/stores.js +8 -1
- package/user.d.ts +1 -1
- package/user.js +14 -8
- package/utils.d.ts +10 -5
- package/utils.js +51 -14
- package/components/apps/components/DisplayComponent.svelte +0 -16
- package/components/apps/components/DisplayComponent.svelte.d.ts +0 -20
- package/components/apps/components/dataDisplay/AppHtml.svelte +0 -31
- package/components/apps/components/dateInputs/AppDateInput.svelte +0 -34
- package/components/apps/components/numberInputs/AppNumberInput.svelte +0 -33
- package/components/apps/components/numberInputs/AppSliderInputs.svelte +0 -37
- package/components/apps/components/selectInputs/AppSelect.svelte +0 -47
- package/components/apps/components/textInputs/AppTextInput.svelte +0 -31
- package/components/apps/editor/ComponentEditor.svelte +0 -145
- package/components/apps/editor/TablePanel.svelte +0 -17
- package/components/apps/editor/TablePanel.svelte.d.ts +0 -17
- package/components/apps/editor/componentsPanel/data.d.ts +0 -3
- package/components/apps/editor/componentsPanel/data.js +0 -499
- package/components/apps/editorUtils.d.ts +0 -1
- package/components/apps/editorUtils.js +0 -292
- 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
- /package/components/apps/components/{table → display/table}/tableOptions.d.ts +0 -0
- /package/components/apps/components/{table → display/table}/tableOptions.js +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
<script>const pkStringGenerator = () => (Math.random() + 1).toString(36).substring(7);
|
|
2
|
+
import { createStoreEmpty, populateSvelvetStoreFromUserInput } from '../../store/controllers/storeApi';
|
|
3
|
+
import { afterUpdate, onMount } from 'svelte';
|
|
4
|
+
import GraphView from './GraphView.svelte';
|
|
5
|
+
import { sanitizeCanvasOptions, sanitizeUserNodesAndEdges } from '../controllers/middleware';
|
|
6
|
+
export let nodes; // TODO: update type to make possible user id being a number
|
|
7
|
+
export let edges; // TODO: update type to make possible user id being a number
|
|
8
|
+
export let bgColor = '#ffffff'; // this is used to set the background color of the the Svelvet canvas
|
|
9
|
+
export let minimap = false;
|
|
10
|
+
export let width = 600;
|
|
11
|
+
export let height = 600;
|
|
12
|
+
export let background = true;
|
|
13
|
+
export let movement = true;
|
|
14
|
+
export let canvasId = pkStringGenerator();
|
|
15
|
+
export let snap = false;
|
|
16
|
+
export let snapTo = 30;
|
|
17
|
+
export let nodeCreate = false;
|
|
18
|
+
export let initialZoom = 3;
|
|
19
|
+
export let initialLocation = { x: 0, y: 0 };
|
|
20
|
+
export let boundary = false;
|
|
21
|
+
export let collapsible = false;
|
|
22
|
+
export let shareable = false; // used for "importExport" feature
|
|
23
|
+
export let locked = false; // if true, node movement is disabled
|
|
24
|
+
export let editable = false;
|
|
25
|
+
export let resizable = true;
|
|
26
|
+
export let highlightEdges = true;
|
|
27
|
+
export let scroll = false;
|
|
28
|
+
// generates a unique string for each svelvet component's unique store instance
|
|
29
|
+
// creates a store that uses the unique sting as the key to create and look up the corresponding store
|
|
30
|
+
// this way we can have multiple Svelvet Components on the same page and prevent overlap of information
|
|
31
|
+
const store = createStoreEmpty(canvasId);
|
|
32
|
+
// stores (state) within stores, so that we cannot access values from everywhere
|
|
33
|
+
// const { widthStore, heightStore, nodesStore, derivedEdges } = svelvetStore;
|
|
34
|
+
let error = '';
|
|
35
|
+
// sets the state of the store to the values passed in from the Svelvet Component on initial render
|
|
36
|
+
onMount(() => {
|
|
37
|
+
try {
|
|
38
|
+
// sanitize user input
|
|
39
|
+
let output = sanitizeUserNodesAndEdges(nodes, edges);
|
|
40
|
+
const userNodes = output['userNodes'];
|
|
41
|
+
const userEdges = output['userEdges'];
|
|
42
|
+
// set canvas related stores. you need to do this before setting node/edge related stores because
|
|
43
|
+
// initializing nodes/edges might read relevant options from the store.
|
|
44
|
+
store.widthStore.set(width);
|
|
45
|
+
store.heightStore.set(height);
|
|
46
|
+
store.backgroundStore.set(background);
|
|
47
|
+
store.movementStore.set(movement);
|
|
48
|
+
const optionsObj = { snap, snapTo }; // TODO: rename to snap
|
|
49
|
+
store.options.set(optionsObj); //
|
|
50
|
+
store.nodeCreate.set(nodeCreate);
|
|
51
|
+
store.boundary.set(boundary);
|
|
52
|
+
store.collapsibleOption.set(collapsible);
|
|
53
|
+
store.lockedOption.set(locked);
|
|
54
|
+
store.editableOption.set(editable);
|
|
55
|
+
store.resizableOption.set(resizable);
|
|
56
|
+
store.highlightEdgesOption.set(highlightEdges);
|
|
57
|
+
// make sure that all canvas options are compatible
|
|
58
|
+
sanitizeCanvasOptions(store);
|
|
59
|
+
// set node/edge related stores
|
|
60
|
+
populateSvelvetStoreFromUserInput(canvasId, userNodes, userEdges);
|
|
61
|
+
error = '';
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
error = 'There was an error displaying the flow. Please report the error.' + e.message;
|
|
65
|
+
console.error(e);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
// // enables data reactivity. TODO: this needs to be added back in
|
|
69
|
+
// Probably need to use findStore, not create store
|
|
70
|
+
afterUpdate(() => {
|
|
71
|
+
try {
|
|
72
|
+
// sanitize user input
|
|
73
|
+
let output = sanitizeUserNodesAndEdges(nodes, edges);
|
|
74
|
+
const userNodes = output['userNodes'];
|
|
75
|
+
const userEdges = output['userEdges'];
|
|
76
|
+
// set canvas related stores. you need to do this before setting node/edge related stores because
|
|
77
|
+
// initializing nodes/edges might read relevant options from the store.
|
|
78
|
+
store.widthStore.set(width);
|
|
79
|
+
store.heightStore.set(height);
|
|
80
|
+
store.backgroundStore.set(background);
|
|
81
|
+
store.movementStore.set(movement);
|
|
82
|
+
const optionsObj = { snap, snapTo }; // TODO: rename to snap
|
|
83
|
+
store.options.set(optionsObj); //
|
|
84
|
+
store.nodeCreate.set(nodeCreate);
|
|
85
|
+
store.boundary.set(boundary);
|
|
86
|
+
store.collapsibleOption.set(collapsible);
|
|
87
|
+
store.lockedOption.set(locked);
|
|
88
|
+
store.editableOption.set(editable);
|
|
89
|
+
store.resizableOption.set(resizable);
|
|
90
|
+
store.highlightEdgesOption.set(highlightEdges);
|
|
91
|
+
// make sure that all canvas options are compatible
|
|
92
|
+
sanitizeCanvasOptions(store);
|
|
93
|
+
// set node/edge related stores
|
|
94
|
+
populateSvelvetStoreFromUserInput(canvasId, userNodes, userEdges);
|
|
95
|
+
error = '';
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
error = 'There was an error displaying the flow. Please report the error.' + e.message;
|
|
99
|
+
console.error(e);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
</script>
|
|
103
|
+
|
|
104
|
+
<!-- Now that a store has been created from the initial nodes and initial edges we drill props from the store down to the D3 GraphView along with the unique key -->
|
|
105
|
+
<div
|
|
106
|
+
class="Svelvet"
|
|
107
|
+
style={`width: ${width}px; height: ${height}px; background-color: ${bgColor};`}
|
|
108
|
+
>
|
|
109
|
+
{#if error != ''}
|
|
110
|
+
<div class="error text-red-600 center-center p-4">{error}</div>
|
|
111
|
+
{:else}
|
|
112
|
+
<GraphView
|
|
113
|
+
{scroll}
|
|
114
|
+
{canvasId}
|
|
115
|
+
{width}
|
|
116
|
+
{height}
|
|
117
|
+
{initialLocation}
|
|
118
|
+
{initialZoom}
|
|
119
|
+
{boundary}
|
|
120
|
+
{minimap}
|
|
121
|
+
/>
|
|
122
|
+
{/if}
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
<style>
|
|
126
|
+
.Svelvet {
|
|
127
|
+
position: relative;
|
|
128
|
+
overflow: hidden;
|
|
129
|
+
display: grid;
|
|
130
|
+
font-family: 'Segoe UI', sans-serif;
|
|
131
|
+
}</style>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { UserEdgeType, UserNodeType } from '../../types/types';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
nodes: UserNodeType[];
|
|
6
|
+
edges: UserEdgeType[];
|
|
7
|
+
bgColor?: string | undefined;
|
|
8
|
+
minimap?: boolean | undefined;
|
|
9
|
+
width?: number | undefined;
|
|
10
|
+
height?: number | undefined;
|
|
11
|
+
background?: boolean | undefined;
|
|
12
|
+
movement?: boolean | undefined;
|
|
13
|
+
canvasId?: string | undefined;
|
|
14
|
+
snap?: boolean | undefined;
|
|
15
|
+
snapTo?: number | undefined;
|
|
16
|
+
nodeCreate?: boolean | undefined;
|
|
17
|
+
initialZoom?: number | undefined;
|
|
18
|
+
initialLocation?: {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
} | undefined;
|
|
22
|
+
boundary?: boolean | undefined;
|
|
23
|
+
collapsible?: boolean | undefined;
|
|
24
|
+
shareable?: boolean | undefined;
|
|
25
|
+
locked?: boolean | undefined;
|
|
26
|
+
editable?: boolean | undefined;
|
|
27
|
+
resizable?: boolean | undefined;
|
|
28
|
+
highlightEdges?: boolean | undefined;
|
|
29
|
+
scroll?: boolean | undefined;
|
|
30
|
+
};
|
|
31
|
+
events: {
|
|
32
|
+
[evt: string]: CustomEvent<any>;
|
|
33
|
+
};
|
|
34
|
+
slots: {};
|
|
35
|
+
};
|
|
36
|
+
export type SvelvetProps = typeof __propDef.props;
|
|
37
|
+
export type SvelvetEvents = typeof __propDef.events;
|
|
38
|
+
export type SvelvetSlots = typeof __propDef.slots;
|
|
39
|
+
export default class Svelvet extends SvelteComponentTyped<SvelvetProps, SvelvetEvents, SvelvetSlots> {
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Required for "custom css" feature
|
|
2
|
+
// WHAT: For a given node with a user-defined classname, see if there are any css properties for height and width
|
|
3
|
+
// Get that height and width and set properties in node store. This is necessary for
|
|
4
|
+
export const forceCssHeightAndWidth = (store, node) => {
|
|
5
|
+
let width, height, innerText;
|
|
6
|
+
// Look through each CSS rule to find the one the user defined
|
|
7
|
+
for (let i = 0; i < document.styleSheets.length; i++) {
|
|
8
|
+
const styleSheet = document.styleSheets[i];
|
|
9
|
+
const styleRules = styleSheet.cssRules;
|
|
10
|
+
for (let j = 0; j < styleRules.length; j++) {
|
|
11
|
+
const rule = styleRules[j];
|
|
12
|
+
// this is necessary to get rid of typescript warning for rule.selectorText
|
|
13
|
+
if (!(rule instanceof CSSStyleRule))
|
|
14
|
+
continue;
|
|
15
|
+
if (rule.selectorText === `.${node.className}`) {
|
|
16
|
+
const initialText = rule.cssText; // getting the full text of the CSS rule
|
|
17
|
+
const i = initialText.indexOf('{'); // finding index of first bracket
|
|
18
|
+
innerText = initialText.substring(i + 1, initialText.length - 1); // extracting the CSS to insert into inline style
|
|
19
|
+
// Adjusting the width and height if they are set via the custom class
|
|
20
|
+
const arr = innerText.split(' ');
|
|
21
|
+
arr.forEach((str, i) => {
|
|
22
|
+
if (str === 'width:') {
|
|
23
|
+
width = str.concat(arr[i + 1]); // go through the array and join width and the number
|
|
24
|
+
const w = parseInt(arr[i + 1]); // getting the number for the width
|
|
25
|
+
width = w;
|
|
26
|
+
}
|
|
27
|
+
if (str === 'height:') {
|
|
28
|
+
height = str.concat(arr[i + 1]); // same as with the width
|
|
29
|
+
const h = parseInt(arr[i + 1]);
|
|
30
|
+
height = h;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// update the width/height of the node
|
|
37
|
+
store.nodesStore.update((nodes) => {
|
|
38
|
+
if (width !== undefined)
|
|
39
|
+
nodes[node.id].width = width;
|
|
40
|
+
if (height !== undefined)
|
|
41
|
+
nodes[node.id].height = height;
|
|
42
|
+
return { ...nodes };
|
|
43
|
+
});
|
|
44
|
+
// move the node a bit to force update to anchors, potential anchors
|
|
45
|
+
node.setPositionFromMovement(0, 0);
|
|
46
|
+
// update the position of the resize node. TODO: this should be refactored so that it cascades from movement
|
|
47
|
+
store.resizeNodesStore.update((resizeNodes) => {
|
|
48
|
+
for (let resizeNode of Object.values(resizeNodes)) {
|
|
49
|
+
if (resizeNode.nodeId === node.id) {
|
|
50
|
+
// set resizeNode position to bottom left corner of Node
|
|
51
|
+
resizeNode.positionX = node.positionX + node.width;
|
|
52
|
+
resizeNode.positionY = node.positionY + node.height;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return { ...resizeNodes };
|
|
56
|
+
});
|
|
57
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ZoomBehavior } from 'd3-zoom';
|
|
2
|
+
export declare function zoomInit(d3: any, canvasId: any, d3Zoom: any, d3Translate: any, initialLocation: any, initialZoom: any, d3Scale: any): any;
|
|
3
|
+
export declare function determineD3Instance(boundary: any, d3: {
|
|
4
|
+
zoom: () => ZoomBehavior<any, any>;
|
|
5
|
+
}, nodeSelected: any, width: any, height: any, movementStore: any, backgroundStore: any, gridSize: any, dotSize: any, canvasId: any, d3Scale: any, handleZoom: any): ZoomBehavior<any, any>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { get } from 'svelte/store';
|
|
2
|
+
export function zoomInit(d3, canvasId, d3Zoom, d3Translate, initialLocation, initialZoom, d3Scale) {
|
|
3
|
+
//set default zoom logic
|
|
4
|
+
d3.select(`.Edges-${canvasId}`)
|
|
5
|
+
//makes sure translation is default at center coordinates
|
|
6
|
+
.transition()
|
|
7
|
+
.duration(0)
|
|
8
|
+
.call(d3Zoom.translateTo, 0, 0)
|
|
9
|
+
//moves camera to coordinates
|
|
10
|
+
.transition()
|
|
11
|
+
.duration(0)
|
|
12
|
+
.call(d3Zoom.translateTo, initialLocation.x / initialZoom, initialLocation.y / initialZoom)
|
|
13
|
+
// zooms in on selected point
|
|
14
|
+
.transition()
|
|
15
|
+
.duration(0)
|
|
16
|
+
.call(d3Zoom.scaleTo, initialZoom.toFixed(2));
|
|
17
|
+
// updates d3Translate with d3 object with x, y, and k values to be sent down to the minimap to be further calculated further
|
|
18
|
+
d3Translate = d3.zoomIdentity
|
|
19
|
+
.translate(initialLocation.x, initialLocation.y)
|
|
20
|
+
.scale(initialZoom.toFixed(2));
|
|
21
|
+
d3.select(`.Nodes-${canvasId}`)
|
|
22
|
+
.transition()
|
|
23
|
+
.duration(0)
|
|
24
|
+
.call(d3Zoom.translateTo, 0, 0)
|
|
25
|
+
.transition()
|
|
26
|
+
.duration(0)
|
|
27
|
+
.call(d3Zoom.translateTo, initialLocation.x / initialZoom, initialLocation.y / initialZoom)
|
|
28
|
+
.transition()
|
|
29
|
+
.duration(0)
|
|
30
|
+
.call(d3Zoom.scaleTo, initialZoom.toFixed(2));
|
|
31
|
+
// sets D3 scale to current k of object
|
|
32
|
+
d3Scale.set(d3.zoomTransform(d3.select(`.Nodes-${canvasId}`)).k);
|
|
33
|
+
return d3Translate;
|
|
34
|
+
}
|
|
35
|
+
// create d3 instance conditionally based on boundary prop
|
|
36
|
+
export function determineD3Instance(boundary, d3, nodeSelected, width, height, movementStore, backgroundStore, gridSize, dotSize, canvasId, d3Scale, handleZoom) {
|
|
37
|
+
if (boundary) {
|
|
38
|
+
return d3
|
|
39
|
+
.zoom()
|
|
40
|
+
.filter(() => !get(nodeSelected))
|
|
41
|
+
.scaleExtent([0.4, 4]) // limits for zooming in/out
|
|
42
|
+
.translateExtent([
|
|
43
|
+
[0, 0],
|
|
44
|
+
[boundary.x, boundary.y],
|
|
45
|
+
]) // world extent
|
|
46
|
+
.extent([
|
|
47
|
+
[0, 0],
|
|
48
|
+
[width, height],
|
|
49
|
+
])
|
|
50
|
+
.on('zoom', handleZoom);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
return d3
|
|
54
|
+
.zoom()
|
|
55
|
+
.filter(() => !get(nodeSelected))
|
|
56
|
+
.scaleExtent([0.4, 2])
|
|
57
|
+
.on('zoom', handleZoom);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function d3ZoomCreator(nodeSelected: any, movementStore: any, backgroundStore: any, canvasId: any, gridSize: any, dotSize: any, d3Scale: any, d3: any): any;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { writable, derived, get, readable } from 'svelte/store';
|
|
2
|
+
export function d3ZoomCreator(nodeSelected, movementStore, backgroundStore, canvasId, gridSize, dotSize, d3Scale, d3) {
|
|
3
|
+
// TODO: Update d3Zoom type (refer to d3Zoom docs)
|
|
4
|
+
let d3Zoom = d3
|
|
5
|
+
.zoom()
|
|
6
|
+
.filter(() => !get(nodeSelected))
|
|
7
|
+
.scaleExtent([0.4, 2])
|
|
8
|
+
.on('zoom', handleZoom);
|
|
9
|
+
return d3Zoom;
|
|
10
|
+
// function to handle zoom events - arguments: d3ZoomEvent
|
|
11
|
+
function handleZoom(e) {
|
|
12
|
+
if (!get(movementStore))
|
|
13
|
+
return;
|
|
14
|
+
//add a store that contains the current value of the d3-zoom's scale to be used in onMouseMove function
|
|
15
|
+
d3Scale.set(e.transform.k);
|
|
16
|
+
// should not run d3.select below if backgroundStore is false
|
|
17
|
+
if (get(backgroundStore)) {
|
|
18
|
+
d3.select(`#background-${canvasId}`)
|
|
19
|
+
.attr('x', e.transform.x)
|
|
20
|
+
.attr('y', e.transform.y)
|
|
21
|
+
.attr('width', gridSize * e.transform.k)
|
|
22
|
+
.attr('height', gridSize * e.transform.k)
|
|
23
|
+
.selectAll('#dot')
|
|
24
|
+
.attr('x', (gridSize * e.transform.k) / 2 - dotSize / 2)
|
|
25
|
+
.attr('y', (gridSize * e.transform.k) / 2 - dotSize / 2)
|
|
26
|
+
.attr('opacity', Math.min(e.transform.k, 1));
|
|
27
|
+
}
|
|
28
|
+
// transform 'g' SVG elements (edge, edge text, edge anchor)
|
|
29
|
+
d3.select(`.Edges-${canvasId} g`).attr('transform', e.transform);
|
|
30
|
+
// transform div elements (nodes)
|
|
31
|
+
let transform = d3.zoomTransform(this);
|
|
32
|
+
// selects and transforms all node divs from class 'Node' and performs transformation
|
|
33
|
+
d3.select(`.Node-${canvasId}`)
|
|
34
|
+
.style('transform', 'translate(' +
|
|
35
|
+
transform.x +
|
|
36
|
+
'px,' +
|
|
37
|
+
transform.y +
|
|
38
|
+
'px) scale(' +
|
|
39
|
+
transform.k +
|
|
40
|
+
')')
|
|
41
|
+
.style('transform-origin', '0 0');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
This article documents the changes from Svelvet5 to Svelvet6. It is for internal use.
|
|
4
|
+
|
|
5
|
+
## custom-nodes
|
|
6
|
+
|
|
7
|
+
https://www.svelvet.io/docs/custom-nodes/
|
|
8
|
+
|
|
9
|
+
Anchor points no longer display on nodes in isolation. This is because anchor points are no longer tied to the node object.
|
|
10
|
+
|
|
11
|
+
<img src="./images/custom-nodes-before.png" width="150" height="150">
|
|
12
|
+
<img src="./images/custom-nodes-after.png" width="150" height="150">
|
|
13
|
+
|
|
14
|
+
## custom-edges
|
|
15
|
+
|
|
16
|
+
https://www.svelvet.io/docs/custom-edges/
|
|
17
|
+
|
|
18
|
+
Edges now use adaptive anchors by default. Previously, source/target anchors were placed on the top/bottom of the node by default. It looks nice in the specific causes when target nodes are located below source nodes, but in the general case there will be intersecting edges.
|
|
19
|
+
|
|
20
|
+
<img src="./images/custom-edges-before.png" width="150" height="150">
|
|
21
|
+
<img src="./images/custom-edges-after.png" width="150" height="150">
|
|
22
|
+
|
|
23
|
+
## panning and zooming
|
|
24
|
+
|
|
25
|
+
https://www.svelvet.io/docs/pan-and-zoom/
|
|
26
|
+
|
|
27
|
+
Panning and zooming is functional. Removed option to stop panning, lock nodes due to store pollution. This is simple to add back if it is a community requested feature.
|
|
28
|
+
|
|
29
|
+
TODO: need to update this text in docs:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
play around with the flow diagram below! If you wish to stop panning, set the movement prop to false. If you wish to stop node dragging, pass in the locked prop.
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## usage with typescript
|
|
36
|
+
|
|
37
|
+
https://www.svelvet.io/docs/typescript/
|
|
38
|
+
|
|
39
|
+
Type names changed from Node, Edge ,to UserNodeType, UserEdgeType. The main reason for this is:
|
|
40
|
+
|
|
41
|
+
- The internal state of Svelvet is stored in objects Node, Edge which are different from the specifications passed in by users (hereafter referred to as UserNode, UserEdge). For example, UserNodes have "sourcePosition" and "targetPosition" parameters. However, the internal node project does not have "sourcePosition" and "targetPosition"; instead that functionality has been abstracted to a separate Anchor class. This promotes greater code modularity.
|
|
42
|
+
|
|
43
|
+
## CSS-Background
|
|
44
|
+
|
|
45
|
+
https://www.svelvet.io/docs/CSS-Background/
|
|
46
|
+
|
|
47
|
+
<img src="./images/css-background-before.png" width="150" height="150">
|
|
48
|
+
<img src="./images/css-background-after.png" width="150" height="150">
|
|
49
|
+
|
|
50
|
+
No visual changes. Moved background color out of store in order to minimize store pollution. This means that background color will not be serialized using the import-export-store feature. We talk more about this later in import-export-store section.
|
|
51
|
+
|
|
52
|
+
## node-grouping
|
|
53
|
+
|
|
54
|
+
https://www.svelvet.io/docs/node-grouping/
|
|
55
|
+
|
|
56
|
+
No change in functionality.
|
|
57
|
+
|
|
58
|
+
## snap-to-grid
|
|
59
|
+
|
|
60
|
+
https://www.svelvet.io/docs/snap-to-grid/
|
|
61
|
+
http://localhost:3000/compatability-8-snap-to-grid/
|
|
62
|
+
|
|
63
|
+
No change in functionality
|
|
64
|
+
|
|
65
|
+
## html-docs
|
|
66
|
+
|
|
67
|
+
https://www.svelvet.io/docs/snap-to-grid/
|
|
68
|
+
http://localhost:3000/compatability-8-snap-to-grid/
|
|
69
|
+
|
|
70
|
+
<img src="./images/html-docs-before.png" width="150" height="150">
|
|
71
|
+
<img src="./images/html-docs-after.png" width="150" height="150">
|
|
72
|
+
|
|
73
|
+
no change in functionality
|
|
74
|
+
|
|
75
|
+
## node-create
|
|
76
|
+
|
|
77
|
+
https://www.svelvet.io/docs/Interactive-Nodes/
|
|
78
|
+
http://localhost:3000/compatibility-10-node-create/
|
|
79
|
+
|
|
80
|
+
<img src="./images/node-create-before.png" width="150" height="150">
|
|
81
|
+
<img src="./images/node-create-after.png" width="150" height="150">
|
|
82
|
+
|
|
83
|
+
- Previously, the new node inherits from the old node. Now, the new node is created with default parameters. Note that we have functionality to edit nodes.
|
|
84
|
+
- edge creation works the same as before (not shown)
|
|
85
|
+
- there are now 4 potential anchor points, rather than one source / on target anchor point.
|
|
86
|
+
|
|
87
|
+
## custom-svelte-components
|
|
88
|
+
|
|
89
|
+
https://www.svelvet.io/docs/Custom-Svelte/
|
|
90
|
+
http://localhost:3000/compatibility-11-custom-svelte-components/
|
|
91
|
+
|
|
92
|
+
<img src="./images/custom-svelte-components-before.png" width="150" height="150">
|
|
93
|
+
<img src="./images/custom-svelte-components-after.png" width="150" height="150">
|
|
94
|
+
|
|
95
|
+
Same functionality as before. The reason why it looks different is because I created my own dummy Svelte component to test.
|
|
96
|
+
|
|
97
|
+
## Minimap
|
|
98
|
+
|
|
99
|
+
http://localhost:3000/compatibility-12-minimap/
|
|
100
|
+
https://www.svelvet.io/docs/Minimap/
|
|
101
|
+
|
|
102
|
+
Same functionality as before. It looks like there is a big with HTML feature (unrelated to minimap)
|
|
103
|
+
|
|
104
|
+
<img src="./images/minimap-before.png" width="150" height="150">
|
|
105
|
+
<img src="./images/minimap-after.png" width="150" height="150">
|
|
106
|
+
|
|
107
|
+
## Initial zoom and location
|
|
108
|
+
|
|
109
|
+
Same functionality as Svelvet5. It appears the center of the canvas is 0,0
|
|
110
|
+
|
|
111
|
+
## node classes
|
|
112
|
+
|
|
113
|
+
<img src="./images/node-classes-before.png" width="150" height="150">
|
|
114
|
+
<img src="./images/node-classes-after.png" width="150" height="150">
|
|
115
|
+
|
|
116
|
+
You need to put !important in the CSS
|
|
117
|
+
|
|
118
|
+
## ImportDiagrams
|
|
119
|
+
|
|
120
|
+
https://www.svelvet.io/docs/importDiagrams/
|
|
121
|
+
http://localhost:3000/featureImportExport/
|
|
122
|
+
|
|
123
|
+
Feature works as expected. Note that previous version of Svelvet did not serialize callbacks (there is no general way to do this since callbacks can involve closures). We do not do serialize callbacks in Svelvet6; this includes anchors which are reset to adaptive upon serialization.
|
|
124
|
+
|
|
125
|
+
As before, any canvas-wide parameters (such as nodeCreate, backgroundColor, etc.) will not be serialized.
|
|
126
|
+
|
|
127
|
+
This feature is fragile since there is no guarantee that it will work with new features involving nodes and edges. In order to future-proof this feature, it would be best to specify that import/export of diagrams only serializes certain parameters.
|
|
128
|
+
|
|
129
|
+
## Diagram Boundary
|
|
130
|
+
|
|
131
|
+
http://localhost:3000/compatibility-15-diagramBoundary/
|
|
132
|
+
https://www.svelvet.io/docs/boundary/
|
|
133
|
+
|
|
134
|
+
Feature works as expected
|
|
135
|
+
|
|
136
|
+
## Iteractive Editable nodes
|
|
137
|
+
|
|
138
|
+
http://localhost:3000/compatibility-16-nodeEdit/
|
|
139
|
+
https://www.svelvet.io/docs/editNodes/
|
|
140
|
+
|
|
141
|
+
Feature works as expected. NodeEdit is now active by default. This is to reduce store pollution. In addition, node edit chaning width/height of nodes has been removed because this functionality is duplicated by resizableNodes
|
|
142
|
+
|
|
143
|
+
## Deletable nodes
|
|
144
|
+
|
|
145
|
+
This feature has been removed to reduce feature bloat. Its functionality is duplicated by Interactive Editable nodes feature.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Design Patterns
|
|
2
|
+
|
|
3
|
+
Svelvet was originally written as a monolith. This increased development speed but made the code fragile. Teams struggled to implement simple features such as deleting nodes and resizing nodes. One major goal of Svelvet6 was to re-design Svelvet with more robust design patterns. This document serves as an opinionated guide towards how Svelvet should be structured.
|
|
4
|
+
|
|
5
|
+
## Each Svelvet feature should have its own folder
|
|
6
|
+
|
|
7
|
+
Svelvet has a lot of features that interact with each other. In order to encourage modularity, each feature should be given its own folder. For example, code related to the "resizableNodes" feature can be found in the folder `$lib/resizableNodes`.
|
|
8
|
+
|
|
9
|
+
## Svelvet should follow an MVC Architecture
|
|
10
|
+
|
|
11
|
+
While Svelvet is a frontend libray, it has components that interact in a complex way. As such, code should adhere to an MVC architecture to increase modularity. One useful way to think about MVC is drawing an analogy to frontend/backend/database. The frontend is the "view" of MVC, the backend is the "controller" of MVC, and the database is the "model" of MVC. To that end, within each feature folder there should be four folders: models, views, controllers, types.
|
|
12
|
+
|
|
13
|
+
- models: holds code related to the internal state of Svelvet
|
|
14
|
+
- controllers: holds code used to interact with the Svelvet models. Ideally, all interaction with Svelvet models/stores should take place through controllers.
|
|
15
|
+
- views: holds code used to visualize the Svelvet state. Ideally, views should not modify models directly.
|
|
16
|
+
- types: holds types/interfaces for Typescript. This is unrelated to MVC.
|
|
17
|
+
|
|
18
|
+
More comments: Explicitly labeling folders as model/view/controller increases verbosity and most projects do not do this. We feel that this increased verbosity is worth the tradeoff of reminding developers they should be following establshed design patterns when coding. If you are considering removing explicit model/view/controller folders, consider that Svelvet is an OSP where developers may have little to no prior coding experience; increased verbosity may be helpful in guiding developers towards established design principles.
|
|
19
|
+
|
|
20
|
+
## Svelvet's internal state should be an object-relational data structure
|
|
21
|
+
|
|
22
|
+
Too Long Didn't Read: The main takeaway can be summed up as: make the Svelvet store look more like PostgreSQL and less like mongoDB.
|
|
23
|
+
|
|
24
|
+
### A longer explanation
|
|
25
|
+
|
|
26
|
+
The store holds Svelvet's internal state. We urge future developers to structure the store as a relational object rather than an unstructured object. To give an analogy, if Svelvet was a full-stack app with a backend and database, you should use a postgreSQL instead of mongoDB to store the internal state of Svelvet because nodes/edges are inherently relational. We give an example of a bad design pattern and a good design pattern below.
|
|
27
|
+
|
|
28
|
+
Suppose you want to implement a "resizableNodes" feature, where users can resize nodes by dragging a node corner. One (bad) way to do this is by could do this by hacking in an extra div on the Node component representing a draggable control point, then hacking in a "resizeNode" method on the Node object so that when the control point is dragged the node is resized. While it may be easier to throw everything on an unstructured Node object, this is bad for modularity. As more and more features get added in, the Node object becomes bloated, difficult to read, and difficult to debug.
|
|
29
|
+
|
|
30
|
+
The better way to do this is to create a brand new resizableNodes model. This model should hold `nodeId` (a foreign key to a node object), `positionX` (its x-position), and `positionY` (its y-position). This model should also have a method `setPosition` that sets its x,y position, but also sets the width/height of the associated node defined by `nodeId`. Note the similarity of the process described above to adding extra data to a SQL database; a big advantage of SQL is that it is easy to add new relational data by creating a brand new table and linking with a foreign key.
|
|
31
|
+
|
|
32
|
+
By creating new objects/tables whenever adding new features, you make the code more readable, more modular, and more testable.
|
|
33
|
+
|
|
34
|
+
### Foreign keys
|
|
35
|
+
|
|
36
|
+
One question you may come up with when adding new tables is how to structure foreign keys. In our resizableNodes example, we placed a foreign key `nodeId` on our ResizableNode object/table. Alternatively, we could have placed a foreign key `ResizableNodeId` on our Node object/table. How do we choose between these two alternatives (or maybe we could even do two foreign keys)?
|
|
37
|
+
|
|
38
|
+
You can make the decision on foreign keys based on your component heirarchy. A Node can exist without functionality to resize itself, but a ResizableNode should not exist if its parent Node does not exist. Therefore, you should place a `nodeId` foreign key on ResizableNode.
|
|
39
|
+
|
|
40
|
+
This decision has the following advantages:
|
|
41
|
+
|
|
42
|
+
- Increased readability: When developers are reading the Node class definition, they are not overwhelmed by all the different Svelvet features. On the other hand, when developers are reading the ResizableNode class definition, they should realize that ResizableNodes are children of Nodes.
|
|
43
|
+
- Increased modularity: You can remove a ResizableNode without disturbing core Node functionality.
|
|
44
|
+
- Easy deletes: Previous teams struggled with implementing delete functionality. When you think about a SQL database, deleting rows is very simple. You simply delete the row, then specify cascade to delete other rows that reference the primary key of the row you deleted. Keeping a disciplined approach when structuring foreign keys makes the entity hierarchies clear, and makes operations such as delete easy to implement.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Documentation
|
|
2
|
+
|
|
3
|
+
- Documentation should be written assuming the developer working on Svelvet has coding experience equivalent to six weeks of bootcamp.
|
|
4
|
+
- If you write documents in tsDoc format, you can use TypeDoc to generate documentation automatically. For instructions on how to use TypeDoc, see Tutorials.md
|
|
5
|
+
- Write READMEs for every feature so that future teams can understand how they work. Put your email down if you want to be a resource for future teams.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# README
|
|
2
|
+
|
|
3
|
+
This README provides suggestions to developers working on Svelvet.
|
|
4
|
+
|
|
5
|
+
## What is Svelvet?
|
|
6
|
+
|
|
7
|
+
Svelvet is a frontend library that allows users to programmatically create graph diagrams. Graphs are composed of nodes and edges; each edge connects two nodes. There are two main challenges when working with Svelvet: (1) nodes and edges interact in complex ways, making new features difficult to implement without interfering with old features, and (2) Svelvet has an active userbase, making breaking changes undesirable.
|
|
8
|
+
|
|
9
|
+
## Things to think about as a Svelvet developer
|
|
10
|
+
|
|
11
|
+
- Svelvet teams have 3.5 weeks to iterate on the project, less if you consider time spent on marketing/deployment. It is important for code to be readable, otherwise future teams will be unable to understand the codebase within a reasonable timeframe.
|
|
12
|
+
- It is important to write documentation that is easy understand. Write comments/documentation assuming that developers have ~6 weeks of prior bootcamp experience.
|
|
13
|
+
- Writing non-modular code with zero tests and zero documentation increases technical debt and puts future teams in a bad place. Accumulated technical debt can kill projects.
|
|
14
|
+
- Svelvet has an active userbase. When possible, breaking changes should be avoided. However, if a breaking change must occur, it is better that it happen sooner rather than later.
|
|
15
|
+
|
|
16
|
+
## Suggestions
|
|
17
|
+
|
|
18
|
+
- Write modular code, separated by feature. For suggestions, see `./DESIGN_PATTERNS.md`
|
|
19
|
+
|
|
20
|
+
- Write tests. Svelvet components interact with each other in complex ways, making it difficult to predict whether changes will break Svelvet without tests.
|
|
21
|
+
|
|
22
|
+
- Writing tests and documentation is good for your resume. A long list of features by itself makes for poor resume; mentioning testing, documentation, and specific technologies used to implement specific features make for a stronger resume.
|
|
23
|
+
|
|
24
|
+
- Don't leave typescript warnings unaddressed. This makes it so much easier to debug.
|
|
25
|
+
|
|
26
|
+
## Where to start
|
|
27
|
+
|
|
28
|
+
Here is one way to start understanding the Svelvet codebase
|
|
29
|
+
|
|
30
|
+
(1) Read the Node class (`$lib/nodes/models/Node.ts`)
|
|
31
|
+
(2) Create a new branch, delete all features except for nodes, containers, and store, then try to get Svelvet to running only rendering nodes to the screen. You can test Svelvet using routes such as `testingplayground` at `http://localhost:3000/testingplayground`.
|
|
32
|
+
(3) Try to refactor Node.ts. You may notice that Node.ts has 16 fields, when really only six of them are important (id, canvasId, positionX, positionY, widthX, widthY). Create a new table `NodeAttributes` that links to Node via foreign key, move all attributes (bgColor, textColor, etc) to this new table and get Node rendering again.
|
|
33
|
+
(4) After understanding how Node works, add back the "edges" folder. Try to get Svelvet working rendering only nodes and edges to the screen.
|
|
34
|
+
(5) Node / Edge / Anchor form the core tables of Svelvet. All other feature build on top of these core tables.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
## custom node functionality should be refactored into its own table.''
|
|
2
|
+
|
|
3
|
+
## tay10alan60@gmail.com - minimap, d3, node deletion, interactiveNodes
|
|
4
|
+
|
|
5
|
+
## dillan - customSvelete components, deletable nodes, node classes
|
|
6
|
+
|
|
7
|
+
## Minimap 75 boundless, 200 bounded
|
|
8
|
+
|
|
9
|
+
## New team:
|
|
10
|
+
|
|
11
|
+
- split up the website and the svelvet npm package
|
|
12
|
+
- continue store refactoring
|
|
13
|
+
- refactor store dispatch into flux architecture
|
|
14
|
+
- testing - 1 full iteration
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Tutorials
|
|
2
|
+
|
|
3
|
+
This file contains instructions on how to do useful things such as generating developer documentation, publishing to npm, etc.
|
|
4
|
+
|
|
5
|
+
## TypeDoc
|
|
6
|
+
|
|
7
|
+
You may notice TSDoc comments throughout our code. These TSDoc comments can be converted into documentation using TypeDoc:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
npx typedoc --entryPointStrategy expand src/lib
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
This command will create documentation in root folder `./docs`.
|
|
14
|
+
|
|
15
|
+
## Publishing to npm
|
|
16
|
+
|
|
17
|
+
- create an account on npm.js. You can skip this step if you already have an account
|
|
18
|
+
- log in with `$ npm login`
|
|
19
|
+
- Within the `src/lib` directory, type `npm version patch` to increment version number. Or if you want a new name, you can modify `src/lib/package.json` directly
|
|
20
|
+
- In the base directory, type `npm run package`. This will use svelte-kit's package feature to create an npm package in `./package`.
|
|
21
|
+
- Within the `./package` directory, type `npm publish` to publish to npm. Note that you cannot "overwrite" previous publishes, you must increment the version number
|
|
22
|
+
|
|
23
|
+
## Testing npm package
|
|
24
|
+
|
|
25
|
+
- install locally with `npm install svelvet-lime@latest -f`, where svelvet-lime is replaced with whatever you named your package. Note that if you have a previously installed version of svelvet, you must force a re-install otherwise you will be using an outdated npm package.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|