cubing 0.24.0-pre2 → 0.24.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 (102) hide show
  1. package/dist/esm/{2x2x2.kpuzzle.json-U5KOZCMU.js → 2x2x2.kpuzzle.json-RUB44MJV.js} +2 -2
  2. package/dist/esm/2x2x2.kpuzzle.json-RUB44MJV.js.map +7 -0
  3. package/dist/esm/{2x2x2.sgs.json-UAYPCQVL.js → 2x2x2.sgs.json-TASFAQNY.js} +3 -3
  4. package/dist/esm/{2x2x2.sgs.json-UAYPCQVL.js.map → 2x2x2.sgs.json-TASFAQNY.js.map} +0 -0
  5. package/dist/esm/{chunk-REMJV2GO.js → 3d-dynamic-inside-RSDMFS4G.js} +23 -420
  6. package/dist/esm/3d-dynamic-inside-RSDMFS4G.js.map +7 -0
  7. package/dist/esm/bluetooth/index.js +3 -3
  8. package/dist/esm/chunk-27MCV5LC.js +423 -0
  9. package/dist/esm/chunk-27MCV5LC.js.map +7 -0
  10. package/dist/esm/{chunk-NPK6Z4AU.js → chunk-3SURT6S2.js} +2 -2
  11. package/dist/esm/{chunk-NPK6Z4AU.js.map → chunk-3SURT6S2.js.map} +0 -0
  12. package/dist/esm/{chunk-ZLIK3DZT.js → chunk-54HT7B4M.js} +118 -92
  13. package/dist/esm/chunk-54HT7B4M.js.map +7 -0
  14. package/dist/esm/{chunk-TNRZDNGH.js → chunk-B27E6KTE.js} +121 -115
  15. package/dist/esm/chunk-B27E6KTE.js.map +7 -0
  16. package/dist/esm/{chunk-KCRFOAR4.js → chunk-BBEJTW6Z.js} +3 -3
  17. package/dist/esm/{chunk-KCRFOAR4.js.map → chunk-BBEJTW6Z.js.map} +0 -0
  18. package/dist/esm/{chunk-TB4D4E2W.js → chunk-EA4KWT7Z.js} +3 -3
  19. package/dist/esm/chunk-EA4KWT7Z.js.map +7 -0
  20. package/dist/esm/{chunk-7OPCF2OL.js → chunk-GBIDMAJS.js} +2 -2
  21. package/dist/esm/{chunk-7OPCF2OL.js.map → chunk-GBIDMAJS.js.map} +0 -0
  22. package/dist/esm/{chunk-YN7E5RGM.js → chunk-LR6VCMD2.js} +3 -3
  23. package/dist/esm/{chunk-YN7E5RGM.js.map → chunk-LR6VCMD2.js.map} +0 -0
  24. package/dist/esm/{chunk-NV5ESXTN.js → chunk-SPTKCRT5.js} +3 -3
  25. package/dist/esm/{chunk-NV5ESXTN.js.map → chunk-SPTKCRT5.js.map} +0 -0
  26. package/dist/esm/{chunk-4IUYLRHT.js → chunk-U2TSTTDG.js} +12 -1
  27. package/dist/esm/chunk-U2TSTTDG.js.map +7 -0
  28. package/dist/esm/{chunk-J2U2GRS4.js → chunk-ZDALYMGF.js} +2 -2
  29. package/dist/esm/chunk-ZDALYMGF.js.map +7 -0
  30. package/dist/esm/{clock.kpuzzle.json-J3YBOI3G.js → clock.kpuzzle.json-BQKNKV3G.js} +4 -4
  31. package/dist/esm/clock.kpuzzle.json-BQKNKV3G.js.map +7 -0
  32. package/dist/esm/{entry-PHAJAE4E.js → entry-VNBE3GIX.js} +18 -18
  33. package/dist/esm/entry-VNBE3GIX.js.map +7 -0
  34. package/dist/esm/{fto.sgs.json-VO6HST2V.js → fto.sgs.json-RZ2BQGRG.js} +3 -3
  35. package/dist/esm/{fto.sgs.json-VO6HST2V.js.map → fto.sgs.json-RZ2BQGRG.js.map} +0 -0
  36. package/dist/esm/kpuzzle/index.js +3 -1
  37. package/dist/esm/{megaminx.sgs.json-R3MK4HXM.js → megaminx.sgs.json-3UELYHNZ.js} +4 -4
  38. package/dist/esm/{3d-NFF7OGTI.js.map → megaminx.sgs.json-3UELYHNZ.js.map} +0 -0
  39. package/dist/esm/{module-entry-UYTOFYBC.js → module-entry-MKJ6SWPL.js} +2 -2
  40. package/dist/esm/{module-entry-UYTOFYBC.js.map → module-entry-MKJ6SWPL.js.map} +0 -0
  41. package/dist/esm/notation/index.js +6 -4
  42. package/dist/esm/protocol/index.js +2 -2
  43. package/dist/esm/puzzle-geometry/index.js +1 -1
  44. package/dist/esm/puzzles/index.js +2 -2
  45. package/dist/esm/{pyraminx.sgs.json-R3J3JHMV.js → pyraminx.sgs.json-6KZV2YF7.js} +4 -4
  46. package/dist/esm/{megaminx.sgs.json-R3MK4HXM.js.map → pyraminx.sgs.json-6KZV2YF7.js.map} +0 -0
  47. package/dist/esm/scramble/index.js +4 -4
  48. package/dist/esm/{scramble_444-F3YANDPO.js → scramble_444-WHAZBEON.js} +6 -5
  49. package/dist/esm/scramble_444-WHAZBEON.js.map +7 -0
  50. package/dist/esm/search/index.js +4 -4
  51. package/dist/esm/{skewb.sgs.json-T6CO36WU.js → skewb.sgs.json-QVGBEYZV.js} +4 -4
  52. package/dist/esm/{pyraminx.sgs.json-R3J3JHMV.js.map → skewb.sgs.json-QVGBEYZV.js.map} +0 -0
  53. package/dist/esm/{sq1-hyperorbit.kpuzzle.json-AWDGN4ZW.js → sq1-hyperorbit.kpuzzle.json-4XS5YACO.js} +3 -3
  54. package/dist/esm/sq1-hyperorbit.kpuzzle.json-4XS5YACO.js.map +7 -0
  55. package/dist/esm/twisty/index.js +267 -139
  56. package/dist/esm/twisty/index.js.map +3 -3
  57. package/dist/esm/{worker-inside-generated-string-6YDSDSRJ.js → worker-inside-generated-string-K4NE6VX5.js} +24 -24
  58. package/dist/esm/worker-inside-generated-string-K4NE6VX5.js.map +7 -0
  59. package/dist/types/kpuzzle/KPuzzle.d.ts +5 -0
  60. package/dist/types/kpuzzle/KPuzzleDefinition.d.ts +1 -1
  61. package/dist/types/kpuzzle/KState.d.ts +2 -0
  62. package/dist/types/kpuzzle/KTransformation.d.ts +3 -0
  63. package/dist/types/kpuzzle/calculate.d.ts +1 -1
  64. package/dist/types/kpuzzle/index.d.ts +2 -2
  65. package/dist/types/notation/CountMoves.d.ts +1 -0
  66. package/dist/types/notation/index.d.ts +2 -2
  67. package/dist/types/puzzles/PuzzleLoader.d.ts +1 -0
  68. package/dist/types/puzzles/async/async-pg3d.d.ts +23 -6
  69. package/dist/types/puzzles/async/lazy-cached.d.ts +1 -0
  70. package/dist/types/puzzles/implementations/fto/index.d.ts +11 -2
  71. package/dist/types/puzzles/implementations/megaminx/index.d.ts +11 -2
  72. package/dist/types/puzzles/implementations/pyraminx/index.d.ts +7 -2
  73. package/dist/types/search/worker-inside-generated-string.d.ts +1 -1
  74. package/dist/types/twisty/heavy-code-imports/3d.d.ts +1 -1
  75. package/dist/types/twisty/heavy-code-imports/dynamic-entries/{3d.d.ts → 3d-dynamic-inside.d.ts} +0 -0
  76. package/dist/types/twisty/index.d.ts +1 -2
  77. package/dist/types/twisty/model/props/puzzle/state/PuzzleAlgProp.d.ts +1 -0
  78. package/dist/types/twisty/views/3D/Twisty3DScene.d.ts +6 -5
  79. package/dist/types/twisty/views/3D/Twisty3DSceneWrapper.d.ts +2 -2
  80. package/dist/types/twisty/views/3D/TwistyOrbitControls.d.ts +2 -2
  81. package/dist/types/twisty/views/3D/puzzles/PG3D.d.ts +1 -0
  82. package/dist/types/twisty/views/TwistyPlayer.d.ts +2 -1
  83. package/dist/types/twisty/views/twizzle/TwizzleLink.css.d.ts +2 -0
  84. package/dist/types/twisty/views/twizzle/TwizzleLink.d.ts +9 -0
  85. package/dist/types/twisty/views/twizzle/url-params.d.ts +18 -0
  86. package/package.json +2 -1
  87. package/dist/esm/2x2x2.kpuzzle.json-U5KOZCMU.js.map +0 -7
  88. package/dist/esm/3d-NFF7OGTI.js +0 -21
  89. package/dist/esm/chunk-4IUYLRHT.js.map +0 -7
  90. package/dist/esm/chunk-J2U2GRS4.js.map +0 -7
  91. package/dist/esm/chunk-REMJV2GO.js.map +0 -7
  92. package/dist/esm/chunk-TB4D4E2W.js.map +0 -7
  93. package/dist/esm/chunk-TNRZDNGH.js.map +0 -7
  94. package/dist/esm/chunk-ZLIK3DZT.js.map +0 -7
  95. package/dist/esm/clock.kpuzzle.json-J3YBOI3G.js.map +0 -7
  96. package/dist/esm/entry-PHAJAE4E.js.map +0 -7
  97. package/dist/esm/scramble_444-F3YANDPO.js.map +0 -7
  98. package/dist/esm/skewb.sgs.json-T6CO36WU.js.map +0 -7
  99. package/dist/esm/sq1-hyperorbit.kpuzzle.json-AWDGN4ZW.js.map +0 -7
  100. package/dist/esm/worker-inside-generated-string-6YDSDSRJ.js.map +0 -7
  101. package/dist/types/.DS_Store +0 -0
  102. package/dist/types/puzzles/async/lazy-cached-kpuzzle.d.ts +0 -2
