@babylonjs/node-editor 5.0.0-rc.0 → 5.0.0-rc.3

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.
@@ -10021,7 +10021,7 @@ __webpack_require__.r(__webpack_exports__);
10021
10021
 
10022
10022
  var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()(_node_modules_css_loader_dist_runtime_cssWithMappingToString_js__WEBPACK_IMPORTED_MODULE_0___default.a);
10023
10023
  // Module
10024
- ___CSS_LOADER_EXPORT___.push([module.i, "#nme-log-console {\n background: #333333;\n height: 120px;\n box-sizing: border-box;\n margin: 0;\n padding: 10px;\n width: 100%;\n overflow: hidden;\n overflow-y: auto; }\n #nme-log-console .log {\n color: white;\n font-size: 14px;\n font-family: 'Courier New', Courier, monospace; }\n #nme-log-console .log.error {\n color: red; }\n", "",{"version":3,"sources":["webpack://./components/log/log.scss"],"names":[],"mappings":"AAAA;EACI,mBAAmB;EACnB,aAAa;EACb,sBAAsB;EACtB,SAAS;EACT,aAAa;EACb,WAAW;EACX,gBAAgB;EAChB,gBAAgB,EAAA;EARpB;IAWQ,YAAY;IACZ,eAAe;IACf,8CAA8C,EAAA;IAbtD;MAgBY,UAAS,EAAA","sourcesContent":["#nme-log-console {\r\n background: #333333;\r\n height: 120px;\r\n box-sizing: border-box;\r\n margin: 0;\r\n padding: 10px;\r\n width: 100%; \r\n overflow: hidden;\r\n overflow-y: auto;\r\n\r\n .log {\r\n color: white;\r\n font-size: 14px;\r\n font-family: 'Courier New', Courier, monospace;\r\n\r\n &.error {\r\n color:red;\r\n }\r\n }\r\n}"],"sourceRoot":""}]);
10024
+ ___CSS_LOADER_EXPORT___.push([module.i, "#nme-log-console {\n background: #333333;\n height: 120px;\n box-sizing: border-box;\n margin: 0;\n padding: 10px;\n width: 100%;\n overflow: hidden;\n overflow-y: auto;\n grid-row: 2;\n grid-column: 3; }\n #nme-log-console .log {\n color: white;\n font-size: 14px;\n font-family: 'Courier New', Courier, monospace; }\n #nme-log-console .log.error {\n color: red; }\n", "",{"version":3,"sources":["webpack://./components/log/log.scss"],"names":[],"mappings":"AAAA;EACI,mBAAmB;EACnB,aAAa;EACb,sBAAsB;EACtB,SAAS;EACT,aAAa;EACb,WAAW;EACX,gBAAgB;EAChB,gBAAgB;EAChB,WAAW;EACX,cAAc,EAAA;EAVlB;IAaQ,YAAY;IACZ,eAAe;IACf,8CAA8C,EAAA;IAftD;MAkBY,UAAS,EAAA","sourcesContent":["#nme-log-console {\r\n background: #333333;\r\n height: 120px;\r\n box-sizing: border-box;\r\n margin: 0;\r\n padding: 10px;\r\n width: 100%; \r\n overflow: hidden;\r\n overflow-y: auto;\r\n grid-row: 2;\r\n grid-column: 3;\r\n\r\n .log {\r\n color: white;\r\n font-size: 14px;\r\n font-family: 'Courier New', Courier, monospace;\r\n\r\n &.error {\r\n color:red;\r\n }\r\n }\r\n}"],"sourceRoot":""}]);
10025
10025
  // Exports
10026
10026
  /* harmony default export */ __webpack_exports__["default"] = (___CSS_LOADER_EXPORT___);
10027
10027
 
@@ -55645,6 +55645,7 @@ var LogEntry = /** @class */ (function () {
55645
55645
  function LogEntry(message, isError) {
55646
55646
  this.message = message;
55647
55647
  this.isError = isError;
55648
+ this.time = new Date();
55648
55649
  }
55649
55650
  return LogEntry;
55650
55651
  }());
@@ -55672,12 +55673,8 @@ var LogComponent = /** @class */ (function (_super) {
55672
55673
  logConsole.scrollTop = logConsole.scrollHeight;
55673
55674
  };
55674
55675
  LogComponent.prototype.render = function () {
55675
- var today = new Date();
55676
- var h = today.getHours();
55677
- var m = today.getMinutes();
55678
- var s = today.getSeconds();
55679
55676
  return (react__WEBPACK_IMPORTED_MODULE_1__["createElement"]("div", { id: "nme-log-console", ref: "log-console" }, this.state.logs.map(function (l, i) {
55680
- return (react__WEBPACK_IMPORTED_MODULE_1__["createElement"]("div", { key: i, className: "log" + (l.isError ? " error" : "") }, h + ":" + m + ":" + s + ": " + l.message));
55677
+ return (react__WEBPACK_IMPORTED_MODULE_1__["createElement"]("div", { key: i, className: "log" + (l.isError ? " error" : "") }, l.time.getHours() + ":" + l.time.getMinutes() + ":" + l.time.getSeconds() + ": " + l.message));
55681
55678
  })));
55682
55679
  };
55683
55680
  return LogComponent;
@@ -57505,6 +57502,8 @@ __webpack_require__.r(__webpack_exports__);
57505
57502
  /* harmony import */ var _preview_previewType__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../preview/previewType */ "./components/preview/previewType.ts");
57506
57503
  /* harmony import */ var _sharedComponents_textInputLineComponent__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../../sharedComponents/textInputLineComponent */ "./sharedComponents/textInputLineComponent.tsx");
57507
57504
  /* harmony import */ var _inputsPropertyTabComponent__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./inputsPropertyTabComponent */ "./components/propertyTab/inputsPropertyTabComponent.tsx");
57505
+ /* harmony import */ var _log_logComponent__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../log/logComponent */ "./components/log/logComponent.tsx");
57506
+
57508
57507
 
57509
57508
 
57510
57509
 
