@flowgram.ai/free-layout-core 0.1.0-alpha.7 → 0.1.0-alpha.9

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.
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  LineColors,
13
13
  LineType
14
- } from "../chunk-PT4ZVDZZ.js";
14
+ } from "../chunk-6DKK25L7.js";
15
15
  import "../chunk-DDJTYHXN.js";
16
16
  import {
17
17
  WorkflowOperationBaseService
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  LineColors,
3
3
  LineType
4
- } from "../chunk-PT4ZVDZZ.js";
4
+ } from "../chunk-6DKK25L7.js";
5
5
  import "../chunk-EUXUH3YW.js";
6
6
  export {
7
7
  LineColors,
package/dist/index.d.mts CHANGED
@@ -2,8 +2,8 @@ import { PlaygroundConfigEntity, CommandService, PlaygroundDragEvent, EntityData
2
2
  export { bindConfigEntity, useConfigEntity, useEntities, useEntityDataFromContext, useEntityFromContext, useListenEvents, usePlayground, usePlaygroundContainer, usePlaygroundContext, usePlaygroundLatest, useRefresh, useService } from '@flowgram.ai/core';
3
3
  import { NodeFormProps } from '@flowgram.ai/node';
4
4
  import { FlowOperationBaseService, FlowNodeType, FlowOperationBaseServiceImpl, FlowNodeEntityOrId, FlowNodeEntity } from '@flowgram.ai/document';
5
- import { W as WorkflowHoverService, a as WorkflowDocument, b as WorkflowLinesManager, c as WorkflowSelectService, d as WorkflowDocumentOptions, L as LineEventProps, N as NodesDragEvent, e as WorkflowNodeJSON, f as WorkflowPortEntity, g as WorkflowLineEntity, O as OnDragLineEnd, h as WorkflowPorts, i as WorkflowPortType, j as WorkflowPort, k as LineRenderType, l as WorkflowLineRenderContribution, m as LinePosition } from './workflow-line-entity-DgCmDX1d.mjs';
6
- export { C as LINE_HOVER_DISTANCE, v as LineColor, w as LineColors, u as LineType, z as NodesDragEndEvent, y as NodesDragStartEvent, A as NodesDraggingEvent, P as POINT_RADIUS, G as PORT_SIZE, o as WORKFLOW_LINE_ENTITY, I as WorkfloEntityHoverable, s as WorkflowContentChangeEvent, r as WorkflowContentChangeType, K as WorkflowDocumentOptionsDefault, J as WorkflowDocumentProvider, q as WorkflowJSON, E as WorkflowLineEntityOpts, F as WorkflowLineInfo, D as WorkflowLinePortInfo, x as WorkflowLineRenderContributionFactory, t as WorkflowNodeMeta, H as WorkflowPortEntityOpts, p as domReactToBounds, n as getPortEntityId, B as onDragLineEndParams } from './workflow-line-entity-DgCmDX1d.mjs';
5
+ import { W as WorkflowHoverService, a as WorkflowDocument, b as WorkflowLinesManager, c as WorkflowSelectService, d as WorkflowDocumentOptions, L as LineEventProps, N as NodesDragEvent, e as WorkflowNodeJSON, f as WorkflowPortEntity, g as WorkflowLineEntity, O as OnDragLineEnd, h as WorkflowPorts, i as WorkflowPortType, j as WorkflowPort, k as LineRenderType, l as WorkflowLineRenderContribution, m as LinePosition } from './workflow-line-entity-BcD7CpoN.mjs';
6
+ export { C as LINE_HOVER_DISTANCE, v as LineColor, w as LineColors, u as LineType, z as NodesDragEndEvent, y as NodesDragStartEvent, A as NodesDraggingEvent, P as POINT_RADIUS, G as PORT_SIZE, o as WORKFLOW_LINE_ENTITY, J as WorkfloEntityHoverable, s as WorkflowContentChangeEvent, r as WorkflowContentChangeType, M as WorkflowDocumentOptionsDefault, K as WorkflowDocumentProvider, I as WorkflowEntityHoverable, q as WorkflowJSON, E as WorkflowLineEntityOpts, F as WorkflowLineInfo, D as WorkflowLinePortInfo, x as WorkflowLineRenderContributionFactory, t as WorkflowNodeMeta, H as WorkflowPortEntityOpts, p as domReactToBounds, n as getPortEntityId, B as onDragLineEndParams } from './workflow-line-entity-BcD7CpoN.mjs';
7
7
  import { W as WorkflowNodeEntity } from './workflow-sub-canvas-DOVla1mw.mjs';
8
8
  export { a as WorkflowSubCanvas } from './workflow-sub-canvas-DOVla1mw.mjs';
9
9
  import * as _flowgram_ai_utils from '@flowgram.ai/utils';
package/dist/index.d.ts CHANGED
@@ -2,8 +2,8 @@ import { PlaygroundConfigEntity, CommandService, PlaygroundDragEvent, EntityData
2
2
  export { bindConfigEntity, useConfigEntity, useEntities, useEntityDataFromContext, useEntityFromContext, useListenEvents, usePlayground, usePlaygroundContainer, usePlaygroundContext, usePlaygroundLatest, useRefresh, useService } from '@flowgram.ai/core';
3
3
  import { NodeFormProps } from '@flowgram.ai/node';
4
4
  import { FlowOperationBaseService, FlowNodeType, FlowOperationBaseServiceImpl, FlowNodeEntityOrId, FlowNodeEntity } from '@flowgram.ai/document';
5
- import { W as WorkflowHoverService, a as WorkflowDocument, b as WorkflowLinesManager, c as WorkflowSelectService, d as WorkflowDocumentOptions, L as LineEventProps, N as NodesDragEvent, e as WorkflowNodeJSON, f as WorkflowPortEntity, g as WorkflowLineEntity, O as OnDragLineEnd, h as WorkflowPorts, i as WorkflowPortType, j as WorkflowPort, k as LineRenderType, l as WorkflowLineRenderContribution, m as LinePosition } from './workflow-line-entity-B8wC-OVt.js';
6
- export { C as LINE_HOVER_DISTANCE, v as LineColor, w as LineColors, u as LineType, z as NodesDragEndEvent, y as NodesDragStartEvent, A as NodesDraggingEvent, P as POINT_RADIUS, G as PORT_SIZE, o as WORKFLOW_LINE_ENTITY, I as WorkfloEntityHoverable, s as WorkflowContentChangeEvent, r as WorkflowContentChangeType, K as WorkflowDocumentOptionsDefault, J as WorkflowDocumentProvider, q as WorkflowJSON, E as WorkflowLineEntityOpts, F as WorkflowLineInfo, D as WorkflowLinePortInfo, x as WorkflowLineRenderContributionFactory, t as WorkflowNodeMeta, H as WorkflowPortEntityOpts, p as domReactToBounds, n as getPortEntityId, B as onDragLineEndParams } from './workflow-line-entity-B8wC-OVt.js';
5
+ import { W as WorkflowHoverService, a as WorkflowDocument, b as WorkflowLinesManager, c as WorkflowSelectService, d as WorkflowDocumentOptions, L as LineEventProps, N as NodesDragEvent, e as WorkflowNodeJSON, f as WorkflowPortEntity, g as WorkflowLineEntity, O as OnDragLineEnd, h as WorkflowPorts, i as WorkflowPortType, j as WorkflowPort, k as LineRenderType, l as WorkflowLineRenderContribution, m as LinePosition } from './workflow-line-entity-CXh_ddVD.js';
6
+ export { C as LINE_HOVER_DISTANCE, v as LineColor, w as LineColors, u as LineType, z as NodesDragEndEvent, y as NodesDragStartEvent, A as NodesDraggingEvent, P as POINT_RADIUS, G as PORT_SIZE, o as WORKFLOW_LINE_ENTITY, J as WorkfloEntityHoverable, s as WorkflowContentChangeEvent, r as WorkflowContentChangeType, M as WorkflowDocumentOptionsDefault, K as WorkflowDocumentProvider, I as WorkflowEntityHoverable, q as WorkflowJSON, E as WorkflowLineEntityOpts, F as WorkflowLineInfo, D as WorkflowLinePortInfo, x as WorkflowLineRenderContributionFactory, t as WorkflowNodeMeta, H as WorkflowPortEntityOpts, p as domReactToBounds, n as getPortEntityId, B as onDragLineEndParams } from './workflow-line-entity-CXh_ddVD.js';
7
7
  import { W as WorkflowNodeEntity } from './workflow-sub-canvas-DOVla1mw.js';
8
8
  export { a as WorkflowSubCanvas } from './workflow-sub-canvas-DOVla1mw.js';
9
9
  import * as _flowgram_ai_utils from '@flowgram.ai/utils';
package/dist/index.js CHANGED
@@ -1089,8 +1089,8 @@ WorkflowSelectService = __decorateClass([
1089
1089
 
1090
1090
  // src/service/workflow-hover-service.ts
1091
1091
  var import_inversify2 = require("inversify");
1092
- var import_core10 = require("@flowgram.ai/core");
1093
1092
  var import_utils11 = require("@flowgram.ai/utils");
1093
+ var import_core10 = require("@flowgram.ai/core");
1094
1094
  var WorkflowHoverService = class {
1095
1095
  constructor() {
1096
1096
  this.onHoveredChangeEmitter = new import_utils11.Emitter();
@@ -1187,11 +1187,12 @@ var LineType = /* @__PURE__ */ ((LineType2) => {
1187
1187
  return LineType2;
1188
1188
  })(LineType || {});
1189
1189
  var LineColors = /* @__PURE__ */ ((LineColors2) => {
1190
- LineColors2["HIDDEN"] = "transparent";
1191
- LineColors2["DEFUALT"] = "#4d53e8";
1192
- LineColors2["DRAWING"] = "#5DD6E3";
1193
- LineColors2["HOVER"] = "#37d0ff";
1194
- LineColors2["ERROR"] = "red";
1190
+ LineColors2["HIDDEN"] = "var(--g-line-color-hidden,transparent)";
1191
+ LineColors2["DEFUALT"] = "var(--g-line-color-default,#4d53e8)";
1192
+ LineColors2["DRAWING"] = "var(--g-line-color-drawing, #5DD6E3)";
1193
+ LineColors2["HOVER"] = "var(--g-line-color-hover,#37d0ff)";
1194
+ LineColors2["SELECTED"] = "var(--g-line-color-selected,#37d0ff)";
1195
+ LineColors2["ERROR"] = "var(--g-line-color-error,red)";
1195
1196
  return LineColors2;
1196
1197
  })(LineColors || {});
1197
1198
 
@@ -1210,19 +1211,23 @@ function toFormJSON(node) {
1210
1211
  if (!formData || !node.getNodeRegistry().formMeta) return void 0;
1211
1212
  return formData.toJSON();
1212
1213
  }
1213
- function initFormDataFromJSON(node, json) {
1214
+ function initFormDataFromJSON(node, json, isFirstCreate) {
1214
1215
  const formData = node.getData(import_form_core.FlowNodeFormData);
1215
1216
  const registry = node.getNodeRegistry();
1216
1217
  const { formMeta } = registry;
1217
1218
  if (formData && formMeta) {
1218
- formData.createForm(formMeta, json.data);
1219
- formData.onDataChange(() => {
1220
- node.document.fireContentChange({
1221
- type: "NODE_DATA_CHANGE" /* NODE_DATA_CHANGE */,
1222
- toJSON: () => formData.toJSON(),
1223
- entity: node
1219
+ if (isFirstCreate) {
1220
+ formData.createForm(formMeta, json.data);
1221
+ formData.onDataChange(() => {
1222
+ node.document.fireContentChange({
1223
+ type: "NODE_DATA_CHANGE" /* NODE_DATA_CHANGE */,
1224
+ toJSON: () => formData.toJSON(),
1225
+ entity: node
1226
+ });
1224
1227
  });
1225
- });
1228
+ } else {
1229
+ formData.updateFormValues(json.data);
1230
+ }
1226
1231
  }
1227
1232
  }
1228
1233
 
@@ -1233,8 +1238,8 @@ var WorkflowDocumentOptionsDefault = {
1233
1238
  grab: 'url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMCAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMC40ODczIDIuNjIzNzhDOS45MDczMSAyLjYyMzc4IDkuNDM3MTMgMy4wOTM5NiA5LjQzNzEzIDMuNjczOTZWNS4xNDM3NkM5LjM5NDI4IDQuNDAyNzQgOC43Nzk3OCAzLjgxNTA0IDguMDI4MDIgMy44MTUwNEM3LjI0ODQ4IDMuODE1MDQgNi42MTY1MyA0LjQ0Njk5IDYuNjE2NTMgNS4yMjY1M1YxMS44Mjg5TDUuNjc0MTggMTEuMDA0OUM1LjE1NDg3IDEwLjU1MDkgNC40MDk1IDEwLjQ2MzYgMy43OTkzOCAxMC43ODU1TDMuNjk2OTQgMTAuODM5NkMzLjA2MjE3IDExLjE3NDUgMi45MjI2IDEyLjAyMjggMy40MTY2MiAxMi41NDM0TDcuMzM5NTkgMTYuNjc3NVYxNy4zMjU5QzcuMzM5NTkgMTcuNzg2MiA3LjcxMjY5IDE4LjE1OTMgOC4xNzI5MiAxOC4xNTkzSDEzLjgwODRDMTQuMjY4NyAxOC4xNTkzIDE0LjY0MTcgMTcuNzg2MiAxNC42NDE3IDE3LjMyNTlWMTYuNzkzNUMxNS44MDk0IDE1LjY0ODUgMTYuNDY3MyAxNC4wODE5IDE2LjQ2NzMgMTIuNDQ2NVYxMS40OTY3TDE2LjQ2NzEgNi42MzY4NUMxNi40NjcxIDUuOTU2MyAxNS45MTU0IDUuNDA0NjEgMTUuMjM0OCA1LjQwNDYxQzE0LjU1NDMgNS40MDQ2MSAxNC4wMDI2IDUuOTU2MyAxNC4wMDI2IDYuNjM2ODVMMTQuMDAyMSA1LjA0NzI4QzE0LjAwMjEgNC4zNjY3MyAxMy40NTA0IDMuODE1MDQgMTIuNzY5OCAzLjgxNTA0QzEyLjA4OTMgMy44MTUwNCAxMS41Mzc2IDQuMzY2NzMgMTEuNTM3NiA1LjA0NzI4TDExLjUzNzUgMy42NzM5NUMxMS41Mzc1IDMuMDkzOTYgMTEuMDY3MyAyLjYyMzc4IDEwLjQ4NzMgMi42MjM3OFoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTAuNDg3NCAxLjM3NDAyQzExLjM2MTIgMS4zNzQwMiAxMi4xMjExIDEuODYxMTggMTIuNTEwNSAyLjU3ODY4QzEyLjU5NTggMi41Njk4MyAxMi42ODIzIDIuNTY1MjggMTIuNzcgMi41NjUyOEMxMy44Mjc4IDIuNTY1MjggMTQuNzMxMSAzLjIyNzAxIDE1LjA4ODUgNC4xNTkxMUMxNS4xMzcgNC4xNTYyOSAxNS4xODU4IDQuMTU0ODYgMTUuMjM1IDQuMTU0ODZDMTYuNjA1OSA0LjE1NDg2IDE3LjcxNzIgNS4yNjYxOSAxNy43MTcyIDYuNjM3MDlMMTcuNzE3NCAxMi40NDY3QzE3LjcxNzQgMTQuMjM1NSAxNy4wNjQ0IDE1Ljk1NTkgMTUuODkxOSAxNy4yOTA0VjE3LjMyNjJDMTUuODkxOSAxOC40NzY4IDE0Ljk1OTEgMTkuNDA5NSAxMy44MDg1IDE5LjQwOTVIOC4xNzMwNkM3LjAyMjQ3IDE5LjQwOTUgNi4wODk3MyAxOC40NzY4IDYuMDg5NzMgMTcuMzI2MlYxNy4xNzY0TDIuNTEwMDMgMTMuNDA0MUMxLjQ0NTk5IDEyLjI4MjggMS43NDY2IDEwLjQ1NTUgMy4xMTM3OSA5LjczNDI0TDMuMjE2MjQgOS42ODAxOUMzLjg5MTY4IDkuMzIzODMgNC42NjE4NSA5LjI1NDAxIDUuMzY2NjYgOS40NTE5OFY1LjIyNjc4QzUuMzY2NjYgMy43NTY4NyA2LjU1ODI2IDIuNTY1MjggOC4wMjgxNiAyLjU2NTI4QzguMTcyOTMgMi41NjUyOCA4LjMxNDk5IDIuNTc2ODQgOC40NTM0NyAyLjU5OTA3QzguODM5NDMgMS44NzA0MiA5LjYwNTQ2IDEuMzc0MDIgMTAuNDg3NCAxLjM3NDAyWk0xMi40NDc2IDMuODU3ODdWOS40NzY0NkMxMi40NDc2IDkuNzI4NTIgMTIuMjQzMyA5LjkzMjg1IDExLjk5MTMgOS45MzI4NUMxMS43MzkyIDkuOTMyODUgMTEuNTM0OSA5LjcyODUyIDExLjUzNDkgOS40NzY0NlYzLjc5NjU1QzExLjUzNDkgMy43Nzk1NiAxMS41MzU4IDMuNzYyNzcgMTEuNTM3NiAzLjc0NjI2VjMuNjc0MkMxMS41Mzc2IDMuNDMyODIgMTEuNDU2MiAzLjIxMDQ2IDExLjMxOTMgMy4wMzMwOUMxMS4xMjcyIDIuNzg0MjggMTAuODI2MSAyLjYyNDAyIDEwLjQ4NzQgMi42MjQwMkMxMC4xMjM4IDIuNjI0MDIgOS44MDMzMiAyLjgwODg2IDkuNjE0ODMgMy4wODk3QzkuNTAyNjkgMy4yNTY3OSA5LjQzNzI2IDMuNDU3ODUgOS40MzcyNiAzLjY3NDJWMy43ODU3M0M5LjQzNzM1IDMuNzg5MzMgOS40MzczOSAzLjc5Mjk0IDkuNDM3MzkgMy43OTY1NVY5LjkwMTdDOS40MzczOSAxMC4xNTM3IDkuMjMzMDYgMTAuMzU4MSA4Ljk4MTAxIDEwLjM1ODFDOC43Mjg5NSAxMC4zNTgxIDguNTI0NjIgMTAuMTUzNyA4LjUyNDYyIDkuOTAxN1YzLjkwNTA3QzguNDE3NzMgMy44NjQ5IDguMzA0NjggMy44MzczMiA4LjE4NzI2IDMuODI0MTVDOC4xMzUwNCAzLjgxODI5IDguMDgxOTUgMy44MTUyOCA4LjAyODE2IDMuODE1MjhDNy4yNDg2MSAzLjgxNTI4IDYuNjE2NjYgNC40NDcyMyA2LjYxNjY2IDUuMjI2NzhWMTEuODI5Mkw1LjY3NDMxIDExLjAwNTJDNS41Nzg2OCAxMC45MjE2IDUuNDc1MzcgMTAuODUwNCA1LjM2NjY2IDEwLjc5MTlDNC44ODUwNiAxMC41MzI5IDQuMjk3MjggMTAuNTIzMSAzLjc5OTUyIDEwLjc4NThMMy42OTcwNyAxMC44Mzk4QzMuMDYyMzEgMTEuMTc0NyAyLjkyMjczIDEyLjAyMzEgMy40MTY3NSAxMi41NDM3TDcuMzM5NzMgMTYuNjc3N1YxNy4zMjYyQzcuMzM5NzMgMTcuNzg2NCA3LjcxMjgyIDE4LjE1OTUgOC4xNzMwNiAxOC4xNTk1SDEzLjgwODVDMTQuMjY4OCAxOC4xNTk1IDE0LjY0MTkgMTcuNzg2NCAxNC42NDE5IDE3LjMyNjJWMTYuNzkzOEMxNS43Mzc5IDE1LjcxOSAxNi4zODQ3IDE0LjI3MjggMTYuNDYgMTIuNzQ3QzE2LjQ2NDEgMTIuNjY0MSAxNi40NjY1IDEyLjU4MDkgMTYuNDY3MiAxMi40OTc1TDE2LjQ2NzQgMTIuNDQ2N0wxNi40NjcyIDYuNjM3MDlDMTYuNDY3MiA1Ljk2MjMgMTUuOTI0OCA1LjQxNDE5IDE1LjI1MjIgNS40MDQ5N0wxNS4yMzUgNS40MDQ4NkMxNS4xMjQ2IDUuNDA0ODYgMTUuMDE3NyA1LjQxOTM2IDE0LjkxNTkgNS40NDY1NlY5LjYwMjI2QzE0LjkxNTkgOS44NTQzMSAxNC43MTE2IDEwLjA1ODYgMTQuNDU5NSAxMC4wNTg2QzE0LjIwNzUgMTAuMDU4NiAxNC4wMDMxIDkuODU0MzEgMTQuMDAzMSA5LjYwMjI2VjYuNjA1MTRDMTQuMDAyOSA2LjYxNTc2IDE0LjAwMjcgNi42MjY0MSAxNC4wMDI3IDYuNjM3MDlWOS4yNzcwNUwxNC4wMDIyIDUuMDQ3NTJDMTQuMDAyMiA0Ljg2OTEzIDEzLjk2NDMgNC42OTk2IDEzLjg5NjEgNC41NDY1M0MxMy43MDY0IDQuMTIwNzIgMTMuMjgyMiAzLjgyMjM1IDEyLjc4NzYgMy44MTU0MUwxMi43NyAzLjgxNTI4QzEyLjY1ODQgMy44MTUyOCAxMi41NTA0IDMuODMwMSAxMi40NDc2IDMuODU3ODdaIiBmaWxsPSIjMUQxQzIzIi8+Cjwvc3ZnPg=="), auto',
1234
1239
  grabbing: 'url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMCAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjYxODE3IDUuNTk4NzVDNi42MTgxNyA0LjgxOTIgNy4yNTAxMiA0LjE4NzI2IDguMDI5NjcgNC4xODcyNkM4Ljc3ODczIDQuMTg3MjYgOS4zOTE1MiA0Ljc3MDc1IDkuNDM4MjkgNS41MDgwMUM5LjQ1OTkyIDQuOTQ3MSA5LjkyMTQ3IDQuNDk5MDIgMTAuNDg3NyA0LjQ5OTAyQzExLjA2NzcgNC40OTkwMiAxMS41Mzc4IDQuOTY5MiAxMS41Mzc4IDUuNTQ5MTlWOC43NjI0NkwxMS41Mzc5IDYuNzExNUMxMS41Mzc5IDYuMDMwOTUgMTIuMDg5NiA1LjQ3OTI2IDEyLjc3MDIgNS40NzkyNkMxMy40NTA3IDUuNDc5MjYgMTQuMDAyNCA2LjAzMDk1IDE0LjAwMjQgNi43MTE1TDE0LjAwMjQgOC43NjI0NkwxNC4wMDI5IDguMDE5ODNDMTQuMDAyOSA3LjMzOTI5IDE0LjU1NDYgNi43ODc1OSAxNS4yMzUyIDYuNzg3NTlDMTUuOTE1NyA2Ljc4NzU5IDE2LjQ2NzQgNy4zMzkyOCAxNi40Njc0IDguMDE5ODNWMTEuNDk3TDE2LjQ2NzUgMTIuNDQ2N0MxNi40Njc1IDE0LjA4MjEgMTUuODA5NiAxNS42NDg3IDE0LjY0MiAxNi43OTM4VjE3LjMyNjJDMTQuNjQyIDE3Ljc4NjQgMTQuMjY4OSAxOC4xNTk1IDEzLjgwODcgMTguMTU5NUg4LjE3MzE3QzcuNzEyOTMgMTguMTU5NSA3LjMzOTg0IDE3Ljc4NjQgNy4zMzk4NCAxNy4zMjYyVjE1Ljk0MjRMNS4zNDU2MiAxNC43NTM0QzQuNTg5MjQgMTQuMzAyNCA0LjEyNTkxIDEzLjQ4NjcgNC4xMjU4OSAxMi42MDYxTDQuMTI1ODMgOS4yODM4M0M0LjEyNTgyIDguOTU0MjcgNC4zMjAwMyA4LjY1NTY2IDQuNjIxMjkgOC41MjIwNUw2LjYxODE3IDcuNjM2MzRWNS41OTg3NVoiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTAuNDg3OCAzLjI0OTAyQzExLjI3OTYgMy4yNDkwMiAxMS45Nzc4IDMuNjQ5MDIgMTIuMzkxNyA0LjI1Nzk2QzEyLjUxNTEgNC4yMzkwNiAxMi42NDE2IDQuMjI5MjYgMTIuNzcwMyA0LjIyOTI2QzEzLjcyMjQgNC4yMjkyNiAxNC41NDkzIDQuNzY1MzEgMTQuOTY1NyA1LjU1MjA3QzE1LjA1NDMgNS41NDI1IDE1LjE0NDIgNS41Mzc1OSAxNS4yMzUzIDUuNTM3NTlDMTYuNjA2MiA1LjUzNzU5IDE3LjcxNzYgNi42NDg5MyAxNy43MTc2IDguMDE5ODNMMTcuNzE3NyAxMi40NDY3QzE3LjcxNzcgMTQuMjM1NSAxNy4wNjQ3IDE1Ljk1NTkgMTUuODkyMSAxNy4yOTA0VjE3LjMyNjJDMTUuODkyMSAxOC40NzY4IDE0Ljk1OTQgMTkuNDA5NSAxMy44MDg4IDE5LjQwOTVIOC4xNzMzMkM3LjAyMjczIDE5LjQwOTUgNi4wODk5OCAxOC40NzY4IDYuMDg5OTggMTcuMzI2MlYxNi42NTI0TDQuNzA1NjMgMTUuODI3QzMuNTcxMDYgMTUuMTUwNSAyLjg3NjA3IDEzLjkyNzEgMi44NzYwNCAxMi42MDYxTDIuODc1OTggOS4yODM4NUMyLjg3NTk2IDguNDU5OTYgMy4zNjE0OSA3LjcxMzQ1IDQuMTE0NjIgNy4zNzk0TDUuMzY4MzIgNi44MjMzM1Y1LjU5ODc1QzUuMzY4MzIgNC4xMjg4NSA2LjU1OTkxIDIuOTM3MjYgOC4wMjk4MiAyLjkzNzI2QzguNjA4MzEgMi45MzcyNiA5LjE0MzU1IDMuMTIxNyA5LjU4MDA1IDMuNDM1MDVDOS44NTg1MyAzLjMxNTMyIDEwLjE2NTQgMy4yNDkwMiAxMC40ODc4IDMuMjQ5MDJaTTEyLjQ0NzkgNS41MjE4NlY5LjQ3NTU3QzEyLjQ0NzkgOS43Mjc2MiAxMi4yNDM2IDkuOTMxOTUgMTEuOTkxNiA5LjkzMTk1QzExLjc1NjggOS45MzE5NSAxMS41NjM0IDkuNzU0NjUgMTEuNTM4IDkuNTI2NjNDMTEuNTM2MSA5LjUwOTg3IDExLjUzNTIgOS40OTI4MyAxMS41MzUyIDkuNDc1NTdWNS40NzE1OEMxMS41MTU0IDUuMjAwODMgMTEuMzkzIDQuOTU4NTggMTEuMjA2NiA0Ljc4MzU4QzExLjAxODggNC42MDcxMSAxMC43NjU5IDQuNDk5MDIgMTAuNDg3OCA0LjQ5OTAyQzEwLjQ3NjYgNC40OTkwMiAxMC40NjU0IDQuNDk5MTkgMTAuNDU0MiA0LjQ5OTU0QzkuOTAzNDcgNC41MTY4NCA5LjQ1OTY0IDQuOTU4MjQgOS40Mzg0NCA1LjUwODAxQzkuNDM4MiA1LjUwNDMgOS40Mzc5NSA1LjUwMDU4IDkuNDM3NjkgNS40OTY4OFY5LjkwMjQzQzkuNDM3NjkgMTAuMTU0NSA5LjIzMzM2IDEwLjM1ODggOC45ODEzMSAxMC4zNTg4QzguNzI5MjUgMTAuMzU4OCA4LjUyNDkyIDEwLjE1NDUgOC41MjQ5MiA5LjkwMjQzVjQuMjc2NTNDOC4zNzA4NiA0LjIxODgyIDguMjA0MDIgNC4xODcyNiA4LjAyOTgyIDQuMTg3MjZDNy4yNTAyNyA0LjE4NzI2IDYuNjE4MzIgNC44MTkyIDYuNjE4MzIgNS41OTg3NUw2LjYxODI3IDkuOTc1OTlDNi42MTgyNyAxMC4yMjggNi40MTM5NCAxMC40MzI0IDYuMTYxODkgMTAuNDMyNEM1LjkwOTgzIDEwLjQzMjQgNS43MDU1IDEwLjIyOCA1LjcwNTUgOS45NzU5OVY4LjA0MTIyTDQuNjIxNDQgOC41MjIwNUM0LjMyMDE4IDguNjU1NjYgNC4xMjU5NyA4Ljk1NDI3IDQuMTI1OTggOS4yODM4M0w0LjEyNjA0IDEyLjYwNjFDNC4xMjYwNiAxMy40ODY3IDQuNTg5MzkgMTQuMzAyNCA1LjM0NTc2IDE0Ljc1MzRMNy4zMzk5OCAxNS45NDI0VjE3LjMyNjJDNy4zMzk5OCAxNy43ODY0IDcuNzEzMDggMTguMTU5NSA4LjE3MzMyIDE4LjE1OTVIMTMuODA4OEMxNC4yNjkgMTguMTU5NSAxNC42NDIxIDE3Ljc4NjQgMTQuNjQyMSAxNy4zMjYyVjE2Ljc5MzhDMTUuNzM4MSAxNS43MTkgMTYuMzg1IDE0LjI3MjggMTYuNDYwMyAxMi43NDdDMTYuNDY0NiAxMi42NiAxNi40NjcgMTIuNTcyOCAxNi40Njc2IDEyLjQ4NTRMMTYuNDY3NyAxMi40NDY3TDE2LjQ2NzYgOC4wMTk4M0MxNi40Njc2IDcuMzQ1MDQgMTUuOTI1MiA2Ljc5NjkzIDE1LjI1MjUgNi43ODc3MUwxNS4yMzUzIDYuNzg3NTlDMTUuMTI1IDYuNzg3NTkgMTUuMDE4IDYuODAyMSAxNC45MTYyIDYuODI5MzFWOS42MDEzNkMxNC45MTYyIDkuODUzNDIgMTQuNzExOSAxMC4wNTc3IDE0LjQ1OTggMTAuMDU3N0MxNC4yMDc4IDEwLjA1NzcgMTQuMDAzNCA5Ljg1MzQxIDE0LjAwMzQgOS42MDEzNlY3Ljk4OTg1QzE0LjAwMzIgNy45OTk4MiAxNC4wMDMxIDguMDA5ODEgMTQuMDAzMSA4LjAxOTgzTDE0LjAwMzQgOS42MDEzNkwxNC4wMDI1IDYuNzExNUMxNC4wMDI1IDYuNDQ5NzQgMTMuOTIwOSA2LjIwNzA1IDEzLjc4MTggNi4wMDc0OEMxMy41NjIgNS42OTI0MiAxMy4xOTg5IDUuNDg0ODMgMTIuNzg3IDUuNDc5MzdMMTIuNzcwMyA1LjQ3OTI2QzEyLjY1ODggNS40NzkyNiAxMi41NTA3IDUuNDk0MDggMTIuNDQ3OSA1LjUyMTg2WiIgZmlsbD0iIzFEMUMyMyIvPgo8L3N2Zz4="), auto'
1235
1240
  },
1236
- fromNodeJSON(node, json) {
1237
- initFormDataFromJSON(node, json);
1241
+ fromNodeJSON(node, json, isFirstCreate) {
1242
+ initFormDataFromJSON(node, json, isFirstCreate);
1238
1243
  return;
1239
1244
  },
1240
1245
  toNodeJSON(node) {
@@ -1298,12 +1303,12 @@ var WorkflowLinesManager = class {
1298
1303
  }
1299
1304
  get lineColor() {
1300
1305
  const color = {
1301
- default: "#4d53e8" /* DEFUALT */,
1302
- error: "red" /* ERROR */,
1303
- hidden: "transparent" /* HIDDEN */,
1304
- drawing: "#5DD6E3" /* DRAWING */,
1305
- hovered: "#37d0ff" /* HOVER */,
1306
- selected: "#37d0ff" /* HOVER */
1306
+ default: "var(--g-line-color-default,#4d53e8)" /* DEFUALT */,
1307
+ error: "var(--g-line-color-error,red)" /* ERROR */,
1308
+ hidden: "var(--g-line-color-hidden,transparent)" /* HIDDEN */,
1309
+ drawing: "var(--g-line-color-drawing, #5DD6E3)" /* DRAWING */,
1310
+ hovered: "var(--g-line-color-hover,#37d0ff)" /* HOVER */,
1311
+ selected: "var(--g-line-color-selected,#37d0ff)" /* SELECTED */
1307
1312
  };
1308
1313
  if (this.options.lineColor) {
1309
1314
  Object.assign(color, this.options.lineColor);
@@ -1386,17 +1391,15 @@ var WorkflowLinesManager = class {
1386
1391
  toNode?.removeLine(line);
1387
1392
  line.validate();
1388
1393
  });
1389
- line.toDispose.push(
1390
- import_utils12.Disposable.create(() => {
1391
- if (available) {
1392
- this.onAvailableLinesChangeEmitter.fire({
1393
- type: "DELETE_LINE" /* DELETE_LINE */,
1394
- toJSON: () => line.toJSON(),
1395
- entity: line
1396
- });
1397
- }
1398
- })
1399
- );
1394
+ line.onDispose(() => {
1395
+ if (available) {
1396
+ this.onAvailableLinesChangeEmitter.fire({
1397
+ type: "DELETE_LINE" /* DELETE_LINE */,
1398
+ toJSON: () => line.toJSON(),
1399
+ entity: line
1400
+ });
1401
+ }
1402
+ });
1400
1403
  if (available) {
1401
1404
  this.onAvailableLinesChangeEmitter.fire({
1402
1405
  type: "ADD_LINE" /* ADD_LINE */,
@@ -1604,9 +1607,9 @@ var import_core14 = require("@flowgram.ai/core");
1604
1607
 
1605
1608
  // src/layout/free-layout.ts
1606
1609
  var import_inversify4 = require("inversify");
1610
+ var import_utils13 = require("@flowgram.ai/utils");
1607
1611
  var import_document6 = require("@flowgram.ai/document");
1608
1612
  var import_core13 = require("@flowgram.ai/core");
1609
- var import_utils13 = require("@flowgram.ai/utils");
1610
1613
  var FREE_LAYOUT_KEY = "free-layout";
1611
1614
  var FreeLayout = class {
1612
1615
  constructor() {
@@ -1641,6 +1644,21 @@ var FreeLayout = class {
1641
1644
  const parentTransform = node.parent.getData(import_document6.FlowNodeTransformData);
1642
1645
  parentTransform.transform.fireChange();
1643
1646
  }
1647
+ /**
1648
+ * 更新所有受影响的上下游节点
1649
+ */
1650
+ updateAffectedTransform(node) {
1651
+ const transformData = node.transform;
1652
+ if (!transformData.localDirty) {
1653
+ return;
1654
+ }
1655
+ const allParents = this.getAllParents(node);
1656
+ const allBlocks = this.getAllBlocks(node).reverse();
1657
+ const affectedNodes = [...allBlocks, ...allParents];
1658
+ affectedNodes.forEach((node2) => {
1659
+ this.fireChange(node2);
1660
+ });
1661
+ }
1644
1662
  /**
1645
1663
  * 获取节点的 padding 数据
1646
1664
  * @param node
@@ -1686,6 +1704,30 @@ var FreeLayout = class {
1686
1704
  getDefaultNodeOrigin() {
1687
1705
  return { x: 0.5, y: 0 };
1688
1706
  }
1707
+ getAllParents(node) {
1708
+ const parents = [];
1709
+ let current = node.parent;
1710
+ while (current) {
1711
+ parents.push(current);
1712
+ current = current.parent;
1713
+ }
1714
+ return parents;
1715
+ }
1716
+ getAllBlocks(node) {
1717
+ return node.blocks.reduce(
1718
+ (acc, child) => [...acc, ...this.getAllBlocks(child)],
1719
+ [node]
1720
+ );
1721
+ }
1722
+ fireChange(node) {
1723
+ const transformData = node?.transform;
1724
+ if (!node || !transformData?.localDirty) {
1725
+ return;
1726
+ }
1727
+ node.clearMemoGlobal();
1728
+ node.clearMemoLocal();
1729
+ transformData.transform.fireChange();
1730
+ }
1689
1731
  };
1690
1732
  __decorateClass([
1691
1733
  (0, import_inversify4.inject)(import_core13.PlaygroundConfigEntity)
@@ -1708,7 +1750,6 @@ var WorkflowDocument = class extends import_document7.FlowDocument {
1708
1750
  this.onContentChange = this._onContentChangeEmitter.event;
1709
1751
  this._onReloadEmitter = new import_utils14.Emitter();
1710
1752
  this.onReload = this._onReloadEmitter.event;
1711
- this.disposed = false;
1712
1753
  /**
1713
1754
  * 数据加载完成
1714
1755
  */
@@ -1737,12 +1778,14 @@ var WorkflowDocument = class extends import_document7.FlowDocument {
1737
1778
  });
1738
1779
  }
1739
1780
  async load() {
1781
+ if (this.disposed) return;
1740
1782
  this._loading = true;
1741
1783
  await super.load();
1742
1784
  this._loading = false;
1743
1785
  this.onLoadedEmitter.fire();
1744
1786
  }
1745
1787
  async reload(json, delayTime = 0) {
1788
+ if (this.disposed) return;
1746
1789
  this._loading = true;
1747
1790
  this.clear();
1748
1791
  this.fromJSON(json);
@@ -1755,6 +1798,7 @@ var WorkflowDocument = class extends import_document7.FlowDocument {
1755
1798
  * @param json
1756
1799
  */
1757
1800
  fromJSON(json, fireRender = true) {
1801
+ if (this.disposed) return;
1758
1802
  const workflowJSON = {
1759
1803
  nodes: json.nodes ?? [],
1760
1804
  edges: json.edges ?? []
@@ -1797,9 +1841,11 @@ var WorkflowDocument = class extends import_document7.FlowDocument {
1797
1841
  const formData = getFlowNodeFormData(node);
1798
1842
  const transform = node.getData(import_document7.FlowNodeTransformData);
1799
1843
  const freeLayout = this.layout;
1800
- transform.onDataChange(() => {
1801
- freeLayout.syncTransform(node);
1802
- });
1844
+ if (!isExistedNode) {
1845
+ transform.onDataChange(() => {
1846
+ freeLayout.syncTransform(node);
1847
+ });
1848
+ }
1803
1849
  let { position } = meta;
1804
1850
  if (!position) {
1805
1851
  position = this.getNodeDefaultPosition(json.type);
@@ -1818,13 +1864,15 @@ var WorkflowDocument = class extends import_document7.FlowDocument {
1818
1864
  });
1819
1865
  }
1820
1866
  const positionData = node.getData(import_core14.PositionData);
1821
- positionData.onDataChange(() => {
1822
- this.fireContentChange({
1823
- type: "MOVE_NODE" /* MOVE_NODE */,
1824
- toJSON: () => positionData.toJSON(),
1825
- entity: node
1867
+ if (!isExistedNode) {
1868
+ positionData.onDataChange(() => {
1869
+ this.fireContentChange({
1870
+ type: "MOVE_NODE" /* MOVE_NODE */,
1871
+ toJSON: () => positionData.toJSON(),
1872
+ entity: node
1873
+ });
1826
1874
  });
1827
- });
1875
+ }
1828
1876
  const subCanvas = this.getNodeSubCanvas(node);
1829
1877
  if (!isExistedNode && !subCanvas?.isCanvas) {
1830
1878
  this.fireContentChange({
@@ -1832,26 +1880,24 @@ var WorkflowDocument = class extends import_document7.FlowDocument {
1832
1880
  entity: node,
1833
1881
  toJSON: () => this.toNodeJSON(node)
1834
1882
  });
1835
- node.toDispose.push(
1836
- import_utils14.Disposable.create(() => {
1837
- this.fireContentChange({
1838
- type: "DELETE_NODE" /* DELETE_NODE */,
1839
- entity: node,
1840
- toJSON: () => this.toNodeJSON(node)
1841
- });
1842
- })
1843
- );
1844
- node.toDispose.push(
1845
- import_utils14.Disposable.create(() => {
1846
- if (!node.parent || node.parent.flowNodeType === import_document7.FlowNodeBaseType.ROOT) {
1847
- return;
1848
- }
1849
- const parentTransform = node.parent.getData(import_document7.FlowNodeTransformData);
1850
- setTimeout(() => {
1851
- parentTransform.fireChange();
1852
- }, 0);
1853
- })
1854
- );
1883
+ node.onDispose(() => {
1884
+ if (!node.parent || node.parent.flowNodeType === import_document7.FlowNodeBaseType.ROOT) {
1885
+ return;
1886
+ }
1887
+ const parentTransform = node.parent.getData(import_document7.FlowNodeTransformData);
1888
+ parentTransform.fireChange();
1889
+ });
1890
+ let lastDeleteNodeData;
1891
+ node.preDispose.onDispose(() => {
1892
+ lastDeleteNodeData = this.toNodeJSON(node);
1893
+ });
1894
+ node.onDispose(() => {
1895
+ this.fireContentChange({
1896
+ type: "DELETE_NODE" /* DELETE_NODE */,
1897
+ entity: node,
1898
+ toJSON: () => lastDeleteNodeData
1899
+ });
1900
+ });
1855
1901
  }
1856
1902
  if (json.blocks) {
1857
1903
  this.renderJSON(
@@ -1867,19 +1913,95 @@ var WorkflowDocument = class extends import_document7.FlowDocument {
1867
1913
  canvasTransform.update({
1868
1914
  position: subCanvas.parentNode.getNodeMeta()?.canvasPosition
1869
1915
  });
1870
- subCanvas.parentNode.onDispose(() => {
1871
- subCanvas.canvasNode.dispose();
1916
+ if (!isExistedNode) {
1917
+ subCanvas.parentNode.onDispose(() => {
1918
+ subCanvas.canvasNode.dispose();
1919
+ });
1920
+ subCanvas.canvasNode.onDispose(() => {
1921
+ subCanvas.parentNode.dispose();
1922
+ });
1923
+ }
1924
+ }
1925
+ if (!isExistedNode) {
1926
+ this.onNodeCreateEmitter.fire({
1927
+ node,
1928
+ data: json,
1929
+ json
1872
1930
  });
1873
- subCanvas.canvasNode.onDispose(() => {
1874
- subCanvas.parentNode.dispose();
1931
+ } else {
1932
+ this.onNodeUpdateEmitter.fire({
1933
+ node,
1934
+ data: json,
1935
+ json
1875
1936
  });
1876
1937
  }
1877
- this.onNodeCreateEmitter.fire({
1878
- node,
1879
- data: json
1938
+ return node;
1939
+ }
1940
+ /**
1941
+ * 添加节点,如果节点已经存在则不会重复创建
1942
+ * @param data
1943
+ * @param addedNodes
1944
+ */
1945
+ addNode(data, addedNodes, ignoreCreateAndUpdateEvent) {
1946
+ const { id, type = "block", originParent, parent, meta, hidden, index } = data;
1947
+ let node = this.getNode(id);
1948
+ let isNew = false;
1949
+ const register = this.getNodeRegistry(type, data.originParent);
1950
+ if (node && node.flowNodeType !== data.type) {
1951
+ node.dispose();
1952
+ node = void 0;
1953
+ }
1954
+ if (!node) {
1955
+ const { dataRegistries } = register;
1956
+ node = this.entityManager.createEntity(WorkflowNodeEntity, {
1957
+ id,
1958
+ document: this,
1959
+ flowNodeType: type,
1960
+ originParent,
1961
+ meta
1962
+ });
1963
+ const datas = dataRegistries ? this.nodeDataRegistries.concat(...dataRegistries) : this.nodeDataRegistries;
1964
+ node.addInitializeData(datas);
1965
+ node.onDispose(() => this.onNodeDisposeEmitter.fire({ node }));
1966
+ this.options.fromNodeJSON?.(node, data, true);
1967
+ isNew = true;
1968
+ } else {
1969
+ this.options.fromNodeJSON?.(node, data, false);
1970
+ }
1971
+ node.initData({
1972
+ originParent,
1973
+ parent,
1974
+ meta,
1975
+ hidden,
1976
+ index
1880
1977
  });
1978
+ addedNodes?.push(node);
1979
+ if (register.onCreate) {
1980
+ const extendNodes = register.onCreate(node, data);
1981
+ if (extendNodes && addedNodes) {
1982
+ addedNodes.push(...extendNodes);
1983
+ }
1984
+ }
1985
+ if (!ignoreCreateAndUpdateEvent) {
1986
+ if (isNew) {
1987
+ this.onNodeCreateEmitter.fire({
1988
+ node,
1989
+ data,
1990
+ json: data
1991
+ });
1992
+ } else {
1993
+ this.onNodeUpdateEmitter.fire({ node, data, json: data });
1994
+ }
1995
+ }
1881
1996
  return node;
1882
1997
  }
1998
+ get layout() {
1999
+ const layout = this.layouts.find((layout2) => layout2.name == this.currentLayoutKey);
2000
+ if (!layout) {
2001
+ throw new Error(`Unknown flow layout: ${this.currentLayoutKey}`);
2002
+ }
2003
+ return layout;
2004
+ }
1883
2005
  /**
1884
2006
  * 获取默认的 x y 坐标, 默认为当前画布可视区域中心
1885
2007
  * @param type
@@ -2091,11 +2213,7 @@ var WorkflowDocument = class extends import_document7.FlowDocument {
2091
2213
  };
2092
2214
  }
2093
2215
  dispose() {
2094
- if (this.disposed) {
2095
- return;
2096
- }
2097
2216
  super.dispose();
2098
- this.disposed = true;
2099
2217
  this._onReloadEmitter.dispose();
2100
2218
  }
2101
2219
  /**
@@ -2293,15 +2411,10 @@ var WorkflowDragService = class {
2293
2411
  x: nodeStartPosition.x + offset.x,
2294
2412
  y: nodeStartPosition.y + offset.y
2295
2413
  };
2296
- if (node.collapsedChildren?.length > 0) {
2297
- node.collapsedChildren.forEach((childNode) => {
2298
- const childNodeTransformData = childNode.getData(import_document8.FlowNodeTransformData);
2299
- childNodeTransformData.fireChange();
2300
- });
2301
- }
2302
2414
  transform.update({
2303
2415
  position: newPosition
2304
2416
  });
2417
+ this.document.layout.updateAffectedTransform(node);
2305
2418
  positions.push(newPosition);
2306
2419
  });
2307
2420
  this._nodesDragEmitter.fire({
@@ -2822,18 +2935,14 @@ var layoutToPositions = async (nodes, nodePositionMap) => {
2822
2935
  const transform = node.getData(import_core16.TransformData);
2823
2936
  const deltaX = (nodePositionMap[node.id].x - transform.position.x) * v.d / 100;
2824
2937
  const deltaY = (nodePositionMap[node.id].y - transform.bounds.height / 2 - transform.position.y) * v.d / 100;
2825
- if (node.collapsedChildren?.length > 0) {
2826
- node.collapsedChildren.forEach((childNode) => {
2827
- const childNodeTransformData = childNode.getData(import_document10.FlowNodeTransformData);
2828
- childNodeTransformData.fireChange();
2829
- });
2830
- }
2831
2938
  transform.update({
2832
2939
  position: {
2833
2940
  x: transform.position.x + deltaX,
2834
2941
  y: transform.position.y + deltaY
2835
2942
  }
2836
2943
  });
2944
+ const document2 = node.document;
2945
+ document2.layout.updateAffectedTransform(node);
2837
2946
  });
2838
2947
  },
2839
2948
  onComplete: () => {