@rkmodules/rules 0.0.164 → 0.0.166

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.
@@ -70,7 +70,6 @@
70
70
  }
71
71
 
72
72
  /** edges */
73
-
74
73
  .ConnectionPath_XkXr1.valid_LGNvc {
75
74
  --xy-edge-stroke: var(--connection-color, #333);
76
75
  --xy-edge-stroke-width: 2;
@@ -80,7 +79,7 @@
80
79
 
81
80
  .react-flow__edge.selected .Edge_aNtpH .react-flow__edge-path,
82
81
  .react-flow__edge .Edge_aNtpH.Hover_1v8QT .react-flow__edge-path {
83
- --xy-edge-stroke: var(--connection-color, #333);
82
+ --xy-edge-stroke: var(--connection-color, ,red,#333);
84
83
  --xy-edge-stroke-width: 2;
85
84
  stroke: var(--connection-color, #333);
86
85
  stroke-width: 2;
package/dist/index.cjs.js CHANGED
@@ -256,9 +256,25 @@ function isEmpty(value) {
256
256
  return true;
257
257
  return getBranches(value).every(function (branch) { return branch.length === 0; });
258
258
  }
259
+ /**
260
+ * checks whether the tree has only one branch with one item
261
+ */
259
262
  function isSingleTon(value) {
260
263
  return (Object.keys(value).length === 1 && Object.values(value)[0].length === 1);
261
264
  }
265
+ /**
266
+ * checks whether the tree has only one branch with multiple items
267
+ * @param value
268
+ */
269
+ function isList(value) {
270
+ return (Object.keys(value).length === 1 && Object.values(value)[0].length > 1);
271
+ }
272
+ /**
273
+ * checks whether the tree has multiple branches
274
+ */
275
+ function isMultiBranch(value) {
276
+ return Object.keys(value).length > 1;
277
+ }
262
278
  /**
263
279
  * turns a value or array of values into a tree
264
280
  * - a single value becomes a tree with one branch "0" and one item
@@ -3174,6 +3190,7 @@ var Engine = /** @class */ (function () {
3174
3190
  this.listeners = {};
3175
3191
  this.cache = {};
3176
3192
  this.cacheMiss = Symbol("cacheMiss");
3193
+ this.context = null;
3177
3194
  this.fnIndex = __assign(__assign({}, primitives), morePrimitives);
3178
3195
  this.env = env;
3179
3196
  }
@@ -3294,6 +3311,7 @@ var Engine = /** @class */ (function () {
3294
3311
  };
3295
3312
  // fire event
3296
3313
  this.fireEvent("result", response);
3314
+ this.context = context;
3297
3315
  // console.log("Engine run done", result, context, endTime - startTime);
3298
3316
  return [2 /*return*/, response];
3299
3317
  }
@@ -3373,6 +3391,9 @@ var Engine = /** @class */ (function () {
3373
3391
  _this.run(node);
3374
3392
  });
3375
3393
  };
3394
+ Engine.prototype.getContext = function () {
3395
+ return this.context;
3396
+ };
3376
3397
  Engine.prototype.subscribe = function (eventName, listener) {
3377
3398
  var _this = this;
3378
3399
  if (!this.listeners[eventName]) {
@@ -3483,11 +3504,15 @@ var Engine = /** @class */ (function () {
3483
3504
  return newFn;
3484
3505
  };
3485
3506
  Engine.prototype.applyEdgeDelete = function (oldFn, fromNode, toNode, fromField, toField) {
3486
- var _a;
3487
- var newFn = __assign(__assign({}, oldFn), { body: __assign({}, oldFn.body) });
3507
+ var _a, _b;
3508
+ var newFn = __assign(__assign({}, oldFn), { body: __assign({}, oldFn.body), outputs: __assign({}, oldFn.outputs) });
3488
3509
  if (toNode === "output") {
3489
- // no deleting of output edges
3490
- return oldFn;
3510
+ // deleting of output edges
3511
+ if ((_a = newFn.outputs) === null || _a === void 0 ? void 0 : _a[toField]) {
3512
+ // set to empty to prevent port from being removed, as that would cause the output node to be deleted
3513
+ newFn.outputs[toField] = "";
3514
+ }
3515
+ return newFn;
3491
3516
  }
3492
3517
  var to = newFn.body[toNode];
3493
3518
  var fn = this.fnIndex[to === null || to === void 0 ? void 0 : to.name];
@@ -3503,7 +3528,7 @@ var Engine = /** @class */ (function () {
3503
3528
  // delete the incoming edge
3504
3529
  delete to.inputs[toField];
3505
3530
  // revert to default value if exists
3506
- if ((_a = fn.inputs) === null || _a === void 0 ? void 0 : _a[toField]) {
3531
+ if ((_b = fn.inputs) === null || _b === void 0 ? void 0 : _b[toField]) {
3507
3532
  var normDef = normalizeVarDef(fn.inputs[toField]);
3508
3533
  if (normDef.default !== undefined) {
3509
3534
  to.inputs[toField] = getDefault(normDef, to.inputs);
@@ -6411,7 +6436,7 @@ var InputBoolean = React.memo(function (_a) {
6411
6436
  var inputRef = React.useRef(null);
6412
6437
  React.useEffect(function () {
6413
6438
  if (allowEmpty && inputRef.current) {
6414
- console.log("setting indeterminate");
6439
+ // console.log("setting indeterminate");
6415
6440
  inputRef.current.indeterminate = value === undefined;
6416
6441
  }
6417
6442
  }, [value]);
@@ -6419,7 +6444,7 @@ var InputBoolean = React.memo(function (_a) {
6419
6444
  var next = !value;
6420
6445
  if (value === false && allowEmpty)
6421
6446
  next = undefined;
6422
- console.log("setting next", next);
6447
+ // console.log("setting next", next);
6423
6448
  onChange === null || onChange === void 0 ? void 0 : onChange(next);
6424
6449
  };
6425
6450
  return (React.createElement("input", { ref: inputRef, type: "checkbox", checked: Boolean(value), onChange: handleChange }));
@@ -6456,7 +6481,7 @@ var InputSelect = React.memo(function (_a) {
6456
6481
  })));
6457
6482
  });
6458
6483
 
6459
- var styles$1 = {"Port":"Port_XWl7K","required":"required_ofB6J","Icon":"Icon_YJDC5","PortLabel":"PortLabel_wwLN0","Input":"Input_PHp3D","Output":"Output_FMRNv","ConnectionPath":"ConnectionPath_XkXr1","valid":"valid_LGNvc","Edge":"Edge_aNtpH","Hover":"Hover_1v8QT","Menu":"Menu_cusza","MenuCanvas":"MenuCanvas_3M2Ek","MenuItem":"MenuItem_UWLzD"};
6484
+ var styles$2 = {"Port":"Port_XWl7K","required":"required_ofB6J","Icon":"Icon_YJDC5","PortLabel":"PortLabel_wwLN0","Input":"Input_PHp3D","Output":"Output_FMRNv","ConnectionPath":"ConnectionPath_XkXr1","valid":"valid_LGNvc","Edge":"Edge_aNtpH","Hover":"Hover_1v8QT","Menu":"Menu_cusza","MenuCanvas":"MenuCanvas_3M2Ek","MenuItem":"MenuItem_UWLzD"};
6460
6485
 
6461
6486
  function Control(_a) {
6462
6487
  var _b;
@@ -6484,7 +6509,7 @@ function Control(_a) {
6484
6509
  case "boolean":
6485
6510
  return (React.createElement(InputBoolean, { value: value, onChange: onChange, allowEmpty: vardef.allowEmpty }));
6486
6511
  default:
6487
- return React.createElement("span", { className: styles$1.PortLabel },
6512
+ return React.createElement("span", { className: styles$2.PortLabel },
6488
6513
  "(",
6489
6514
  vardef.type,
6490
6515
  ")");
@@ -6500,13 +6525,13 @@ function Menu(_a) {
6500
6525
  var handleClose = function () {
6501
6526
  setOpen(false);
6502
6527
  };
6503
- return (React.createElement("div", { className: styles$1.Menu },
6528
+ return (React.createElement("div", { className: styles$2.Menu },
6504
6529
  React.createElement("div", { onClick: handleOpen }, handle),
6505
- open && (React.createElement("div", { className: styles$1.MenuCanvas, onClick: handleClose }, children))));
6530
+ open && (React.createElement("div", { className: styles$2.MenuCanvas, onClick: handleClose }, children))));
6506
6531
  }
6507
6532
  function MenuItem(_a) {
6508
6533
  var children = _a.children, props = __rest(_a, ["children"]);
6509
- return (React.createElement("div", __assign({ className: styles$1.MenuItem }, props), children));
6534
+ return (React.createElement("div", __assign({ className: styles$2.MenuItem }, props), children));
6510
6535
  }
6511
6536
 
6512
6537
  var Input = function (_a) {
@@ -6523,10 +6548,10 @@ var Input = function (_a) {
6523
6548
  inputs: __assign(__assign({}, data.inputs), (_a = {}, _a[param] = value, _a)),
6524
6549
  });
6525
6550
  }; };
6526
- return (React.createElement(react.Handle, { type: "target", position: react.Position.Left, id: portId, className: classNames(styles$1.Input, styles$1.Port, styles$1["type-".concat(normalized.type)]), style: {
6551
+ return (React.createElement(react.Handle, { type: "target", position: react.Position.Left, id: portId, className: classNames(styles$2.Input, styles$2.Port, styles$2["type-".concat(normalized.type)]), style: {
6527
6552
  "--type-color": "var(--color-".concat(normalized.type, ")"),
6528
6553
  }, onClick: onClick },
6529
- React.createElement("span", { className: styles$1.PortLabel }, normalized.label || name),
6554
+ React.createElement("span", { className: styles$2.PortLabel }, normalized.label || name),
6530
6555
  !isRef && !showMenu && (React.createElement(Control, { vardef: normalized, value: value, onChange: handleInputChange(name), data: data })),
6531
6556
  showMenu && (React.createElement("div", { style: { display: "flex" } },
6532
6557
  React.createElement("span", { style: { flex: 1 } }),
@@ -6547,10 +6572,10 @@ var Param = function (_a) {
6547
6572
  params: __assign(__assign({}, data.params), (_a = {}, _a[param] = value, _a)),
6548
6573
  });
6549
6574
  }; };
6550
- return (React.createElement("div", { className: classNames(styles$1.Param, styles$1.Port, styles$1["type-".concat(normalized.type)]), style: {
6575
+ return (React.createElement("div", { className: classNames(styles$2.Param, styles$2.Port, styles$2["type-".concat(normalized.type)]), style: {
6551
6576
  "--type-color": "var(--color-".concat(normalized.type, ")"),
6552
6577
  }, onClick: onClick },
6553
- React.createElement("span", { className: styles$1.PortLabel }, normalized.label || name),
6578
+ React.createElement("span", { className: styles$2.PortLabel }, normalized.label || name),
6554
6579
  !isRef && (React.createElement(Control, { vardef: normalized, value: value, onChange: handleParamChange(name), data: data }))));
6555
6580
  };
6556
6581
 
@@ -6558,15 +6583,15 @@ var Output = function (_a) {
6558
6583
  var name = _a.name, varDef = _a.varDef, id = _a.id, onClick = _a.onClick, focus = _a.focus;
6559
6584
  var normalized = normalizeVarDef(varDef);
6560
6585
  var portId = "".concat(id, "-").concat(safeName(name));
6561
- return (React.createElement(react.Handle, { type: "source", position: react.Position.Right, id: portId, className: classNames(styles$1.Output, styles$1.Port, styles$1["type-".concat(normalized.type)]), style: {
6586
+ return (React.createElement(react.Handle, { type: "source", position: react.Position.Right, id: portId, className: classNames(styles$2.Output, styles$2.Port, styles$2["type-".concat(normalized.type)]), style: {
6562
6587
  "--type-color": "var(--color-".concat(normalized.type, ")"),
6563
6588
  }, onClick: onClick },
6564
- React.createElement("span", { className: styles$1.PortLabel },
6589
+ React.createElement("span", { className: styles$2.PortLabel },
6565
6590
  focus && "👁 ",
6566
6591
  normalized.label || name)));
6567
6592
  };
6568
6593
 
6569
- var styles = {"NodeContainer":"NodeContainer_gSdHY","selected":"selected_VmB-F","active":"active_zjUzx","Log":"Log_dsq5e","Label":"Label_wBwWA","Description":"Description_f9s4l","Ports":"Ports_fVs5I","Body":"Body_ptEZP","PreviewHead":"PreviewHead_oFT4K","expanded":"expanded_3vnbi","Preview":"Preview_HbkZ6","Duration":"Duration_0jqWx","GroupHead":"GroupHead_QJhST","GroupName":"GroupName_Qvu4r","GroupCnt":"GroupCnt_3ctdd","GroupMore":"GroupMore_D1Kiz","GroupChildren":"GroupChildren_NKx-B","GroupLeaf":"GroupLeaf_eliT8"};
6594
+ var styles$1 = {"NodeContainer":"NodeContainer_gSdHY","selected":"selected_VmB-F","active":"active_zjUzx","Log":"Log_dsq5e","Label":"Label_wBwWA","Description":"Description_f9s4l","Ports":"Ports_fVs5I","Body":"Body_ptEZP","PreviewHead":"PreviewHead_oFT4K","expanded":"expanded_3vnbi","Preview":"Preview_HbkZ6","Duration":"Duration_0jqWx","GroupHead":"GroupHead_QJhST","GroupName":"GroupName_Qvu4r","GroupCnt":"GroupCnt_3ctdd","GroupMore":"GroupMore_D1Kiz","GroupChildren":"GroupChildren_NKx-B","GroupLeaf":"GroupLeaf_eliT8"};
6570
6595
 
6571
6596
  function NodeContainer(_a) {
6572
6597
  var _b;
@@ -6608,14 +6633,14 @@ function NodeContainer(_a) {
6608
6633
  var handleDelete = function () {
6609
6634
  instance.deleteElements({ nodes: [{ id: id }] });
6610
6635
  };
6611
- return (React.createElement("div", { className: classNames(className, styles.NodeContainer, (_b = {},
6612
- _b[styles.selected] = selected,
6613
- _b[styles.active] = active,
6636
+ return (React.createElement("div", { className: classNames(className, styles$1.NodeContainer, (_b = {},
6637
+ _b[styles$1.selected] = selected,
6638
+ _b[styles$1.active] = active,
6614
6639
  _b)) },
6615
- React.createElement("div", __assign({ className: styles.Label }, handlers()),
6640
+ React.createElement("div", __assign({ className: styles$1.Label }, handlers()),
6616
6641
  React.createElement("span", null),
6617
6642
  label,
6618
- React.createElement("span", null, deleteMode && (React.createElement("button", { className: styles.DeleteButton, onClick: handleDelete }, "\u2715")))),
6643
+ React.createElement("span", null, deleteMode && (React.createElement("button", { className: styles$1.DeleteButton, onClick: handleDelete }, "\u2715")))),
6619
6644
  children));
6620
6645
  }
6621
6646
 
@@ -6648,15 +6673,15 @@ function TreeBranchView(_a) {
6648
6673
  var subCnt = branch.children.length || ((_c = branch.items) === null || _c === void 0 ? void 0 : _c.length) || 0;
6649
6674
  var maxCnt = 10;
6650
6675
  return (React.createElement("div", null,
6651
- React.createElement("div", { className: classNames((_b = {}, _b[styles.expanded] = expanded, _b), styles.GroupHead), onClick: function () { return setExpanded(!expanded); } },
6652
- React.createElement("div", { className: styles.GroupName },
6676
+ React.createElement("div", { className: classNames((_b = {}, _b[styles$1.expanded] = expanded, _b), styles$1.GroupHead), onClick: function () { return setExpanded(!expanded); } },
6677
+ React.createElement("div", { className: styles$1.GroupName },
6653
6678
  "group ",
6654
6679
  branch.name),
6655
- React.createElement("div", { className: styles.GroupCnt },
6680
+ React.createElement("div", { className: styles$1.GroupCnt },
6656
6681
  "(",
6657
6682
  subCnt,
6658
6683
  ")")),
6659
- expanded && (React.createElement("div", { className: styles.GroupChildren },
6684
+ expanded && (React.createElement("div", { className: styles$1.GroupChildren },
6660
6685
  !isLeaf &&
6661
6686
  branch.children.map(function (subgroup, index) {
6662
6687
  // sub branch
@@ -6671,9 +6696,9 @@ function TreeBranchView(_a) {
6671
6696
  label = "{...}";
6672
6697
  }
6673
6698
  return (React.createElement("div", { key: index },
6674
- React.createElement("div", { className: styles.GroupLeaf, title: JSON.stringify(item, null, 2) }, label)));
6699
+ React.createElement("div", { className: styles$1.GroupLeaf, title: JSON.stringify(item, null, 2) }, label)));
6675
6700
  }),
6676
- branch.items && branch.items.length > maxCnt && (React.createElement("div", { className: styles.GroupMore },
6701
+ branch.items && branch.items.length > maxCnt && (React.createElement("div", { className: styles$1.GroupMore },
6677
6702
  "... ",
6678
6703
  branch.items.length - maxCnt,
6679
6704
  " more"))))))));
@@ -6695,7 +6720,7 @@ var Log = React.memo(function (_a) {
6695
6720
  }
6696
6721
  });
6697
6722
  }, []);
6698
- return (React.createElement(NodeContainer, { id: id, label: data.name, selected: selected, className: styles.Log },
6723
+ return (React.createElement(NodeContainer, { id: id, label: data.name, selected: selected, className: styles$1.Log },
6699
6724
  React.createElement(TreeView, { value: value }),
6700
6725
  React.createElement(react.Handle, { type: "target", position: react.Position.Left, id: "".concat(id, "-data") }),
6701
6726
  React.createElement(react.Handle, { type: "source", position: react.Position.Right, id: "".concat(id, "-data") })));
@@ -6725,9 +6750,9 @@ function GenericNode(_a) {
6725
6750
  });
6726
6751
  }, []);
6727
6752
  return (React.createElement(NodeContainer, { label: data.label, selected: selected, id: id },
6728
- React.createElement("div", { className: styles.Description }, data.description),
6753
+ React.createElement("div", { className: styles$1.Description }, data.description),
6729
6754
  children,
6730
- React.createElement("div", { className: styles.Ports },
6755
+ React.createElement("div", { className: styles$1.Ports },
6731
6756
  outputEntries.map(function (_a, index) {
6732
6757
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
6733
6758
  return (React.createElement(Output, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, onClick: function () { return setFocus(name); }, focus: showPreview && focus === name }));
@@ -6740,12 +6765,12 @@ function GenericNode(_a) {
6740
6765
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
6741
6766
  return (React.createElement(Param, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, data: data }));
6742
6767
  })),
6743
- !!outputEntries.length && (React.createElement("div", { className: classNames(styles.PreviewHead, (_b = {},
6744
- _b[styles.expanded] = showPreview,
6768
+ !!outputEntries.length && (React.createElement("div", { className: classNames(styles$1.PreviewHead, (_b = {},
6769
+ _b[styles$1.expanded] = showPreview,
6745
6770
  _b)), onClick: function () { return setShowPreview(!showPreview); } }, "Preview")),
6746
- showPreview && (React.createElement("div", { className: styles.Preview },
6771
+ showPreview && (React.createElement("div", { className: styles$1.Preview },
6747
6772
  React.createElement(TreeView, { value: previewValue }),
6748
- duration !== null && (React.createElement("div", { className: styles.Duration },
6773
+ duration !== null && (React.createElement("div", { className: styles$1.Duration },
6749
6774
  duration.toFixed(2),
6750
6775
  " ms"))))));
6751
6776
  }
@@ -6785,11 +6810,11 @@ var Calc = React.memo(function (_a) {
6785
6810
  });
6786
6811
  Calc.displayName = "CalcNode";
6787
6812
 
6788
- var Default = React.memo(function (_a) {
6813
+ var Default$1 = React.memo(function (_a) {
6789
6814
  var id = _a.id, data = _a.data, selected = _a.selected;
6790
6815
  return React.createElement(GenericNode, { id: id, data: data, selected: selected });
6791
6816
  });
6792
- Default.displayName = "DefaultNode";
6817
+ Default$1.displayName = "DefaultNode";
6793
6818
 
6794
6819
  /**
6795
6820
  * todo: get input data from graphed function
@@ -6897,15 +6922,15 @@ var InputNode = React.memo(function (_a) {
6897
6922
  });
6898
6923
  }); };
6899
6924
  return (React.createElement(NodeContainer, { label: data.label, selected: selected, id: id, noDelete: true },
6900
- React.createElement("div", { className: styles.Description }, data.description),
6901
- React.createElement("div", { className: styles.Ports },
6925
+ React.createElement("div", { className: styles$1.Description }, data.description),
6926
+ React.createElement("div", { className: styles$1.Ports },
6902
6927
  outputEntries.map(function (_a, index) {
6903
6928
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
6904
6929
  return (React.createElement(Output, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id }));
6905
6930
  }),
6906
6931
  Object.entries(outputs || {}).map(function (_a) {
6907
6932
  var _b = __read(_a, 2), name = _b[0], normalized = _b[1];
6908
- return (React.createElement(react.Handle, { key: name, type: "source", position: react.Position.Right, id: "".concat(id, "-").concat(name), className: classNames(styles$1.Output, styles$1.Port, styles$1["type-".concat(normalized.type)]), style: {
6933
+ return (React.createElement(react.Handle, { key: name, type: "source", position: react.Position.Right, id: "".concat(id, "-").concat(name), className: classNames(styles$2.Output, styles$2.Port, styles$2["type-".concat(normalized.type)]), style: {
6909
6934
  "--type-color": "var(--color-".concat(normalized.type, ")"),
6910
6935
  gridColumn: "1/3",
6911
6936
  } },
@@ -6916,9 +6941,9 @@ var InputNode = React.memo(function (_a) {
6916
6941
  React.createElement(MenuItem, { onClick: function () { return onDelete(name); } }, "Delete"),
6917
6942
  React.createElement(MenuItem, { onClick: function () { return onDefault(name); } }, "Set Default"),
6918
6943
  React.createElement(MenuItem, { onClick: function () { return onType(name); } }, "Set Type")),
6919
- React.createElement("span", { className: styles$1.PortLabel }, normalized.label || name)));
6944
+ React.createElement("span", { className: styles$2.PortLabel }, normalized.label || name)));
6920
6945
  })),
6921
- React.createElement("div", { className: styles.Body },
6946
+ React.createElement("div", { className: styles$1.Body },
6922
6947
  React.createElement("button", { onClick: function () { return onAdd(); } }, "+"))));
6923
6948
  });
6924
6949
  InputNode.displayName = "InputNode";
@@ -7054,8 +7079,8 @@ var OutputNode = React.memo(function (_a) {
7054
7079
  });
7055
7080
  };
7056
7081
  return (React.createElement(NodeContainer, { label: data.label, selected: selected, id: id, noDelete: true },
7057
- React.createElement("div", { className: styles.Description }, data.description),
7058
- React.createElement("div", { className: styles.Ports },
7082
+ React.createElement("div", { className: styles$1.Description }, data.description),
7083
+ React.createElement("div", { className: styles$1.Ports },
7059
7084
  outputEntries.map(function (_a, index) {
7060
7085
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
7061
7086
  return (React.createElement(Output, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, onClick: function () { return setFocus(name); }, focus: showPreview && focus === name }));
@@ -7068,14 +7093,14 @@ var OutputNode = React.memo(function (_a) {
7068
7093
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
7069
7094
  return (React.createElement(Param, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, data: data }));
7070
7095
  })),
7071
- React.createElement("div", { className: styles.Body },
7096
+ React.createElement("div", { className: styles$1.Body },
7072
7097
  React.createElement("button", { onClick: function () { return onAdd(); } }, "+")),
7073
- !!outputEntries.length && (React.createElement("div", { className: classNames(styles.PreviewHead, (_b = {},
7074
- _b[styles.expanded] = showPreview,
7098
+ !!outputEntries.length && (React.createElement("div", { className: classNames(styles$1.PreviewHead, (_b = {},
7099
+ _b[styles$1.expanded] = showPreview,
7075
7100
  _b)), onClick: function () { return setShowPreview(!showPreview); } }, "Preview")),
7076
- showPreview && (React.createElement("div", { className: styles.Preview },
7101
+ showPreview && (React.createElement("div", { className: styles$1.Preview },
7077
7102
  React.createElement(TreeView, { value: previewValue }),
7078
- duration !== null && (React.createElement("div", { className: styles.Duration },
7103
+ duration !== null && (React.createElement("div", { className: styles$1.Duration },
7079
7104
  duration.toFixed(2),
7080
7105
  " ms"))))));
7081
7106
  });
@@ -7083,13 +7108,17 @@ OutputNode.displayName = "OutputNode";
7083
7108
 
7084
7109
  var DynamicOutput = React.memo(function (_a) {
7085
7110
  var id = _a.id, data = _a.data, selected = _a.selected;
7086
- var outputDefs = data.outputDefs || {};
7087
- Object.keys(data.outputs || {}).forEach(function (key) {
7088
- if (!outputDefs[key]) {
7089
- outputDefs[key] = { type: "any", label: key };
7090
- }
7091
- });
7092
- var _b = __read(React.useState(outputDefs), 2), outputs = _b[0], setOutputs = _b[1];
7111
+ var outputDefs = React.useMemo(function () {
7112
+ var outputDefs = __assign({}, (data.outputDefs || {}));
7113
+ Object.keys(data.outputs || {}).forEach(function (key) {
7114
+ if (!outputDefs[key]) {
7115
+ outputDefs[key] = { type: "any", label: key };
7116
+ }
7117
+ });
7118
+ return outputDefs;
7119
+ }, [data.outputDefs, data.outputs]);
7120
+ var _b = __read(React.useState({}), 2), outputs = _b[0], setOutputs = _b[1];
7121
+ // console.log(id, outputs, data.outputs, data.outputDefs, outputDefs);
7093
7122
  var engine = useEngine();
7094
7123
  React.useEffect(function () {
7095
7124
  return engine.subscribe("functionResult", function (event) {
@@ -7098,11 +7127,11 @@ var DynamicOutput = React.memo(function (_a) {
7098
7127
  setOutputs(mergeWithOrder(Object.fromEntries(Object.keys(result).map(function (name, i) { return [
7099
7128
  name,
7100
7129
  { type: "any", label: name },
7101
- ]; })), outputs));
7130
+ ]; })), outputDefs));
7102
7131
  }
7103
7132
  });
7104
- }, []);
7105
- return (React.createElement(GenericNode, { outputs: outputs, id: id, data: data, selected: selected }));
7133
+ }, [outputDefs]);
7134
+ return (React.createElement(GenericNode, { outputs: outputs, id: id, data: data, selected: selected }, id));
7106
7135
  });
7107
7136
  DynamicOutput.displayName = "DynamicOutputNode";
7108
7137
 
@@ -7171,8 +7200,8 @@ var NamedInput = function (_a) {
7171
7200
  data.onChange({ inputs: inputs, inputDefs: inputDefs });
7172
7201
  };
7173
7202
  return (React.createElement(NodeContainer, { label: data.label, selected: selected, id: id, noDelete: true },
7174
- React.createElement("div", { className: styles.Description }, data.description),
7175
- React.createElement("div", { className: styles.Ports },
7203
+ React.createElement("div", { className: styles$1.Description }, data.description),
7204
+ React.createElement("div", { className: styles$1.Ports },
7176
7205
  outputEntries.map(function (_a, index) {
7177
7206
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
7178
7207
  return (React.createElement(Output, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, onClick: function () { return setFocus(name); }, focus: showPreview && focus === name }));
@@ -7182,25 +7211,26 @@ var NamedInput = function (_a) {
7182
7211
  var menu = !fixedInputs.has(name);
7183
7212
  return (React.createElement(Input, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, data: data, onRename: menu ? onRename : undefined, onDelete: menu ? onDelete : undefined }));
7184
7213
  }),
7185
- React.createElement("div", { className: styles.Body },
7214
+ React.createElement("div", { className: styles$1.Body },
7186
7215
  React.createElement("button", { onClick: function () { return onAdd(); } }, "+")),
7187
7216
  paramEntries.map(function (_a, index) {
7188
7217
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
7189
7218
  return (React.createElement(Param, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, data: data }));
7190
7219
  })),
7191
- !!outputEntries.length && (React.createElement("div", { className: classNames(styles.PreviewHead, (_b = {},
7192
- _b[styles.expanded] = showPreview,
7220
+ !!outputEntries.length && (React.createElement("div", { className: classNames(styles$1.PreviewHead, (_b = {},
7221
+ _b[styles$1.expanded] = showPreview,
7193
7222
  _b)), onClick: function () { return setShowPreview(!showPreview); } }, "Preview")),
7194
- showPreview && (React.createElement("div", { className: styles.Preview },
7223
+ showPreview && (React.createElement("div", { className: styles$1.Preview },
7195
7224
  React.createElement(TreeView, { value: previewValue }),
7196
- duration !== null && (React.createElement("div", { className: styles.Duration },
7225
+ duration !== null && (React.createElement("div", { className: styles$1.Duration },
7197
7226
  duration.toFixed(2),
7198
7227
  " ms"))))));
7199
7228
  };
7200
7229
  NamedInput.displayName = "NamedInput";
7201
7230
 
7202
7231
  var nodeTypes = {
7203
- Default: Default,
7232
+ default: Default$1,
7233
+ Default: Default$1,
7204
7234
  Calc: Calc,
7205
7235
  Log: Log,
7206
7236
  DynamicInput: DynamicInput,
@@ -7210,6 +7240,80 @@ var nodeTypes = {
7210
7240
  Output: OutputNode,
7211
7241
  };
7212
7242
 
7243
+ function useNodeResult(id) {
7244
+ var _a, _b;
7245
+ var engine = useEngine();
7246
+ var scope = ((_b = (_a = engine.getContext()) === null || _a === void 0 ? void 0 : _a.scope) === null || _b === void 0 ? void 0 : _b[id]) || {};
7247
+ var _c = __read(React.useState(scope || {}), 2), result = _c[0], setResult = _c[1];
7248
+ React.useEffect(function () {
7249
+ return engine.subscribe("functionResult", function (event) {
7250
+ if (event.name === id) {
7251
+ setResult(event.result || {});
7252
+ }
7253
+ });
7254
+ }, [id, engine]);
7255
+ return result;
7256
+ }
7257
+
7258
+ var styles = {
7259
+ empty: {
7260
+ stroke: "var(--edge-empty-color, crimson)",
7261
+ },
7262
+ single: {
7263
+ strokeWidth: 1,
7264
+ },
7265
+ listBack: {
7266
+ strokeWidth: 4,
7267
+ },
7268
+ listFront: {
7269
+ stroke: "var(--canvas-background)",
7270
+ strokeWidth: 2,
7271
+ },
7272
+ multiBack: {
7273
+ strokeWidth: 4,
7274
+ strokeDasharray: "10,3",
7275
+ },
7276
+ multiFront: {
7277
+ stroke: "var(--canvas-background)",
7278
+ strokeWidth: 2,
7279
+ strokeDasharray: "8,5",
7280
+ strokeDashoffset: -1,
7281
+ },
7282
+ };
7283
+ var Default = React.memo(function (_a) {
7284
+ var props = __rest(_a, []);
7285
+ var data = useNodeResult(props.source);
7286
+ if (props.sourceHandleId) {
7287
+ var field = deRefEdgeHandle(props.sourceHandleId).field;
7288
+ var value = data[field];
7289
+ if (value) {
7290
+ if (isEmpty(value)) {
7291
+ return React.createElement(react.BezierEdge, __assign({}, props, { style: styles.empty }));
7292
+ }
7293
+ else if (isList(value)) {
7294
+ return (React.createElement(React.Fragment, null,
7295
+ React.createElement(react.BezierEdge, __assign({}, props, { style: styles.listBack })),
7296
+ ";",
7297
+ React.createElement(react.BezierEdge, __assign({}, props, { style: styles.listFront })),
7298
+ ";"));
7299
+ }
7300
+ else if (isMultiBranch(value)) {
7301
+ return (React.createElement(React.Fragment, null,
7302
+ React.createElement(react.BezierEdge, __assign({}, props, { style: styles.multiBack })),
7303
+ ";",
7304
+ React.createElement(react.BezierEdge, __assign({}, props, { style: styles.multiFront })),
7305
+ ";"));
7306
+ }
7307
+ }
7308
+ }
7309
+ return React.createElement(react.BezierEdge, __assign({}, props, { style: styles.single }));
7310
+ });
7311
+ Default.displayName = "DefaultEdge";
7312
+
7313
+ var edgeTypes = {
7314
+ default: Default,
7315
+ };
7316
+
7213
7317
  var variableStore = zustand.create(function (set, get, api) {
7214
7318
  return middleware.persist(function (pset, pget) { return ({
7215
7319
  data: {},
@@ -7340,6 +7444,7 @@ function createNode(engine, id, fncall, options) {
7340
7444
  }
7341
7445
  function createEdge(nodeId, ref) {
7342
7446
  return {
7447
+ type: "default",
7343
7448
  id: "".concat(ref.path, "-").concat(nodeId, ".").concat(ref.name),
7344
7449
  source: ref.refNode,
7345
7450
  target: nodeId,
@@ -7464,6 +7569,7 @@ var useFlowState = zustand.create(function (set, get) { return ({
7464
7569
  var refs = getReferences(fncall.inputs || {});
7465
7570
  // remove all incoming edges
7466
7571
  edges = edges === null || edges === void 0 ? void 0 : edges.filter(function (e) { return e.target !== key; });
7572
+ edgesToAdd = edgesToAdd.filter(function (e) { return e[0] !== key; });
7467
7573
  // add the edge
7468
7574
  refs.forEach(function (ref) {
7469
7575
  edgesToAdd.push([key, ref]);
@@ -7528,7 +7634,7 @@ var ConnectionLine = (function (_a) {
7528
7634
  sourcePosition: react.Position.Right,
7529
7635
  targetPosition: react.Position.Left,
7530
7636
  });
7531
- return (React.createElement("g", { className: classNames(styles$1.ConnectionPath, "react-flow__connection-path", (_b = {}, _b[styles$1.valid] = connectionStatus === "valid", _b)) },
7637
+ return (React.createElement("g", { className: classNames(styles$2.ConnectionPath, "react-flow__connection-path", (_b = {}, _b[styles$2.valid] = connectionStatus === "valid", _b)) },
7532
7638
  React.createElement("path", { d: d[0] })));
7533
7639
  });
7534
7640
 
@@ -7538,14 +7644,14 @@ var ConnectionLine = (function (_a) {
7538
7644
  */
7539
7645
  var emptyObject = {};
7540
7646
  function FlowInner(_a) {
7541
- var fn = _a.function, _b = _a.positions, defaultPositions = _b === void 0 ? emptyObject : _b, engine = _a.engine, _c = _a.center, center = _c === void 0 ? true : _c, fitView = _a.fitView, _d = _a.customNodes, customNodes = _d === void 0 ? {} : _d, onChange = _a.onChange, onClick = _a.onClick, onContextMenu = _a.onContextMenu, onMouseMove = _a.onMouseMove, onSelect = _a.onSelect, onInit = _a.onInit;
7542
- var _e = __read(React.useState(null), 2), instance = _e[0], setInstance = _e[1];
7647
+ var fn = _a.function, _b = _a.positions, defaultPositions = _b === void 0 ? emptyObject : _b, engine = _a.engine, _c = _a.center, center = _c === void 0 ? true : _c, fitView = _a.fitView, _d = _a.customNodes, customNodes = _d === void 0 ? {} : _d, _e = _a.edgeDecoration, edgeDecoration = _e === void 0 ? false : _e, onChange = _a.onChange, onClick = _a.onClick, onContextMenu = _a.onContextMenu, onMouseMove = _a.onMouseMove, onSelect = _a.onSelect, onInit = _a.onInit;
7648
+ var _f = __read(React.useState(null), 2), instance = _f[0], setInstance = _f[1];
7543
7649
  var handleInit = function (instance) {
7544
7650
  setInstance(instance);
7545
7651
  onInit === null || onInit === void 0 ? void 0 : onInit(instance);
7546
7652
  };
7547
7653
  var updatePosition = useUpdatePositions(fn);
7548
- var _f = __read(usePositions(fn), 2), positions = _f[0], setPositions = _f[1];
7654
+ var _g = __read(usePositions(fn), 2), positions = _g[0], setPositions = _g[1];
7549
7655
  var options = React.useMemo(function () {
7550
7656
  var handleDataChange = function (id) { return function (newData) {
7551
7657
  onChange === null || onChange === void 0 ? void 0 : onChange(function (fn) {
@@ -7566,7 +7672,7 @@ function FlowInner(_a) {
7566
7672
  });
7567
7673
  };
7568
7674
  return {
7569
- dragHandle: ".".concat(styles.Label),
7675
+ dragHandle: ".".concat(styles$1.Label),
7570
7676
  positions: __assign(__assign({}, positions), defaultPositions),
7571
7677
  onDataChange: handleDataChange,
7572
7678
  onIOChange: handleIOChange,
@@ -7575,7 +7681,7 @@ function FlowInner(_a) {
7575
7681
  React.useEffect(function () {
7576
7682
  setPositions(__assign(__assign({}, positions), defaultPositions));
7577
7683
  }, [defaultPositions]);
7578
- var _g = useFlow(fn, engine, options), nodes = _g.nodes, edges = _g.edges, setNodes = _g.setNodes, setEdges = _g.setEdges;
7684
+ var _h = useFlow(fn, engine, options), nodes = _h.nodes, edges = _h.edges, setNodes = _h.setNodes, setEdges = _h.setEdges;
7579
7685
  // node selection handler
7580
7686
  var handleSelect = React.useCallback(function (_a) {
7581
7687
  var nodes = _a.nodes;
@@ -7585,7 +7691,7 @@ function FlowInner(_a) {
7585
7691
  onChange: handleSelect,
7586
7692
  });
7587
7693
  // dropping nodes
7588
- var _h = __read(useDrop({
7694
+ var _j = __read(useDrop({
7589
7695
  accept: "flow-node",
7590
7696
  drop: function (item, monitor) {
7591
7697
  var pos = monitor.getClientOffset();
@@ -7605,9 +7711,13 @@ function FlowInner(_a) {
7605
7711
  isOver: monitor.isOver(),
7606
7712
  };
7607
7713
  },
7608
- }), 2); _h[0].isOver; var drop = _h[1];
7714
+ }), 2); _j[0].isOver; var drop = _j[1];
7609
7715
  // connecting nodes
7610
7716
  var onConnect = React.useCallback(function (params) {
7717
+ if (!params.sourceHandle || !params.targetHandle) {
7718
+ console.warn("Invalid connection handles", params);
7719
+ return;
7720
+ }
7611
7721
  var sourceField = deRefEdgeHandle(params.sourceHandle).field;
7612
7722
  var targetField = deRefEdgeHandle(params.targetHandle).field;
7613
7723
  if (!sourceField || !targetField) {
@@ -7629,6 +7739,10 @@ function FlowInner(_a) {
7629
7739
  onChange === null || onChange === void 0 ? void 0 : onChange(function (fn) {
7630
7740
  var newFn = fn;
7631
7741
  edgesToDelete.forEach(function (edge) {
7742
+ if (!edge.sourceHandle || !edge.targetHandle) {
7743
+ console.warn("Invalid connection handles", edge);
7744
+ return;
7745
+ }
7632
7746
  var sourceField = deRefEdgeHandle(edge.sourceHandle).field;
7633
7747
  var targetField = deRefEdgeHandle(edge.targetHandle).field;
7634
7748
  if (!sourceField || !targetField) {
@@ -7688,12 +7802,14 @@ function FlowInner(_a) {
7688
7802
  return react.applyEdgeChanges(changes, edgesSnapshot);
7689
7803
  });
7690
7804
  }, []);
7691
- return (React.createElement(react.ReactFlow, { ref: drop, nodes: nodes, edges: edges, nodeTypes: __assign(__assign({}, nodeTypes), customNodes), onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, onNodesDelete: onNodesDelete, onEdgesDelete: onEdgesDelete, onNodeDragStop: function (e, n) { return updatePosition(n.id, n.position); }, onConnect: onConnect, onInit: handleInit, onPaneClick: handleClick, onPaneContextMenu: handleContextMenu, onPaneMouseMove: handleMouseMove, fitView: center || fitView, fitViewOptions: {
7805
+ return (React.createElement(react.ReactFlow, { ref: drop, nodes: nodes, edges: edges, nodeTypes: __assign(__assign({}, nodeTypes), customNodes), edgeTypes: edgeDecoration ? edgeTypes : undefined, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, onNodesDelete: onNodesDelete, onEdgesDelete: onEdgesDelete, onNodeDragStop: function (e, n) { return updatePosition(n.id, n.position); }, onConnect: onConnect, onInit: handleInit, onPaneClick: handleClick, onPaneContextMenu: handleContextMenu, onPaneMouseMove: handleMouseMove, fitView: center || fitView, fitViewOptions: {
7692
7806
  minZoom: fitView ? undefined : 1,
7693
7807
  maxZoom: fitView ? undefined : 1,
7694
7808
  },
7695
7809
  // panOnDrag={false}
7696
- selectionOnDrag: true, minZoom: 0.1, maxZoom: 4, deleteKeyCode: "Delete", connectionLineComponent: ConnectionLine },
7810
+ selectionOnDrag: true, minZoom: 0.1, maxZoom: 4, deleteKeyCode: "Delete", connectionLineComponent: ConnectionLine, style: {
7811
+ backgroundColor: "var(--canvas-background)",
7812
+ } },
7697
7813
  React.createElement(react.Background, { variant: react.BackgroundVariant.Dots }),
7698
7814
  React.createElement(react.Controls, null)));
7699
7815
  }
@@ -8780,6 +8896,8 @@ exports.hasReference = hasReference;
8780
8896
  exports.interpolate = interpolate;
8781
8897
  exports.isEmpty = isEmpty;
8782
8898
  exports.isEmptyTree = isEmptyTree;
8899
+ exports.isList = isList;
8900
+ exports.isMultiBranch = isMultiBranch;
8783
8901
  exports.isReference = isReference;
8784
8902
  exports.isSingleTon = isSingleTon;
8785
8903
  exports.isTree = isTree;