cubing 0.29.0 → 0.29.2
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.
- package/README.md +1 -6
- package/dist/esm/alg/index.js +1 -1
- package/dist/esm/bluetooth/index.js +36 -31
- package/dist/esm/bluetooth/index.js.map +2 -2
- package/dist/esm/{chunk-NI7U4XAZ.js → chunk-7OIUETFU.js} +9 -8
- package/dist/esm/chunk-7OIUETFU.js.map +7 -0
- package/dist/esm/{chunk-DZGFGBKT.js → chunk-EOEJDDXN.js} +95 -58
- package/dist/esm/chunk-EOEJDDXN.js.map +7 -0
- package/dist/esm/{chunk-WXCNEGW3.js → chunk-HR5D6SD4.js} +2 -2
- package/dist/esm/{chunk-WXCNEGW3.js.map → chunk-HR5D6SD4.js.map} +2 -2
- package/dist/esm/{chunk-LV7IKG36.js → chunk-J5KJ2WWA.js} +35 -34
- package/dist/esm/chunk-J5KJ2WWA.js.map +7 -0
- package/dist/esm/{chunk-ZNAYJGVL.js → chunk-NUMCMGLU.js} +2 -2
- package/dist/esm/{chunk-ZNAYJGVL.js.map → chunk-NUMCMGLU.js.map} +0 -0
- package/dist/esm/{chunk-LSCTPPWV.js → chunk-OT7AIIFN.js} +4 -4
- package/dist/esm/chunk-OT7AIIFN.js.map +7 -0
- package/dist/esm/{chunk-XU5ILFX5.js → chunk-POCUG6QW.js} +6 -4
- package/dist/esm/{chunk-XU5ILFX5.js.map → chunk-POCUG6QW.js.map} +2 -2
- package/dist/esm/{chunk-OX6O2ZO5.js → chunk-QHWK5RXN.js} +1 -1
- package/dist/esm/chunk-QHWK5RXN.js.map +7 -0
- package/dist/esm/{chunk-GW4FGG42.js → chunk-RH4WZIGC.js} +2 -2
- package/dist/esm/{chunk-GW4FGG42.js.map → chunk-RH4WZIGC.js.map} +0 -0
- package/dist/esm/{chunk-TGPS3CXW.js → chunk-RIXFKOD6.js} +7 -7
- package/dist/esm/{chunk-TGPS3CXW.js.map → chunk-RIXFKOD6.js.map} +2 -2
- package/dist/esm/{chunk-2IZUSAXQ.js → chunk-WEYPAZEE.js} +1 -1
- package/dist/esm/{chunk-2IZUSAXQ.js.map → chunk-WEYPAZEE.js.map} +1 -1
- package/dist/esm/{chunk-Q4W5ZR4U.js → chunk-WNZXZ4MW.js} +10 -8
- package/dist/esm/{chunk-Q4W5ZR4U.js.map → chunk-WNZXZ4MW.js.map} +2 -2
- package/dist/esm/{chunk-PYWGREIP.js → chunk-YD2TMJI2.js} +33 -31
- package/dist/esm/chunk-YD2TMJI2.js.map +7 -0
- package/dist/esm/kpuzzle/index.js +2 -2
- package/dist/esm/notation/index.js +2 -2
- package/dist/esm/protocol/index.js +4 -4
- package/dist/esm/puzzle-geometry/index.js +114 -88
- package/dist/esm/puzzle-geometry/index.js.map +2 -2
- package/dist/esm/puzzles/index.js +10 -6
- package/dist/esm/{puzzles-dynamic-side-events-5C7LMBWX.js → puzzles-dynamic-side-events-3K26JTOG.js} +2 -2
- package/dist/esm/{puzzles-dynamic-side-events-5C7LMBWX.js.map → puzzles-dynamic-side-events-3K26JTOG.js.map} +1 -1
- package/dist/esm/scramble/index.js +3 -3
- package/dist/esm/search/index.js +8 -8
- package/dist/esm/{search-dynamic-sgs-side-events-AYX7MZO7.js → search-dynamic-sgs-side-events-AE3TLLPA.js} +6 -6
- package/dist/esm/search-dynamic-sgs-side-events-AE3TLLPA.js.map +7 -0
- package/dist/esm/{search-dynamic-sgs-unofficial-DLJOJFJL.js → search-dynamic-sgs-unofficial-JUXMNMNO.js} +122 -67
- package/dist/esm/search-dynamic-sgs-unofficial-JUXMNMNO.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-3x3x3-7XZTYQMO.js → search-dynamic-solve-3x3x3-SA75BI5I.js} +649 -405
- package/dist/esm/search-dynamic-solve-3x3x3-SA75BI5I.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-4x4x4-CWWTFKMR.js → search-dynamic-solve-4x4x4-ALKH43DT.js} +399 -150
- package/dist/esm/search-dynamic-solve-4x4x4-ALKH43DT.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-fto-4LI23P6K.js → search-dynamic-solve-fto-5B5ZESQC.js} +74 -34
- package/dist/esm/search-dynamic-solve-fto-5B5ZESQC.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-kilominx-3HEVQ4MC.js → search-dynamic-solve-kilominx-OY4VIARG.js} +136 -71
- package/dist/esm/search-dynamic-solve-kilominx-OY4VIARG.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-master_tetraminx-UB32C7MM.js → search-dynamic-solve-master_tetraminx-GE2BTRGI.js} +84 -41
- package/dist/esm/search-dynamic-solve-master_tetraminx-GE2BTRGI.js.map +7 -0
- package/dist/esm/{search-dynamic-solve-sq1-HA72TYF2.js → search-dynamic-solve-sq1-W6PSSLR6.js} +129 -54
- package/dist/esm/search-dynamic-solve-sq1-W6PSSLR6.js.map +7 -0
- package/dist/esm/{search-worker-inside-generated-string-AMEXYCKK.js → search-worker-inside-generated-string-7HYFSSPW.js} +28 -28
- package/dist/esm/search-worker-inside-generated-string-7HYFSSPW.js.map +7 -0
- package/dist/esm/{search-worker-js-entry-TP2T3NUL.js → search-worker-js-entry-SNUA3SOE.js} +44 -35
- package/dist/esm/search-worker-js-entry-SNUA3SOE.js.map +7 -0
- package/dist/esm/{search-worker-ts-entry-NEH77S4I.js → search-worker-ts-entry-LNB7KNFY.js} +3 -3
- package/dist/esm/{search-worker-ts-entry-NEH77S4I.js.map → search-worker-ts-entry-LNB7KNFY.js.map} +0 -0
- package/dist/esm/stream/index.js +1 -1
- package/dist/esm/stream/index.js.map +2 -2
- package/dist/esm/twisty/index.js +287 -273
- package/dist/esm/twisty/index.js.map +2 -2
- package/dist/esm/{twisty-dynamic-3d-D3ZDBJUH.js → twisty-dynamic-3d-PU74EKRA.js} +57 -59
- package/dist/esm/twisty-dynamic-3d-PU74EKRA.js.map +7 -0
- package/dist/types/{TwizzleLink-bef52ecd.d.ts → TwizzleLink-ce20e840.d.ts} +1 -1
- package/dist/types/puzzles/index.d.ts +5 -3
- package/dist/types/twisty/index.d.ts +2 -2
- package/package.json +51 -147
- package/dist/esm/chunk-DZGFGBKT.js.map +0 -7
- package/dist/esm/chunk-LSCTPPWV.js.map +0 -7
- package/dist/esm/chunk-LV7IKG36.js.map +0 -7
- package/dist/esm/chunk-NI7U4XAZ.js.map +0 -7
- package/dist/esm/chunk-OX6O2ZO5.js.map +0 -7
- package/dist/esm/chunk-PYWGREIP.js.map +0 -7
- package/dist/esm/search-dynamic-sgs-side-events-AYX7MZO7.js.map +0 -7
- package/dist/esm/search-dynamic-sgs-unofficial-DLJOJFJL.js.map +0 -7
- package/dist/esm/search-dynamic-solve-3x3x3-7XZTYQMO.js.map +0 -7
- package/dist/esm/search-dynamic-solve-4x4x4-CWWTFKMR.js.map +0 -7
- package/dist/esm/search-dynamic-solve-fto-4LI23P6K.js.map +0 -7
- package/dist/esm/search-dynamic-solve-kilominx-3HEVQ4MC.js.map +0 -7
- package/dist/esm/search-dynamic-solve-master_tetraminx-UB32C7MM.js.map +0 -7
- package/dist/esm/search-dynamic-solve-sq1-HA72TYF2.js.map +0 -7
- package/dist/esm/search-worker-inside-generated-string-AMEXYCKK.js.map +0 -7
- package/dist/esm/search-worker-js-entry-TP2T3NUL.js.map +0 -7
- package/dist/esm/twisty-dynamic-3d-D3ZDBJUH.js.map +0 -7
package/dist/esm/twisty/index.js
CHANGED
|
@@ -17,20 +17,20 @@ import {
|
|
|
17
17
|
proxy3D,
|
|
18
18
|
setCameraFromOrbitCoordinates,
|
|
19
19
|
setTwistyDebug
|
|
20
|
-
} from "../chunk-
|
|
21
|
-
import "../chunk-
|
|
20
|
+
} from "../chunk-J5KJ2WWA.js";
|
|
21
|
+
import "../chunk-QHWK5RXN.js";
|
|
22
22
|
import {
|
|
23
23
|
countAnimatedLeaves,
|
|
24
24
|
countMoves
|
|
25
|
-
} from "../chunk-
|
|
25
|
+
} from "../chunk-NUMCMGLU.js";
|
|
26
26
|
import {
|
|
27
27
|
cube3x3x3,
|
|
28
28
|
puzzles
|
|
29
|
-
} from "../chunk-
|
|
29
|
+
} from "../chunk-EOEJDDXN.js";
|
|
30
30
|
import {
|
|
31
31
|
customPGPuzzleLoader
|
|
32
|
-
} from "../chunk-
|
|
33
|
-
import "../chunk-
|
|
32
|
+
} from "../chunk-YD2TMJI2.js";
|
|
33
|
+
import "../chunk-POCUG6QW.js";
|
|
34
34
|
import {
|
|
35
35
|
Alg,
|
|
36
36
|
AlgBuilder,
|
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
direct,
|
|
44
44
|
directedGenerator,
|
|
45
45
|
experimentalAppendMove
|
|
46
|
-
} from "../chunk-
|
|
46
|
+
} from "../chunk-7OIUETFU.js";
|
|
47
47
|
import "../chunk-SBZRVSPK.js";
|
|
48
48
|
|
|
49
49
|
// src/cubing/twisty/controllers/AnimationTypes.ts
|
|
@@ -329,7 +329,7 @@ var TwistyPlayerController = class {
|
|
|
329
329
|
// src/cubing/twisty/model/props/viewer/ControlPanelProp.ts
|
|
330
330
|
var controlsLocations = {
|
|
331
331
|
"bottom-row": true,
|
|
332
|
-
|
|
332
|
+
none: true
|
|
333
333
|
};
|
|
334
334
|
var ControlPanelProp = class extends SimpleTwistyPropSource {
|
|
335
335
|
getDefaultValue() {
|
|
@@ -338,7 +338,8 @@ var ControlPanelProp = class extends SimpleTwistyPropSource {
|
|
|
338
338
|
};
|
|
339
339
|
|
|
340
340
|
// src/cubing/twisty/views/TwistyViewerWrapper.css.ts
|
|
341
|
-
var twistyViewerWrapperCSS = new CSSSource(
|
|
341
|
+
var twistyViewerWrapperCSS = new CSSSource(
|
|
342
|
+
`
|
|
342
343
|
:host {
|
|
343
344
|
width: 384px;
|
|
344
345
|
height: 256px;
|
|
@@ -376,10 +377,12 @@ var twistyViewerWrapperCSS = new CSSSource(`
|
|
|
376
377
|
grid-row: 1 / 2;
|
|
377
378
|
grid-column: 2 / 3;
|
|
378
379
|
}
|
|
379
|
-
`
|
|
380
|
+
`
|
|
381
|
+
);
|
|
380
382
|
|
|
381
383
|
// src/cubing/twisty/views/2D/Twisty2DPuzzle.css.ts
|
|
382
|
-
var twisty2DSVGCSS = new CSSSource(
|
|
384
|
+
var twisty2DSVGCSS = new CSSSource(
|
|
385
|
+
`
|
|
383
386
|
:host {
|
|
384
387
|
width: 384px;
|
|
385
388
|
height: 256px;
|
|
@@ -410,47 +413,48 @@ svg {
|
|
|
410
413
|
from { opacity: 0; }
|
|
411
414
|
to { opacity: 1; }
|
|
412
415
|
}
|
|
413
|
-
`
|
|
416
|
+
`
|
|
417
|
+
);
|
|
414
418
|
|
|
415
419
|
// src/cubing/twisty/views/2D/KPuzzleSVGWrapper.ts
|
|
416
420
|
var xmlns = "http://www.w3.org/2000/svg";
|
|
417
421
|
var svgCounter = 0;
|
|
418
422
|
function nextSVGID() {
|
|
419
423
|
svgCounter += 1;
|
|
420
|
-
return
|
|
424
|
+
return `svg${svgCounter.toString()}`;
|
|
421
425
|
}
|
|
422
426
|
var colorMaps = {
|
|
423
427
|
dim: {
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
+
white: "#dddddd",
|
|
429
|
+
orange: "#884400",
|
|
430
|
+
limegreen: "#008800",
|
|
431
|
+
red: "#660000",
|
|
428
432
|
"rgb(34, 102, 255)": "#000088",
|
|
429
|
-
|
|
433
|
+
yellow: "#888800"
|
|
430
434
|
},
|
|
431
435
|
oriented: {
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
+
white: "#44ddcc",
|
|
437
|
+
orange: "#44ddcc",
|
|
438
|
+
limegreen: "#44ddcc",
|
|
439
|
+
red: "#44ddcc",
|
|
436
440
|
"rgb(34, 102, 255)": "#44ddcc",
|
|
437
|
-
|
|
441
|
+
yellow: "#44ddcc"
|
|
438
442
|
},
|
|
439
443
|
ignored: {
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
+
white: "#444444",
|
|
445
|
+
orange: "#444444",
|
|
446
|
+
limegreen: "#444444",
|
|
447
|
+
red: "#444444",
|
|
444
448
|
"rgb(34, 102, 255)": "#444444",
|
|
445
|
-
|
|
449
|
+
yellow: "#444444"
|
|
446
450
|
},
|
|
447
451
|
invisible: {
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
+
white: "#00000000",
|
|
453
|
+
orange: "#00000000",
|
|
454
|
+
limegreen: "#00000000",
|
|
455
|
+
red: "#00000000",
|
|
452
456
|
"rgb(34, 102, 255)": "#00000000",
|
|
453
|
-
|
|
457
|
+
yellow: "#00000000"
|
|
454
458
|
}
|
|
455
459
|
};
|
|
456
460
|
var KPuzzleSVGWrapper = class {
|
|
@@ -596,10 +600,10 @@ var KPuzzleSVGWrapper = class {
|
|
|
596
600
|
"stop-color",
|
|
597
601
|
this.originalColors[fromCur]
|
|
598
602
|
);
|
|
599
|
-
this.gradients[id].children[1].setAttribute("offset",
|
|
600
|
-
this.gradients[id].children[2].setAttribute("offset",
|
|
601
|
-
this.gradients[id].children[3].setAttribute("offset",
|
|
602
|
-
this.gradients[id].children[4].setAttribute("offset",
|
|
603
|
+
this.gradients[id].children[1].setAttribute("offset", "100%");
|
|
604
|
+
this.gradients[id].children[2].setAttribute("offset", "100%");
|
|
605
|
+
this.gradients[id].children[3].setAttribute("offset", "100%");
|
|
606
|
+
this.gradients[id].children[4].setAttribute("offset", "100%");
|
|
603
607
|
}
|
|
604
608
|
}
|
|
605
609
|
}
|
|
@@ -611,7 +615,7 @@ var KPuzzleSVGWrapper = class {
|
|
|
611
615
|
"radialGradient"
|
|
612
616
|
);
|
|
613
617
|
grad.setAttribute("id", `grad-${this.svgID}-${id}`);
|
|
614
|
-
grad.setAttribute("r",
|
|
618
|
+
grad.setAttribute("r", "70.7107%");
|
|
615
619
|
const stopDefs = [
|
|
616
620
|
{ offset: 0, color: originalColor },
|
|
617
621
|
{ offset: 0, color: originalColor },
|
|
@@ -630,10 +634,10 @@ var KPuzzleSVGWrapper = class {
|
|
|
630
634
|
return grad;
|
|
631
635
|
}
|
|
632
636
|
elementID(orbitName, idx, orientation) {
|
|
633
|
-
return orbitName
|
|
637
|
+
return `${orbitName}-l${idx}-o${orientation}`;
|
|
634
638
|
}
|
|
635
639
|
elementByID(id) {
|
|
636
|
-
return this.wrapperElement.querySelector(
|
|
640
|
+
return this.wrapperElement.querySelector(`#${id}`);
|
|
637
641
|
}
|
|
638
642
|
};
|
|
639
643
|
|
|
@@ -651,14 +655,11 @@ var Twisty2DPuzzle = class extends ManagedCustomElement {
|
|
|
651
655
|
this.#freshListenerManager = new FreshListenerManager();
|
|
652
656
|
this.addCSS(twisty2DSVGCSS);
|
|
653
657
|
this.resetSVG();
|
|
654
|
-
this.#freshListenerManager.addListener(
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
if (puzzleLoader?.id !== puzzleID) {
|
|
658
|
-
this.disconnect();
|
|
659
|
-
}
|
|
658
|
+
this.#freshListenerManager.addListener(this.model.puzzleID, (puzzleID) => {
|
|
659
|
+
if (puzzleLoader?.id !== puzzleID) {
|
|
660
|
+
this.disconnect();
|
|
660
661
|
}
|
|
661
|
-
);
|
|
662
|
+
});
|
|
662
663
|
this.#freshListenerManager.addListener(
|
|
663
664
|
this.model.legacyPosition,
|
|
664
665
|
this.onPositionChange.bind(this)
|
|
@@ -741,12 +742,9 @@ var Twisty2DPuzzleWrapper = class {
|
|
|
741
742
|
this.puzzleLoader = puzzleLoader;
|
|
742
743
|
this.effectiveVisualization = effectiveVisualization;
|
|
743
744
|
this.twisty2DPuzzle();
|
|
744
|
-
this.#freshListenerManager.addListener(
|
|
745
|
-
this.
|
|
746
|
-
|
|
747
|
-
(await this.twisty2DPuzzle()).experimentalSetStickering(stickering);
|
|
748
|
-
}
|
|
749
|
-
);
|
|
745
|
+
this.#freshListenerManager.addListener(this.model.twistySceneModel.stickering, async (stickering) => {
|
|
746
|
+
(await this.twisty2DPuzzle()).experimentalSetStickering(stickering);
|
|
747
|
+
});
|
|
750
748
|
}
|
|
751
749
|
#freshListenerManager = new FreshListenerManager();
|
|
752
750
|
disconnect() {
|
|
@@ -873,61 +871,46 @@ var Twisty3DPuzzleWrapper = class extends EventTarget {
|
|
|
873
871
|
this.puzzleLoader = puzzleLoader;
|
|
874
872
|
this.visualizationStrategy = visualizationStrategy;
|
|
875
873
|
this.twisty3DPuzzle();
|
|
876
|
-
this.#freshListenerManager.addListener(
|
|
877
|
-
this.
|
|
878
|
-
|
|
879
|
-
if (this.puzzleLoader.id !== puzzleLoader2.id) {
|
|
880
|
-
this.disconnect();
|
|
881
|
-
}
|
|
882
|
-
}
|
|
883
|
-
);
|
|
884
|
-
this.#freshListenerManager.addListener(
|
|
885
|
-
this.model.legacyPosition,
|
|
886
|
-
async (position) => {
|
|
887
|
-
try {
|
|
888
|
-
(await this.twisty3DPuzzle()).onPositionChange(position);
|
|
889
|
-
this.scheduleRender();
|
|
890
|
-
} catch (e) {
|
|
891
|
-
this.disconnect();
|
|
892
|
-
}
|
|
874
|
+
this.#freshListenerManager.addListener(this.model.puzzleLoader, (puzzleLoader2) => {
|
|
875
|
+
if (this.puzzleLoader.id !== puzzleLoader2.id) {
|
|
876
|
+
this.disconnect();
|
|
893
877
|
}
|
|
894
|
-
);
|
|
895
|
-
this.#freshListenerManager.addListener(
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
(await this.twisty3DPuzzle()).experimentalUpdateOptions({
|
|
899
|
-
hintFacelets: hintFaceletStyle === "auto" ? "floating" : hintFaceletStyle
|
|
900
|
-
});
|
|
878
|
+
});
|
|
879
|
+
this.#freshListenerManager.addListener(this.model.legacyPosition, async (position) => {
|
|
880
|
+
try {
|
|
881
|
+
(await this.twisty3DPuzzle()).onPositionChange(position);
|
|
901
882
|
this.scheduleRender();
|
|
883
|
+
} catch (e) {
|
|
884
|
+
this.disconnect();
|
|
902
885
|
}
|
|
903
|
-
);
|
|
904
|
-
this.#freshListenerManager.addListener(
|
|
905
|
-
this.
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
886
|
+
});
|
|
887
|
+
this.#freshListenerManager.addListener(this.model.twistySceneModel.hintFacelet, async (hintFaceletStyle) => {
|
|
888
|
+
(await this.twisty3DPuzzle()).experimentalUpdateOptions({
|
|
889
|
+
hintFacelets: hintFaceletStyle === "auto" ? "floating" : hintFaceletStyle
|
|
890
|
+
});
|
|
891
|
+
this.scheduleRender();
|
|
892
|
+
});
|
|
893
|
+
this.#freshListenerManager.addListener(this.model.twistySceneModel.foundationDisplay, async (foundationDisplay) => {
|
|
894
|
+
(await this.twisty3DPuzzle()).experimentalUpdateOptions({
|
|
895
|
+
showFoundation: foundationDisplay !== "none"
|
|
896
|
+
});
|
|
897
|
+
this.scheduleRender();
|
|
898
|
+
});
|
|
899
|
+
this.#freshListenerManager.addListener(this.model.twistySceneModel.stickering, async (stickering) => {
|
|
900
|
+
if ("setStickering" in await this.twisty3DPuzzle()) {
|
|
901
|
+
(await this.twisty3DPuzzle()).setStickering(stickering);
|
|
910
902
|
this.scheduleRender();
|
|
911
|
-
}
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
903
|
+
} else {
|
|
904
|
+
if ("appearance" in this.puzzleLoader) {
|
|
905
|
+
const [twisty3D, appearancePromise] = await Promise.all([
|
|
906
|
+
this.twisty3DPuzzle(),
|
|
907
|
+
this.puzzleLoader.appearance(stickering ?? "full")
|
|
908
|
+
]);
|
|
909
|
+
twisty3D.experimentalSetAppearance(appearancePromise);
|
|
918
910
|
this.scheduleRender();
|
|
919
|
-
} else {
|
|
920
|
-
if ("appearance" in this.puzzleLoader) {
|
|
921
|
-
const [twisty3D, appearancePromise] = await Promise.all([
|
|
922
|
-
this.twisty3DPuzzle(),
|
|
923
|
-
this.puzzleLoader.appearance(stickering ?? "full")
|
|
924
|
-
]);
|
|
925
|
-
twisty3D.experimentalSetAppearance(appearancePromise);
|
|
926
|
-
this.scheduleRender();
|
|
927
|
-
}
|
|
928
911
|
}
|
|
929
912
|
}
|
|
930
|
-
);
|
|
913
|
+
});
|
|
931
914
|
this.#freshListenerManager.addMultiListener3(
|
|
932
915
|
[
|
|
933
916
|
this.model.twistySceneModel.stickering,
|
|
@@ -964,14 +947,11 @@ var Twisty3DPuzzleWrapper = class extends EventTarget {
|
|
|
964
947
|
this.model.twistySceneModel.hintStickerSprite.get(),
|
|
965
948
|
this.model.twistySceneModel.stickering.get()
|
|
966
949
|
]);
|
|
967
|
-
return (await proxyPromise).cube3DShim(
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
experimentalStickering
|
|
973
|
-
}
|
|
974
|
-
);
|
|
950
|
+
return (await proxyPromise).cube3DShim(() => this.schedulable.scheduleRender(), {
|
|
951
|
+
foundationSprite,
|
|
952
|
+
hintSprite,
|
|
953
|
+
experimentalStickering
|
|
954
|
+
});
|
|
975
955
|
} else {
|
|
976
956
|
const [hintFacelets, foundationSprite, hintSprite] = await Promise.all([
|
|
977
957
|
this.model.twistySceneModel.hintFacelet.get(),
|
|
@@ -1159,7 +1139,8 @@ var Twisty3DSceneWrapper = class extends ManagedCustomElement {
|
|
|
1159
1139
|
customElementsShim.define("twisty-3d-scene-wrapper", Twisty3DSceneWrapper);
|
|
1160
1140
|
|
|
1161
1141
|
// src/cubing/twisty/views/control-panel/TwistyButtons.css.ts
|
|
1162
|
-
var buttonGridCSS = new CSSSource(
|
|
1142
|
+
var buttonGridCSS = new CSSSource(
|
|
1143
|
+
`
|
|
1163
1144
|
:host {
|
|
1164
1145
|
width: 384px;
|
|
1165
1146
|
height: 24px;
|
|
@@ -1188,8 +1169,10 @@ var buttonGridCSS = new CSSSource(`
|
|
|
1188
1169
|
width: inherit;
|
|
1189
1170
|
height: inherit;
|
|
1190
1171
|
}
|
|
1191
|
-
`
|
|
1192
|
-
|
|
1172
|
+
`
|
|
1173
|
+
);
|
|
1174
|
+
var buttonCSS = new CSSSource(
|
|
1175
|
+
`
|
|
1193
1176
|
:host:not([hidden]) {
|
|
1194
1177
|
display: grid;
|
|
1195
1178
|
}
|
|
@@ -1277,7 +1260,8 @@ button.svg-exit-fullscreen {
|
|
|
1277
1260
|
button.svg-twizzle-tw {
|
|
1278
1261
|
background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODY0IiBoZWlnaHQ9IjYwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMzk3LjU4MSAxNTEuMTh2NTcuMDg0aC04OS43MDN2MjQwLjM1MmgtNjYuOTU1VjIwOC4yNjRIMTUxLjIydi01Ny4wODNoMjQ2LjM2MXptNTQuMzEgNzEuNjc3bDcuNTEyIDMzLjY5MmMyLjcxOCAxMi4xNiA1LjU4IDI0LjY4IDguNTg0IDM3LjU1NWEyMTgwLjc3NSAyMTgwLjc3NSAwIDAwOS40NDIgMzguODQzIDEyNjYuMyAxMjY2LjMgMCAwMDEwLjA4NiAzNy41NTVjMy43Mi0xMi41OSA3LjM2OC0yNS40NjYgMTAuOTQ1LTM4LjYyOCAzLjU3Ni0xMy4xNjIgNy4wMS0yNi4xMSAxMC4zLTM4Ljg0M2w1Ljc2OS0yMi40NTZjMS4yNDgtNC44ODcgMi40NzItOS43MDUgMy42NzQtMTQuNDU1IDMuMDA0LTExLjg3NSA1LjY1MS0yMi45NjIgNy45NC0zMy4yNjNoNDYuMzU0bDIuMzg0IDEwLjU2M2EyMDAwLjc3IDIwMDAuNzcgMCAwMDMuOTM1IDE2LjgyOGw2LjcxMSAyNy43MWMxLjIxMyA0Ljk1NiAyLjQ1IDkuOTggMy43MDkgMTUuMDczYTMxMTkuNzc3IDMxMTkuNzc3IDAgMDA5Ljg3MSAzOC44NDMgMTI0OS4yMjcgMTI0OS4yMjcgMCAwMDEwLjczIDM4LjYyOCAxOTA3LjYwNSAxOTA3LjYwNSAwIDAwMTAuMzAxLTM3LjU1NSAxMzk3Ljk0IDEzOTcuOTQgMCAwMDkuNjU3LTM4Ljg0M2w0LjQtMTkuMDQ2Yy43MTUtMy4xMyAxLjQyMS02LjIzNiAyLjExOC05LjMyMWw5LjU3Ny00Mi44OGg2Ni41MjZhMjk4OC43MTggMjk4OC43MTggMCAwMS0xOS41MjkgNjYuMzExbC01LjcyOCAxOC40ODJhMzIzNy40NiAzMjM3LjQ2IDAgMDEtMTQuMDE1IDQzLjc1MmMtNi40MzggMTkuNi0xMi43MzMgMzcuNjk4LTE4Ljg4NSA1NC4yOTRsLTMuMzA2IDguODI1Yy00Ljg4NCAxMi44OTgtOS40MzMgMjQuMjYzLTEzLjY0NyAzNC4wOTVoLTQ5Ljc4N2E4NDE3LjI4OSA4NDE3LjI4OSAwIDAxLTIxLjAzMS02NC44MDkgMTI4OC42ODYgMTI4OC42ODYgMCAwMS0xOC44ODUtNjQuODEgMTk3Mi40NDQgMTk3Mi40NDQgMCAwMS0xOC4yNCA2NC44MSAyNTc5LjQxMiAyNTc5LjQxMiAwIDAxLTIwLjM4OCA2NC44MWgtNDkuNzg3Yy00LjY4Mi0xMC45MjYtOS43Mi0yMy43NDMtMTUuMTEtMzguNDUxbC0xLjYyOS00LjQ3Yy01LjI1OC0xNC41MjEtMTAuNjgtMzAuMTkyLTE2LjI2Ni00Ny4wMTRsLTIuNDA0LTcuMjhjLTYuNDM4LTE5LjYtMTMuMDItNDAuMzQ0LTE5Ljc0My02Mi4yMzRhMjk4OC43MDcgMjk4OC43MDcgMCAwMS0xOS41MjktNjYuMzExaDY3LjM4NXoiIGZpbGw9IiM0Mjg1RjQiIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvc3ZnPg==");
|
|
1279
1262
|
}
|
|
1280
|
-
`
|
|
1263
|
+
`
|
|
1264
|
+
);
|
|
1281
1265
|
|
|
1282
1266
|
// src/cubing/twisty/views/document.ts
|
|
1283
1267
|
var globalSafeDocument = typeof document === "undefined" ? null : document;
|
|
@@ -1321,7 +1305,7 @@ var buttonIcons = [
|
|
|
1321
1305
|
var ButtonAppearanceProp = class extends TwistyPropDerived {
|
|
1322
1306
|
derive(inputs) {
|
|
1323
1307
|
const buttonAppearances = {
|
|
1324
|
-
|
|
1308
|
+
fullscreen: {
|
|
1325
1309
|
enabled: fullscreenEnabled,
|
|
1326
1310
|
icon: document.fullscreenElement === null ? "enter-fullscreen" : "exit-fullscreen",
|
|
1327
1311
|
title: "Enter fullscreen"
|
|
@@ -1364,7 +1348,7 @@ var ButtonAppearanceProp = class extends TwistyPropDerived {
|
|
|
1364
1348
|
|
|
1365
1349
|
// src/cubing/twisty/views/control-panel/TwistyButtons.ts
|
|
1366
1350
|
var buttonCommands = {
|
|
1367
|
-
|
|
1351
|
+
fullscreen: true,
|
|
1368
1352
|
"jump-to-start": true,
|
|
1369
1353
|
"play-step-backwards": true,
|
|
1370
1354
|
"play-pause": true,
|
|
@@ -1397,33 +1381,40 @@ var TwistyButtons = class extends ManagedCustomElement {
|
|
|
1397
1381
|
}
|
|
1398
1382
|
#onCommand(command) {
|
|
1399
1383
|
switch (command) {
|
|
1400
|
-
case "fullscreen":
|
|
1384
|
+
case "fullscreen": {
|
|
1401
1385
|
this.onFullscreenButton();
|
|
1402
1386
|
break;
|
|
1403
|
-
|
|
1387
|
+
}
|
|
1388
|
+
case "jump-to-start": {
|
|
1404
1389
|
this.controller?.jumpToStart({ flash: true });
|
|
1405
1390
|
break;
|
|
1406
|
-
|
|
1391
|
+
}
|
|
1392
|
+
case "play-step-backwards": {
|
|
1407
1393
|
this.controller?.animationController.play({
|
|
1408
1394
|
direction: -1 /* Backwards */,
|
|
1409
1395
|
untilBoundary: "move" /* Move */
|
|
1410
1396
|
});
|
|
1411
1397
|
break;
|
|
1412
|
-
|
|
1398
|
+
}
|
|
1399
|
+
case "play-pause": {
|
|
1413
1400
|
this.controller?.togglePlay();
|
|
1414
1401
|
break;
|
|
1415
|
-
|
|
1402
|
+
}
|
|
1403
|
+
case "play-step": {
|
|
1416
1404
|
this.controller?.animationController.play({
|
|
1417
1405
|
direction: 1 /* Forwards */,
|
|
1418
1406
|
untilBoundary: "move" /* Move */
|
|
1419
1407
|
});
|
|
1420
1408
|
break;
|
|
1421
|
-
|
|
1409
|
+
}
|
|
1410
|
+
case "jump-to-end": {
|
|
1422
1411
|
this.controller?.jumpToEnd({ flash: true });
|
|
1423
1412
|
break;
|
|
1424
|
-
|
|
1413
|
+
}
|
|
1414
|
+
case "twizzle-link": {
|
|
1425
1415
|
this.controller?.visitTwizzleLink();
|
|
1426
1416
|
break;
|
|
1417
|
+
}
|
|
1427
1418
|
default:
|
|
1428
1419
|
throw new Error("Missing command");
|
|
1429
1420
|
}
|
|
@@ -1480,7 +1471,8 @@ var TwistyButton = class extends ManagedCustomElement {
|
|
|
1480
1471
|
customElementsShim.define("twisty-button", TwistyButton);
|
|
1481
1472
|
|
|
1482
1473
|
// src/cubing/twisty/views/control-panel/TwistyScrubber.css.ts
|
|
1483
|
-
var twistyScrubberCSS = new CSSSource(
|
|
1474
|
+
var twistyScrubberCSS = new CSSSource(
|
|
1475
|
+
`
|
|
1484
1476
|
:host {
|
|
1485
1477
|
width: 384px;
|
|
1486
1478
|
height: 16px;
|
|
@@ -1500,7 +1492,8 @@ var twistyScrubberCSS = new CSSSource(`
|
|
|
1500
1492
|
input:not(:disabled) {
|
|
1501
1493
|
cursor: ew-resize;
|
|
1502
1494
|
}
|
|
1503
|
-
`
|
|
1495
|
+
`
|
|
1496
|
+
);
|
|
1504
1497
|
|
|
1505
1498
|
// src/cubing/twisty/views/control-panel/TwistyScrubber.ts
|
|
1506
1499
|
var SLOW_DOWN_SCRUBBING = false;
|
|
@@ -1542,9 +1535,10 @@ var lastPreval = 0;
|
|
|
1542
1535
|
var scaling = false;
|
|
1543
1536
|
var currentClickNum = 0;
|
|
1544
1537
|
var TwistyScrubber = class extends ManagedCustomElement {
|
|
1545
|
-
constructor(model) {
|
|
1538
|
+
constructor(model, controller) {
|
|
1546
1539
|
super();
|
|
1547
1540
|
this.model = model;
|
|
1541
|
+
this.controller = controller;
|
|
1548
1542
|
}
|
|
1549
1543
|
async onDetailedTimelineInfo(detailedTimelineInfo) {
|
|
1550
1544
|
const inputElem = await this.inputElem();
|
|
@@ -1567,6 +1561,7 @@ var TwistyScrubber = class extends ManagedCustomElement {
|
|
|
1567
1561
|
this.onDetailedTimelineInfo.bind(this)
|
|
1568
1562
|
);
|
|
1569
1563
|
elem.addEventListener("input", this.onInput.bind(this));
|
|
1564
|
+
elem.addEventListener("keydown", this.onKeypress.bind(this));
|
|
1570
1565
|
return elem;
|
|
1571
1566
|
})());
|
|
1572
1567
|
}
|
|
@@ -1580,6 +1575,24 @@ var TwistyScrubber = class extends ManagedCustomElement {
|
|
|
1580
1575
|
this.model?.playingInfo.set({ playing: false });
|
|
1581
1576
|
this.model?.timestampRequest.set(value);
|
|
1582
1577
|
}
|
|
1578
|
+
onKeypress(e) {
|
|
1579
|
+
switch (e.key) {
|
|
1580
|
+
case "ArrowLeft":
|
|
1581
|
+
case "ArrowRight": {
|
|
1582
|
+
this.controller?.animationController.play({
|
|
1583
|
+
direction: e.key === "ArrowLeft" ? -1 /* Backwards */ : 1 /* Forwards */,
|
|
1584
|
+
untilBoundary: "move" /* Move */
|
|
1585
|
+
});
|
|
1586
|
+
e.preventDefault();
|
|
1587
|
+
break;
|
|
1588
|
+
}
|
|
1589
|
+
case " ": {
|
|
1590
|
+
this.controller?.togglePlay();
|
|
1591
|
+
e.preventDefault();
|
|
1592
|
+
break;
|
|
1593
|
+
}
|
|
1594
|
+
}
|
|
1595
|
+
}
|
|
1583
1596
|
async slowDown(e, inputElem) {
|
|
1584
1597
|
if (!SLOW_DOWN_SCRUBBING) {
|
|
1585
1598
|
return;
|
|
@@ -1657,7 +1670,7 @@ async function getDefaultFilename(model) {
|
|
|
1657
1670
|
model.puzzleID.get(),
|
|
1658
1671
|
model.alg.get()
|
|
1659
1672
|
]);
|
|
1660
|
-
return `[${puzzleID}]${algWithIssues.alg.experimentalNumChildAlgNodes() === 0 ? "" :
|
|
1673
|
+
return `[${puzzleID}]${algWithIssues.alg.experimentalNumChildAlgNodes() === 0 ? "" : ` ${algWithIssues.alg.toString()}`}`;
|
|
1661
1674
|
}
|
|
1662
1675
|
function downloadURL(url, name, extension = "png") {
|
|
1663
1676
|
const a = document.createElement("a");
|
|
@@ -1667,7 +1680,8 @@ function downloadURL(url, name, extension = "png") {
|
|
|
1667
1680
|
}
|
|
1668
1681
|
|
|
1669
1682
|
// src/cubing/twisty/views/TwistyPlayer.css.ts
|
|
1670
|
-
var twistyPlayerCSS = new CSSSource(
|
|
1683
|
+
var twistyPlayerCSS = new CSSSource(
|
|
1684
|
+
`
|
|
1671
1685
|
:host {
|
|
1672
1686
|
width: 384px;
|
|
1673
1687
|
height: 256px;
|
|
@@ -1736,7 +1750,8 @@ twisty-scrubber {
|
|
|
1736
1750
|
.wrapper.error .error-elem {
|
|
1737
1751
|
display: grid;
|
|
1738
1752
|
}
|
|
1739
|
-
`
|
|
1753
|
+
`
|
|
1754
|
+
);
|
|
1740
1755
|
|
|
1741
1756
|
// src/cubing/twisty/model/props/general/ArbitraryStringProp.ts
|
|
1742
1757
|
var ArbitraryStringProp = class extends SimpleTwistyPropSource {
|
|
@@ -1786,7 +1801,7 @@ function algWithIssuesFromString(s) {
|
|
|
1786
1801
|
const alg = Alg.fromString(s);
|
|
1787
1802
|
const warnings = [];
|
|
1788
1803
|
if (alg.toString() !== s) {
|
|
1789
|
-
warnings.push(
|
|
1804
|
+
warnings.push("Alg is non-canonical!");
|
|
1790
1805
|
}
|
|
1791
1806
|
return {
|
|
1792
1807
|
alg,
|
|
@@ -2052,7 +2067,9 @@ var SimpleAlgIndexer = class {
|
|
|
2052
2067
|
return i;
|
|
2053
2068
|
}
|
|
2054
2069
|
stateAtIndex(index) {
|
|
2055
|
-
return this.kpuzzle.startState().applyTransformation(
|
|
2070
|
+
return this.kpuzzle.startState().applyTransformation(
|
|
2071
|
+
this.transformationAtIndex(index)
|
|
2072
|
+
);
|
|
2056
2073
|
}
|
|
2057
2074
|
transformationAtIndex(index) {
|
|
2058
2075
|
let state = this.kpuzzle.identityTransformation();
|
|
@@ -2347,16 +2364,18 @@ var SimultaneousMoveIndexer = class {
|
|
|
2347
2364
|
endTimestamp: leafWithRange.end
|
|
2348
2365
|
};
|
|
2349
2366
|
switch (fraction) {
|
|
2350
|
-
case 0:
|
|
2367
|
+
case 0: {
|
|
2351
2368
|
movesStarting.push(currentMove);
|
|
2352
2369
|
break;
|
|
2353
|
-
|
|
2370
|
+
}
|
|
2371
|
+
case 1: {
|
|
2354
2372
|
if (moveFinished) {
|
|
2355
2373
|
movesFinished.push(currentMove);
|
|
2356
2374
|
} else {
|
|
2357
2375
|
movesFinishing.push(currentMove);
|
|
2358
2376
|
}
|
|
2359
2377
|
break;
|
|
2378
|
+
}
|
|
2360
2379
|
default:
|
|
2361
2380
|
currentMoves.push(currentMove);
|
|
2362
2381
|
latestStart = Math.max(latestStart, leafWithRange.start);
|
|
@@ -2489,13 +2508,7 @@ var DecoratorConstructor = class extends TraversalUp {
|
|
|
2489
2508
|
const AB = decA.forward.applyTransformation(decB.forward);
|
|
2490
2509
|
const ApBp = decA.backward.applyTransformation(decB.backward);
|
|
2491
2510
|
const ABApBp = AB.applyTransformation(ApBp);
|
|
2492
|
-
const dec = new AlgWalkterDecoration(
|
|
2493
|
-
2 * (decA.moveCount + decB.moveCount),
|
|
2494
|
-
2 * (decA.duration + decB.duration),
|
|
2495
|
-
ABApBp,
|
|
2496
|
-
ABApBp.invert(),
|
|
2497
|
-
[decA, decB]
|
|
2498
|
-
);
|
|
2511
|
+
const dec = new AlgWalkterDecoration(2 * (decA.moveCount + decB.moveCount), 2 * (decA.duration + decB.duration), ABApBp, ABApBp.invert(), [decA, decB]);
|
|
2499
2512
|
return this.mult(dec, 1, [dec, decA, decB]);
|
|
2500
2513
|
}
|
|
2501
2514
|
traverseConjugate(conjugate) {
|
|
@@ -2503,13 +2516,10 @@ var DecoratorConstructor = class extends TraversalUp {
|
|
|
2503
2516
|
const decB = this.traverseAlg(conjugate.B);
|
|
2504
2517
|
const AB = decA.forward.applyTransformation(decB.forward);
|
|
2505
2518
|
const ABAp = AB.applyTransformation(decA.backward);
|
|
2506
|
-
const dec = new AlgWalkterDecoration(
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
ABAp.invert(),
|
|
2511
|
-
[decA, decB]
|
|
2512
|
-
);
|
|
2519
|
+
const dec = new AlgWalkterDecoration(2 * decA.moveCount + decB.moveCount, 2 * decA.duration + decB.duration, ABAp, ABAp.invert(), [
|
|
2520
|
+
decA,
|
|
2521
|
+
decB
|
|
2522
|
+
]);
|
|
2513
2523
|
return this.mult(dec, 1, [dec, decA, decB]);
|
|
2514
2524
|
}
|
|
2515
2525
|
traversePause(pause) {
|
|
@@ -3085,9 +3095,9 @@ var TempoScaleProp = class extends TwistyPropSource {
|
|
|
3085
3095
|
|
|
3086
3096
|
// src/cubing/twisty/model/props/timeline/TimestampRequestProp.ts
|
|
3087
3097
|
var smartTimestamps = {
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3098
|
+
start: true,
|
|
3099
|
+
end: true,
|
|
3100
|
+
anchor: true,
|
|
3091
3101
|
"opposite-anchor": true
|
|
3092
3102
|
};
|
|
3093
3103
|
var TimestampRequestProp = class extends SimpleTwistyPropSource {
|
|
@@ -3113,7 +3123,7 @@ var TimestampRequestProp = class extends SimpleTwistyPropSource {
|
|
|
3113
3123
|
|
|
3114
3124
|
// src/cubing/twisty/model/props/viewer/BackViewProp.ts
|
|
3115
3125
|
var backViewLayouts = {
|
|
3116
|
-
|
|
3126
|
+
none: true,
|
|
3117
3127
|
"side-by-side": true,
|
|
3118
3128
|
"top-right": true
|
|
3119
3129
|
};
|
|
@@ -3698,19 +3708,25 @@ var TwistyPlayerSettable = class extends ManagedCustomElement {
|
|
|
3698
3708
|
throw err("experimentalMovePressInput");
|
|
3699
3709
|
}
|
|
3700
3710
|
set cameraLatitude(latitude) {
|
|
3701
|
-
this.experimentalModel.twistySceneModel.orbitCoordinatesRequest.set({
|
|
3711
|
+
this.experimentalModel.twistySceneModel.orbitCoordinatesRequest.set({
|
|
3712
|
+
latitude
|
|
3713
|
+
});
|
|
3702
3714
|
}
|
|
3703
3715
|
get cameraLatitude() {
|
|
3704
3716
|
throw err("cameraLatitude");
|
|
3705
3717
|
}
|
|
3706
3718
|
set cameraLongitude(longitude) {
|
|
3707
|
-
this.experimentalModel.twistySceneModel.orbitCoordinatesRequest.set({
|
|
3719
|
+
this.experimentalModel.twistySceneModel.orbitCoordinatesRequest.set({
|
|
3720
|
+
longitude
|
|
3721
|
+
});
|
|
3708
3722
|
}
|
|
3709
3723
|
get cameraLongitude() {
|
|
3710
3724
|
throw err("cameraLongitude");
|
|
3711
3725
|
}
|
|
3712
3726
|
set cameraDistance(distance) {
|
|
3713
|
-
this.experimentalModel.twistySceneModel.orbitCoordinatesRequest.set({
|
|
3727
|
+
this.experimentalModel.twistySceneModel.orbitCoordinatesRequest.set({
|
|
3728
|
+
distance
|
|
3729
|
+
});
|
|
3714
3730
|
}
|
|
3715
3731
|
get cameraDistance() {
|
|
3716
3732
|
throw err("cameraDistance");
|
|
@@ -3773,15 +3789,15 @@ var ExperimentalGetters = class {
|
|
|
3773
3789
|
// src/cubing/twisty/views/TwistyPlayer.ts
|
|
3774
3790
|
var DATA_ATTRIBUTE_PREFIX = "data-";
|
|
3775
3791
|
var twistyPlayerAttributeMap = {
|
|
3776
|
-
|
|
3792
|
+
alg: "alg",
|
|
3777
3793
|
"experimental-setup-alg": "experimentalSetupAlg",
|
|
3778
3794
|
"experimental-setup-anchor": "experimentalSetupAnchor",
|
|
3779
|
-
|
|
3795
|
+
puzzle: "puzzle",
|
|
3780
3796
|
"experimental-puzzle-description": "experimentalPuzzleDescription",
|
|
3781
|
-
|
|
3797
|
+
visualization: "visualization",
|
|
3782
3798
|
"hint-facelets": "hintFacelets",
|
|
3783
3799
|
"experimental-stickering": "experimentalStickering",
|
|
3784
|
-
|
|
3800
|
+
background: "background",
|
|
3785
3801
|
"control-panel": "controlPanel",
|
|
3786
3802
|
"back-view": "backView",
|
|
3787
3803
|
"viewer-link": "viewerLink",
|
|
@@ -3847,16 +3863,17 @@ var TwistyPlayer = class extends TwistyPlayerSettable {
|
|
|
3847
3863
|
);
|
|
3848
3864
|
this.addElement(this.#errorElem).classList.add("error-elem");
|
|
3849
3865
|
this.#errorElem.textContent = "Error";
|
|
3850
|
-
this.experimentalModel.userVisibleErrorTracker.addFreshListener(
|
|
3851
|
-
|
|
3852
|
-
|
|
3853
|
-
|
|
3854
|
-
|
|
3855
|
-
this.#errorElem.textContent = errorString;
|
|
3856
|
-
}
|
|
3866
|
+
this.experimentalModel.userVisibleErrorTracker.addFreshListener((userVisibleError) => {
|
|
3867
|
+
const errorString = userVisibleError.errors[0] ?? null;
|
|
3868
|
+
this.contentWrapper.classList.toggle("error", !!errorString);
|
|
3869
|
+
if (errorString) {
|
|
3870
|
+
this.#errorElem.textContent = errorString;
|
|
3857
3871
|
}
|
|
3872
|
+
});
|
|
3873
|
+
const scrubber = new TwistyScrubber(
|
|
3874
|
+
this.experimentalModel,
|
|
3875
|
+
this.controller
|
|
3858
3876
|
);
|
|
3859
|
-
const scrubber = new TwistyScrubber(this.experimentalModel);
|
|
3860
3877
|
this.contentWrapper.appendChild(scrubber);
|
|
3861
3878
|
this.buttons = new TwistyButtons(
|
|
3862
3879
|
this.experimentalModel,
|
|
@@ -3864,19 +3881,15 @@ var TwistyPlayer = class extends TwistyPlayerSettable {
|
|
|
3864
3881
|
this
|
|
3865
3882
|
);
|
|
3866
3883
|
this.contentWrapper.appendChild(this.buttons);
|
|
3867
|
-
this.experimentalModel.twistySceneModel.background.addFreshListener(
|
|
3868
|
-
(
|
|
3869
|
-
|
|
3870
|
-
|
|
3871
|
-
|
|
3872
|
-
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
(controlPanel) => {
|
|
3877
|
-
this.#controlsManager.setValue(controlPanel);
|
|
3878
|
-
}
|
|
3879
|
-
);
|
|
3884
|
+
this.experimentalModel.twistySceneModel.background.addFreshListener((backgroundTheme) => {
|
|
3885
|
+
this.contentWrapper.classList.toggle(
|
|
3886
|
+
"checkered",
|
|
3887
|
+
backgroundTheme !== "none"
|
|
3888
|
+
);
|
|
3889
|
+
});
|
|
3890
|
+
this.experimentalModel.controlPanel.addFreshListener((controlPanel) => {
|
|
3891
|
+
this.#controlsManager.setValue(controlPanel);
|
|
3892
|
+
});
|
|
3880
3893
|
this.experimentalModel.visualizationStrategy.addFreshListener(
|
|
3881
3894
|
this.#setVisualizationWrapper.bind(this)
|
|
3882
3895
|
);
|
|
@@ -3904,17 +3917,19 @@ var TwistyPlayer = class extends TwistyPlayerSettable {
|
|
|
3904
3917
|
let newWrapper;
|
|
3905
3918
|
switch (strategy) {
|
|
3906
3919
|
case "2D":
|
|
3907
|
-
case "experimental-2D-LL":
|
|
3920
|
+
case "experimental-2D-LL": {
|
|
3908
3921
|
newWrapper = new Twisty2DSceneWrapper(
|
|
3909
3922
|
this.experimentalModel.twistySceneModel,
|
|
3910
3923
|
strategy
|
|
3911
3924
|
);
|
|
3912
3925
|
break;
|
|
3926
|
+
}
|
|
3913
3927
|
case "Cube3D":
|
|
3914
|
-
case "PG3D":
|
|
3928
|
+
case "PG3D": {
|
|
3915
3929
|
newWrapper = new Twisty3DSceneWrapper(this.experimentalModel);
|
|
3916
3930
|
this.#initial3DVisualizationWrapper.handleNewValue(newWrapper);
|
|
3917
3931
|
break;
|
|
3932
|
+
}
|
|
3918
3933
|
default:
|
|
3919
3934
|
throw new Error("Invalid visualization");
|
|
3920
3935
|
}
|
|
@@ -4025,7 +4040,8 @@ var TwistyPlayer = class extends TwistyPlayerSettable {
|
|
|
4025
4040
|
customElementsShim.define("twisty-player", TwistyPlayer);
|
|
4026
4041
|
|
|
4027
4042
|
// src/cubing/twisty/views/TwistyAlgViewer.css.ts
|
|
4028
|
-
var twistyAlgViewerCSS = new CSSSource(
|
|
4043
|
+
var twistyAlgViewerCSS = new CSSSource(
|
|
4044
|
+
`
|
|
4029
4045
|
:host {
|
|
4030
4046
|
display: inline;
|
|
4031
4047
|
}
|
|
@@ -4051,7 +4067,8 @@ twisty-alg-leaf-elem.twisty-alg-comment {
|
|
|
4051
4067
|
padding-right: 0.1em;
|
|
4052
4068
|
border-radius: 0.1em;
|
|
4053
4069
|
}
|
|
4054
|
-
`
|
|
4070
|
+
`
|
|
4071
|
+
);
|
|
4055
4072
|
|
|
4056
4073
|
// src/cubing/twisty/views/TwistyAlgViewer.ts
|
|
4057
4074
|
var DEFAULT_OFFSET_MS = 250;
|
|
@@ -4204,7 +4221,7 @@ var AlgToDOMTree = class extends TraversalDownUp {
|
|
|
4204
4221
|
})
|
|
4205
4222
|
);
|
|
4206
4223
|
}
|
|
4207
|
-
element.addString(
|
|
4224
|
+
element.addString(`)${grouping.experimentalRepetitionSuffix}`);
|
|
4208
4225
|
element.flushQueue();
|
|
4209
4226
|
return {
|
|
4210
4227
|
moveCount: moveCount * Math.abs(grouping.amount),
|
|
@@ -4391,34 +4408,28 @@ var TwistyAlgViewer = class extends HTMLElementShim {
|
|
|
4391
4408
|
throw new Error("clearing twistyPlayer is not supported");
|
|
4392
4409
|
}
|
|
4393
4410
|
this.#twistyPlayer = twistyPlayer;
|
|
4394
|
-
this.#twistyPlayer.experimentalModel.alg.addFreshListener(
|
|
4395
|
-
(algWithIssues)
|
|
4396
|
-
|
|
4397
|
-
}
|
|
4398
|
-
);
|
|
4411
|
+
this.#twistyPlayer.experimentalModel.alg.addFreshListener((algWithIssues) => {
|
|
4412
|
+
this.setAlg(algWithIssues.alg);
|
|
4413
|
+
});
|
|
4399
4414
|
const sourceAlg = (await this.#twistyPlayer.experimentalModel.alg.get()).alg;
|
|
4400
4415
|
const parsedAlg = "startCharIndex" in sourceAlg ? sourceAlg : Alg.fromString(sourceAlg.toString());
|
|
4401
4416
|
this.setAlg(parsedAlg);
|
|
4402
|
-
twistyPlayer.experimentalModel.currentMoveInfo.addFreshListener(
|
|
4403
|
-
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4407
|
-
|
|
4408
|
-
|
|
4409
|
-
|
|
4410
|
-
|
|
4411
|
-
this.highlighter.set(mainCurrentMove);
|
|
4412
|
-
}
|
|
4417
|
+
twistyPlayer.experimentalModel.currentMoveInfo.addFreshListener((currentMoveInfo) => {
|
|
4418
|
+
let moveInfo = currentMoveInfo.currentMoves[0];
|
|
4419
|
+
moveInfo ?? (moveInfo = currentMoveInfo.movesStarting[0]);
|
|
4420
|
+
moveInfo ?? (moveInfo = currentMoveInfo.movesFinishing[0]);
|
|
4421
|
+
if (!moveInfo) {
|
|
4422
|
+
this.highlighter.set(null);
|
|
4423
|
+
} else {
|
|
4424
|
+
const mainCurrentMove = moveInfo.move;
|
|
4425
|
+
this.highlighter.set(mainCurrentMove);
|
|
4413
4426
|
}
|
|
4414
|
-
);
|
|
4415
|
-
twistyPlayer.experimentalModel.detailedTimelineInfo.addFreshListener(
|
|
4416
|
-
(detailedTimelineInfo)
|
|
4417
|
-
|
|
4418
|
-
this.lastClickTimestamp = null;
|
|
4419
|
-
}
|
|
4427
|
+
});
|
|
4428
|
+
twistyPlayer.experimentalModel.detailedTimelineInfo.addFreshListener((detailedTimelineInfo) => {
|
|
4429
|
+
if (detailedTimelineInfo.timestamp !== this.lastClickTimestamp) {
|
|
4430
|
+
this.lastClickTimestamp = null;
|
|
4420
4431
|
}
|
|
4421
|
-
);
|
|
4432
|
+
});
|
|
4422
4433
|
}
|
|
4423
4434
|
async jumpToIndex(index, offsetIntoMove) {
|
|
4424
4435
|
const twistyPlayer = this.#twistyPlayer;
|
|
@@ -4632,7 +4643,8 @@ var TwistyAlgEditorModel = class {
|
|
|
4632
4643
|
};
|
|
4633
4644
|
|
|
4634
4645
|
// src/cubing/twisty/views/TwistyAlgEditor/TwistyAlgEditor.css.ts
|
|
4635
|
-
var twistyAlgEditorCSS = new CSSSource(
|
|
4646
|
+
var twistyAlgEditorCSS = new CSSSource(
|
|
4647
|
+
`
|
|
4636
4648
|
:host {
|
|
4637
4649
|
width: 384px;
|
|
4638
4650
|
display: grid;
|
|
@@ -4701,7 +4713,8 @@ textarea {
|
|
|
4701
4713
|
border: 1px solid red;
|
|
4702
4714
|
background: rgba(255, 0, 0, 0.1);
|
|
4703
4715
|
}
|
|
4704
|
-
`
|
|
4716
|
+
`
|
|
4717
|
+
);
|
|
4705
4718
|
|
|
4706
4719
|
// src/cubing/twisty/views/TwistyAlgEditor/TwistyAlgEditor.ts
|
|
4707
4720
|
var ATTRIBUTE_FOR_TWISTY_PLAYER = "for-twisty-player";
|
|
@@ -4752,13 +4765,11 @@ var TwistyAlgEditor = class extends ManagedCustomElement {
|
|
|
4752
4765
|
}
|
|
4753
4766
|
this.#twistyPlayerProp = options?.twistyPlayerProp ?? "alg";
|
|
4754
4767
|
if (options?.twistyPlayerProp === "alg") {
|
|
4755
|
-
this.model.leafToHighlight.addFreshListener(
|
|
4756
|
-
(highlightInfo)
|
|
4757
|
-
|
|
4758
|
-
this.highlightLeaf(highlightInfo.leafInfo.leaf);
|
|
4759
|
-
}
|
|
4768
|
+
this.model.leafToHighlight.addFreshListener((highlightInfo) => {
|
|
4769
|
+
if (highlightInfo) {
|
|
4770
|
+
this.highlightLeaf(highlightInfo.leafInfo.leaf);
|
|
4760
4771
|
}
|
|
4761
|
-
);
|
|
4772
|
+
});
|
|
4762
4773
|
}
|
|
4763
4774
|
}
|
|
4764
4775
|
#textarea;
|
|
@@ -4813,7 +4824,7 @@ var TwistyAlgEditor = class extends ManagedCustomElement {
|
|
|
4813
4824
|
this.#textareaClassListValidForPuzzleManager.setValue(issues);
|
|
4814
4825
|
}
|
|
4815
4826
|
#padSuffix(s) {
|
|
4816
|
-
return s.endsWith("\n") ? s
|
|
4827
|
+
return s.endsWith("\n") ? `${s} ` : s;
|
|
4817
4828
|
}
|
|
4818
4829
|
#highlightedLeaf;
|
|
4819
4830
|
highlightLeaf(leaf) {
|
|
@@ -4861,62 +4872,61 @@ var TwistyAlgEditor = class extends ManagedCustomElement {
|
|
|
4861
4872
|
this.algString = this.#algProp ? (await this.#algProp.get()).alg.toString() : "";
|
|
4862
4873
|
})();
|
|
4863
4874
|
if (this.#twistyPlayerProp === "alg") {
|
|
4864
|
-
this.#twistyPlayer?.experimentalModel.puzzleAlg.addFreshListener(
|
|
4865
|
-
(algWithIssues)
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
|
|
4872
|
-
|
|
4873
|
-
|
|
4874
|
-
this.onInput();
|
|
4875
|
-
} else {
|
|
4876
|
-
}
|
|
4875
|
+
this.#twistyPlayer?.experimentalModel.puzzleAlg.addFreshListener((algWithIssues) => {
|
|
4876
|
+
if (algWithIssues.issues.errors.length === 0) {
|
|
4877
|
+
this.setAlgIssueClassForPuzzle(
|
|
4878
|
+
algWithIssues.issues.warnings.length === 0 ? "none" : "warning"
|
|
4879
|
+
);
|
|
4880
|
+
const newAlg = algWithIssues.alg;
|
|
4881
|
+
const oldAlg = Alg.fromString(this.algString);
|
|
4882
|
+
if (!newAlg.isIdentical(oldAlg)) {
|
|
4883
|
+
this.algString = newAlg.toString();
|
|
4884
|
+
this.onInput();
|
|
4877
4885
|
} else {
|
|
4878
|
-
this.setAlgIssueClassForPuzzle("error");
|
|
4879
4886
|
}
|
|
4887
|
+
} else {
|
|
4888
|
+
this.setAlgIssueClassForPuzzle("error");
|
|
4880
4889
|
}
|
|
4881
|
-
);
|
|
4882
|
-
this.model.leafToHighlight.addFreshListener(
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
4886
|
-
|
|
4887
|
-
|
|
4888
|
-
|
|
4889
|
-
|
|
4890
|
-
|
|
4891
|
-
|
|
4892
|
-
|
|
4890
|
+
});
|
|
4891
|
+
this.model.leafToHighlight.addFreshListener(async (highlightInfo) => {
|
|
4892
|
+
if (highlightInfo === null) {
|
|
4893
|
+
return;
|
|
4894
|
+
}
|
|
4895
|
+
const [indexer, timestampRequest] = await Promise.all([
|
|
4896
|
+
await twistyPlayer.experimentalModel.indexer.get(),
|
|
4897
|
+
await twistyPlayer.experimentalModel.timestampRequest.get()
|
|
4898
|
+
]);
|
|
4899
|
+
if (timestampRequest === "opposite-anchor" && !this.#onInputHasFired) {
|
|
4900
|
+
return;
|
|
4901
|
+
}
|
|
4902
|
+
const moveStartTimestamp = indexer.indexToMoveStartTimestamp(
|
|
4903
|
+
highlightInfo.leafInfo.idx
|
|
4904
|
+
);
|
|
4905
|
+
const duration = indexer.moveDuration(highlightInfo.leafInfo.idx);
|
|
4906
|
+
let newTimestamp;
|
|
4907
|
+
switch (highlightInfo.where) {
|
|
4908
|
+
case "before": {
|
|
4909
|
+
newTimestamp = moveStartTimestamp;
|
|
4910
|
+
break;
|
|
4893
4911
|
}
|
|
4894
|
-
|
|
4895
|
-
|
|
4896
|
-
|
|
4897
|
-
|
|
4898
|
-
let newTimestamp;
|
|
4899
|
-
switch (highlightInfo.where) {
|
|
4900
|
-
case "before":
|
|
4901
|
-
newTimestamp = moveStartTimestamp;
|
|
4902
|
-
break;
|
|
4903
|
-
case "start":
|
|
4904
|
-
case "inside":
|
|
4905
|
-
newTimestamp = moveStartTimestamp + duration / 4;
|
|
4906
|
-
break;
|
|
4907
|
-
case "end":
|
|
4908
|
-
case "after":
|
|
4909
|
-
newTimestamp = moveStartTimestamp + duration;
|
|
4910
|
-
break;
|
|
4911
|
-
default:
|
|
4912
|
-
console.log("invalid where");
|
|
4913
|
-
throw new Error("Invalid where!");
|
|
4912
|
+
case "start":
|
|
4913
|
+
case "inside": {
|
|
4914
|
+
newTimestamp = moveStartTimestamp + duration / 4;
|
|
4915
|
+
break;
|
|
4914
4916
|
}
|
|
4915
|
-
|
|
4916
|
-
|
|
4917
|
+
case "end":
|
|
4918
|
+
case "after": {
|
|
4919
|
+
newTimestamp = moveStartTimestamp + duration;
|
|
4920
|
+
break;
|
|
4917
4921
|
}
|
|
4922
|
+
default:
|
|
4923
|
+
console.log("invalid where");
|
|
4924
|
+
throw new Error("Invalid where!");
|
|
4918
4925
|
}
|
|
4919
|
-
|
|
4926
|
+
if (!this.debugNeverRequestTimestamp) {
|
|
4927
|
+
twistyPlayer.experimentalModel.timestampRequest.set(newTimestamp);
|
|
4928
|
+
}
|
|
4929
|
+
});
|
|
4920
4930
|
twistyPlayer.experimentalModel.currentLeavesSimplified.addFreshListener(
|
|
4921
4931
|
async (currentLeavesSimplified) => {
|
|
4922
4932
|
const indexer = await twistyPlayer.experimentalModel.indexer.get();
|
|
@@ -4941,16 +4951,18 @@ var TwistyAlgEditor = class extends ManagedCustomElement {
|
|
|
4941
4951
|
this.twistyPlayer = elem;
|
|
4942
4952
|
return;
|
|
4943
4953
|
}
|
|
4944
|
-
case ATTRIBUTE_PLACEHOLDER:
|
|
4954
|
+
case ATTRIBUTE_PLACEHOLDER: {
|
|
4945
4955
|
this.placeholder = newValue;
|
|
4946
4956
|
return;
|
|
4947
|
-
|
|
4957
|
+
}
|
|
4958
|
+
case ATTRIBUTE_TWISTY_PLAYER_PROP: {
|
|
4948
4959
|
if (this.#twistyPlayer) {
|
|
4949
4960
|
console.log("cannot set prop");
|
|
4950
4961
|
throw new Error("cannot set prop after twisty player");
|
|
4951
4962
|
}
|
|
4952
4963
|
this.#twistyPlayerProp = newValue;
|
|
4953
4964
|
return;
|
|
4965
|
+
}
|
|
4954
4966
|
}
|
|
4955
4967
|
}
|
|
4956
4968
|
static get observedAttributes() {
|
|
@@ -4964,7 +4976,8 @@ var TwistyAlgEditor = class extends ManagedCustomElement {
|
|
|
4964
4976
|
customElementsShim.define("twisty-alg-editor", TwistyAlgEditor);
|
|
4965
4977
|
|
|
4966
4978
|
// src/cubing/twisty/views/twizzle/TwizzleLink.css.ts
|
|
4967
|
-
var twizzleLinkCSS = new CSSSource(
|
|
4979
|
+
var twizzleLinkCSS = new CSSSource(
|
|
4980
|
+
`
|
|
4968
4981
|
.wrapper {
|
|
4969
4982
|
background: rgb(255, 245, 235);
|
|
4970
4983
|
display: grid;
|
|
@@ -4997,20 +5010,21 @@ twisty-player {
|
|
|
4997
5010
|
twisty-player + .heading {
|
|
4998
5011
|
padding-top: 0.5em;
|
|
4999
5012
|
}
|
|
5000
|
-
`
|
|
5013
|
+
`
|
|
5014
|
+
);
|
|
5001
5015
|
|
|
5002
5016
|
// src/cubing/twisty/views/twizzle/url-params.ts
|
|
5003
5017
|
function getConfigFromURL(prefix = "", url = location.href) {
|
|
5004
5018
|
const paramMapping = {
|
|
5005
|
-
|
|
5019
|
+
alg: "alg",
|
|
5006
5020
|
"setup-alg": "experimental-setup-alg",
|
|
5007
5021
|
"setup-anchor": "experimental-setup-anchor",
|
|
5008
|
-
|
|
5009
|
-
|
|
5022
|
+
puzzle: "puzzle",
|
|
5023
|
+
stickering: "experimental-stickering",
|
|
5010
5024
|
"puzzle-description": "experimental-puzzle-description",
|
|
5011
|
-
|
|
5025
|
+
title: "experimental-title",
|
|
5012
5026
|
"video-url": "experimental-video-url",
|
|
5013
|
-
|
|
5027
|
+
competition: "experimental-competition-id"
|
|
5014
5028
|
};
|
|
5015
5029
|
const params = new URL(url).searchParams;
|
|
5016
5030
|
const config = {};
|