@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;
@@ -1,7 +1,7 @@
1
1
  import { create, all } from 'mathjs';
2
2
  import { interpolate as interpolate$1 } from '@rkmodules/stringtemplate';
3
3
  import React, { createContext, memo, useEffect, useLayoutEffect, useState, useCallback, useMemo, isValidElement, cloneElement, useContext } from 'react';
4
- import { Handle, Position, useReactFlow, useConnection, getSimpleBezierPath, ReactFlowProvider, useOnSelectionChange, applyNodeChanges, applyEdgeChanges, ReactFlow, Background, BackgroundVariant, Controls } from '@xyflow/react';
4
+ import { Handle, Position, useReactFlow, BezierEdge, useConnection, getSimpleBezierPath, ReactFlowProvider, useOnSelectionChange, applyNodeChanges, applyEdgeChanges, ReactFlow, Background, BackgroundVariant, Controls } from '@xyflow/react';
5
5
  import katex from 'katex';
6
6
  import classNames from 'classnames';
7
7
  import { useInner } from '@rkmodules/use-inner';
@@ -254,9 +254,25 @@ function isEmpty(value) {
254
254
  return true;
255
255
  return getBranches(value).every(function (branch) { return branch.length === 0; });
256
256
  }
257
+ /**
258
+ * checks whether the tree has only one branch with one item
259
+ */
257
260
  function isSingleTon(value) {
258
261
  return (Object.keys(value).length === 1 && Object.values(value)[0].length === 1);
259
262
  }
263
+ /**
264
+ * checks whether the tree has only one branch with multiple items
265
+ * @param value
266
+ */
267
+ function isList(value) {
268
+ return (Object.keys(value).length === 1 && Object.values(value)[0].length > 1);
269
+ }
270
+ /**
271
+ * checks whether the tree has multiple branches
272
+ */
273
+ function isMultiBranch(value) {
274
+ return Object.keys(value).length > 1;
275
+ }
260
276
  /**
261
277
  * turns a value or array of values into a tree
262
278
  * - a single value becomes a tree with one branch "0" and one item
@@ -3172,6 +3188,7 @@ var Engine = /** @class */ (function () {
3172
3188
  this.listeners = {};
3173
3189
  this.cache = {};
3174
3190
  this.cacheMiss = Symbol("cacheMiss");
3191
+ this.context = null;
3175
3192
  this.fnIndex = __assign(__assign({}, primitives), morePrimitives);
3176
3193
  this.env = env;
3177
3194
  }
@@ -3292,6 +3309,7 @@ var Engine = /** @class */ (function () {
3292
3309
  };
3293
3310
  // fire event
3294
3311
  this.fireEvent("result", response);
3312
+ this.context = context;
3295
3313
  // console.log("Engine run done", result, context, endTime - startTime);
3296
3314
  return [2 /*return*/, response];
3297
3315
  }
@@ -3371,6 +3389,9 @@ var Engine = /** @class */ (function () {
3371
3389
  _this.run(node);
3372
3390
  });
3373
3391
  };
3392
+ Engine.prototype.getContext = function () {
3393
+ return this.context;
3394
+ };
3374
3395
  Engine.prototype.subscribe = function (eventName, listener) {
3375
3396
  var _this = this;
3376
3397
  if (!this.listeners[eventName]) {
@@ -3481,11 +3502,15 @@ var Engine = /** @class */ (function () {
3481
3502
  return newFn;
3482
3503
  };
3483
3504
  Engine.prototype.applyEdgeDelete = function (oldFn, fromNode, toNode, fromField, toField) {
3484
- var _a;
3485
- var newFn = __assign(__assign({}, oldFn), { body: __assign({}, oldFn.body) });
3505
+ var _a, _b;
3506
+ var newFn = __assign(__assign({}, oldFn), { body: __assign({}, oldFn.body), outputs: __assign({}, oldFn.outputs) });
3486
3507
  if (toNode === "output") {
3487
- // no deleting of output edges
3488
- return oldFn;
3508
+ // deleting of output edges
3509
+ if ((_a = newFn.outputs) === null || _a === void 0 ? void 0 : _a[toField]) {
3510
+ // set to empty to prevent port from being removed, as that would cause the output node to be deleted
3511
+ newFn.outputs[toField] = "";
3512
+ }
3513
+ return newFn;
3489
3514
  }
3490
3515
  var to = newFn.body[toNode];
3491
3516
  var fn = this.fnIndex[to === null || to === void 0 ? void 0 : to.name];
@@ -3501,7 +3526,7 @@ var Engine = /** @class */ (function () {
3501
3526
  // delete the incoming edge
3502
3527
  delete to.inputs[toField];
3503
3528
  // revert to default value if exists
3504
- if ((_a = fn.inputs) === null || _a === void 0 ? void 0 : _a[toField]) {
3529
+ if ((_b = fn.inputs) === null || _b === void 0 ? void 0 : _b[toField]) {
3505
3530
  var normDef = normalizeVarDef(fn.inputs[toField]);
3506
3531
  if (normDef.default !== undefined) {
3507
3532
  to.inputs[toField] = getDefault(normDef, to.inputs);
@@ -6409,7 +6434,7 @@ var InputBoolean = React.memo(function (_a) {
6409
6434
  var inputRef = React.useRef(null);
6410
6435
  React.useEffect(function () {
6411
6436
  if (allowEmpty && inputRef.current) {
6412
- console.log("setting indeterminate");
6437
+ // console.log("setting indeterminate");
6413
6438
  inputRef.current.indeterminate = value === undefined;
6414
6439
  }
6415
6440
  }, [value]);
@@ -6417,7 +6442,7 @@ var InputBoolean = React.memo(function (_a) {
6417
6442
  var next = !value;
6418
6443
  if (value === false && allowEmpty)
6419
6444
  next = undefined;
6420
- console.log("setting next", next);
6445
+ // console.log("setting next", next);
6421
6446
  onChange === null || onChange === void 0 ? void 0 : onChange(next);
6422
6447
  };
6423
6448
  return (React.createElement("input", { ref: inputRef, type: "checkbox", checked: Boolean(value), onChange: handleChange }));
@@ -6454,7 +6479,7 @@ var InputSelect = React.memo(function (_a) {
6454
6479
  })));
6455
6480
  });
6456
6481
 
6457
- 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"};
6482
+ 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"};
6458
6483
 
6459
6484
  function Control(_a) {
6460
6485
  var _b;
@@ -6482,7 +6507,7 @@ function Control(_a) {
6482
6507
  case "boolean":
6483
6508
  return (React.createElement(InputBoolean, { value: value, onChange: onChange, allowEmpty: vardef.allowEmpty }));
6484
6509
  default:
6485
- return React.createElement("span", { className: styles$1.PortLabel },
6510
+ return React.createElement("span", { className: styles$2.PortLabel },
6486
6511
  "(",
6487
6512
  vardef.type,
6488
6513
  ")");
@@ -6498,13 +6523,13 @@ function Menu(_a) {
6498
6523
  var handleClose = function () {
6499
6524
  setOpen(false);
6500
6525
  };
6501
- return (React.createElement("div", { className: styles$1.Menu },
6526
+ return (React.createElement("div", { className: styles$2.Menu },
6502
6527
  React.createElement("div", { onClick: handleOpen }, handle),
6503
- open && (React.createElement("div", { className: styles$1.MenuCanvas, onClick: handleClose }, children))));
6528
+ open && (React.createElement("div", { className: styles$2.MenuCanvas, onClick: handleClose }, children))));
6504
6529
  }
6505
6530
  function MenuItem(_a) {
6506
6531
  var children = _a.children, props = __rest(_a, ["children"]);
6507
- return (React.createElement("div", __assign({ className: styles$1.MenuItem }, props), children));
6532
+ return (React.createElement("div", __assign({ className: styles$2.MenuItem }, props), children));
6508
6533
  }
6509
6534
 
6510
6535
  var Input = function (_a) {
@@ -6521,10 +6546,10 @@ var Input = function (_a) {
6521
6546
  inputs: __assign(__assign({}, data.inputs), (_a = {}, _a[param] = value, _a)),
6522
6547
  });
6523
6548
  }; };
6524
- return (React.createElement(Handle, { type: "target", position: Position.Left, id: portId, className: classNames(styles$1.Input, styles$1.Port, styles$1["type-".concat(normalized.type)]), style: {
6549
+ return (React.createElement(Handle, { type: "target", position: Position.Left, id: portId, className: classNames(styles$2.Input, styles$2.Port, styles$2["type-".concat(normalized.type)]), style: {
6525
6550
  "--type-color": "var(--color-".concat(normalized.type, ")"),
6526
6551
  }, onClick: onClick },
6527
- React.createElement("span", { className: styles$1.PortLabel }, normalized.label || name),
6552
+ React.createElement("span", { className: styles$2.PortLabel }, normalized.label || name),
6528
6553
  !isRef && !showMenu && (React.createElement(Control, { vardef: normalized, value: value, onChange: handleInputChange(name), data: data })),
6529
6554
  showMenu && (React.createElement("div", { style: { display: "flex" } },
6530
6555
  React.createElement("span", { style: { flex: 1 } }),
@@ -6545,10 +6570,10 @@ var Param = function (_a) {
6545
6570
  params: __assign(__assign({}, data.params), (_a = {}, _a[param] = value, _a)),
6546
6571
  });
6547
6572
  }; };
6548
- return (React.createElement("div", { className: classNames(styles$1.Param, styles$1.Port, styles$1["type-".concat(normalized.type)]), style: {
6573
+ return (React.createElement("div", { className: classNames(styles$2.Param, styles$2.Port, styles$2["type-".concat(normalized.type)]), style: {
6549
6574
  "--type-color": "var(--color-".concat(normalized.type, ")"),
6550
6575
  }, onClick: onClick },
6551
- React.createElement("span", { className: styles$1.PortLabel }, normalized.label || name),
6576
+ React.createElement("span", { className: styles$2.PortLabel }, normalized.label || name),
6552
6577
  !isRef && (React.createElement(Control, { vardef: normalized, value: value, onChange: handleParamChange(name), data: data }))));
6553
6578
  };
6554
6579
 
@@ -6556,15 +6581,15 @@ var Output = function (_a) {
6556
6581
  var name = _a.name, varDef = _a.varDef, id = _a.id, onClick = _a.onClick, focus = _a.focus;
6557
6582
  var normalized = normalizeVarDef(varDef);
6558
6583
  var portId = "".concat(id, "-").concat(safeName(name));
6559
- return (React.createElement(Handle, { type: "source", position: Position.Right, id: portId, className: classNames(styles$1.Output, styles$1.Port, styles$1["type-".concat(normalized.type)]), style: {
6584
+ return (React.createElement(Handle, { type: "source", position: Position.Right, id: portId, className: classNames(styles$2.Output, styles$2.Port, styles$2["type-".concat(normalized.type)]), style: {
6560
6585
  "--type-color": "var(--color-".concat(normalized.type, ")"),
6561
6586
  }, onClick: onClick },
6562
- React.createElement("span", { className: styles$1.PortLabel },
6587
+ React.createElement("span", { className: styles$2.PortLabel },
6563
6588
  focus && "👁 ",
6564
6589
  normalized.label || name)));
6565
6590
  };
6566
6591
 
6567
- 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"};
6592
+ 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"};
6568
6593
 
6569
6594
  function NodeContainer(_a) {
6570
6595
  var _b;
@@ -6606,14 +6631,14 @@ function NodeContainer(_a) {
6606
6631
  var handleDelete = function () {
6607
6632
  instance.deleteElements({ nodes: [{ id: id }] });
6608
6633
  };
6609
- return (React.createElement("div", { className: classNames(className, styles.NodeContainer, (_b = {},
6610
- _b[styles.selected] = selected,
6611
- _b[styles.active] = active,
6634
+ return (React.createElement("div", { className: classNames(className, styles$1.NodeContainer, (_b = {},
6635
+ _b[styles$1.selected] = selected,
6636
+ _b[styles$1.active] = active,
6612
6637
  _b)) },
6613
- React.createElement("div", __assign({ className: styles.Label }, handlers()),
6638
+ React.createElement("div", __assign({ className: styles$1.Label }, handlers()),
6614
6639
  React.createElement("span", null),
6615
6640
  label,
6616
- React.createElement("span", null, deleteMode && (React.createElement("button", { className: styles.DeleteButton, onClick: handleDelete }, "\u2715")))),
6641
+ React.createElement("span", null, deleteMode && (React.createElement("button", { className: styles$1.DeleteButton, onClick: handleDelete }, "\u2715")))),
6617
6642
  children));
6618
6643
  }
6619
6644
 
@@ -6646,15 +6671,15 @@ function TreeBranchView(_a) {
6646
6671
  var subCnt = branch.children.length || ((_c = branch.items) === null || _c === void 0 ? void 0 : _c.length) || 0;
6647
6672
  var maxCnt = 10;
6648
6673
  return (React.createElement("div", null,
6649
- React.createElement("div", { className: classNames((_b = {}, _b[styles.expanded] = expanded, _b), styles.GroupHead), onClick: function () { return setExpanded(!expanded); } },
6650
- React.createElement("div", { className: styles.GroupName },
6674
+ React.createElement("div", { className: classNames((_b = {}, _b[styles$1.expanded] = expanded, _b), styles$1.GroupHead), onClick: function () { return setExpanded(!expanded); } },
6675
+ React.createElement("div", { className: styles$1.GroupName },
6651
6676
  "group ",
6652
6677
  branch.name),
6653
- React.createElement("div", { className: styles.GroupCnt },
6678
+ React.createElement("div", { className: styles$1.GroupCnt },
6654
6679
  "(",
6655
6680
  subCnt,
6656
6681
  ")")),
6657
- expanded && (React.createElement("div", { className: styles.GroupChildren },
6682
+ expanded && (React.createElement("div", { className: styles$1.GroupChildren },
6658
6683
  !isLeaf &&
6659
6684
  branch.children.map(function (subgroup, index) {
6660
6685
  // sub branch
@@ -6669,9 +6694,9 @@ function TreeBranchView(_a) {
6669
6694
  label = "{...}";
6670
6695
  }
6671
6696
  return (React.createElement("div", { key: index },
6672
- React.createElement("div", { className: styles.GroupLeaf, title: JSON.stringify(item, null, 2) }, label)));
6697
+ React.createElement("div", { className: styles$1.GroupLeaf, title: JSON.stringify(item, null, 2) }, label)));
6673
6698
  }),
6674
- branch.items && branch.items.length > maxCnt && (React.createElement("div", { className: styles.GroupMore },
6699
+ branch.items && branch.items.length > maxCnt && (React.createElement("div", { className: styles$1.GroupMore },
6675
6700
  "... ",
6676
6701
  branch.items.length - maxCnt,
6677
6702
  " more"))))))));
@@ -6693,7 +6718,7 @@ var Log = React.memo(function (_a) {
6693
6718
  }
6694
6719
  });
6695
6720
  }, []);
6696
- return (React.createElement(NodeContainer, { id: id, label: data.name, selected: selected, className: styles.Log },
6721
+ return (React.createElement(NodeContainer, { id: id, label: data.name, selected: selected, className: styles$1.Log },
6697
6722
  React.createElement(TreeView, { value: value }),
6698
6723
  React.createElement(Handle, { type: "target", position: Position.Left, id: "".concat(id, "-data") }),
6699
6724
  React.createElement(Handle, { type: "source", position: Position.Right, id: "".concat(id, "-data") })));
@@ -6723,9 +6748,9 @@ function GenericNode(_a) {
6723
6748
  });
6724
6749
  }, []);
6725
6750
  return (React.createElement(NodeContainer, { label: data.label, selected: selected, id: id },
6726
- React.createElement("div", { className: styles.Description }, data.description),
6751
+ React.createElement("div", { className: styles$1.Description }, data.description),
6727
6752
  children,
6728
- React.createElement("div", { className: styles.Ports },
6753
+ React.createElement("div", { className: styles$1.Ports },
6729
6754
  outputEntries.map(function (_a, index) {
6730
6755
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
6731
6756
  return (React.createElement(Output, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, onClick: function () { return setFocus(name); }, focus: showPreview && focus === name }));
@@ -6738,12 +6763,12 @@ function GenericNode(_a) {
6738
6763
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
6739
6764
  return (React.createElement(Param, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, data: data }));
6740
6765
  })),
6741
- !!outputEntries.length && (React.createElement("div", { className: classNames(styles.PreviewHead, (_b = {},
6742
- _b[styles.expanded] = showPreview,
6766
+ !!outputEntries.length && (React.createElement("div", { className: classNames(styles$1.PreviewHead, (_b = {},
6767
+ _b[styles$1.expanded] = showPreview,
6743
6768
  _b)), onClick: function () { return setShowPreview(!showPreview); } }, "Preview")),
6744
- showPreview && (React.createElement("div", { className: styles.Preview },
6769
+ showPreview && (React.createElement("div", { className: styles$1.Preview },
6745
6770
  React.createElement(TreeView, { value: previewValue }),
6746
- duration !== null && (React.createElement("div", { className: styles.Duration },
6771
+ duration !== null && (React.createElement("div", { className: styles$1.Duration },
6747
6772
  duration.toFixed(2),
6748
6773
  " ms"))))));
6749
6774
  }
@@ -6783,11 +6808,11 @@ var Calc = React.memo(function (_a) {
6783
6808
  });
6784
6809
  Calc.displayName = "CalcNode";
6785
6810
 
6786
- var Default = React.memo(function (_a) {
6811
+ var Default$1 = React.memo(function (_a) {
6787
6812
  var id = _a.id, data = _a.data, selected = _a.selected;
6788
6813
  return React.createElement(GenericNode, { id: id, data: data, selected: selected });
6789
6814
  });
6790
- Default.displayName = "DefaultNode";
6815
+ Default$1.displayName = "DefaultNode";
6791
6816
 
6792
6817
  /**
6793
6818
  * todo: get input data from graphed function
@@ -6895,15 +6920,15 @@ var InputNode = React.memo(function (_a) {
6895
6920
  });
6896
6921
  }); };
6897
6922
  return (React.createElement(NodeContainer, { label: data.label, selected: selected, id: id, noDelete: true },
6898
- React.createElement("div", { className: styles.Description }, data.description),
6899
- React.createElement("div", { className: styles.Ports },
6923
+ React.createElement("div", { className: styles$1.Description }, data.description),
6924
+ React.createElement("div", { className: styles$1.Ports },
6900
6925
  outputEntries.map(function (_a, index) {
6901
6926
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
6902
6927
  return (React.createElement(Output, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id }));
6903
6928
  }),
6904
6929
  Object.entries(outputs || {}).map(function (_a) {
6905
6930
  var _b = __read(_a, 2), name = _b[0], normalized = _b[1];
6906
- return (React.createElement(Handle, { key: name, type: "source", position: Position.Right, id: "".concat(id, "-").concat(name), className: classNames(styles$1.Output, styles$1.Port, styles$1["type-".concat(normalized.type)]), style: {
6931
+ return (React.createElement(Handle, { key: name, type: "source", position: Position.Right, id: "".concat(id, "-").concat(name), className: classNames(styles$2.Output, styles$2.Port, styles$2["type-".concat(normalized.type)]), style: {
6907
6932
  "--type-color": "var(--color-".concat(normalized.type, ")"),
6908
6933
  gridColumn: "1/3",
6909
6934
  } },
@@ -6914,9 +6939,9 @@ var InputNode = React.memo(function (_a) {
6914
6939
  React.createElement(MenuItem, { onClick: function () { return onDelete(name); } }, "Delete"),
6915
6940
  React.createElement(MenuItem, { onClick: function () { return onDefault(name); } }, "Set Default"),
6916
6941
  React.createElement(MenuItem, { onClick: function () { return onType(name); } }, "Set Type")),
6917
- React.createElement("span", { className: styles$1.PortLabel }, normalized.label || name)));
6942
+ React.createElement("span", { className: styles$2.PortLabel }, normalized.label || name)));
6918
6943
  })),
6919
- React.createElement("div", { className: styles.Body },
6944
+ React.createElement("div", { className: styles$1.Body },
6920
6945
  React.createElement("button", { onClick: function () { return onAdd(); } }, "+"))));
6921
6946
  });
6922
6947
  InputNode.displayName = "InputNode";
@@ -7052,8 +7077,8 @@ var OutputNode = React.memo(function (_a) {
7052
7077
  });
7053
7078
  };
7054
7079
  return (React.createElement(NodeContainer, { label: data.label, selected: selected, id: id, noDelete: true },
7055
- React.createElement("div", { className: styles.Description }, data.description),
7056
- React.createElement("div", { className: styles.Ports },
7080
+ React.createElement("div", { className: styles$1.Description }, data.description),
7081
+ React.createElement("div", { className: styles$1.Ports },
7057
7082
  outputEntries.map(function (_a, index) {
7058
7083
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
7059
7084
  return (React.createElement(Output, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, onClick: function () { return setFocus(name); }, focus: showPreview && focus === name }));
@@ -7066,14 +7091,14 @@ var OutputNode = React.memo(function (_a) {
7066
7091
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
7067
7092
  return (React.createElement(Param, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, data: data }));
7068
7093
  })),
7069
- React.createElement("div", { className: styles.Body },
7094
+ React.createElement("div", { className: styles$1.Body },
7070
7095
  React.createElement("button", { onClick: function () { return onAdd(); } }, "+")),
7071
- !!outputEntries.length && (React.createElement("div", { className: classNames(styles.PreviewHead, (_b = {},
7072
- _b[styles.expanded] = showPreview,
7096
+ !!outputEntries.length && (React.createElement("div", { className: classNames(styles$1.PreviewHead, (_b = {},
7097
+ _b[styles$1.expanded] = showPreview,
7073
7098
  _b)), onClick: function () { return setShowPreview(!showPreview); } }, "Preview")),
7074
- showPreview && (React.createElement("div", { className: styles.Preview },
7099
+ showPreview && (React.createElement("div", { className: styles$1.Preview },
7075
7100
  React.createElement(TreeView, { value: previewValue }),
7076
- duration !== null && (React.createElement("div", { className: styles.Duration },
7101
+ duration !== null && (React.createElement("div", { className: styles$1.Duration },
7077
7102
  duration.toFixed(2),
7078
7103
  " ms"))))));
7079
7104
  });
@@ -7081,13 +7106,17 @@ OutputNode.displayName = "OutputNode";
7081
7106
 
7082
7107
  var DynamicOutput = React.memo(function (_a) {
7083
7108
  var id = _a.id, data = _a.data, selected = _a.selected;
7084
- var outputDefs = data.outputDefs || {};
7085
- Object.keys(data.outputs || {}).forEach(function (key) {
7086
- if (!outputDefs[key]) {
7087
- outputDefs[key] = { type: "any", label: key };
7088
- }
7089
- });
7090
- var _b = __read(React.useState(outputDefs), 2), outputs = _b[0], setOutputs = _b[1];
7109
+ var outputDefs = React.useMemo(function () {
7110
+ var outputDefs = __assign({}, (data.outputDefs || {}));
7111
+ Object.keys(data.outputs || {}).forEach(function (key) {
7112
+ if (!outputDefs[key]) {
7113
+ outputDefs[key] = { type: "any", label: key };
7114
+ }
7115
+ });
7116
+ return outputDefs;
7117
+ }, [data.outputDefs, data.outputs]);
7118
+ var _b = __read(React.useState({}), 2), outputs = _b[0], setOutputs = _b[1];
7119
+ // console.log(id, outputs, data.outputs, data.outputDefs, outputDefs);
7091
7120
  var engine = useEngine();
7092
7121
  React.useEffect(function () {
7093
7122
  return engine.subscribe("functionResult", function (event) {
@@ -7096,11 +7125,11 @@ var DynamicOutput = React.memo(function (_a) {
7096
7125
  setOutputs(mergeWithOrder(Object.fromEntries(Object.keys(result).map(function (name, i) { return [
7097
7126
  name,
7098
7127
  { type: "any", label: name },
7099
- ]; })), outputs));
7128
+ ]; })), outputDefs));
7100
7129
  }
7101
7130
  });
7102
- }, []);
7103
- return (React.createElement(GenericNode, { outputs: outputs, id: id, data: data, selected: selected }));
7131
+ }, [outputDefs]);
7132
+ return (React.createElement(GenericNode, { outputs: outputs, id: id, data: data, selected: selected }, id));
7104
7133
  });
7105
7134
  DynamicOutput.displayName = "DynamicOutputNode";
7106
7135
 
@@ -7169,8 +7198,8 @@ var NamedInput = function (_a) {
7169
7198
  data.onChange({ inputs: inputs, inputDefs: inputDefs });
7170
7199
  };
7171
7200
  return (React.createElement(NodeContainer, { label: data.label, selected: selected, id: id, noDelete: true },
7172
- React.createElement("div", { className: styles.Description }, data.description),
7173
- React.createElement("div", { className: styles.Ports },
7201
+ React.createElement("div", { className: styles$1.Description }, data.description),
7202
+ React.createElement("div", { className: styles$1.Ports },
7174
7203
  outputEntries.map(function (_a, index) {
7175
7204
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
7176
7205
  return (React.createElement(Output, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, onClick: function () { return setFocus(name); }, focus: showPreview && focus === name }));
@@ -7180,25 +7209,26 @@ var NamedInput = function (_a) {
7180
7209
  var menu = !fixedInputs.has(name);
7181
7210
  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 }));
7182
7211
  }),
7183
- React.createElement("div", { className: styles.Body },
7212
+ React.createElement("div", { className: styles$1.Body },
7184
7213
  React.createElement("button", { onClick: function () { return onAdd(); } }, "+")),
7185
7214
  paramEntries.map(function (_a, index) {
7186
7215
  var _b = __read(_a, 2), name = _b[0], varDef = _b[1];
7187
7216
  return (React.createElement(Param, { key: "".concat(name, "_").concat(index), name: name, varDef: varDef, id: id, data: data }));
7188
7217
  })),
7189
- !!outputEntries.length && (React.createElement("div", { className: classNames(styles.PreviewHead, (_b = {},
7190
- _b[styles.expanded] = showPreview,
7218
+ !!outputEntries.length && (React.createElement("div", { className: classNames(styles$1.PreviewHead, (_b = {},
7219
+ _b[styles$1.expanded] = showPreview,
7191
7220
  _b)), onClick: function () { return setShowPreview(!showPreview); } }, "Preview")),
7192
- showPreview && (React.createElement("div", { className: styles.Preview },
7221
+ showPreview && (React.createElement("div", { className: styles$1.Preview },
7193
7222
  React.createElement(TreeView, { value: previewValue }),
7194
- duration !== null && (React.createElement("div", { className: styles.Duration },
7223
+ duration !== null && (React.createElement("div", { className: styles$1.Duration },
7195
7224
  duration.toFixed(2),
7196
7225
  " ms"))))));
7197
7226
  };
7198
7227
  NamedInput.displayName = "NamedInput";
7199
7228
 
7200
7229
  var nodeTypes = {
7201
- Default: Default,
7230
+ default: Default$1,
7231
+ Default: Default$1,
7202
7232
  Calc: Calc,
7203
7233
  Log: Log,
7204
7234
  DynamicInput: DynamicInput,
@@ -7208,6 +7238,80 @@ var nodeTypes = {
7208
7238
  Output: OutputNode,
7209
7239
  };
7210
7240
 
7241
+ function useNodeResult(id) {
7242
+ var _a, _b;
7243
+ var engine = useEngine();
7244
+ var scope = ((_b = (_a = engine.getContext()) === null || _a === void 0 ? void 0 : _a.scope) === null || _b === void 0 ? void 0 : _b[id]) || {};
7245
+ var _c = __read(React.useState(scope || {}), 2), result = _c[0], setResult = _c[1];
7246
+ React.useEffect(function () {
7247
+ return engine.subscribe("functionResult", function (event) {
7248
+ if (event.name === id) {
7249
+ setResult(event.result || {});
7250
+ }
7251
+ });
7252
+ }, [id, engine]);
7253
+ return result;
7254
+ }
7255
+
7256
+ var styles = {
7257
+ empty: {
7258
+ stroke: "var(--edge-empty-color, crimson)",
7259
+ },
7260
+ single: {
7261
+ strokeWidth: 1,
7262
+ },
7263
+ listBack: {
7264
+ strokeWidth: 4,
7265
+ },
7266
+ listFront: {
7267
+ stroke: "var(--canvas-background)",
7268
+ strokeWidth: 2,
7269
+ },
7270
+ multiBack: {
7271
+ strokeWidth: 4,
7272
+ strokeDasharray: "10,3",
7273
+ },
7274
+ multiFront: {
7275
+ stroke: "var(--canvas-background)",
7276
+ strokeWidth: 2,
7277
+ strokeDasharray: "8,5",
7278
+ strokeDashoffset: -1,
7279
+ },
7280
+ };
7281
+ var Default = React.memo(function (_a) {
7282
+ var props = __rest(_a, []);
7283
+ var data = useNodeResult(props.source);
7284
+ if (props.sourceHandleId) {
7285
+ var field = deRefEdgeHandle(props.sourceHandleId).field;
7286
+ var value = data[field];
7287
+ if (value) {
7288
+ if (isEmpty(value)) {
7289
+ return React.createElement(BezierEdge, __assign({}, props, { style: styles.empty }));
7290
+ }
7291
+ else if (isList(value)) {
7292
+ return (React.createElement(React.Fragment, null,
7293
+ React.createElement(BezierEdge, __assign({}, props, { style: styles.listBack })),
7294
+ ";",
7295
+ React.createElement(BezierEdge, __assign({}, props, { style: styles.listFront })),
7296
+ ";"));
7297
+ }
7298
+ else if (isMultiBranch(value)) {
7299
+ return (React.createElement(React.Fragment, null,
7300
+ React.createElement(BezierEdge, __assign({}, props, { style: styles.multiBack })),
7301
+ ";",
7302
+ React.createElement(BezierEdge, __assign({}, props, { style: styles.multiFront })),
7303
+ ";"));
7304
+ }
7305
+ }
7306
+ }
7307
+ return React.createElement(BezierEdge, __assign({}, props, { style: styles.single }));
7308
+ });
7309
+ Default.displayName = "DefaultEdge";
7310
+
7311
+ var edgeTypes = {
7312
+ default: Default,
7313
+ };
7314
+
7211
7315
  var variableStore = create$1(function (set, get, api) {
7212
7316
  return persist(function (pset, pget) { return ({
7213
7317
  data: {},
@@ -7338,6 +7442,7 @@ function createNode(engine, id, fncall, options) {
7338
7442
  }
7339
7443
  function createEdge(nodeId, ref) {
7340
7444
  return {
7445
+ type: "default",
7341
7446
  id: "".concat(ref.path, "-").concat(nodeId, ".").concat(ref.name),
7342
7447
  source: ref.refNode,
7343
7448
  target: nodeId,
@@ -7462,6 +7567,7 @@ var useFlowState = create$1(function (set, get) { return ({
7462
7567
  var refs = getReferences(fncall.inputs || {});
7463
7568
  // remove all incoming edges
7464
7569
  edges = edges === null || edges === void 0 ? void 0 : edges.filter(function (e) { return e.target !== key; });
7570
+ edgesToAdd = edgesToAdd.filter(function (e) { return e[0] !== key; });
7465
7571
  // add the edge
7466
7572
  refs.forEach(function (ref) {
7467
7573
  edgesToAdd.push([key, ref]);
@@ -7526,7 +7632,7 @@ var ConnectionLine = (function (_a) {
7526
7632
  sourcePosition: Position.Right,
7527
7633
  targetPosition: Position.Left,
7528
7634
  });
7529
- return (React.createElement("g", { className: classNames(styles$1.ConnectionPath, "react-flow__connection-path", (_b = {}, _b[styles$1.valid] = connectionStatus === "valid", _b)) },
7635
+ return (React.createElement("g", { className: classNames(styles$2.ConnectionPath, "react-flow__connection-path", (_b = {}, _b[styles$2.valid] = connectionStatus === "valid", _b)) },
7530
7636
  React.createElement("path", { d: d[0] })));
7531
7637
  });
7532
7638
 
@@ -7536,14 +7642,14 @@ var ConnectionLine = (function (_a) {
7536
7642
  */
7537
7643
  var emptyObject = {};
7538
7644
  function FlowInner(_a) {
7539
- 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;
7540
- var _e = __read(React.useState(null), 2), instance = _e[0], setInstance = _e[1];
7645
+ 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;
7646
+ var _f = __read(React.useState(null), 2), instance = _f[0], setInstance = _f[1];
7541
7647
  var handleInit = function (instance) {
7542
7648
  setInstance(instance);
7543
7649
  onInit === null || onInit === void 0 ? void 0 : onInit(instance);
7544
7650
  };
7545
7651
  var updatePosition = useUpdatePositions(fn);
7546
- var _f = __read(usePositions(fn), 2), positions = _f[0], setPositions = _f[1];
7652
+ var _g = __read(usePositions(fn), 2), positions = _g[0], setPositions = _g[1];
7547
7653
  var options = React.useMemo(function () {
7548
7654
  var handleDataChange = function (id) { return function (newData) {
7549
7655
  onChange === null || onChange === void 0 ? void 0 : onChange(function (fn) {
@@ -7564,7 +7670,7 @@ function FlowInner(_a) {
7564
7670
  });
7565
7671
  };
7566
7672
  return {
7567
- dragHandle: ".".concat(styles.Label),
7673
+ dragHandle: ".".concat(styles$1.Label),
7568
7674
  positions: __assign(__assign({}, positions), defaultPositions),
7569
7675
  onDataChange: handleDataChange,
7570
7676
  onIOChange: handleIOChange,
@@ -7573,7 +7679,7 @@ function FlowInner(_a) {
7573
7679
  React.useEffect(function () {
7574
7680
  setPositions(__assign(__assign({}, positions), defaultPositions));
7575
7681
  }, [defaultPositions]);
7576
- var _g = useFlow(fn, engine, options), nodes = _g.nodes, edges = _g.edges, setNodes = _g.setNodes, setEdges = _g.setEdges;
7682
+ var _h = useFlow(fn, engine, options), nodes = _h.nodes, edges = _h.edges, setNodes = _h.setNodes, setEdges = _h.setEdges;
7577
7683
  // node selection handler
7578
7684
  var handleSelect = React.useCallback(function (_a) {
7579
7685
  var nodes = _a.nodes;
@@ -7583,7 +7689,7 @@ function FlowInner(_a) {
7583
7689
  onChange: handleSelect,
7584
7690
  });
7585
7691
  // dropping nodes
7586
- var _h = __read(useDrop({
7692
+ var _j = __read(useDrop({
7587
7693
  accept: "flow-node",
7588
7694
  drop: function (item, monitor) {
7589
7695
  var pos = monitor.getClientOffset();
@@ -7603,9 +7709,13 @@ function FlowInner(_a) {
7603
7709
  isOver: monitor.isOver(),
7604
7710
  };
7605
7711
  },
7606
- }), 2); _h[0].isOver; var drop = _h[1];
7712
+ }), 2); _j[0].isOver; var drop = _j[1];
7607
7713
  // connecting nodes
7608
7714
  var onConnect = React.useCallback(function (params) {
7715
+ if (!params.sourceHandle || !params.targetHandle) {
7716
+ console.warn("Invalid connection handles", params);
7717
+ return;
7718
+ }
7609
7719
  var sourceField = deRefEdgeHandle(params.sourceHandle).field;
7610
7720
  var targetField = deRefEdgeHandle(params.targetHandle).field;
7611
7721
  if (!sourceField || !targetField) {
@@ -7627,6 +7737,10 @@ function FlowInner(_a) {
7627
7737
  onChange === null || onChange === void 0 ? void 0 : onChange(function (fn) {
7628
7738
  var newFn = fn;
7629
7739
  edgesToDelete.forEach(function (edge) {
7740
+ if (!edge.sourceHandle || !edge.targetHandle) {
7741
+ console.warn("Invalid connection handles", edge);
7742
+ return;
7743
+ }
7630
7744
  var sourceField = deRefEdgeHandle(edge.sourceHandle).field;
7631
7745
  var targetField = deRefEdgeHandle(edge.targetHandle).field;
7632
7746
  if (!sourceField || !targetField) {
@@ -7686,12 +7800,14 @@ function FlowInner(_a) {
7686
7800
  return applyEdgeChanges(changes, edgesSnapshot);
7687
7801
  });
7688
7802
  }, []);
7689
- return (React.createElement(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: {
7803
+ return (React.createElement(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: {
7690
7804
  minZoom: fitView ? undefined : 1,
7691
7805
  maxZoom: fitView ? undefined : 1,
7692
7806
  },
7693
7807
  // panOnDrag={false}
7694
- selectionOnDrag: true, minZoom: 0.1, maxZoom: 4, deleteKeyCode: "Delete", connectionLineComponent: ConnectionLine },
7808
+ selectionOnDrag: true, minZoom: 0.1, maxZoom: 4, deleteKeyCode: "Delete", connectionLineComponent: ConnectionLine, style: {
7809
+ backgroundColor: "var(--canvas-background)",
7810
+ } },
7695
7811
  React.createElement(Background, { variant: BackgroundVariant.Dots }),
7696
7812
  React.createElement(Controls, null)));
7697
7813
  }
@@ -8742,5 +8858,5 @@ function DDContext(_a) {
8742
8858
  return React.createElement(DndProvider, { backend: HTML5Backend }, children);
8743
8859
  }
8744
8860
 
8745
- export { DDContext, DISCARD, Engine, Flow, FlowContext, GenericNode, Input, InputBoolean, InputNumber, InputSelect, InputString, InputText, Lib, Output, Param, binaryOnTree, binaryOnTreeBranch, broadCast, deRefEdgeHandle, ensureBranch, expandTree, forEachBranch, forEachItem, getBranch, getBranches, getItem, getPaths, getPositions, getReferences, getValue$1 as getValue, getVariable, graftTree, hasReference, interpolate, isEmpty, isEmptyTree, isReference, isSingleTon, isTree, mapTree, mapTreeBranch, mergeWithOrder, nAryOnTree, nAryOnTreeBranch, normalizePaths, normalizeVarDef, parseReference, primitives, pushItem, safeName, sameShape, simplifyTree$1 as simplifyTree, toArray, topSort, treeSize, treeStats, trimTree, uid$1 as uid, useControls, useDraggableNode, useEngine, useFlow, useFunction, useGraphedFunction, usePositions, usePrompts, useUpdatePositions, useVariable, variableStore };
8861
+ export { DDContext, DISCARD, Engine, Flow, FlowContext, GenericNode, Input, InputBoolean, InputNumber, InputSelect, InputString, InputText, Lib, Output, Param, binaryOnTree, binaryOnTreeBranch, broadCast, deRefEdgeHandle, ensureBranch, expandTree, forEachBranch, forEachItem, getBranch, getBranches, getItem, getPaths, getPositions, getReferences, getValue$1 as getValue, getVariable, graftTree, hasReference, interpolate, isEmpty, isEmptyTree, isList, isMultiBranch, isReference, isSingleTon, isTree, mapTree, mapTreeBranch, mergeWithOrder, nAryOnTree, nAryOnTreeBranch, normalizePaths, normalizeVarDef, parseReference, primitives, pushItem, safeName, sameShape, simplifyTree$1 as simplifyTree, toArray, topSort, treeSize, treeStats, trimTree, uid$1 as uid, useControls, useDraggableNode, useEngine, useFlow, useFunction, useGraphedFunction, usePositions, usePrompts, useUpdatePositions, useVariable, variableStore };
8746
8862
  //# sourceMappingURL=index.esm.mjs.map