@bian-womp/spark-workbench 0.2.9 → 0.2.10
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/lib/cjs/index.cjs +172 -128
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/core/AbstractWorkbench.d.ts +2 -2
- package/lib/cjs/src/core/AbstractWorkbench.d.ts.map +1 -1
- package/lib/cjs/src/core/InMemoryWorkbench.d.ts +2 -2
- package/lib/cjs/src/core/InMemoryWorkbench.d.ts.map +1 -1
- package/lib/cjs/src/core/contracts.d.ts +2 -2
- package/lib/cjs/src/core/contracts.d.ts.map +1 -1
- package/lib/cjs/src/misc/DefaultNode.d.ts.map +1 -1
- package/lib/cjs/src/misc/NodeContextMenu.d.ts.map +1 -1
- package/lib/cjs/src/misc/WorkbenchCanvas.d.ts.map +1 -1
- package/lib/esm/index.js +172 -128
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/core/AbstractWorkbench.d.ts +2 -2
- package/lib/esm/src/core/AbstractWorkbench.d.ts.map +1 -1
- package/lib/esm/src/core/InMemoryWorkbench.d.ts +2 -2
- package/lib/esm/src/core/InMemoryWorkbench.d.ts.map +1 -1
- package/lib/esm/src/core/contracts.d.ts +2 -2
- package/lib/esm/src/core/contracts.d.ts.map +1 -1
- package/lib/esm/src/misc/DefaultNode.d.ts.map +1 -1
- package/lib/esm/src/misc/NodeContextMenu.d.ts.map +1 -1
- package/lib/esm/src/misc/WorkbenchCanvas.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -22,11 +22,11 @@ export declare abstract class AbstractWorkbench implements GraphActions, GraphEv
|
|
|
22
22
|
y: number;
|
|
23
23
|
};
|
|
24
24
|
params?: Record<string, unknown>;
|
|
25
|
-
}):
|
|
25
|
+
}): string;
|
|
26
26
|
abstract removeNode(nodeId: string): void;
|
|
27
27
|
abstract connect(edge: Omit<GraphDefinition["edges"][number], "id"> & {
|
|
28
28
|
id?: string;
|
|
29
|
-
}):
|
|
29
|
+
}): string;
|
|
30
30
|
abstract disconnect(edgeId: string): void;
|
|
31
31
|
abstract updateParams(nodeId: string, params: Record<string, unknown>): void;
|
|
32
32
|
abstract on<K extends WorkbenchEventName>(event: K, handler: (e: WorkbenchEventMap[K]) => void): () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractWorkbench.d.ts","sourceRoot":"","sources":["../../../../src/core/AbstractWorkbench.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,8BAAsB,iBAAkB,YAAW,YAAY,EAAE,WAAW;IAC1E,SAAS,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAChC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IAClC,SAAS,CAAC,EAAE,EAAE,mBAAmB,CAAC;gBAEtB,IAAI,EAAE;QAChB,EAAE,EAAE,mBAAmB,CAAC;QACxB,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB;IAOD,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAClD,QAAQ,CAAC,MAAM,IAAI,eAAe;IAClC,QAAQ,CAAC,QAAQ,IAAI,gBAAgB;IACrC,QAAQ,CAAC,OAAO,CACd,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG;QACvD,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACpC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,GACA,
|
|
1
|
+
{"version":3,"file":"AbstractWorkbench.d.ts","sourceRoot":"","sources":["../../../../src/core/AbstractWorkbench.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,OAAO,EACP,UAAU,EACV,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,8BAAsB,iBAAkB,YAAW,YAAY,EAAE,WAAW;IAC1E,SAAS,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC;IAChC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IAClC,SAAS,CAAC,EAAE,EAAE,mBAAmB,CAAC;gBAEtB,IAAI,EAAE;QAChB,EAAE,EAAE,mBAAmB,CAAC;QACxB,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,UAAU,CAAC;KACzB;IAOD,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAClD,QAAQ,CAAC,MAAM,IAAI,eAAe;IAClC,QAAQ,CAAC,QAAQ,IAAI,gBAAgB;IACrC,QAAQ,CAAC,OAAO,CACd,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG;QACvD,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACpC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,GACA,MAAM;IACT,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IACzC,QAAQ,CAAC,OAAO,CACd,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GACnE,MAAM;IACT,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IACzC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAE5E,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,kBAAkB,EACtC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,GACzC,MAAM,IAAI;IAGb,KAAK,IAAI,mBAAmB;CAG7B"}
|
|
@@ -18,11 +18,11 @@ export declare class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
18
18
|
x: number;
|
|
19
19
|
y: number;
|
|
20
20
|
};
|
|
21
|
-
}):
|
|
21
|
+
}): string;
|
|
22
22
|
removeNode(nodeId: string): void;
|
|
23
23
|
connect(edge: Omit<GraphDefinition["edges"][number], "id"> & {
|
|
24
24
|
id?: string;
|
|
25
|
-
}):
|
|
25
|
+
}): string;
|
|
26
26
|
disconnect(edgeId: string): void;
|
|
27
27
|
updateEdgeType(edgeId: string, typeId: string | undefined): void;
|
|
28
28
|
updateParams(nodeId: string, params: Record<string, unknown>): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryWorkbench.d.ts","sourceRoot":"","sources":["../../../../src/core/InMemoryWorkbench.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAElB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,OAAO,CAAC,GAAG,CAA6C;IACxD,OAAO,CAAC,SAAS,CAAgD;IACjE,OAAO,CAAC,SAAS,CAGb;IACJ,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,SAAS,CAGf;IAEF,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAI/B,IAAI,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,MAAM,IAAI,eAAe;IAIzB,iBAAiB,IAAI,IAAI;IAIzB,QAAQ,IAAI,gBAAgB;IA8B5B,OAAO,CACL,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG;QACvD,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACrC,GACA,
|
|
1
|
+
{"version":3,"file":"InMemoryWorkbench.d.ts","sourceRoot":"","sources":["../../../../src/core/InMemoryWorkbench.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAElB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB,qBAAa,iBAAkB,SAAQ,iBAAiB;IACtD,OAAO,CAAC,GAAG,CAA6C;IACxD,OAAO,CAAC,SAAS,CAAgD;IACjE,OAAO,CAAC,SAAS,CAGb;IACJ,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,SAAS,CAGf;IAEF,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAI/B,IAAI,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAU/C,MAAM,IAAI,eAAe;IAIzB,iBAAiB,IAAI,IAAI;IAIzB,QAAQ,IAAI,gBAAgB;IA8B5B,OAAO,CACL,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG;QACvD,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACrC,GACA,MAAM;IAgBT,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAahC,OAAO,CACL,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GACnE,MAAM;IAgBT,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAShC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAYhE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAWnE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAQhE,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAQjE,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAIxD,YAAY,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;IAS7D,YAAY,IAAI;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE;IAOpD,EAAE,CAAC,CAAC,SAAS,kBAAkB,EAC7B,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GACjC,MAAM,IAAI;IAOb,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -15,11 +15,11 @@ export interface GraphActions {
|
|
|
15
15
|
x: number;
|
|
16
16
|
y: number;
|
|
17
17
|
};
|
|
18
|
-
}):
|
|
18
|
+
}): string;
|
|
19
19
|
removeNode(nodeId: string): void;
|
|
20
20
|
connect(edge: Omit<GraphDefinition["edges"][number], "id"> & {
|
|
21
21
|
id?: string;
|
|
22
|
-
}):
|
|
22
|
+
}): string;
|
|
23
23
|
disconnect(edgeId: string): void;
|
|
24
24
|
updateParams(nodeId: string, params: Record<string, unknown>): void;
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../../src/core/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,IAAI,sBAAsB,EACzC,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,eAAe,GAAG,sBAAsB,CAAC;AAErD,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAGhD,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;AAC9E,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAC3D,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,IAAI,eAAe,CAAC;IAC1B,QAAQ,IAAI,gBAAgB,CAAC;IAC7B,OAAO,CACL,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG;QACvD,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACrC,GACA,
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../../src/core/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultNode.d.ts","sourceRoot":"","sources":["../../../../src/misc/DefaultNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AAWvB,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAGrE,eAAO,MAAM,WAAW,yDAuDtB,CAAC;AAGH,wBAAgB,iBAAiB,CAAC,EAChC,EAAE,EACF,KAAK,EACL,MAAM,EACN,UAAU,EACV,KAAK,EACL,YAAY,GACb,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,UAAU,EAAE;QAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAChE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B,2CAwDA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,EAAE,EACF,IAAI,EACJ,aAAa,GACd,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"DefaultNode.d.ts","sourceRoot":"","sources":["../../../../src/misc/DefaultNode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AAWvB,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAGrE,eAAO,MAAM,WAAW,yDAuDtB,CAAC;AAGH,wBAAgB,iBAAiB,CAAC,EAChC,EAAE,EACF,KAAK,EACL,MAAM,EACN,UAAU,EACV,KAAK,EACL,YAAY,GACb,EAAE;IACD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,UAAU,EAAE;QAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAA;KAAE,CAAC;IAChE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B,2CAwDA;AAED,wBAAgB,kBAAkB,CAAC,EACjC,EAAE,EACF,IAAI,EACJ,aAAa,GACd,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,eAAe,CAAC,2CA8HpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeContextMenu.d.ts","sourceRoot":"","sources":["../../../../src/misc/NodeContextMenu.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NodeContextMenu.d.ts","sourceRoot":"","sources":["../../../../src/misc/NodeContextMenu.tsx"],"names":[],"mappings":"AAQA,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,SAAS,EACT,MAAM,EACN,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,kDAwSA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkbenchCanvas.d.ts","sourceRoot":"","sources":["../../../../src/misc/WorkbenchCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"WorkbenchCanvas.d.ts","sourceRoot":"","sources":["../../../../src/misc/WorkbenchCanvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAkBf,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,eAAe;iBAGX,OAAO;cACV,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,MAAM;eAC3C,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,GAAG,CAAC,OAAO;yBACvC,CACnB,MAAM,EAAE,MAAM,KACX;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;+CA2VpD,CAAC"}
|
package/lib/esm/index.js
CHANGED
|
@@ -167,6 +167,7 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
167
167
|
change: { type: "addNode", nodeId: id },
|
|
168
168
|
});
|
|
169
169
|
this.refreshValidation();
|
|
170
|
+
return id;
|
|
170
171
|
}
|
|
171
172
|
removeNode(nodeId) {
|
|
172
173
|
this.def.nodes = this.def.nodes.filter((n) => n.nodeId !== nodeId);
|
|
@@ -191,6 +192,7 @@ class InMemoryWorkbench extends AbstractWorkbench {
|
|
|
191
192
|
change: { type: "connect", edgeId: id },
|
|
192
193
|
});
|
|
193
194
|
this.refreshValidation();
|
|
195
|
+
return id;
|
|
194
196
|
}
|
|
195
197
|
disconnect(edgeId) {
|
|
196
198
|
this.def.edges = this.def.edges.filter((e) => e.id !== edgeId);
|
|
@@ -2081,7 +2083,7 @@ function DefaultNodeHeader({ id, title, status, validation, right, onInvalidate,
|
|
|
2081
2083
|
.join("; ") })), jsxs("span", { className: "text-[10px] opacity-70", children: ["(", id, ")"] })] })] }));
|
|
2082
2084
|
}
|
|
2083
2085
|
function DefaultNodeContent({ id, data, isConnectable, }) {
|
|
2084
|
-
|
|
2086
|
+
useWorkbenchContext();
|
|
2085
2087
|
const { showValues, inputValues, outputValues, toString } = data;
|
|
2086
2088
|
const inputEntries = data.inputHandles ?? [];
|
|
2087
2089
|
const outputEntries = data.outputHandles ?? [];
|
|
@@ -2091,98 +2093,6 @@ function DefaultNodeContent({ id, data, isConnectable, }) {
|
|
|
2091
2093
|
outputs: []};
|
|
2092
2094
|
const isRunning = !!status.activeRuns;
|
|
2093
2095
|
const pct = Math.round(Math.max(0, Math.min(1, Number(status.progress) || 0)) * 100);
|
|
2094
|
-
const handleBake = React.useCallback(async (handleId) => {
|
|
2095
|
-
try {
|
|
2096
|
-
const typeId = ctx.outputTypesMap?.[id]?.[handleId];
|
|
2097
|
-
const rawValue = ctx.outputsMap?.[id]?.[handleId];
|
|
2098
|
-
if (!typeId || rawValue === undefined)
|
|
2099
|
-
return;
|
|
2100
|
-
const unwrap = (v) => isTypedOutput(v) ? getTypedOutputValue(v) : v;
|
|
2101
|
-
const clone = (v) => typeof structuredClone === "function"
|
|
2102
|
-
? structuredClone(v)
|
|
2103
|
-
: JSON.parse(JSON.stringify(v));
|
|
2104
|
-
const coerceIfNeeded = async (fromType, toType, value) => {
|
|
2105
|
-
if (!toType || toType === fromType || !ctx.runner?.coerce)
|
|
2106
|
-
return value;
|
|
2107
|
-
try {
|
|
2108
|
-
return await ctx.runner.coerce(fromType, toType, value);
|
|
2109
|
-
}
|
|
2110
|
-
catch {
|
|
2111
|
-
return value;
|
|
2112
|
-
}
|
|
2113
|
-
};
|
|
2114
|
-
const positions = ctx.wb.getPositions();
|
|
2115
|
-
const pos = positions[id] || { x: 0, y: 0 };
|
|
2116
|
-
const isArray = typeId.endsWith("[]");
|
|
2117
|
-
const baseTypeId = isArray ? typeId.slice(0, -2) : typeId;
|
|
2118
|
-
const tArr = isArray ? ctx.registry?.types.get(typeId) : undefined;
|
|
2119
|
-
const tElem = ctx.registry?.types.get(baseTypeId);
|
|
2120
|
-
const singleTarget = !isArray ? tElem?.bakeTarget : undefined;
|
|
2121
|
-
const arrTarget = isArray ? tArr?.bakeTarget : undefined;
|
|
2122
|
-
const elemTarget = isArray ? tElem?.bakeTarget : undefined;
|
|
2123
|
-
const makeTargetInfo = (bt) => {
|
|
2124
|
-
if (!bt)
|
|
2125
|
-
return undefined;
|
|
2126
|
-
const node = ctx.registry?.nodes.get(String(bt.nodeTypeId));
|
|
2127
|
-
const inType = getInputTypeId(node?.inputs, String(bt.inputHandle || "Value"));
|
|
2128
|
-
return { bt, inType };
|
|
2129
|
-
};
|
|
2130
|
-
// Plan and execute
|
|
2131
|
-
if (singleTarget) {
|
|
2132
|
-
const info = makeTargetInfo(singleTarget);
|
|
2133
|
-
const v = unwrap(rawValue);
|
|
2134
|
-
const coerced = await coerceIfNeeded(typeId, info?.inType, v);
|
|
2135
|
-
ctx.wb.addNode({
|
|
2136
|
-
nodeId: undefined,
|
|
2137
|
-
typeId: String(singleTarget.nodeTypeId),
|
|
2138
|
-
position: { x: pos.x + 180, y: pos.y },
|
|
2139
|
-
params: {},
|
|
2140
|
-
initialInputs: {
|
|
2141
|
-
[String(singleTarget.inputHandle || "Value")]: clone(coerced),
|
|
2142
|
-
},
|
|
2143
|
-
});
|
|
2144
|
-
return;
|
|
2145
|
-
}
|
|
2146
|
-
if (isArray && arrTarget) {
|
|
2147
|
-
const info = makeTargetInfo(arrTarget);
|
|
2148
|
-
const v = unwrap(rawValue);
|
|
2149
|
-
const coerced = await coerceIfNeeded(typeId, info?.inType, v);
|
|
2150
|
-
ctx.wb.addNode({
|
|
2151
|
-
nodeId: undefined,
|
|
2152
|
-
typeId: String(arrTarget.nodeTypeId),
|
|
2153
|
-
position: { x: pos.x + 180, y: pos.y },
|
|
2154
|
-
params: {},
|
|
2155
|
-
initialInputs: {
|
|
2156
|
-
[String(arrTarget.inputHandle || "Value")]: clone(coerced),
|
|
2157
|
-
},
|
|
2158
|
-
});
|
|
2159
|
-
return;
|
|
2160
|
-
}
|
|
2161
|
-
if (isArray && elemTarget && Array.isArray(rawValue)) {
|
|
2162
|
-
const info = makeTargetInfo(elemTarget);
|
|
2163
|
-
const items = rawValue.map(unwrap);
|
|
2164
|
-
const coercedItems = await Promise.all(items.map((v) => coerceIfNeeded(baseTypeId, info?.inType, v)));
|
|
2165
|
-
const COLS = 4;
|
|
2166
|
-
const DX = 180;
|
|
2167
|
-
const DY = 160;
|
|
2168
|
-
coercedItems.forEach((cv, idx) => {
|
|
2169
|
-
const col = idx % COLS;
|
|
2170
|
-
const row = Math.floor(idx / COLS);
|
|
2171
|
-
ctx.wb.addNode({
|
|
2172
|
-
nodeId: undefined,
|
|
2173
|
-
typeId: String(elemTarget.nodeTypeId),
|
|
2174
|
-
position: { x: pos.x + (col + 1) * DX, y: pos.y + row * DY },
|
|
2175
|
-
params: {},
|
|
2176
|
-
initialInputs: {
|
|
2177
|
-
[String(elemTarget.inputHandle || "Value")]: clone(cv),
|
|
2178
|
-
},
|
|
2179
|
-
});
|
|
2180
|
-
});
|
|
2181
|
-
return;
|
|
2182
|
-
}
|
|
2183
|
-
}
|
|
2184
|
-
catch { }
|
|
2185
|
-
}, [ctx, id]);
|
|
2186
2096
|
return (jsxs(Fragment, { children: [jsx("div", { className: cx("h-px", (isRunning || pct > 0) && "bg-blue-200 dark:bg-blue-900"), children: jsx("div", { className: cx("h-px transition-all", (isRunning || pct > 0) && "bg-blue-500"), style: { width: isRunning || pct > 0 ? `${pct}%` : 0 } }) }), jsx(NodeHandles, { data: data, isConnectable: isConnectable, getClassName: ({ kind, id }) => {
|
|
2187
2097
|
const vIssues = (kind === "input" ? validation.inputs : validation.outputs).filter((v) => v.handle === id);
|
|
2188
2098
|
const hasAny = vIssues.length > 0;
|
|
@@ -2210,26 +2120,7 @@ function DefaultNodeContent({ id, data, isConnectable, }) {
|
|
|
2210
2120
|
const txt = toString(resolved.typeId, resolved.value);
|
|
2211
2121
|
return typeof txt === "string" ? txt : String(txt);
|
|
2212
2122
|
})();
|
|
2213
|
-
|
|
2214
|
-
let canBake = false;
|
|
2215
|
-
if (tId?.endsWith("[]")) {
|
|
2216
|
-
const base = tId.slice(0, -2);
|
|
2217
|
-
const tArr = ctx.registry?.types.get(tId);
|
|
2218
|
-
const tElem = ctx.registry?.types.get(base);
|
|
2219
|
-
const arrTarget = tArr?.bakeTarget;
|
|
2220
|
-
const elemTarget = tElem?.bakeTarget;
|
|
2221
|
-
canBake = !!((arrTarget && ctx.registry?.nodes?.has?.(arrTarget.nodeTypeId)) ||
|
|
2222
|
-
(elemTarget && ctx.registry?.nodes?.has?.(elemTarget.nodeTypeId)));
|
|
2223
|
-
}
|
|
2224
|
-
else if (tId) {
|
|
2225
|
-
const t = ctx.registry?.types.get(tId);
|
|
2226
|
-
const target = t?.bakeTarget;
|
|
2227
|
-
canBake = !!(target && ctx.registry?.nodes?.has?.(target.nodeTypeId));
|
|
2228
|
-
}
|
|
2229
|
-
return (jsxs("span", { className: "flex items-center gap-1 w-full", children: [kind === "output" ? (jsxs(Fragment, { children: [canBake && (jsx("button", { onClick: (e) => {
|
|
2230
|
-
e.stopPropagation();
|
|
2231
|
-
handleBake(handleId);
|
|
2232
|
-
}, title: "Bake value", className: "pointer-events-auto border border-gray-300 rounded px-1 py-0.5 text-[10px] bg-white/80 hover:bg-white mr-2", children: "Bake" })), valueText !== undefined && (jsx("span", { className: "opacity-60 truncate pl-1", style: { flex: 1, minWidth: 0, maxWidth: "100%" }, children: valueText })), jsx("span", { className: "truncate shrink-0", style: { maxWidth: "40%" }, children: handleId })] })) : (jsxs(Fragment, { children: [jsx("span", { className: "truncate shrink-0", style: { maxWidth: "40%" }, children: handleId }), valueText !== undefined && (jsx("span", { className: "opacity-60 truncate pr-1", style: { flex: 1, minWidth: 0, maxWidth: "100%" }, children: valueText }))] })), hasAny && (jsx(IssueBadge, { level: hasErr ? "error" : "warning", size: 12, className: "shrink-0", title: title }))] }));
|
|
2123
|
+
return (jsxs("span", { className: "flex items-center gap-1 w-full", children: [kind === "output" ? (jsxs(Fragment, { children: [valueText !== undefined && (jsx("span", { className: "opacity-60 truncate pl-1", style: { flex: 1, minWidth: 0, maxWidth: "100%" }, children: valueText })), jsx("span", { className: "truncate shrink-0", style: { maxWidth: "40%" }, children: handleId })] })) : (jsxs(Fragment, { children: [jsx("span", { className: "truncate shrink-0", style: { maxWidth: "40%" }, children: handleId }), valueText !== undefined && (jsx("span", { className: "opacity-60 truncate pr-1", style: { flex: 1, minWidth: 0, maxWidth: "100%" }, children: valueText }))] })), hasAny && (jsx(IssueBadge, { level: hasErr ? "error" : "warning", size: 12, className: "shrink-0", title: title }))] }));
|
|
2233
2124
|
} })] }));
|
|
2234
2125
|
}
|
|
2235
2126
|
|
|
@@ -2320,7 +2211,7 @@ function DefaultContextMenu({ open, clientPos, onAdd, onClose, }) {
|
|
|
2320
2211
|
}
|
|
2321
2212
|
|
|
2322
2213
|
function NodeContextMenu({ open, clientPos, nodeId, onClose, }) {
|
|
2323
|
-
const { wb, runner, engineKind } = useWorkbenchContext();
|
|
2214
|
+
const { wb, runner, engineKind, registry, outputsMap, outputTypesMap } = useWorkbenchContext();
|
|
2324
2215
|
const ref = useRef(null);
|
|
2325
2216
|
// outside click + ESC
|
|
2326
2217
|
useEffect(() => {
|
|
@@ -2355,39 +2246,181 @@ function NodeContextMenu({ open, clientPos, nodeId, onClose, }) {
|
|
|
2355
2246
|
const x = Math.min(clientPos.x, (typeof window !== "undefined" ? window.innerWidth : 0) -
|
|
2356
2247
|
(MENU_MIN_WIDTH + PADDING));
|
|
2357
2248
|
const y = Math.min(clientPos.y, (typeof window !== "undefined" ? window.innerHeight : 0) - 240);
|
|
2249
|
+
// Bake helpers
|
|
2250
|
+
const getBakeableOutputs = () => {
|
|
2251
|
+
try {
|
|
2252
|
+
const def = wb.export();
|
|
2253
|
+
const node = def.nodes.find((n) => n.nodeId === nodeId);
|
|
2254
|
+
if (!node)
|
|
2255
|
+
return [];
|
|
2256
|
+
const desc = registry.nodes.get(node.typeId);
|
|
2257
|
+
const handles = Object.keys(desc?.outputs || {});
|
|
2258
|
+
const out = [];
|
|
2259
|
+
for (const h of handles) {
|
|
2260
|
+
const tId = outputTypesMap?.[nodeId]?.[h];
|
|
2261
|
+
if (!tId)
|
|
2262
|
+
continue;
|
|
2263
|
+
if (tId.endsWith("[]")) {
|
|
2264
|
+
const base = tId.slice(0, -2);
|
|
2265
|
+
const tArr = registry.types.get(tId);
|
|
2266
|
+
const tElem = registry.types.get(base);
|
|
2267
|
+
const arrT = tArr?.bakeTarget;
|
|
2268
|
+
const elemT = tElem?.bakeTarget;
|
|
2269
|
+
if ((arrT && registry.nodes.has(arrT.nodeTypeId)) ||
|
|
2270
|
+
(elemT && registry.nodes.has(elemT.nodeTypeId)))
|
|
2271
|
+
out.push(h);
|
|
2272
|
+
}
|
|
2273
|
+
else {
|
|
2274
|
+
const t = registry.types.get(tId);
|
|
2275
|
+
const bt = t?.bakeTarget;
|
|
2276
|
+
if (bt && registry.nodes.has(bt.nodeTypeId))
|
|
2277
|
+
out.push(h);
|
|
2278
|
+
}
|
|
2279
|
+
}
|
|
2280
|
+
return out;
|
|
2281
|
+
}
|
|
2282
|
+
catch {
|
|
2283
|
+
return [];
|
|
2284
|
+
}
|
|
2285
|
+
};
|
|
2286
|
+
const doBake = async (handleId) => {
|
|
2287
|
+
try {
|
|
2288
|
+
const typeId = outputTypesMap?.[nodeId]?.[handleId];
|
|
2289
|
+
const raw = outputsMap?.[nodeId]?.[handleId];
|
|
2290
|
+
if (!typeId || raw === undefined)
|
|
2291
|
+
return;
|
|
2292
|
+
const unwrap = (v) => isTypedOutput(v) ? getTypedOutputValue(v) : v;
|
|
2293
|
+
const clone = (v) => typeof structuredClone === "function"
|
|
2294
|
+
? structuredClone(v)
|
|
2295
|
+
: JSON.parse(JSON.stringify(v));
|
|
2296
|
+
const coerceIfNeeded = async (fromType, toType, value) => {
|
|
2297
|
+
if (!toType || toType === fromType || !runner?.coerce)
|
|
2298
|
+
return value;
|
|
2299
|
+
try {
|
|
2300
|
+
return await runner.coerce(fromType, toType, value);
|
|
2301
|
+
}
|
|
2302
|
+
catch {
|
|
2303
|
+
return value;
|
|
2304
|
+
}
|
|
2305
|
+
};
|
|
2306
|
+
const pos = wb.getPositions?.()[nodeId] || { x: 0, y: 0 };
|
|
2307
|
+
const isArray = typeId.endsWith("[]");
|
|
2308
|
+
const baseTypeId = isArray ? typeId.slice(0, -2) : typeId;
|
|
2309
|
+
const tArr = isArray ? registry.types.get(typeId) : undefined;
|
|
2310
|
+
const tElem = registry.types.get(baseTypeId);
|
|
2311
|
+
const singleTarget = !isArray ? tElem?.bakeTarget : undefined;
|
|
2312
|
+
const arrTarget = isArray ? tArr?.bakeTarget : undefined;
|
|
2313
|
+
const elemTarget = isArray ? tElem?.bakeTarget : undefined;
|
|
2314
|
+
if (singleTarget) {
|
|
2315
|
+
const nodeDesc = registry.nodes.get(String(singleTarget.nodeTypeId));
|
|
2316
|
+
const inType = getInputTypeId(nodeDesc?.inputs, String(singleTarget.inputHandle || "Value"));
|
|
2317
|
+
const coerced = await coerceIfNeeded(typeId, inType, unwrap(raw));
|
|
2318
|
+
const newId = wb.addNode({
|
|
2319
|
+
typeId: String(singleTarget.nodeTypeId),
|
|
2320
|
+
position: { x: pos.x + 180, y: pos.y },
|
|
2321
|
+
params: {},
|
|
2322
|
+
});
|
|
2323
|
+
runner.update(wb.export());
|
|
2324
|
+
await runner.whenIdle();
|
|
2325
|
+
runner.setInputs(newId, {
|
|
2326
|
+
[String(singleTarget.inputHandle || "Value")]: coerced,
|
|
2327
|
+
});
|
|
2328
|
+
return;
|
|
2329
|
+
}
|
|
2330
|
+
if (isArray && arrTarget) {
|
|
2331
|
+
const nodeDesc = registry.nodes.get(String(arrTarget.nodeTypeId));
|
|
2332
|
+
const inType = getInputTypeId(nodeDesc?.inputs, String(arrTarget.inputHandle || "Value"));
|
|
2333
|
+
const coerced = await coerceIfNeeded(typeId, inType, unwrap(raw));
|
|
2334
|
+
const newId = `n${Math.random().toString(36).slice(2, 8)}`;
|
|
2335
|
+
wb.addNode({
|
|
2336
|
+
nodeId: newId,
|
|
2337
|
+
typeId: String(arrTarget.nodeTypeId),
|
|
2338
|
+
position: { x: pos.x + 180, y: pos.y },
|
|
2339
|
+
params: {},
|
|
2340
|
+
});
|
|
2341
|
+
runner.update(wb.export());
|
|
2342
|
+
await runner.whenIdle();
|
|
2343
|
+
runner.setInputs(newId, {
|
|
2344
|
+
[String(arrTarget.inputHandle || "Value")]: coerced,
|
|
2345
|
+
});
|
|
2346
|
+
return;
|
|
2347
|
+
}
|
|
2348
|
+
if (isArray && elemTarget && Array.isArray(raw)) {
|
|
2349
|
+
const nodeDesc = registry.nodes.get(String(elemTarget.nodeTypeId));
|
|
2350
|
+
const inType = getInputTypeId(nodeDesc?.inputs, String(elemTarget.inputHandle || "Value"));
|
|
2351
|
+
const items = raw.map(unwrap);
|
|
2352
|
+
const coercedItems = await Promise.all(items.map((v) => coerceIfNeeded(baseTypeId, inType, v)));
|
|
2353
|
+
const COLS = 4;
|
|
2354
|
+
const DX = 180;
|
|
2355
|
+
const DY = 160;
|
|
2356
|
+
for (let idx = 0; idx < coercedItems.length; idx++) {
|
|
2357
|
+
const cv = coercedItems[idx];
|
|
2358
|
+
const col = idx % COLS;
|
|
2359
|
+
const row = Math.floor(idx / COLS);
|
|
2360
|
+
const newId = wb.addNode({
|
|
2361
|
+
typeId: String(elemTarget.nodeTypeId),
|
|
2362
|
+
position: { x: pos.x + (col + 1) * DX, y: pos.y + row * DY },
|
|
2363
|
+
params: {},
|
|
2364
|
+
initialInputs: {
|
|
2365
|
+
[String(elemTarget.inputHandle || "Value")]: clone(cv),
|
|
2366
|
+
},
|
|
2367
|
+
});
|
|
2368
|
+
runner.update(wb.export());
|
|
2369
|
+
await runner.whenIdle();
|
|
2370
|
+
runner.setInputs(newId, {
|
|
2371
|
+
[String(elemTarget.inputHandle || "Value")]: cv,
|
|
2372
|
+
});
|
|
2373
|
+
}
|
|
2374
|
+
return;
|
|
2375
|
+
}
|
|
2376
|
+
}
|
|
2377
|
+
catch { }
|
|
2378
|
+
};
|
|
2358
2379
|
// actions
|
|
2359
|
-
const handleDelete = () => {
|
|
2380
|
+
const handleDelete = useCallback(() => {
|
|
2360
2381
|
wb.removeNode(nodeId);
|
|
2361
2382
|
onClose();
|
|
2362
|
-
};
|
|
2363
|
-
const handleDuplicate = () => {
|
|
2383
|
+
}, [nodeId, wb, onClose]);
|
|
2384
|
+
const handleDuplicate = useCallback(() => {
|
|
2364
2385
|
const def = wb.export();
|
|
2365
2386
|
const n = def.nodes.find((n) => n.nodeId === nodeId);
|
|
2366
2387
|
if (!n)
|
|
2367
2388
|
return onClose();
|
|
2368
2389
|
const pos = wb.getPositions?.()[nodeId] || { x: 0, y: 0 };
|
|
2369
|
-
wb.addNode({
|
|
2390
|
+
wb.addNode({
|
|
2391
|
+
typeId: n.typeId,
|
|
2392
|
+
params: n.params,
|
|
2393
|
+
position: { x: pos.x + 24, y: pos.y + 24 },
|
|
2394
|
+
});
|
|
2370
2395
|
onClose();
|
|
2371
|
-
};
|
|
2372
|
-
|
|
2396
|
+
}, [nodeId, wb, onClose]);
|
|
2397
|
+
useCallback(async (handleId) => {
|
|
2398
|
+
await doBake(handleId);
|
|
2399
|
+
onClose();
|
|
2400
|
+
}, [doBake, onClose]);
|
|
2401
|
+
const handleCopyId = useCallback(async () => {
|
|
2373
2402
|
try {
|
|
2374
2403
|
await navigator.clipboard.writeText(nodeId);
|
|
2375
2404
|
}
|
|
2376
2405
|
catch { }
|
|
2377
2406
|
onClose();
|
|
2378
|
-
};
|
|
2379
|
-
const
|
|
2380
|
-
const handleRunPull = async () => {
|
|
2407
|
+
}, [nodeId, onClose]);
|
|
2408
|
+
const handleRunPull = useCallback(async () => {
|
|
2381
2409
|
try {
|
|
2382
2410
|
await runner.computeNode(nodeId);
|
|
2383
2411
|
}
|
|
2384
2412
|
catch { }
|
|
2385
2413
|
onClose();
|
|
2386
|
-
};
|
|
2414
|
+
}, [nodeId, runner, onClose]);
|
|
2415
|
+
const canRunPull = engineKind()?.toString() === "pull";
|
|
2416
|
+
const outs = getBakeableOutputs();
|
|
2387
2417
|
return (jsxs("div", { ref: ref, tabIndex: -1, className: "fixed z-[1000] bg-white border border-gray-300 rounded-lg shadow-lg p-1 min-w-[180px] text-sm text-gray-700", style: { left: x, top: y }, onClick: (e) => e.stopPropagation(), onMouseDown: (e) => e.stopPropagation(), onWheel: (e) => e.stopPropagation(), onContextMenu: (e) => {
|
|
2388
2418
|
e.preventDefault();
|
|
2389
2419
|
e.stopPropagation();
|
|
2390
|
-
}, children: [jsxs("div", { className: "px-2 py-1 font-semibold text-gray-700", children: ["Node (", nodeId, ")"] }), jsx("button", { className: "block w-full text-left px-2 py-1 hover:bg-gray-100", onClick: handleDelete, children: "Delete" }), jsx("button", { className: "block w-full text-left px-2 py-1 hover:bg-gray-100", onClick: handleDuplicate, children: "Duplicate" }), canRunPull && (jsx("button", { className: "block w-full text-left px-2 py-1 hover:bg-gray-100", onClick: handleRunPull, children: "Run (pull)" })), jsx("div", { className: "h-px bg-gray-200 my-1" }), jsx("button", { className: "block w-full text-left px-2 py-1 hover:bg-gray-100", onClick:
|
|
2420
|
+
}, children: [jsxs("div", { className: "px-2 py-1 font-semibold text-gray-700", children: ["Node (", nodeId, ")"] }), jsx("button", { className: "block w-full text-left px-2 py-1 hover:bg-gray-100", onClick: handleDelete, children: "Delete" }), jsx("button", { className: "block w-full text-left px-2 py-1 hover:bg-gray-100", onClick: handleDuplicate, children: "Duplicate" }), canRunPull && (jsx("button", { className: "block w-full text-left px-2 py-1 hover:bg-gray-100", onClick: handleRunPull, children: "Run (pull)" })), jsx("div", { className: "h-px bg-gray-200 my-1" }), outs.length > 0 && (jsxs(Fragment, { children: [jsx("div", { className: "px-2 py-1 font-semibold text-gray-700", children: "Bake" }), outs.map((h) => (jsxs("button", { className: "block w-full text-left px-2 py-1 hover:bg-gray-100", onClick: async () => {
|
|
2421
|
+
await doBake(h);
|
|
2422
|
+
onClose();
|
|
2423
|
+
}, children: ["Bake: ", h] }, h))), jsx("div", { className: "h-px bg-gray-200 my-1" })] })), jsx("button", { className: "block w-full text-left px-2 py-1 hover:bg-gray-100", onClick: handleCopyId, children: "Copy Node ID" })] }));
|
|
2391
2424
|
}
|
|
2392
2425
|
|
|
2393
2426
|
const WorkbenchCanvas = React.forwardRef(({ showValues, toString, toElement, getDefaultNodeSize }, ref) => {
|
|
@@ -2617,10 +2650,21 @@ const WorkbenchCanvas = React.forwardRef(({ showValues, toString, toElement, get
|
|
|
2617
2650
|
setNodeMenuOpen(false);
|
|
2618
2651
|
}
|
|
2619
2652
|
};
|
|
2620
|
-
const addNodeAt = (typeId, pos) => {
|
|
2653
|
+
const addNodeAt = useCallback((typeId, pos) => {
|
|
2621
2654
|
wb.addNode({ typeId, position: pos });
|
|
2622
|
-
};
|
|
2623
|
-
|
|
2655
|
+
}, [wb]);
|
|
2656
|
+
useCallback((inst) => {
|
|
2657
|
+
rfInstanceRef.current = inst;
|
|
2658
|
+
}, []);
|
|
2659
|
+
const onCloseMenu = useCallback(() => {
|
|
2660
|
+
setMenuOpen(false);
|
|
2661
|
+
}, []);
|
|
2662
|
+
const onCloseNodeMenu = useCallback(() => {
|
|
2663
|
+
setNodeMenuOpen(false);
|
|
2664
|
+
}, []);
|
|
2665
|
+
return (jsx("div", { className: "w-full h-full", onContextMenu: onContextMenu, children: jsx(ReactFlowProvider, { children: jsxs(ReactFlow, { nodes: throttled.nodes, edges: throttled.edges, nodeTypes: nodeTypes, selectionOnDrag: true, onInit: (inst) => {
|
|
2666
|
+
rfInstanceRef.current = inst;
|
|
2667
|
+
}, onConnect: onConnect, onEdgesChange: onEdgesChange, onEdgesDelete: onEdgesDelete, onNodesDelete: onNodesDelete, onNodesChange: onNodesChange, deleteKeyCode: ["Backspace", "Delete"], proOptions: { hideAttribution: true }, noDragClassName: "wb-nodrag", noWheelClassName: "wb-nowheel", noPanClassName: "wb-nopan", fitView: true, children: [jsx(Background, { id: "workbench-canvas-background", variant: BackgroundVariant.Dots, gap: 12, size: 1 }), jsx(MiniMap, {}), jsx(Controls, {}), jsx(DefaultContextMenu, { open: menuOpen, clientPos: menuPos, onAdd: addNodeAt, onClose: onCloseMenu }), jsx(NodeContextMenu, { open: nodeMenuOpen, clientPos: nodeMenuPos, nodeId: nodeAtMenu, onClose: onCloseNodeMenu })] }) }) }));
|
|
2624
2668
|
});
|
|
2625
2669
|
|
|
2626
2670
|
function WorkbenchStudioCanvas({ setRegistry, autoScroll, onAutoScrollChange, example, onExampleChange, engine, onEngineChange, backendKind, onBackendKindChange, httpBaseUrl, onHttpBaseUrlChange, wsUrl, onWsUrlChange, debug, onDebugChange, showValues, onShowValuesChange, hideWorkbench, onHideWorkbenchChange, overrides, onInit, onChange, }) {
|