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