cubing 0.26.7 → 0.28.1

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.
Files changed (107) hide show
  1. package/README.md +3 -1
  2. package/dist/esm/alg/index.js +7 -11
  3. package/dist/esm/bluetooth/index.js +15 -16
  4. package/dist/esm/bluetooth/index.js.map +2 -2
  5. package/dist/esm/{chunk-J4SZZ5OP.js → chunk-32FWPPTW.js} +3 -3
  6. package/dist/esm/chunk-32FWPPTW.js.map +7 -0
  7. package/dist/esm/{chunk-YEXEZWAK.js → chunk-67VJZGH2.js} +3 -3
  8. package/dist/esm/{chunk-YEXEZWAK.js.map → chunk-67VJZGH2.js.map} +1 -1
  9. package/dist/esm/{chunk-ITRA3DUQ.js → chunk-7D7LW3WQ.js} +2 -2
  10. package/dist/esm/{chunk-ITRA3DUQ.js.map → chunk-7D7LW3WQ.js.map} +1 -1
  11. package/dist/esm/{chunk-GBMX6FHY.js → chunk-ALBEW4DJ.js} +1 -1
  12. package/dist/esm/{chunk-GBMX6FHY.js.map → chunk-ALBEW4DJ.js.map} +1 -1
  13. package/dist/esm/{chunk-FCB447RN.js → chunk-CSBUJ64Q.js} +197 -128
  14. package/dist/esm/chunk-CSBUJ64Q.js.map +7 -0
  15. package/dist/esm/{chunk-WQK6XWML.js → chunk-F4WWCPVE.js} +2 -2
  16. package/dist/esm/{chunk-WQK6XWML.js.map → chunk-F4WWCPVE.js.map} +1 -1
  17. package/dist/esm/{chunk-YBDBUTYE.js → chunk-GVPTO3OF.js} +1 -1
  18. package/dist/esm/{chunk-YBDBUTYE.js.map → chunk-GVPTO3OF.js.map} +1 -1
  19. package/dist/esm/chunk-LSVR2HCG.js +1111 -0
  20. package/dist/esm/chunk-LSVR2HCG.js.map +7 -0
  21. package/dist/esm/{chunk-KSNW26OV.js → chunk-MWKALF6W.js} +7 -7
  22. package/dist/esm/{chunk-KSNW26OV.js.map → chunk-MWKALF6W.js.map} +1 -1
  23. package/dist/esm/{chunk-GLII3KIK.js → chunk-NPHUBFZ6.js} +6 -6
  24. package/dist/esm/chunk-NPHUBFZ6.js.map +7 -0
  25. package/dist/esm/{chunk-BEXHMXCT.js → chunk-RHC3DIN3.js} +1 -1
  26. package/dist/esm/{chunk-BEXHMXCT.js.map → chunk-RHC3DIN3.js.map} +1 -1
  27. package/dist/esm/{chunk-NYAPGKCW.js → chunk-V55YSWJY.js} +1 -1
  28. package/dist/esm/{chunk-NYAPGKCW.js.map → chunk-V55YSWJY.js.map} +1 -1
  29. package/dist/esm/{chunk-P637ZWHR.js → chunk-WAL36PO3.js} +7 -7
  30. package/dist/esm/{chunk-P637ZWHR.js.map → chunk-WAL36PO3.js.map} +1 -1
  31. package/dist/esm/{chunk-ASOUBXFO.js → chunk-YSVFZVG4.js} +14 -14
  32. package/dist/esm/chunk-YSVFZVG4.js.map +7 -0
  33. package/dist/esm/{chunk-QK4WH7WZ.js → chunk-ZY3RTFFS.js} +5 -5
  34. package/dist/esm/chunk-ZY3RTFFS.js.map +7 -0
  35. package/dist/esm/kpuzzle/index.js +2 -2
  36. package/dist/esm/notation/index.js +2 -2
  37. package/dist/esm/protocol/index.js +8 -8
  38. package/dist/esm/puzzle-geometry/index.js +4369 -14
  39. package/dist/esm/puzzle-geometry/index.js.map +3 -3
  40. package/dist/esm/puzzles/index.js +4 -4
  41. package/dist/esm/{puzzles-dynamic-side-events-HOXBZYWI.js → puzzles-dynamic-side-events-WZI4Y3N6.js} +1 -1
  42. package/dist/esm/{puzzles-dynamic-side-events-HOXBZYWI.js.map → puzzles-dynamic-side-events-WZI4Y3N6.js.map} +1 -1
  43. package/dist/esm/{puzzles-dynamic-unofficial-MGVOFUDR.js → puzzles-dynamic-unofficial-FUG3JBMH.js} +1 -1
  44. package/dist/esm/{puzzles-dynamic-unofficial-MGVOFUDR.js.map → puzzles-dynamic-unofficial-FUG3JBMH.js.map} +1 -1
  45. package/dist/esm/scramble/index.js +5 -5
  46. package/dist/esm/search/index.js +10 -10
  47. package/dist/esm/{search-dynamic-sgs-side-events-OUCE5RN6.js → search-dynamic-sgs-side-events-R3HDJ5XQ.js} +10 -12
  48. package/dist/esm/search-dynamic-sgs-side-events-R3HDJ5XQ.js.map +7 -0
  49. package/dist/esm/{search-dynamic-sgs-unofficial-KS2IT3DM.js → search-dynamic-sgs-unofficial-FQNKGHVO.js} +7 -7
  50. package/dist/esm/{search-dynamic-sgs-unofficial-KS2IT3DM.js.map → search-dynamic-sgs-unofficial-FQNKGHVO.js.map} +1 -1
  51. package/dist/esm/{search-dynamic-solve-3x3x3-K4TG7P3X.js → search-dynamic-solve-3x3x3-K42IWMQV.js} +1 -1
  52. package/dist/esm/{search-dynamic-solve-3x3x3-K4TG7P3X.js.map → search-dynamic-solve-3x3x3-K42IWMQV.js.map} +1 -1
  53. package/dist/esm/{search-dynamic-solve-4x4x4-6IIZNXXP.js → search-dynamic-solve-4x4x4-XRV4NBMQ.js} +8 -8
  54. package/dist/esm/{search-dynamic-solve-4x4x4-6IIZNXXP.js.map → search-dynamic-solve-4x4x4-XRV4NBMQ.js.map} +1 -1
  55. package/dist/esm/{search-dynamic-solve-fto-WROONLZS.js → search-dynamic-solve-fto-O6UXF7EC.js} +2 -2
  56. package/dist/esm/{search-dynamic-solve-fto-WROONLZS.js.map → search-dynamic-solve-fto-O6UXF7EC.js.map} +1 -1
  57. package/dist/esm/{search-dynamic-solve-kilominx-UEFJENHO.js → search-dynamic-solve-kilominx-G4MLGWNS.js} +3 -3
  58. package/dist/esm/{search-dynamic-solve-kilominx-UEFJENHO.js.map → search-dynamic-solve-kilominx-G4MLGWNS.js.map} +1 -1
  59. package/dist/esm/{search-dynamic-solve-master_tetraminx-3R2CJUKW.js → search-dynamic-solve-master_tetraminx-3RKD3IAN.js} +2 -2
  60. package/dist/esm/{search-dynamic-solve-master_tetraminx-3R2CJUKW.js.map → search-dynamic-solve-master_tetraminx-3RKD3IAN.js.map} +1 -1
  61. package/dist/esm/{search-dynamic-solve-sq1-RS5HN6AH.js → search-dynamic-solve-sq1-WIJEGVLP.js} +2 -2
  62. package/dist/esm/{search-dynamic-solve-sq1-RS5HN6AH.js.map → search-dynamic-solve-sq1-WIJEGVLP.js.map} +1 -1
  63. package/dist/esm/search-worker-inside-generated-string-IZCKWXUA.js +3768 -0
  64. package/dist/esm/search-worker-inside-generated-string-IZCKWXUA.js.map +7 -0
  65. package/dist/esm/{search-worker-js-entry-4A3O552B.js → search-worker-js-entry-WBEKNBB7.js} +21 -21
  66. package/dist/esm/search-worker-js-entry-WBEKNBB7.js.map +7 -0
  67. package/dist/esm/{search-worker-ts-entry-NUFPSU6U.js → search-worker-ts-entry-XQWMEOC4.js} +5 -5
  68. package/dist/esm/{search-worker-ts-entry-NUFPSU6U.js.map → search-worker-ts-entry-XQWMEOC4.js.map} +1 -1
  69. package/dist/esm/stream/index.js +4 -4
  70. package/dist/esm/stream/index.js.map +1 -1
  71. package/dist/esm/twisty/index.js +95 -813
  72. package/dist/esm/twisty/index.js.map +3 -3
  73. package/dist/esm/{twisty-dynamic-3d-YI5E4NWB.js → twisty-dynamic-3d-QOX7IEXC.js} +52 -17
  74. package/dist/esm/twisty-dynamic-3d-QOX7IEXC.js.map +7 -0
  75. package/dist/types/{Alg-5cf4b166.d.ts → Alg-e2a80975.d.ts} +66 -53
  76. package/dist/types/{KState-836cc3c7.d.ts → KState-a2f0e651.d.ts} +2 -1
  77. package/dist/types/{TwizzleLink-4f0a162d.d.ts → TwizzleLink-dcf51446.d.ts} +20 -16
  78. package/dist/types/alg/index.d.ts +16 -7
  79. package/dist/types/bluetooth/index.d.ts +17 -7
  80. package/dist/types/{bluetooth-puzzle-b1d62cb5.d.ts → bluetooth-puzzle-3670a6a1.d.ts} +6 -9
  81. package/dist/types/kpuzzle/index.d.ts +2 -2
  82. package/dist/types/notation/index.d.ts +1 -1
  83. package/dist/types/{outside-a6c8f46b.d.ts → outside-0ce1b145.d.ts} +2 -2
  84. package/dist/types/parseAlg-db0dec6c.d.ts +9 -0
  85. package/dist/types/protocol/index.d.ts +7 -3
  86. package/dist/types/puzzle-geometry/index.d.ts +3 -3
  87. package/dist/types/puzzles/index.d.ts +10 -5
  88. package/dist/types/scramble/index.d.ts +3 -3
  89. package/dist/types/search/index.d.ts +3 -3
  90. package/dist/types/stream/index.d.ts +4 -4
  91. package/dist/types/twisty/index.d.ts +13 -6
  92. package/package.json +29 -26
  93. package/dist/esm/chunk-ASOUBXFO.js.map +0 -7
  94. package/dist/esm/chunk-FCB447RN.js.map +0 -7
  95. package/dist/esm/chunk-GLII3KIK.js.map +0 -7
  96. package/dist/esm/chunk-J4SZZ5OP.js.map +0 -7
  97. package/dist/esm/chunk-KT3AIQTR.js +0 -4386
  98. package/dist/esm/chunk-KT3AIQTR.js.map +0 -7
  99. package/dist/esm/chunk-LKISJU2L.js +0 -339
  100. package/dist/esm/chunk-LKISJU2L.js.map +0 -7
  101. package/dist/esm/chunk-QK4WH7WZ.js.map +0 -7
  102. package/dist/esm/search-dynamic-sgs-side-events-OUCE5RN6.js.map +0 -7
  103. package/dist/esm/search-worker-inside-generated-string-GNBQVERX.js +0 -3768
  104. package/dist/esm/search-worker-inside-generated-string-GNBQVERX.js.map +0 -7
  105. package/dist/esm/search-worker-js-entry-4A3O552B.js.map +0 -7
  106. package/dist/esm/twisty-dynamic-3d-YI5E4NWB.js.map +0 -7
  107. package/dist/types/parse-9db7ee51.d.ts +0 -9
