@rkmodules/rules 0.0.93 → 0.0.95

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.
@@ -195,7 +195,6 @@
195
195
  .Ports_fVs5I {
196
196
  display: grid;
197
197
  grid-template-columns: auto 1fr;
198
- grid-auto-rows: 26px;
199
198
  }
200
199
 
201
200
  .Body_ptEZP {
package/dist/index.cjs.js CHANGED
@@ -142,18 +142,19 @@ var DISCARD = Symbol("DISCARD");
142
142
  */
143
143
  function simplifyTree$1(tree) {
144
144
  var keys = Object.keys(tree);
145
- if (keys.length <= 1)
146
- return tree; // ✅ Don't simplify if only one path
147
145
  // Parse all paths into number arrays
148
146
  var parsedPaths = keys.map(function (path) { return path.split(";").map(Number); });
149
147
  // Find common prefix
150
- var prefixLength = parsedPaths[0].length;
151
- for (var i = 1; i < parsedPaths.length; i++) {
152
- var path = parsedPaths[i];
153
- for (var j = 0; j < prefixLength; j++) {
154
- if (path[j] !== parsedPaths[0][j]) {
155
- prefixLength = j;
156
- break;
148
+ var prefixLength = 1;
149
+ if (keys.length > 1) {
150
+ prefixLength = parsedPaths[0].length;
151
+ for (var i = 1; i < parsedPaths.length; i++) {
152
+ var path = parsedPaths[i];
153
+ for (var j = 0; j < prefixLength; j++) {
154
+ if (path[j] !== parsedPaths[0][j]) {
155
+ prefixLength = j;
156
+ break;
157
+ }
157
158
  }
158
159
  }
159
160
  }
@@ -273,10 +274,10 @@ function mapTree(tree, fn) {
273
274
  });
274
275
  }
275
276
  function mapTreeBranch(tree, fn) {
276
- return nAryOnTreeBranch([tree], function mapTreeBranchCallback(_a, _b) {
277
+ return nAryOnTreeBranch([tree], function mapTreeBranchCallback(_a, _b, index) {
277
278
  var _c = __read(_a, 1), branch = _c[0];
278
279
  var _d = __read(_b, 1), path = _d[0];
279
- return fn(branch || [], path);
280
+ return fn(branch || [], path, index);
280
281
  });
281
282
  }
282
283
  /**
@@ -300,7 +301,7 @@ function nAryOnTreeBranch(trees, fn) {
300
301
  // get all the paths of which the trees are the longest, use the first
301
302
  var maxPaths = paths.filter(function (_, i) { return allKeys[i].length === maxBranches; });
302
303
  var path = maxPaths[0];
303
- var newBranch = fn(branches, paths);
304
+ var newBranch = fn(branches, paths, i);
304
305
  if (newBranch !== DISCARD) {
305
306
  result[path] = newBranch;
306
307
  }
@@ -366,10 +367,10 @@ function nAryOnTree(trees, fn, fill) {
366
367
  * @returns
367
368
  */
368
369
  function binaryOnTreeBranch(treeA, treeB, fn) {
369
- return nAryOnTreeBranch([treeA, treeB], function binaryOnTreeBranchCallback(_a, _b) {
370
+ return nAryOnTreeBranch([treeA, treeB], function binaryOnTreeBranchCallback(_a, _b, index) {
370
371
  var _c = __read(_a, 2), branchA = _c[0], branchB = _c[1];
371
372
  var _d = __read(_b, 2), pathA = _d[0], pathB = _d[1];
372
- return fn(branchA || [], branchB || [], pathA, pathB);
373
+ return fn(branchA || [], branchB || [], pathA, pathB, index);
373
374
  });
374
375
  }
375
376
  /**
@@ -635,17 +636,17 @@ var value = {
635
636
  }); },
636
637
  };
637
638
 
638
- var _a$7;
639
- var primitives$7 = (_a$7 = {},
640
- _a$7[getValue.name] = getValue,
641
- _a$7[log.name] = log,
642
- _a$7[value.name] = value,
643
- _a$7);
639
+ var _a$8;
640
+ var primitives$8 = (_a$8 = {},
641
+ _a$8[getValue.name] = getValue,
642
+ _a$8[log.name] = log,
643
+ _a$8[value.name] = value,
644
+ _a$8);
644
645
 
645
646
  var add$1 = {
646
647
  name: "add",
647
648
  label: "Add",
648
- description: "Add two numbers",
649
+ description: "Add two numbers or strings",
649
650
  inputs: {
650
651
  a: { type: "number", default: 0 },
651
652
  b: { type: "number", default: 0 },
@@ -1138,16 +1139,21 @@ var ceil = {
1138
1139
  inputs: {
1139
1140
  x: { type: "number", default: 0 },
1140
1141
  },
1142
+ params: {
1143
+ decimals: { type: "number", default: 0 },
1144
+ },
1141
1145
  outputs: {
1142
1146
  ceil: "number",
1143
1147
  },
1144
- impl: function (inputs) { return __awaiter(void 0, void 0, void 0, function () {
1148
+ impl: function (inputs, params) { return __awaiter(void 0, void 0, void 0, function () {
1149
+ var f;
1145
1150
  return __generator(this, function (_a) {
1151
+ f = Math.pow(10, params.decimals || 0);
1146
1152
  return [2 /*return*/, {
1147
1153
  ceil: mapTree(inputs.x, function (x) {
1148
1154
  if (x === undefined)
1149
1155
  return DISCARD;
1150
- return Math.ceil(x);
1156
+ return Math.ceil(f * x) / f;
1151
1157
  }),
1152
1158
  }];
1153
1159
  });
@@ -1161,16 +1167,21 @@ var floor = {
1161
1167
  inputs: {
1162
1168
  x: { type: "number", default: 0 },
1163
1169
  },
1170
+ params: {
1171
+ decimals: { type: "number", default: 0 },
1172
+ },
1164
1173
  outputs: {
1165
1174
  floor: "number",
1166
1175
  },
1167
- impl: function (inputs) { return __awaiter(void 0, void 0, void 0, function () {
1176
+ impl: function (inputs, params) { return __awaiter(void 0, void 0, void 0, function () {
1177
+ var f;
1168
1178
  return __generator(this, function (_a) {
1179
+ f = Math.pow(10, params.decimals || 0);
1169
1180
  return [2 /*return*/, {
1170
1181
  floor: mapTree(inputs.x, function (x) {
1171
1182
  if (x === undefined)
1172
1183
  return DISCARD;
1173
- return Math.floor(x);
1184
+ return Math.floor(f * x) / f;
1174
1185
  }),
1175
1186
  }];
1176
1187
  });
@@ -1184,16 +1195,122 @@ var round = {
1184
1195
  inputs: {
1185
1196
  x: { type: "number", default: 0 },
1186
1197
  },
1198
+ params: {
1199
+ decimals: { type: "number", default: 0 },
1200
+ },
1187
1201
  outputs: {
1188
1202
  round: "number",
1189
1203
  },
1190
- impl: function (inputs) { return __awaiter(void 0, void 0, void 0, function () {
1204
+ impl: function (inputs, params) { return __awaiter(void 0, void 0, void 0, function () {
1205
+ var f;
1191
1206
  return __generator(this, function (_a) {
1207
+ f = Math.pow(10, params.decimals || 0);
1192
1208
  return [2 /*return*/, {
1193
1209
  round: mapTree(inputs.x, function (x) {
1194
1210
  if (x === undefined)
1195
1211
  return DISCARD;
1196
- return Math.round(x);
1212
+ return Math.round(f * x) / f;
1213
+ }),
1214
+ }];
1215
+ });
1216
+ }); },
1217
+ };
1218
+
1219
+ var sum = {
1220
+ name: "sum",
1221
+ label: "Sum",
1222
+ description: "Sum of all items in a group",
1223
+ inputs: {
1224
+ tree: { type: "number", default: 0 },
1225
+ },
1226
+ outputs: {
1227
+ sum: "number",
1228
+ },
1229
+ impl: function (inputs) { return __awaiter(void 0, void 0, void 0, function () {
1230
+ return __generator(this, function (_a) {
1231
+ return [2 /*return*/, {
1232
+ sum: mapTreeBranch(inputs.tree, function (branch) {
1233
+ if (!branch || branch.length === 0)
1234
+ return DISCARD;
1235
+ var total = branch.reduce(function (acc, item) {
1236
+ if (item === undefined)
1237
+ return acc;
1238
+ return acc + item;
1239
+ });
1240
+ return [total];
1241
+ }),
1242
+ }];
1243
+ });
1244
+ }); },
1245
+ };
1246
+
1247
+ var _a$7;
1248
+ var primitives$7 = (_a$7 = {},
1249
+ _a$7[calc.name] = calc,
1250
+ _a$7[equalTo.name] = equalTo,
1251
+ _a$7[lessThan.name] = lessThan,
1252
+ _a$7[greaterThan.name] = greaterThan,
1253
+ _a$7[add$1.name] = add$1,
1254
+ _a$7[subtract$1.name] = subtract$1,
1255
+ _a$7[multiply.name] = multiply,
1256
+ _a$7[divide.name] = divide,
1257
+ _a$7[modulo.name] = modulo,
1258
+ _a$7[sinDeg.name] = sinDeg,
1259
+ _a$7[cosDeg.name] = cosDeg,
1260
+ _a$7[tanDeg.name] = tanDeg,
1261
+ _a$7[sqrt.name] = sqrt,
1262
+ _a$7[pow.name] = pow,
1263
+ _a$7[round.name] = round,
1264
+ _a$7[ceil.name] = ceil,
1265
+ _a$7[floor.name] = floor,
1266
+ _a$7[sum.name] = sum,
1267
+ _a$7);
1268
+
1269
+ var joinStrings = {
1270
+ name: "joinStrings",
1271
+ label: "Join Strings",
1272
+ description: "Join all strings in a group",
1273
+ inputs: {
1274
+ tree: { type: "string", default: "" },
1275
+ },
1276
+ params: {
1277
+ separator: { type: "string", default: "" },
1278
+ },
1279
+ outputs: {
1280
+ joined: "string",
1281
+ },
1282
+ impl: function (inputs, params) { return __awaiter(void 0, void 0, void 0, function () {
1283
+ var sep;
1284
+ return __generator(this, function (_a) {
1285
+ sep = params.separator || "";
1286
+ return [2 /*return*/, {
1287
+ joined: mapTreeBranch(inputs.tree, function (branch) {
1288
+ if (!branch || branch.length === 0)
1289
+ return DISCARD;
1290
+ return [branch.join(sep)];
1291
+ }),
1292
+ }];
1293
+ });
1294
+ }); },
1295
+ };
1296
+
1297
+ var toString = {
1298
+ name: "toString",
1299
+ label: "To String",
1300
+ description: "convert to string",
1301
+ inputs: {
1302
+ tree: { type: "any", default: 0 },
1303
+ },
1304
+ outputs: {
1305
+ string: "string",
1306
+ },
1307
+ impl: function (inputs) { return __awaiter(void 0, void 0, void 0, function () {
1308
+ return __generator(this, function (_a) {
1309
+ return [2 /*return*/, {
1310
+ string: mapTree(inputs.tree || {}, function (item) {
1311
+ if (item === undefined)
1312
+ return DISCARD;
1313
+ return String(item);
1197
1314
  }),
1198
1315
  }];
1199
1316
  });
@@ -1202,23 +1319,8 @@ var round = {
1202
1319
 
1203
1320
  var _a$6;
1204
1321
  var primitives$6 = (_a$6 = {},
1205
- _a$6[calc.name] = calc,
1206
- _a$6[equalTo.name] = equalTo,
1207
- _a$6[lessThan.name] = lessThan,
1208
- _a$6[greaterThan.name] = greaterThan,
1209
- _a$6[add$1.name] = add$1,
1210
- _a$6[subtract$1.name] = subtract$1,
1211
- _a$6[multiply.name] = multiply,
1212
- _a$6[divide.name] = divide,
1213
- _a$6[modulo.name] = modulo,
1214
- _a$6[sinDeg.name] = sinDeg,
1215
- _a$6[cosDeg.name] = cosDeg,
1216
- _a$6[tanDeg.name] = tanDeg,
1217
- _a$6[sqrt.name] = sqrt,
1218
- _a$6[pow.name] = pow,
1219
- _a$6[round.name] = round,
1220
- _a$6[ceil.name] = ceil,
1221
- _a$6[floor.name] = floor,
1322
+ _a$6[toString.name] = toString,
1323
+ _a$6[joinStrings.name] = joinStrings,
1222
1324
  _a$6);
1223
1325
 
1224
1326
  var filterList = {
@@ -1264,25 +1366,6 @@ var filterList = {
1264
1366
  }); },
1265
1367
  };
1266
1368
 
1267
- var splitGroup = {
1268
- name: "splitGroup",
1269
- label: "Split Group",
1270
- description: "Splits every item of a group into its own group",
1271
- inputs: {
1272
- tree: "any",
1273
- },
1274
- outputs: {
1275
- tree: "any", // Return the grafted nodes
1276
- },
1277
- impl: function (inputs) { return __awaiter(void 0, void 0, void 0, function () {
1278
- return __generator(this, function (_a) {
1279
- return [2 /*return*/, {
1280
- tree: graftTree(inputs.tree || {}),
1281
- }];
1282
- });
1283
- }); },
1284
- };
1285
-
1286
1369
  var listItem = {
1287
1370
  name: "listItem",
1288
1371
  label: "List Item",
@@ -1352,73 +1435,9 @@ var listLength = {
1352
1435
  }); },
1353
1436
  };
1354
1437
 
1355
- var mergeGroup = {
1356
- name: "mergeGroup",
1357
- label: "Merge Group",
1358
- description: "Merge the deepest groups into their parent.",
1359
- inputs: {
1360
- tree: "any",
1361
- },
1362
- params: {
1363
- depth: { type: "number", default: 1 }, // Optional depth to trim the tree
1364
- },
1365
- outputs: {
1366
- tree: "any", // Return the trimed nodes
1367
- },
1368
- impl: function (inputs, params) { return __awaiter(void 0, void 0, void 0, function () {
1369
- var depth;
1370
- var _a;
1371
- return __generator(this, function (_b) {
1372
- depth = (_a = params.depth) !== null && _a !== void 0 ? _a : 1;
1373
- return [2 /*return*/, {
1374
- tree: trimTree(inputs.tree, depth),
1375
- }];
1376
- });
1377
- }); },
1378
- };
1379
-
1380
- var cartesianGroups = {
1381
- name: "cartesianGroups",
1382
- label: "Cartesian Groups",
1383
- description: "Duplicate groups such that all pairings are created.",
1384
- inputs: {
1385
- treeA: "any",
1386
- treeB: "any",
1387
- },
1388
- params: {},
1389
- outputs: {
1390
- treeA: "any",
1391
- treeB: "any",
1392
- },
1393
- impl: function (inputs, params) { return __awaiter(void 0, void 0, void 0, function () {
1394
- var pathsA, pathsB, treeA, treeB;
1395
- return __generator(this, function (_a) {
1396
- if (!inputs.treeA || !inputs.treeB) {
1397
- return [2 /*return*/, {}];
1398
- }
1399
- pathsA = getPaths(inputs.treeA);
1400
- pathsB = getPaths(inputs.treeB);
1401
- treeA = {};
1402
- treeB = {};
1403
- pathsB.forEach(function (pathB, ib) {
1404
- pathsA.forEach(function (pathA, ia) {
1405
- var pa = "".concat(ib, ";").concat(pathA);
1406
- treeA[pa] = inputs.treeA[pathA];
1407
- var pb = "".concat(pathB, ";").concat(ia);
1408
- treeB[pb] = inputs.treeB[pathB];
1409
- });
1410
- });
1411
- return [2 /*return*/, {
1412
- treeA: treeA,
1413
- treeB: treeB,
1414
- }];
1415
- });
1416
- }); },
1417
- };
1418
-
1419
1438
  var concat = {
1420
1439
  name: "concat",
1421
- label: "Concat",
1440
+ label: "Concat Lists",
1422
1441
  description: "Concatenates two lists back to back",
1423
1442
  inputs: {
1424
1443
  treeA: "any",
@@ -1519,59 +1538,135 @@ var relativeItems = {
1519
1538
  }); },
1520
1539
  };
1521
1540
 
1541
+ function isBoolStr(str) {
1542
+ return str.toLowerCase() === "true" || str.toLowerCase() === "false";
1543
+ }
1544
+ function isNumStr(str) {
1545
+ return !isNaN(Number(str));
1546
+ }
1547
+ var listInput = {
1548
+ name: "listInput",
1549
+ label: "List Input",
1550
+ description: "Input a list",
1551
+ inputs: {
1552
+ list: { type: "text", default: "" },
1553
+ },
1554
+ outputs: {
1555
+ tree: "string",
1556
+ },
1557
+ impl: function (inputs) { return __awaiter(void 0, void 0, void 0, function () {
1558
+ return __generator(this, function (_a) {
1559
+ return [2 /*return*/, {
1560
+ tree: mapTreeBranch(inputs.list || {}, function (branch) {
1561
+ if (!branch || branch.length === 0)
1562
+ return DISCARD;
1563
+ var allLines = branch.flatMap(function (text) { return text.split("\n"); });
1564
+ if (allLines.every(function (line) { return isBoolStr(line); })) {
1565
+ allLines = allLines.map(function (line) { return line.toLowerCase() === "true"; });
1566
+ }
1567
+ else if (allLines.every(function (line) { return isNumStr(line); })) {
1568
+ allLines = allLines.map(function (line) { return Number(line); });
1569
+ }
1570
+ return allLines;
1571
+ }),
1572
+ }];
1573
+ });
1574
+ }); },
1575
+ };
1576
+
1522
1577
  var _a$5;
1523
1578
  var primitives$5 = (_a$5 = {},
1524
- _a$5[splitGroup.name] = splitGroup,
1525
- _a$5[mergeGroup.name] = mergeGroup,
1526
1579
  _a$5[listItem.name] = listItem,
1527
1580
  _a$5[listLength.name] = listLength,
1528
1581
  _a$5[filterList.name] = filterList,
1529
- // [shiftList.name]: shiftList,
1530
1582
  _a$5[relativeItem.name] = relativeItem,
1531
1583
  _a$5[relativeItems.name] = relativeItems,
1532
- _a$5[cartesianGroups.name] = cartesianGroups,
1533
1584
  _a$5[concat.name] = concat,
1585
+ _a$5[listInput.name] = listInput,
1534
1586
  _a$5);
1535
1587
 
1536
- var series = {
1537
- name: "series",
1538
- label: "Series",
1539
- description: "Create a series of numbers.",
1588
+ var splitGroup = {
1589
+ name: "splitGroup",
1590
+ label: "Split Group",
1591
+ description: "Splits every item of a group into its own group",
1540
1592
  inputs: {
1541
- start: { type: "number", default: 0 },
1542
- step: { type: "number", default: 1 },
1543
- count: { type: "number", default: 10 },
1593
+ tree: "any",
1544
1594
  },
1545
1595
  outputs: {
1546
- series: "number",
1596
+ tree: "any", // Return the grafted nodes
1547
1597
  },
1548
1598
  impl: function (inputs) { return __awaiter(void 0, void 0, void 0, function () {
1549
1599
  return __generator(this, function (_a) {
1550
1600
  return [2 /*return*/, {
1551
- series: nAryOnTreeBranch([
1552
- graftTree(inputs.start),
1553
- graftTree(inputs.step),
1554
- graftTree(inputs.count),
1555
- ], function (_a) {
1556
- var _b = __read(_a, 3), _c = _b[0], starts = _c === void 0 ? [] : _c, _d = _b[1], steps = _d === void 0 ? [] : _d, _e = _b[2], counts = _e === void 0 ? [] : _e;
1557
- var start = starts[0];
1558
- var step = steps[0];
1559
- var count = counts[0];
1560
- var series = [];
1561
- for (var i = 0; i < count; i++) {
1562
- series.push(start + i * step);
1563
- }
1564
- return series;
1565
- }),
1601
+ tree: graftTree(inputs.tree || {}),
1566
1602
  }];
1567
1603
  });
1568
1604
  }); },
1569
1605
  };
1570
1606
 
1571
- var _a$4;
1572
- var primitives$4 = (_a$4 = {},
1573
- _a$4[series.name] = series,
1574
- _a$4);
1607
+ var mergeGroup = {
1608
+ name: "mergeGroup",
1609
+ label: "Merge Group",
1610
+ description: "Merge the deepest groups into their parent.",
1611
+ inputs: {
1612
+ tree: "any",
1613
+ },
1614
+ params: {
1615
+ depth: { type: "number", default: 1 }, // Optional depth to trim the tree
1616
+ },
1617
+ outputs: {
1618
+ tree: "any", // Return the trimed nodes
1619
+ },
1620
+ impl: function (inputs, params) { return __awaiter(void 0, void 0, void 0, function () {
1621
+ var depth;
1622
+ var _a;
1623
+ return __generator(this, function (_b) {
1624
+ depth = (_a = params.depth) !== null && _a !== void 0 ? _a : 1;
1625
+ return [2 /*return*/, {
1626
+ tree: trimTree(inputs.tree, depth),
1627
+ }];
1628
+ });
1629
+ }); },
1630
+ };
1631
+
1632
+ var cartesianGroups = {
1633
+ name: "cartesianGroups",
1634
+ label: "Cartesian Groups",
1635
+ description: "Duplicate groups such that all pairings are created.",
1636
+ inputs: {
1637
+ treeA: "any",
1638
+ treeB: "any",
1639
+ },
1640
+ params: {},
1641
+ outputs: {
1642
+ treeA: "any",
1643
+ treeB: "any",
1644
+ },
1645
+ impl: function (inputs, params) { return __awaiter(void 0, void 0, void 0, function () {
1646
+ var pathsA, pathsB, treeA, treeB;
1647
+ return __generator(this, function (_a) {
1648
+ if (!inputs.treeA || !inputs.treeB) {
1649
+ return [2 /*return*/, {}];
1650
+ }
1651
+ pathsA = getPaths(inputs.treeA);
1652
+ pathsB = getPaths(inputs.treeB);
1653
+ treeA = {};
1654
+ treeB = {};
1655
+ pathsB.forEach(function (pathB, ib) {
1656
+ pathsA.forEach(function (pathA, ia) {
1657
+ var pa = "".concat(ib, ";").concat(pathA);
1658
+ treeA[pa] = inputs.treeA[pathA];
1659
+ var pb = "".concat(pathB, ";").concat(ia);
1660
+ treeB[pb] = inputs.treeB[pathB];
1661
+ });
1662
+ });
1663
+ return [2 /*return*/, {
1664
+ treeA: treeA,
1665
+ treeB: treeB,
1666
+ }];
1667
+ });
1668
+ }); },
1669
+ };
1575
1670
 
1576
1671
  var mergeTree = {
1577
1672
  name: "mergeTree",
@@ -1604,7 +1699,7 @@ var mergeTree = {
1604
1699
 
1605
1700
  var simplifyTree = {
1606
1701
  name: "simplifyTree",
1607
- label: "Simplify Tree",
1702
+ label: "Simplify Groups",
1608
1703
  description: "Simplify a tree by removing redundant groups.",
1609
1704
  inputs: {
1610
1705
  tree: "any",
@@ -1624,10 +1719,78 @@ var simplifyTree = {
1624
1719
  }); },
1625
1720
  };
1626
1721
 
1722
+ var groupAll = {
1723
+ name: "groupAll",
1724
+ label: "Group All",
1725
+ description: "Adds a group around all groups in the input tree",
1726
+ inputs: {
1727
+ tree: "any",
1728
+ },
1729
+ outputs: {
1730
+ tree: "any",
1731
+ },
1732
+ impl: function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
1733
+ var paths, newPaths, newTree;
1734
+ var _c = _b.tree, tree = _c === void 0 ? {} : _c;
1735
+ return __generator(this, function (_d) {
1736
+ paths = getPaths(tree);
1737
+ newPaths = paths.map(function (p) { return "0;".concat(p); });
1738
+ newTree = Object.fromEntries(newPaths.map(function (p, i) { return [p, tree[paths[i]]]; }));
1739
+ return [2 /*return*/, {
1740
+ tree: newTree,
1741
+ }];
1742
+ });
1743
+ }); },
1744
+ };
1745
+
1746
+ var _a$4;
1747
+ var primitives$4 = (_a$4 = {},
1748
+ _a$4[splitGroup.name] = splitGroup,
1749
+ _a$4[mergeGroup.name] = mergeGroup,
1750
+ _a$4[groupAll.name] = groupAll,
1751
+ _a$4[simplifyTree.name] = simplifyTree,
1752
+ _a$4[cartesianGroups.name] = cartesianGroups,
1753
+ _a$4[mergeTree.name] = mergeTree,
1754
+ _a$4);
1755
+
1756
+ var series = {
1757
+ name: "series",
1758
+ label: "Series",
1759
+ description: "Create a series of numbers.",
1760
+ inputs: {
1761
+ start: { type: "number", default: 0 },
1762
+ step: { type: "number", default: 1 },
1763
+ count: { type: "number", default: 10 },
1764
+ },
1765
+ outputs: {
1766
+ series: "number",
1767
+ },
1768
+ impl: function (inputs) { return __awaiter(void 0, void 0, void 0, function () {
1769
+ return __generator(this, function (_a) {
1770
+ return [2 /*return*/, {
1771
+ series: nAryOnTreeBranch([
1772
+ graftTree(inputs.start),
1773
+ graftTree(inputs.step),
1774
+ graftTree(inputs.count),
1775
+ ], function (_a) {
1776
+ var _b = __read(_a, 3), _c = _b[0], starts = _c === void 0 ? [] : _c, _d = _b[1], steps = _d === void 0 ? [] : _d, _e = _b[2], counts = _e === void 0 ? [] : _e;
1777
+ var start = starts[0];
1778
+ var step = steps[0];
1779
+ var count = counts[0];
1780
+ var series = [];
1781
+ for (var i = 0; i < count; i++) {
1782
+ series.push(start + i * step);
1783
+ }
1784
+ return series;
1785
+ }),
1786
+ }];
1787
+ });
1788
+ }); },
1789
+ };
1790
+
1627
1791
  var _a$3;
1628
1792
  var primitives$3 = (_a$3 = {},
1629
- _a$3[mergeTree.name] = mergeTree,
1630
- _a$3[simplifyTree.name] = simplifyTree,
1793
+ _a$3[series.name] = series,
1631
1794
  _a$3);
1632
1795
 
1633
1796
  var groupAnd = {
@@ -1712,8 +1875,8 @@ var primitives$1 = (_a$1 = {},
1712
1875
  _a$1[output.name] = output,
1713
1876
  _a$1);
1714
1877
 
1715
- var Lib = { Util: primitives$7, Math: primitives$6, List: primitives$5, Sequence: primitives$4, Tree: primitives$3, Logic: primitives$2, IO: primitives$1 };
1716
- var primitives = __assign(__assign(__assign(__assign(__assign(__assign(__assign({}, primitives$1), primitives$7), primitives$6), primitives$5), primitives$4), primitives$3), primitives$2);
1878
+ var Lib = { Util: primitives$8, Math: primitives$7, String: primitives$6, List: primitives$5, Group: primitives$4, Sequence: primitives$3, Logic: primitives$2, IO: primitives$1 };
1879
+ var primitives = __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, primitives$1), primitives$8), primitives$7), primitives$6), primitives$5), primitives$4), primitives$3), primitives$2);
1717
1880
 
1718
1881
  function isPrimitive(node) {
1719
1882
  return node.impl !== undefined;
@@ -4996,7 +5159,25 @@ var InputString = React.memo(function (_a) {
4996
5159
  setInner(value);
4997
5160
  }
4998
5161
  }, [inner, value, onChange]);
4999
- return (React.createElement("input", { type: "text", value: inner, onChange: function (e) { return setInner(e.target.value); }, onBlur: handleBlur, onKeyDown: handleKey }));
5162
+ return (React.createElement("input", { type: "text", value: inner, onChange: function (e) { return setInner(e.target.value); }, onBlur: handleBlur, onKeyDown: handleKey, onMouseDown: function (e) { return e.stopPropagation(); } }));
5163
+ });
5164
+ var InputText = React.memo(function (_a) {
5165
+ var value = _a.value, onChange = _a.onChange;
5166
+ var _b = __read(useInner(value), 2), inner = _b[0], setInner = _b[1];
5167
+ var handleBlur = React.useCallback(function () {
5168
+ if (inner !== value) {
5169
+ onChange === null || onChange === void 0 ? void 0 : onChange(inner);
5170
+ }
5171
+ }, [inner, value, onChange]);
5172
+ var handleKey = React.useCallback(function (e) {
5173
+ if (e.key === "Enter" && inner !== value) {
5174
+ onChange === null || onChange === void 0 ? void 0 : onChange(inner);
5175
+ }
5176
+ if (e.key === "Escape") {
5177
+ setInner(value);
5178
+ }
5179
+ }, [inner, value, onChange]);
5180
+ return (React.createElement("textarea", { value: inner, onChange: function (e) { return setInner(e.target.value); }, onBlur: handleBlur, onKeyDown: handleKey, onMouseDown: function (e) { return e.stopPropagation(); }, rows: 4 }));
5000
5181
  });
5001
5182
  function Control(_a) {
5002
5183
  var value = _a.value, vardef = _a.vardef, onChange = _a.onChange;
@@ -5011,8 +5192,10 @@ function Control(_a) {
5011
5192
  switch (vardef.type) {
5012
5193
  case "string":
5013
5194
  return React.createElement(InputString, { value: value !== null && value !== void 0 ? value : "", onChange: onChange });
5195
+ case "text":
5196
+ return React.createElement(InputText, { value: value !== null && value !== void 0 ? value : "", onChange: onChange });
5014
5197
  case "number":
5015
- return (React.createElement(InputNumber, { value: Number(value) || 0, onChange: onChange, step: vardef.step, min: vardef.min, max: vardef.max, inputMode: "numeric" }));
5198
+ return (React.createElement(InputNumber, { value: Number(value) || 0, onChange: onChange, step: vardef.step, min: vardef.min, max: vardef.max, inputMode: "numeric", onMouseDown: function (e) { return e.stopPropagation(); } }));
5016
5199
  case "boolean":
5017
5200
  return (React.createElement("input", { type: "checkbox", checked: Boolean(value), onChange: function (e) { return onChange === null || onChange === void 0 ? void 0 : onChange(e.target.checked); } }));
5018
5201
  default: