diff --git a/packages/editor-ui/src/Interface.ts b/packages/editor-ui/src/Interface.ts index 59bc77f2d..770cfe229 100644 --- a/packages/editor-ui/src/Interface.ts +++ b/packages/editor-ui/src/Interface.ts @@ -9,45 +9,45 @@ import type { ROLE, } from '@/constants'; import type { IMenuItem, NodeCreatorTag } from 'n8n-design-system'; -import { - type GenericValue, - type IConnections, - type ICredentialsDecrypted, - type ICredentialsEncrypted, - type ICredentialType, - type IDataObject, - type INode, - type INodeIssues, - type INodeParameters, - type INodeTypeDescription, - type IPinData, - type IRunExecutionData, - type IRun, - type IRunData, - type ITaskData, - type IWorkflowSettings as IWorkflowSettingsWorkflow, - type WorkflowExecuteMode, - type PublicInstalledPackage, - type INodeTypeNameVersion, - type ILoadOptions, - type INodeCredentials, - type INodeListSearchItems, - type NodeParameterValueType, - type IDisplayOptions, - type ExecutionSummary, - type FeatureFlags, - type ExecutionStatus, - type ITelemetryTrackProperties, - type IUserManagementSettings, - type WorkflowSettings, - type IUserSettings, - type IN8nUISettings, - type BannerName, - type INodeExecutionData, - type INodeProperties, - type NodeConnectionType, - type INodeCredentialsDetails, - type StartNodeData, +import type { + GenericValue, + IConnections, + ICredentialsDecrypted, + ICredentialsEncrypted, + ICredentialType, + IDataObject, + INode, + INodeIssues, + INodeParameters, + INodeTypeDescription, + IPinData, + IRunExecutionData, + IRun, + IRunData, + ITaskData, + IWorkflowSettings as IWorkflowSettingsWorkflow, + WorkflowExecuteMode, + PublicInstalledPackage, + INodeTypeNameVersion, + ILoadOptions, + INodeCredentials, + INodeListSearchItems, + NodeParameterValueType, + IDisplayOptions, + ExecutionSummary, + FeatureFlags, + ExecutionStatus, + ITelemetryTrackProperties, + IUserManagementSettings, + WorkflowSettings, + IUserSettings, + IN8nUISettings, + BannerName, + INodeExecutionData, + INodeProperties, + NodeConnectionType, + INodeCredentialsDetails, + StartNodeData, } from 'n8n-workflow'; import type { BulkCommand, Undoable } from '@/models/history'; import type { PartialBy, TupleToUnion } from '@/utils/typeHelpers'; @@ -1805,9 +1805,7 @@ export type AddedNode = { type: string; openDetail?: boolean; isAutoAdd?: boolean; - name?: string; - position?: XYPosition; -}; +} & Partial; export type AddedNodeConnection = { from: { nodeIndex: number; outputIndex?: number }; diff --git a/packages/editor-ui/src/components/canvas/Canvas.vue b/packages/editor-ui/src/components/canvas/Canvas.vue index 1ac810219..e3293ccdf 100644 --- a/packages/editor-ui/src/components/canvas/Canvas.vue +++ b/packages/editor-ui/src/components/canvas/Canvas.vue @@ -48,10 +48,18 @@ const props = withDefaults( }, ); -const { getSelectedEdges, getSelectedNodes, viewportRef, fitView, project } = useVueFlow({ - id: props.id, +const { getSelectedEdges, getSelectedNodes, viewportRef, fitView, project, onPaneReady } = + useVueFlow({ + id: props.id, + }); + +onPaneReady(async () => { + await onFitView(); + paneReady.value = true; }); +const paneReady = ref(false); + /** * Nodes */ @@ -183,7 +191,7 @@ function onClickPane(event: MouseEvent) { } async function onFitView() { - await fitView(); + await fitView({ maxZoom: 1.2, padding: 0.1 }); } /** @@ -207,12 +215,12 @@ onUnmounted(() => { :nodes="nodes" :edges="connections" :apply-changes="false" - fit-view-on-init pan-on-scroll snap-to-grid :snap-grid="[16, 16]" :min-zoom="0.2" - :max-zoom="2" + :max-zoom="4" + :class="[$style.canvas, { [$style.visible]: paneReady }]" data-test-id="canvas" @node-drag-stop="onNodeDragStop" @selection-drag-stop="onSelectionDragStop" @@ -253,10 +261,21 @@ onUnmounted(() => { data-test-id="canvas-controls" :class="$style.canvasControls" :position="controlsPosition" + @fit-view="onFitView" > + +