@@ -33,11 +33,6 @@ var AlgCommon = class extends Comparable {
33
33
  };
34
34
 
35
35
  // src/cubing/alg/iteration.ts
36
- var IterationDirection = /* @__PURE__ */ ((IterationDirection3) => {
37
- IterationDirection3[IterationDirection3["Forwards"] = 1] = "Forwards";
38
- IterationDirection3[IterationDirection3["Backwards"] = -1] = "Backwards";
39
- return IterationDirection3;
40
- })(IterationDirection || {});
41
36
  function toggleDirection(iterationDirection, flip = true) {
42
37
  if (!flip) {
43
38
  return iterationDirection;
@@ -70,32 +65,42 @@ var MAX_INT_DESCRIPTION = "2^31 - 1";
70
65
  var MIN_INT = -2147483648;
71
66
 
72
67
  // src/cubing/alg/AlgBuilder.ts
73
- var _units;
68
+ var _algNode;
74
69
  var AlgBuilder = class {
75
70
  constructor() {
76
- __privateAdd(this, _units, []);
71
+ __privateAdd(this, _algNode, []);
77
72
  }
78
73
  push(u) {
79
- __privateGet(this, _units).push(u);
74
+ __privateGet(this, _algNode).push(u);
80
75
  }
81
76
  experimentalPushAlg(alg) {
82
- for (const u of alg.units()) {
77
+ for (const u of alg.childAlgNodes()) {
83
78
  this.push(u);
84
79
  }
85
80
  }
86
- experimentalNumUnits() {
87
- return __privateGet(this, _units).length;
81
+ experimentalNumAlgNodes() {
82
+ return __privateGet(this, _algNode).length;
88
83
  }
89
84
  toAlg() {
90
- return new Alg(__privateGet(this, _units));
85
+ return new Alg(__privateGet(this, _algNode));
91
86
  }
92
87
  reset() {
93
- __privateSet(this, _units, []);
88
+ __privateSet(this, _algNode, []);
94
89
  }
95
90
  };
96
- _units = new WeakMap();
91
+ _algNode = new WeakMap();
92
+
93
+ // src/cubing/alg/debug.ts
94
+ var algDebugGlobals = {
95
+ caratNISSNotationEnabled: false
96
+ };
97
+ function setAlgDebug(options) {
98
+ if ("caratNISSNotationEnabled" in options) {
99
+ algDebugGlobals.caratNISSNotationEnabled = !!options.caratNISSNotationEnabled;
100
+ }
101
+ }
97
102
 
98
- // src/cubing/alg/units/containers/Commutator.ts
103
+ // src/cubing/alg/alg-nodes/containers/Commutator.ts
99
104
  var _A, _B;
100
105
  var _Commutator = class extends AlgCommon {
101
106
  constructor(aSource, bSource) {
@@ -144,7 +149,7 @@ var Commutator = _Commutator;
144
149
  _A = new WeakMap();
145
150
  _B = new WeakMap();
146
151
 
147
- // src/cubing/alg/units/containers/Conjugate.ts
152
+ // src/cubing/alg/alg-nodes/containers/Conjugate.ts
148
153
  var _A2, _B2;
149
154
  var _Conjugate = class extends AlgCommon {
150
155
  constructor(aSource, bSource) {
@@ -185,7 +190,7 @@ var Conjugate = _Conjugate;
185
190
  _A2 = new WeakMap();
186
191
  _B2 = new WeakMap();
187
192
 
188
- // src/cubing/alg/units/leaves/LineComment.ts
193
+ // src/cubing/alg/alg-nodes/leaves/LineComment.ts
189
194
  var _text;
190
195
  var _LineComment = class extends AlgCommon {
191
196
  constructor(commentText) {
@@ -216,7 +221,7 @@ var _LineComment = class extends AlgCommon {
216
221
  var LineComment = _LineComment;
217
222
  _text = new WeakMap();
218
223
 
219
- // src/cubing/alg/units/leaves/Newline.ts
224
+ // src/cubing/alg/alg-nodes/leaves/Newline.ts
220
225
  var Newline = class extends AlgCommon {
221
226
  toString() {
222
227
  return `
@@ -233,7 +238,7 @@ var Newline = class extends AlgCommon {
233
238
  }
234
239
  };
235
240
 
236
- // src/cubing/alg/units/leaves/Pause.ts
241
+ // src/cubing/alg/alg-nodes/leaves/Pause.ts
237
242
  var Pause = class extends AlgCommon {
238
243
  toString() {
239
244
  return `.`;
@@ -249,16 +254,16 @@ var Pause = class extends AlgCommon {
249
254
  }
250
255
  };
251
256
 
252
- // src/cubing/alg/parse.ts
257
+ // src/cubing/alg/parseAlg.ts
253
258
  function parseIntWithEmptyFallback(n, emptyFallback) {
254
259
  return n ? parseInt(n) : emptyFallback;
255
260
  }
256
- var amountRegex = /^(\d+)?('?)/;
257
- var moveStartRegex = /^[_\dA-Za-z]/;
258
- var quantumMoveRegex = /^((([1-9]\d*)-)?([1-9]\d*))?([_A-Za-z]+)?/;
259
- var commentTextRegex = /^[^\n]*/;
260
- var square1PairStart = /^(-?\d+), ?/;
261
- var square1PairEnd = /^(-?\d+)\)/;
261
+ var AMOUNT_REGEX = /^(\d+)?('?)/;
262
+ var MOVE_START_REGEX = /^[_\dA-Za-z]/;
263
+ var QUANTUM_MOVE_REGEX = /^((([1-9]\d*)-)?([1-9]\d*))?([_A-Za-z]+)?/;
264
+ var COMMENT_TEXT_REGEX = /^[^\n]*/;
265
+ var SQUARE1_PAIR_START_REGEX = /^(-?\d+), ?/;
266
+ var SQUARE1_PAIR_END_REGEX = /^(-?\d+)\)/;
262
267
  function parseAlg(s) {
263
268
  return new AlgParser().parseAlg(s);
264
269
  }
@@ -283,18 +288,28 @@ function transferCharIndex(from, to) {
283
288
  }
284
289
  return to;
285
290
  }
286
- var _input, _idx;
291
+ var _input, _idx, _nissQueue;
287
292
  var AlgParser = class {
288
293
  constructor() {
289
294
  __privateAdd(this, _input, "");
290
295
  __privateAdd(this, _idx, 0);
296
+ __privateAdd(this, _nissQueue, []);
291
297
  }
292
298
  parseAlg(input) {
293
299
  __privateSet(this, _input, input);
294
300
  __privateSet(this, _idx, 0);
295
301
  const alg = this.parseAlgWithStopping([]);
296
302
  this.mustBeAtEndOfInput();
297
- return alg;
303
+ const algNodes = Array.from(alg.childAlgNodes());
304
+ if (__privateGet(this, _nissQueue).length > 0) {
305
+ for (const nissGrouping of __privateGet(this, _nissQueue).reverse()) {
306
+ algNodes.push(nissGrouping);
307
+ }
308
+ }
309
+ const newAlg = new Alg(algNodes);
310
+ const { startCharIndex, endCharIndex } = alg;
311
+ addCharIndices(newAlg, startCharIndex, endCharIndex);
312
+ return newAlg;
298
313
  }
299
314
  parseMove(input) {
300
315
  __privateSet(this, _input, input);
@@ -333,11 +348,11 @@ var AlgParser = class {
333
348
  }
334
349
  if (this.tryConsumeNext(" ")) {
335
350
  crowded = false;
336
- if (algBuilder.experimentalNumUnits() === 0) {
351
+ if (algBuilder.experimentalNumAlgNodes() === 0) {
337
352
  algStartIdx = __privateGet(this, _idx);
338
353
  }
339
354
  continue mainLoop;
340
- } else if (moveStartRegex.test(__privateGet(this, _input)[__privateGet(this, _idx)])) {
355
+ } else if (MOVE_START_REGEX.test(__privateGet(this, _input)[__privateGet(this, _idx)])) {
341
356
  mustNotBeCrowded(savedCharIndex);
342
357
  const move = this.parseMoveImpl();
343
358
  algBuilder.push(move);
@@ -346,11 +361,11 @@ var AlgParser = class {
346
361
  continue mainLoop;
347
362
  } else if (this.tryConsumeNext("(")) {
348
363
  mustNotBeCrowded(savedCharIndex);
349
- const sq1PairStartMatch = this.tryRegex(square1PairStart);
364
+ const sq1PairStartMatch = this.tryRegex(SQUARE1_PAIR_START_REGEX);
350
365
  if (sq1PairStartMatch) {
351
366
  const topAmountString = sq1PairStartMatch[1];
352
367
  const savedCharIndexD = __privateGet(this, _idx);
353
- const sq1PairEndMatch = this.parseRegex(square1PairEnd);
368
+ const sq1PairEndMatch = this.parseRegex(SQUARE1_PAIR_END_REGEX);
354
369
  const uMove = addCharIndices(new Move(new QuantumMove("U_SQ_"), parseInt(topAmountString)), savedCharIndex + 1, savedCharIndex + 1 + topAmountString.length);
355
370
  const dMove = addCharIndices(new Move(new QuantumMove("D_SQ_"), parseInt(sq1PairEndMatch[1])), savedCharIndexD, __privateGet(this, _idx) - 1);
356
371
  const alg = addCharIndices(new Alg([uMove, dMove]), savedCharIndex + 1, __privateGet(this, _idx) - 1);
@@ -367,6 +382,19 @@ var AlgParser = class {
367
382
  algEndIdx = __privateGet(this, _idx);
368
383
  continue mainLoop;
369
384
  }
385
+ } else if (this.tryConsumeNext("^")) {
386
+ if (!algDebugGlobals.caratNISSNotationEnabled) {
387
+ throw new Error("Alg contained a carat but carat NISS notation is not enabled.");
388
+ }
389
+ this.mustConsumeNext("(");
390
+ const alg = this.parseAlgWithStopping([")"]);
391
+ this.popNext();
392
+ const grouping = new Grouping(alg, -1);
393
+ const placeholder = new Pause();
394
+ grouping.experimentalNISSPlaceholder = placeholder;
395
+ placeholder.experimentalNISSGrouping = grouping;
396
+ __privateGet(this, _nissQueue).push(grouping);
397
+ algBuilder.push(placeholder);
370
398
  } else if (this.tryConsumeNext("[")) {
371
399
  mustNotBeCrowded(savedCharIndex);
372
400
  const A = this.parseAlgWithStopping([",", ":"]);
@@ -395,7 +423,7 @@ var AlgParser = class {
395
423
  } else if (this.tryConsumeNext("/")) {
396
424
  if (this.tryConsumeNext("/")) {
397
425
  mustNotBeCrowded(savedCharIndex);
398
- const [text] = this.parseRegex(commentTextRegex);
426
+ const [text] = this.parseRegex(COMMENT_TEXT_REGEX);
399
427
  algBuilder.push(addCharIndices(new LineComment(text), savedCharIndex, __privateGet(this, _idx)));
400
428
  crowded = false;
401
429
  algEndIdx = __privateGet(this, _idx);
@@ -425,7 +453,7 @@ var AlgParser = class {
425
453
  return addCharIndices(algBuilder.toAlg(), algStartIdx, algEndIdx);
426
454
  }
427
455
  parseQuantumMoveImpl() {
428
- const [, , , outerLayerStr, innerLayerStr, family] = this.parseRegex(quantumMoveRegex);
456
+ const [, , , outerLayerStr, innerLayerStr, family] = this.parseRegex(QUANTUM_MOVE_REGEX);
429
457
  return new QuantumMove(family, parseIntWithEmptyFallback(innerLayerStr, void 0), parseIntWithEmptyFallback(outerLayerStr, void 0));
430
458
  }
431
459
  parseMoveImpl() {
@@ -481,7 +509,7 @@ var AlgParser = class {
481
509
  }
482
510
  parseAmountAndTrackEmptyAbsAmount() {
483
511
  const savedIdx = __privateGet(this, _idx);
484
- const [, absAmountStr, primeStr] = this.parseRegex(amountRegex);
512
+ const [, absAmountStr, primeStr] = this.parseRegex(AMOUNT_REGEX);
485
513
  if (absAmountStr?.startsWith("0") && absAmountStr !== "0") {
486
514
  throw new Error(`Error at char index ${savedIdx}: An amount can only start with 0 if it's exactly the digit 0.`);
487
515
  }
@@ -492,7 +520,7 @@ var AlgParser = class {
492
520
  }
493
521
  parseAmount() {
494
522
  const savedIdx = __privateGet(this, _idx);
495
- const [, absAmountStr, primeStr] = this.parseRegex(amountRegex);
523
+ const [, absAmountStr, primeStr] = this.parseRegex(AMOUNT_REGEX);
496
524
  if (absAmountStr?.startsWith("0") && absAmountStr !== "0") {
497
525
  throw new Error(`Error at char index ${savedIdx}: An amount number can only start with 0 if it's exactly the digit 0.`);
498
526
  }
@@ -539,6 +567,7 @@ var AlgParser = class {
539
567
  };
540
568
  _input = new WeakMap();
541
569
  _idx = new WeakMap();
570
+ _nissQueue = new WeakMap();
542
571
 
543
572
  // src/cubing/alg/warnOnce.ts
544
573
  var warned = /* @__PURE__ */ new Set();
@@ -549,13 +578,13 @@ function warnOnce(s) {
549
578
  }
550
579
  }
551
580
 
552
- // src/cubing/alg/units/QuantumWithAmount.ts
581
+ // src/cubing/alg/alg-nodes/QuantumWithAmount.ts
553
582
  var QuantumWithAmount = class {
554
583
  constructor(quantum, amount = 1) {
555
584
  this.quantum = quantum;
556
585
  this.amount = amount;
557
586
  if (!Number.isInteger(this.amount) || this.amount < MIN_INT || this.amount > MAX_INT) {
558
- throw new Error(`Unit amount absolute value must be a non-negative integer from ${MAX_INT_DESCRIPTION} to ${MAX_INT_DESCRIPTION}.`);
587
+ throw new Error(`AlgNode amount absolute value must be a non-negative integer below ${MAX_INT_DESCRIPTION}.`);
559
588
  }
560
589
  }
561
590
  suffix() {
@@ -581,7 +610,7 @@ var QuantumWithAmount = class {
581
610
  }
582
611
  };
583
612
 
584
- // src/cubing/alg/units/leaves/Move.ts
613
+ // src/cubing/alg/alg-nodes/leaves/Move.ts
585
614
  var _family, _innerLayer, _outerLayer;
586
615
  var _QuantumMove = class extends Comparable {
587
616
  constructor(family, innerLayer, outerLayer) {
@@ -716,7 +745,7 @@ var _Move = class extends AlgCommon {
716
745
  var Move = _Move;
717
746
  _quantumWithAmount = new WeakMap();
718
747
 
719
- // src/cubing/alg/units/containers/Grouping.ts
748
+ // src/cubing/alg/alg-nodes/containers/Grouping.ts
720
749
  var Square1TupleFormatter = class {
721
750
  constructor() {
722
751
  this.quantumU_SQ_ = null;
@@ -733,8 +762,8 @@ var Square1TupleFormatter = class {
733
762
  this.quantumU_SQ_ || (this.quantumU_SQ_ = new QuantumMove("U_SQ_"));
734
763
  this.quantumD_SQ_ || (this.quantumD_SQ_ = new QuantumMove("D_SQ_"));
735
764
  const quantumAlg = grouping.alg;
736
- if (quantumAlg.experimentalNumUnits() === 2) {
737
- const [U, D] = quantumAlg.units();
765
+ if (quantumAlg.experimentalNumChildAlgNodes() === 2) {
766
+ const [U, D] = quantumAlg.childAlgNodes();
738
767
  if (U.as(Move)?.quantum.isIdentical(this.quantumU_SQ_) && D.as(Move)?.quantum.isIdentical(this.quantumD_SQ_)) {
739
768
  if (grouping.amount !== 1) {
740
769
  throw new Error("Square-1 tuples cannot have an amount other than 1.");
@@ -795,66 +824,71 @@ _quantumWithAmount2 = new WeakMap();
795
824
  function experimentalIs(v, c) {
796
825
  return v instanceof c;
797
826
  }
798
- function experimentalIsUnit(v) {
827
+ function experimentalIsAlgNode(v) {
799
828
  return experimentalIs(v, Grouping) || experimentalIs(v, LineComment) || experimentalIs(v, Commutator) || experimentalIs(v, Conjugate) || experimentalIs(v, Move) || experimentalIs(v, Newline) || experimentalIs(v, Pause);
800
829
  }
801
830
 
802
831
  // src/cubing/alg/traversal.ts
803
- function dispatch(t, unit, dataDown) {
804
- if (unit.is(Grouping)) {
805
- return t.traverseGrouping(unit, dataDown);
832
+ function dispatch(t, algNode, dataDown) {
833
+ if (algNode.is(Grouping)) {
834
+ return t.traverseGrouping(algNode, dataDown);
806
835
  }
807
- if (unit.is(Move)) {
808
- return t.traverseMove(unit, dataDown);
836
+ if (algNode.is(Move)) {
837
+ return t.traverseMove(algNode, dataDown);
809
838
  }
810
- if (unit.is(Commutator)) {
811
- return t.traverseCommutator(unit, dataDown);
839
+ if (algNode.is(Commutator)) {
840
+ return t.traverseCommutator(algNode, dataDown);
812
841
  }
813
- if (unit.is(Conjugate)) {
814
- return t.traverseConjugate(unit, dataDown);
842
+ if (algNode.is(Conjugate)) {
843
+ return t.traverseConjugate(algNode, dataDown);
815
844
  }
816
- if (unit.is(Pause)) {
817
- return t.traversePause(unit, dataDown);
845
+ if (algNode.is(Pause)) {
846
+ return t.traversePause(algNode, dataDown);
818
847
  }
819
- if (unit.is(Newline)) {
820
- return t.traverseNewline(unit, dataDown);
848
+ if (algNode.is(Newline)) {
849
+ return t.traverseNewline(algNode, dataDown);
821
850
  }
822
- if (unit.is(LineComment)) {
823
- return t.traverseLineComment(unit, dataDown);
851
+ if (algNode.is(LineComment)) {
852
+ return t.traverseLineComment(algNode, dataDown);
824
853
  }
825
- throw new Error(`unknown unit`);
854
+ throw new Error(`unknown AlgNode`);
826
855
  }
827
- function assertIsUnit(t) {
856
+ function mustBeAlgNode(t) {
828
857
  if (t.is(Grouping) || t.is(Move) || t.is(Commutator) || t.is(Conjugate) || t.is(Pause) || t.is(Newline) || t.is(LineComment)) {
829
858
  return t;
830
859
  }
831
- throw new Error("internal error: expected unit");
860
+ throw new Error("internal error: expected AlgNode");
832
861
  }
833
862
  var TraversalDownUp = class {
834
- traverseUnit(unit, dataDown) {
835
- return dispatch(this, unit, dataDown);
863
+ traverseAlgNode(algNode, dataDown) {
864
+ return dispatch(this, algNode, dataDown);
836
865
  }
837
- traverseIntoUnit(unit, dataDown) {
838
- return assertIsUnit(this.traverseUnit(unit, dataDown));
866
+ traverseIntoAlgNode(algNode, dataDown) {
867
+ return mustBeAlgNode(this.traverseAlgNode(algNode, dataDown));
839
868
  }
840
869
  };
841
870
  var TraversalUp = class extends TraversalDownUp {
842
- traverseUnit(unit) {
843
- return dispatch(this, unit, void 0);
871
+ traverseAlgNode(algNode) {
872
+ return dispatch(this, algNode, void 0);
844
873
  }
845
- traverseIntoUnit(unit) {
846
- return assertIsUnit(this.traverseUnit(unit));
874
+ traverseIntoAlgNode(algNode) {
875
+ return mustBeAlgNode(this.traverseAlgNode(algNode));
847
876
  }
848
877
  };
849
- var _newAmount, newAmount_fn;
878
+ var _newPlaceholderAssociationsMap, _newPlaceholderAssociations, newPlaceholderAssociations_fn, _newAmount, newAmount_fn;
850
879
  var _Simplify = class extends TraversalDownUp {
880
+ constructor() {
881
+ super(...arguments);
882
+ __privateAdd(this, _newPlaceholderAssociations);
883
+ __privateAdd(this, _newPlaceholderAssociationsMap, void 0);
884
+ }
851
885
  *traverseAlg(alg, options) {
852
886
  if (options.depth === 0) {
853
- yield* alg.units();
887
+ yield* alg.childAlgNodes();
854
888
  return;
855
889
  }
856
- const newUnits = [];
857
- let lastUnit = null;
890
+ const newAlgNodes = [];
891
+ let lastAlgNode = null;
858
892
  const collapseMoves = options?.collapseMoves ?? true;
859
893
  function appendMoveWithNewAmount(move, deltaAmount) {
860
894
  var _a;
@@ -863,35 +897,35 @@ var _Simplify = class extends TraversalDownUp {
863
897
  return false;
864
898
  }
865
899
  const newMove = new Move(move.quantum, newAmount);
866
- newUnits.push(newMove);
867
- lastUnit = newMove;
900
+ newAlgNodes.push(newMove);
901
+ lastAlgNode = newMove;
868
902
  return true;
869
903
  }
870
- function appendCollapsed(newUnit) {
871
- if (collapseMoves && lastUnit?.is(Move) && newUnit.is(Move) && lastUnit.quantum.isIdentical(newUnit.quantum)) {
872
- newUnits.pop();
873
- if (!appendMoveWithNewAmount(lastUnit, newUnit.amount)) {
874
- lastUnit = newUnits.slice(-1)[0];
904
+ function appendCollapsed(newAlgNode) {
905
+ if (collapseMoves && lastAlgNode?.is(Move) && newAlgNode.is(Move) && lastAlgNode.quantum.isIdentical(newAlgNode.quantum)) {
906
+ newAlgNodes.pop();
907
+ if (!appendMoveWithNewAmount(lastAlgNode, newAlgNode.amount)) {
908
+ lastAlgNode = newAlgNodes.slice(-1)[0];
875
909
  }
876
910
  } else {
877
- if (newUnit.is(Move)) {
878
- appendMoveWithNewAmount(newUnit, 0);
911
+ if (newAlgNode.is(Move)) {
912
+ appendMoveWithNewAmount(newAlgNode, 0);
879
913
  } else {
880
- newUnits.push(newUnit);
881
- lastUnit = newUnit;
914
+ newAlgNodes.push(newAlgNode);
915
+ lastAlgNode = newAlgNode;
882
916
  }
883
917
  }
884
918
  }
885
919
  const newOptions = {
886
920
  depth: options.depth ? options.depth - 1 : null
887
921
  };
888
- for (const unit of alg.units()) {
889
- for (const ancestorUnit of this.traverseUnit(unit, newOptions)) {
890
- appendCollapsed(ancestorUnit);
922
+ for (const algNode of alg.childAlgNodes()) {
923
+ for (const ancestorAlgNode of this.traverseAlgNode(algNode, newOptions)) {
924
+ appendCollapsed(ancestorAlgNode);
891
925
  }
892
926
  }
893
- for (const unit of newUnits) {
894
- yield unit;
927
+ for (const newAlgNode of newAlgNodes) {
928
+ yield newAlgNode;
895
929
  }
896
930
  }
897
931
  *traverseGrouping(grouping, options) {
@@ -902,7 +936,13 @@ var _Simplify = class extends TraversalDownUp {
902
936
  const newOptions = {
903
937
  depth: options.depth ? options.depth - 1 : null
904
938
  };
905
- yield new Grouping(this.traverseAlg(grouping.alg, newOptions));
939
+ const newGrouping = new Grouping(this.traverseAlg(grouping.alg, newOptions), grouping.amount);
940
+ const newPlaceholder = __privateMethod(this, _newPlaceholderAssociations, newPlaceholderAssociations_fn).call(this).get(grouping);
941
+ if (newPlaceholder) {
942
+ newGrouping.experimentalNISSPlaceholder = newPlaceholder;
943
+ newPlaceholder.experimentalNISSGrouping = newGrouping;
944
+ }
945
+ yield newGrouping;
906
946
  }
907
947
  *traverseMove(move, _options) {
908
948
  yield move;
@@ -928,7 +968,13 @@ var _Simplify = class extends TraversalDownUp {
928
968
  yield new Conjugate(this.traverseAlg(conjugate.A, newOptions), this.traverseAlg(conjugate.B, newOptions));
929
969
  }
930
970
  *traversePause(pause, _options) {
931
- yield pause;
971
+ if (pause.experimentalNISSGrouping) {
972
+ const newPause = new Pause();
973
+ __privateMethod(this, _newPlaceholderAssociations, newPlaceholderAssociations_fn).call(this).set(pause.experimentalNISSGrouping, newPause);
974
+ yield newPause;
975
+ } else {
976
+ yield pause;
977
+ }
932
978
  }
933
979
  *traverseNewline(newline, _options) {
934
980
  yield newline;
@@ -938,6 +984,11 @@ var _Simplify = class extends TraversalDownUp {
938
984
  }
939
985
  };
940
986
  var Simplify = _Simplify;
987
+ _newPlaceholderAssociationsMap = new WeakMap();
988
+ _newPlaceholderAssociations = new WeakSet();
989
+ newPlaceholderAssociations_fn = function() {
990
+ return __privateGet(this, _newPlaceholderAssociationsMap) ?? __privateSet(this, _newPlaceholderAssociationsMap, /* @__PURE__ */ new Map());
991
+ };
941
992
  _newAmount = new WeakSet();
942
993
  newAmount_fn = function(move, deltaAmount, options) {
943
994
  let newAmount = move.amount + deltaAmount;
@@ -958,16 +1009,16 @@ function toIterable(input) {
958
1009
  return [];
959
1010
  }
960
1011
  if (experimentalIs(input, Alg)) {
961
- return input.units();
1012
+ return input.childAlgNodes();
962
1013
  }
963
1014
  if (typeof input === "string") {
964
- return parseAlg(input).units();
1015
+ return parseAlg(input).childAlgNodes();
965
1016
  }
966
1017
  const iter = input;
967
1018
  if (typeof iter[Symbol.iterator] === "function") {
968
1019
  return iter;
969
1020
  }
970
- throw new Error("Invalid unit");
1021
+ throw new Error("Invalid AlgNode");
971
1022
  }
972
1023
  function experimentalEnsureAlg(alg) {
973
1024
  if (experimentalIs(alg, Alg)) {
@@ -975,15 +1026,15 @@ function experimentalEnsureAlg(alg) {
975
1026
  }
976
1027
  return new Alg(alg);
977
1028
  }
978
- var _units2;
1029
+ var _algNodes;
979
1030
  var _Alg = class extends AlgCommon {
980
1031
  constructor(alg) {
981
1032
  super();
982
- __privateAdd(this, _units2, void 0);
983
- __privateSet(this, _units2, Array.from(toIterable(alg)));
984
- for (const unit of __privateGet(this, _units2)) {
985
- if (!experimentalIsUnit(unit)) {
986
- throw new Error("An alg can only contain units.");
1033
+ __privateAdd(this, _algNodes, void 0);
1034
+ __privateSet(this, _algNodes, Array.from(toIterable(alg)));
1035
+ for (const algNode of __privateGet(this, _algNodes)) {
1036
+ if (!experimentalIsAlgNode(algNode)) {
1037
+ throw new Error("An alg can only contain alg nodes.");
987
1038
  }
988
1039
  }
989
1040
  }
@@ -992,8 +1043,8 @@ var _Alg = class extends AlgCommon {
992
1043
  if (!other.is(_Alg)) {
993
1044
  return false;
994
1045
  }
995
- const l1 = Array.from(__privateGet(this, _units2));
996
- const l2 = Array.from(__privateGet(otherAsAlg, _units2));
1046
+ const l1 = Array.from(__privateGet(this, _algNodes));
1047
+ const l2 = Array.from(__privateGet(otherAsAlg, _algNodes));
997
1048
  if (l1.length !== l2.length) {
998
1049
  return false;
999
1050
  }
@@ -1005,12 +1056,12 @@ var _Alg = class extends AlgCommon {
1005
1056
  return true;
1006
1057
  }
1007
1058
  invert() {
1008
- return new _Alg(reverse(Array.from(__privateGet(this, _units2)).map((u) => u.invert())));
1059
+ return new _Alg(reverse(Array.from(__privateGet(this, _algNodes)).map((u) => u.invert())));
1009
1060
  }
1010
1061
  *experimentalExpand(iterDir = 1 /* Forwards */, depth) {
1011
1062
  depth ?? (depth = Infinity);
1012
- for (const unit of direct(__privateGet(this, _units2), iterDir)) {
1013
- yield* unit.experimentalExpand(iterDir, depth);
1063
+ for (const algNode of direct(__privateGet(this, _algNodes), iterDir)) {
1064
+ yield* algNode.experimentalExpand(iterDir, depth);
1014
1065
  }
1015
1066
  }
1016
1067
  expand(options) {
@@ -1024,10 +1075,10 @@ var _Alg = class extends AlgCommon {
1024
1075
  }
1025
1076
  }
1026
1077
  concat(input) {
1027
- return new _Alg(Array.from(__privateGet(this, _units2)).concat(Array.from(toIterable(input))));
1078
+ return new _Alg(Array.from(__privateGet(this, _algNodes)).concat(Array.from(toIterable(input))));
1028
1079
  }
1029
1080
  experimentalIsEmpty() {
1030
- for (const _ of __privateGet(this, _units2)) {
1081
+ for (const _ of __privateGet(this, _algNodes)) {
1031
1082
  return false;
1032
1083
  }
1033
1084
  return true;
@@ -1035,13 +1086,19 @@ var _Alg = class extends AlgCommon {
1035
1086
  static fromString(s) {
1036
1087
  return parseAlg(s);
1037
1088
  }
1038
- *units() {
1039
- for (const unit of __privateGet(this, _units2)) {
1040
- yield unit;
1089
+ units() {
1090
+ return this.childAlgNodes();
1091
+ }
1092
+ *childAlgNodes() {
1093
+ for (const algNode of __privateGet(this, _algNodes)) {
1094
+ yield algNode;
1041
1095
  }
1042
1096
  }
1043
1097
  experimentalNumUnits() {
1044
- return Array.from(__privateGet(this, _units2)).length;
1098
+ return this.experimentalNumChildAlgNodes();
1099
+ }
1100
+ experimentalNumChildAlgNodes() {
1101
+ return Array.from(__privateGet(this, _algNodes)).length;
1045
1102
  }
1046
1103
  get type() {
1047
1104
  warnOnce("deprecated: type");
@@ -1049,13 +1106,22 @@ var _Alg = class extends AlgCommon {
1049
1106
  }
1050
1107
  toString() {
1051
1108
  let output = "";
1052
- let previousUnit = null;
1053
- for (const unit of __privateGet(this, _units2)) {
1054
- if (previousUnit) {
1055
- output += spaceBetween(previousUnit, unit);
1109
+ let previousVisibleAlgNode = null;
1110
+ for (const algNode of __privateGet(this, _algNodes)) {
1111
+ if (previousVisibleAlgNode) {
1112
+ output += spaceBetween(previousVisibleAlgNode, algNode);
1056
1113
  }
1057
- output += unit.toString();
1058
- previousUnit = unit;
1114
+ const nissGrouping = algNode.as(Pause)?.experimentalNISSGrouping;
1115
+ if (nissGrouping) {
1116
+ if (nissGrouping.amount !== -1) {
1117
+ throw new Error("Invalid NISS Grouping amount!");
1118
+ }
1119
+ output += `^(${nissGrouping.alg.toString()})`;
1120
+ } else if (algNode.as(Grouping)?.experimentalNISSPlaceholder) {
1121
+ } else {
1122
+ output += algNode.toString();
1123
+ }
1124
+ previousVisibleAlgNode = algNode;
1059
1125
  }
1060
1126
  return output;
1061
1127
  }
@@ -1064,11 +1130,14 @@ var _Alg = class extends AlgCommon {
1064
1130
  }
1065
1131
  };
1066
1132
  var Alg = _Alg;
1067
- _units2 = new WeakMap();
1133
+ _algNodes = new WeakMap();
1068
1134
  function spaceBetween(u1, u2) {
1069
1135
  if (u1.is(Newline) || u2.is(Newline)) {
1070
1136
  return "";
1071
1137
  }
1138
+ if (u2.as(Grouping)?.experimentalNISSPlaceholder) {
1139
+ return "";
1140
+ }
1072
1141
  if (u1.is(LineComment) && !u2.is(Newline)) {
1073
1142
  return "\n";
1074
1143
  }
@@ -1211,7 +1280,7 @@ function serializeURLParam(a) {
1211
1280
  escaped = escaped.replace(/-/g, "&#45;").replace(/'/g, "-");
1212
1281
  return escaped;
1213
1282
  }
1214
- function algCubingNetLink(options) {
1283
+ function experimentalAlgCubingNetLink(options) {
1215
1284
  const url = new URL("https://alg.cubing.net");
1216
1285
  if (!options.alg) {
1217
1286
  throw new Error("An alg parameter is required.");
@@ -1288,10 +1357,10 @@ function algCubingNetLink(options) {
1288
1357
 
1289
1358
  // src/cubing/alg/operation.ts
1290
1359
  function experimentalAppendMove(alg, newMove, options) {
1291
- const oldUnits = Array.from(alg.units());
1292
- const oldLastMove = oldUnits[oldUnits.length - 1];
1360
+ const oldAlgNodes = Array.from(alg.childAlgNodes());
1361
+ const oldLastMove = oldAlgNodes[oldAlgNodes.length - 1];
1293
1362
  if (options?.coalesce && oldLastMove && oldLastMove.quantum && oldLastMove.quantum.isIdentical(newMove.quantum)) {
1294
- const newUnits = oldUnits.slice(0, oldUnits.length - 1);
1363
+ const newAlgNodes = oldAlgNodes.slice(0, oldAlgNodes.length - 1);
1295
1364
  let newAmount = oldLastMove.amount + newMove.amount;
1296
1365
  const mod = options?.mod;
1297
1366
  if (mod) {
@@ -1301,19 +1370,19 @@ function experimentalAppendMove(alg, newMove, options) {
1301
1370
  }
1302
1371
  }
1303
1372
  if (newAmount !== 0) {
1304
- newUnits.push(oldLastMove.modified({ amount: newAmount }));
1373
+ newAlgNodes.push(oldLastMove.modified({ amount: newAmount }));
1305
1374
  }
1306
- return new Alg(newUnits);
1375
+ return new Alg(newAlgNodes);
1307
1376
  } else {
1308
- return new Alg([...oldUnits, newMove]);
1377
+ return new Alg([...oldAlgNodes, newMove]);
1309
1378
  }
1310
1379
  }
1311
1380
 
1312
1381
  export {
1313
- IterationDirection,
1314
1382
  direct,
1315
1383
  directedGenerator,
1316
1384
  AlgBuilder,
1385
+ setAlgDebug,
1317
1386
  Commutator,
1318
1387
  Conjugate,
1319
1388
  LineComment,
@@ -1328,7 +1397,7 @@ export {
1328
1397
  Alg,
1329
1398
  Example,
1330
1399
  keyToMove,
1331
- algCubingNetLink,
1400
+ experimentalAlgCubingNetLink,
1332
1401
  experimentalAppendMove
1333
1402
  };
1334
- //# sourceMappingURL=chunk-FCB447RN.js.map
1403
+ //# sourceMappingURL=chunk-CSBUJ64Q.js.map