cubing 0.29.1 → 0.30.0

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 (113) hide show
  1. package/README.md +1 -6
  2. package/dist/esm/.DS_Store +0 -0
  3. package/dist/esm/alg/index.js +1 -2
  4. package/dist/esm/bluetooth/index.js +36 -32
  5. package/dist/esm/bluetooth/index.js.map +2 -2
  6. package/dist/esm/{chunk-XRZBPKES.js → chunk-35OK6TQ4.js} +328 -66
  7. package/dist/esm/chunk-35OK6TQ4.js.map +7 -0
  8. package/dist/esm/{chunk-WYKXX2XY.js → chunk-4QZRHN6S.js} +10 -8
  9. package/dist/esm/{chunk-WYKXX2XY.js.map → chunk-4QZRHN6S.js.map} +2 -2
  10. package/dist/esm/{chunk-2JDBIQSV.js → chunk-5OQ34D3X.js} +7 -7
  11. package/dist/esm/{chunk-2JDBIQSV.js.map → chunk-5OQ34D3X.js.map} +2 -2
  12. package/dist/esm/{chunk-U2ONHTIX.js → chunk-6FB2XWAK.js} +33 -31
  13. package/dist/esm/chunk-6FB2XWAK.js.map +7 -0
  14. package/dist/esm/{chunk-ZNAYJGVL.js → chunk-C6KMV2PL.js} +2 -2
  15. package/dist/esm/{chunk-ZNAYJGVL.js.map → chunk-C6KMV2PL.js.map} +0 -0
  16. package/dist/esm/{chunk-XU5ILFX5.js → chunk-GQBRF4EM.js} +6 -4
  17. package/dist/esm/{chunk-XU5ILFX5.js.map → chunk-GQBRF4EM.js.map} +2 -2
  18. package/dist/esm/{chunk-WXCNEGW3.js → chunk-HR5D6SD4.js} +2 -2
  19. package/dist/esm/{chunk-WXCNEGW3.js.map → chunk-HR5D6SD4.js.map} +2 -2
  20. package/dist/esm/{chunk-XT3R2ENM.js → chunk-KOAJIBEX.js} +47 -38
  21. package/dist/esm/chunk-KOAJIBEX.js.map +7 -0
  22. package/dist/esm/{chunk-OX6O2ZO5.js → chunk-QHWK5RXN.js} +1 -1
  23. package/dist/esm/chunk-QHWK5RXN.js.map +7 -0
  24. package/dist/esm/{chunk-GW4FGG42.js → chunk-RI2DAEY6.js} +2 -2
  25. package/dist/esm/{chunk-GW4FGG42.js.map → chunk-RI2DAEY6.js.map} +0 -0
  26. package/dist/esm/{chunk-AHEXXC6V.js → chunk-VIUWS2PX.js} +4 -4
  27. package/dist/esm/chunk-VIUWS2PX.js.map +7 -0
  28. package/dist/esm/{chunk-2IZUSAXQ.js → chunk-WEYPAZEE.js} +1 -1
  29. package/dist/esm/{chunk-2IZUSAXQ.js.map → chunk-WEYPAZEE.js.map} +1 -1
  30. package/dist/esm/{chunk-NI7U4XAZ.js → chunk-ZQT3QSWD.js} +226 -113
  31. package/dist/esm/chunk-ZQT3QSWD.js.map +7 -0
  32. package/dist/esm/kpuzzle/index.js +2 -3
  33. package/dist/esm/notation/index.js +2 -3
  34. package/dist/esm/protocol/index.js +4 -5
  35. package/dist/esm/puzzle-geometry/index.js +110 -85
  36. package/dist/esm/puzzle-geometry/index.js.map +2 -2
  37. package/dist/esm/puzzles/index.js +10 -7
  38. package/dist/esm/{puzzles-dynamic-3x3x3-KIG5A6QR.js → puzzles-dynamic-3x3x3-ZKMODX2P.js} +1 -3
  39. package/dist/esm/{puzzles-dynamic-3x3x3-KIG5A6QR.js.map → puzzles-dynamic-3x3x3-ZKMODX2P.js.map} +1 -1
  40. package/dist/esm/{puzzles-dynamic-4x4x4-PEDAPUZK.js → puzzles-dynamic-4x4x4-DT42HVIY.js} +1 -3
  41. package/dist/esm/{puzzles-dynamic-4x4x4-PEDAPUZK.js.map → puzzles-dynamic-4x4x4-DT42HVIY.js.map} +1 -1
  42. package/dist/esm/{puzzles-dynamic-side-events-5C7LMBWX.js → puzzles-dynamic-side-events-HMUBMHA5.js} +2 -4
  43. package/dist/esm/{puzzles-dynamic-side-events-5C7LMBWX.js.map → puzzles-dynamic-side-events-HMUBMHA5.js.map} +2 -2
  44. package/dist/esm/{puzzles-dynamic-unofficial-WWJ4NJMX.js → puzzles-dynamic-unofficial-QXSDLTK5.js} +1 -3
  45. package/dist/esm/{puzzles-dynamic-unofficial-WWJ4NJMX.js.map → puzzles-dynamic-unofficial-QXSDLTK5.js.map} +1 -1
  46. package/dist/esm/scramble/index.js +3 -4
  47. package/dist/esm/search/index.js +8 -9
  48. package/dist/esm/{search-dynamic-sgs-side-events-4H3X5HLH.js → search-dynamic-sgs-side-events-XNTCWRI4.js} +6 -7
  49. package/dist/esm/search-dynamic-sgs-side-events-XNTCWRI4.js.map +7 -0
  50. package/dist/esm/{search-dynamic-sgs-unofficial-7IRW4LVD.js → search-dynamic-sgs-unofficial-5KMZ747E.js} +122 -68
  51. package/dist/esm/search-dynamic-sgs-unofficial-5KMZ747E.js.map +7 -0
  52. package/dist/esm/{search-dynamic-solve-3x3x3-7XZTYQMO.js → search-dynamic-solve-3x3x3-TSXPWENP.js} +649 -407
  53. package/dist/esm/search-dynamic-solve-3x3x3-TSXPWENP.js.map +7 -0
  54. package/dist/esm/{search-dynamic-solve-4x4x4-7JTJCCSY.js → search-dynamic-solve-4x4x4-FKQ2JWK2.js} +399 -151
  55. package/dist/esm/search-dynamic-solve-4x4x4-FKQ2JWK2.js.map +7 -0
  56. package/dist/esm/{search-dynamic-solve-fto-4LI23P6K.js → search-dynamic-solve-fto-GPLW7S5F.js} +74 -35
  57. package/dist/esm/search-dynamic-solve-fto-GPLW7S5F.js.map +7 -0
  58. package/dist/esm/{search-dynamic-solve-kilominx-3HEVQ4MC.js → search-dynamic-solve-kilominx-HB2QFUGF.js} +136 -72
  59. package/dist/esm/search-dynamic-solve-kilominx-HB2QFUGF.js.map +7 -0
  60. package/dist/esm/{search-dynamic-solve-master_tetraminx-UB32C7MM.js → search-dynamic-solve-master_tetraminx-LR3LJI7O.js} +84 -42
  61. package/dist/esm/search-dynamic-solve-master_tetraminx-LR3LJI7O.js.map +7 -0
  62. package/dist/esm/{search-dynamic-solve-sq1-HA72TYF2.js → search-dynamic-solve-sq1-W33UXTDZ.js} +129 -55
  63. package/dist/esm/search-dynamic-solve-sq1-W33UXTDZ.js.map +7 -0
  64. package/dist/esm/search-worker-inside-generated-string-5HKZNHKK.js +3884 -0
  65. package/dist/esm/search-worker-inside-generated-string-5HKZNHKK.js.map +7 -0
  66. package/dist/esm/{search-worker-js-entry-T6YIT7YD.js → search-worker-js-entry-PDXEE46R.js} +44 -36
  67. package/dist/esm/search-worker-js-entry-PDXEE46R.js.map +7 -0
  68. package/dist/esm/{search-worker-ts-entry-OUEC4L5I.js → search-worker-ts-entry-UV2RY2EY.js} +3 -4
  69. package/dist/esm/{search-worker-ts-entry-OUEC4L5I.js.map → search-worker-ts-entry-UV2RY2EY.js.map} +1 -1
  70. package/dist/esm/stream/index.js +1 -2
  71. package/dist/esm/stream/index.js.map +2 -2
  72. package/dist/esm/twisty/index.js +368 -300
  73. package/dist/esm/twisty/index.js.map +3 -3
  74. package/dist/esm/{twisty-dynamic-3d-AZUSXQ5S.js → twisty-dynamic-3d-GPF6TW32.js} +57 -60
  75. package/dist/esm/twisty-dynamic-3d-GPF6TW32.js.map +7 -0
  76. package/dist/types/{Alg-137fb0d5.d.ts → Alg-1c8c3757.d.ts} +25 -26
  77. package/dist/types/{KState-a73111d7.d.ts → KState-7c9e40f4.d.ts} +1 -1
  78. package/dist/types/{TwizzleLink-bef52ecd.d.ts → TwizzleLink-3f8a01d2.d.ts} +19 -18
  79. package/dist/types/alg/index.d.ts +30 -8
  80. package/dist/types/bluetooth/index.d.ts +4 -4
  81. package/dist/types/{bluetooth-puzzle-8a678993.d.ts → bluetooth-puzzle-a64e9756.d.ts} +2 -2
  82. package/dist/types/kpuzzle/index.d.ts +2 -2
  83. package/dist/types/notation/index.d.ts +1 -1
  84. package/dist/types/{outside-e55f28a0.d.ts → outside-b62aa614.d.ts} +2 -2
  85. package/dist/types/{parseAlg-a28f7568.d.ts → parseAlg-d5fbee87.d.ts} +1 -1
  86. package/dist/types/protocol/index.d.ts +2 -2
  87. package/dist/types/puzzle-geometry/index.d.ts +3 -3
  88. package/dist/types/puzzles/index.d.ts +8 -6
  89. package/dist/types/scramble/index.d.ts +3 -3
  90. package/dist/types/search/index.d.ts +3 -3
  91. package/dist/types/stream/index.d.ts +3 -3
  92. package/dist/types/twisty/index.d.ts +5 -5
  93. package/package.json +51 -147
  94. package/dist/esm/chunk-AHEXXC6V.js.map +0 -7
  95. package/dist/esm/chunk-NI7U4XAZ.js.map +0 -7
  96. package/dist/esm/chunk-OX6O2ZO5.js.map +0 -7
  97. package/dist/esm/chunk-SBZRVSPK.js +0 -30
  98. package/dist/esm/chunk-SBZRVSPK.js.map +0 -7
  99. package/dist/esm/chunk-U2ONHTIX.js.map +0 -7
  100. package/dist/esm/chunk-XRZBPKES.js.map +0 -7
  101. package/dist/esm/chunk-XT3R2ENM.js.map +0 -7
  102. package/dist/esm/search-dynamic-sgs-side-events-4H3X5HLH.js.map +0 -7
  103. package/dist/esm/search-dynamic-sgs-unofficial-7IRW4LVD.js.map +0 -7
  104. package/dist/esm/search-dynamic-solve-3x3x3-7XZTYQMO.js.map +0 -7
  105. package/dist/esm/search-dynamic-solve-4x4x4-7JTJCCSY.js.map +0 -7
  106. package/dist/esm/search-dynamic-solve-fto-4LI23P6K.js.map +0 -7
  107. package/dist/esm/search-dynamic-solve-kilominx-3HEVQ4MC.js.map +0 -7
  108. package/dist/esm/search-dynamic-solve-master_tetraminx-UB32C7MM.js.map +0 -7
  109. package/dist/esm/search-dynamic-solve-sq1-HA72TYF2.js.map +0 -7
  110. package/dist/esm/search-worker-inside-generated-string-ZEY77HTF.js +0 -3886
  111. package/dist/esm/search-worker-inside-generated-string-ZEY77HTF.js.map +0 -7
  112. package/dist/esm/search-worker-js-entry-T6YIT7YD.js.map +0 -7
  113. package/dist/esm/twisty-dynamic-3d-AZUSXQ5S.js.map +0 -7