@@ -1,28 +1,27 @@
1
1
  import {
2
- Cube3D,
3
2
  DEGREES_PER_RADIAN,
4
3
  FreshListenerManager,
5
4
  HintFaceletProp,
6
5
  NO_VALUE,
7
- PG3D,
8
6
  SimpleTwistyPropSource,
9
7
  StaleDropper,
10
8
  StickeringProp,
9
+ THREEJS,
11
10
  TwistyPropDerived,
12
11
  TwistyPropSource,
13
- from
14
- } from "../chunk-REMJV2GO.js";
12
+ proxy3D
13
+ } from "../chunk-27MCV5LC.js";
15
14
  import {
16
15
  countAnimatedLeaves,
17
16
  countMoves
18
- } from "../chunk-4IUYLRHT.js";
17
+ } from "../chunk-U2TSTTDG.js";
19
18
  import {
20
19
  cube3x3x3,
21
20
  cubeAppearance,
22
21
  customPGPuzzleLoader,
23
22
  puzzles
24
- } from "../chunk-ZLIK3DZT.js";
25
- import "../chunk-TNRZDNGH.js";
23
+ } from "../chunk-54HT7B4M.js";
24
+ import "../chunk-B27E6KTE.js";
26
25
  import {
27
26
  Alg,
28
27
  AlgBuilder,
@@ -356,37 +355,6 @@ var ControlPanelProp = class extends SimpleTwistyPropSource {
356
355
  }
357
356
  };