@@ -57550,7 +57549,8 @@ var PropertyTabComponent = /** @class */ (function (_super) {
57550
57549
  }
57551
57550
  PropertyTabComponent.prototype.componentDidMount = function () {
57552
57551
  var _this = this;
57553
- this.props.globalState.onSelectionChangedObservable.add(function (selection) {
57552
+ this.props.globalState.onSelectionChangedObservable.add(function (options) {
57553
+ var selection = (options || {}).selection;
57554
57554
  if (selection instanceof _diagram_graphNode__WEBPACK_IMPORTED_MODULE_9__["GraphNode"]) {
57555
57555
  _this.setState({ currentNode: selection, currentFrame: null, currentFrameNodePort: null, currentNodePort: null });
57556
57556
  }
@@ -57631,15 +57631,15 @@ var PropertyTabComponent = /** @class */ (function (_super) {
57631
57631
  PropertyTabComponent.prototype.customSave = function () {
57632
57632
  var _this = this;
57633
57633
  this.setState({ uploadInProgress: true });
57634
- this.props.globalState.onLogRequiredObservable.notifyObservers({ message: "Saving your material to Babylon.js snippet server...", isError: false });
57634
+ this.props.globalState.onLogRequiredObservable.notifyObservers(new _log_logComponent__WEBPACK_IMPORTED_MODULE_28__["LogEntry"]("Saving your material to Babylon.js snippet server...", false));
57635
57635
  this.props.globalState
57636
57636
  .customSave.action(_serializationTools__WEBPACK_IMPORTED_MODULE_7__["SerializationTools"].Serialize(this.props.globalState.nodeMaterial, this.props.globalState))
57637
57637
  .then(function () {
57638
- _this.props.globalState.onLogRequiredObservable.notifyObservers({ message: "Material saved successfully", isError: false });
57638
+ _this.props.globalState.onLogRequiredObservable.notifyObservers(new _log_logComponent__WEBPACK_IMPORTED_MODULE_28__["LogEntry"]("Material saved successfully", false));
57639
57639
  _this.setState({ uploadInProgress: false });
57640
57640
  })
57641
57641
  .catch(function (err) {
57642
- _this.props.globalState.onLogRequiredObservable.notifyObservers({ message: err, isError: true });
57642
+ _this.props.globalState.onLogRequiredObservable.notifyObservers(new _log_logComponent__WEBPACK_IMPORTED_MODULE_28__["LogEntry"](err, true));
57643
57643
  _this.setState({ uploadInProgress: false });
57644
57644
  });
57645
57645
  };
@@ -58632,7 +58632,8 @@ var FrameNodePort = /** @class */ (function (_super) {
58632
58632
  _this._parentFrameId = parentFrameId;
58633
58633
  _this._isInput = isInput;
58634
58634
  _this._framePortId = framePortId;
58635
- _this._onSelectionChangedObserver = _this._globalState.onSelectionChangedObservable.add(function (selection) {
58635
+ _this._onSelectionChangedObserver = _this._globalState.onSelectionChangedObservable.add(function (options) {
58636
+ var selection = (options || {}).selection;
58636
58637
  if (Object(_graphCanvas__WEBPACK_IMPORTED_MODULE_3__["isFramePortData"])(selection) && selection.port === _this) {
58637
58638
  _this._img.classList.add("selected");
58638
58639
  }
@@ -58779,8 +58780,9 @@ var isFramePortData = function (variableToCheck) {
58779
58780
  if (variableToCheck) {
58780
58781
  return variableToCheck.port !== undefined;
58781
58782
  }
58782
- else
58783
+ else {
58783
58784
  return false;
58785
+ }
58784
58786
  };
58785
58787
  var GraphCanvasComponent = /** @class */ (function (_super) {
58786
58788
  Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(GraphCanvasComponent, _super);
@@ -58807,7 +58809,7 @@ var GraphCanvasComponent = /** @class */ (function (_super) {
58807
58809
  _this._candidatePort = null;
58808
58810
  _this._gridSize = 20;
58809
58811
  _this._selectionBox = null;
58810
- _this._selectedFrame = null;
58812
+ _this._selectedFrames = [];
58811
58813
  _this._frameCandidate = null;
58812
58814
  _this._frames = [];
58813
58815
  _this._altKeyIsPressed = false;
@@ -58815,45 +58817,64 @@ var GraphCanvasComponent = /** @class */ (function (_super) {
58815
58817
  _this._oldY = -1;
58816
58818
  _this._frameIsMoving = false;
58817
58819
  _this._isLoading = false;
58818
- props.globalState.onSelectionChangedObservable.add(function (selection) {
58820
+ props.globalState.onSelectionChangedObservable.add(function (options) {
58821
+ var _b = options || {}, selection = _b.selection, forceKeepSelection = _b.forceKeepSelection;
58819
58822
  if (!selection) {
58820
58823
  _this._selectedNodes = [];
58821
58824
  _this._selectedLink = null;
58822
- _this._selectedFrame = null;
58825
+ _this._selectedFrames = [];
58823
58826
  _this._selectedPort = null;
58824
58827
  }
58825
58828
  else {
58826
58829
  if (selection instanceof _nodeLink__WEBPACK_IMPORTED_MODULE_5__["NodeLink"]) {
58827
58830
  _this._selectedNodes = [];
58828
- _this._selectedFrame = null;
58831
+ _this._selectedFrames = [];
58829
58832
  _this._selectedLink = selection;
58830
58833
  _this._selectedPort = null;
58831
58834
  }
58832
58835
  else if (selection instanceof _graphFrame__WEBPACK_IMPORTED_MODULE_7__["GraphFrame"]) {
58833
- _this._selectedNodes = [];
58834
- _this._selectedFrame = selection;
58835
- _this._selectedLink = null;
58836
- _this._selectedPort = null;
58836
+ if (selection.isCollapsed) {
58837
+ if (_this._ctrlKeyIsPressed || forceKeepSelection) {
58838
+ if (_this._selectedFrames.indexOf(selection) === -1) {
58839
+ _this._selectedFrames.push(selection);
58840
+ }
58841
+ }
58842
+ else {
58843
+ _this._selectedFrames = [selection];
58844
+ _this._selectedNodes = [];
58845
+ _this._selectedLink = null;
58846
+ _this._selectedPort = null;
58847
+ }
58848
+ }
58849
+ else {
58850
+ _this._selectedNodes = [];
58851
+ _this._selectedFrames = [selection];
58852
+ _this._selectedLink = null;
58853
+ _this._selectedPort = null;
58854
+ }
58837
58855
  }
58838
58856
  else if (selection instanceof _graphNode__WEBPACK_IMPORTED_MODULE_3__["GraphNode"]) {
58839
- if (_this._ctrlKeyIsPressed) {
58857
+ if (_this._ctrlKeyIsPressed || forceKeepSelection) {
58840
58858
  if (_this._selectedNodes.indexOf(selection) === -1) {
58841
58859
  _this._selectedNodes.push(selection);
58842
58860
  }
58843
58861
  }
58844
58862
  else {
58845
58863
  _this._selectedNodes = [selection];
58864
+ _this._selectedFrames = [];
58865
+ _this._selectedLink = null;
58866
+ _this._selectedPort = null;
58846
58867
  }
58847
58868
  }
58848
58869
  else if (selection instanceof _nodePort__WEBPACK_IMPORTED_MODULE_6__["NodePort"]) {
58849
58870
  _this._selectedNodes = [];
58850
- _this._selectedFrame = null;
58871
+ _this._selectedFrames = [];
58851
58872
  _this._selectedLink = null;
58852
58873
  _this._selectedPort = selection;
58853
58874
  }
58854
58875
  else {
58855
58876
  _this._selectedNodes = [];
58856
- _this._selectedFrame = null;
58877
+ _this._selectedFrames = [];
58857
58878
  _this._selectedLink = null;
58858
58879
  _this._selectedPort = selection.port;
58859
58880
  }
@@ -58981,9 +59002,9 @@ var GraphCanvasComponent = /** @class */ (function (_super) {
58981
59002
  enumerable: false,
58982
59003
  configurable: true
58983
59004
  });
58984
- Object.defineProperty(GraphCanvasComponent.prototype, "selectedFrame", {
59005
+ Object.defineProperty(GraphCanvasComponent.prototype, "selectedFrames", {
58985
59006
  get: function () {
58986
- return this._selectedFrame;
59007
+ return this._selectedFrames;
58987
59008
  },
58988
59009
  enumerable: false,
58989
59010
  configurable: true
@@ -59359,11 +59380,11 @@ var GraphCanvasComponent = /** @class */ (function (_super) {
59359
59380
  frame: frame,
59360
59381
  port: port_1,
59361
59382
  };
59362
- this.props.globalState.onSelectionChangedObservable.notifyObservers(data);
59383
+ this.props.globalState.onSelectionChangedObservable.notifyObservers({ selection: data });
59363
59384
  }
59364
59385
  }
59365
59386
  else if (this._candidateLink.portA instanceof _nodePort__WEBPACK_IMPORTED_MODULE_6__["NodePort"]) {
59366
- this.props.globalState.onSelectionChangedObservable.notifyObservers(this._candidateLink.portA);
59387
+ this.props.globalState.onSelectionChangedObservable.notifyObservers({ selection: this._candidateLink.portA });
59367
59388
  }
59368
59389
  }
59369
59390
  this._candidateLink.dispose();
@@ -59379,7 +59400,7 @@ var GraphCanvasComponent = /** @class */ (function (_super) {
59379
59400
  this._frames.push(newFrame);
59380
59401
  this._frameCandidate.parentElement.removeChild(this._frameCandidate);
59381
59402
  this._frameCandidate = null;
59382
- this.props.globalState.onSelectionChangedObservable.notifyObservers(newFrame);
59403
+ this.props.globalState.onSelectionChangedObservable.notifyObservers({ selection: newFrame });
59383
59404
  }
59384
59405
  };
59385
59406
  GraphCanvasComponent.prototype.onWheel = function (evt) {
@@ -59571,6 +59592,14 @@ var GraphCanvasComponent = /** @class */ (function (_super) {
59571
59592
  });
59572
59593
  });
59573
59594
  }
59595
+ this.connectNodes(nodeA, pointA, nodeB, pointB);
59596
+ linksToNotifyForDispose === null || linksToNotifyForDispose === void 0 ? void 0 : linksToNotifyForDispose.forEach(function (link) {
59597
+ link.onDisposedObservable.notifyObservers(link);
59598
+ link.onDisposedObservable.clear();
59599
+ });
59600
+ this.props.globalState.onRebuildRequiredObservable.notifyObservers(true);
59601
+ };
59602
+ GraphCanvasComponent.prototype.connectNodes = function (nodeA, pointA, nodeB, pointB) {
59574
59603
  pointA.connectTo(pointB);
59575
59604
  this.connectPorts(pointA, pointB);
59576
59605
  // Need to potentially propagate the type of pointA to other ports of blocks connected to owner of pointB
@@ -59578,11 +59607,6 @@ var GraphCanvasComponent = /** @class */ (function (_super) {
59578
59607
  var visitedNodes = new Set([nodeA]);
59579
59608
  var visitedLinks = new Set([nodeB.links[nodeB.links.length - 1]]);
59580
59609
  GraphCanvasComponent._RefreshNode(nodeB, visitedNodes, visitedLinks);
59581
- linksToNotifyForDispose === null || linksToNotifyForDispose === void 0 ? void 0 : linksToNotifyForDispose.forEach(function (link) {
59582
- link.onDisposedObservable.notifyObservers(link);
59583
- link.onDisposedObservable.clear();
59584
- });
59585
- this.props.globalState.onRebuildRequiredObservable.notifyObservers(true);
59586
59610
  };
59587
59611
  GraphCanvasComponent.prototype.processEditorData = function (editorData) {
59588
59612
  var frames = this._frames.splice(0);
@@ -59606,7 +59630,7 @@ var GraphCanvasComponent = /** @class */ (function (_super) {
59606
59630
  GraphCanvasComponent.prototype.addFrame = function (frameData) {
59607
59631
  var frame = _graphFrame__WEBPACK_IMPORTED_MODULE_7__["GraphFrame"].Parse(frameData, this, this.props.globalState.nodeMaterial.editorData.map);
59608
59632
  this._frames.push(frame);
59609
- this.globalState.onSelectionChangedObservable.notifyObservers(frame);
59633
+ this.globalState.onSelectionChangedObservable.notifyObservers({ selection: frame });
59610
59634
  };
59611
59635
  GraphCanvasComponent.prototype.render = function () {
59612
59636
  var _this = this;
@@ -60244,14 +60268,24 @@ var GraphFrame = /** @class */ (function () {
60244
60268
  this._headerTextElement.addEventListener("pointerdown", function (evt) { return _this_1._onDown(evt); });
60245
60269
  this._headerTextElement.addEventListener("pointerup", function (evt) { return _this_1._onUp(evt); });
60246
60270
  this._headerTextElement.addEventListener("pointermove", function (evt) { return _this_1._onMove(evt); });
60247
- this._onSelectionChangedObserver = canvas.globalState.onSelectionChangedObservable.add(function (node) {
60248
- if (node === _this_1) {
60271
+ this._onSelectionChangedObserver = canvas.globalState.onSelectionChangedObservable.add(function (options) {
60272
+ if (_this_1._ownerCanvas.selectedFrames.indexOf(_this_1) !== -1) {
60249
60273
  _this_1.element.classList.add("selected");
60250
60274
  }
60251
60275
  else {
60252
60276
  _this_1.element.classList.remove("selected");
60253
60277
  }
60254
60278
  });
60279
+ canvas.globalState.onSelectionBoxMoved.add(function (rect1) {
60280
+ var rect2 = _this_1.element.getBoundingClientRect();
60281
+ var overlap = !(rect1.right < rect2.left ||
60282
+ rect1.left > rect2.right ||
60283
+ rect1.bottom < rect2.top ||
60284
+ rect1.top > rect2.bottom);
60285
+ if (overlap) {
60286
+ canvas.globalState.onSelectionChangedObservable.notifyObservers({ selection: _this_1, forceKeepSelection: true });
60287
+ }
60288
+ });
60255
60289
  this._onGraphNodeRemovalObserver = canvas.globalState.onGraphNodeRemovalObservable.add(function (node) {
60256
60290
  // remove node from this._nodes
60257
60291
  var index = _this_1._nodes.indexOf(node);
@@ -60746,13 +60780,19 @@ var GraphFrame = /** @class */ (function () {
60746
60780
  this.y = this._ownerCanvas.getGridPosition(this.y);
60747
60781
  };
60748
60782
  GraphFrame.prototype._onDown = function (evt) {
60749
- evt.stopPropagation();
60750
- this._mouseStartPointX = evt.clientX;
60751
- this._mouseStartPointY = evt.clientY;
60752
60783
  this._headerTextElement.setPointerCapture(evt.pointerId);
60753
- this._ownerCanvas.globalState.onSelectionChangedObservable.notifyObservers(this);
60784
+ var indexInSelection = this._ownerCanvas.selectedFrames.indexOf(this);
60785
+ if (indexInSelection === -1) {
60786
+ this._ownerCanvas.globalState.onSelectionChangedObservable.notifyObservers({ selection: this });
60787
+ }
60788
+ else if (evt.ctrlKey) {
60789
+ this._ownerCanvas.selectedFrames.splice(indexInSelection, 1);
60790
+ this.element.classList.remove("selected");
60791
+ }
60754
60792
  this._ownerCanvas._frameIsMoving = true;
60755
- this.move(this._ownerCanvas.getGridPosition(this.x), this._ownerCanvas.getGridPosition(this.y));
60793
+ this._mouseStartPointX = evt.clientX;
60794
+ this._mouseStartPointY = evt.clientY;
60795
+ evt.stopPropagation();
60756
60796
  };
60757
60797
  GraphFrame.prototype.move = function (newX, newY, align) {
60758
60798
  if (align === void 0) { align = true; }
@@ -60792,7 +60832,15 @@ var GraphFrame = /** @class */ (function () {
60792
60832
  }
60793
60833
  var newX = (evt.clientX - this._mouseStartPointX) / this._ownerCanvas.zoom;
60794
60834
  var newY = (evt.clientY - this._mouseStartPointY) / this._ownerCanvas.zoom;
60795
- this._moveFrame(newX, newY);
60835
+ for (var _i = 0, _a = this._ownerCanvas.selectedFrames; _i < _a.length; _i++) {
60836
+ var frame = _a[_i];
60837
+ frame._moveFrame(newX, newY);
60838
+ }
60839
+ for (var _b = 0, _c = this._ownerCanvas.selectedNodes; _b < _c.length; _b++) {
60840
+ var node = _c[_b];
60841
+ node.x += newX;
60842
+ node.y += newY;
60843
+ }
60796
60844
  this._mouseStartPointX = evt.clientX;
60797
60845
  this._mouseStartPointY = evt.clientY;
60798
60846
  evt.stopPropagation();
@@ -61106,7 +61154,8 @@ var GraphNode = /** @class */ (function () {
61106
61154
  this._isVisible = true;
61107
61155
  this._enclosingFrameId = -1;
61108
61156
  this._globalState = globalState;
61109
- this._onSelectionChangedObserver = this._globalState.onSelectionChangedObservable.add(function (node) {
61157
+ this._onSelectionChangedObserver = this._globalState.onSelectionChangedObservable.add(function (options) {
61158
+ var node = (options || {}).selection;
61110
61159
  if (node === _this) {
61111
61160
  _this._visual.classList.add("selected");
61112
61161
  }
@@ -61285,7 +61334,7 @@ var GraphNode = /** @class */ (function () {
61285
61334
  }
61286
61335
  }
61287
61336
  else {
61288
- this._globalState.onSelectionChangedObservable.notifyObservers(this);
61337
+ this._globalState.onSelectionChangedObservable.notifyObservers({ selection: this });
61289
61338
  }
61290
61339
  },
61291
61340
  enumerable: false,
@@ -61401,7 +61450,7 @@ var GraphNode = /** @class */ (function () {
61401
61450
  }
61402
61451
  var indexInSelection = this._ownerCanvas.selectedNodes.indexOf(this);
61403
61452
  if (indexInSelection === -1) {
61404
- this._globalState.onSelectionChangedObservable.notifyObservers(this);
61453
+ this._globalState.onSelectionChangedObservable.notifyObservers({ selection: this });
61405
61454
  }
61406
61455
  else if (evt.ctrlKey) {
61407
61456
  this.isSelected = false;
@@ -61441,6 +61490,10 @@ var GraphNode = /** @class */ (function () {
61441
61490
  selectedNode.x += newX;
61442
61491
  selectedNode.y += newY;
61443
61492
  }
61493
+ for (var _b = 0, _c = this._ownerCanvas.selectedFrames; _b < _c.length; _b++) {
61494
+ var frame = _c[_b];
61495
+ frame._moveFrame(newX, newY);
61496
+ }
61444
61497
  this._mouseStartPointX = evt.clientX;
61445
61498
  this._mouseStartPointY = evt.clientY;
61446
61499
  evt.stopPropagation();
@@ -61589,12 +61642,13 @@ var NodeLink = /** @class */ (function () {
61589
61642
  this._selectionPath.setAttribute("fill", "none");
61590
61643
  this._selectionPath.classList.add("selection-link");
61591
61644
  svg.appendChild(this._selectionPath);
61592
- this._selectionPath.onmousedown = function () { return _this.onClick(); };
61645
+ this._selectionPath.onmousedown = function (evt) { return _this.onClick(evt); };
61593
61646
  if (this._portB) {
61594
61647
  // Update
61595
61648
  this.update();
61596
61649
  }
61597
- this._onSelectionChangedObserver = this._graphCanvas.globalState.onSelectionChangedObservable.add(function (selection) {
61650
+ this._onSelectionChangedObserver = this._graphCanvas.globalState.onSelectionChangedObservable.add(function (options) {
61651
+ var selection = (options || {}).selection;
61598
61652
  if (selection === _this) {
61599
61653
  _this._path.classList.add("selected");
61600
61654
  _this._selectionPath.classList.add("selected");
@@ -61682,8 +61736,32 @@ var NodeLink = /** @class */ (function () {
61682
61736
  }
61683
61737
  this._path.setAttribute("stroke", this._portA.element.style.backgroundColor);
61684
61738
  };
61685
- NodeLink.prototype.onClick = function () {
61686
- this._graphCanvas.globalState.onSelectionChangedObservable.notifyObservers(this);
61739
+ NodeLink.prototype.onClick = function (evt) {
61740
+ var _this = this;
61741
+ if (evt.altKey) {
61742
+ // Create an elbow at the clicked location
61743
+ this._graphCanvas.globalState.onNewNodeCreatedObservable.addOnce(function (newNode) {
61744
+ var newElbowBlock = newNode.block;
61745
+ var nodeA = _this._nodeA;
61746
+ var pointA = _this._portA.connectionPoint;
61747
+ var nodeB = _this._nodeB;
61748
+ var pointB = _this._portB.connectionPoint;
61749
+ // Delete previous link
61750
+ _this.dispose();
61751
+ // Connect to Elbow block
61752
+ _this._graphCanvas.connectNodes(nodeA, pointA, newNode, newElbowBlock.input);
61753
+ _this._graphCanvas.connectNodes(newNode, newElbowBlock.output, nodeB, pointB);
61754
+ _this._graphCanvas.globalState.onRebuildRequiredObservable.notifyObservers(true);
61755
+ });
61756
+ this._graphCanvas.globalState.onNewBlockRequiredObservable.notifyObservers({
61757
+ type: "ElbowBlock",
61758
+ targetX: evt.clientX,
61759
+ targetY: evt.clientY,
61760
+ needRepositioning: true
61761
+ });
61762
+ return;
61763
+ }
61764
+ this._graphCanvas.globalState.onSelectionChangedObservable.notifyObservers({ selection: this });
61687
61765
  };
61688
61766
  NodeLink.prototype.dispose = function (notify) {
61689
61767
  if (notify === void 0) { notify = true; }
@@ -61756,7 +61834,8 @@ var NodePort = /** @class */ (function () {
61756
61834
  _this._element.classList.add("selected");
61757
61835
  _this._globalState.onCandidatePortSelectedObservable.notifyObservers(_this);
61758
61836
  });
61759
- this._onSelectionChangedObserver = this._globalState.onSelectionChangedObservable.add(function (selection) {
61837
+ this._onSelectionChangedObserver = this._globalState.onSelectionChangedObservable.add(function (options) {
61838
+ var selection = (options || {}).selection;
61760
61839
  if (selection === _this) {
61761
61840
  _this._img.classList.add("selected");
61762
61841
  }
@@ -62069,7 +62148,8 @@ var FrameNodePortPropertyTabComponent = /** @class */ (function (_super) {
62069
62148
  port: _this_1.props.frameNodePort,
62070
62149
  };
62071
62150
  var _this = _this_1;
62072
- _this_1._onSelectionChangedObserver = _this_1.props.globalState.onSelectionChangedObservable.add(function (selection) {
62151
+ _this_1._onSelectionChangedObserver = _this_1.props.globalState.onSelectionChangedObservable.add(function (options) {
62152
+ var selection = (options || {}).selection;
62073
62153
  if (Object(_graphCanvas__WEBPACK_IMPORTED_MODULE_6__["isFramePortData"])(selection)) {
62074
62154
  selection.port.onFramePortPositionChangedObservable.clear();
62075
62155
  _this._onFramePortPositionChangedObserver = selection.port.onFramePortPositionChangedObservable.add(function (port) {
@@ -63766,11 +63846,12 @@ PropertyLedger.RegisteredControls["ColorMergerBlock"] = _properties_colorMergerP
63766
63846
  /*!************************!*\
63767
63847
  !*** ./globalState.ts ***!
63768
63848
  \************************/
63769
- /*! exports provided: GlobalState */
63849
+ /*! exports provided: ISelectionChangedOptions, GlobalState */
63770
63850
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
63771
63851
 
63772
63852
  "use strict";
63773
63853
  __webpack_require__.r(__webpack_exports__);
63854
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ISelectionChangedOptions", function() { return ISelectionChangedOptions; });
63774
63855
  /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GlobalState", function() { return GlobalState; });
63775
63856
  /* harmony import */ var _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babylonjs/core/Misc/observable */ "@babylonjs/core/Misc/dataStorage");
63776
63857
  /* harmony import */ var _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__);
@@ -63781,8 +63862,15 @@ __webpack_require__.r(__webpack_exports__);
63781
63862
 
63782
63863
 
63783
63864
 
63865
+ var ISelectionChangedOptions = /** @class */ (function () {
63866
+ function ISelectionChangedOptions() {
63867
+ }
63868
+ return ISelectionChangedOptions;
63869
+ }());
63870
+
63784
63871
  var GlobalState = /** @class */ (function () {
63785
63872
  function GlobalState() {
63873
+ this.onNewNodeCreatedObservable = new _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
63786
63874
  this.onSelectionChangedObservable = new _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
63787
63875
  this.onRebuildRequiredObservable = new _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
63788
63876
  this.onBuiltObservable = new _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
@@ -63806,6 +63894,7 @@ var GlobalState = /** @class */ (function () {
63806
63894
  this.onImportFrameObservable = new _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
63807
63895
  this.onGraphNodeRemovalObservable = new _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
63808
63896
  this.onPopupClosedObservable = new _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
63897
+ this.onNewBlockRequiredObservable = new _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
63809
63898
  this.onGridSizeChanged = new _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
63810
63899
  this.onExposePortOnFrameObservable = new _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]();
63811
63900
  this.particleSystemBlendMode = _babylonjs_core_Misc_observable__WEBPACK_IMPORTED_MODULE_0__["ParticleSystem"].BLENDMODE_ONEONE;
@@ -63899,12 +63988,11 @@ var GraphEditor = /** @class */ (function (_super) {
63899
63988
  Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(GraphEditor, _super);
63900
63989
  function GraphEditor(props) {
63901
63990
  var _this = _super.call(this, props) || this;
63902
- _this.NodeWidth = 100;
63903
63991
  _this._leftWidth = _babylonjs_core_Misc_dataStorage__WEBPACK_IMPORTED_MODULE_6__["DataStorage"].ReadNumber("LeftWidth", 200);
63904
63992
  _this._rightWidth = _babylonjs_core_Misc_dataStorage__WEBPACK_IMPORTED_MODULE_6__["DataStorage"].ReadNumber("RightWidth", 300);
63905
63993
  _this._blocks = new Array();
63906
63994
  _this._copiedNodes = [];
63907
- _this._copiedFrame = null;
63995
+ _this._copiedFrames = [];
63908
63996
  _this._mouseLocationX = 0;
63909
63997
  _this._mouseLocationY = 0;
63910
63998
  _this.handlePopUp = function () {
@@ -64049,6 +64137,17 @@ var GraphEditor = /** @class */ (function (_super) {
64049
64137
  _this.state = {
64050
64138
  showPreviewPopUp: false,
64051
64139
  };
64140
+ _this._graphCanvasRef = react__WEBPACK_IMPORTED_MODULE_1__["createRef"]();
64141
+ _this._diagramContainerRef = react__WEBPACK_IMPORTED_MODULE_1__["createRef"]();
64142
+ _this.props.globalState.onNewBlockRequiredObservable.add(function (eventData) {
64143
+ var targetX = eventData.targetX;
64144
+ var targetY = eventData.targetY;
64145
+ if (eventData.needRepositioning) {
64146
+ targetX = targetX - _this._diagramContainer.offsetLeft;
64147
+ targetY = targetY - _this._diagramContainer.offsetTop;
64148
+ }
64149
+ _this.emitNewBlock(eventData.type, targetX, targetY);
64150
+ });
64052
64151
  _this.props.globalState.onRebuildRequiredObservable.add(function (autoConfigure) {
64053
64152
  if (_this.props.globalState.nodeMaterial) {
64054
64153
  _this.buildMaterial(autoConfigure);
@@ -64095,26 +64194,28 @@ var GraphEditor = /** @class */ (function (_super) {
64095
64194
  if (_this._graphCanvas.selectedLink) {
64096
64195
  _this._graphCanvas.selectedLink.dispose();
64097
64196
  }
64098
- if (_this._graphCanvas.selectedFrame) {
64099
- var frame = _this._graphCanvas.selectedFrame;
64100
- if (frame.isCollapsed) {
64101
- while (frame.nodes.length > 0) {
64102
- var targetBlock = frame.nodes[0].block;
64103
- _this.props.globalState.nodeMaterial.removeBlock(targetBlock);
64104
- var blockIndex = _this._blocks.indexOf(targetBlock);
64105
- if (blockIndex > -1) {
64106
- _this._blocks.splice(blockIndex, 1);
64197
+ if (_this._graphCanvas.selectedFrames.length) {
64198
+ for (var _a = 0, _b = _this._graphCanvas.selectedFrames; _a < _b.length; _a++) {
64199
+ var frame = _b[_a];
64200
+ if (frame.isCollapsed) {
64201
+ while (frame.nodes.length > 0) {
64202
+ var targetBlock = frame.nodes[0].block;
64203
+ _this.props.globalState.nodeMaterial.removeBlock(targetBlock);
64204
+ var blockIndex = _this._blocks.indexOf(targetBlock);
64205
+ if (blockIndex > -1) {
64206
+ _this._blocks.splice(blockIndex, 1);
64207
+ }
64208
+ frame.nodes[0].dispose();
64107
64209
  }
64108
- frame.nodes[0].dispose();
64210
+ frame.isCollapsed = false;
64109
64211
  }
64110
- frame.isCollapsed = false;
64111
- }
64112
- else {
64113
- frame.nodes.forEach(function (node) {
64114
- node.enclosingFrameId = -1;
64115
- });
64212
+ else {
64213
+ frame.nodes.forEach(function (node) {
64214
+ node.enclosingFrameId = -1;
64215
+ });
64216
+ }
64217
+ frame.dispose();
64116
64218
  }
64117
- _this._graphCanvas.selectedFrame.dispose();
64118
64219
  }
64119
64220
  _this.props.globalState.onSelectionChangedObservable.notifyObservers(null);
64120
64221
  _this.props.globalState.onRebuildRequiredObservable.notifyObservers(false);
@@ -64126,10 +64227,13 @@ var GraphEditor = /** @class */ (function (_super) {
64126
64227
  if (evt.key === "c" || evt.key === "C") {
64127
64228
  // Copy
64128
64229
  _this._copiedNodes = [];
64129
- _this._copiedFrame = null;
64130
- if (_this._graphCanvas.selectedFrame) {
64131
- _this._copiedFrame = _this._graphCanvas.selectedFrame;
64132
- _this._copiedFrame.serialize(true);
64230
+ _this._copiedFrames = [];
64231
+ if (_this._graphCanvas.selectedFrames.length) {
64232
+ for (var _c = 0, _d = _this._graphCanvas.selectedFrames; _c < _d.length; _c++) {
64233
+ var frame = _d[_c];
64234
+ frame.serialize(true);
64235
+ _this._copiedFrames.push(frame);
64236
+ }
64133
64237
  return;
64134
64238
  }
64135
64239
  var selectedItems = _this._graphCanvas.selectedNodes;
@@ -64147,44 +64251,47 @@ var GraphEditor = /** @class */ (function (_super) {
64147
64251
  var rootElement = _this.props.globalState.hostDocument.querySelector(".diagram-container");
64148
64252
  var zoomLevel = _this._graphCanvas.zoom;
64149
64253
  var currentY = (_this._mouseLocationY - rootElement.offsetTop - _this._graphCanvas.y - 20) / zoomLevel;
64150
- if (_this._copiedFrame) {
64151
- // New frame
64152
- var newFrame = new _diagram_graphFrame__WEBPACK_IMPORTED_MODULE_14__["GraphFrame"](null, _this._graphCanvas, true);
64153
- _this._graphCanvas.frames.push(newFrame);
64154
- newFrame.width = _this._copiedFrame.width;
64155
- newFrame.height = _this._copiedFrame.height;
64156
- newFrame.width / 2;
64157
- newFrame.name = _this._copiedFrame.name;
64158
- newFrame.color = _this._copiedFrame.color;
64159
- var currentX_1 = (_this._mouseLocationX - rootElement.offsetLeft - _this._graphCanvas.x) / zoomLevel;
64160
- newFrame.x = currentX_1 - newFrame.width / 2;
64161
- newFrame.y = currentY;
64162
- // Paste nodes
64163
- if (_this._copiedFrame.nodes.length) {
64164
- currentX_1 = newFrame.x + _this._copiedFrame.nodes[0].x - _this._copiedFrame.x;
64165
- currentY = newFrame.y + _this._copiedFrame.nodes[0].y - _this._copiedFrame.y;
64166
- _this._graphCanvas._frameIsMoving = true;
64167
- var newNodes = _this.pasteSelection(_this._copiedFrame.nodes, currentX_1, currentY);
64168
- if (newNodes) {
64169
- for (var _a = 0, newNodes_1 = newNodes; _a < newNodes_1.length; _a++) {
64170
- var node = newNodes_1[_a];
64171
- newFrame.syncNode(node);
64254
+ if (_this._copiedFrames.length) {
64255
+ for (var _e = 0, _f = _this._copiedFrames; _e < _f.length; _e++) {
64256
+ var frame = _f[_e];
64257
+ // New frame
64258
+ var newFrame = new _diagram_graphFrame__WEBPACK_IMPORTED_MODULE_14__["GraphFrame"](null, _this._graphCanvas, true);
64259
+ _this._graphCanvas.frames.push(newFrame);
64260
+ newFrame.width = frame.width;
64261
+ newFrame.height = frame.height;
64262
+ newFrame.width / 2;
64263
+ newFrame.name = frame.name;
64264
+ newFrame.color = frame.color;
64265
+ var currentX_1 = (_this._mouseLocationX - rootElement.offsetLeft - _this._graphCanvas.x) / zoomLevel;
64266
+ newFrame.x = currentX_1 - newFrame.width / 2;
64267
+ newFrame.y = currentY;
64268
+ // Paste nodes
64269
+ if (frame.nodes.length) {
64270
+ currentX_1 = newFrame.x + frame.nodes[0].x - frame.x;
64271
+ currentY = newFrame.y + frame.nodes[0].y - frame.y;
64272
+ _this._graphCanvas._frameIsMoving = true;
64273
+ var newNodes = _this.pasteSelection(frame.nodes, currentX_1, currentY);
64274
+ if (newNodes) {
64275
+ for (var _g = 0, newNodes_1 = newNodes; _g < newNodes_1.length; _g++) {
64276
+ var node = newNodes_1[_g];
64277
+ newFrame.syncNode(node);
64278
+ }
64172
64279
  }
64280
+ _this._graphCanvas._frameIsMoving = false;
64173
64281
  }
64174
- _this._graphCanvas._frameIsMoving = false;
64175
- }
64176
- newFrame.adjustPorts();
64177
- if (_this._copiedFrame.isCollapsed) {
64178
- newFrame.isCollapsed = true;
64282
+ newFrame.adjustPorts();
64283
+ if (frame.isCollapsed) {
64284
+ newFrame.isCollapsed = true;
64285
+ }
64286
+ // Select
64287
+ _this.props.globalState.onSelectionChangedObservable.notifyObservers({ selection: newFrame, forceKeepSelection: true });
64288
+ return;
64179
64289
  }
64180
- // Select
64181
- _this.props.globalState.onSelectionChangedObservable.notifyObservers(newFrame);
64182
- return;
64183
64290
  }
64184
64291
  if (!_this._copiedNodes.length) {
64185
64292
  return;
64186
64293
  }
64187
- var currentX = (_this._mouseLocationX - rootElement.offsetLeft - _this._graphCanvas.x - _this.NodeWidth) / zoomLevel;
64294
+ var currentX = (_this._mouseLocationX - rootElement.offsetLeft - _this._graphCanvas.x - GraphEditor.NodeWidth) / zoomLevel;
64188
64295
  _this.pasteSelection(_this._copiedNodes, currentX, currentY, true);
64189
64296
  }
64190
64297
  }, false);
@@ -64236,7 +64343,8 @@ var GraphEditor = /** @class */ (function (_super) {
64236
64343
  GraphEditor.prototype.componentDidMount = function () {
64237
64344
  var _this = this;
64238
64345
  if (this.props.globalState.hostDocument) {
64239
- this._graphCanvas = this.refs["graphCanvas"];
64346
+ this._graphCanvas = this._graphCanvasRef.current;
64347
+ this._diagramContainer = this._diagramContainerRef.current;
64240
64348
  this._previewManager = new _components_preview_previewManager__WEBPACK_IMPORTED_MODULE_9__["PreviewManager"](this.props.globalState.hostDocument.getElementById("preview-canvas"), this.props.globalState);
64241
64349
  this.props.globalState._previewManager = this._previewManager;
64242
64350
  }
@@ -64331,7 +64439,7 @@ var GraphEditor = /** @class */ (function (_super) {
64331
64439
  newNode.cleanAccumulation();
64332
64440
  newNodes.push(newNode);
64333
64441
  if (selectNew) {
64334
- this.props.globalState.onSelectionChangedObservable.notifyObservers(newNode);
64442
+ this.props.globalState.onSelectionChangedObservable.notifyObservers({ selection: newNode, forceKeepSelection: true });
64335
64443
  }
64336
64444
  }
64337
64445
  // Relink
@@ -64478,13 +64586,12 @@ var GraphEditor = /** @class */ (function (_super) {
64478
64586
  GraphEditor.prototype.buildColumnLayout = function () {
64479
64587
  return "".concat(this._leftWidth, "px 4px calc(100% - ").concat(this._leftWidth + 8 + this._rightWidth, "px) 4px ").concat(this._rightWidth, "px");
64480
64588
  };
64481
- GraphEditor.prototype.emitNewBlock = function (event) {
64589
+ GraphEditor.prototype.emitNewBlock = function (blockType, targetX, targetY) {
64482
64590
  var _this = this;
64483
- var data = event.dataTransfer.getData("babylonjs-material-node");
64484
64591
  var newNode;
64485
64592
  var customBlockData;
64486
- if (data.indexOf("CustomBlock") > -1) {
64487
- var storageData = localStorage.getItem(data);
64593
+ if (blockType.indexOf("CustomBlock") > -1) {
64594
+ var storageData = localStorage.getItem(blockType);
64488
64595
  if (!storageData) {
64489
64596
  this.props.globalState.onErrorMessageDialogRequiredObservable.notifyObservers("Error loading custom block");
64490
64597
  return;
@@ -64495,13 +64602,13 @@ var GraphEditor = /** @class */ (function (_super) {
64495
64602
  return;
64496
64603
  }
64497
64604
  }
64498
- else if (data.indexOf("Custom") > -1) {
64499
- var storageData = localStorage.getItem(data);
64605
+ else if (blockType.indexOf("Custom") > -1) {
64606
+ var storageData = localStorage.getItem(blockType);
64500
64607
  if (storageData) {
64501
64608
  var frameData = JSON.parse(storageData);
64502
64609
  //edit position before loading.
64503
- var newX = (event.clientX - event.currentTarget.offsetLeft - this._graphCanvas.x - this.NodeWidth) / this._graphCanvas.zoom;
64504
- var newY = (event.clientY - event.currentTarget.offsetTop - this._graphCanvas.y - 20) / this._graphCanvas.zoom;
64610
+ var newX = (targetX - this._graphCanvas.x - GraphEditor.NodeWidth) / this._graphCanvas.zoom;
64611
+ var newY = (targetY - this._graphCanvas.y - 20) / this._graphCanvas.zoom;
64505
64612
  var oldX = frameData.editorData.frames[0].x;
64506
64613
  var oldY = frameData.editorData.frames[0].y;
64507
64614
  frameData.editorData.frames[0].x = newX;
@@ -64517,8 +64624,8 @@ var GraphEditor = /** @class */ (function (_super) {
64517
64624
  return;
64518
64625
  }
64519
64626
  }
64520
- if (data.indexOf("Block") === -1) {
64521
- newNode = this.addValueNode(data);
64627
+ if (blockType.indexOf("Block") === -1) {
64628
+ newNode = this.addValueNode(blockType);
64522
64629
  }
64523
64630
  else {
64524
64631
  var block_1;
@@ -64527,7 +64634,7 @@ var GraphEditor = /** @class */ (function (_super) {
64527
64634
  block_1.options = customBlockData;
64528
64635
  }
64529
64636
  else {
64530
- block_1 = _blockTools__WEBPACK_IMPORTED_MODULE_8__["BlockTools"].GetBlockFromString(data, this.props.globalState.nodeMaterial.getScene(), this.props.globalState.nodeMaterial);
64637
+ block_1 = _blockTools__WEBPACK_IMPORTED_MODULE_8__["BlockTools"].GetBlockFromString(blockType, this.props.globalState.nodeMaterial.getScene(), this.props.globalState.nodeMaterial);
64531
64638
  }
64532
64639
  if (block_1.isUnique) {
64533
64640
  var className = block_1.getClassName();
@@ -64542,15 +64649,24 @@ var GraphEditor = /** @class */ (function (_super) {
64542
64649
  block_1.autoConfigure(this.props.globalState.nodeMaterial);
64543
64650
  newNode = this.createNodeFromObject(block_1);
64544
64651
  }
64545
- var x = event.clientX - event.currentTarget.offsetLeft - this._graphCanvas.x - this.NodeWidth;
64546
- var y = event.clientY - event.currentTarget.offsetTop - this._graphCanvas.y - 20;
64652
+ // Size exceptions
64653
+ var offsetX = GraphEditor.NodeWidth;
64654
+ var offsetY = 20;
64655
+ if (blockType === "ElbowBlock") {
64656
+ offsetX = 10;
64657
+ offsetY = 10;
64658
+ }
64659
+ // Drop
64660
+ var x = targetX - this._graphCanvas.x - offsetX * this._graphCanvas.zoom;
64661
+ var y = targetY - this._graphCanvas.y - offsetY * this._graphCanvas.zoom;
64547
64662
  newNode.x = x / this._graphCanvas.zoom;
64548
64663
  newNode.y = y / this._graphCanvas.zoom;
64549
64664
  newNode.cleanAccumulation();
64665
+ this.props.globalState.onNewNodeCreatedObservable.notifyObservers(newNode);
64550
64666
  this.props.globalState.onSelectionChangedObservable.notifyObservers(null);
64551
- this.props.globalState.onSelectionChangedObservable.notifyObservers(newNode);
64667
+ this.props.globalState.onSelectionChangedObservable.notifyObservers({ selection: newNode });
64552
64668
  var block = newNode.block;
64553
- x -= this.NodeWidth + 150;
64669
+ x -= GraphEditor.NodeWidth + 150;
64554
64670
  block.inputs.forEach(function (connection) {
64555
64671
  if (connection.connectedPoint) {
64556
64672
  var existingNodes = _this._graphCanvas.nodes.filter(function (n) {
@@ -64567,6 +64683,10 @@ var GraphEditor = /** @class */ (function (_super) {
64567
64683
  });
64568
64684
  this.forceUpdate();
64569
64685
  };
64686
+ GraphEditor.prototype.dropNewBlock = function (event) {
64687
+ var data = event.dataTransfer.getData("babylonjs-material-node");
64688
+ this.emitNewBlock(data, event.clientX - this._diagramContainer.offsetLeft, event.clientY - this._diagramContainer.offsetTop);
64689
+ };
64570
64690
  GraphEditor.prototype.render = function () {
64571
64691
  var _this = this;
64572
64692
  return (react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_portal__WEBPACK_IMPORTED_MODULE_4__["Portal"], { globalState: this.props.globalState },
@@ -64583,12 +64703,12 @@ var GraphEditor = /** @class */ (function (_super) {
64583
64703
  } },
64584
64704
  react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_components_nodeList_nodeListComponent__WEBPACK_IMPORTED_MODULE_2__["NodeListComponent"], { globalState: this.props.globalState }),
64585
64705
  react__WEBPACK_IMPORTED_MODULE_1__["createElement"]("div", { id: "leftGrab", onPointerDown: function (evt) { return _this.onPointerDown(evt); }, onPointerUp: function (evt) { return _this.onPointerUp(evt); }, onPointerMove: function (evt) { return _this.resizeColumns(evt); } }),
64586
- react__WEBPACK_IMPORTED_MODULE_1__["createElement"]("div", { className: "diagram-container", onDrop: function (event) {
64587
- _this.emitNewBlock(event);
64706
+ react__WEBPACK_IMPORTED_MODULE_1__["createElement"]("div", { className: "diagram-container", ref: this._diagramContainerRef, onDrop: function (event) {
64707
+ _this.dropNewBlock(event);
64588
64708
  }, onDragOver: function (event) {
64589
64709
  event.preventDefault();
64590
64710
  } },
64591
- react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_diagram_graphCanvas__WEBPACK_IMPORTED_MODULE_13__["GraphCanvasComponent"], { ref: "graphCanvas", globalState: this.props.globalState, onEmitNewBlock: function (block) {
64711
+ react__WEBPACK_IMPORTED_MODULE_1__["createElement"](_diagram_graphCanvas__WEBPACK_IMPORTED_MODULE_13__["GraphCanvasComponent"], { ref: this._graphCanvasRef, globalState: this.props.globalState, onEmitNewBlock: function (block) {
64592
64712
  return _this.createNodeFromObject(block);
64593
64713
  } })),
64594
64714
  react__WEBPACK_IMPORTED_MODULE_1__["createElement"]("div", { id: "rightGrab", onPointerDown: function (evt) { return _this.onPointerDown(evt); }, onPointerUp: function (evt) { return _this.onPointerUp(evt); }, onPointerMove: function (evt) { return _this.resizeColumns(evt, false); } }),
@@ -64601,6 +64721,7 @@ var GraphEditor = /** @class */ (function (_super) {
64601
64721
  react__WEBPACK_IMPORTED_MODULE_1__["createElement"]("div", { className: "blocker" }, "Node Material Editor runs only on desktop"),
64602
64722
  react__WEBPACK_IMPORTED_MODULE_1__["createElement"]("div", { className: "wait-screen hidden" }, "Processing...please wait")));
64603
64723
  };
64724
+ GraphEditor.NodeWidth = 100;
64604
64725
  return GraphEditor;
64605
64726
  }(react__WEBPACK_IMPORTED_MODULE_1__["Component"]));
64606
64727