@rkmodules/rules 0.0.165 → 0.0.167

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,16 @@ 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];
7093
7121
  var engine = useEngine();
7094
7122
  React.useEffect(function () {
7095
7123
  return engine.subscribe("functionResult", function (event) {
@@ -7098,10 +7126,10 @@ var DynamicOutput = React.memo(function (_a) {
7098
7126
  setOutputs(mergeWithOrder(Object.fromEntries(Object.keys(result).map(function (name, i) { return [
7099
7127
  name,
7100
7128
  { type: "any", label: name },
7101
- ]; })), outputs));
7129
+ ]; })), outputDefs));
7102
7130
  }
7103
7131
  });
7104
- }, []);
7132
+ }, [outputDefs]);
7105
7133
  return (React.createElement(GenericNode, { outputs: outputs, id: id, data: data, selected: selected }));
7106
7134
  });
7107
7135
  DynamicOutput.displayName = "DynamicOutputNode";
@@ -7171,8 +7199,8 @@ var NamedInput = function (_a) {
7171
7199
  data.onChange({ inputs: inputs, inputDefs: inputDefs });
7172
7200
  };
7173
7201
  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 },
7202
+ React.createElement("div", { className: styles$1.Description }, data.description),
7203
+ React.createElement("div", { className: styles$1.Ports },
7176
7204
  outputEntries.map(function (_a, index) {
7177
7205
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
7178
7206
  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 +7210,26 @@ var NamedInput = function (_a) {
7182
7210
  var menu = !fixedInputs.has(name);
7183
7211
  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
7212
  }),
7185
- React.createElement("div", { className: styles.Body },
7213
+ React.createElement("div", { className: styles$1.Body },
7186
7214
  React.createElement("button", { onClick: function () { return onAdd(); } }, "+")),
7187
7215
  paramEntries.map(function (_a, index) {
7188
7216
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
7189
7217
  return (React.createElement(Param, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, data: data }));
7190
7218
  })),
7191
- !!outputEntries.length && (React.createElement("div", { className: classNames(styles.PreviewHead, (_b = {},
7192
- _b[styles.expanded] = showPreview,
7219
+ !!outputEntries.length && (React.createElement("div", { className: classNames(styles$1.PreviewHead, (_b = {},
7220
+ _b[styles$1.expanded] = showPreview,
7193
7221
  _b)), onClick: function () { return setShowPreview(!showPreview); } }, "Preview")),
7194
- showPreview && (React.createElement("div", { className: styles.Preview },
7222
+ showPreview && (React.createElement("div", { className: styles$1.Preview },
7195
7223
  React.createElement(TreeView, { value: previewValue }),
7196
- duration !== null && (React.createElement("div", { className: styles.Duration },
7224
+ duration !== null && (React.createElement("div", { className: styles$1.Duration },
7197
7225
  duration.toFixed(2),
7198
7226
  " ms"))))));
7199
7227
  };
7200
7228
  NamedInput.displayName = "NamedInput";
7201
7229
 
7202
7230
  var nodeTypes = {
7203
- Default: Default,
7231
+ default: Default$1,
7232
+ Default: Default$1,
7204
7233
  Calc: Calc,
7205
7234
  Log: Log,
7206
7235
  DynamicInput: DynamicInput,
@@ -7210,6 +7239,101 @@ var nodeTypes = {
7210
7239
  Output: OutputNode,
7211
7240
  };
7212
7241
 
7242
+ function useNodeResult(id) {
7243
+ var _a, _b;
7244
+ var engine = useEngine();
7245
+ var scope = ((_b = (_a = engine.getContext()) === null || _a === void 0 ? void 0 : _a.scope) === null || _b === void 0 ? void 0 : _b[id]) || {};
7246
+ var _c = __read(React.useState(scope || {}), 2), result = _c[0], setResult = _c[1];
7247
+ React.useEffect(function () {
7248
+ return engine.subscribe("functionResult", function (event) {
7249
+ if (event.name === id) {
7250
+ setResult(event.result || {});
7251
+ }
7252
+ });
7253
+ }, [id, engine]);
7254
+ return result;
7255
+ }
7256
+
7257
+ var styles = {
7258
+ empty: {
7259
+ stroke: "var(--edge-empty-color, crimson)",
7260
+ },
7261
+ single: {
7262
+ strokeWidth: 1,
7263
+ },
7264
+ listBack: {
7265
+ strokeWidth: 4,
7266
+ },
7267
+ listFront: {
7268
+ stroke: "var(--canvas-background)",
7269
+ strokeWidth: 2,
7270
+ },
7271
+ multiBack: {
7272
+ strokeWidth: 4,
7273
+ strokeDasharray: "10,3",
7274
+ },
7275
+ multiFront: {
7276
+ stroke: "var(--canvas-background)",
7277
+ strokeWidth: 2,
7278
+ strokeDasharray: "8,5",
7279
+ strokeDashoffset: -1,
7280
+ },
7281
+ };
7282
+ var Default = React.memo(function (_a) {
7283
+ var _b, _c;
7284
+ var props = __rest(_a, []);
7285
+ var data = useNodeResult(props.source);
7286
+ var flow = react.useReactFlow();
7287
+ var src = flow.getInternalNode(props.source);
7288
+ if ((src === null || src === void 0 ? void 0 : src.type) === "DynamicOutput") {
7289
+ /**
7290
+ * fix for dynamic output nodes. As connection order can change,
7291
+ * the position of the handles is not updated internally with react-flow
7292
+ * so we need to get the position of the handle and update the
7293
+ * source position manually.
7294
+ */
7295
+ var el = document.querySelector("[data-handleid=\"".concat(props.sourceHandleId, "\"]"));
7296
+ var bbox = el === null || el === void 0 ? void 0 : el.getBoundingClientRect();
7297
+ if (bbox) {
7298
+ var pos = flow.screenToFlowPosition({
7299
+ x: (bbox === null || bbox === void 0 ? void 0 : bbox.x) + (bbox === null || bbox === void 0 ? void 0 : bbox.width),
7300
+ y: (bbox === null || bbox === void 0 ? void 0 : bbox.y) + (bbox === null || bbox === void 0 ? void 0 : bbox.height) / 2,
7301
+ });
7302
+ props.sourceX = (_b = pos === null || pos === void 0 ? void 0 : pos.x) !== null && _b !== void 0 ? _b : props.sourceX;
7303
+ props.sourceY = (_c = pos === null || pos === void 0 ? void 0 : pos.y) !== null && _c !== void 0 ? _c : props.sourceY;
7304
+ }
7305
+ }
7306
+ if (props.sourceHandleId) {
7307
+ var field = deRefEdgeHandle(props.sourceHandleId).field;
7308
+ var value = data[field];
7309
+ if (value) {
7310
+ if (isEmpty(value)) {
7311
+ return React.createElement(react.BezierEdge, __assign({}, props, { style: styles.empty }));
7312
+ }
7313
+ else if (isList(value)) {
7314
+ return (React.createElement(React.Fragment, null,
7315
+ React.createElement(react.BezierEdge, __assign({}, props, { style: styles.listBack })),
7316
+ ";",
7317
+ React.createElement(react.BezierEdge, __assign({}, props, { style: styles.listFront })),
7318
+ ";"));
7319
+ }
7320
+ else if (isMultiBranch(value)) {
7321
+ return (React.createElement(React.Fragment, null,
7322
+ React.createElement(react.BezierEdge, __assign({}, props, { style: styles.multiBack })),
7323
+ ";",
7324
+ React.createElement(react.BezierEdge, __assign({}, props, { style: styles.multiFront })),
7325
+ ";"));
7326
+ }
7327
+ }
7328
+ }
7329
+ return React.createElement(react.BezierEdge, __assign({}, props, { style: styles.single }));
7330
+ });
7331
+ Default.displayName = "DefaultEdge";
7332
+
7333
+ var edgeTypes = {
7334
+ default: Default,
7335
+ };
7336
+
7213
7337
  var variableStore = zustand.create(function (set, get, api) {
7214
7338
  return middleware.persist(function (pset, pget) { return ({
7215
7339
  data: {},
@@ -7340,6 +7464,7 @@ function createNode(engine, id, fncall, options) {
7340
7464
  }
7341
7465
  function createEdge(nodeId, ref) {
7342
7466
  return {
7467
+ type: "default",
7343
7468
  id: "".concat(ref.path, "-").concat(nodeId, ".").concat(ref.name),
7344
7469
  source: ref.refNode,
7345
7470
  target: nodeId,
@@ -7529,7 +7654,7 @@ var ConnectionLine = (function (_a) {
7529
7654
  sourcePosition: react.Position.Right,
7530
7655
  targetPosition: react.Position.Left,
7531
7656
  });
7532
- return (React.createElement("g", { className: classNames(styles$1.ConnectionPath, "react-flow__connection-path", (_b = {}, _b[styles$1.valid] = connectionStatus === "valid", _b)) },
7657
+ return (React.createElement("g", { className: classNames(styles$2.ConnectionPath, "react-flow__connection-path", (_b = {}, _b[styles$2.valid] = connectionStatus === "valid", _b)) },
7533
7658
  React.createElement("path", { d: d[0] })));
7534
7659
  });
7535
7660
 
@@ -7539,14 +7664,14 @@ var ConnectionLine = (function (_a) {
7539
7664
  */
7540
7665
  var emptyObject = {};
7541
7666
  function FlowInner(_a) {
7542
- 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;
7543
- var _e = __read(React.useState(null), 2), instance = _e[0], setInstance = _e[1];
7667
+ 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;
7668
+ var _f = __read(React.useState(null), 2), instance = _f[0], setInstance = _f[1];
7544
7669
  var handleInit = function (instance) {
7545
7670
  setInstance(instance);
7546
7671
  onInit === null || onInit === void 0 ? void 0 : onInit(instance);
7547
7672
  };
7548
7673
  var updatePosition = useUpdatePositions(fn);
7549
- var _f = __read(usePositions(fn), 2), positions = _f[0], setPositions = _f[1];
7674
+ var _g = __read(usePositions(fn), 2), positions = _g[0], setPositions = _g[1];
7550
7675
  var options = React.useMemo(function () {
7551
7676
  var handleDataChange = function (id) { return function (newData) {
7552
7677
  onChange === null || onChange === void 0 ? void 0 : onChange(function (fn) {
@@ -7567,7 +7692,7 @@ function FlowInner(_a) {
7567
7692
  });
7568
7693
  };
7569
7694
  return {
7570
- dragHandle: ".".concat(styles.Label),
7695
+ dragHandle: ".".concat(styles$1.Label),
7571
7696
  positions: __assign(__assign({}, positions), defaultPositions),
7572
7697
  onDataChange: handleDataChange,
7573
7698
  onIOChange: handleIOChange,
@@ -7576,7 +7701,7 @@ function FlowInner(_a) {
7576
7701
  React.useEffect(function () {
7577
7702
  setPositions(__assign(__assign({}, positions), defaultPositions));
7578
7703
  }, [defaultPositions]);
7579
- var _g = useFlow(fn, engine, options), nodes = _g.nodes, edges = _g.edges, setNodes = _g.setNodes, setEdges = _g.setEdges;
7704
+ var _h = useFlow(fn, engine, options), nodes = _h.nodes, edges = _h.edges, setNodes = _h.setNodes, setEdges = _h.setEdges;
7580
7705
  // node selection handler
7581
7706
  var handleSelect = React.useCallback(function (_a) {
7582
7707
  var nodes = _a.nodes;
@@ -7586,7 +7711,7 @@ function FlowInner(_a) {
7586
7711
  onChange: handleSelect,
7587
7712
  });
7588
7713
  // dropping nodes
7589
- var _h = __read(useDrop({
7714
+ var _j = __read(useDrop({
7590
7715
  accept: "flow-node",
7591
7716
  drop: function (item, monitor) {
7592
7717
  var pos = monitor.getClientOffset();
@@ -7606,9 +7731,13 @@ function FlowInner(_a) {
7606
7731
  isOver: monitor.isOver(),
7607
7732
  };
7608
7733
  },
7609
- }), 2); _h[0].isOver; var drop = _h[1];
7734
+ }), 2); _j[0].isOver; var drop = _j[1];
7610
7735
  // connecting nodes
7611
7736
  var onConnect = React.useCallback(function (params) {
7737
+ if (!params.sourceHandle || !params.targetHandle) {
7738
+ console.warn("Invalid connection handles", params);
7739
+ return;
7740
+ }
7612
7741
  var sourceField = deRefEdgeHandle(params.sourceHandle).field;
7613
7742
  var targetField = deRefEdgeHandle(params.targetHandle).field;
7614
7743
  if (!sourceField || !targetField) {
@@ -7630,6 +7759,10 @@ function FlowInner(_a) {
7630
7759
  onChange === null || onChange === void 0 ? void 0 : onChange(function (fn) {
7631
7760
  var newFn = fn;
7632
7761
  edgesToDelete.forEach(function (edge) {
7762
+ if (!edge.sourceHandle || !edge.targetHandle) {
7763
+ console.warn("Invalid connection handles", edge);
7764
+ return;
7765
+ }
7633
7766
  var sourceField = deRefEdgeHandle(edge.sourceHandle).field;
7634
7767
  var targetField = deRefEdgeHandle(edge.targetHandle).field;
7635
7768
  if (!sourceField || !targetField) {
@@ -7689,12 +7822,14 @@ function FlowInner(_a) {
7689
7822
  return react.applyEdgeChanges(changes, edgesSnapshot);
7690
7823
  });
7691
7824
  }, []);
7692
- 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: {
7825
+ 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: {
7693
7826
  minZoom: fitView ? undefined : 1,
7694
7827
  maxZoom: fitView ? undefined : 1,
7695
7828
  },
7696
7829
  // panOnDrag={false}
7697
- selectionOnDrag: true, minZoom: 0.1, maxZoom: 4, deleteKeyCode: "Delete", connectionLineComponent: ConnectionLine },
7830
+ selectionOnDrag: true, minZoom: 0.1, maxZoom: 4, deleteKeyCode: "Delete", connectionLineComponent: ConnectionLine, style: {
7831
+ backgroundColor: "var(--canvas-background)",
7832
+ } },
7698
7833
  React.createElement(react.Background, { variant: react.BackgroundVariant.Dots }),
7699
7834
  React.createElement(react.Controls, null)));
7700
7835
  }
@@ -8781,6 +8916,8 @@ exports.hasReference = hasReference;
8781
8916
  exports.interpolate = interpolate;
8782
8917
  exports.isEmpty = isEmpty;
8783
8918
  exports.isEmptyTree = isEmptyTree;
8919
+ exports.isList = isList;
8920
+ exports.isMultiBranch = isMultiBranch;
8784
8921
  exports.isReference = isReference;
8785
8922
  exports.isSingleTon = isSingleTon;
8786
8923
  exports.isTree = isTree;