358
357
 
359
- // src/cubing/twisty/views/ClassListManager.ts
360
- var _currentClassName;
361
- var ClassListManager = class {
362
- constructor(elem, prefix, validSuffixes) {
363
- this.elem = elem;
364
- this.prefix = prefix;
365
- this.validSuffixes = validSuffixes;
366
- __privateAdd(this, _currentClassName, null);
367
- }
368
- clearValue() {
369
- if (__privateGet(this, _currentClassName)) {
370
- this.elem.contentWrapper.classList.remove(__privateGet(this, _currentClassName));
371
- }
372
- __privateSet(this, _currentClassName, null);
373
- }
374
- setValue(suffix) {
375
- if (!this.validSuffixes.includes(suffix)) {
376
- throw new Error(`Invalid suffix: ${suffix}`);
377
- }
378
- const newClassName = `${this.prefix}${suffix}`;
379
- const changed = __privateGet(this, _currentClassName) !== newClassName;
380
- if (changed) {
381
- this.clearValue();
382
- this.elem.contentWrapper.classList.add(newClassName);
383
- __privateSet(this, _currentClassName, newClassName);
384
- }
385
- return changed;
386
- }
387
- };
388
- _currentClassName = new WeakMap();
389
-
390
358
  // src/cubing/twisty/views/node-custom-element-shims.ts
391
359
  var HTMLElementStub = class {
392
360
  };
