cubing 0.26.6 → 0.28.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.
- package/README.md +2 -0
- package/dist/esm/alg/index.js +5 -9
- package/dist/esm/bluetooth/index.js +15 -16
- package/dist/esm/bluetooth/index.js.map +2 -2
- package/dist/esm/{chunk-NHCGS73I.js → chunk-47SWOA3X.js} +12 -6
- package/dist/esm/chunk-47SWOA3X.js.map +7 -0
- package/dist/esm/{chunk-VCOUFQGJ.js → chunk-4KIZAW2Z.js} +3 -3
- package/dist/esm/chunk-4KIZAW2Z.js.map +7 -0
- package/dist/esm/{chunk-7K6HJKEG.js → chunk-4V4RM3YJ.js} +21 -9
- package/dist/esm/chunk-4V4RM3YJ.js.map +7 -0
- package/dist/esm/{chunk-LJBHUHEP.js → chunk-7BLWQDZX.js} +6 -3
- package/dist/esm/{chunk-LJBHUHEP.js.map → chunk-7BLWQDZX.js.map} +2 -2
- package/dist/esm/{chunk-GBMX6FHY.js → chunk-ALBEW4DJ.js} +1 -1
- package/dist/esm/{chunk-GBMX6FHY.js.map → chunk-ALBEW4DJ.js.map} +1 -1
- package/dist/esm/{chunk-WQK6XWML.js → chunk-F4WWCPVE.js} +2 -2
- package/dist/esm/{chunk-WQK6XWML.js.map → chunk-F4WWCPVE.js.map} +1 -1
- package/dist/esm/{chunk-YBDBUTYE.js → chunk-GVPTO3OF.js} +1 -1
- package/dist/esm/{chunk-YBDBUTYE.js.map → chunk-GVPTO3OF.js.map} +1 -1
- package/dist/esm/{chunk-FCB447RN.js → chunk-GXZIBFSN.js} +191 -125
- package/dist/esm/chunk-GXZIBFSN.js.map +7 -0
- package/dist/esm/{chunk-GOBAXDTU.js → chunk-JAGHV77R.js} +14 -14
- package/dist/esm/chunk-JAGHV77R.js.map +7 -0
- package/dist/esm/{chunk-K62P6E3H.js → chunk-KBOIUBUE.js} +7 -7
- package/dist/esm/{chunk-K62P6E3H.js.map → chunk-KBOIUBUE.js.map} +1 -1
- package/dist/esm/{chunk-VFDAQ42O.js → chunk-LTPPXK6F.js} +3 -3
- package/dist/esm/{chunk-VFDAQ42O.js.map → chunk-LTPPXK6F.js.map} +1 -1
- package/dist/esm/{chunk-ITRA3DUQ.js → chunk-NJPSC7SH.js} +2 -2
- package/dist/esm/{chunk-ITRA3DUQ.js.map → chunk-NJPSC7SH.js.map} +1 -1
- package/dist/esm/{chunk-BEXHMXCT.js → chunk-RHC3DIN3.js} +1 -1
- package/dist/esm/{chunk-BEXHMXCT.js.map → chunk-RHC3DIN3.js.map} +1 -1
- package/dist/esm/{chunk-TB6NTLZY.js → chunk-ROGN5SXC.js} +7 -7
- package/dist/esm/chunk-ROGN5SXC.js.map +7 -0
- package/dist/esm/{chunk-GNKVWDWW.js → chunk-UP6RBLG2.js} +5 -5
- package/dist/esm/chunk-UP6RBLG2.js.map +7 -0
- package/dist/esm/{chunk-NYAPGKCW.js → chunk-V55YSWJY.js} +1 -1
- package/dist/esm/{chunk-NYAPGKCW.js.map → chunk-V55YSWJY.js.map} +1 -1
- package/dist/esm/kpuzzle/index.js +2 -2
- package/dist/esm/notation/index.js +4 -2
- package/dist/esm/protocol/index.js +8 -8
- package/dist/esm/puzzle-geometry/index.js +2 -2
- package/dist/esm/puzzles/index.js +4 -4
- package/dist/esm/{puzzles-dynamic-side-events-HOXBZYWI.js → puzzles-dynamic-side-events-WZI4Y3N6.js} +1 -1
- package/dist/esm/{puzzles-dynamic-side-events-HOXBZYWI.js.map → puzzles-dynamic-side-events-WZI4Y3N6.js.map} +1 -1
- package/dist/esm/{puzzles-dynamic-unofficial-MGVOFUDR.js → puzzles-dynamic-unofficial-FUG3JBMH.js} +1 -1
- package/dist/esm/{puzzles-dynamic-unofficial-MGVOFUDR.js.map → puzzles-dynamic-unofficial-FUG3JBMH.js.map} +1 -1
- package/dist/esm/scramble/index.js +5 -5
- package/dist/esm/search/index.js +10 -10
- package/dist/esm/{search-dynamic-sgs-side-events-KK62JAWA.js → search-dynamic-sgs-side-events-ZTOWSMQT.js} +7 -7
- package/dist/esm/{search-dynamic-sgs-side-events-KK62JAWA.js.map → search-dynamic-sgs-side-events-ZTOWSMQT.js.map} +1 -1
- package/dist/esm/{search-dynamic-sgs-unofficial-VLNIEUW3.js → search-dynamic-sgs-unofficial-V6HZTLGM.js} +7 -7
- package/dist/esm/{search-dynamic-sgs-unofficial-VLNIEUW3.js.map → search-dynamic-sgs-unofficial-V6HZTLGM.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-3x3x3-K4TG7P3X.js → search-dynamic-solve-3x3x3-K42IWMQV.js} +1 -1
- package/dist/esm/{search-dynamic-solve-3x3x3-K4TG7P3X.js.map → search-dynamic-solve-3x3x3-K42IWMQV.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-4x4x4-S5JPXMNU.js → search-dynamic-solve-4x4x4-YH6SB2WB.js} +8 -8
- package/dist/esm/{search-dynamic-solve-4x4x4-S5JPXMNU.js.map → search-dynamic-solve-4x4x4-YH6SB2WB.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-fto-WROONLZS.js → search-dynamic-solve-fto-O6UXF7EC.js} +2 -2
- package/dist/esm/{search-dynamic-solve-fto-WROONLZS.js.map → search-dynamic-solve-fto-O6UXF7EC.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-kilominx-UEFJENHO.js → search-dynamic-solve-kilominx-ZPEOK4DY.js} +3 -3
- package/dist/esm/{search-dynamic-solve-kilominx-UEFJENHO.js.map → search-dynamic-solve-kilominx-ZPEOK4DY.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-master_tetraminx-3R2CJUKW.js → search-dynamic-solve-master_tetraminx-3RKD3IAN.js} +2 -2
- package/dist/esm/{search-dynamic-solve-master_tetraminx-3R2CJUKW.js.map → search-dynamic-solve-master_tetraminx-3RKD3IAN.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-sq1-RS5HN6AH.js → search-dynamic-solve-sq1-WIJEGVLP.js} +2 -2
- package/dist/esm/{search-dynamic-solve-sq1-RS5HN6AH.js.map → search-dynamic-solve-sq1-WIJEGVLP.js.map} +1 -1
- package/dist/esm/search-worker-inside-generated-string-T43JGYSP.js +3768 -0
- package/dist/esm/search-worker-inside-generated-string-T43JGYSP.js.map +7 -0
- package/dist/esm/{search-worker-js-entry-KJRZ3CJQ.js → search-worker-js-entry-3VKCL3RX.js} +21 -21
- package/dist/esm/search-worker-js-entry-3VKCL3RX.js.map +7 -0
- package/dist/esm/{search-worker-ts-entry-AFMPRPSV.js → search-worker-ts-entry-J3TDBCMV.js} +5 -5
- package/dist/esm/{search-worker-ts-entry-AFMPRPSV.js.map → search-worker-ts-entry-J3TDBCMV.js.map} +1 -1
- package/dist/esm/stream/index.js +4 -4
- package/dist/esm/stream/index.js.map +1 -1
- package/dist/esm/twisty/index.js +121 -84
- package/dist/esm/twisty/index.js.map +2 -2
- package/dist/esm/{twisty-dynamic-3d-AVZOMIIW.js → twisty-dynamic-3d-UQJETF7O.js} +7 -7
- package/dist/esm/{twisty-dynamic-3d-AVZOMIIW.js.map → twisty-dynamic-3d-UQJETF7O.js.map} +1 -1
- package/dist/types/{Alg-5cf4b166.d.ts → Alg-e2a80975.d.ts} +66 -53
- package/dist/types/{KState-84892e94.d.ts → KState-a2f0e651.d.ts} +49 -48
- package/dist/types/{TwizzleLink-02cfe1b1.d.ts → TwizzleLink-cd0fa192.d.ts} +181 -15
- package/dist/types/alg/index.d.ts +14 -6
- package/dist/types/bluetooth/index.d.ts +17 -7
- package/dist/types/{bluetooth-puzzle-0f2e5f07.d.ts → bluetooth-puzzle-3670a6a1.d.ts} +6 -9
- package/dist/types/kpuzzle/index.d.ts +2 -2
- package/dist/types/notation/index.d.ts +3 -2
- package/dist/types/{outside-d0ced6cc.d.ts → outside-0ce1b145.d.ts} +3 -2
- package/dist/types/parse-ec97687c.d.ts +9 -0
- package/dist/types/protocol/index.d.ts +7 -3
- package/dist/types/puzzle-geometry/index.d.ts +3 -3
- package/dist/types/puzzles/index.d.ts +10 -5
- package/dist/types/scramble/index.d.ts +3 -3
- package/dist/types/search/index.d.ts +3 -3
- package/dist/types/stream/index.d.ts +4 -4
- package/dist/types/twisty/index.d.ts +8 -10
- package/package.json +27 -24
- package/dist/esm/chunk-7K6HJKEG.js.map +0 -7
- package/dist/esm/chunk-FCB447RN.js.map +0 -7
- package/dist/esm/chunk-GNKVWDWW.js.map +0 -7
- package/dist/esm/chunk-GOBAXDTU.js.map +0 -7
- package/dist/esm/chunk-NHCGS73I.js.map +0 -7
- package/dist/esm/chunk-TB6NTLZY.js.map +0 -7
- package/dist/esm/chunk-VCOUFQGJ.js.map +0 -7
- package/dist/esm/search-worker-inside-generated-string-AVMDARJP.js +0 -3768
- package/dist/esm/search-worker-inside-generated-string-AVMDARJP.js.map +0 -7
- package/dist/esm/search-worker-js-entry-KJRZ3CJQ.js.map +0 -7
- package/dist/types/parse-9db7ee51.d.ts +0 -9
package/dist/esm/twisty/index.js
CHANGED
|
@@ -9,32 +9,33 @@ import {
|
|
|
9
9
|
TwistyPropDerived,
|
|
10
10
|
TwistyPropSource,
|
|
11
11
|
proxy3D
|
|
12
|
-
} from "../chunk-
|
|
13
|
-
import "../chunk-
|
|
12
|
+
} from "../chunk-7BLWQDZX.js";
|
|
13
|
+
import "../chunk-GVPTO3OF.js";
|
|
14
14
|
import {
|
|
15
15
|
countAnimatedLeaves,
|
|
16
16
|
countMoves
|
|
17
|
-
} from "../chunk-
|
|
17
|
+
} from "../chunk-47SWOA3X.js";
|
|
18
18
|
import {
|
|
19
19
|
cube3x3x3,
|
|
20
20
|
puzzles
|
|
21
|
-
} from "../chunk-
|
|
21
|
+
} from "../chunk-JAGHV77R.js";
|
|
22
22
|
import {
|
|
23
23
|
customPGPuzzleLoader
|
|
24
|
-
} from "../chunk-
|
|
25
|
-
import "../chunk-
|
|
24
|
+
} from "../chunk-LTPPXK6F.js";
|
|
25
|
+
import "../chunk-UP6RBLG2.js";
|
|
26
26
|
import {
|
|
27
27
|
Alg,
|
|
28
28
|
AlgBuilder,
|
|
29
29
|
Conjugate,
|
|
30
30
|
Grouping,
|
|
31
31
|
Move,
|
|
32
|
+
Pause,
|
|
32
33
|
TraversalDownUp,
|
|
33
34
|
TraversalUp,
|
|
34
35
|
direct,
|
|
35
36
|
directedGenerator,
|
|
36
37
|
experimentalAppendMove
|
|
37
|
-
} from "../chunk-
|
|
38
|
+
} from "../chunk-GXZIBFSN.js";
|
|
38
39
|
import {
|
|
39
40
|
__privateAdd,
|
|
40
41
|
__privateGet,
|
|
@@ -543,13 +544,14 @@ var KPuzzleSVGWrapper = class {
|
|
|
543
544
|
throw new Error(`No SVG definition for puzzle type: ${kpuzzle.name()}`);
|
|
544
545
|
}
|
|
545
546
|
this.svgID = nextSVGID();
|
|
546
|
-
this.
|
|
547
|
-
this.
|
|
548
|
-
this.
|
|
549
|
-
const svgElem = this.
|
|
547
|
+
this.wrapperElement = document.createElement("div");
|
|
548
|
+
this.wrapperElement.classList.add("svg-wrapper");
|
|
549
|
+
this.wrapperElement.innerHTML = svgSource;
|
|
550
|
+
const svgElem = this.wrapperElement.querySelector("svg");
|
|
550
551
|
if (!svgElem) {
|
|
551
552
|
throw new Error("Could not get SVG element");
|
|
552
553
|
}
|
|
554
|
+
this.svgElement = svgElem;
|
|
553
555
|
if (xmlns !== svgElem.namespaceURI) {
|
|
554
556
|
throw new Error("Unexpected XML namespace");
|
|
555
557
|
}
|
|
@@ -672,7 +674,7 @@ var KPuzzleSVGWrapper = class {
|
|
|
672
674
|
return orbitName + "-l" + idx + "-o" + orientation;
|
|
673
675
|
}
|
|
674
676
|
elementByID(id) {
|
|
675
|
-
return this.
|
|
677
|
+
return this.wrapperElement.querySelector("#" + id);
|
|
676
678
|
}
|
|
677
679
|
};
|
|
678
680
|
|
|
@@ -713,9 +715,9 @@ var Twisty2DPuzzle = class extends ManagedCustomElement {
|
|
|
713
715
|
partialMove = move.invert();
|
|
714
716
|
}
|
|
715
717
|
const newState = position.state.applyMove(partialMove);
|
|
716
|
-
this.
|
|
718
|
+
this.svgWrapper.draw(position.state, newState, position.movesInProgress[0].fraction);
|
|
717
719
|
} else {
|
|
718
|
-
this.
|
|
720
|
+
this.svgWrapper.draw(position.state);
|
|
719
721
|
__privateSet(this, _cachedPosition, position);
|
|
720
722
|
}
|
|
721
723
|
} catch (e) {
|
|
@@ -736,14 +738,14 @@ var Twisty2DPuzzle = class extends ManagedCustomElement {
|
|
|
736
738
|
})();
|
|
737
739
|
}
|
|
738
740
|
resetSVG(appearance) {
|
|
739
|
-
if (this.
|
|
740
|
-
this.removeElement(this.
|
|
741
|
+
if (this.svgWrapper) {
|
|
742
|
+
this.removeElement(this.svgWrapper.wrapperElement);
|
|
741
743
|
}
|
|
742
744
|
if (!this.kpuzzle) {
|
|
743
745
|
return;
|
|
744
746
|
}
|
|
745
|
-
this.
|
|
746
|
-
this.addElement(this.
|
|
747
|
+
this.svgWrapper = new KPuzzleSVGWrapper(this.kpuzzle, this.svgSource, appearance);
|
|
748
|
+
this.addElement(this.svgWrapper.wrapperElement);
|
|
747
749
|
if (__privateGet(this, _cachedPosition)) {
|
|
748
750
|
this.onPositionChange(__privateGet(this, _cachedPosition));
|
|
749
751
|
}
|
|
@@ -932,12 +934,13 @@ var Twisty3DPuzzleWrapper = class extends EventTarget {
|
|
|
932
934
|
}
|
|
933
935
|
}
|
|
934
936
|
});
|
|
935
|
-
__privateGet(this, _freshListenerManager4).
|
|
937
|
+
__privateGet(this, _freshListenerManager4).addMultiListener3([
|
|
938
|
+
this.model.twistySceneModel.stickering,
|
|
936
939
|
this.model.twistySceneModel.foundationStickerSprite,
|
|
937
940
|
this.model.twistySceneModel.hintStickerSprite
|
|
938
941
|
], async (inputs) => {
|
|
939
942
|
if ("experimentalUpdateTexture" in await this.twisty3DPuzzle()) {
|
|
940
|
-
(await this.twisty3DPuzzle()).experimentalUpdateTexture(
|
|
943
|
+
(await this.twisty3DPuzzle()).experimentalUpdateTexture(inputs[0] === "picture", inputs[1], inputs[2]);
|
|
941
944
|
this.scheduleRender();
|
|
942
945
|
}
|
|
943
946
|
});
|
|
@@ -1438,7 +1441,7 @@ function shareRenderer() {
|
|
|
1438
1441
|
return true;
|
|
1439
1442
|
}
|
|
1440
1443
|
}
|
|
1441
|
-
var _setupBasicPresses, setupBasicPresses_fn, _onResizeStaleDropper, _width, _height, _onResize, onResize_fn, _cachedRenderer, _cachedCanvas, _cachedDragTracker, _dragTracker, dragTracker_fn, _cachedCamera, _cachedOrbitControls, _disconnectionFunctions, _scheduler;
|
|
1444
|
+
var _setupBasicPresses, setupBasicPresses_fn, _onResizeStaleDropper, _width, _height, _onResize, onResize_fn, _cachedRenderer, _cachedCanvas, _cachedDragTracker, _dragTracker, dragTracker_fn, _cachedCamera, _cachedOrbitControls, _disconnectionFunctions, _experimentalNextRenderFinishedCallback, _scheduler;
|
|
1442
1445
|
var Twisty3DVantage = class extends ManagedCustomElement {
|
|
1443
1446
|
constructor(model, scene, options) {
|
|
1444
1447
|
super();
|
|
@@ -1460,6 +1463,7 @@ var Twisty3DVantage = class extends ManagedCustomElement {
|
|
|
1460
1463
|
__privateAdd(this, _cachedCamera, null);
|
|
1461
1464
|
__privateAdd(this, _cachedOrbitControls, null);
|
|
1462
1465
|
__privateAdd(this, _disconnectionFunctions, []);
|
|
1466
|
+
__privateAdd(this, _experimentalNextRenderFinishedCallback, null);
|
|
1463
1467
|
__privateAdd(this, _scheduler, new RenderScheduler(this.render.bind(this)));
|
|
1464
1468
|
this.scene = scene ?? null;
|
|
1465
1469
|
this.loadingElement = this.addElement(document.createElement("div"));
|
|
@@ -1543,7 +1547,11 @@ var Twisty3DVantage = class extends ManagedCustomElement {
|
|
|
1543
1547
|
}
|
|
1544
1548
|
__privateSet(this, _disconnectionFunctions, []);
|
|
1545
1549
|
}
|
|
1550
|
+
experimentalNextRenderFinishedCallback(callback) {
|
|
1551
|
+
__privateSet(this, _experimentalNextRenderFinishedCallback, callback);
|
|
1552
|
+
}
|
|
1546
1553
|
async render() {
|
|
1554
|
+
var _a;
|
|
1547
1555
|
if (!this.scene) {
|
|
1548
1556
|
throw new Error("Attempted to render without a scene");
|
|
1549
1557
|
}
|
|
@@ -1559,6 +1567,8 @@ var Twisty3DVantage = class extends ManagedCustomElement {
|
|
|
1559
1567
|
(await this.renderer()).render(scene, camera);
|
|
1560
1568
|
}
|
|
1561
1569
|
this.stats?.end();
|
|
1570
|
+
(_a = __privateGet(this, _experimentalNextRenderFinishedCallback)) == null ? void 0 : _a.call(this);
|
|
1571
|
+
__privateSet(this, _experimentalNextRenderFinishedCallback, null);
|
|
1562
1572
|
}
|
|
1563
1573
|
scheduleRender() {
|
|
1564
1574
|
__privateGet(this, _scheduler).requestAnimFrame();
|
|
@@ -1639,6 +1649,7 @@ dragTracker_fn = async function() {
|
|
|
1639
1649
|
_cachedCamera = new WeakMap();
|
|
1640
1650
|
_cachedOrbitControls = new WeakMap();
|
|
1641
1651
|
_disconnectionFunctions = new WeakMap();
|
|
1652
|
+
_experimentalNextRenderFinishedCallback = new WeakMap();
|
|
1642
1653
|
_scheduler = new WeakMap();
|
|
1643
1654
|
customElementsShim.define("twisty-3d-vantage", Twisty3DVantage);
|
|
1644
1655
|
|
|
@@ -2257,7 +2268,7 @@ async function getDefaultFilename(model) {
|
|
|
2257
2268
|
model.puzzleID.get(),
|
|
2258
2269
|
model.alg.get()
|
|
2259
2270
|
]);
|
|
2260
|
-
return `[${puzzleID}]${algWithIssues.alg.
|
|
2271
|
+
return `[${puzzleID}]${algWithIssues.alg.experimentalNumChildAlgNodes() === 0 ? "" : " " + algWithIssues.alg.toString()}`;
|
|
2261
2272
|
}
|
|
2262
2273
|
function downloadURL(url, name, extension = "png") {
|
|
2263
2274
|
const a = document.createElement("a");
|
|
@@ -2568,8 +2579,8 @@ var AlgDuration = class extends TraversalUp {
|
|
|
2568
2579
|
}
|
|
2569
2580
|
traverseAlg(alg) {
|
|
2570
2581
|
let total = 0;
|
|
2571
|
-
for (const
|
|
2572
|
-
total += this.
|
|
2582
|
+
for (const algNode of alg.childAlgNodes()) {
|
|
2583
|
+
total += this.traverseAlgNode(algNode);
|
|
2573
2584
|
}
|
|
2574
2585
|
return total;
|
|
2575
2586
|
}
|
|
@@ -2604,10 +2615,10 @@ var SimpleAlgIndexer = class {
|
|
|
2604
2615
|
this.moves = new Alg(alg.experimentalExpand());
|
|
2605
2616
|
}
|
|
2606
2617
|
getAnimLeaf(index) {
|
|
2607
|
-
return Array.from(this.moves.
|
|
2618
|
+
return Array.from(this.moves.childAlgNodes())[index];
|
|
2608
2619
|
}
|
|
2609
2620
|
indexToMoveStartTimestamp(index) {
|
|
2610
|
-
const alg = new Alg(Array.from(this.moves.
|
|
2621
|
+
const alg = new Alg(Array.from(this.moves.childAlgNodes()).slice(0, index));
|
|
2611
2622
|
return this.durationFn.traverseAlg(alg);
|
|
2612
2623
|
}
|
|
2613
2624
|
timestampToIndex(timestamp) {
|
|
@@ -2626,7 +2637,7 @@ var SimpleAlgIndexer = class {
|
|
|
2626
2637
|
}
|
|
2627
2638
|
transformationAtIndex(index) {
|
|
2628
2639
|
let state = this.kpuzzle.identityTransformation();
|
|
2629
|
-
for (const move of Array.from(this.moves.
|
|
2640
|
+
for (const move of Array.from(this.moves.childAlgNodes()).slice(0, index)) {
|
|
2630
2641
|
state = state.applyMove(move);
|
|
2631
2642
|
}
|
|
2632
2643
|
return state;
|
|
@@ -2663,8 +2674,8 @@ function isSameAxis(move1, move2) {
|
|
|
2663
2674
|
var LocalSimulMoves = class extends TraversalUp {
|
|
2664
2675
|
traverseAlg(alg) {
|
|
2665
2676
|
const processed = [];
|
|
2666
|
-
for (const
|
|
2667
|
-
processed.push(this.
|
|
2677
|
+
for (const childAlgNode of alg.childAlgNodes()) {
|
|
2678
|
+
processed.push(this.traverseAlgNode(childAlgNode));
|
|
2668
2679
|
}
|
|
2669
2680
|
return Array.prototype.concat(...processed);
|
|
2670
2681
|
}
|
|
@@ -2672,12 +2683,12 @@ var LocalSimulMoves = class extends TraversalUp {
|
|
|
2672
2683
|
if (alg.experimentalIsEmpty()) {
|
|
2673
2684
|
return [];
|
|
2674
2685
|
}
|
|
2675
|
-
for (const
|
|
2676
|
-
if (!
|
|
2686
|
+
for (const algNode of alg.childAlgNodes()) {
|
|
2687
|
+
if (!algNode.is(Move)) {
|
|
2677
2688
|
return this.traverseAlg(alg);
|
|
2678
2689
|
}
|
|
2679
2690
|
}
|
|
2680
|
-
const moves = Array.from(alg.
|
|
2691
|
+
const moves = Array.from(alg.childAlgNodes());
|
|
2681
2692
|
let maxSimulDur = defaultDurationForAmount(moves[0].amount);
|
|
2682
2693
|
for (let i = 0; i < moves.length - 1; i++) {
|
|
2683
2694
|
for (let j = 1; j < moves.length; j++) {
|
|
@@ -2689,7 +2700,7 @@ var LocalSimulMoves = class extends TraversalUp {
|
|
|
2689
2700
|
}
|
|
2690
2701
|
const localMovesWithRange = moves.map((blockMove) => {
|
|
2691
2702
|
return {
|
|
2692
|
-
|
|
2703
|
+
animLeafAlgNode: blockMove,
|
|
2693
2704
|
msUntilNext: 0,
|
|
2694
2705
|
duration: maxSimulDur
|
|
2695
2706
|
};
|
|
@@ -2709,7 +2720,7 @@ var LocalSimulMoves = class extends TraversalUp {
|
|
|
2709
2720
|
const duration = defaultDurationForAmount(move.amount);
|
|
2710
2721
|
return [
|
|
2711
2722
|
{
|
|
2712
|
-
|
|
2723
|
+
animLeafAlgNode: move,
|
|
2713
2724
|
msUntilNext: duration,
|
|
2714
2725
|
duration
|
|
2715
2726
|
}
|
|
@@ -2741,10 +2752,13 @@ var LocalSimulMoves = class extends TraversalUp {
|
|
|
2741
2752
|
return Array.prototype.concat(...processed);
|
|
2742
2753
|
}
|
|
2743
2754
|
traversePause(pause) {
|
|
2755
|
+
if (pause.experimentalNISSGrouping) {
|
|
2756
|
+
return [];
|
|
2757
|
+
}
|
|
2744
2758
|
const duration = defaultDurationForAmount(1);
|
|
2745
2759
|
return [
|
|
2746
2760
|
{
|
|
2747
|
-
|
|
2761
|
+
animLeafAlgNode: pause,
|
|
2748
2762
|
msUntilNext: duration,
|
|
2749
2763
|
duration
|
|
2750
2764
|
}
|
|
@@ -2763,7 +2777,7 @@ function simulMoves(a) {
|
|
|
2763
2777
|
let timestamp = 0;
|
|
2764
2778
|
const l = localSimulMoves(a).map((localSimulMove) => {
|
|
2765
2779
|
const leafWithRange = {
|
|
2766
|
-
animLeaf: localSimulMove.
|
|
2780
|
+
animLeaf: localSimulMove.animLeafAlgNode,
|
|
2767
2781
|
start: timestamp,
|
|
2768
2782
|
end: timestamp + localSimulMove.duration
|
|
2769
2783
|
};
|
|
@@ -2965,7 +2979,7 @@ var SimultaneousMoveIndexer = class {
|
|
|
2965
2979
|
};
|
|
2966
2980
|
|
|
2967
2981
|
// src/cubing/twisty/controllers/indexer/tree/AlgWalker.ts
|
|
2968
|
-
var
|
|
2982
|
+
var AlgWalkterDecoration = class {
|
|
2969
2983
|
constructor(moveCount, duration, forward, backward, children = []) {
|
|
2970
2984
|
this.moveCount = moveCount;
|
|
2971
2985
|
this.duration = duration;
|
|
@@ -2981,15 +2995,15 @@ var DecoratorConstructor = class extends TraversalUp {
|
|
|
2981
2995
|
this.durationFn = new AlgDuration(defaultDurationForAmount);
|
|
2982
2996
|
this.cache = {};
|
|
2983
2997
|
this.identity = kpuzzle.identityTransformation();
|
|
2984
|
-
this.dummyLeaf = new
|
|
2998
|
+
this.dummyLeaf = new AlgWalkterDecoration(0, 0, this.identity, this.identity, []);
|
|
2985
2999
|
}
|
|
2986
3000
|
traverseAlg(alg) {
|
|
2987
3001
|
let moveCount = 0;
|
|
2988
3002
|
let duration = 0;
|
|
2989
3003
|
let transformation = this.identity;
|
|
2990
3004
|
const child = [];
|
|
2991
|
-
for (const
|
|
2992
|
-
const apd = this.
|
|
3005
|
+
for (const algNode of alg.childAlgNodes()) {
|
|
3006
|
+
const apd = this.traverseAlgNode(algNode);
|
|
2993
3007
|
moveCount += apd.moveCount;
|
|
2994
3008
|
duration += apd.duration;
|
|
2995
3009
|
if (transformation === this.identity) {
|
|
@@ -2999,7 +3013,7 @@ var DecoratorConstructor = class extends TraversalUp {
|
|
|
2999
3013
|
}
|
|
3000
3014
|
child.push(apd);
|
|
3001
3015
|
}
|
|
3002
|
-
return new
|
|
3016
|
+
return new AlgWalkterDecoration(moveCount, duration, transformation, transformation.invert(), child);
|
|
3003
3017
|
}
|
|
3004
3018
|
traverseGrouping(grouping) {
|
|
3005
3019
|
const dec = this.traverseAlg(grouping.alg);
|
|
@@ -3012,7 +3026,7 @@ var DecoratorConstructor = class extends TraversalUp {
|
|
|
3012
3026
|
return r;
|
|
3013
3027
|
}
|
|
3014
3028
|
const transformation = this.kpuzzle.moveToTransformation(move);
|
|
3015
|
-
r = new
|
|
3029
|
+
r = new AlgWalkterDecoration(1, this.durationFn.traverseAlgNode(move), transformation, transformation.invert());
|
|
3016
3030
|
this.cache[key] = r;
|
|
3017
3031
|
return r;
|
|
3018
3032
|
}
|
|
@@ -3022,7 +3036,7 @@ var DecoratorConstructor = class extends TraversalUp {
|
|
|
3022
3036
|
const AB = decA.forward.applyTransformation(decB.forward);
|
|
3023
3037
|
const ApBp = decA.backward.applyTransformation(decB.backward);
|
|
3024
3038
|
const ABApBp = AB.applyTransformation(ApBp);
|
|
3025
|
-
const dec = new
|
|
3039
|
+
const dec = new AlgWalkterDecoration(2 * (decA.moveCount + decB.moveCount), 2 * (decA.duration + decB.duration), ABApBp, ABApBp.invert(), [decA, decB]);
|
|
3026
3040
|
return this.mult(dec, 1, [dec, decA, decB]);
|
|
3027
3041
|
}
|
|
3028
3042
|
traverseConjugate(conjugate) {
|
|
@@ -3030,11 +3044,14 @@ var DecoratorConstructor = class extends TraversalUp {
|
|
|
3030
3044
|
const decB = this.traverseAlg(conjugate.B);
|
|
3031
3045
|
const AB = decA.forward.applyTransformation(decB.forward);
|
|
3032
3046
|
const ABAp = AB.applyTransformation(decA.backward);
|
|
3033
|
-
const dec = new
|
|
3047
|
+
const dec = new AlgWalkterDecoration(2 * decA.moveCount + decB.moveCount, 2 * decA.duration + decB.duration, ABAp, ABAp.invert(), [decA, decB]);
|
|
3034
3048
|
return this.mult(dec, 1, [dec, decA, decB]);
|
|
3035
3049
|
}
|
|
3036
3050
|
traversePause(pause) {
|
|
3037
|
-
|
|
3051
|
+
if (pause.experimentalNISSGrouping) {
|
|
3052
|
+
return this.dummyLeaf;
|
|
3053
|
+
}
|
|
3054
|
+
return new AlgWalkterDecoration(1, this.durationFn.traverseAlgNode(pause), this.identity, this.identity);
|
|
3038
3055
|
}
|
|
3039
3056
|
traverseNewline(_newline) {
|
|
3040
3057
|
return this.dummyLeaf;
|
|
@@ -3045,7 +3062,7 @@ var DecoratorConstructor = class extends TraversalUp {
|
|
|
3045
3062
|
mult(apd, n, child) {
|
|
3046
3063
|
const absn = Math.abs(n);
|
|
3047
3064
|
const st = apd.forward.selfMultiply(n);
|
|
3048
|
-
return new
|
|
3065
|
+
return new AlgWalkterDecoration(apd.moveCount * absn, apd.duration * absn, st, st.invert(), child);
|
|
3049
3066
|
}
|
|
3050
3067
|
};
|
|
3051
3068
|
var WalkerDown = class {
|
|
@@ -3055,10 +3072,10 @@ var WalkerDown = class {
|
|
|
3055
3072
|
}
|
|
3056
3073
|
};
|
|
3057
3074
|
var AlgWalker = class extends TraversalDownUp {
|
|
3058
|
-
constructor(kpuzzle,
|
|
3075
|
+
constructor(kpuzzle, algOrAlgNode, apd) {
|
|
3059
3076
|
super();
|
|
3060
3077
|
this.kpuzzle = kpuzzle;
|
|
3061
|
-
this.
|
|
3078
|
+
this.algOrAlgNode = algOrAlgNode;
|
|
3062
3079
|
this.apd = apd;
|
|
3063
3080
|
this.i = -1;
|
|
3064
3081
|
this.dur = -1;
|
|
@@ -3091,16 +3108,16 @@ var AlgWalker = class extends TraversalDownUp {
|
|
|
3091
3108
|
this.moveDuration = 0;
|
|
3092
3109
|
this.back = false;
|
|
3093
3110
|
this.st = this.kpuzzle.identityTransformation();
|
|
3094
|
-
const r = this.
|
|
3111
|
+
const r = this.algOrAlgNode.is(Alg) ? this.traverseAlg(this.algOrAlgNode, this.root) : this.traverseAlgNode(this.algOrAlgNode, this.root);
|
|
3095
3112
|
return r;
|
|
3096
3113
|
}
|
|
3097
3114
|
traverseAlg(alg, wd) {
|
|
3098
3115
|
if (!this.firstcheck(wd)) {
|
|
3099
3116
|
return false;
|
|
3100
3117
|
}
|
|
3101
|
-
let i = wd.back ? alg.
|
|
3102
|
-
for (const
|
|
3103
|
-
if (this.
|
|
3118
|
+
let i = wd.back ? alg.experimentalNumChildAlgNodes() - 1 : 0;
|
|
3119
|
+
for (const algNode of directedGenerator(alg.childAlgNodes(), wd.back ? -1 /* Backwards */ : 1 /* Forwards */)) {
|
|
3120
|
+
if (this.traverseAlgNode(algNode, new WalkerDown(wd.apd.children[i], wd.back))) {
|
|
3104
3121
|
return true;
|
|
3105
3122
|
}
|
|
3106
3123
|
i += wd.back ? -1 : 1;
|
|
@@ -3207,9 +3224,9 @@ var MIN_CHUNKING_THRESHOLD = 16;
|
|
|
3207
3224
|
function chunkifyAlg(alg, chunkMaxLength) {
|
|
3208
3225
|
const mainAlgBuilder = new AlgBuilder();
|
|
3209
3226
|
const chunkAlgBuilder = new AlgBuilder();
|
|
3210
|
-
for (const
|
|
3211
|
-
chunkAlgBuilder.push(
|
|
3212
|
-
if (chunkAlgBuilder.
|
|
3227
|
+
for (const algNode of alg.childAlgNodes()) {
|
|
3228
|
+
chunkAlgBuilder.push(algNode);
|
|
3229
|
+
if (chunkAlgBuilder.experimentalNumAlgNodes() >= chunkMaxLength) {
|
|
3213
3230
|
mainAlgBuilder.push(new Grouping(chunkAlgBuilder.toAlg()));
|
|
3214
3231
|
chunkAlgBuilder.reset();
|
|
3215
3232
|
}
|
|
@@ -3219,7 +3236,7 @@ function chunkifyAlg(alg, chunkMaxLength) {
|
|
|
3219
3236
|
}
|
|
3220
3237
|
var ChunkAlgs = class extends TraversalUp {
|
|
3221
3238
|
traverseAlg(alg) {
|
|
3222
|
-
const algLength = alg.
|
|
3239
|
+
const algLength = alg.experimentalNumChildAlgNodes();
|
|
3223
3240
|
if (algLength < MIN_CHUNKING_THRESHOLD) {
|
|
3224
3241
|
return alg;
|
|
3225
3242
|
}
|
|
@@ -4279,15 +4296,19 @@ var TwistyPlayer = class extends TwistyPlayerSettable {
|
|
|
4279
4296
|
});
|
|
4280
4297
|
}
|
|
4281
4298
|
}
|
|
4282
|
-
async
|
|
4299
|
+
async experimentalCurrentVantages() {
|
|
4283
4300
|
this.connectedCallback();
|
|
4284
4301
|
const wrapper = __privateGet(this, _visualizationWrapper);
|
|
4285
|
-
const canvases = [];
|
|
4286
4302
|
if (wrapper instanceof Twisty3DSceneWrapper) {
|
|
4287
|
-
|
|
4288
|
-
|
|
4289
|
-
|
|
4290
|
-
|
|
4303
|
+
return wrapper.experimentalVantages();
|
|
4304
|
+
}
|
|
4305
|
+
return [];
|
|
4306
|
+
}
|
|
4307
|
+
async experimentalCurrentCanvases() {
|
|
4308
|
+
const vantages = await this.experimentalCurrentVantages();
|
|
4309
|
+
const canvases = [];
|
|
4310
|
+
for (const vantage of vantages) {
|
|
4311
|
+
canvases.push((await vantage.canvasInfo()).canvas);
|
|
4291
4312
|
}
|
|
4292
4313
|
return canvases;
|
|
4293
4314
|
}
|
|
@@ -4296,17 +4317,18 @@ var TwistyPlayer = class extends TwistyPlayerSettable {
|
|
|
4296
4317
|
const sceneWrapper = await __privateGet(this, _initial3DVisualizationWrapper).promise;
|
|
4297
4318
|
const puzzleWrapper = await sceneWrapper.experimentalTwisty3DPuzzleWrapper();
|
|
4298
4319
|
const twisty3DPuzzlePromise = puzzleWrapper.twisty3DPuzzle();
|
|
4299
|
-
const
|
|
4320
|
+
const safeToCallback = (async () => {
|
|
4321
|
+
await twisty3DPuzzlePromise;
|
|
4322
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
4323
|
+
})();
|
|
4300
4324
|
if (puzzleChangeCallback) {
|
|
4301
4325
|
const scheduler = new RenderScheduler(async () => {
|
|
4302
4326
|
});
|
|
4303
4327
|
puzzleWrapper.addEventListener("render-scheduled", async () => {
|
|
4304
4328
|
if (!scheduler.requestIsPending()) {
|
|
4305
4329
|
scheduler.requestAnimFrame();
|
|
4306
|
-
|
|
4307
|
-
|
|
4308
|
-
puzzleChangeCallback();
|
|
4309
|
-
})();
|
|
4330
|
+
await safeToCallback;
|
|
4331
|
+
puzzleChangeCallback();
|
|
4310
4332
|
}
|
|
4311
4333
|
});
|
|
4312
4334
|
}
|
|
@@ -4354,7 +4376,7 @@ var TwistyPlayer = class extends TwistyPlayerSettable {
|
|
|
4354
4376
|
if (["2D", "experimental-2D-LL"].includes(await this.experimentalModel.visualizationStrategy.get())) {
|
|
4355
4377
|
const wrapper2D = __privateGet(this, _visualizationWrapper);
|
|
4356
4378
|
const twisty2DPuzzle = await wrapper2D.currentTwisty2DPuzzleWrapper().twisty2DPuzzle();
|
|
4357
|
-
const str = new XMLSerializer().serializeToString(twisty2DPuzzle.
|
|
4379
|
+
const str = new XMLSerializer().serializeToString(twisty2DPuzzle.svgWrapper.svgElement);
|
|
4358
4380
|
const url = URL.createObjectURL(new Blob([str]));
|
|
4359
4381
|
downloadURL(url, filename ?? await getDefaultFilename(this.experimentalModel), "svg");
|
|
4360
4382
|
} else {
|
|
@@ -4399,7 +4421,11 @@ customElementsShim.define("twisty-player", TwistyPlayer);
|
|
|
4399
4421
|
// src/cubing/twisty/views/TwistyAlgViewer.css.ts
|
|
4400
4422
|
var twistyAlgViewerCSS = new CSSSource(`
|
|
4401
4423
|
:host {
|
|
4402
|
-
display: inline
|
|
4424
|
+
display: inline;
|
|
4425
|
+
}
|
|
4426
|
+
|
|
4427
|
+
.wrapper {
|
|
4428
|
+
display: inline;
|
|
4403
4429
|
}
|
|
4404
4430
|
|
|
4405
4431
|
a:not(:hover) {
|
|
@@ -4424,9 +4450,9 @@ twisty-alg-leaf-elem.twisty-alg-comment {
|
|
|
4424
4450
|
// src/cubing/twisty/views/TwistyAlgViewer.ts
|
|
4425
4451
|
var DEFAULT_OFFSET_MS = 250;
|
|
4426
4452
|
var TwistyAlgLeafElem = class extends ManagedCustomElement {
|
|
4427
|
-
constructor(className, text, dataDown,
|
|
4453
|
+
constructor(className, text, dataDown, algOrAlgNode, offsetIntoMove, clickable) {
|
|
4428
4454
|
super({ mode: "open" });
|
|
4429
|
-
this.
|
|
4455
|
+
this.algOrAlgNode = algOrAlgNode;
|
|
4430
4456
|
this.classList.add(className);
|
|
4431
4457
|
this.addCSS(twistyAlgViewerCSS);
|
|
4432
4458
|
if (clickable) {
|
|
@@ -4450,9 +4476,9 @@ var TwistyAlgLeafElem = class extends ManagedCustomElement {
|
|
|
4450
4476
|
};
|
|
4451
4477
|
customElementsShim.define("twisty-alg-leaf-elem", TwistyAlgLeafElem);
|
|
4452
4478
|
var TwistyAlgWrapperElem = class extends HTMLElementShim {
|
|
4453
|
-
constructor(className,
|
|
4479
|
+
constructor(className, algOrAlgNode) {
|
|
4454
4480
|
super();
|
|
4455
|
-
this.
|
|
4481
|
+
this.algOrAlgNode = algOrAlgNode;
|
|
4456
4482
|
this.queue = [];
|
|
4457
4483
|
this.classList.add(className);
|
|
4458
4484
|
}
|
|
@@ -4493,16 +4519,24 @@ var AlgToDOMTree = class extends TraversalDownUp {
|
|
|
4493
4519
|
let moveCount = 0;
|
|
4494
4520
|
const element = new TwistyAlgWrapperElem("twisty-alg-alg", alg);
|
|
4495
4521
|
let first = true;
|
|
4496
|
-
for (const
|
|
4522
|
+
for (const algNode of direct(alg.childAlgNodes(), dataDown.direction)) {
|
|
4497
4523
|
if (!first) {
|
|
4498
4524
|
element.addString(" ");
|
|
4499
4525
|
}
|
|
4500
4526
|
first = false;
|
|
4501
|
-
|
|
4502
|
-
|
|
4503
|
-
|
|
4504
|
-
|
|
4505
|
-
|
|
4527
|
+
if (algNode.as(Pause)?.experimentalNISSGrouping) {
|
|
4528
|
+
element.addString("^(");
|
|
4529
|
+
}
|
|
4530
|
+
if (!algNode.as(Grouping)?.experimentalNISSPlaceholder) {
|
|
4531
|
+
moveCount += element.addElem(this.traverseAlgNode(algNode, {
|
|
4532
|
+
earliestMoveIndex: dataDown.earliestMoveIndex + moveCount,
|
|
4533
|
+
twistyAlgViewer: dataDown.twistyAlgViewer,
|
|
4534
|
+
direction: dataDown.direction
|
|
4535
|
+
}));
|
|
4536
|
+
}
|
|
4537
|
+
if (algNode.as(Pause)?.experimentalNISSGrouping) {
|
|
4538
|
+
element.addString(")");
|
|
4539
|
+
}
|
|
4506
4540
|
}
|
|
4507
4541
|
element.flushQueue(dataDown.direction);
|
|
4508
4542
|
return {
|
|
@@ -4597,6 +4631,9 @@ var AlgToDOMTree = class extends TraversalDownUp {
|
|
|
4597
4631
|
};
|
|
4598
4632
|
}
|
|
4599
4633
|
traversePause(pause, dataDown) {
|
|
4634
|
+
if (pause.experimentalNISSGrouping) {
|
|
4635
|
+
return this.traverseAlg(pause.experimentalNISSGrouping.alg, dataDown);
|
|
4636
|
+
}
|
|
4600
4637
|
return {
|
|
4601
4638
|
moveCount: 1,
|
|
4602
4639
|
element: new TwistyAlgLeafElem("twisty-alg-pause", ".", dataDown, pause, true, true)
|
|
@@ -4746,17 +4783,17 @@ customElementsShim.define("twisty-alg-viewer", TwistyAlgViewer);
|
|
|
4746
4783
|
// src/cubing/twisty/views/TwistyAlgEditor/LeafTokens.ts
|
|
4747
4784
|
var LeafTokens = class extends TraversalDownUp {
|
|
4748
4785
|
traverseAlg(alg, dataDown) {
|
|
4749
|
-
const
|
|
4786
|
+
const algNodeArrays = [];
|
|
4750
4787
|
let numMovesInside = 0;
|
|
4751
|
-
for (const
|
|
4752
|
-
const dataUp = this.
|
|
4788
|
+
for (const algNode of alg.childAlgNodes()) {
|
|
4789
|
+
const dataUp = this.traverseAlgNode(algNode, {
|
|
4753
4790
|
numMovesSofar: dataDown.numMovesSofar + numMovesInside
|
|
4754
4791
|
});
|
|
4755
|
-
|
|
4792
|
+
algNodeArrays.push(dataUp.tokens);
|
|
4756
4793
|
numMovesInside += dataUp.numLeavesInside;
|
|
4757
4794
|
}
|
|
4758
4795
|
return {
|
|
4759
|
-
tokens: Array.prototype.concat(...
|
|
4796
|
+
tokens: Array.prototype.concat(...algNodeArrays),
|
|
4760
4797
|
numLeavesInside: numMovesInside
|
|
4761
4798
|
};
|
|
4762
4799
|
}
|