@octaviaflow/core 3.1.0-beta.65 → 3.1.0-beta.67
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/dist/chunk-5AKA6EJB.js +3003 -0
- package/dist/chunk-5AKA6EJB.js.map +1 -0
- package/dist/components/AgentCard/AgentCard.d.ts +5 -0
- package/dist/components/AgentCard/AgentCard.d.ts.map +1 -1
- package/dist/components/Catalog/Catalog.d.ts +116 -0
- package/dist/components/Catalog/Catalog.d.ts.map +1 -0
- package/dist/components/Catalog/index.d.ts +2 -0
- package/dist/components/Catalog/index.d.ts.map +1 -0
- package/dist/components/ExecutionConsole/ExecutionConsole.d.ts.map +1 -1
- package/dist/components/FlowMinimap/FlowMinimap.d.ts.map +1 -1
- package/dist/components/FlowToolbar/FlowToolbar.d.ts +27 -0
- package/dist/components/FlowToolbar/FlowToolbar.d.ts.map +1 -1
- package/dist/components/FlowToolbar/index.d.ts +1 -1
- package/dist/components/FlowToolbar/index.d.ts.map +1 -1
- package/dist/components/ItemDetail/ItemDetail.d.ts +57 -0
- package/dist/components/ItemDetail/ItemDetail.d.ts.map +1 -0
- package/dist/components/ItemDetail/index.d.ts +2 -0
- package/dist/components/ItemDetail/index.d.ts.map +1 -0
- package/dist/components/MessageBlockBuilder/BlockFieldsEditor.d.ts +18 -0
- package/dist/components/MessageBlockBuilder/BlockFieldsEditor.d.ts.map +1 -0
- package/dist/components/MessageBlockBuilder/MessageBlockBuilder.d.ts +6 -0
- package/dist/components/MessageBlockBuilder/MessageBlockBuilder.d.ts.map +1 -0
- package/dist/components/MessageBlockBuilder/MessagePreview.d.ts +9 -0
- package/dist/components/MessageBlockBuilder/MessagePreview.d.ts.map +1 -0
- package/dist/components/MessageBlockBuilder/TokenPanel.d.ts +17 -0
- package/dist/components/MessageBlockBuilder/TokenPanel.d.ts.map +1 -0
- package/dist/components/MessageBlockBuilder/glyphs.d.ts +18 -0
- package/dist/components/MessageBlockBuilder/glyphs.d.ts.map +1 -0
- package/dist/components/MessageBlockBuilder/index.d.ts +4 -0
- package/dist/components/MessageBlockBuilder/index.d.ts.map +1 -0
- package/dist/components/MessageBlockBuilder/internal.d.ts +33 -0
- package/dist/components/MessageBlockBuilder/internal.d.ts.map +1 -0
- package/dist/components/MessageBlockBuilder/platforms/googleChat.d.ts +7 -0
- package/dist/components/MessageBlockBuilder/platforms/googleChat.d.ts.map +1 -0
- package/dist/components/MessageBlockBuilder/platforms/index.d.ts +7 -0
- package/dist/components/MessageBlockBuilder/platforms/index.d.ts.map +1 -0
- package/dist/components/MessageBlockBuilder/platforms/slack.d.ts +7 -0
- package/dist/components/MessageBlockBuilder/platforms/slack.d.ts.map +1 -0
- package/dist/components/MessageBlockBuilder/platforms/teams.d.ts +7 -0
- package/dist/components/MessageBlockBuilder/platforms/teams.d.ts.map +1 -0
- package/dist/components/MessageBlockBuilder/types.d.ts +183 -0
- package/dist/components/MessageBlockBuilder/types.d.ts.map +1 -0
- package/dist/components/PlanCard/PlanCard.d.ts +35 -0
- package/dist/components/PlanCard/PlanCard.d.ts.map +1 -0
- package/dist/components/PlanCard/index.d.ts +2 -0
- package/dist/components/PlanCard/index.d.ts.map +1 -0
- package/dist/components/PlanPicker/PlanPicker.d.ts +16 -0
- package/dist/components/PlanPicker/PlanPicker.d.ts.map +1 -0
- package/dist/components/PlanPicker/context.d.ts +8 -0
- package/dist/components/PlanPicker/context.d.ts.map +1 -0
- package/dist/components/PlanPicker/index.d.ts +2 -0
- package/dist/components/PlanPicker/index.d.ts.map +1 -0
- package/dist/components/PricingCard/index.d.ts +1 -1
- package/dist/components/PricingCard/index.d.ts.map +1 -1
- package/dist/components/TemplateCard/TemplateCard.d.ts +27 -0
- package/dist/components/TemplateCard/TemplateCard.d.ts.map +1 -1
- package/dist/components/UsageMeter/UsageMeter.d.ts +41 -0
- package/dist/components/UsageMeter/UsageMeter.d.ts.map +1 -0
- package/dist/components/UsageMeter/index.d.ts +2 -0
- package/dist/components/UsageMeter/index.d.ts.map +1 -0
- package/dist/index.cjs +16261 -11888
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17360 -13037
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/workflow/components/FlowCanvas/FlowCanvas.d.ts +3 -3
- package/dist/workflow/components/FlowCanvas/FlowCanvas.d.ts.map +1 -1
- package/dist/workflow/components/FlowNode/FlowNode.d.ts.map +1 -1
- package/dist/workflow/components/Handle/Handle.d.ts.map +1 -1
- package/dist/workflow/components/NodeResizer/NodeResizer.d.ts.map +1 -1
- package/dist/workflow/layout/dagre.d.ts.map +1 -1
- package/dist/workflow/layout/elk.d.ts.map +1 -1
- package/dist/workflow/layout/types.d.ts +1 -1
- package/dist/workflow/layout/types.d.ts.map +1 -1
- package/dist/workflow/utils/parenting.d.ts +26 -6
- package/dist/workflow/utils/parenting.d.ts.map +1 -1
- package/dist/workflow.cjs +97 -41
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.js +12 -13
- package/dist/workflow.js.map +1 -1
- package/package.json +1 -1
|
@@ -107,9 +107,9 @@ export interface FlowCanvasProps {
|
|
|
107
107
|
nodeCollisionGap?: number;
|
|
108
108
|
/**
|
|
109
109
|
* Same as `nodeCollisionGap` but applied to subflow containers
|
|
110
|
-
* (`
|
|
111
|
-
* separated without applying the rule to the action
|
|
112
|
-
* Default falls back to `nodeCollisionGap`.
|
|
110
|
+
* (`isContainerType` — i.e. `group`; `forEach` is a simple node). Lets you
|
|
111
|
+
* keep groups visually separated without applying the rule to the action
|
|
112
|
+
* nodes inside. Default falls back to `nodeCollisionGap`.
|
|
113
113
|
*/
|
|
114
114
|
subflowCollisionGap?: number;
|
|
115
115
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowCanvas.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/FlowCanvas/FlowCanvas.tsx"],"names":[],"mappings":"AAeA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,YAAY,EACjB,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,UAAU,EAEV,QAAQ,EACR,YAAY,EACZ,YAAY,EACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,YAAY,EAAuB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"FlowCanvas.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/FlowCanvas/FlowCanvas.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowNode.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/FlowNode/FlowNode.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,IAAI,EAKJ,YAAkB,GACnB,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"FlowNode.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/FlowNode/FlowNode.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,EACvB,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,IAAI,EAKJ,YAAkB,GACnB,EAAE,aAAa,2CA+Hf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Handle.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/Handle/Handle.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,aAAa,EAAwC,MAAM,OAAO,CAAC;AAEjF,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/D,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,IAAI,EAAE,UAAU,CAAC;IACjB,iDAAiD;IACjD,QAAQ,EAAE,cAAc,CAAC;IACzB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,4FAA4F;IAC5F,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAID,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,EAAsB,EACtB,aAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,KAAS,EACT,KAAS,EACT,KAAK,EACL,SAAS,EACT,KAAK,GACN,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"Handle.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/Handle/Handle.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,aAAa,EAAwC,MAAM,OAAO,CAAC;AAEjF,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/D,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,IAAI,EAAE,UAAU,CAAC;IACjB,iDAAiD;IACjD,QAAQ,EAAE,cAAc,CAAC;IACzB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,4FAA4F;IAC5F,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAID,wBAAgB,MAAM,CAAC,EACrB,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,EAAsB,EACtB,aAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,KAAS,EACT,KAAS,EACT,KAAK,EACL,SAAS,EACT,KAAK,GACN,EAAE,WAAW,2CAuEb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeResizer.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/NodeResizer/NodeResizer.tsx"],"names":[],"mappings":"AAqBA,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;8CAC0C;IAC1C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7D,+CAA+C;IAC/C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgBD,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,QAAa,EACb,SAAc,EACd,QAAQ,EACR,SAAS,EACT,eAAuB,EACvB,QAAQ,EACR,WAAW,EACX,KAAK,GACN,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"NodeResizer.d.ts","sourceRoot":"","sources":["../../../../src/workflow/components/NodeResizer/NodeResizer.tsx"],"names":[],"mappings":"AAqBA,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;8CAC0C;IAC1C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7D,+CAA+C;IAC/C,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgBD,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,QAAa,EACb,SAAc,EACd,QAAQ,EACR,SAAS,EACT,eAAuB,EACvB,QAAQ,EACR,WAAW,EACX,KAAK,GACN,EAAE,gBAAgB,2CAuJlB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dagre.d.ts","sourceRoot":"","sources":["../../../src/workflow/layout/dagre.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAwC,MAAM,WAAW,CAAC;AAEnG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,WAAW,wBAAwB;IACvC,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CACxC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EACD,SAAS,GACT;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,GACtB;IAAE,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;CAAE,EACpE,QAAQ,GAAE,wBAA6B,GACtC,YAAY,
|
|
1
|
+
{"version":3,"file":"dagre.d.ts","sourceRoot":"","sources":["../../../src/workflow/layout/dagre.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAwC,MAAM,WAAW,CAAC;AAEnG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,WAAW,wBAAwB;IACvC,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CACxC;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EACD,SAAS,GACT;IAAE,OAAO,EAAE,SAAS,CAAA;CAAE,GACtB;IAAE,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAA;CAAE,EACpE,QAAQ,GAAE,wBAA6B,GACtC,YAAY,CAkEd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elk.d.ts","sourceRoot":"","sources":["../../../src/workflow/layout/elk.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAwC,MAAM,WAAW,CAAC;AAEnG,OAAO,KAAK,EAAqB,OAAO,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACvC,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,SAAS,CAAC,EACN,SAAS,GACT,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,aAAa,GACb,KAAK,CAAC;CACX;AASD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAE,sBAA2B,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"elk.d.ts","sourceRoot":"","sources":["../../../src/workflow/layout/elk.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAwC,MAAM,WAAW,CAAC;AAEnG,OAAO,KAAK,EAAqB,OAAO,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACvC,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,SAAS,CAAC,EACN,SAAS,GACT,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,aAAa,GACb,KAAK,CAAC;CACX;AASD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,GAAE,sBAA2B,GAAG,YAAY,CAyGjG"}
|
|
@@ -21,7 +21,7 @@ export interface DagreGraph {
|
|
|
21
21
|
height: number;
|
|
22
22
|
[k: string]: unknown;
|
|
23
23
|
}): DagreGraph;
|
|
24
|
-
setEdge(source: string, target: string, label?: Record<string, unknown
|
|
24
|
+
setEdge(source: string, target: string, label?: Record<string, unknown>, name?: string): DagreGraph;
|
|
25
25
|
node(id: string): {
|
|
26
26
|
x: number;
|
|
27
27
|
y: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/workflow/layout/types.ts"],"names":[],"mappings":"AAOA,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,GACd,MAAM,WAAW,CAAC;AAOnB;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE;QACR,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,KAAK,UAAU,CAAC;KAChF,CAAC;IACF,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC;IACpD,mBAAmB,CAAC,EAAE,EAAE,MAAM,OAAO,GAAG,UAAU,CAAC;IACnD,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/workflow/layout/types.ts"],"names":[],"mappings":"AAOA,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,GACd,MAAM,WAAW,CAAC;AAOnB;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE;QACR,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE;YAAE,UAAU,CAAC,EAAE,OAAO,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,KAAK,UAAU,CAAC;KAChF,CAAC;IACF,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC;IACpD,mBAAmB,CAAC,EAAE,EAAE,MAAM,OAAO,GAAG,UAAU,CAAC;IACnD,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,UAAU,CAAC;IAG/F,OAAO,CACL,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,CAAC,EAAE,MAAM,GACZ,UAAU,CAAC;IACd,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACtF,KAAK,IAAI,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC/E;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB"}
|
|
@@ -1,4 +1,19 @@
|
|
|
1
|
-
import type { Position, WorkflowNode } from "../editor";
|
|
1
|
+
import type { NodeKind, Position, WorkflowNode } from "../editor";
|
|
2
|
+
/**
|
|
3
|
+
* Node types that behave as containers — subflow frames whose children nest
|
|
4
|
+
* via `parentId` and render inside the frame.
|
|
5
|
+
*
|
|
6
|
+
* `forEach` is intentionally NOT a container. The DS renders it as a SIMPLE
|
|
7
|
+
* node (1 input on top, Each / Done outputs on the bottom) whose loop body is
|
|
8
|
+
* wired by EDGES, not nested by `parentId` (see ForEachNode). Treating it as
|
|
9
|
+
* a container let drag-to-reparent adopt nodes INTO a forEach; the host then
|
|
10
|
+
* silently dropped those "children" on save because its wire contract has no
|
|
11
|
+
* forEach-children concept — real data loss (DEV-200). Keep this list in sync
|
|
12
|
+
* with the kinds that actually render a child-hosting frame.
|
|
13
|
+
*/
|
|
14
|
+
export declare const CONTAINER_NODE_TYPES: readonly NodeKind[];
|
|
15
|
+
/** True when a node type hosts nested children via `parentId`. */
|
|
16
|
+
export declare function isContainerType(type: NodeKind | undefined): boolean;
|
|
2
17
|
/**
|
|
3
18
|
* Returns the transitive descendants of a node — i.e. every node whose
|
|
4
19
|
* `parentId` chain ends at `nodeId`. Stable order (DFS). The root node
|
|
@@ -20,11 +35,16 @@ export declare function findAncestor(node: WorkflowNode, nodes: WorkflowNode[],
|
|
|
20
35
|
*/
|
|
21
36
|
export declare function clampToParentExtent(node: WorkflowNode, proposed: Position, nodes: WorkflowNode[]): Position;
|
|
22
37
|
/**
|
|
23
|
-
* Hit-test which container node (if any)
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
38
|
+
* Hit-test which container node (if any) contains the given point. Used by
|
|
39
|
+
* drag-to-reparent and drop-to-add to scope a node. Only `group` is a
|
|
40
|
+
* container (see `isContainerType` — `forEach` is a simple node).
|
|
41
|
+
*
|
|
42
|
+
* When containers overlap or nest, the SMALLEST-area container under the
|
|
43
|
+
* point wins. That's the most specific / deepest-nested frame, and it
|
|
44
|
+
* matches the host's own drop hit-test (which picked the deepest container).
|
|
45
|
+
* The previous "last in array order" rule disagreed with the host, so a drag
|
|
46
|
+
* and a drop over the same nested groups could adopt into different parents
|
|
47
|
+
* (DEV-200).
|
|
28
48
|
*/
|
|
29
49
|
export declare function findContainingGroup(point: Position, nodes: WorkflowNode[], exclude?: string[]): WorkflowNode | undefined;
|
|
30
50
|
//# sourceMappingURL=parenting.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parenting.d.ts","sourceRoot":"","sources":["../../../src/workflow/utils/parenting.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"parenting.d.ts","sourceRoot":"","sources":["../../../src/workflow/utils/parenting.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGlE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,QAAQ,EAAc,CAAC;AAEnE,kEAAkE;AAClE,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CA0BnF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,YAAY,EAAE,EACrB,SAAS,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,OAAO,GACtC,YAAY,GAAG,SAAS,CAY1B;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,YAAY,EAAE,GACpB,QAAQ,CAgBV;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,YAAY,EAAE,EACrB,OAAO,GAAE,MAAM,EAAO,GACrB,YAAY,GAAG,SAAS,CAyB1B"}
|
package/dist/workflow.cjs
CHANGED
|
@@ -507,7 +507,7 @@ function createDagreEngine(dagre, defaults = {}) {
|
|
|
507
507
|
}
|
|
508
508
|
for (const e of edges) {
|
|
509
509
|
if (e.hidden) continue;
|
|
510
|
-
g.setEdge(e.source, e.target, { id: e.id });
|
|
510
|
+
g.setEdge(e.source, e.target, { id: e.id }, e.id);
|
|
511
511
|
}
|
|
512
512
|
lib.layout(g);
|
|
513
513
|
const result = [];
|
|
@@ -565,6 +565,13 @@ function createElkEngine(elk, defaults = {}) {
|
|
|
565
565
|
const engineOptions = Object.fromEntries(
|
|
566
566
|
Object.entries(options?.engine ?? {}).map(([k, v]) => [k, String(v)])
|
|
567
567
|
);
|
|
568
|
+
const baseLayeredOptions = {
|
|
569
|
+
"elk.algorithm": algorithm,
|
|
570
|
+
"elk.direction": ELK_DIRECTION[direction],
|
|
571
|
+
"elk.spacing.nodeNode": String(nodeSpacing),
|
|
572
|
+
"elk.layered.spacing.nodeNodeBetweenLayers": String(rankSpacing),
|
|
573
|
+
"elk.layered.considerModelOrder.strategy": "NODES_AND_EDGES"
|
|
574
|
+
};
|
|
568
575
|
const buildChildren = (parentId) => {
|
|
569
576
|
const list = childrenByParent.get(parentId) ?? [];
|
|
570
577
|
return list.map((n) => ({
|
|
@@ -573,10 +580,7 @@ function createElkEngine(elk, defaults = {}) {
|
|
|
573
580
|
height: n.height ?? DEFAULT_NODE_HEIGHT,
|
|
574
581
|
children: childrenByParent.has(n.id) ? buildChildren(n.id) : void 0,
|
|
575
582
|
layoutOptions: childrenByParent.has(n.id) ? {
|
|
576
|
-
|
|
577
|
-
"elk.direction": ELK_DIRECTION[direction],
|
|
578
|
-
"elk.spacing.nodeNode": String(nodeSpacing),
|
|
579
|
-
"elk.layered.spacing.nodeNodeBetweenLayers": String(rankSpacing),
|
|
583
|
+
...baseLayeredOptions,
|
|
580
584
|
...engineOptions
|
|
581
585
|
} : void 0
|
|
582
586
|
}));
|
|
@@ -589,13 +593,8 @@ function createElkEngine(elk, defaults = {}) {
|
|
|
589
593
|
const graph = {
|
|
590
594
|
id: "root",
|
|
591
595
|
layoutOptions: {
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
"elk.spacing.nodeNode": String(nodeSpacing),
|
|
595
|
-
"elk.layered.spacing.nodeNodeBetweenLayers": String(rankSpacing),
|
|
596
|
-
...Object.fromEntries(
|
|
597
|
-
Object.entries(options?.engine ?? {}).map(([k, v]) => [k, String(v)])
|
|
598
|
-
)
|
|
596
|
+
...baseLayeredOptions,
|
|
597
|
+
...engineOptions
|
|
599
598
|
},
|
|
600
599
|
children: buildChildren(void 0),
|
|
601
600
|
edges: elkEdges
|
|
@@ -1098,6 +1097,10 @@ function resolveNodeCollisions(node, proposed, others, opts) {
|
|
|
1098
1097
|
}
|
|
1099
1098
|
|
|
1100
1099
|
// src/workflow/utils/parenting.ts
|
|
1100
|
+
var CONTAINER_NODE_TYPES = ["group"];
|
|
1101
|
+
function isContainerType(type) {
|
|
1102
|
+
return type !== void 0 && CONTAINER_NODE_TYPES.includes(type);
|
|
1103
|
+
}
|
|
1101
1104
|
function descendantsOf(nodeId, nodes) {
|
|
1102
1105
|
const childrenByParent = /* @__PURE__ */ new Map();
|
|
1103
1106
|
for (const n of nodes) {
|
|
@@ -1154,20 +1157,25 @@ function clampToParentExtent(node, proposed, nodes) {
|
|
|
1154
1157
|
};
|
|
1155
1158
|
}
|
|
1156
1159
|
function findContainingGroup(point, nodes, exclude = []) {
|
|
1157
|
-
|
|
1158
|
-
|
|
1160
|
+
let best;
|
|
1161
|
+
let bestArea = Number.POSITIVE_INFINITY;
|
|
1162
|
+
for (const n of nodes) {
|
|
1159
1163
|
if (exclude.includes(n.id)) continue;
|
|
1160
|
-
if (n.type
|
|
1164
|
+
if (!isContainerType(n.type)) continue;
|
|
1161
1165
|
if (n.data && typeof n.data === "object" && n.data.collapsed) {
|
|
1162
1166
|
continue;
|
|
1163
1167
|
}
|
|
1164
1168
|
const w = n.width ?? DEFAULT_NODE_WIDTH;
|
|
1165
1169
|
const h = effectiveHeight(n);
|
|
1166
1170
|
if (point.x >= n.position.x && point.y >= n.position.y && point.x <= n.position.x + w && point.y <= n.position.y + h) {
|
|
1167
|
-
|
|
1171
|
+
const area = w * h;
|
|
1172
|
+
if (area < bestArea) {
|
|
1173
|
+
best = n;
|
|
1174
|
+
bestArea = area;
|
|
1175
|
+
}
|
|
1168
1176
|
}
|
|
1169
1177
|
}
|
|
1170
|
-
return
|
|
1178
|
+
return best;
|
|
1171
1179
|
}
|
|
1172
1180
|
|
|
1173
1181
|
// src/workflow/components/FlowEdge/FlowEdge.tsx
|
|
@@ -1678,6 +1686,7 @@ function FlowNode({
|
|
|
1678
1686
|
const draggedRef = (0, import_react11.useRef)(false);
|
|
1679
1687
|
const CLICK_VS_DRAG_PX = 5;
|
|
1680
1688
|
const handlePointerDown = (e) => {
|
|
1689
|
+
if (e.button !== 0) return;
|
|
1681
1690
|
if (e.target.closest("[data-handle-id]")) return;
|
|
1682
1691
|
if (e.target.closest("[data-flow-no-drag='true']")) return;
|
|
1683
1692
|
e.stopPropagation();
|
|
@@ -1783,6 +1792,7 @@ function Handle({
|
|
|
1783
1792
|
}, [registry, node.id, id, type, position, routeSide, index, total, canStart, canEnd]);
|
|
1784
1793
|
const handlePointerDown = (e) => {
|
|
1785
1794
|
if (!canStart) return;
|
|
1795
|
+
if (e.button !== 0) return;
|
|
1786
1796
|
e.stopPropagation();
|
|
1787
1797
|
e.preventDefault();
|
|
1788
1798
|
dispatch({
|
|
@@ -1858,6 +1868,7 @@ function NodeResizer({
|
|
|
1858
1868
|
const show = isVisible ?? selected;
|
|
1859
1869
|
if (!show) return null;
|
|
1860
1870
|
const beginResize = (e, corner) => {
|
|
1871
|
+
if (e.button !== 0) return;
|
|
1861
1872
|
e.preventDefault();
|
|
1862
1873
|
e.stopPropagation();
|
|
1863
1874
|
e.target.setPointerCapture(e.pointerId);
|
|
@@ -1880,10 +1891,10 @@ function NodeResizer({
|
|
|
1880
1891
|
if (!drag || drag.pointerId !== e.pointerId) return;
|
|
1881
1892
|
const dx = (e.clientX - drag.startClientX) / viewport.zoom;
|
|
1882
1893
|
const dy = (e.clientY - drag.startClientY) / viewport.zoom;
|
|
1894
|
+
const fixedRight = drag.startX + drag.startWidth;
|
|
1895
|
+
const fixedBottom = drag.startY + drag.startHeight;
|
|
1883
1896
|
let nextW = drag.startWidth;
|
|
1884
1897
|
let nextH = drag.startHeight;
|
|
1885
|
-
let nextX = drag.startX;
|
|
1886
|
-
let nextY = drag.startY;
|
|
1887
1898
|
switch (drag.corner) {
|
|
1888
1899
|
case "se":
|
|
1889
1900
|
nextW = drag.startWidth + dx;
|
|
@@ -1892,28 +1903,37 @@ function NodeResizer({
|
|
|
1892
1903
|
case "sw":
|
|
1893
1904
|
nextW = drag.startWidth - dx;
|
|
1894
1905
|
nextH = drag.startHeight + dy;
|
|
1895
|
-
nextX = drag.startX + dx;
|
|
1896
1906
|
break;
|
|
1897
1907
|
case "ne":
|
|
1898
1908
|
nextW = drag.startWidth + dx;
|
|
1899
1909
|
nextH = drag.startHeight - dy;
|
|
1900
|
-
nextY = drag.startY + dy;
|
|
1901
1910
|
break;
|
|
1902
1911
|
case "nw":
|
|
1903
1912
|
nextW = drag.startWidth - dx;
|
|
1904
1913
|
nextH = drag.startHeight - dy;
|
|
1905
|
-
nextX = drag.startX + dx;
|
|
1906
|
-
nextY = drag.startY + dy;
|
|
1907
1914
|
break;
|
|
1908
1915
|
}
|
|
1909
1916
|
if (keepAspectRatio) {
|
|
1910
1917
|
nextH = nextW / drag.aspect;
|
|
1911
|
-
if (drag.corner === "nw" || drag.corner === "ne") {
|
|
1912
|
-
nextY = drag.startY + (drag.startHeight - nextH);
|
|
1913
|
-
}
|
|
1914
1918
|
}
|
|
1915
1919
|
nextW = Math.max(minWidth, maxWidth ? Math.min(maxWidth, nextW) : nextW);
|
|
1916
1920
|
nextH = Math.max(minHeight, maxHeight ? Math.min(maxHeight, nextH) : nextH);
|
|
1921
|
+
let nextX = drag.startX;
|
|
1922
|
+
let nextY = drag.startY;
|
|
1923
|
+
switch (drag.corner) {
|
|
1924
|
+
case "se":
|
|
1925
|
+
break;
|
|
1926
|
+
case "sw":
|
|
1927
|
+
nextX = fixedRight - nextW;
|
|
1928
|
+
break;
|
|
1929
|
+
case "ne":
|
|
1930
|
+
nextY = fixedBottom - nextH;
|
|
1931
|
+
break;
|
|
1932
|
+
case "nw":
|
|
1933
|
+
nextX = fixedRight - nextW;
|
|
1934
|
+
nextY = fixedBottom - nextH;
|
|
1935
|
+
break;
|
|
1936
|
+
}
|
|
1917
1937
|
flow.updateNode(node.id, {
|
|
1918
1938
|
width: nextW,
|
|
1919
1939
|
height: nextH,
|
|
@@ -2743,7 +2763,7 @@ function FlowCanvas(props) {
|
|
|
2743
2763
|
y: d.startPosition.y + delta.dy
|
|
2744
2764
|
};
|
|
2745
2765
|
const clamped = d.skipClamp ? proposed : clampToParentExtent(dragNode, proposed, nodesRef.current);
|
|
2746
|
-
const isContainer = dragNode.type
|
|
2766
|
+
const isContainer = isContainerType(dragNode.type);
|
|
2747
2767
|
const gap = isContainer ? subflowCollisionGapRef.current : nodeCollisionGapRef.current;
|
|
2748
2768
|
const excludeIds = /* @__PURE__ */ new Set([d.nodeId, ...d.descendants.map((kid) => kid.id)]);
|
|
2749
2769
|
const finalPos = resolveNodeCollisions(dragNode, clamped, nodesRef.current, {
|
|
@@ -2795,7 +2815,7 @@ function FlowCanvas(props) {
|
|
|
2795
2815
|
};
|
|
2796
2816
|
}
|
|
2797
2817
|
const clamped = drag.skipClamp ? proposed : clampToParentExtent(dragNode, proposed, nodesRef.current);
|
|
2798
|
-
const isContainer = dragNode.type
|
|
2818
|
+
const isContainer = isContainerType(dragNode.type);
|
|
2799
2819
|
const gap = isContainer ? subflowCollisionGapRef.current : nodeCollisionGapRef.current;
|
|
2800
2820
|
const excludeIds = /* @__PURE__ */ new Set([
|
|
2801
2821
|
drag.nodeId,
|
|
@@ -2818,10 +2838,12 @@ function FlowCanvas(props) {
|
|
|
2818
2838
|
);
|
|
2819
2839
|
}
|
|
2820
2840
|
if (drag.evaluateReparent) {
|
|
2841
|
+
const dragW = dragNode.width ?? DEFAULT_NODE_WIDTH;
|
|
2842
|
+
const dragH = effectiveHeight(dragNode);
|
|
2821
2843
|
const targetGroup = findContainingGroup(
|
|
2822
2844
|
{
|
|
2823
|
-
x: finalPos.x +
|
|
2824
|
-
y: finalPos.y +
|
|
2845
|
+
x: finalPos.x + dragW / 2,
|
|
2846
|
+
y: finalPos.y + dragH / 2
|
|
2825
2847
|
},
|
|
2826
2848
|
nodesRef.current,
|
|
2827
2849
|
[drag.nodeId, ...drag.descendants.map((d) => d.id)]
|
|
@@ -2838,6 +2860,20 @@ function FlowCanvas(props) {
|
|
|
2838
2860
|
extent: nextParentId ? "parent" : void 0
|
|
2839
2861
|
};
|
|
2840
2862
|
changes.push(change.node.replace(drag.nodeId, updated));
|
|
2863
|
+
if (targetGroup) {
|
|
2864
|
+
const pad = containerAutoResizePaddingRef.current;
|
|
2865
|
+
const curW = targetGroup.width ?? DEFAULT_NODE_WIDTH;
|
|
2866
|
+
const curH = targetGroup.height ?? effectiveHeight(targetGroup);
|
|
2867
|
+
const needW = finalPos.x + dragW + pad - targetGroup.position.x;
|
|
2868
|
+
const needH = finalPos.y + dragH + pad - targetGroup.position.y;
|
|
2869
|
+
const grownW = Math.max(curW, needW);
|
|
2870
|
+
const grownH = Math.max(curH, needH);
|
|
2871
|
+
if (grownW !== curW || grownH !== curH) {
|
|
2872
|
+
changes.push(
|
|
2873
|
+
change.node.dimensions(targetGroup.id, { width: grownW, height: grownH })
|
|
2874
|
+
);
|
|
2875
|
+
}
|
|
2876
|
+
}
|
|
2841
2877
|
}
|
|
2842
2878
|
}
|
|
2843
2879
|
if (autoResizeContainersRef.current) {
|
|
@@ -3039,6 +3075,27 @@ function FlowCanvas(props) {
|
|
|
3039
3075
|
y: py - (py - viewport.y) * k
|
|
3040
3076
|
});
|
|
3041
3077
|
};
|
|
3078
|
+
const handleWheelRef = (0, import_react15.useRef)(handleWheel);
|
|
3079
|
+
handleWheelRef.current = handleWheel;
|
|
3080
|
+
(0, import_react15.useEffect)(() => {
|
|
3081
|
+
const el = containerRef.current;
|
|
3082
|
+
if (!el) return;
|
|
3083
|
+
const listener = (e) => handleWheelRef.current(e);
|
|
3084
|
+
el.addEventListener("wheel", listener, { passive: false });
|
|
3085
|
+
return () => el.removeEventListener("wheel", listener);
|
|
3086
|
+
}, []);
|
|
3087
|
+
const zoomAroundCentre = (nextZoom) => {
|
|
3088
|
+
const rect = containerRef.current?.getBoundingClientRect();
|
|
3089
|
+
const vp = viewportRef.current;
|
|
3090
|
+
const cx = rect ? rect.width / 2 : 0;
|
|
3091
|
+
const cy = rect ? rect.height / 2 : 0;
|
|
3092
|
+
const k = nextZoom / vp.zoom;
|
|
3093
|
+
setViewport({
|
|
3094
|
+
zoom: nextZoom,
|
|
3095
|
+
x: cx - (cx - vp.x) * k,
|
|
3096
|
+
y: cy - (cy - vp.y) * k
|
|
3097
|
+
});
|
|
3098
|
+
};
|
|
3042
3099
|
const dispatch = (0, import_react15.useCallback)(
|
|
3043
3100
|
(a) => {
|
|
3044
3101
|
if (a.type === "connection/start") {
|
|
@@ -3130,18 +3187,15 @@ function FlowCanvas(props) {
|
|
|
3130
3187
|
zoomIn: (opts) => {
|
|
3131
3188
|
const step = opts?.step ?? 0.2;
|
|
3132
3189
|
const next = Math.min(maxZoom, viewportRef.current.zoom * (1 + step));
|
|
3133
|
-
|
|
3190
|
+
zoomAroundCentre(next);
|
|
3134
3191
|
},
|
|
3135
3192
|
zoomOut: (opts) => {
|
|
3136
3193
|
const step = opts?.step ?? 0.2;
|
|
3137
3194
|
const next = Math.max(minZoom, viewportRef.current.zoom / (1 + step));
|
|
3138
|
-
|
|
3195
|
+
zoomAroundCentre(next);
|
|
3139
3196
|
},
|
|
3140
3197
|
zoomTo: (level) => {
|
|
3141
|
-
|
|
3142
|
-
...viewportRef.current,
|
|
3143
|
-
zoom: Math.max(minZoom, Math.min(maxZoom, level))
|
|
3144
|
-
});
|
|
3198
|
+
zoomAroundCentre(Math.max(minZoom, Math.min(maxZoom, level)));
|
|
3145
3199
|
},
|
|
3146
3200
|
// transforms
|
|
3147
3201
|
screenToFlowPosition: (p) => screenToFlow(p, viewportRef.current),
|
|
@@ -3232,12 +3286,15 @@ function FlowCanvas(props) {
|
|
|
3232
3286
|
const opt = fitViewOnInit;
|
|
3233
3287
|
const shouldFit = opt === false ? false : opt !== void 0 ? true : !viewportPropProvided;
|
|
3234
3288
|
if (!shouldFit) return;
|
|
3235
|
-
if (nodes.length === 0) return;
|
|
3236
3289
|
const rect = containerRef.current?.getBoundingClientRect();
|
|
3237
3290
|
if (!rect || rect.width === 0 || rect.height === 0) return;
|
|
3238
|
-
|
|
3291
|
+
if (nodes.length === 0) {
|
|
3292
|
+
fitOnInitFiredRef.current = true;
|
|
3293
|
+
return;
|
|
3294
|
+
}
|
|
3239
3295
|
const fitOpts = typeof opt === "object" && opt !== null ? opt : void 0;
|
|
3240
3296
|
const raf = requestAnimationFrame(() => {
|
|
3297
|
+
fitOnInitFiredRef.current = true;
|
|
3241
3298
|
void instance.fitView(fitOpts);
|
|
3242
3299
|
});
|
|
3243
3300
|
return () => cancelAnimationFrame(raf);
|
|
@@ -3293,7 +3350,7 @@ function FlowCanvas(props) {
|
|
|
3293
3350
|
return edges.filter((e) => visibleIds.has(e.source) && visibleIds.has(e.target));
|
|
3294
3351
|
}, [edges, nodes, visibleNodes]);
|
|
3295
3352
|
const orderedNodes = (0, import_react15.useMemo)(() => {
|
|
3296
|
-
const isContainer = (n) => n.type
|
|
3353
|
+
const isContainer = (n) => isContainerType(n.type);
|
|
3297
3354
|
const depth = (n) => {
|
|
3298
3355
|
let d = 0;
|
|
3299
3356
|
let cursor = n.parentId;
|
|
@@ -3335,7 +3392,6 @@ function FlowCanvas(props) {
|
|
|
3335
3392
|
...style
|
|
3336
3393
|
},
|
|
3337
3394
|
onPointerDown: onCanvasPointerDown,
|
|
3338
|
-
onWheel: handleWheel,
|
|
3339
3395
|
onContextMenu: (e) => {
|
|
3340
3396
|
const t = e.target;
|
|
3341
3397
|
const nodeEl = t.closest("[data-node-id]");
|
|
@@ -3438,7 +3494,7 @@ function computeContainerAutoResize(nodes, pending, padding, minWidth, minHeight
|
|
|
3438
3494
|
const HEADER = 56;
|
|
3439
3495
|
const out = [];
|
|
3440
3496
|
for (const parent of projected.values()) {
|
|
3441
|
-
if (parent.type
|
|
3497
|
+
if (!isContainerType(parent.type)) continue;
|
|
3442
3498
|
const children = [];
|
|
3443
3499
|
for (const n of projected.values()) {
|
|
3444
3500
|
if (n.parentId === parent.id) children.push(n);
|