@@ -456,85 +424,6 @@ var ManagedCustomElement = class extends HTMLElementShim {
456
424
  _cssSourceMap = new WeakMap();
457
425
  customElementsShim.define("twisty-managed-custom-element", ManagedCustomElement);
458
426
 
459
- // src/cubing/twisty/views/TwistyPlayer.css.ts
460
- var twistyPlayerCSS = new CSSSource(`
461
- :host {
462
- width: 384px;
463
- height: 256px;
464
- display: grid;
465
-
466
- -webkit-user-select: none;
467
- user-select: none;
468
- }
469
-
470
- .wrapper {
471
- display: grid;
472
- overflow: hidden;
473
- grid-template-rows: 7fr 1em 1fr;
474
- }
475
-
476
- .wrapper > * {
477
- width: inherit;
478
- height: inherit;
479
- overflow: hidden;
480
- }
481
-
482
- .wrapper.controls-none {
483
- grid-template-rows: 7fr;
484
- }
485
-
486
- .wrapper.controls-none twisty-scrubber,
487
- .wrapper.controls-none twisty-control-button-panel ,
488
- .wrapper.controls-none twisty-scrubber-v2,
489
- .wrapper.controls-none twisty-buttons-v2 {
490
- display: none;
491
- }
492
-
493
- twisty-scrubber {
494
- background: rgba(196, 196, 196, 0.5);
495
- }
496
-
497
- .wrapper.checkered {
498
- background-color: #EAEAEA;
499
- background-image: linear-gradient(45deg, #DDD 25%, transparent 25%, transparent 75%, #DDD 75%, #DDD),
500
- linear-gradient(45deg, #DDD 25%, transparent 25%, transparent 75%, #DDD 75%, #DDD);
501
- background-size: 32px 32px;
502
- background-position: 0 0, 16px 16px;
503
- }
504
-
505
- .visualization-wrapper > * {
506
- width: 100%;
507
- height: 100%;
508
- }
509
-
510
- .error-elem {
511
- width: 100%;
512
- height: 100%;
513
- display: none;
514
- place-content: center;
515
- font-family: sans-serif;
516
- box-shadow: inset 0 0 2em rgb(255, 0, 0);
517
- color: red;
518
- text-shadow: 0 0 0.2em white;
519
- background: rgba(255, 255, 255, 0.25);
520
- }
521
-
522
- .wrapper.error .visualization-wrapper {
523
- display: none;
524
- }
525
-
526
- .wrapper.error .error-elem {
527
- display: grid;
528
- }
529
- `);
530
-
531
- // src/cubing/twisty/heavy-code-imports/3d.ts
532
- var cachedConstructorProxy = null;
533
- async function proxy3D() {
534
- return cachedConstructorProxy ?? (cachedConstructorProxy = import("../3d-NFF7OGTI.js"));
535
- }
536
- var THREEJS = from(async () => (await proxy3D()).T3I);
537
-
538
427
  // src/cubing/twisty/views/TwistyViewerWrapper.css.ts
539
428
  var twistyViewerWrapperCSS = new CSSSource(`
540
429
  :host {
@@ -668,7 +557,7 @@ var KPuzzleSVGWrapper = class {
668
557
  for (const orbitName in kpuzzle.definition.orbits) {
669
558
  const orbitDefinition = kpuzzle.definition.orbits[orbitName];
670
559
  for (let idx = 0; idx < orbitDefinition.numPieces; idx++) {
671
- for (let orientation = 0; orientation < orbitDefinition.orientations; orientation++) {
560
+ for (let orientation = 0; orientation < orbitDefinition.numOrientations; orientation++) {
672
561
  const id = this.elementID(orbitName, idx, orientation);
673
562
  const elem = this.elementByID(id);
674
563
  let originalColor = elem.style.fill;
@@ -721,12 +610,12 @@ var KPuzzleSVGWrapper = class {
721
610
  const curTransformationOrbit = transformation.transformationData[orbitName];
722
611
  const nextTransformationOrbit = nextTransformation ? nextTransformation.transformationData[orbitName] : null;
723
612
  for (let idx = 0; idx < orbitDefinition.numPieces; idx++) {
724
- for (let orientation = 0; orientation < orbitDefinition.orientations; orientation++) {
613
+ for (let orientation = 0; orientation < orbitDefinition.numOrientations; orientation++) {
725
614
  const id = this.elementID(orbitName, idx, orientation);
726
- const fromCur = this.elementID(orbitName, curTransformationOrbit.permutation[idx], (orbitDefinition.orientations - curTransformationOrbit.orientation[idx] + orientation) % orbitDefinition.orientations);
615
+ const fromCur = this.elementID(orbitName, curTransformationOrbit.permutation[idx], (orbitDefinition.numOrientations - curTransformationOrbit.orientation[idx] + orientation) % orbitDefinition.numOrientations);
727
616
  let singleColor = false;
728
617
  if (nextTransformationOrbit) {
729
- const fromNext = this.elementID(orbitName, nextTransformationOrbit.permutation[idx], (orbitDefinition.orientations - nextTransformationOrbit.orientation[idx] + orientation) % orbitDefinition.orientations);
618
+ const fromNext = this.elementID(orbitName, nextTransformationOrbit.permutation[idx], (orbitDefinition.numOrientations - nextTransformationOrbit.orientation[idx] + orientation) % orbitDefinition.numOrientations);
730
619
  if (fromCur === fromNext) {
731
620
  singleColor = true;
732
621
  }
@@ -941,8 +830,36 @@ _cachedScene = new WeakMap();
941
830
  _currentTwisty2DPuzzleWrapper = new WeakMap();
942
831
  customElementsShim.define("twisty-2d-scene-wrapper", Twisty2DSceneWrapper);
943
832
 
944
- // src/cubing/twisty/views/3D/Twisty3DSceneWrapper.ts
945
- import { Vector2 } from "three";
833
+ // src/cubing/twisty/views/ClassListManager.ts
834
+ var _currentClassName;
835
+ var ClassListManager = class {
836
+ constructor(elem, prefix, validSuffixes) {
837
+ this.elem = elem;
838
+ this.prefix = prefix;
839
+ this.validSuffixes = validSuffixes;
840
+ __privateAdd(this, _currentClassName, null);
841
+ }
842
+ clearValue() {
843
+ if (__privateGet(this, _currentClassName)) {
844
+ this.elem.contentWrapper.classList.remove(__privateGet(this, _currentClassName));
845
+ }
846
+ __privateSet(this, _currentClassName, null);
847
+ }
848
+ setValue(suffix) {
849
+ if (!this.validSuffixes.includes(suffix)) {
850
+ throw new Error(`Invalid suffix: ${suffix}`);
851
+ }
852
+ const newClassName = `${this.prefix}${suffix}`;
853
+ const changed = __privateGet(this, _currentClassName) !== newClassName;
854
+ if (changed) {
855
+ this.clearValue();
856
+ this.elem.contentWrapper.classList.add(newClassName);
857
+ __privateSet(this, _currentClassName, newClassName);
858
+ }
859
+ return changed;
860
+ }
861
+ };
862
+ _currentClassName = new WeakMap();
946
863
 
947
864
  // src/cubing/twisty/views/3D/Twisty3DPuzzleWrapper.ts
948
865
  var _freshListenerManager4, _cachedTwisty3DPuzzle;
@@ -1045,7 +962,7 @@ var Twisty3DPuzzleWrapper = class {
1045
962
  }
1046
963
  async raycastMove(raycasterPromise, transformations) {
1047
964
  const puzzle = await this.twisty3DPuzzle();
1048
- if (!(puzzle instanceof PG3D)) {
965
+ if (!("experimentalGetControlTargets" in puzzle)) {
1049
966
  console.info("not PG3D! skipping raycast");
1050
967
  return;
1051
968
  }
@@ -1345,7 +1262,6 @@ async function newRenderer() {
1345
1262
  }
1346
1263
 
1347
1264
  // src/cubing/twisty/views/3D/TwistyOrbitControls.ts
1348
- import { Spherical } from "three";
1349
1265
  var INERTIA_DEFAULT = true;
1350
1266
  var INERTIA_DURATION_MS = 500;
1351
1267
  var INERTIA_TIMEOUT_MS = 50;
@@ -1707,7 +1623,7 @@ var Twisty3DSceneWrapper = class extends ManagedCustomElement {
1707
1623
  THREEJS
1708
1624
  ]);
1709
1625
  const raycaster = new three.Raycaster();
1710
- const mouse = new Vector2(e.detail.pressInfo.normalizedX, e.detail.pressInfo.normalizedY);
1626
+ const mouse = new (await THREEJS).Vector2(e.detail.pressInfo.normalizedX, e.detail.pressInfo.normalizedY);
1711
1627
  raycaster.setFromCamera(mouse, camera);
1712
1628
  return raycaster;
1713
1629
  })();
@@ -1740,11 +1656,14 @@ var Twisty3DSceneWrapper = class extends ManagedCustomElement {
1740
1656
  }
1741
1657
  async setCurrentTwisty3DPuzzleWrapper(scene, twisty3DPuzzleWrapper) {
1742
1658
  const old = __privateGet(this, _currentTwisty3DPuzzleWrapper);
1743
- __privateSet(this, _currentTwisty3DPuzzleWrapper, twisty3DPuzzleWrapper);
1744
- old?.disconnect();
1745
- scene.add(await twisty3DPuzzleWrapper.twisty3DPuzzle());
1746
- if (old) {
1747
- scene.remove(await old.twisty3DPuzzle());
1659
+ try {
1660
+ __privateSet(this, _currentTwisty3DPuzzleWrapper, twisty3DPuzzleWrapper);
1661
+ old?.disconnect();
1662
+ scene.add(await twisty3DPuzzleWrapper.twisty3DPuzzle());
1663
+ } finally {
1664
+ if (old) {
1665
+ scene.remove(await old.twisty3DPuzzle());
1666
+ }
1748
1667
  }
1749
1668
  }
1750
1669
  async onPuzzle(inputs) {
@@ -2135,12 +2054,14 @@ input {
2135
2054
  var SLOW_DOWN_SCRUBBING = false;
2136
2055
  var isMouseDown = false;
2137
2056
  globalSafeDocument?.addEventListener("mousedown", function(event) {
2138
- if (event.which)
2057
+ if (event.which) {
2139
2058
  isMouseDown = true;
2059
+ }
2140
2060
  }, true);
2141
2061
  globalSafeDocument?.addEventListener("mouseup", function(event) {
2142
- if (event.which)
2062
+ if (event.which) {
2143
2063
  isMouseDown = false;
2064
+ }
2144
2065
  }, true);
2145
2066
  var y = 0;
2146
2067
  var clickNum = 0;
@@ -2230,7 +2151,6 @@ _inputElem = new WeakMap();
2230
2151
  customElementsShim.define("twisty-scrubber-v2", TwistyScrubberV2);
2231
2152
 
2232
2153
  // src/cubing/twisty/views/screenshot.ts
2233
- import { WebGLRenderer } from "three";
2234
2154
  var cachedCamera = null;
2235
2155
  async function screenshot(model, options) {
2236
2156
  const width = options?.width ?? 2048;
@@ -2248,7 +2168,7 @@ async function screenshot(model, options) {
2248
2168
  scene.add(await twisty3DWrapper.twisty3DPuzzle());
2249
2169
  const orbitCoordinates = await model.orbitCoordinatesProp.get();
2250
2170
  await setCameraFromOrbitCoordinates(camera, orbitCoordinates);
2251
- const renderer = new WebGLRenderer({
2171
+ const renderer = new (await THREEJS).WebGLRenderer({
2252
2172
  antialias: true,
2253
2173
  alpha: true
2254
2174
  });
@@ -2277,6 +2197,78 @@ function downloadURL(url, name, extension = "png") {
2277
2197
  a.click();
2278
2198
  }
2279
2199
 
2200
+ // src/cubing/twisty/views/TwistyPlayer.css.ts
2201
+ var twistyPlayerCSS = new CSSSource(`
2202
+ :host {
2203
+ width: 384px;
2204
+ height: 256px;
2205
+ display: grid;
2206
+
2207
+ -webkit-user-select: none;
2208
+ user-select: none;
2209
+ }
2210
+
2211
+ .wrapper {
2212
+ display: grid;
2213
+ overflow: hidden;
2214
+ grid-template-rows: 7fr 1em 1fr;
2215
+ }
2216
+
2217
+ .wrapper > * {
2218
+ width: inherit;
2219
+ height: inherit;
2220
+ overflow: hidden;
2221
+ }
2222
+
2223
+ .wrapper.controls-none {
2224
+ grid-template-rows: 7fr;
2225
+ }
2226
+
2227
+ .wrapper.controls-none twisty-scrubber,
2228
+ .wrapper.controls-none twisty-control-button-panel ,
2229
+ .wrapper.controls-none twisty-scrubber-v2,
2230
+ .wrapper.controls-none twisty-buttons-v2 {
2231
+ display: none;
2232
+ }
2233
+
2234
+ twisty-scrubber {
2235
+ background: rgba(196, 196, 196, 0.5);
2236
+ }
2237
+
2238
+ .wrapper.checkered {
2239
+ background-color: #EAEAEA;
2240
+ background-image: linear-gradient(45deg, #DDD 25%, transparent 25%, transparent 75%, #DDD 75%, #DDD),
2241
+ linear-gradient(45deg, #DDD 25%, transparent 25%, transparent 75%, #DDD 75%, #DDD);
2242
+ background-size: 32px 32px;
2243
+ background-position: 0 0, 16px 16px;
2244
+ }
2245
+
2246
+ .visualization-wrapper > * {
2247
+ width: 100%;
2248
+ height: 100%;
2249
+ }
2250
+
2251
+ .error-elem {
2252
+ width: 100%;
2253
+ height: 100%;
2254
+ display: none;
2255
+ place-content: center;
2256
+ font-family: sans-serif;
2257
+ box-shadow: inset 0 0 2em rgb(255, 0, 0);
2258
+ color: red;
2259
+ text-shadow: 0 0 0.2em white;
2260
+ background: rgba(255, 255, 255, 0.25);
2261
+ }
2262
+
2263
+ .wrapper.error .visualization-wrapper {
2264
+ display: none;
2265
+ }
2266
+
2267
+ .wrapper.error .error-elem {
2268
+ display: grid;
2269
+ }
2270
+ `);
2271
+
2280
2272
  // src/cubing/twisty/model/props/puzzle/state/AlgProp.ts
2281
2273
  var AlgIssues = class {
2282
2274
  constructor(issues) {
@@ -2789,8 +2781,9 @@ var LocalSimulMoves = class extends TraversalUp {
2789
2781
  return [];
2790
2782
  }
2791
2783
  for (const unit of alg.units()) {
2792
- if (!unit.is(Move))
2784
+ if (!unit.is(Move)) {
2793
2785
  return this.traverseAlg(alg);
2786
+ }
2794
2787
  }
2795
2788
  const moves = Array.from(alg.units());
2796
2789
  let maxSimulDur = defaultDurationForAmount(moves[0].amount);
@@ -3446,10 +3439,13 @@ var IndexerConstructorProp = class extends TwistyPropDerived {
3446
3439
  };
3447
3440
 
3448
3441
  // src/cubing/twisty/model/props/puzzle/state/PuzzleAlgProp.ts
3442
+ var validate = true;
3449
3443
  var PuzzleAlgProp = class extends TwistyPropDerived {
3450
3444
  async derive(inputs) {
3451
3445
  try {
3452
- inputs.kpuzzle.algToTransformation(inputs.algWithIssues.alg);
3446
+ if (validate) {
3447
+ inputs.kpuzzle.algToTransformation(inputs.algWithIssues.alg);
3448
+ }
3453
3449
  return inputs.algWithIssues;
3454
3450
  } catch (e) {
3455
3451
  return {
@@ -5022,16 +5018,148 @@ padSuffix_fn = function(s) {
5022
5018
  };
5023
5019
  _highlightedLeaf = new WeakMap();
5024
5020
  customElementsShim.define("twisty-alg-editor", TwistyAlgEditor);
5021
+
5022
+ // src/cubing/twisty/views/twizzle/TwizzleLink.css.ts
5023
+ var twizzleLinkCSS = new CSSSource(`
5024
+ .wrapper {
5025
+ background: rgb(255, 245, 235);
5026
+ display: grid;
5027
+ grid-template-columns: 1fr;
5028
+ border: 1px solid rgba(0, 0, 0, 0.25);
5029
+ }
5030
+
5031
+ .setup-alg, twisty-alg-viewer {
5032
+ padding: 0.5em 1em;
5033
+ }
5034
+
5035
+ .heading {
5036
+ background: rgba(255, 230, 210, 1);
5037
+ font-weight: bold;
5038
+ padding: 0.25em 0.5em;
5039
+ }
5040
+
5041
+ twisty-player {
5042
+ width: 100%;
5043
+ }
5044
+
5045
+ twisty-player + .heading {
5046
+ padding-top: 0.5em;
5047
+ }
5048
+ `);
5049
+
5050
+ // src/cubing/twisty/views/twizzle/url-params.ts
5051
+ function updateURL(url) {
5052
+ window.history.replaceState("", "", url.toString());
5053
+ }
5054
+ var _prefix;
5055
+ var URLParamUpdater = class {
5056
+ constructor(model, options) {
5057
+ __privateAdd(this, _prefix, void 0);
5058
+ __privateSet(this, _prefix, options?.prefix ?? "");
5059
+ this.listenToAlgProp(model.algProp, "alg");
5060
+ this.listenToAlgProp(model.setupProp, "setup-alg");
5061
+ this.listenToStringSourceProp(model.stickeringProp, "stickering");
5062
+ this.listenToStringSourceProp(model.setupAnchorProp, "setup-anchor");
5063
+ this.listenToStringOrNoValueProp(model.puzzleIDRequestProp, "puzzle", NO_VALUE);
5064
+ this.listenToStringOrNoValueProp(model.puzzleDescriptionRequestProp, "puzzle-description", NO_VALUE);
5065
+ }
5066
+ setURLParam(unprefixedKey, value, defaultString) {
5067
+ const prefixedKey = __privateGet(this, _prefix) + unprefixedKey;
5068
+ const url = new URL(location.href);
5069
+ if (value === defaultString) {
5070
+ url.searchParams.delete(prefixedKey);
5071
+ } else {
5072
+ url.searchParams.set(prefixedKey, value);
5073
+ }
5074
+ updateURL(url);
5075
+ }
5076
+ async listenToStringSourceProp(prop, key, defaultString) {
5077
+ const actualDefaultString = defaultString ?? await prop.getDefaultValue();
5078
+ prop.addFreshListener((s) => {
5079
+ this.setURLParam(key, s, actualDefaultString);
5080
+ });
5081
+ }
5082
+ async listenToStringOrNoValueProp(prop, key, defaultString) {
5083
+ prop.addFreshListener((s) => {
5084
+ if (s === NO_VALUE) {
5085
+ s = defaultString;
5086
+ }
5087
+ if (s === NO_VALUE) {
5088
+ this.setURLParam(key, "", "");
5089
+ } else {
5090
+ this.setURLParam(key, s, "");
5091
+ }
5092
+ });
5093
+ }
5094
+ listenToAlgProp(prop, key) {
5095
+ prop.addFreshListener((algWithIssues) => {
5096
+ this.setURLParam(key, algWithIssues.alg.toString(), "");
5097
+ });
5098
+ }
5099
+ };
5100
+ _prefix = new WeakMap();
5101
+ function getConfigFromURL(prefix = "", url = location.href) {
5102
+ const paramMapping = {
5103
+ "alg": "alg",
5104
+ "setup-alg": "experimental-setup-alg",
5105
+ "setup-anchor": "experimental-setup-anchor",
5106
+ "puzzle": "puzzle",
5107
+ "stickering": "experimental-stickering",
5108
+ "puzzle-description": "experimental-puzzle-description"
5109
+ };
5110
+ const params = new URL(url).searchParams;
5111
+ const config = {};
5112
+ console.log(paramMapping);
5113
+ for (const [ourParam, twistyPlayerParam] of Object.entries(paramMapping)) {
5114
+ const paramValue = params.get(prefix + ourParam);
5115
+ if (paramValue !== null) {
5116
+ const configKey = twistyPlayerAttributeMap[twistyPlayerParam];
5117
+ config[configKey] = paramValue;
5118
+ }
5119
+ }
5120
+ return config;
5121
+ }
5122
+
5123
+ // src/cubing/twisty/views/twizzle/TwizzleLink.ts
5124
+ var TwizzleLink = class extends ManagedCustomElement {
5125
+ constructor() {
5126
+ super({ mode: "open" });
5127
+ this.twistyPlayer = null;
5128
+ this.a = null;
5129
+ }
5130
+ connectedCallback() {
5131
+ this.addCSS(twizzleLinkCSS);
5132
+ this.a = this.querySelector("a");
5133
+ if (this.a) {
5134
+ const config = getConfigFromURL("", this.a.href);
5135
+ this.twistyPlayer = this.addElement(new TwistyPlayer(config));
5136
+ if (config.experimentalSetupAlg) {
5137
+ this.addHeading("Setup");
5138
+ const setupAlgDiv = this.addElement(document.createElement("div"));
5139
+ setupAlgDiv.classList.add("setup-alg");
5140
+ setupAlgDiv.textContent = new Alg(config.experimentalSetupAlg).toString();
5141
+ }
5142
+ this.addHeading("Moves");
5143
+ const twistyAlgViewer = this.addElement(new TwistyAlgViewer({ twistyPlayer: this.twistyPlayer }));
5144
+ twistyAlgViewer.part.add("twisty-alg-viewer");
5145
+ }
5146
+ }
5147
+ addHeading(text) {
5148
+ const headingDiv = this.addElement(document.createElement("div"));
5149
+ headingDiv.classList.add("heading");
5150
+ headingDiv.textContent = text;
5151
+ }
5152
+ };
5153
+ customElementsShim.define("twizzle-link", TwizzleLink);
5025
5154
  export {
5026
- Cube3D,
5027
5155
  NO_VALUE as EXPERIMENTAL_PROP_NO_VALUE,
5028
5156
  KPuzzleSVGWrapper as ExperimentalKPuzzleSVGWrapper,
5029
- PG3D,
5030
5157
  SimpleAlgIndexer,
5031
5158
  TreeAlgIndexer,
5032
5159
  TwistyAlgEditor,
5033
5160
  TwistyAlgViewer,
5034
5161
  TwistyPlayer,
5162
+ TwizzleLink,
5035
5163
  backViewLayouts,
5036
5164
  debugShowRenderStats as experimentalDebugShowRenderStats,
5037
5165
  experimentalForceNewRendererSharing