@@ -1,8 +1,7 @@
1
1
  import {
2
2
  Move,
3
3
  QuantumMove
4
- } from "../chunk-NI7U4XAZ.js";
5
- import "../chunk-SBZRVSPK.js";
4
+ } from "../chunk-ZQT3QSWD.js";
6
5
 
7
6
  // src/cubing/puzzle-geometry/FaceNameSwizzler.ts
8
7
  var FaceNameSwizzler = class {
@@ -41,7 +40,7 @@ var FaceNameSwizzler = class {
41
40
  r.push(currentMatch);
42
41
  at += this.facenames[currentMatch].length;
43
42
  } else {
44
- throw new Error("Could not split " + s + " into face names.");
43
+ throw new Error(`Could not split ${s} into face names.`);
45
44
  }
46
45
  }
47
46
  return r;
@@ -267,7 +266,7 @@ var NxNxNCubeMapper = class {
267
266
  }
268
267
  notationToInternal(move) {
269
268
  const grip = move.family;
270
- if (!move.innerLayer && !move.outerLayer) {
269
+ if (!(move.innerLayer || move.outerLayer)) {
271
270
  if (grip === "x") {
272
271
  move = new Move("Rv", move.amount);
273
272
  } else if (grip === "y") {
@@ -316,7 +315,7 @@ var NxNxNCubeMapper = class {
316
315
  }
317
316
  notationToExternal(move) {
318
317
  const grip = move.family;
319
- if (!move.innerLayer && !move.outerLayer) {
318
+ if (!(move.innerLayer || move.outerLayer)) {
320
319
  if (grip === "Rv") {
321
320
  return new Move("x", move.amount);
322
321
  } else if (grip === "Uv") {
@@ -575,7 +574,7 @@ function parseOptions(argv) {
575
574
  options.puzzleOrientation = JSON.parse(argv[argp]);
576
575
  argp++;
577
576
  } else {
578
- throw new Error("Bad option: " + option);
577
+ throw new Error(`Bad option: ${option}`);
579
578
  }
580
579
  }
581
580
  const puzzleDescription = parsePuzzleDescription(argv.slice(argp).join(" "));
@@ -662,7 +661,7 @@ var Perm = class {
662
661
  this.p = a;
663
662
  }
664
663
  toString() {
665
- return "Perm[" + this.p.join(" ") + "]";
664
+ return `Perm[${this.p.join(" ")}]`;
666
665
  }
667
666
  mul(p2) {
668
667
  const c = Array(this.n);
@@ -705,7 +704,7 @@ var Perm = class {
705
704
  incyc.push(1 + j);
706
705
  seen[j] = true;
707
706
  }
708
- cyc.push("(" + incyc.join(",") + ")");
707
+ cyc.push(`(${incyc.join(",")})`);
709
708
  }
710
709
  return cyc.join("");
711
710
  }
@@ -789,18 +788,18 @@ var PGOrbitsDef = class {
789
788
  }
790
789
  const pd = this.moveops[i].orbits[s];
791
790
  for (let j = 0; j < n; j++) {
792
- if (pd.perm[j] != j || pd.ori[j] != 0) {
791
+ if (pd.perm[j] !== j || pd.ori[j] !== 0) {
793
792
  m[j].push(mvname);
794
793
  }
795
794
  }
796
795
  }
797
796
  for (let j = 0; j < n; j++) {
798
- r.push("# " + (j + 1) + " " + m[j].join(" "));
797
+ r.push(`# ${j + 1} ${m[j].join(" ")}`);
799
798
  }
800
799
  }
801
800
  toKsolve(name, mapper = new NullMapper()) {
802
801
  const result = [];
803
- result.push("Name " + name);
802
+ result.push(`Name ${name}`);
804
803
  result.push("");
805
804
  for (let i = 0; i < this.orbitnames.length; i++) {
806
805
  result.push(
@@ -830,10 +829,14 @@ var PGOrbitsDef = class {
830
829
  doinv = true;
831
830
  name2 = name2.substring(0, name2.length - 1);
832
831
  }
833
- result.push("Move " + name2);
832
+ result.push(`Move ${name2}`);
834
833
  for (let j = 0; j < this.orbitnames.length; j++) {
835
834
  if (doinv) {
836
- this.moveops[i].orbits[j].inv().appendDefinition(result, this.orbitnames[j], true);
835
+ this.moveops[i].orbits[j].inv().appendDefinition(
836
+ result,
837
+ this.orbitnames[j],
838
+ true
839
+ );
837
840
  } else {
838
841
  this.moveops[i].orbits[j].appendDefinition(
839
842
  result,
@@ -1422,47 +1425,47 @@ var PGPuzzles = {
1422
1425
  "20x20x20": "c f 0 f .1 f .2 f .3 f .4 f .5 f .6 f .7 f .8 f .9",
1423
1426
  "30x30x30": "c f 0 f .066667 f .133333 f .2 f .266667 f .333333 f .4 f .466667 f .533333 f .6 f .666667 f .733333 f .8 f .866667 f .933333",
1424
1427
  "40x40x40": "c f 0 f .05 f .1 f .15 f .2 f .25 f .3 f .35 f .4 f .45 f .5 f .55 f .6 f .65 f .7 f .75 f .8 f .85 f .9 f .95",
1425
- "skewb": "c v 0",
1428
+ skewb: "c v 0",
1426
1429
  "master skewb": "c v 0.275",
1427
1430
  "professor skewb": "c v 0 v 0.38",
1428
1431
  "compy cube": "c v 0.915641442663986",
1429
- "helicopter": "c e 0.707106781186547",
1432
+ helicopter: "c e 0.707106781186547",
1430
1433
  "curvy copter": "c e 0.83",
1431
- "dino": "c v 0.577350269189626",
1434
+ dino: "c v 0.577350269189626",
1432
1435
  "little chop": "c e 0",
1433
- "pyramorphix": "t e 0",
1434
- "mastermorphix": "t e 0.346184634065199",
1435
- "pyraminx": "t v 0.333333333333333 v 1.66666666666667",
1436
- "tetraminx": "t v 0.333333333333333",
1436
+ pyramorphix: "t e 0",
1437
+ mastermorphix: "t e 0.346184634065199",
1438
+ pyraminx: "t v 0.333333333333333 v 1.66666666666667",
1439
+ tetraminx: "t v 0.333333333333333",
1437
1440
  "master pyraminx": "t v 0 v 1 v 2",
1438
1441
  "master tetraminx": "t v 0 v 1",
1439
1442
  "professor pyraminx": "t v -0.2 v 0.6 v 1.4 v 2.2",
1440
1443
  "professor tetraminx": "t v -0.2 v 0.6 v 1.4",
1441
1444
  "Jing pyraminx": "t f 0",
1442
1445
  "master pyramorphix": "t e 0.866025403784437",
1443
- "megaminx": "d f 0.7",
1444
- "gigaminx": "d f 0.64 f 0.82",
1445
- "teraminx": "d f 0.64 f 0.76 f 0.88",
1446
- "petaminx": "d f 0.64 f 0.73 f 0.82 f 0.91",
1447
- "examinx": "d f 0.64 f 0.712 f 0.784 f 0.856 f 0.928",
1448
- "zetaminx": "d f 0.64 f 0.7 f 0.76 f 0.82 f 0.88 f 0.94",
1449
- "yottaminx": "d f 0.64 f 0.6914 f 0.7429 f 0.7943 f 0.8457 f 0.8971 f 0.9486",
1450
- "pentultimate": "d f 0",
1446
+ megaminx: "d f 0.7",
1447
+ gigaminx: "d f 0.64 f 0.82",
1448
+ teraminx: "d f 0.64 f 0.76 f 0.88",
1449
+ petaminx: "d f 0.64 f 0.73 f 0.82 f 0.91",
1450
+ examinx: "d f 0.64 f 0.712 f 0.784 f 0.856 f 0.928",
1451
+ zetaminx: "d f 0.64 f 0.7 f 0.76 f 0.82 f 0.88 f 0.94",
1452
+ yottaminx: "d f 0.64 f 0.6914 f 0.7429 f 0.7943 f 0.8457 f 0.8971 f 0.9486",
1453
+ pentultimate: "d f 0",
1451
1454
  "master pentultimate": "d f 0.1",
1452
1455
  "elite pentultimate": "d f 0 f 0.145905",
1453
- "starminx": "d v 0.937962370425399",
1456
+ starminx: "d v 0.937962370425399",
1454
1457
  "starminx 2": "d f 0.23606797749979",
1455
1458
  "pyraminx crystal": "d f 0.447213595499989",
1456
- "chopasaurus": "d v 0",
1459
+ chopasaurus: "d v 0",
1457
1460
  "big chop": "d e 0",
1458
1461
  "skewb diamond": "o f 0",
1459
- "FTO": "o f 0.333333333333333",
1462
+ FTO: "o f 0.333333333333333",
1460
1463
  "master FTO": "o f 0.5 f 0",
1461
1464
  "Christopher's jewel": "o v 0.577350269189626",
1462
- "octastar": "o e 0",
1465
+ octastar: "o e 0",
1463
1466
  "Trajber's octahedron": "o v 0.433012701892219",
1464
1467
  "radio chop": "i f 0",
1465
- "icosamate": "i v 0",
1468
+ icosamate: "i v 0",
1466
1469
  "icosahedron 2": "i v 0.18759247376021",
1467
1470
  "icosahedron 3": "i v 0.18759247376021 e 0",
1468
1471
  "icosahedron static faces": "i v 0.84",
@@ -2399,7 +2402,7 @@ function getmovename(geo, bits, slices) {
2399
2402
  let movenameFamily = geo[0];
2400
2403
  let movenamePrefix = "";
2401
2404
  if (bits[0] === 0 && bits[1] === slices) {
2402
- movenameFamily = movenameFamily + "v";
2405
+ movenameFamily = `${movenameFamily}v`;
2403
2406
  } else if (bits[0] === bits[1]) {
2404
2407
  if (bits[1] > 0) {
2405
2408
  movenamePrefix = String(bits[1] + 1);
@@ -2433,7 +2436,7 @@ function splitByFaceNames(s, facenames) {
2433
2436
  r.push(currentMatch);
2434
2437
  at += currentMatch.length;
2435
2438
  } else {
2436
- throw new Error("Could not split " + s + " into face names.");
2439
+ throw new Error(`Could not split ${s} into face names.`);
2437
2440
  }
2438
2441
  }
2439
2442
  return r;
@@ -2480,27 +2483,32 @@ var PuzzleGeometry = class {
2480
2483
  this.cubies = [];
2481
2484
  let g = null;
2482
2485
  switch (shape) {
2483
- case "c":
2486
+ case "c": {
2484
2487
  g = cube();
2485
2488
  break;
2486
- case "o":
2489
+ }
2490
+ case "o": {
2487
2491
  g = octahedron();
2488
2492
  break;
2489
- case "i":
2493
+ }
2494
+ case "i": {
2490
2495
  g = icosahedron();
2491
2496
  break;
2492
- case "t":
2497
+ }
2498
+ case "t": {
2493
2499
  g = tetrahedron();
2494
2500
  break;
2495
- case "d":
2501
+ }
2502
+ case "d": {
2496
2503
  g = dodecahedron();
2497
2504
  break;
2505
+ }
2498
2506
  default:
2499
- throw new Error("Bad shape argument: " + shape);
2507
+ throw new Error(`Bad shape argument: ${shape}`);
2500
2508
  }
2501
2509
  this.rotations = closure(g);
2502
2510
  if (this.options.verbosity) {
2503
- console.log("# Rotations: " + this.rotations.length);
2511
+ console.log(`# Rotations: ${this.rotations.length}`);
2504
2512
  }
2505
2513
  const baseplane = g[0];
2506
2514
  this.baseplanerot = uniqueplanes(baseplane, this.rotations);
@@ -2511,19 +2519,19 @@ var PuzzleGeometry = class {
2511
2519
  this.net = net;
2512
2520
  this.colors = defaultcolors()[baseplanes.length];
2513
2521
  if (this.options.verbosity > 0) {
2514
- console.log("# Base planes: " + baseplanes.length);
2522
+ console.log(`# Base planes: ${baseplanes.length}`);
2515
2523
  }
2516
2524
  const baseface = getface(baseplanes);
2517
2525
  const zero = new Quat(0, 0, 0, 0);
2518
2526
  if (this.options.verbosity > 0) {
2519
- console.log("# Face vertices: " + baseface.length);
2527
+ console.log(`# Face vertices: ${baseface.length}`);
2520
2528
  }
2521
2529
  const facenormal = baseplanes[0].makenormal();
2522
2530
  const edgenormal = baseface[0].sum(baseface[1]).makenormal();
2523
2531
  const vertexnormal = baseface[0].makenormal();
2524
2532
  const boundary = new Quat(1, facenormal.b, facenormal.c, facenormal.d);
2525
2533
  if (this.options.verbosity > 0) {
2526
- console.log("# Boundary is " + boundary);
2534
+ console.log(`# Boundary is ${boundary}`);
2527
2535
  }
2528
2536
  const planerot = uniqueplanes(boundary, this.rotations);
2529
2537
  const planes = planerot.map((_) => boundary.rotateplane(_));
@@ -2539,23 +2547,26 @@ var PuzzleGeometry = class {
2539
2547
  let normal = null;
2540
2548
  let distance = 0;
2541
2549
  switch (cut.cutType) {
2542
- case "f":
2550
+ case "f": {
2543
2551
  normal = facenormal;
2544
2552
  distance = 1;
2545
2553
  sawface = true;
2546
2554
  break;
2547
- case "v":
2555
+ }
2556
+ case "v": {
2548
2557
  normal = vertexnormal;
2549
2558
  distance = this.vertexdistance;
2550
2559
  sawvertex = true;
2551
2560
  break;
2552
- case "e":
2561
+ }
2562
+ case "e": {
2553
2563
  normal = edgenormal;
2554
2564
  distance = this.edgedistance;
2555
2565
  sawedge = true;
2556
2566
  break;
2567
+ }
2557
2568
  default:
2558
- throw new Error("Bad cut argument: " + cut.cutType);
2569
+ throw new Error(`Bad cut argument: ${cut.cutType}`);
2559
2570
  }
2560
2571
  cutplanes.push(normal.makecut(cut.distance));
2561
2572
  intersects.push(cut.distance < distance);
@@ -2711,14 +2722,14 @@ var PuzzleGeometry = class {
2711
2722
  }
2712
2723
  for (let i = 0; i < edgenames.length; i++) {
2713
2724
  if (edgenames[i].length !== 3) {
2714
- throw new Error("Bad length in edge names " + edgenames[i]);
2725
+ throw new Error(`Bad length in edge names ${edgenames[i]}`);
2715
2726
  }
2716
2727
  const f1 = edgenames[i][1];
2717
2728
  const f2 = edgenames[i][2];
2718
2729
  let c1 = faceindextoname[f1];
2719
2730
  const c2 = faceindextoname[f2];
2720
2731
  const bits = 1 << f1 | 1 << f2;
2721
- if (markedface[bits] == f1) {
2732
+ if (markedface[bits] === f1) {
2722
2733
  c1 = c1 + sep + c2;
2723
2734
  } else {
2724
2735
  c1 = c2 + sep + c1;
@@ -2763,9 +2774,9 @@ var PuzzleGeometry = class {
2763
2774
  }
2764
2775
  this.markedface = markedface;
2765
2776
  if (this.options.verbosity > 1) {
2766
- console.log("# Face names: " + facenames.map((_) => _[1]).join(" "));
2767
- console.log("# Edge names: " + edgenames.map((_) => _[1]).join(" "));
2768
- console.log("# Vertex names: " + vertexnames.map((_) => _[1]).join(" "));
2777
+ console.log(`# Face names: ${facenames.map((_) => _[1]).join(" ")}`);
2778
+ console.log(`# Edge names: ${edgenames.map((_) => _[1]).join(" ")}`);
2779
+ console.log(`# Vertex names: ${vertexnames.map((_) => _[1]).join(" ")}`);
2769
2780
  }
2770
2781
  const geonormals = [];
2771
2782
  for (const faceplane of faceplanes) {
@@ -2786,7 +2797,7 @@ var PuzzleGeometry = class {
2786
2797
  this.swizzler.setGripNames(geonormalnames);
2787
2798
  if (this.options.verbosity > 0) {
2788
2799
  console.log(
2789
- "# Distances: face " + 1 + " edge " + this.edgedistance + " vertex " + this.vertexdistance
2800
+ `# Distances: face ${1} edge ${this.edgedistance} vertex ${this.vertexdistance}`
2790
2801
  );
2791
2802
  }
2792
2803
  for (let c = 0; c < cutplanes.length; c++) {
@@ -2819,7 +2830,7 @@ var PuzzleGeometry = class {
2819
2830
  const faces = ft.collect([], true);
2820
2831
  this.faces = faces;
2821
2832
  if (this.options.verbosity > 0) {
2822
- console.log("# Faces is now " + faces.length);
2833
+ console.log(`# Faces is now ${faces.length}`);
2823
2834
  }
2824
2835
  this.stickersperface = faces.length;
2825
2836
  const simplerot = [];
@@ -2869,7 +2880,7 @@ var PuzzleGeometry = class {
2869
2880
  }
2870
2881
  }
2871
2882
  if (this.options.verbosity > 0) {
2872
- console.log("# Short edge is " + this.shortedge);
2883
+ console.log(`# Short edge is ${this.shortedge}`);
2873
2884
  }
2874
2885
  if (shape === "c" && sawface && !sawedge && !sawvertex) {
2875
2886
  this.addNotationMapper = "NxNxNCubeMapper";
@@ -2886,7 +2897,7 @@ var PuzzleGeometry = class {
2886
2897
  this.swizzler,
2887
2898
  new FaceNameSwizzler(["F", "D", "L", "BL", "R", "U", "BR", "B"])
2888
2899
  );
2889
- if (!sawedge && !sawvertex) {
2900
+ if (!(sawedge || sawvertex)) {
2890
2901
  this.addNotationMapper = "FTOMapper";
2891
2902
  }
2892
2903
  }
@@ -3005,7 +3016,7 @@ var PuzzleGeometry = class {
3005
3016
  const t1 = tstart("allstickers");
3006
3017
  this.faces = expandfaces(this.baseplanerot, this.faces);
3007
3018
  if (this.options.verbosity > 0) {
3008
- console.log("# Total stickers is now " + this.faces.length);
3019
+ console.log(`# Total stickers is now ${this.faces.length}`);
3009
3020
  }
3010
3021
  this.facecentermass = new Array(this.faces.length);
3011
3022
  for (let i = 0; i < this.faces.length; i++) {
@@ -3050,7 +3061,7 @@ var PuzzleGeometry = class {
3050
3061
  this.moveplanenormals = moveplanenormals;
3051
3062
  const sizes = moveplanesets.map((_) => _.length);
3052
3063
  if (this.options.verbosity > 0) {
3053
- console.log("# Move plane sets: " + sizes);
3064
+ console.log(`# Move plane sets: ${sizes}`);
3054
3065
  }
3055
3066
  const moverotations = [];
3056
3067
  for (let i = 0; i < moveplanesets.length; i++) {
@@ -3161,7 +3172,7 @@ var PuzzleGeometry = class {
3161
3172
  console.log("# Splitting core.");
3162
3173
  }
3163
3174
  for (let suff = 0; suff < arr.length; suff++) {
3164
- const s2 = s + " " + suff;
3175
+ const s2 = `${s} ${suff}`;
3165
3176
  facelisthash.set(s2, [arr[suff]]);
3166
3177
  }
3167
3178
  }
@@ -3169,7 +3180,7 @@ var PuzzleGeometry = class {
3169
3180
  }
3170
3181
  this.facelisthash = facelisthash;
3171
3182
  if (this.options.verbosity > 0) {
3172
- console.log("# Cubies: " + facelisthash.size);
3183
+ console.log(`# Cubies: ${facelisthash.size}`);
3173
3184
  }
3174
3185
  const cubies = [];
3175
3186
  const facetocubie = [];
@@ -3349,12 +3360,12 @@ var PuzzleGeometry = class {
3349
3360
  }
3350
3361
  if (this.fixedCubie < 0) {
3351
3362
  throw new Error(
3352
- "Could not find a cubie of type " + this.options.fixedPieceType + " to fix."
3363
+ `Could not find a cubie of type ${this.options.fixedPieceType} to fix.`
3353
3364
  );
3354
3365
  }
3355
3366
  }
3356
3367
  if (this.options.verbosity > 0) {
3357
- console.log("# Cubie orbit sizes " + cubieords);
3368
+ console.log(`# Cubie orbit sizes ${cubieords}`);
3358
3369
  }
3359
3370
  tend(t1);
3360
3371
  }
@@ -3369,7 +3380,7 @@ var PuzzleGeometry = class {
3369
3380
  const re = RegExp("^(([0-9]+)-)?([0-9]+)?([^0-9]+)([0-9]+'?)?$");
3370
3381
  const p = mv.match(re);
3371
3382
  if (p === null) {
3372
- throw new Error("Bad move passed " + mv);
3383
+ throw new Error(`Bad move passed ${mv}`);
3373
3384
  }
3374
3385
  const grip = p[4];
3375
3386
  let loslice = void 0;
@@ -3388,7 +3399,7 @@ var PuzzleGeometry = class {
3388
3399
  if (p[5] !== void 0) {
3389
3400
  amountstr = p[5];
3390
3401
  if (amountstr[0] === "'") {
3391
- amountstr = "-" + amountstr.substring(1);
3402
+ amountstr = `-${amountstr.substring(1)}`;
3392
3403
  }
3393
3404
  amount = parseInt(amountstr, 10);
3394
3405
  }
@@ -3397,7 +3408,7 @@ var PuzzleGeometry = class {
3397
3408
  parseMove(move) {
3398
3409
  const bm = this.notationMapper.notationToInternal(move);
3399
3410
  if (bm === null) {
3400
- throw new Error("Bad move " + move.family);
3411
+ throw new Error(`Bad move ${move.family}`);
3401
3412
  }
3402
3413
  move = bm;
3403
3414
  let grip = move.family;
@@ -3435,7 +3446,7 @@ var PuzzleGeometry = class {
3435
3446
  hislice = 2;
3436
3447
  }
3437
3448
  if (geo === void 0) {
3438
- throw new Error("Bad grip in move " + move.family);
3449
+ throw new Error(`Bad grip in move ${move.family}`);
3439
3450
  }
3440
3451
  if (move.outerLayer !== void 0) {
3441
3452
  loslice = move.outerLayer;
@@ -3460,7 +3471,7 @@ var PuzzleGeometry = class {
3460
3471
  }
3461
3472
  if (loslice < 0 || loslice > this.moveplanesets[msi].length || hislice < 0 || hislice > this.moveplanesets[msi].length) {
3462
3473
  throw new Error(
3463
- "Bad slice spec " + loslice + " " + hislice + " vs " + this.moveplanesets[msi].length
3474
+ `Bad slice spec ${loslice} ${hislice} vs ${this.moveplanesets[msi].length}`
3464
3475
  );
3465
3476
  }
3466
3477
  if (!permissivieMoveParsing && loslice === 0 && hislice === this.moveplanesets[msi].length && !fullrotation) {
@@ -3505,7 +3516,7 @@ var PuzzleGeometry = class {
3505
3516
  if (Math.abs(normal.dot(this.faces[kk].get(hii2).sub(center)) - hiv) < eps3) {
3506
3517
  hii = hii2;
3507
3518
  }
3508
- if (hii != 0) {
3519
+ if (hii !== 0) {
3509
3520
  const qs = [];
3510
3521
  for (let ii = 0; ii < this.faces[kk].length; ii++) {
3511
3522
  qs.push(this.faces[kk].get((ii + hii) % this.faces[kk].length));
@@ -3756,7 +3767,7 @@ var PuzzleGeometry = class {
3756
3767
  const r = [];
3757
3768
  const mvs = [];
3758
3769
  for (let i = 0; i < os.moveops.length; i++) {
3759
- let movename = "M_" + externalName(this.notationMapper, os.movenames[i]);
3770
+ let movename = `M_${externalName(this.notationMapper, os.movenames[i])}`;
3760
3771
  let doinv = false;
3761
3772
  if (movename[movename.length - 1] === "'") {
3762
3773
  movename = movename.substring(0, movename.length - 1);
@@ -3764,9 +3775,9 @@ var PuzzleGeometry = class {
3764
3775
  }
3765
3776
  mvs.push(movename);
3766
3777
  if (doinv) {
3767
- r.push(movename + ":=" + os.moveops[i].toPerm().inv().toGap() + ";");
3778
+ r.push(`${movename}:=${os.moveops[i].toPerm().inv().toGap()};`);
3768
3779
  } else {
3769
- r.push(movename + ":=" + os.moveops[i].toPerm().toGap() + ";");
3780
+ r.push(`${movename}:=${os.moveops[i].toPerm().toGap()};`);
3770
3781
  }
3771
3782
  }
3772
3783
  r.push("Gen:=[");
@@ -3774,7 +3785,9 @@ var PuzzleGeometry = class {
3774
3785
  r.push("];");
3775
3786
  const ip = os.solved.identicalPieces();
3776
3787
  r.push(
3777
- "ip:=[" + ip.map((_) => "[" + _.map((__) => __ + 1).join(",") + "]").join(",") + "];"
3788
+ `ip:=[${ip.map((_) => `[${_.map((__) => __ + 1).join(",")}]`).join(
3789
+ ","
3790
+ )}];`
3778
3791
  );
3779
3792
  r.push("# Size(Group(Gen));");
3780
3793
  r.push("# Size(Stabilizer(Group(Gen), ip, OnTuplesSets));");
@@ -3918,7 +3931,7 @@ var PuzzleGeometry = class {
3918
3931
  }
3919
3932
  hasrotation[k] = sawone;
3920
3933
  }
3921
- if (this.options.moveList && this.options.addRotations) {
3934
+ if (this.options.addRotations && (this.options.moveList || this.options.fixedPieceType !== null)) {
3922
3935
  for (let i = 0; i < this.moverotations.length; i++) {
3923
3936
  addrot[i] = 0;
3924
3937
  }
@@ -4169,14 +4182,16 @@ var PuzzleGeometry = class {
4169
4182
  }
4170
4183
  }
4171
4184
  if (!feature1) {
4172
- throw new Error("Could not find feature " + feature1name);
4185
+ throw new Error(`Could not find feature ${feature1name}`);
4173
4186
  }
4174
4187
  if (!feature2) {
4175
- throw new Error("Could not find feature " + feature2name);
4188
+ throw new Error(`Could not find feature ${feature2name}`);
4176
4189
  }
4177
4190
  const r1 = feature1.pointrotation(direction1);
4178
4191
  const feature2rot = feature2.rotatepoint(r1);
4179
- const r2 = feature2rot.unproject(direction1).pointrotation(direction2.unproject(direction1));
4192
+ const r2 = feature2rot.unproject(direction1).pointrotation(
4193
+ direction2.unproject(direction1)
4194
+ );
4180
4195
  return r2.mul(r1);
4181
4196
  }
4182
4197
  getInitial3DRotation() {
@@ -4283,7 +4298,7 @@ var PuzzleGeometry = class {
4283
4298
  }
4284
4299
  }
4285
4300
  if (gfi < 0) {
4286
- throw new Error("Could not find first face name " + f0);
4301
+ throw new Error(`Could not find first face name ${f0}`);
4287
4302
  }
4288
4303
  const thisface = bg.facenames[gfi][0];
4289
4304
  for (let j = 1; j < neti.length; j++) {
@@ -4297,7 +4312,9 @@ var PuzzleGeometry = class {
4297
4312
  ];
4298
4313
  extendedges(edges2[f1], polyn);
4299
4314
  const caf0 = connectat[gfi];
4300
- const mp = thisface[(caf0 + j) % polyn].sum(thisface[(caf0 + j + polyn - 1) % polyn]).smul(0.5);
4315
+ const mp = thisface[(caf0 + j) % polyn].sum(
4316
+ thisface[(caf0 + j + polyn - 1) % polyn]
4317
+ ).smul(0.5);
4301
4318
  const epi = findelement(bg.edgenames, mp);
4302
4319
  const edgename = bg.edgenames[epi][1];
4303
4320
  const el = splitByFaceNames(edgename, this.facenames);
@@ -4363,7 +4380,10 @@ var PuzzleGeometry = class {
4363
4380
  generatesvg(w = 800, h = 500, trim = 10, threed = false) {
4364
4381
  const mappt2d = this.generate2dmapping(w, h, trim, threed);
4365
4382
  function drawedges(id, pts, color) {
4366
- return '<polygon id="' + id + '" class="sticker" style="fill: ' + color + '" points="' + pts.map((p) => p[0] + " " + p[1]).join(" ") + '"/>\n';
4383
+ return `<polygon id="${id}" class="sticker" style="fill: ${color}" points="${pts.map(
4384
+ (p) => `${p[0]} ${p[1]}`
4385
+ ).join(" ")}"/>
4386
+ `;
4367
4387
  }
4368
4388
  const pos = this.getsolved();
4369
4389
  const colormap = [];
@@ -4383,7 +4403,8 @@ var PuzzleGeometry = class {
4383
4403
  const svg = [];
4384
4404
  for (let j = 0; j < this.baseFaceCount; j++) {
4385
4405
  svg.push("<g>");
4386
- svg.push("<title>" + this.facenames[j][1] + "</title>\n");
4406
+ svg.push(`<title>${this.facenames[j][1]}</title>
4407
+ `);
4387
4408
  for (let ii = 0; ii < this.stickersperface; ii++) {
4388
4409
  const i = j * this.stickersperface + ii;
4389
4410
  const cubie = this.facetocubie[i];
@@ -4391,18 +4412,22 @@ var PuzzleGeometry = class {
4391
4412
  const cubiesetnum = this.cubiesetnums[cubie];
4392
4413
  const cubieord = this.cubieordnums[cubie];
4393
4414
  const color = this.graybyori(cubie) ? "#808080" : colormap[pos.p[i]];
4394
- let id = this.cubiesetnames[cubiesetnum] + "-l" + cubieord + "-o" + cubieori;
4415
+ let id = `${this.cubiesetnames[cubiesetnum]}-l${cubieord}-o${cubieori}`;
4395
4416
  svg.push(drawedges(id, facegeo[i], color));
4396
4417
  if (this.duplicatedFaces[i]) {
4397
4418
  for (let jj = 1; jj < this.duplicatedFaces[i]; jj++) {
4398
- id = this.cubiesetnames[cubiesetnum] + "-l" + cubieord + "-o" + jj;
4419
+ id = `${this.cubiesetnames[cubiesetnum]}-l${cubieord}-o${jj}`;
4399
4420
  svg.push(drawedges(id, facegeo[i], color));
4400
4421
  }
4401
4422
  }
4402
4423
  }
4403
4424
  svg.push("</g>");
4404
4425
  }
4405
- const html = '<svg id="svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 800 500">\n<style type="text/css"><![CDATA[.sticker { stroke: #000000; stroke-width: 1px; }]]></style>\n' + svg.join("") + "</svg>";
4426
+ const html = `<svg id="svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 800 500">
4427
+ <style type="text/css"><![CDATA[.sticker { stroke: #000000; stroke-width: 1px; }]]></style>
4428
+ ${svg.join(
4429
+ ""
4430
+ )}</svg>`;
4406
4431
  return html;
4407
4432
  }
4408
4433
  get3d(options) {