@onerjs/shared-ui-components 8.44.6 → 8.44.8
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/components/bars/CommandButton.module.scss +2 -0
- package/historyStack.js +3 -0
- package/historyStack.js.map +1 -1
- package/nodeGraphSystem/common.module.scss +3 -0
- package/nodeGraphSystem/graphCanvas.d.ts +37 -0
- package/nodeGraphSystem/graphCanvas.js +139 -6
- package/nodeGraphSystem/graphCanvas.js.map +1 -1
- package/nodeGraphSystem/graphMinimap.d.ts +79 -0
- package/nodeGraphSystem/graphMinimap.js +319 -0
- package/nodeGraphSystem/graphMinimap.js.map +1 -0
- package/nodeGraphSystem/graphMinimap.module.scss +30 -0
- package/nodeGraphSystem/graphNode.d.ts +16 -0
- package/nodeGraphSystem/graphNode.js +76 -1
- package/nodeGraphSystem/graphNode.js.map +1 -1
- package/nodeGraphSystem/graphNode.module.scss +61 -0
- package/nodeGraphSystem/graphSearch.d.ts +54 -0
- package/nodeGraphSystem/graphSearch.js +181 -0
- package/nodeGraphSystem/graphSearch.js.map +1 -0
- package/nodeGraphSystem/graphSearch.module.scss +86 -0
- package/nodeGraphSystem/graphStickyNote.d.ts +94 -0
- package/nodeGraphSystem/graphStickyNote.js +310 -0
- package/nodeGraphSystem/graphStickyNote.js.map +1 -0
- package/nodeGraphSystem/graphStickyNote.module.scss +87 -0
- package/nodeGraphSystem/interfaces/nodeData.d.ts +2 -0
- package/nodeGraphSystem/interfaces/nodeData.js.map +1 -1
- package/nodeGraphSystem/interfaces/nodeLocationInfo.d.ts +10 -0
- package/nodeGraphSystem/interfaces/nodeLocationInfo.js.map +1 -1
- package/nodeGraphSystem/interfaces/portData.d.ts +2 -1
- package/nodeGraphSystem/interfaces/portData.js +1 -0
- package/nodeGraphSystem/interfaces/portData.js.map +1 -1
- package/nodeGraphSystem/interfaces/selectionChangedOptions.d.ts +2 -1
- package/nodeGraphSystem/interfaces/selectionChangedOptions.js.map +1 -1
- package/nodeGraphSystem/nodeLink.d.ts +12 -0
- package/nodeGraphSystem/nodeLink.js +77 -0
- package/nodeGraphSystem/nodeLink.js.map +1 -1
- package/nodeGraphSystem/nodePort.js +26 -1
- package/nodeGraphSystem/nodePort.js.map +1 -1
- package/nodeGraphSystem/nodePort.module.scss +37 -0
- package/nodeGraphSystem/stateManager.d.ts +6 -0
- package/nodeGraphSystem/stateManager.js +6 -0
- package/nodeGraphSystem/stateManager.js.map +1 -1
- package/package.json +1 -1
- package/split/splitContainer.js +2 -1
- package/split/splitContainer.js.map +1 -1
|
@@ -144,6 +144,7 @@ export class NodeLink {
|
|
|
144
144
|
constructor(graphCanvas, portA, nodeA, portB, nodeB) {
|
|
145
145
|
this._isVisible = true;
|
|
146
146
|
this._isTargetCandidate = false;
|
|
147
|
+
this._flowAnimationActive = false;
|
|
147
148
|
this.onDisposedObservable = new Observable();
|
|
148
149
|
this._portA = portA;
|
|
149
150
|
this._portB = portB;
|
|
@@ -227,6 +228,82 @@ export class NodeLink {
|
|
|
227
228
|
}
|
|
228
229
|
stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });
|
|
229
230
|
}
|
|
231
|
+
/** Ensure the shared SVG glow filter exists, return its id
|
|
232
|
+
* @param svg the SVG element to check for the filter and add it to if not present
|
|
233
|
+
* @returns the id of the glow filter to use in this SVG
|
|
234
|
+
*/
|
|
235
|
+
static _EnsureGlowFilter(svg) {
|
|
236
|
+
const filterId = "flowDotGlow";
|
|
237
|
+
if (!svg.querySelector(`#${filterId}`)) {
|
|
238
|
+
const ns = "http://www.w3.org/2000/svg";
|
|
239
|
+
const doc = svg.ownerDocument;
|
|
240
|
+
let defs = svg.querySelector("defs");
|
|
241
|
+
if (!defs) {
|
|
242
|
+
defs = doc.createElementNS(ns, "defs");
|
|
243
|
+
svg.prepend(defs);
|
|
244
|
+
}
|
|
245
|
+
const filter = doc.createElementNS(ns, "filter");
|
|
246
|
+
filter.setAttribute("id", filterId);
|
|
247
|
+
filter.setAttribute("x", "-50%");
|
|
248
|
+
filter.setAttribute("y", "-50%");
|
|
249
|
+
filter.setAttribute("width", "200%");
|
|
250
|
+
filter.setAttribute("height", "200%");
|
|
251
|
+
const blur = doc.createElementNS(ns, "feGaussianBlur");
|
|
252
|
+
blur.setAttribute("stdDeviation", "3");
|
|
253
|
+
blur.setAttribute("result", "blur");
|
|
254
|
+
const merge = doc.createElementNS(ns, "feMerge");
|
|
255
|
+
const n1 = doc.createElementNS(ns, "feMergeNode");
|
|
256
|
+
n1.setAttribute("in", "blur");
|
|
257
|
+
const n2 = doc.createElementNS(ns, "feMergeNode");
|
|
258
|
+
n2.setAttribute("in", "SourceGraphic");
|
|
259
|
+
merge.appendChild(n1);
|
|
260
|
+
merge.appendChild(n2);
|
|
261
|
+
filter.appendChild(blur);
|
|
262
|
+
filter.appendChild(merge);
|
|
263
|
+
defs.appendChild(filter);
|
|
264
|
+
}
|
|
265
|
+
return filterId;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Triggers a brief animated dot traveling along the link path from port A to port B.
|
|
269
|
+
* @param durationMs how long the animation takes (default 600ms)
|
|
270
|
+
* @param color the color of the dot (default green)
|
|
271
|
+
*/
|
|
272
|
+
triggerFlowAnimation(durationMs = 600, color = "#33B766") {
|
|
273
|
+
if (this._flowAnimationActive || !this._path.parentElement) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const totalLength = this._path.getTotalLength();
|
|
277
|
+
if (totalLength === 0) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
this._flowAnimationActive = true;
|
|
281
|
+
const svg = this._path.parentElement;
|
|
282
|
+
const ns = "http://www.w3.org/2000/svg";
|
|
283
|
+
const doc = this._path.ownerDocument;
|
|
284
|
+
const filterId = NodeLink._EnsureGlowFilter(svg);
|
|
285
|
+
const dot = doc.createElementNS(ns, "circle");
|
|
286
|
+
dot.setAttribute("r", "6");
|
|
287
|
+
dot.setAttribute("fill", color);
|
|
288
|
+
dot.setAttribute("filter", `url(#${filterId})`);
|
|
289
|
+
dot.style.pointerEvents = "none";
|
|
290
|
+
svg.appendChild(dot);
|
|
291
|
+
const startTime = performance.now();
|
|
292
|
+
const animate = (now) => {
|
|
293
|
+
const t = Math.min((now - startTime) / durationMs, 1);
|
|
294
|
+
const pt = this._path.getPointAtLength(t * totalLength);
|
|
295
|
+
dot.setAttribute("cx", String(pt.x));
|
|
296
|
+
dot.setAttribute("cy", String(pt.y));
|
|
297
|
+
if (t < 1) {
|
|
298
|
+
requestAnimationFrame(animate);
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
dot.remove();
|
|
302
|
+
this._flowAnimationActive = false;
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
requestAnimationFrame(animate);
|
|
306
|
+
}
|
|
230
307
|
dispose(notify = true) {
|
|
231
308
|
this._graphCanvas.stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);
|
|
232
309
|
if (this._path.parentElement) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeLink.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/nodeLink.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,wCAA6B;AAMlD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,YAAY,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,wBAAwB,CAAC;AAEjD,MAAM,OAAO,QAAQ;IAejB,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED,IAAW,iBAAiB,CAAC,KAAc;QACvC,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;YACpC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAEhC,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IAED,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAW,SAAS,CAAC,KAAc;QAC/B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,cAAc,CAAC,IAAa;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC;QACrD,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC;YAC3H,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,SAAiC,CAAC;QAChE,MAAM,QAAQ,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;QAE7C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC1C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACvC,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAExC,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,iDAAiD;QAExE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;YAC/E,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzE,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,qBAAqB,EAAE,CAAC;QAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC9B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC;QAE7B,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACjE,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAEjE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC1D,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YACzD,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAC7D,CAAC;QAED,6CAA6C;QAC7C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,IAAI,IAAI,CAAC;QACjB,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,MAAM,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;YAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;YACxF,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,GAAG,aAAa,IAAI,MAAM,IAAI,IAAI,GAAG,aAAa,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;YAC1I,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,GAAG,aAAa,IAAI,MAAM,IAAI,IAAI,GAAG,aAAa,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QACvJ,CAAC;QAED,iCAAiC;QACjC,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE1F,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpF,MAAM,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,IAAI,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjF,eAAe,GAAG,EAAE,CAAC;YACzB,CAAC;QACL,CAAC;QAED,IAAI,eAAe,IAAI,eAAe,KAAK,eAAe,EAAE,CAAC;YACzD,WAAW;YACX,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;YACxC,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC,CAAC;YAE1H,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,gBAAgB,CAAC,CAAC;gBAC1F,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;gBAC7E,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;gBAC7E,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAmB,CAAC;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAmB,CAAC;YAE3D,MAAM,UAAU,GAAG,gBAAgB,eAAe,IAAI,eAAe,EAAE,CAAC;YACxE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,UAAU,CAAC;YAE/B,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACvC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAEvC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACnC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;YAElD,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACrC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;YAElD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,UAAU,GAAG,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,YAAmB,WAAiC,EAAE,KAAe,EAAE,KAAgB,EAAE,KAAgB,EAAE,KAAiB;QA/KpH,eAAU,GAAG,IAAI,CAAC;QAClB,uBAAkB,GAAG,KAAK,CAAC;QAG5B,yBAAoB,GAAG,IAAI,UAAU,EAAY,CAAC;QA4KrD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAEhC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;QAC7C,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC;QAElC,cAAc;QACd,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAEzC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5B,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QACrF,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAE5D,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAErC,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,CAAC,GAAe,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEzE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,SAAS;YACT,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3G,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;YACpC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC7C,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;gBAChD,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO,CAAC,GAAe;QACnB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAO,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAO,CAAC,QAAQ,CAAC;QAErC,MAAM,SAAS,GAAG,CAAC,OAAkB,EAAE,EAAE;YACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;YAEtC,uBAAuB;YACvB,IAAI,CAAC,OAAO,EAAE,CAAC;YAEf,2BAA2B;YAC3B,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,6BAA6B,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC,CAAC;YAC/G,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,6BAA6B,CAAC,QAAQ,CAAC,MAAM,CAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAEhH,YAAY,CAAC,2BAA2B,CAAC,eAAe,EAAE,CAAC;QAC/D,CAAC,CAAC;QAEF,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC;gBACpE,OAAO;YACX,CAAC;YAED,0CAA0C;YAC1C,YAAY,CAAC,0BAA0B,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE3D,YAAY,CAAC,4BAA4B,CAAC,eAAe,CAAC;gBACtD,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,iBAAiB,EAAE,IAAI;aAC1B,CAAC,CAAC;YAEH,qFAAqF;YACrF,YAAY,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;YAE5C,OAAO;QACX,CAAC;QAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC;gBACpE,OAAO;YACX,CAAC;YAED,yCAAyC;YACzC,YAAY,CAAC,0BAA0B,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAE3D,YAAY,CAAC,4BAA4B,CAAC,eAAe,CAAC;gBACtD,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,iBAAiB,EAAE,IAAI;aAC1B,CAAC,CAAC;YAEH,qFAAqF;YACrF,YAAY,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;YAC5C,OAAO;QACX,CAAC;QAED,YAAY,CAAC,4BAA4B,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnF,CAAC;IAEM,OAAO,CAAC,MAAM,GAAG,IAAI;QACxB,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAErG,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC;YACpC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;gBAC/B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7D,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAEzE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAO,CAAC,QAAQ,CAAC,CAAC;YAE3D,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEhD,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QACtC,CAAC;IACL,CAAC;CACJ","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { FrameNodePort } from \"./frameNodePort\";\r\nimport type { NodePort } from \"./nodePort\";\r\nimport type { GraphNode } from \"./graphNode\";\r\nimport type { GraphCanvasComponent } from \"./graphCanvas\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport { RefreshNode } from \"./tools\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\nimport * as styles from \"./nodeLink.module.scss\";\r\n\r\nexport class NodeLink {\r\n private _graphCanvas: GraphCanvasComponent;\r\n private _portA: NodePort | FrameNodePort;\r\n private _portB?: NodePort | FrameNodePort;\r\n private _nodeA: GraphNode;\r\n private _nodeB?: GraphNode;\r\n private _path: SVGPathElement;\r\n private _selectionPath: SVGPathElement;\r\n private _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n private _isVisible = true;\r\n private _isTargetCandidate = false;\r\n private _gradient: Nullable<SVGLinearGradientElement>;\r\n\r\n public onDisposedObservable = new Observable<NodeLink>();\r\n\r\n public get isTargetCandidate() {\r\n return this._isTargetCandidate;\r\n }\r\n\r\n public set isTargetCandidate(value: boolean) {\r\n if (this._isTargetCandidate === value) {\r\n return;\r\n }\r\n\r\n this._isTargetCandidate = value;\r\n\r\n if (value) {\r\n this._path.classList.add(styles[\"target-candidate\"]);\r\n } else {\r\n this._path.classList.remove(styles[\"target-candidate\"]);\r\n }\r\n }\r\n\r\n public get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n this._isVisible = value;\r\n\r\n if (!value) {\r\n this._path.classList.add(commonStyles[\"hidden\"]);\r\n this._selectionPath.classList.add(commonStyles[\"hidden\"]);\r\n } else {\r\n this._path.classList.remove(commonStyles[\"hidden\"]);\r\n this._selectionPath.classList.remove(commonStyles[\"hidden\"]);\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n public get portA() {\r\n return this._portA;\r\n }\r\n\r\n public get portB() {\r\n return this._portB;\r\n }\r\n\r\n public get nodeA() {\r\n return this._nodeA;\r\n }\r\n\r\n public get nodeB() {\r\n return this._nodeB;\r\n }\r\n\r\n public intersectsWith(rect: DOMRect) {\r\n const locatRect = this._path.getBoundingClientRect();\r\n if (rect.left > locatRect.right || rect.right < locatRect.left || rect.top > locatRect.bottom || rect.bottom < locatRect.top) {\r\n return false;\r\n }\r\n\r\n const zoom = this._graphCanvas.zoom;\r\n const svg = this._graphCanvas.svgCanvas as any as SVGSVGElement;\r\n const rootRect = svg.getBoundingClientRect();\r\n\r\n const left = (rect.x - rootRect.x) / zoom;\r\n const top = (rect.y - rootRect.y) / zoom;\r\n const right = left + rect.width / zoom;\r\n const bottom = top + rect.height / zoom;\r\n\r\n const sampleRate = 10; // Checking 10 times on the path should be enough\r\n\r\n for (let index = 0; index < 1; index += 1 / sampleRate) {\r\n const point = this._path.getPointAtLength(index * this._path.getTotalLength());\r\n if (left < point.x && right > point.x && top < point.y && bottom > point.y) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public update(endX = 0, endY = 0, straight = false) {\r\n const rectA = this._portA.element.getBoundingClientRect();\r\n const rootRect = this._graphCanvas.canvasContainer.getBoundingClientRect();\r\n const zoom = this._graphCanvas.zoom;\r\n const xOffset = rootRect.left;\r\n const yOffset = rootRect.top;\r\n\r\n const startX = (rectA.left - xOffset + 0.5 * rectA.width) / zoom;\r\n const startY = (rectA.top - yOffset + 0.5 * rectA.height) / zoom;\r\n\r\n if (this._portB) {\r\n const rectB = this._portB.element.getBoundingClientRect();\r\n endX = (rectB.left - xOffset + 0.5 * rectB.width) / zoom;\r\n endY = (rectB.top - yOffset + 0.5 * rectB.height) / zoom;\r\n }\r\n\r\n // We need a volume to allow gradient to work\r\n if (startY === endY) {\r\n endY += 0.01;\r\n }\r\n\r\n if (straight) {\r\n this._path.setAttribute(\"d\", `M${startX},${startY} L${endX},${endY}`);\r\n this._path.setAttribute(\"stroke-dasharray\", \"10, 10\");\r\n this._path.setAttribute(\"stroke-linecap\", \"round\");\r\n } else {\r\n const deltaX = endX - startX;\r\n const deltaY = endY - startY;\r\n const tangentLength = Math.min(Math.sqrt(deltaX * deltaX + deltaY * deltaY) * 0.5, 300);\r\n this._path.setAttribute(\"d\", `M${startX},${startY} C${startX + tangentLength},${startY} ${endX - tangentLength},${endY} ${endX},${endY}`);\r\n this._selectionPath.setAttribute(\"d\", `M${startX},${startY} C${startX + tangentLength},${startY} ${endX - tangentLength},${endY} ${endX},${endY}`);\r\n }\r\n\r\n // No red as it means no type yet\r\n let extractedColorB = \"\";\r\n const extractedColorA = this._graphCanvas.stateManager.getPortColor(this._portA.portData);\r\n\r\n if (this._portB) {\r\n extractedColorB = this._graphCanvas.stateManager.getPortColor(this._portB.portData);\r\n const splitComponents = extractedColorB.split(\"_\").map((v) => parseInt(v));\r\n if (splitComponents[0] > 0 && splitComponents[1] === 0 && splitComponents[2] === 0) {\r\n extractedColorB = \"\";\r\n }\r\n }\r\n\r\n if (extractedColorB && extractedColorA !== extractedColorB) {\r\n // Gradient\r\n const svg = this._graphCanvas.svgCanvas;\r\n const defs = svg.querySelector(\"defs\") || svg.appendChild(document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\"));\r\n\r\n if (!this._gradient) {\r\n this._gradient = document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\r\n defs.appendChild(this._gradient);\r\n const stop1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\r\n this._gradient.appendChild(stop1);\r\n const stop2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\r\n this._gradient.appendChild(stop2);\r\n }\r\n\r\n const stop1 = this._gradient.children[0] as SVGStopElement;\r\n const stop2 = this._gradient.children[1] as SVGStopElement;\r\n\r\n const gradientId = `linkGradient_${extractedColorA}_${extractedColorB}`;\r\n this._gradient.id = gradientId;\r\n\r\n this._gradient.setAttribute(\"x1\", startX < endX ? \"0\" : \"1\");\r\n this._gradient.setAttribute(\"y1\", \"0\");\r\n this._gradient.setAttribute(\"x2\", startX < endX ? \"1\" : \"0\");\r\n this._gradient.setAttribute(\"y2\", \"0\");\r\n\r\n stop1.setAttribute(\"offset\", \"0%\");\r\n stop1.setAttribute(\"stop-color\", extractedColorA);\r\n\r\n stop2.setAttribute(\"offset\", \"100%\");\r\n stop2.setAttribute(\"stop-color\", extractedColorB);\r\n\r\n this._path.setAttribute(\"stroke\", `url(#${gradientId})`);\r\n } else {\r\n this._path.setAttribute(\"stroke\", extractedColorA);\r\n }\r\n }\r\n\r\n public get path() {\r\n return this._path;\r\n }\r\n\r\n public get selectionPath() {\r\n return this._selectionPath;\r\n }\r\n\r\n public constructor(graphCanvas: GraphCanvasComponent, portA: NodePort, nodeA: GraphNode, portB?: NodePort, nodeB?: GraphNode) {\r\n this._portA = portA;\r\n this._portB = portB;\r\n this._nodeA = nodeA;\r\n this._nodeB = nodeB;\r\n this._graphCanvas = graphCanvas;\r\n\r\n const document = portA.element.ownerDocument;\r\n const svg = graphCanvas.svgCanvas;\r\n\r\n // Create path\r\n this._path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._path.setAttribute(\"fill\", \"none\");\r\n this._path.classList.add(styles[\"link\"]);\r\n\r\n svg.appendChild(this._path);\r\n\r\n this._selectionPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._selectionPath.setAttribute(\"fill\", \"none\");\r\n this._selectionPath.classList.add(styles[\"selection-link\"]);\r\n\r\n svg.appendChild(this._selectionPath);\r\n\r\n this._selectionPath.onmousedown = (evt: MouseEvent) => this.onClick(evt);\r\n\r\n if (this._portB) {\r\n // Update\r\n this.update();\r\n }\r\n\r\n this._onSelectionChangedObserver = this._graphCanvas.stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection } = options || {};\r\n if (selection === this) {\r\n this._path.classList.add(styles[\"selected\"]);\r\n this._selectionPath.classList.add(styles[\"selected\"]);\r\n } else {\r\n this._path.classList.remove(styles[\"selected\"]);\r\n this._selectionPath.classList.remove(styles[\"selected\"]);\r\n }\r\n });\r\n }\r\n\r\n onClick(evt: MouseEvent) {\r\n const stateManager = this._graphCanvas.stateManager;\r\n const nodeA = this._nodeA;\r\n const pointA = this._portA.portData;\r\n const nodeB = this._nodeB!;\r\n const pointB = this._portB!.portData;\r\n\r\n const reconnect = (newNode: GraphNode) => {\r\n const newBlock = newNode.content.data;\r\n\r\n // Delete previous link\r\n this.dispose();\r\n\r\n // Connect to the new block\r\n this._graphCanvas.connectNodes(nodeA, pointA, newNode, newNode.getPortDataForPortDataContent(newBlock.input)!);\r\n this._graphCanvas.connectNodes(newNode, newNode.getPortDataForPortDataContent(newBlock.output)!, nodeB, pointB);\r\n\r\n stateManager.onRebuildRequiredObservable.notifyObservers();\r\n };\r\n\r\n if (evt.altKey) {\r\n if (!stateManager.isElbowConnectionAllowed(this._portA, this._portB!)) {\r\n return;\r\n }\r\n\r\n // Create an elbow at the clicked location\r\n stateManager.onNewNodeCreatedObservable.addOnce(reconnect);\r\n\r\n stateManager.onNewBlockRequiredObservable.notifyObservers({\r\n type: \"ElbowBlock\",\r\n targetX: evt.clientX,\r\n targetY: evt.clientY,\r\n needRepositioning: true,\r\n });\r\n\r\n // Make sure the undo/redo stack is reverted as we did 2 actions (create and connect)\r\n stateManager.historyStack.collapseLastTwo();\r\n\r\n return;\r\n }\r\n\r\n if (evt.ctrlKey) {\r\n if (!stateManager.isDebugConnectionAllowed(this._portA, this._portB!)) {\r\n return;\r\n }\r\n\r\n // Create a debug at the clicked location\r\n stateManager.onNewNodeCreatedObservable.addOnce(reconnect);\r\n\r\n stateManager.onNewBlockRequiredObservable.notifyObservers({\r\n type: \"DebugBlock\",\r\n targetX: evt.clientX,\r\n targetY: evt.clientY,\r\n needRepositioning: true,\r\n });\r\n\r\n // Make sure the undo/redo stack is reverted as we did 2 actions (create and connect)\r\n stateManager.historyStack.collapseLastTwo();\r\n return;\r\n }\r\n\r\n stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });\r\n }\r\n\r\n public dispose(notify = true) {\r\n this._graphCanvas.stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n\r\n if (this._path.parentElement) {\r\n this._path.parentElement.removeChild(this._path);\r\n }\r\n\r\n if (this._selectionPath.parentElement) {\r\n this._selectionPath.parentElement.removeChild(this._selectionPath);\r\n }\r\n\r\n if (this._gradient) {\r\n if (this._gradient.parentElement) {\r\n this._gradient.parentElement.removeChild(this._gradient);\r\n }\r\n }\r\n\r\n if (this._nodeB) {\r\n this._nodeA.links.splice(this._nodeA.links.indexOf(this), 1);\r\n this._nodeB.links.splice(this._nodeB.links.indexOf(this), 1);\r\n this._graphCanvas.links.splice(this._graphCanvas.links.indexOf(this), 1);\r\n\r\n this._portA.portData.disconnectFrom(this._portB!.portData);\r\n\r\n RefreshNode(this._nodeB, undefined, undefined, this._graphCanvas);\r\n }\r\n\r\n if (notify) {\r\n this.onDisposedObservable.notifyObservers(this);\r\n\r\n this.onDisposedObservable.clear();\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"nodeLink.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/nodeLink.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { FrameNodePort } from \"./frameNodePort\";\r\nimport type { NodePort } from \"./nodePort\";\r\nimport type { GraphNode } from \"./graphNode\";\r\nimport type { GraphCanvasComponent } from \"./graphCanvas\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport { RefreshNode } from \"./tools\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\nimport * as styles from \"./nodeLink.module.scss\";\r\n\r\nexport class NodeLink {\r\n private _graphCanvas: GraphCanvasComponent;\r\n private _portA: NodePort | FrameNodePort;\r\n private _portB?: NodePort | FrameNodePort;\r\n private _nodeA: GraphNode;\r\n private _nodeB?: GraphNode;\r\n private _path: SVGPathElement;\r\n private _selectionPath: SVGPathElement;\r\n private _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n private _isVisible = true;\r\n private _isTargetCandidate = false;\r\n private _gradient: Nullable<SVGLinearGradientElement>;\r\n private _flowAnimationActive = false;\r\n\r\n public onDisposedObservable = new Observable<NodeLink>();\r\n\r\n public get isTargetCandidate() {\r\n return this._isTargetCandidate;\r\n }\r\n\r\n public set isTargetCandidate(value: boolean) {\r\n if (this._isTargetCandidate === value) {\r\n return;\r\n }\r\n\r\n this._isTargetCandidate = value;\r\n\r\n if (value) {\r\n this._path.classList.add(styles[\"target-candidate\"]);\r\n } else {\r\n this._path.classList.remove(styles[\"target-candidate\"]);\r\n }\r\n }\r\n\r\n public get isVisible() {\r\n return this._isVisible;\r\n }\r\n\r\n public set isVisible(value: boolean) {\r\n this._isVisible = value;\r\n\r\n if (!value) {\r\n this._path.classList.add(commonStyles[\"hidden\"]);\r\n this._selectionPath.classList.add(commonStyles[\"hidden\"]);\r\n } else {\r\n this._path.classList.remove(commonStyles[\"hidden\"]);\r\n this._selectionPath.classList.remove(commonStyles[\"hidden\"]);\r\n }\r\n\r\n this.update();\r\n }\r\n\r\n public get portA() {\r\n return this._portA;\r\n }\r\n\r\n public get portB() {\r\n return this._portB;\r\n }\r\n\r\n public get nodeA() {\r\n return this._nodeA;\r\n }\r\n\r\n public get nodeB() {\r\n return this._nodeB;\r\n }\r\n\r\n public intersectsWith(rect: DOMRect) {\r\n const locatRect = this._path.getBoundingClientRect();\r\n if (rect.left > locatRect.right || rect.right < locatRect.left || rect.top > locatRect.bottom || rect.bottom < locatRect.top) {\r\n return false;\r\n }\r\n\r\n const zoom = this._graphCanvas.zoom;\r\n const svg = this._graphCanvas.svgCanvas as any as SVGSVGElement;\r\n const rootRect = svg.getBoundingClientRect();\r\n\r\n const left = (rect.x - rootRect.x) / zoom;\r\n const top = (rect.y - rootRect.y) / zoom;\r\n const right = left + rect.width / zoom;\r\n const bottom = top + rect.height / zoom;\r\n\r\n const sampleRate = 10; // Checking 10 times on the path should be enough\r\n\r\n for (let index = 0; index < 1; index += 1 / sampleRate) {\r\n const point = this._path.getPointAtLength(index * this._path.getTotalLength());\r\n if (left < point.x && right > point.x && top < point.y && bottom > point.y) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public update(endX = 0, endY = 0, straight = false) {\r\n const rectA = this._portA.element.getBoundingClientRect();\r\n const rootRect = this._graphCanvas.canvasContainer.getBoundingClientRect();\r\n const zoom = this._graphCanvas.zoom;\r\n const xOffset = rootRect.left;\r\n const yOffset = rootRect.top;\r\n\r\n const startX = (rectA.left - xOffset + 0.5 * rectA.width) / zoom;\r\n const startY = (rectA.top - yOffset + 0.5 * rectA.height) / zoom;\r\n\r\n if (this._portB) {\r\n const rectB = this._portB.element.getBoundingClientRect();\r\n endX = (rectB.left - xOffset + 0.5 * rectB.width) / zoom;\r\n endY = (rectB.top - yOffset + 0.5 * rectB.height) / zoom;\r\n }\r\n\r\n // We need a volume to allow gradient to work\r\n if (startY === endY) {\r\n endY += 0.01;\r\n }\r\n\r\n if (straight) {\r\n this._path.setAttribute(\"d\", `M${startX},${startY} L${endX},${endY}`);\r\n this._path.setAttribute(\"stroke-dasharray\", \"10, 10\");\r\n this._path.setAttribute(\"stroke-linecap\", \"round\");\r\n } else {\r\n const deltaX = endX - startX;\r\n const deltaY = endY - startY;\r\n const tangentLength = Math.min(Math.sqrt(deltaX * deltaX + deltaY * deltaY) * 0.5, 300);\r\n this._path.setAttribute(\"d\", `M${startX},${startY} C${startX + tangentLength},${startY} ${endX - tangentLength},${endY} ${endX},${endY}`);\r\n this._selectionPath.setAttribute(\"d\", `M${startX},${startY} C${startX + tangentLength},${startY} ${endX - tangentLength},${endY} ${endX},${endY}`);\r\n }\r\n\r\n // No red as it means no type yet\r\n let extractedColorB = \"\";\r\n const extractedColorA = this._graphCanvas.stateManager.getPortColor(this._portA.portData);\r\n\r\n if (this._portB) {\r\n extractedColorB = this._graphCanvas.stateManager.getPortColor(this._portB.portData);\r\n const splitComponents = extractedColorB.split(\"_\").map((v) => parseInt(v));\r\n if (splitComponents[0] > 0 && splitComponents[1] === 0 && splitComponents[2] === 0) {\r\n extractedColorB = \"\";\r\n }\r\n }\r\n\r\n if (extractedColorB && extractedColorA !== extractedColorB) {\r\n // Gradient\r\n const svg = this._graphCanvas.svgCanvas;\r\n const defs = svg.querySelector(\"defs\") || svg.appendChild(document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\"));\r\n\r\n if (!this._gradient) {\r\n this._gradient = document.createElementNS(\"http://www.w3.org/2000/svg\", \"linearGradient\");\r\n defs.appendChild(this._gradient);\r\n const stop1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\r\n this._gradient.appendChild(stop1);\r\n const stop2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"stop\");\r\n this._gradient.appendChild(stop2);\r\n }\r\n\r\n const stop1 = this._gradient.children[0] as SVGStopElement;\r\n const stop2 = this._gradient.children[1] as SVGStopElement;\r\n\r\n const gradientId = `linkGradient_${extractedColorA}_${extractedColorB}`;\r\n this._gradient.id = gradientId;\r\n\r\n this._gradient.setAttribute(\"x1\", startX < endX ? \"0\" : \"1\");\r\n this._gradient.setAttribute(\"y1\", \"0\");\r\n this._gradient.setAttribute(\"x2\", startX < endX ? \"1\" : \"0\");\r\n this._gradient.setAttribute(\"y2\", \"0\");\r\n\r\n stop1.setAttribute(\"offset\", \"0%\");\r\n stop1.setAttribute(\"stop-color\", extractedColorA);\r\n\r\n stop2.setAttribute(\"offset\", \"100%\");\r\n stop2.setAttribute(\"stop-color\", extractedColorB);\r\n\r\n this._path.setAttribute(\"stroke\", `url(#${gradientId})`);\r\n } else {\r\n this._path.setAttribute(\"stroke\", extractedColorA);\r\n }\r\n }\r\n\r\n public get path() {\r\n return this._path;\r\n }\r\n\r\n public get selectionPath() {\r\n return this._selectionPath;\r\n }\r\n\r\n public constructor(graphCanvas: GraphCanvasComponent, portA: NodePort, nodeA: GraphNode, portB?: NodePort, nodeB?: GraphNode) {\r\n this._portA = portA;\r\n this._portB = portB;\r\n this._nodeA = nodeA;\r\n this._nodeB = nodeB;\r\n this._graphCanvas = graphCanvas;\r\n\r\n const document = portA.element.ownerDocument;\r\n const svg = graphCanvas.svgCanvas;\r\n\r\n // Create path\r\n this._path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._path.setAttribute(\"fill\", \"none\");\r\n this._path.classList.add(styles[\"link\"]);\r\n\r\n svg.appendChild(this._path);\r\n\r\n this._selectionPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\r\n this._selectionPath.setAttribute(\"fill\", \"none\");\r\n this._selectionPath.classList.add(styles[\"selection-link\"]);\r\n\r\n svg.appendChild(this._selectionPath);\r\n\r\n this._selectionPath.onmousedown = (evt: MouseEvent) => this.onClick(evt);\r\n\r\n if (this._portB) {\r\n // Update\r\n this.update();\r\n }\r\n\r\n this._onSelectionChangedObserver = this._graphCanvas.stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection } = options || {};\r\n if (selection === this) {\r\n this._path.classList.add(styles[\"selected\"]);\r\n this._selectionPath.classList.add(styles[\"selected\"]);\r\n } else {\r\n this._path.classList.remove(styles[\"selected\"]);\r\n this._selectionPath.classList.remove(styles[\"selected\"]);\r\n }\r\n });\r\n }\r\n\r\n onClick(evt: MouseEvent) {\r\n const stateManager = this._graphCanvas.stateManager;\r\n const nodeA = this._nodeA;\r\n const pointA = this._portA.portData;\r\n const nodeB = this._nodeB!;\r\n const pointB = this._portB!.portData;\r\n\r\n const reconnect = (newNode: GraphNode) => {\r\n const newBlock = newNode.content.data;\r\n\r\n // Delete previous link\r\n this.dispose();\r\n\r\n // Connect to the new block\r\n this._graphCanvas.connectNodes(nodeA, pointA, newNode, newNode.getPortDataForPortDataContent(newBlock.input)!);\r\n this._graphCanvas.connectNodes(newNode, newNode.getPortDataForPortDataContent(newBlock.output)!, nodeB, pointB);\r\n\r\n stateManager.onRebuildRequiredObservable.notifyObservers();\r\n };\r\n\r\n if (evt.altKey) {\r\n if (!stateManager.isElbowConnectionAllowed(this._portA, this._portB!)) {\r\n return;\r\n }\r\n\r\n // Create an elbow at the clicked location\r\n stateManager.onNewNodeCreatedObservable.addOnce(reconnect);\r\n\r\n stateManager.onNewBlockRequiredObservable.notifyObservers({\r\n type: \"ElbowBlock\",\r\n targetX: evt.clientX,\r\n targetY: evt.clientY,\r\n needRepositioning: true,\r\n });\r\n\r\n // Make sure the undo/redo stack is reverted as we did 2 actions (create and connect)\r\n stateManager.historyStack.collapseLastTwo();\r\n\r\n return;\r\n }\r\n\r\n if (evt.ctrlKey) {\r\n if (!stateManager.isDebugConnectionAllowed(this._portA, this._portB!)) {\r\n return;\r\n }\r\n\r\n // Create a debug at the clicked location\r\n stateManager.onNewNodeCreatedObservable.addOnce(reconnect);\r\n\r\n stateManager.onNewBlockRequiredObservable.notifyObservers({\r\n type: \"DebugBlock\",\r\n targetX: evt.clientX,\r\n targetY: evt.clientY,\r\n needRepositioning: true,\r\n });\r\n\r\n // Make sure the undo/redo stack is reverted as we did 2 actions (create and connect)\r\n stateManager.historyStack.collapseLastTwo();\r\n return;\r\n }\r\n\r\n stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });\r\n }\r\n\r\n /** Ensure the shared SVG glow filter exists, return its id\r\n * @param svg the SVG element to check for the filter and add it to if not present\r\n * @returns the id of the glow filter to use in this SVG\r\n */\r\n private static _EnsureGlowFilter(svg: Element): string {\r\n const filterId = \"flowDotGlow\";\r\n if (!svg.querySelector(`#${filterId}`)) {\r\n const ns = \"http://www.w3.org/2000/svg\";\r\n const doc = svg.ownerDocument;\r\n let defs = svg.querySelector(\"defs\");\r\n if (!defs) {\r\n defs = doc.createElementNS(ns, \"defs\");\r\n svg.prepend(defs);\r\n }\r\n const filter = doc.createElementNS(ns, \"filter\");\r\n filter.setAttribute(\"id\", filterId);\r\n filter.setAttribute(\"x\", \"-50%\");\r\n filter.setAttribute(\"y\", \"-50%\");\r\n filter.setAttribute(\"width\", \"200%\");\r\n filter.setAttribute(\"height\", \"200%\");\r\n const blur = doc.createElementNS(ns, \"feGaussianBlur\");\r\n blur.setAttribute(\"stdDeviation\", \"3\");\r\n blur.setAttribute(\"result\", \"blur\");\r\n const merge = doc.createElementNS(ns, \"feMerge\");\r\n const n1 = doc.createElementNS(ns, \"feMergeNode\");\r\n n1.setAttribute(\"in\", \"blur\");\r\n const n2 = doc.createElementNS(ns, \"feMergeNode\");\r\n n2.setAttribute(\"in\", \"SourceGraphic\");\r\n merge.appendChild(n1);\r\n merge.appendChild(n2);\r\n filter.appendChild(blur);\r\n filter.appendChild(merge);\r\n defs.appendChild(filter);\r\n }\r\n return filterId;\r\n }\r\n\r\n /**\r\n * Triggers a brief animated dot traveling along the link path from port A to port B.\r\n * @param durationMs how long the animation takes (default 600ms)\r\n * @param color the color of the dot (default green)\r\n */\r\n public triggerFlowAnimation(durationMs = 600, color = \"#33B766\"): void {\r\n if (this._flowAnimationActive || !this._path.parentElement) {\r\n return;\r\n }\r\n\r\n const totalLength = this._path.getTotalLength();\r\n if (totalLength === 0) {\r\n return;\r\n }\r\n\r\n this._flowAnimationActive = true;\r\n\r\n const svg = this._path.parentElement;\r\n const ns = \"http://www.w3.org/2000/svg\";\r\n const doc = this._path.ownerDocument;\r\n const filterId = NodeLink._EnsureGlowFilter(svg);\r\n\r\n const dot = doc.createElementNS(ns, \"circle\");\r\n dot.setAttribute(\"r\", \"6\");\r\n dot.setAttribute(\"fill\", color);\r\n dot.setAttribute(\"filter\", `url(#${filterId})`);\r\n dot.style.pointerEvents = \"none\";\r\n svg.appendChild(dot);\r\n\r\n const startTime = performance.now();\r\n const animate = (now: number) => {\r\n const t = Math.min((now - startTime) / durationMs, 1);\r\n const pt = this._path.getPointAtLength(t * totalLength);\r\n dot.setAttribute(\"cx\", String(pt.x));\r\n dot.setAttribute(\"cy\", String(pt.y));\r\n\r\n if (t < 1) {\r\n requestAnimationFrame(animate);\r\n } else {\r\n dot.remove();\r\n this._flowAnimationActive = false;\r\n }\r\n };\r\n requestAnimationFrame(animate);\r\n }\r\n\r\n public dispose(notify = true) {\r\n this._graphCanvas.stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n\r\n if (this._path.parentElement) {\r\n this._path.parentElement.removeChild(this._path);\r\n }\r\n\r\n if (this._selectionPath.parentElement) {\r\n this._selectionPath.parentElement.removeChild(this._selectionPath);\r\n }\r\n\r\n if (this._gradient) {\r\n if (this._gradient.parentElement) {\r\n this._gradient.parentElement.removeChild(this._gradient);\r\n }\r\n }\r\n\r\n if (this._nodeB) {\r\n this._nodeA.links.splice(this._nodeA.links.indexOf(this), 1);\r\n this._nodeB.links.splice(this._nodeB.links.indexOf(this), 1);\r\n this._graphCanvas.links.splice(this._graphCanvas.links.indexOf(this), 1);\r\n\r\n this._portA.portData.disconnectFrom(this._portB!.portData);\r\n\r\n RefreshNode(this._nodeB, undefined, undefined, this._graphCanvas);\r\n }\r\n\r\n if (notify) {\r\n this.onDisposedObservable.notifyObservers(this);\r\n\r\n this.onDisposedObservable.clear();\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -27,6 +27,7 @@ export class NodePort {
|
|
|
27
27
|
refreshLabel() {
|
|
28
28
|
if (this._portLabelElement) {
|
|
29
29
|
this._portLabelElement.innerHTML = this.portData.name;
|
|
30
|
+
this._portLabelElement.title = this.portData.name;
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
get disabled() {
|
|
@@ -129,9 +130,19 @@ export class NodePort {
|
|
|
129
130
|
const rect = this._element.getBoundingClientRect();
|
|
130
131
|
if (!coords || rect.left > coords.x || rect.right < coords.x || rect.top > coords.y || rect.bottom < coords.y) {
|
|
131
132
|
this._element.classList.remove(localStyles["selected"]);
|
|
133
|
+
this._element.classList.remove(localStyles["incompatible"]);
|
|
132
134
|
return;
|
|
133
135
|
}
|
|
134
|
-
|
|
136
|
+
// Check type compatibility with the source port being dragged
|
|
137
|
+
const sourcePortData = this._stateManager.candidateSourcePortData;
|
|
138
|
+
if (sourcePortData && sourcePortData.checkCompatibilityState(this.portData) !== 0) {
|
|
139
|
+
this._element.classList.add(localStyles["incompatible"]);
|
|
140
|
+
this._element.classList.remove(localStyles["selected"]);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
this._element.classList.add(localStyles["selected"]);
|
|
144
|
+
this._element.classList.remove(localStyles["incompatible"]);
|
|
145
|
+
}
|
|
135
146
|
this._stateManager.onCandidatePortSelectedObservable.notifyObservers(this);
|
|
136
147
|
});
|
|
137
148
|
this._onSelectionChangedObserver = this._stateManager.onSelectionChangedObservable.add((options) => {
|
|
@@ -163,6 +174,7 @@ export class NodePort {
|
|
|
163
174
|
const portLabel = root.ownerDocument.createElement("div");
|
|
164
175
|
portLabel.classList.add(commonStyles["port-label"]);
|
|
165
176
|
portLabel.innerHTML = portData.name;
|
|
177
|
+
portLabel.title = portData.name;
|
|
166
178
|
portContainer.appendChild(portLabel);
|
|
167
179
|
}
|
|
168
180
|
let portUIcontainer;
|
|
@@ -182,6 +194,19 @@ export class NodePort {
|
|
|
182
194
|
node._forceRebuild(source, propertyName);
|
|
183
195
|
}, portData.directValueDefinition.valueMin, portData.directValueDefinition.valueMax);
|
|
184
196
|
break;
|
|
197
|
+
case PortDirectValueTypes.String: {
|
|
198
|
+
portUIcontainer.classList.add(localStyles.stringContainer);
|
|
199
|
+
const textInput = root.ownerDocument.createElement("input");
|
|
200
|
+
textInput.type = "text";
|
|
201
|
+
textInput.value = source[propertyName] ?? "";
|
|
202
|
+
textInput.placeholder = portData.name;
|
|
203
|
+
textInput.onchange = () => {
|
|
204
|
+
source[propertyName] = textInput.value;
|
|
205
|
+
node._forceRebuild(source, propertyName);
|
|
206
|
+
};
|
|
207
|
+
portUIcontainer.appendChild(textInput);
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
185
210
|
}
|
|
186
211
|
}
|
|
187
212
|
return new NodePort(portContainer, portData, node, stateManager, portUIcontainer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodePort.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/nodePort.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { Vector2 } from \"core/Maths/math.vector\";\r\nimport type { GraphNode } from \"./graphNode\";\r\nimport type { StateManager } from \"./stateManager\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { FrameNodePort } from \"./frameNodePort\";\r\nimport type { IDisplayManager } from \"./interfaces/displayManager\";\r\nimport { PortDirectValueTypes, type IPortData } from \"./interfaces/portData\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\nimport * as localStyles from \"./nodePort.module.scss\";\r\nimport { BuildFloatUI } from \"./tools\";\r\n\r\nexport class NodePort {\r\n protected _element: HTMLDivElement;\r\n protected _portContainer: HTMLElement;\r\n protected _imgHost: HTMLImageElement;\r\n protected _pip: HTMLDivElement;\r\n protected _stateManager: StateManager;\r\n protected _portLabelElement: Element;\r\n protected _onCandidateLinkMovedObserver: Nullable<Observer<Nullable<Vector2>>>;\r\n protected _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n protected _exposedOnFrame: boolean;\r\n protected _portUIcontainer?: HTMLDivElement;\r\n public delegatedPort: Nullable<FrameNodePort> = null;\r\n\r\n public get element(): HTMLDivElement {\r\n if (this.delegatedPort) {\r\n return this.delegatedPort.element;\r\n }\r\n\r\n return this._element;\r\n }\r\n\r\n public get container(): HTMLElement {\r\n if (this.delegatedPort) {\r\n return this.delegatedPort.container;\r\n }\r\n\r\n return this._portContainer;\r\n }\r\n\r\n public get portName() {\r\n return this.portData.name;\r\n }\r\n\r\n public set portName(newName: string) {\r\n if (this._portLabelElement) {\r\n this.portData.updateDisplayName(newName);\r\n this.refreshLabel();\r\n }\r\n }\r\n\r\n public refreshLabel() {\r\n if (this._portLabelElement) {\r\n this._portLabelElement.innerHTML = this.portData.name;\r\n }\r\n }\r\n\r\n public get disabled() {\r\n if (!this.portData.isConnected) {\r\n return false;\r\n } else if (this._isConnectedToNodeOutsideOfFrame()) {\r\n //connected to outside node\r\n return true;\r\n } else {\r\n const link = this.node.getLinksForPortData(this.portData);\r\n if (link.length) {\r\n if (link[0].nodeB === this.node) {\r\n // check if this node is the receiving\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public hasLabel() {\r\n return !!this._portLabelElement;\r\n }\r\n\r\n public get exposedOnFrame() {\r\n if (!!this.portData.isExposedOnFrame || this._isConnectedToNodeOutsideOfFrame()) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public set exposedOnFrame(value: boolean) {\r\n if (this.disabled) {\r\n return;\r\n }\r\n this.portData.isExposedOnFrame = value;\r\n }\r\n\r\n public get exposedPortPosition() {\r\n return this.portData.exposedPortPosition;\r\n }\r\n\r\n public set exposedPortPosition(value: number) {\r\n this.portData.exposedPortPosition = value;\r\n }\r\n\r\n private _isConnectedToNodeOutsideOfFrame() {\r\n const link = this.node.getLinksForPortData(this.portData);\r\n if (link.length) {\r\n for (let i = 0; i < link.length; i++) {\r\n if (link[i].nodeA.enclosingFrameId !== link[i].nodeB!.enclosingFrameId) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public refresh() {\r\n this.refreshLabel();\r\n if (this._stateManager.applyNodePortDesign(this.portData, this._element, this._imgHost, this._pip)) {\r\n this._element.style.background = \"#000\";\r\n }\r\n\r\n if (this._portUIcontainer) {\r\n if (this.portData.isConnected) {\r\n if (this._portLabelElement) {\r\n this._portLabelElement.classList.remove(commonStyles.hidden);\r\n }\r\n this._portUIcontainer.classList.add(commonStyles.hidden);\r\n } else {\r\n if (this._portLabelElement) {\r\n this._portLabelElement.classList.add(commonStyles.hidden);\r\n }\r\n this._portUIcontainer.classList.remove(commonStyles.hidden);\r\n }\r\n }\r\n }\r\n\r\n public constructor(\r\n portContainer: HTMLElement,\r\n public portData: IPortData,\r\n public node: GraphNode,\r\n stateManager: StateManager,\r\n portUIcontainer?: HTMLDivElement\r\n ) {\r\n this._portUIcontainer = portUIcontainer;\r\n this._portContainer = portContainer;\r\n this._element = portContainer.ownerDocument.createElement(\"div\");\r\n this._element.classList.add(commonStyles.port);\r\n portContainer.appendChild(this._element);\r\n this._stateManager = stateManager;\r\n\r\n this._imgHost = portContainer.ownerDocument.createElement(\"img\");\r\n this._imgHost.classList.add(localStyles[\"port-icon\"]);\r\n this._imgHost.classList.add(\"port-icon\"); // Used to flag it as a port icon\r\n this._element.appendChild(this._imgHost);\r\n\r\n this._pip = portContainer.ownerDocument.createElement(\"div\");\r\n this._pip.classList.add(localStyles[\"pip\"]);\r\n this._pip.style.display = \"none\";\r\n this._element.appendChild(this._pip);\r\n\r\n // determine if node name is editable\r\n if (portContainer.children[0].className === commonStyles[\"port-label\"]) {\r\n this._portLabelElement = portContainer.children[0];\r\n }\r\n\r\n (this._element as any).port = this;\r\n\r\n // Drag support\r\n this._element.ondragstart = () => false;\r\n\r\n this._onCandidateLinkMovedObserver = stateManager.onCandidateLinkMoved.add((coords) => {\r\n const rect = this._element.getBoundingClientRect();\r\n\r\n if (!coords || rect.left > coords.x || rect.right < coords.x || rect.top > coords.y || rect.bottom < coords.y) {\r\n this._element.classList.remove(localStyles[\"selected\"]);\r\n return;\r\n }\r\n\r\n this._element.classList.add(localStyles[\"selected\"]);\r\n this._stateManager.onCandidatePortSelectedObservable.notifyObservers(this);\r\n });\r\n\r\n this._onSelectionChangedObserver = this._stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection } = options || {};\r\n if (selection === this) {\r\n this._imgHost.classList.add(localStyles[\"icon-selected\"]);\r\n } else {\r\n this._imgHost.classList.remove(localStyles[\"icon-selected\"]);\r\n }\r\n });\r\n\r\n this.refresh();\r\n }\r\n\r\n public remove() {\r\n this._portContainer.remove();\r\n this.dispose();\r\n }\r\n\r\n public dispose() {\r\n this._stateManager.onCandidateLinkMoved.remove(this._onCandidateLinkMovedObserver);\r\n\r\n if (this._onSelectionChangedObserver) {\r\n this._stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n }\r\n }\r\n\r\n public static CreatePortElement(portData: IPortData, node: GraphNode, root: HTMLElement, displayManager: Nullable<IDisplayManager>, stateManager: StateManager) {\r\n const portContainer = root.ownerDocument.createElement(\"div\");\r\n\r\n portContainer.classList.add(commonStyles.portLine);\r\n\r\n root.appendChild(portContainer);\r\n\r\n if (!displayManager || displayManager.shouldDisplayPortLabels(portData)) {\r\n const portLabel = root.ownerDocument.createElement(\"div\");\r\n portLabel.classList.add(commonStyles[\"port-label\"]);\r\n portLabel.innerHTML = portData.name;\r\n portContainer.appendChild(portLabel);\r\n }\r\n\r\n let portUIcontainer: HTMLDivElement | undefined;\r\n if (portData.directValueDefinition) {\r\n portUIcontainer = root.ownerDocument.createElement(\"div\");\r\n portUIcontainer.classList.add(localStyles.numberContainer);\r\n portContainer.appendChild(portUIcontainer);\r\n portUIcontainer.addEventListener(\"pointerdown\", (evt) => evt.stopPropagation());\r\n portUIcontainer.addEventListener(\"pointerup\", (evt) => evt.stopPropagation());\r\n portUIcontainer.addEventListener(\"pointermove\", (evt) => evt.stopPropagation());\r\n const source = portData.directValueDefinition.source;\r\n const propertyName = portData.directValueDefinition.propertyName;\r\n switch (portData.directValueDefinition.valueType) {\r\n case PortDirectValueTypes.Float:\r\n case PortDirectValueTypes.Int:\r\n BuildFloatUI(\r\n portUIcontainer,\r\n root.ownerDocument,\r\n portData.name,\r\n portData.directValueDefinition.valueType === PortDirectValueTypes.Int,\r\n source,\r\n propertyName,\r\n () => {\r\n node._forceRebuild(source, propertyName);\r\n },\r\n portData.directValueDefinition.valueMin,\r\n portData.directValueDefinition.valueMax\r\n );\r\n break;\r\n }\r\n }\r\n\r\n return new NodePort(portContainer, portData, node, stateManager, portUIcontainer);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"nodePort.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/nodePort.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAkB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,YAAY,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,OAAO,QAAQ;IAajB,IAAW,OAAO;QACd,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,SAAS;QAChB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QACxC,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC9B,CAAC;IAED,IAAW,QAAQ,CAAC,OAAe;QAC/B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;IACL,CAAC;IAEM,YAAY;QACf,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACrD,IAAI,CAAC,iBAAiC,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvE,CAAC;IACL,CAAC;IAED,IAAW,QAAQ;QACf,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACjB,CAAC;aAAM,IAAI,IAAI,CAAC,gCAAgC,EAAE,EAAE,CAAC;YACjD,2BAA2B;YAC3B,OAAO,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;oBAC9B,sCAAsC;oBACtC,OAAO,IAAI,CAAC;gBAChB,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,QAAQ;QACX,OAAO,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;IACpC,CAAC;IAED,IAAW,cAAc;QACrB,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,IAAI,IAAI,CAAC,gCAAgC,EAAE,EAAE,CAAC;YAC9E,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAW,cAAc,CAAC,KAAc;QACpC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,KAAK,CAAC;IAC3C,CAAC;IAED,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC7C,CAAC;IAED,IAAW,mBAAmB,CAAC,KAAa;QACxC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,GAAG,KAAK,CAAC;IAC9C,CAAC;IAEO,gCAAgC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAM,CAAC,gBAAgB,EAAE,CAAC;oBACrE,OAAO,IAAI,CAAC;gBAChB,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC;QAC5C,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACjE,CAAC;gBACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC7D,CAAC;iBAAM,CAAC;gBACJ,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACzB,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC9D,CAAC;gBACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAChE,CAAC;QACL,CAAC;IACL,CAAC;IAED,YACI,aAA0B,EACnB,QAAmB,EACnB,IAAe,EACtB,YAA0B,EAC1B,eAAgC;QAHzB,aAAQ,GAAR,QAAQ,CAAW;QACnB,SAAI,GAAJ,IAAI,CAAW;QApHnB,kBAAa,GAA4B,IAAI,CAAC;QAwHjD,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/C,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAElC,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,iCAAiC;QAC3E,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEzC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErC,qCAAqC;QACrC,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QAEA,IAAI,CAAC,QAAgB,CAAC,IAAI,GAAG,IAAI,CAAC;QAEnC,eAAe;QACf,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC;QAExC,IAAI,CAAC,6BAA6B,GAAG,YAAY,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAClF,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;YAEnD,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC5G,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;gBACxD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC5D,OAAO;YACX,CAAC;YAED,8DAA8D;YAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC;YAClE,IAAI,cAAc,IAAI,cAAc,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChF,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;gBACzD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;gBACrD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,iCAAiC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/F,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;YACpC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;YACjE,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAEM,MAAM;QACT,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAEnF,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,4BAA4B,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC7F,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAAC,QAAmB,EAAE,IAAe,EAAE,IAAiB,EAAE,cAAyC,EAAE,YAA0B;QAC1J,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE9D,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAEnD,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAEhC,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1D,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;YACpD,SAAS,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC;YACpC,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;YAChC,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,eAA2C,CAAC;QAChD,IAAI,QAAQ,CAAC,qBAAqB,EAAE,CAAC;YACjC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1D,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAC3D,aAAa,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAC3C,eAAe,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;YAChF,eAAe,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;YAC9E,eAAe,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC;YAChF,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,MAAM,CAAC;YACrD,MAAM,YAAY,GAAG,QAAQ,CAAC,qBAAqB,CAAC,YAAY,CAAC;YACjE,QAAQ,QAAQ,CAAC,qBAAqB,CAAC,SAAS,EAAE,CAAC;gBAC/C,KAAK,oBAAoB,CAAC,KAAK,CAAC;gBAChC,KAAK,oBAAoB,CAAC,GAAG;oBACzB,YAAY,CACR,eAAe,EACf,IAAI,CAAC,aAAa,EAClB,QAAQ,CAAC,IAAI,EACb,QAAQ,CAAC,qBAAqB,CAAC,SAAS,KAAK,oBAAoB,CAAC,GAAG,EACrE,MAAM,EACN,YAAY,EACZ,GAAG,EAAE;wBACD,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBAC7C,CAAC,EACD,QAAQ,CAAC,qBAAqB,CAAC,QAAQ,EACvC,QAAQ,CAAC,qBAAqB,CAAC,QAAQ,CAC1C,CAAC;oBACF,MAAM;gBACV,KAAK,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC/B,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;oBAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAC5D,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;oBACxB,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;oBAC7C,SAAS,CAAC,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC;oBACtC,SAAS,CAAC,QAAQ,GAAG,GAAG,EAAE;wBACtB,MAAM,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;wBACvC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBAC7C,CAAC,CAAC;oBACF,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBACvC,MAAM;gBACV,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,IAAI,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;IACtF,CAAC;CACJ","sourcesContent":["import type { Nullable } from \"core/types\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { Vector2 } from \"core/Maths/math.vector\";\r\nimport type { GraphNode } from \"./graphNode\";\r\nimport type { StateManager } from \"./stateManager\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { FrameNodePort } from \"./frameNodePort\";\r\nimport type { IDisplayManager } from \"./interfaces/displayManager\";\r\nimport { PortDirectValueTypes, type IPortData } from \"./interfaces/portData\";\r\nimport * as commonStyles from \"./common.module.scss\";\r\nimport * as localStyles from \"./nodePort.module.scss\";\r\nimport { BuildFloatUI } from \"./tools\";\r\n\r\nexport class NodePort {\r\n protected _element: HTMLDivElement;\r\n protected _portContainer: HTMLElement;\r\n protected _imgHost: HTMLImageElement;\r\n protected _pip: HTMLDivElement;\r\n protected _stateManager: StateManager;\r\n protected _portLabelElement: Element;\r\n protected _onCandidateLinkMovedObserver: Nullable<Observer<Nullable<Vector2>>>;\r\n protected _onSelectionChangedObserver: Nullable<Observer<Nullable<ISelectionChangedOptions>>>;\r\n protected _exposedOnFrame: boolean;\r\n protected _portUIcontainer?: HTMLDivElement;\r\n public delegatedPort: Nullable<FrameNodePort> = null;\r\n\r\n public get element(): HTMLDivElement {\r\n if (this.delegatedPort) {\r\n return this.delegatedPort.element;\r\n }\r\n\r\n return this._element;\r\n }\r\n\r\n public get container(): HTMLElement {\r\n if (this.delegatedPort) {\r\n return this.delegatedPort.container;\r\n }\r\n\r\n return this._portContainer;\r\n }\r\n\r\n public get portName() {\r\n return this.portData.name;\r\n }\r\n\r\n public set portName(newName: string) {\r\n if (this._portLabelElement) {\r\n this.portData.updateDisplayName(newName);\r\n this.refreshLabel();\r\n }\r\n }\r\n\r\n public refreshLabel() {\r\n if (this._portLabelElement) {\r\n this._portLabelElement.innerHTML = this.portData.name;\r\n (this._portLabelElement as HTMLElement).title = this.portData.name;\r\n }\r\n }\r\n\r\n public get disabled() {\r\n if (!this.portData.isConnected) {\r\n return false;\r\n } else if (this._isConnectedToNodeOutsideOfFrame()) {\r\n //connected to outside node\r\n return true;\r\n } else {\r\n const link = this.node.getLinksForPortData(this.portData);\r\n if (link.length) {\r\n if (link[0].nodeB === this.node) {\r\n // check if this node is the receiving\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public hasLabel() {\r\n return !!this._portLabelElement;\r\n }\r\n\r\n public get exposedOnFrame() {\r\n if (!!this.portData.isExposedOnFrame || this._isConnectedToNodeOutsideOfFrame()) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public set exposedOnFrame(value: boolean) {\r\n if (this.disabled) {\r\n return;\r\n }\r\n this.portData.isExposedOnFrame = value;\r\n }\r\n\r\n public get exposedPortPosition() {\r\n return this.portData.exposedPortPosition;\r\n }\r\n\r\n public set exposedPortPosition(value: number) {\r\n this.portData.exposedPortPosition = value;\r\n }\r\n\r\n private _isConnectedToNodeOutsideOfFrame() {\r\n const link = this.node.getLinksForPortData(this.portData);\r\n if (link.length) {\r\n for (let i = 0; i < link.length; i++) {\r\n if (link[i].nodeA.enclosingFrameId !== link[i].nodeB!.enclosingFrameId) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public refresh() {\r\n this.refreshLabel();\r\n if (this._stateManager.applyNodePortDesign(this.portData, this._element, this._imgHost, this._pip)) {\r\n this._element.style.background = \"#000\";\r\n }\r\n\r\n if (this._portUIcontainer) {\r\n if (this.portData.isConnected) {\r\n if (this._portLabelElement) {\r\n this._portLabelElement.classList.remove(commonStyles.hidden);\r\n }\r\n this._portUIcontainer.classList.add(commonStyles.hidden);\r\n } else {\r\n if (this._portLabelElement) {\r\n this._portLabelElement.classList.add(commonStyles.hidden);\r\n }\r\n this._portUIcontainer.classList.remove(commonStyles.hidden);\r\n }\r\n }\r\n }\r\n\r\n public constructor(\r\n portContainer: HTMLElement,\r\n public portData: IPortData,\r\n public node: GraphNode,\r\n stateManager: StateManager,\r\n portUIcontainer?: HTMLDivElement\r\n ) {\r\n this._portUIcontainer = portUIcontainer;\r\n this._portContainer = portContainer;\r\n this._element = portContainer.ownerDocument.createElement(\"div\");\r\n this._element.classList.add(commonStyles.port);\r\n portContainer.appendChild(this._element);\r\n this._stateManager = stateManager;\r\n\r\n this._imgHost = portContainer.ownerDocument.createElement(\"img\");\r\n this._imgHost.classList.add(localStyles[\"port-icon\"]);\r\n this._imgHost.classList.add(\"port-icon\"); // Used to flag it as a port icon\r\n this._element.appendChild(this._imgHost);\r\n\r\n this._pip = portContainer.ownerDocument.createElement(\"div\");\r\n this._pip.classList.add(localStyles[\"pip\"]);\r\n this._pip.style.display = \"none\";\r\n this._element.appendChild(this._pip);\r\n\r\n // determine if node name is editable\r\n if (portContainer.children[0].className === commonStyles[\"port-label\"]) {\r\n this._portLabelElement = portContainer.children[0];\r\n }\r\n\r\n (this._element as any).port = this;\r\n\r\n // Drag support\r\n this._element.ondragstart = () => false;\r\n\r\n this._onCandidateLinkMovedObserver = stateManager.onCandidateLinkMoved.add((coords) => {\r\n const rect = this._element.getBoundingClientRect();\r\n\r\n if (!coords || rect.left > coords.x || rect.right < coords.x || rect.top > coords.y || rect.bottom < coords.y) {\r\n this._element.classList.remove(localStyles[\"selected\"]);\r\n this._element.classList.remove(localStyles[\"incompatible\"]);\r\n return;\r\n }\r\n\r\n // Check type compatibility with the source port being dragged\r\n const sourcePortData = this._stateManager.candidateSourcePortData;\r\n if (sourcePortData && sourcePortData.checkCompatibilityState(this.portData) !== 0) {\r\n this._element.classList.add(localStyles[\"incompatible\"]);\r\n this._element.classList.remove(localStyles[\"selected\"]);\r\n } else {\r\n this._element.classList.add(localStyles[\"selected\"]);\r\n this._element.classList.remove(localStyles[\"incompatible\"]);\r\n }\r\n this._stateManager.onCandidatePortSelectedObservable.notifyObservers(this);\r\n });\r\n\r\n this._onSelectionChangedObserver = this._stateManager.onSelectionChangedObservable.add((options) => {\r\n const { selection } = options || {};\r\n if (selection === this) {\r\n this._imgHost.classList.add(localStyles[\"icon-selected\"]);\r\n } else {\r\n this._imgHost.classList.remove(localStyles[\"icon-selected\"]);\r\n }\r\n });\r\n\r\n this.refresh();\r\n }\r\n\r\n public remove() {\r\n this._portContainer.remove();\r\n this.dispose();\r\n }\r\n\r\n public dispose() {\r\n this._stateManager.onCandidateLinkMoved.remove(this._onCandidateLinkMovedObserver);\r\n\r\n if (this._onSelectionChangedObserver) {\r\n this._stateManager.onSelectionChangedObservable.remove(this._onSelectionChangedObserver);\r\n }\r\n }\r\n\r\n public static CreatePortElement(portData: IPortData, node: GraphNode, root: HTMLElement, displayManager: Nullable<IDisplayManager>, stateManager: StateManager) {\r\n const portContainer = root.ownerDocument.createElement(\"div\");\r\n\r\n portContainer.classList.add(commonStyles.portLine);\r\n\r\n root.appendChild(portContainer);\r\n\r\n if (!displayManager || displayManager.shouldDisplayPortLabels(portData)) {\r\n const portLabel = root.ownerDocument.createElement(\"div\");\r\n portLabel.classList.add(commonStyles[\"port-label\"]);\r\n portLabel.innerHTML = portData.name;\r\n portLabel.title = portData.name;\r\n portContainer.appendChild(portLabel);\r\n }\r\n\r\n let portUIcontainer: HTMLDivElement | undefined;\r\n if (portData.directValueDefinition) {\r\n portUIcontainer = root.ownerDocument.createElement(\"div\");\r\n portUIcontainer.classList.add(localStyles.numberContainer);\r\n portContainer.appendChild(portUIcontainer);\r\n portUIcontainer.addEventListener(\"pointerdown\", (evt) => evt.stopPropagation());\r\n portUIcontainer.addEventListener(\"pointerup\", (evt) => evt.stopPropagation());\r\n portUIcontainer.addEventListener(\"pointermove\", (evt) => evt.stopPropagation());\r\n const source = portData.directValueDefinition.source;\r\n const propertyName = portData.directValueDefinition.propertyName;\r\n switch (portData.directValueDefinition.valueType) {\r\n case PortDirectValueTypes.Float:\r\n case PortDirectValueTypes.Int:\r\n BuildFloatUI(\r\n portUIcontainer,\r\n root.ownerDocument,\r\n portData.name,\r\n portData.directValueDefinition.valueType === PortDirectValueTypes.Int,\r\n source,\r\n propertyName,\r\n () => {\r\n node._forceRebuild(source, propertyName);\r\n },\r\n portData.directValueDefinition.valueMin,\r\n portData.directValueDefinition.valueMax\r\n );\r\n break;\r\n case PortDirectValueTypes.String: {\r\n portUIcontainer.classList.add(localStyles.stringContainer);\r\n const textInput = root.ownerDocument.createElement(\"input\");\r\n textInput.type = \"text\";\r\n textInput.value = source[propertyName] ?? \"\";\r\n textInput.placeholder = portData.name;\r\n textInput.onchange = () => {\r\n source[propertyName] = textInput.value;\r\n node._forceRebuild(source, propertyName);\r\n };\r\n portUIcontainer.appendChild(textInput);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return new NodePort(portContainer, portData, node, stateManager, portUIcontainer);\r\n }\r\n}\r\n"]}
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
filter: brightness(2);
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
+
.incompatible {
|
|
6
|
+
box-shadow: 0 0 8px 3px rgba(255, 60, 60, 0.8);
|
|
7
|
+
filter: brightness(0.7) saturate(0.3);
|
|
8
|
+
}
|
|
9
|
+
|
|
5
10
|
.pip {
|
|
6
11
|
background: green;
|
|
7
12
|
width: 6px;
|
|
@@ -43,3 +48,35 @@
|
|
|
43
48
|
margin-top: 2px;
|
|
44
49
|
}
|
|
45
50
|
}
|
|
51
|
+
|
|
52
|
+
.stringContainer {
|
|
53
|
+
display: grid;
|
|
54
|
+
margin-top: 2px;
|
|
55
|
+
margin-bottom: 2px;
|
|
56
|
+
|
|
57
|
+
input[type="text"] {
|
|
58
|
+
grid-row: 1;
|
|
59
|
+
grid-column: 1;
|
|
60
|
+
margin-left: -1px;
|
|
61
|
+
margin-right: 5px;
|
|
62
|
+
border: 0px;
|
|
63
|
+
opacity: 0.9;
|
|
64
|
+
color: white;
|
|
65
|
+
border-radius: 2px;
|
|
66
|
+
background-color: rgba(0, 0, 0, 0.5);
|
|
67
|
+
padding: 2px 5px;
|
|
68
|
+
font-size: 12px;
|
|
69
|
+
min-width: 60px;
|
|
70
|
+
|
|
71
|
+
&:hover {
|
|
72
|
+
background-color: rgba(0, 0, 0, 0.2);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
&:focus {
|
|
76
|
+
outline: 0px;
|
|
77
|
+
box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.1);
|
|
78
|
+
background-color: rgba(0, 0, 0, 0.8);
|
|
79
|
+
opacity: 1;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -29,6 +29,12 @@ export declare class StateManager {
|
|
|
29
29
|
onSelectionBoxMoved: Observable<DOMRect | ClientRect>;
|
|
30
30
|
onCandidateLinkMoved: Observable<Nullable<Vector2>>;
|
|
31
31
|
onCandidatePortSelectedObservable: Observable<Nullable<FrameNodePort | NodePort>>;
|
|
32
|
+
/** The source port data for the current drag operation, used for design-time compatibility checks */
|
|
33
|
+
candidateSourcePortData: Nullable<IPortData>;
|
|
34
|
+
/** When true, ports glow red during drag when hovering over an incompatible target. Default false. */
|
|
35
|
+
enablePortCompatibilityHighlight: boolean;
|
|
36
|
+
/** When true, nodes can display validation and breakpoint badge overlays. Default false. */
|
|
37
|
+
enableNodeBadges: boolean;
|
|
32
38
|
onNewNodeCreatedObservable: Observable<GraphNode>;
|
|
33
39
|
onRebuildRequiredObservable: Observable<void>;
|
|
34
40
|
onNodeMovedObservable: Observable<GraphNode>;
|
|
@@ -9,6 +9,12 @@ export class StateManager {
|
|
|
9
9
|
this.onSelectionBoxMoved = new Observable();
|
|
10
10
|
this.onCandidateLinkMoved = new Observable();
|
|
11
11
|
this.onCandidatePortSelectedObservable = new Observable();
|
|
12
|
+
/** The source port data for the current drag operation, used for design-time compatibility checks */
|
|
13
|
+
this.candidateSourcePortData = null;
|
|
14
|
+
/** When true, ports glow red during drag when hovering over an incompatible target. Default false. */
|
|
15
|
+
this.enablePortCompatibilityHighlight = false;
|
|
16
|
+
/** When true, nodes can display validation and breakpoint badge overlays. Default false. */
|
|
17
|
+
this.enableNodeBadges = false;
|
|
12
18
|
this.onNewNodeCreatedObservable = new Observable();
|
|
13
19
|
this.onRebuildRequiredObservable = new Observable();
|
|
14
20
|
this.onNodeMovedObservable = new Observable();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stateManager.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/stateManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,wCAA6B;AAalD,MAAM,OAAO,YAAY;IAAzB;QAQI,kCAA6B,GAAG,IAAI,UAAU,EAA4B,CAAC;QAC3E,iCAA4B,GAAG,IAAI,UAAU,EAAsC,CAAC;QACpF,6BAAwB,GAAG,IAAI,UAAU,EAAc,CAAC;QACxD,+BAA0B,GAAG,IAAI,UAAU,EAAiB,CAAC;QAC7D,iCAA4B,GAAG,IAAI,UAAU,EAAa,CAAC;QAC3D,wBAAmB,GAAG,IAAI,UAAU,EAAwB,CAAC;QAC7D,yBAAoB,GAAG,IAAI,UAAU,EAAqB,CAAC;QAC3D,sCAAiC,GAAG,IAAI,UAAU,EAAsC,CAAC;QACzF,+BAA0B,GAAG,IAAI,UAAU,EAAa,CAAC;QACzD,gCAA2B,GAAG,IAAI,UAAU,EAAQ,CAAC;QACrD,0BAAqB,GAAG,IAAI,UAAU,EAAa,CAAC;QACpD,2CAAsC,GAAG,IAAI,UAAU,EAAU,CAAC;QAClE,kCAA6B,GAAG,IAAI,UAAU,EAAa,CAAC;QAC5D,sBAAiB,GAAG,IAAI,UAAU,EAAQ,CAAC;QAC3C,iCAA4B,GAAG,IAAI,UAAU,EAAuG,CAAC;QACrJ,8BAAyB,GAAG,IAAI,UAAU,EAAkC,CAAC;QAC7E,8BAAyB,GAAG,IAAI,UAAU,EAAW,CAAC;IA+B1D,CAAC;IAZG,mBAAmB;QACf,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,UAAU,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,2BAA2B,CAAC,eAAe,EAAE,CAAC;YACnD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAClC,CAAC,EAAE,CAAC,CAAC,CAAC;IACV,CAAC;CACJ","sourcesContent":["import type { Vector2 } from \"core/Maths/math.vector\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { FrameNodePort } from \"./frameNodePort\";\r\nimport type { GraphFrame } from \"./graphFrame\";\r\nimport type { GraphNode } from \"./graphNode\";\r\nimport type { INodeContainer } from \"./interfaces/nodeContainer\";\r\nimport type { INodeData } from \"./interfaces/nodeData\";\r\nimport type { IPortData } from \"./interfaces/portData\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { NodePort } from \"./nodePort\";\r\nimport type { HistoryStack } from \"../historyStack\";\r\nimport type { Scene } from \"core/scene\";\r\n\r\nexport class StateManager {\r\n data: any;\r\n hostDocument: Document;\r\n lockObject: any;\r\n modalIsDisplayed: boolean;\r\n historyStack: HistoryStack;\r\n activeNode: Nullable<GraphNode>;\r\n\r\n onSearchBoxRequiredObservable = new Observable<{ x: number; y: number }>();\r\n onSelectionChangedObservable = new Observable<Nullable<ISelectionChangedOptions>>();\r\n onFrameCreatedObservable = new Observable<GraphFrame>();\r\n onUpdateRequiredObservable = new Observable<Nullable<any>>();\r\n onGraphNodeRemovalObservable = new Observable<GraphNode>();\r\n onSelectionBoxMoved = new Observable<ClientRect | DOMRect>();\r\n onCandidateLinkMoved = new Observable<Nullable<Vector2>>();\r\n onCandidatePortSelectedObservable = new Observable<Nullable<NodePort | FrameNodePort>>();\r\n onNewNodeCreatedObservable = new Observable<GraphNode>();\r\n onRebuildRequiredObservable = new Observable<void>();\r\n onNodeMovedObservable = new Observable<GraphNode>();\r\n onErrorMessageDialogRequiredObservable = new Observable<string>();\r\n onExposePortOnFrameObservable = new Observable<GraphNode>();\r\n onGridSizeChanged = new Observable<void>();\r\n onNewBlockRequiredObservable = new Observable<{ type: string; targetX: number; targetY: number; needRepositioning?: boolean; smartAdd?: boolean }>();\r\n onHighlightNodeObservable = new Observable<{ data: any; active: boolean }>();\r\n onPreviewCommandActivated = new Observable<boolean>();\r\n\r\n exportData: (data: any, frame?: Nullable<GraphFrame>) => string;\r\n isElbowConnectionAllowed: (nodeA: FrameNodePort | NodePort, nodeB: FrameNodePort | NodePort) => boolean;\r\n isDebugConnectionAllowed: (nodeA: FrameNodePort | NodePort, nodeB: FrameNodePort | NodePort) => boolean;\r\n applyNodePortDesign: (data: IPortData, element: HTMLElement, imgHost: HTMLImageElement, pip: HTMLDivElement) => boolean;\r\n\r\n getPortColor: (portData: IPortData) => string;\r\n\r\n storeEditorData: (serializationObject: any, frame?: Nullable<GraphFrame>) => void;\r\n\r\n getEditorDataMap: () => { [key: number]: number };\r\n\r\n getScene?: () => Scene;\r\n\r\n createDefaultInputData: (rootData: any, portData: IPortData, nodeContainer: INodeContainer) => Nullable<{ data: INodeData; name: string }>;\r\n\r\n private _isRebuildQueued: boolean;\r\n\r\n queueRebuildCommand() {\r\n if (this._isRebuildQueued) {\r\n return;\r\n }\r\n\r\n this._isRebuildQueued = true;\r\n\r\n setTimeout(() => {\r\n this.onRebuildRequiredObservable.notifyObservers();\r\n this._isRebuildQueued = false;\r\n }, 1);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"stateManager.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/stateManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,wCAA6B;AAalD,MAAM,OAAO,YAAY;IAAzB;QAQI,kCAA6B,GAAG,IAAI,UAAU,EAA4B,CAAC;QAC3E,iCAA4B,GAAG,IAAI,UAAU,EAAsC,CAAC;QACpF,6BAAwB,GAAG,IAAI,UAAU,EAAc,CAAC;QACxD,+BAA0B,GAAG,IAAI,UAAU,EAAiB,CAAC;QAC7D,iCAA4B,GAAG,IAAI,UAAU,EAAa,CAAC;QAC3D,wBAAmB,GAAG,IAAI,UAAU,EAAwB,CAAC;QAC7D,yBAAoB,GAAG,IAAI,UAAU,EAAqB,CAAC;QAC3D,sCAAiC,GAAG,IAAI,UAAU,EAAsC,CAAC;QACzF,qGAAqG;QACrG,4BAAuB,GAAwB,IAAI,CAAC;QACpD,sGAAsG;QACtG,qCAAgC,GAAY,KAAK,CAAC;QAClD,4FAA4F;QAC5F,qBAAgB,GAAY,KAAK,CAAC;QAClC,+BAA0B,GAAG,IAAI,UAAU,EAAa,CAAC;QACzD,gCAA2B,GAAG,IAAI,UAAU,EAAQ,CAAC;QACrD,0BAAqB,GAAG,IAAI,UAAU,EAAa,CAAC;QACpD,2CAAsC,GAAG,IAAI,UAAU,EAAU,CAAC;QAClE,kCAA6B,GAAG,IAAI,UAAU,EAAa,CAAC;QAC5D,sBAAiB,GAAG,IAAI,UAAU,EAAQ,CAAC;QAC3C,iCAA4B,GAAG,IAAI,UAAU,EAAuG,CAAC;QACrJ,8BAAyB,GAAG,IAAI,UAAU,EAAkC,CAAC;QAC7E,8BAAyB,GAAG,IAAI,UAAU,EAAW,CAAC;IA+B1D,CAAC;IAZG,mBAAmB;QACf,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,UAAU,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,2BAA2B,CAAC,eAAe,EAAE,CAAC;YACnD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAClC,CAAC,EAAE,CAAC,CAAC,CAAC;IACV,CAAC;CACJ","sourcesContent":["import type { Vector2 } from \"core/Maths/math.vector\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport type { Nullable } from \"core/types\";\r\nimport type { FrameNodePort } from \"./frameNodePort\";\r\nimport type { GraphFrame } from \"./graphFrame\";\r\nimport type { GraphNode } from \"./graphNode\";\r\nimport type { INodeContainer } from \"./interfaces/nodeContainer\";\r\nimport type { INodeData } from \"./interfaces/nodeData\";\r\nimport type { IPortData } from \"./interfaces/portData\";\r\nimport type { ISelectionChangedOptions } from \"./interfaces/selectionChangedOptions\";\r\nimport type { NodePort } from \"./nodePort\";\r\nimport type { HistoryStack } from \"../historyStack\";\r\nimport type { Scene } from \"core/scene\";\r\n\r\nexport class StateManager {\r\n data: any;\r\n hostDocument: Document;\r\n lockObject: any;\r\n modalIsDisplayed: boolean;\r\n historyStack: HistoryStack;\r\n activeNode: Nullable<GraphNode>;\r\n\r\n onSearchBoxRequiredObservable = new Observable<{ x: number; y: number }>();\r\n onSelectionChangedObservable = new Observable<Nullable<ISelectionChangedOptions>>();\r\n onFrameCreatedObservable = new Observable<GraphFrame>();\r\n onUpdateRequiredObservable = new Observable<Nullable<any>>();\r\n onGraphNodeRemovalObservable = new Observable<GraphNode>();\r\n onSelectionBoxMoved = new Observable<ClientRect | DOMRect>();\r\n onCandidateLinkMoved = new Observable<Nullable<Vector2>>();\r\n onCandidatePortSelectedObservable = new Observable<Nullable<NodePort | FrameNodePort>>();\r\n /** The source port data for the current drag operation, used for design-time compatibility checks */\r\n candidateSourcePortData: Nullable<IPortData> = null;\r\n /** When true, ports glow red during drag when hovering over an incompatible target. Default false. */\r\n enablePortCompatibilityHighlight: boolean = false;\r\n /** When true, nodes can display validation and breakpoint badge overlays. Default false. */\r\n enableNodeBadges: boolean = false;\r\n onNewNodeCreatedObservable = new Observable<GraphNode>();\r\n onRebuildRequiredObservable = new Observable<void>();\r\n onNodeMovedObservable = new Observable<GraphNode>();\r\n onErrorMessageDialogRequiredObservable = new Observable<string>();\r\n onExposePortOnFrameObservable = new Observable<GraphNode>();\r\n onGridSizeChanged = new Observable<void>();\r\n onNewBlockRequiredObservable = new Observable<{ type: string; targetX: number; targetY: number; needRepositioning?: boolean; smartAdd?: boolean }>();\r\n onHighlightNodeObservable = new Observable<{ data: any; active: boolean }>();\r\n onPreviewCommandActivated = new Observable<boolean>();\r\n\r\n exportData: (data: any, frame?: Nullable<GraphFrame>) => string;\r\n isElbowConnectionAllowed: (nodeA: FrameNodePort | NodePort, nodeB: FrameNodePort | NodePort) => boolean;\r\n isDebugConnectionAllowed: (nodeA: FrameNodePort | NodePort, nodeB: FrameNodePort | NodePort) => boolean;\r\n applyNodePortDesign: (data: IPortData, element: HTMLElement, imgHost: HTMLImageElement, pip: HTMLDivElement) => boolean;\r\n\r\n getPortColor: (portData: IPortData) => string;\r\n\r\n storeEditorData: (serializationObject: any, frame?: Nullable<GraphFrame>) => void;\r\n\r\n getEditorDataMap: () => { [key: number]: number };\r\n\r\n getScene?: () => Scene;\r\n\r\n createDefaultInputData: (rootData: any, portData: IPortData, nodeContainer: INodeContainer) => Nullable<{ data: INodeData; name: string }>;\r\n\r\n private _isRebuildQueued: boolean;\r\n\r\n queueRebuildCommand() {\r\n if (this._isRebuildQueued) {\r\n return;\r\n }\r\n\r\n this._isRebuildQueued = true;\r\n\r\n setTimeout(() => {\r\n this.onRebuildRequiredObservable.notifyObservers();\r\n this._isRebuildQueued = false;\r\n }, 1);\r\n }\r\n}\r\n"]}
|
package/package.json
CHANGED
package/split/splitContainer.js
CHANGED
|
@@ -207,7 +207,8 @@ export const SplitContainer = (props) => {
|
|
|
207
207
|
}
|
|
208
208
|
if (size !== undefined) {
|
|
209
209
|
const sizeString = `${size | 0}px`;
|
|
210
|
-
|
|
210
|
+
const alreadySet = props.direction === SplitDirection.Horizontal ? childArray[current].style.width : childArray[current].style.height;
|
|
211
|
+
if (!alreadySet) {
|
|
211
212
|
if (props.direction === SplitDirection.Horizontal) {
|
|
212
213
|
childArray[current].style.width = sizeString;
|
|
213
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"splitContainer.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/split/splitContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { PropsWithChildren } from \"react\";\r\nimport { useContext, useEffect, useRef } from \"react\";\r\nimport * as styles from \"./splitContainer.module.scss\";\r\nimport { ControlledSize, SplitDirection, SplitContext } from \"./splitContext\";\r\nimport { ToolContext } from \"shared-ui-components/fluent/hoc/fluentToolWrapper\";\r\n\r\n/**\r\n * Split container properties\r\n */\r\nexport interface ISplitContainerProps {\r\n /**\r\n * Unique identifier\r\n */\r\n id?: string;\r\n\r\n /**\r\n * Split direction\r\n */\r\n direction: SplitDirection;\r\n\r\n /**\r\n * Minimum size for the floating elements\r\n */\r\n floatingMinSize?: number;\r\n\r\n /**\r\n * RefObject to the root div element\r\n */\r\n containerRef?: React.RefObject<HTMLDivElement>;\r\n\r\n /**\r\n * Optional class name\r\n */\r\n className?: string;\r\n\r\n /**\r\n * Pointer down\r\n * @param event pointer events\r\n */\r\n onPointerDown?: (event: React.PointerEvent) => void;\r\n\r\n /**\r\n * Pointer move\r\n * @param event pointer events\r\n */\r\n onPointerMove?: (event: React.PointerEvent) => void;\r\n\r\n /**\r\n * Pointer up\r\n * @param event pointer events\r\n */\r\n onPointerUp?: (event: React.PointerEvent) => void;\r\n\r\n /**\r\n * Drop\r\n * @param event drag events\r\n */\r\n onDrop?: (event: React.DragEvent<HTMLDivElement>) => void;\r\n\r\n /**\r\n * Drag over\r\n * @param event drag events\r\n */\r\n onDragOver?: (event: React.DragEvent<HTMLDivElement>) => void;\r\n}\r\n\r\n/**\r\n * Creates a split container component\r\n * @param props defines the split container properties\r\n * @returns the split container component\r\n */\r\nexport const SplitContainer: React.FC<PropsWithChildren<ISplitContainerProps>> = (props) => {\r\n const elementRef: React.RefObject<HTMLDivElement> = props.containerRef || useRef(null);\r\n const sizes: number[] = [];\r\n const floatingCells: boolean[] = [];\r\n const noInitialSizes: boolean[] = [];\r\n const floatingMinSize = props.floatingMinSize || 200;\r\n const controllers: number[][] = [];\r\n const minSizes: number[] = [];\r\n const maxSizes: number[] = [];\r\n const useFluent = useContext(ToolContext).useFluent;\r\n\r\n const buildGridDefinition = () => {\r\n if (!elementRef.current) {\r\n return;\r\n }\r\n const children = elementRef.current.children;\r\n\r\n let gridIndex = 1;\r\n const pickArray = Array.from(children);\r\n let gridDefinition = \"\";\r\n for (const child of children) {\r\n const childElement = child as HTMLElement;\r\n if (child.classList.contains(styles[\"splitter\"])) {\r\n gridDefinition += \"auto \";\r\n } else {\r\n const sourceIndex = pickArray.indexOf(child);\r\n if (floatingCells[sourceIndex] || noInitialSizes[sourceIndex]) {\r\n gridDefinition += \"1fr \";\r\n } else {\r\n gridDefinition += \"auto \";\r\n }\r\n }\r\n\r\n if (props.direction === SplitDirection.Horizontal) {\r\n childElement.style.gridRow = \"1\";\r\n childElement.style.gridColumn = gridIndex.toString();\r\n } else {\r\n childElement.style.gridColumn = \"1\";\r\n childElement.style.gridRow = gridIndex.toString();\r\n }\r\n\r\n gridIndex++;\r\n }\r\n\r\n if (props.direction === SplitDirection.Horizontal) {\r\n elementRef.current.style.gridTemplateRows = \"100%\";\r\n elementRef.current.style.gridTemplateColumns = gridDefinition;\r\n } else {\r\n elementRef.current.style.gridTemplateColumns = \"100%\";\r\n elementRef.current.style.gridTemplateRows = gridDefinition;\r\n }\r\n };\r\n\r\n const handleResize = () => {\r\n if (!elementRef.current) {\r\n return;\r\n }\r\n\r\n // Check if we have enough room for everyone\r\n const children = elementRef.current.children;\r\n for (let i = 0; i < children.length; i++) {\r\n if (!floatingCells[i]) {\r\n continue;\r\n }\r\n\r\n const child = children[i] as HTMLElement;\r\n let childsize: number;\r\n if (props.direction === SplitDirection.Horizontal) {\r\n childsize = child.getBoundingClientRect().width;\r\n } else {\r\n childsize = child.getBoundingClientRect().height;\r\n }\r\n\r\n if (childsize < floatingMinSize) {\r\n const missing = Math.floor(floatingMinSize - childsize);\r\n let done = 0;\r\n\r\n // picking the controller in order and try to reduce their size to fit\r\n for (let j = 0; j < controllers[i].length; j++) {\r\n const controllerIndex = controllers[i][j];\r\n const controller = children[controllerIndex] as HTMLElement;\r\n const currentSize = props.direction === SplitDirection.Horizontal ? controller.getBoundingClientRect().width : controller.getBoundingClientRect().height;\r\n let newSize = currentSize - missing;\r\n if (minSizes[controllerIndex]) {\r\n newSize = Math.max(newSize, minSizes[controllerIndex]);\r\n }\r\n if (props.direction === SplitDirection.Horizontal) {\r\n controller.style.width = `${newSize}px`;\r\n } else {\r\n controller.style.height = `${newSize}px`;\r\n }\r\n\r\n done += currentSize - newSize;\r\n\r\n if (done === missing) {\r\n // We made it\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n buildGridDefinition();\r\n\r\n // Add event listener for window resize\r\n window.addEventListener(\"resize\", handleResize);\r\n\r\n // Cleanup the event listener on component unmount\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n };\r\n }, []);\r\n\r\n const drag = (offset: number, source: HTMLElement, controlledSide: ControlledSize) => {\r\n if (!elementRef.current) {\r\n return;\r\n }\r\n\r\n const children = elementRef.current.children;\r\n const childArray = Array.from(children) as HTMLElement[];\r\n const sourceIndex = childArray.indexOf(source);\r\n if (sourceIndex <= 0) {\r\n return;\r\n }\r\n\r\n let current: number;\r\n if (controlledSide === ControlledSize.First) {\r\n current = sourceIndex - 1;\r\n } else {\r\n current = sourceIndex + 1;\r\n }\r\n const minSize = minSizes[current] || 0;\r\n const maxSize = maxSizes[current];\r\n\r\n noInitialSizes[current] = false;\r\n buildGridDefinition();\r\n\r\n let newSize = Math.floor(controlledSide === ControlledSize.First ? sizes[current] + offset : sizes[current] - offset);\r\n\r\n // Min size check\r\n if (newSize < minSize) {\r\n newSize = minSize;\r\n }\r\n\r\n // Max size check\r\n if (maxSize && newSize > maxSize) {\r\n newSize = maxSize;\r\n }\r\n\r\n // Max size check across the whole container\r\n const maxContainerSize = sizes.reduce((a, b) => a + b, 0) || 0;\r\n let totalSize = 0;\r\n let totalFloating = 0;\r\n for (let i = 0; i < children.length; i++) {\r\n if (floatingCells[i]) {\r\n totalFloating++;\r\n } else {\r\n totalSize += i === current ? newSize : sizes[i];\r\n }\r\n }\r\n\r\n if (maxContainerSize - totalSize < floatingMinSize * totalFloating) {\r\n newSize = maxContainerSize - floatingMinSize * totalFloating;\r\n }\r\n\r\n if (props.direction === SplitDirection.Horizontal) {\r\n childArray[current].style.width = `${newSize}px`;\r\n } else {\r\n childArray[current].style.height = `${newSize}px`;\r\n }\r\n };\r\n\r\n const beginDrag = () => {\r\n if (!elementRef.current) {\r\n return;\r\n }\r\n const children = elementRef.current.children;\r\n sizes.length = 0;\r\n for (const child of children) {\r\n const childElement = child as HTMLElement;\r\n\r\n if (props.direction === SplitDirection.Horizontal) {\r\n sizes.push(childElement.getBoundingClientRect().width);\r\n } else {\r\n sizes.push(childElement.getBoundingClientRect().height);\r\n }\r\n }\r\n };\r\n\r\n const endDrag = () => {\r\n sizes.length = 0;\r\n };\r\n\r\n // We assume splitter are not flagging floating cells in a different way\r\n const sync = (source: HTMLElement, controlledSide: ControlledSize, size?: number, minSize?: number, maxSize?: number) => {\r\n if (!elementRef.current) {\r\n return;\r\n }\r\n\r\n const children = elementRef.current.children;\r\n const childArray = Array.from(children) as HTMLElement[];\r\n const sourceIndex = childArray.indexOf(source);\r\n if (sourceIndex <= 0) {\r\n return;\r\n }\r\n\r\n let current: number;\r\n let other: number;\r\n if (controlledSide === ControlledSize.First) {\r\n current = sourceIndex - 1;\r\n other = sourceIndex + 1;\r\n } else {\r\n current = sourceIndex + 1;\r\n other = sourceIndex - 1;\r\n }\r\n\r\n if (size !== undefined) {\r\n const sizeString = `${size | 0}px`;\r\n\r\n if (!childArray[current].style.width) {\r\n if (props.direction === SplitDirection.Horizontal) {\r\n childArray[current].style.width = sizeString;\r\n } else {\r\n childArray[current].style.height = sizeString;\r\n }\r\n }\r\n } else {\r\n noInitialSizes[current] = true;\r\n }\r\n\r\n if (minSize !== undefined) {\r\n minSizes[current] = minSize;\r\n }\r\n\r\n if (maxSize !== undefined) {\r\n maxSizes[current] = maxSize;\r\n }\r\n\r\n if (!controllers[other]) {\r\n controllers[other] = [];\r\n }\r\n controllers[other].push(current);\r\n floatingCells[other] = true;\r\n };\r\n\r\n return (\r\n <SplitContext.Provider value={{ direction: props.direction, drag, beginDrag, endDrag, sync }}>\r\n <div\r\n id={props.id}\r\n className={styles[\"split-container\"] + \" \" + props.className}\r\n style={useFluent ? { height: \"100vh\" } : undefined} // temporary until splitContainer is fluentized\r\n ref={elementRef}\r\n onPointerDown={(evt) => props.onPointerDown && props.onPointerDown(evt)}\r\n onPointerMove={(evt) => props.onPointerMove && props.onPointerMove(evt)}\r\n onPointerUp={(evt) => props.onPointerUp && props.onPointerUp(evt)}\r\n onDrop={(evt) => props.onDrop && props.onDrop(evt)}\r\n onDragOver={(evt) => props.onDragOver && props.onDragOver(evt)}\r\n >\r\n {props.children}\r\n </div>\r\n </SplitContext.Provider>\r\n );\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"splitContainer.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/split/splitContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { PropsWithChildren } from \"react\";\r\nimport { useContext, useEffect, useRef } from \"react\";\r\nimport * as styles from \"./splitContainer.module.scss\";\r\nimport { ControlledSize, SplitDirection, SplitContext } from \"./splitContext\";\r\nimport { ToolContext } from \"shared-ui-components/fluent/hoc/fluentToolWrapper\";\r\n\r\n/**\r\n * Split container properties\r\n */\r\nexport interface ISplitContainerProps {\r\n /**\r\n * Unique identifier\r\n */\r\n id?: string;\r\n\r\n /**\r\n * Split direction\r\n */\r\n direction: SplitDirection;\r\n\r\n /**\r\n * Minimum size for the floating elements\r\n */\r\n floatingMinSize?: number;\r\n\r\n /**\r\n * RefObject to the root div element\r\n */\r\n containerRef?: React.RefObject<HTMLDivElement>;\r\n\r\n /**\r\n * Optional class name\r\n */\r\n className?: string;\r\n\r\n /**\r\n * Pointer down\r\n * @param event pointer events\r\n */\r\n onPointerDown?: (event: React.PointerEvent) => void;\r\n\r\n /**\r\n * Pointer move\r\n * @param event pointer events\r\n */\r\n onPointerMove?: (event: React.PointerEvent) => void;\r\n\r\n /**\r\n * Pointer up\r\n * @param event pointer events\r\n */\r\n onPointerUp?: (event: React.PointerEvent) => void;\r\n\r\n /**\r\n * Drop\r\n * @param event drag events\r\n */\r\n onDrop?: (event: React.DragEvent<HTMLDivElement>) => void;\r\n\r\n /**\r\n * Drag over\r\n * @param event drag events\r\n */\r\n onDragOver?: (event: React.DragEvent<HTMLDivElement>) => void;\r\n}\r\n\r\n/**\r\n * Creates a split container component\r\n * @param props defines the split container properties\r\n * @returns the split container component\r\n */\r\nexport const SplitContainer: React.FC<PropsWithChildren<ISplitContainerProps>> = (props) => {\r\n const elementRef: React.RefObject<HTMLDivElement> = props.containerRef || useRef(null);\r\n const sizes: number[] = [];\r\n const floatingCells: boolean[] = [];\r\n const noInitialSizes: boolean[] = [];\r\n const floatingMinSize = props.floatingMinSize || 200;\r\n const controllers: number[][] = [];\r\n const minSizes: number[] = [];\r\n const maxSizes: number[] = [];\r\n const useFluent = useContext(ToolContext).useFluent;\r\n\r\n const buildGridDefinition = () => {\r\n if (!elementRef.current) {\r\n return;\r\n }\r\n const children = elementRef.current.children;\r\n\r\n let gridIndex = 1;\r\n const pickArray = Array.from(children);\r\n let gridDefinition = \"\";\r\n for (const child of children) {\r\n const childElement = child as HTMLElement;\r\n if (child.classList.contains(styles[\"splitter\"])) {\r\n gridDefinition += \"auto \";\r\n } else {\r\n const sourceIndex = pickArray.indexOf(child);\r\n if (floatingCells[sourceIndex] || noInitialSizes[sourceIndex]) {\r\n gridDefinition += \"1fr \";\r\n } else {\r\n gridDefinition += \"auto \";\r\n }\r\n }\r\n\r\n if (props.direction === SplitDirection.Horizontal) {\r\n childElement.style.gridRow = \"1\";\r\n childElement.style.gridColumn = gridIndex.toString();\r\n } else {\r\n childElement.style.gridColumn = \"1\";\r\n childElement.style.gridRow = gridIndex.toString();\r\n }\r\n\r\n gridIndex++;\r\n }\r\n\r\n if (props.direction === SplitDirection.Horizontal) {\r\n elementRef.current.style.gridTemplateRows = \"100%\";\r\n elementRef.current.style.gridTemplateColumns = gridDefinition;\r\n } else {\r\n elementRef.current.style.gridTemplateColumns = \"100%\";\r\n elementRef.current.style.gridTemplateRows = gridDefinition;\r\n }\r\n };\r\n\r\n const handleResize = () => {\r\n if (!elementRef.current) {\r\n return;\r\n }\r\n\r\n // Check if we have enough room for everyone\r\n const children = elementRef.current.children;\r\n for (let i = 0; i < children.length; i++) {\r\n if (!floatingCells[i]) {\r\n continue;\r\n }\r\n\r\n const child = children[i] as HTMLElement;\r\n let childsize: number;\r\n if (props.direction === SplitDirection.Horizontal) {\r\n childsize = child.getBoundingClientRect().width;\r\n } else {\r\n childsize = child.getBoundingClientRect().height;\r\n }\r\n\r\n if (childsize < floatingMinSize) {\r\n const missing = Math.floor(floatingMinSize - childsize);\r\n let done = 0;\r\n\r\n // picking the controller in order and try to reduce their size to fit\r\n for (let j = 0; j < controllers[i].length; j++) {\r\n const controllerIndex = controllers[i][j];\r\n const controller = children[controllerIndex] as HTMLElement;\r\n const currentSize = props.direction === SplitDirection.Horizontal ? controller.getBoundingClientRect().width : controller.getBoundingClientRect().height;\r\n let newSize = currentSize - missing;\r\n if (minSizes[controllerIndex]) {\r\n newSize = Math.max(newSize, minSizes[controllerIndex]);\r\n }\r\n if (props.direction === SplitDirection.Horizontal) {\r\n controller.style.width = `${newSize}px`;\r\n } else {\r\n controller.style.height = `${newSize}px`;\r\n }\r\n\r\n done += currentSize - newSize;\r\n\r\n if (done === missing) {\r\n // We made it\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n buildGridDefinition();\r\n\r\n // Add event listener for window resize\r\n window.addEventListener(\"resize\", handleResize);\r\n\r\n // Cleanup the event listener on component unmount\r\n return () => {\r\n window.removeEventListener(\"resize\", handleResize);\r\n };\r\n }, []);\r\n\r\n const drag = (offset: number, source: HTMLElement, controlledSide: ControlledSize) => {\r\n if (!elementRef.current) {\r\n return;\r\n }\r\n\r\n const children = elementRef.current.children;\r\n const childArray = Array.from(children) as HTMLElement[];\r\n const sourceIndex = childArray.indexOf(source);\r\n if (sourceIndex <= 0) {\r\n return;\r\n }\r\n\r\n let current: number;\r\n if (controlledSide === ControlledSize.First) {\r\n current = sourceIndex - 1;\r\n } else {\r\n current = sourceIndex + 1;\r\n }\r\n const minSize = minSizes[current] || 0;\r\n const maxSize = maxSizes[current];\r\n\r\n noInitialSizes[current] = false;\r\n buildGridDefinition();\r\n\r\n let newSize = Math.floor(controlledSide === ControlledSize.First ? sizes[current] + offset : sizes[current] - offset);\r\n\r\n // Min size check\r\n if (newSize < minSize) {\r\n newSize = minSize;\r\n }\r\n\r\n // Max size check\r\n if (maxSize && newSize > maxSize) {\r\n newSize = maxSize;\r\n }\r\n\r\n // Max size check across the whole container\r\n const maxContainerSize = sizes.reduce((a, b) => a + b, 0) || 0;\r\n let totalSize = 0;\r\n let totalFloating = 0;\r\n for (let i = 0; i < children.length; i++) {\r\n if (floatingCells[i]) {\r\n totalFloating++;\r\n } else {\r\n totalSize += i === current ? newSize : sizes[i];\r\n }\r\n }\r\n\r\n if (maxContainerSize - totalSize < floatingMinSize * totalFloating) {\r\n newSize = maxContainerSize - floatingMinSize * totalFloating;\r\n }\r\n\r\n if (props.direction === SplitDirection.Horizontal) {\r\n childArray[current].style.width = `${newSize}px`;\r\n } else {\r\n childArray[current].style.height = `${newSize}px`;\r\n }\r\n };\r\n\r\n const beginDrag = () => {\r\n if (!elementRef.current) {\r\n return;\r\n }\r\n const children = elementRef.current.children;\r\n sizes.length = 0;\r\n for (const child of children) {\r\n const childElement = child as HTMLElement;\r\n\r\n if (props.direction === SplitDirection.Horizontal) {\r\n sizes.push(childElement.getBoundingClientRect().width);\r\n } else {\r\n sizes.push(childElement.getBoundingClientRect().height);\r\n }\r\n }\r\n };\r\n\r\n const endDrag = () => {\r\n sizes.length = 0;\r\n };\r\n\r\n // We assume splitter are not flagging floating cells in a different way\r\n const sync = (source: HTMLElement, controlledSide: ControlledSize, size?: number, minSize?: number, maxSize?: number) => {\r\n if (!elementRef.current) {\r\n return;\r\n }\r\n\r\n const children = elementRef.current.children;\r\n const childArray = Array.from(children) as HTMLElement[];\r\n const sourceIndex = childArray.indexOf(source);\r\n if (sourceIndex <= 0) {\r\n return;\r\n }\r\n\r\n let current: number;\r\n let other: number;\r\n if (controlledSide === ControlledSize.First) {\r\n current = sourceIndex - 1;\r\n other = sourceIndex + 1;\r\n } else {\r\n current = sourceIndex + 1;\r\n other = sourceIndex - 1;\r\n }\r\n\r\n if (size !== undefined) {\r\n const sizeString = `${size | 0}px`;\r\n const alreadySet = props.direction === SplitDirection.Horizontal ? childArray[current].style.width : childArray[current].style.height;\r\n\r\n if (!alreadySet) {\r\n if (props.direction === SplitDirection.Horizontal) {\r\n childArray[current].style.width = sizeString;\r\n } else {\r\n childArray[current].style.height = sizeString;\r\n }\r\n }\r\n } else {\r\n noInitialSizes[current] = true;\r\n }\r\n\r\n if (minSize !== undefined) {\r\n minSizes[current] = minSize;\r\n }\r\n\r\n if (maxSize !== undefined) {\r\n maxSizes[current] = maxSize;\r\n }\r\n\r\n if (!controllers[other]) {\r\n controllers[other] = [];\r\n }\r\n controllers[other].push(current);\r\n floatingCells[other] = true;\r\n };\r\n\r\n return (\r\n <SplitContext.Provider value={{ direction: props.direction, drag, beginDrag, endDrag, sync }}>\r\n <div\r\n id={props.id}\r\n className={styles[\"split-container\"] + \" \" + props.className}\r\n style={useFluent ? { height: \"100vh\" } : undefined} // temporary until splitContainer is fluentized\r\n ref={elementRef}\r\n onPointerDown={(evt) => props.onPointerDown && props.onPointerDown(evt)}\r\n onPointerMove={(evt) => props.onPointerMove && props.onPointerMove(evt)}\r\n onPointerUp={(evt) => props.onPointerUp && props.onPointerUp(evt)}\r\n onDrop={(evt) => props.onDrop && props.onDrop(evt)}\r\n onDragOver={(evt) => props.onDragOver && props.onDragOver(evt)}\r\n >\r\n {props.children}\r\n </div>\r\n </SplitContext.Provider>\r\n );\r\n};\r\n"]}
|