cubing 0.24.1 → 0.24.5
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 +37 -7
- package/dist/esm/{2x2x2.sgs.json-2QRQG2UF.js → 2x2x2.sgs.json-EH524KJ3.js} +2 -2
- package/dist/esm/{2x2x2.sgs.json-2QRQG2UF.js.map → 2x2x2.sgs.json-EH524KJ3.js.map} +0 -0
- package/dist/esm/{3d-dynamic-inside-EQIKTTYZ.js → 3d-dynamic-inside-P5DSR3RN.js} +3 -4
- package/dist/esm/{3d-dynamic-inside-EQIKTTYZ.js.map → 3d-dynamic-inside-P5DSR3RN.js.map} +2 -2
- package/dist/esm/bluetooth/index.js +1 -1
- package/dist/esm/{chunk-42DBDQQX.js → chunk-62T523ZS.js} +2 -2
- package/dist/esm/{chunk-42DBDQQX.js.map → chunk-62T523ZS.js.map} +0 -0
- package/dist/esm/{chunk-BBEJTW6Z.js → chunk-63M53ZZ5.js} +2 -2
- package/dist/esm/{chunk-BBEJTW6Z.js.map → chunk-63M53ZZ5.js.map} +0 -0
- package/dist/esm/{chunk-YVHK2LDM.js → chunk-IVWBK3I7.js} +2 -2
- package/dist/esm/{chunk-YVHK2LDM.js.map → chunk-IVWBK3I7.js.map} +0 -0
- package/dist/esm/{chunk-ZDALYMGF.js → chunk-KRL5KQQK.js} +32 -3
- package/dist/esm/chunk-KRL5KQQK.js.map +7 -0
- package/dist/esm/{chunk-37CDJ45V.js → chunk-RQWADVHJ.js} +3 -3
- package/dist/esm/{chunk-37CDJ45V.js.map → chunk-RQWADVHJ.js.map} +0 -0
- package/dist/esm/{chunk-B6IDD5MD.js → chunk-S2IF3HZB.js} +2 -2
- package/dist/esm/{chunk-B6IDD5MD.js.map → chunk-S2IF3HZB.js.map} +0 -0
- package/dist/esm/{chunk-SLUMTYHP.js → chunk-T3IR6NP3.js} +4 -5
- package/dist/esm/chunk-T3IR6NP3.js.map +7 -0
- package/dist/esm/{chunk-LR6VCMD2.js → chunk-V5DHYMZ7.js} +2 -2
- package/dist/esm/{chunk-LR6VCMD2.js.map → chunk-V5DHYMZ7.js.map} +0 -0
- package/dist/esm/{entry-UARUM747.js → entry-5ASY5DZU.js} +14 -14
- package/dist/esm/{entry-UARUM747.js.map → entry-5ASY5DZU.js.map} +0 -0
- package/dist/esm/{fto.sgs.json-DKPRQRDL.js → fto.sgs.json-ADHMZWSD.js} +2 -2
- package/dist/esm/{fto.sgs.json-DKPRQRDL.js.map → fto.sgs.json-ADHMZWSD.js.map} +0 -0
- package/dist/esm/{megaminx.sgs.json-3UELYHNZ.js → megaminx.sgs.json-6QTJOWQY.js} +3 -3
- package/dist/esm/{megaminx.sgs.json-3UELYHNZ.js.map → megaminx.sgs.json-6QTJOWQY.js.map} +0 -0
- package/dist/esm/{module-entry-7NBG44KF.js → module-entry-HW3RWVEP.js} +2 -2
- package/dist/esm/{module-entry-7NBG44KF.js.map → module-entry-HW3RWVEP.js.map} +0 -0
- package/dist/esm/puzzle-geometry/index.js +1 -1
- package/dist/esm/puzzles/index.js +1 -1
- package/dist/esm/{pyraminx.sgs.json-KGPI57MS.js → pyraminx.sgs.json-W4FJVYCV.js} +3 -3
- package/dist/esm/{pyraminx.sgs.json-KGPI57MS.js.map → pyraminx.sgs.json-W4FJVYCV.js.map} +0 -0
- package/dist/esm/scramble/index.js +3 -3
- package/dist/esm/{scramble_444-M3Q3OZN3.js → scramble_444-QBE4UGPU.js} +3 -3
- package/dist/esm/{scramble_444-M3Q3OZN3.js.map → scramble_444-QBE4UGPU.js.map} +0 -0
- package/dist/esm/search/index.js +3 -3
- package/dist/esm/{skewb.sgs.json-QVGBEYZV.js → skewb.sgs.json-PE7DQP2D.js} +3 -3
- package/dist/esm/{skewb.sgs.json-QVGBEYZV.js.map → skewb.sgs.json-PE7DQP2D.js.map} +0 -0
- package/dist/esm/twisty/index.js +301 -251
- package/dist/esm/twisty/index.js.map +3 -3
- package/dist/esm/{worker-inside-generated-string-6QDQTUCQ.js → worker-inside-generated-string-XYHIVIPG.js} +21 -21
- package/dist/esm/worker-inside-generated-string-XYHIVIPG.js.map +7 -0
- package/dist/types/puzzle-geometry/FaceNameSwizzler.d.ts +1 -0
- package/dist/types/puzzle-geometry/PermOriSet.d.ts +2 -1
- package/dist/types/puzzle-geometry/PuzzleGeometry.d.ts +1 -0
- package/dist/types/search/worker-inside-generated-string.d.ts +1 -1
- package/dist/types/twisty/controllers/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts +5 -4
- package/dist/types/twisty/model/TwistyPlayerModel.d.ts +46 -42
- package/dist/types/twisty/model/props/puzzle/state/AlgTransformationProp.d.ts +1 -1
- package/dist/types/twisty/model/props/puzzle/state/AnchorTransformationProp.d.ts +14 -0
- package/dist/types/twisty/model/props/puzzle/state/SetupTransformationProp.d.ts +5 -0
- package/dist/types/twisty/model/props/timeline/CoarseTimelineInfoProp.d.ts +1 -1
- package/dist/types/twisty/model/props/viewer/ButtonAppearanceProp.d.ts +1 -1
- package/dist/types/twisty/views/3D/Twisty3DVantage.d.ts +1 -0
- package/dist/types/twisty/views/ManagedCustomElement.d.ts +1 -1
- package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.d.ts +1 -1
- package/dist/types/twisty/views/TwistyPlayer.d.ts +2 -2
- package/dist/types/twisty/views/control-panel/{TwistyButtonsV2.css.d.ts → TwistyButtons.css.d.ts} +0 -0
- package/dist/types/twisty/views/control-panel/{TwistyButtonsV2.d.ts → TwistyButtons.d.ts} +3 -3
- package/dist/types/twisty/views/control-panel/{TwistyScrubberV2.d.ts → TwistyScrubber.d.ts} +1 -1
- package/dist/types/twisty/views/twizzle/TwizzleLink.d.ts +2 -0
- package/package.json +2 -2
- package/dist/esm/chunk-SLUMTYHP.js.map +0 -7
- package/dist/esm/chunk-ZDALYMGF.js.map +0 -7
- package/dist/esm/worker-inside-generated-string-6QDQTUCQ.js.map +0 -7
- package/dist/types/twisty/controllers/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.d.ts +0 -22
- package/dist/types/twisty/model/props/puzzle/state/AnchoredStartProp.d.ts +0 -13
package/dist/esm/twisty/index.js
CHANGED
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
TwistyPropDerived,
|
|
11
11
|
TwistyPropSource,
|
|
12
12
|
proxy3D
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-62T523ZS.js";
|
|
14
14
|
import {
|
|
15
15
|
countAnimatedLeaves,
|
|
16
16
|
countMoves
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
cubeAppearance,
|
|
21
21
|
customPGPuzzleLoader,
|
|
22
22
|
puzzles
|
|
23
|
-
} from "../chunk-
|
|
23
|
+
} from "../chunk-T3IR6NP3.js";
|
|
24
24
|
import "../chunk-B27E6KTE.js";
|
|
25
25
|
import {
|
|
26
26
|
Alg,
|
|
@@ -144,8 +144,8 @@ var CatchUpHelper = class {
|
|
|
144
144
|
this.scheduler.requestAnimFrame();
|
|
145
145
|
const delta = (timestamp - this.lastTimestamp) / this.catchUpMs;
|
|
146
146
|
this.lastTimestamp = timestamp;
|
|
147
|
-
this.model.
|
|
148
|
-
const previousCatchUpMove = await this.model.
|
|
147
|
+
this.model.catchUpMove.set((async () => {
|
|
148
|
+
const previousCatchUpMove = await this.model.catchUpMove.get();
|
|
149
149
|
if (previousCatchUpMove.move === null) {
|
|
150
150
|
return previousCatchUpMove;
|
|
151
151
|
}
|
|
@@ -153,7 +153,7 @@ var CatchUpHelper = class {
|
|
|
153
153
|
if (amount >= 1) {
|
|
154
154
|
this.pendingFrame = true;
|
|
155
155
|
this.stop();
|
|
156
|
-
this.model.
|
|
156
|
+
this.model.timestampRequest.set("end");
|
|
157
157
|
return {
|
|
158
158
|
move: null,
|
|
159
159
|
amount: 0
|
|
@@ -179,9 +179,9 @@ var TwistyAnimationController = class {
|
|
|
179
179
|
__privateAdd(this, _animFrameEffectiveTimestampStaleDropper, new StaleDropper());
|
|
180
180
|
this.model = model;
|
|
181
181
|
this.lastTimestampPromise = __privateMethod(this, _effectiveTimestampMilliseconds, effectiveTimestampMilliseconds_fn).call(this);
|
|
182
|
-
this.model.
|
|
182
|
+
this.model.playingInfo.addFreshListener(this.onPlayingProp.bind(this));
|
|
183
183
|
this.catchUpHelper = new CatchUpHelper(this.model);
|
|
184
|
-
this.model.
|
|
184
|
+
this.model.catchUpMove.addFreshListener(this.onCatchUpMoveProp.bind(this));
|
|
185
185
|
}
|
|
186
186
|
async onPlayingProp(playingInfo) {
|
|
187
187
|
if (playingInfo.playing !== this.playing) {
|
|
@@ -196,14 +196,14 @@ var TwistyAnimationController = class {
|
|
|
196
196
|
this.scheduler.requestAnimFrame();
|
|
197
197
|
}
|
|
198
198
|
jumpToStart(options) {
|
|
199
|
-
this.model.
|
|
199
|
+
this.model.timestampRequest.set("start");
|
|
200
200
|
this.pause();
|
|
201
201
|
if (options?.flash) {
|
|
202
202
|
this.delegate.flash();
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
jumpToEnd(options) {
|
|
206
|
-
this.model.
|
|
206
|
+
this.model.timestampRequest.set("end");
|
|
207
207
|
this.pause();
|
|
208
208
|
if (options?.flash) {
|
|
209
209
|
this.delegate.flash();
|
|
@@ -218,18 +218,18 @@ var TwistyAnimationController = class {
|
|
|
218
218
|
}
|
|
219
219
|
async play(options) {
|
|
220
220
|
const direction = options?.direction ?? Direction.Forwards;
|
|
221
|
-
const coarseTimelineInfo = await this.model.
|
|
221
|
+
const coarseTimelineInfo = await this.model.coarseTimelineInfo.get();
|
|
222
222
|
if (options?.autoSkipToOtherEndIfStartingAtBoundary ?? true) {
|
|
223
223
|
if (direction === Direction.Forwards && coarseTimelineInfo.atEnd) {
|
|
224
|
-
this.model.
|
|
224
|
+
this.model.timestampRequest.set("start");
|
|
225
225
|
this.delegate.flash();
|
|
226
226
|
}
|
|
227
227
|
if (direction === Direction.Backwards && coarseTimelineInfo.atStart) {
|
|
228
|
-
this.model.
|
|
228
|
+
this.model.timestampRequest.set("end");
|
|
229
229
|
this.delegate.flash();
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
|
-
this.model.
|
|
232
|
+
this.model.playingInfo.set({
|
|
233
233
|
playing: true,
|
|
234
234
|
direction,
|
|
235
235
|
untilBoundary: options?.untilBoundary ?? BoundaryType.EntireTimeline,
|
|
@@ -243,7 +243,7 @@ var TwistyAnimationController = class {
|
|
|
243
243
|
pause() {
|
|
244
244
|
this.playing = false;
|
|
245
245
|
this.scheduler.cancelAnimFrame();
|
|
246
|
-
this.model.
|
|
246
|
+
this.model.playingInfo.set({
|
|
247
247
|
playing: false,
|
|
248
248
|
untilBoundary: BoundaryType.EntireTimeline
|
|
249
249
|
});
|
|
@@ -254,11 +254,11 @@ var TwistyAnimationController = class {
|
|
|
254
254
|
}
|
|
255
255
|
const lastDatestamp = this.lastDatestamp;
|
|
256
256
|
const freshenerResult = await __privateGet(this, _animFrameEffectiveTimestampStaleDropper).queue(Promise.all([
|
|
257
|
-
this.model.
|
|
257
|
+
this.model.playingInfo.get(),
|
|
258
258
|
this.lastTimestampPromise,
|
|
259
|
-
this.model.
|
|
260
|
-
this.model.
|
|
261
|
-
this.model.
|
|
259
|
+
this.model.timeRange.get(),
|
|
260
|
+
this.model.tempoScale.get(),
|
|
261
|
+
this.model.currentMoveInfo.get()
|
|
262
262
|
]));
|
|
263
263
|
const [playingInfo, lastTimestamp, timeRange, tempoScale, currentMoveInfo] = freshenerResult;
|
|
264
264
|
if (!playingInfo.playing) {
|
|
@@ -288,7 +288,7 @@ var TwistyAnimationController = class {
|
|
|
288
288
|
newTimestamp = end;
|
|
289
289
|
}
|
|
290
290
|
this.playing = false;
|
|
291
|
-
this.model.
|
|
291
|
+
this.model.playingInfo.set({
|
|
292
292
|
playing: false
|
|
293
293
|
});
|
|
294
294
|
}
|
|
@@ -302,19 +302,19 @@ var TwistyAnimationController = class {
|
|
|
302
302
|
newTimestamp = start;
|
|
303
303
|
}
|
|
304
304
|
this.playing = false;
|
|
305
|
-
this.model.
|
|
305
|
+
this.model.playingInfo.set({
|
|
306
306
|
playing: false
|
|
307
307
|
});
|
|
308
308
|
}
|
|
309
309
|
}
|
|
310
310
|
this.lastDatestamp = frameDatestamp;
|
|
311
311
|
this.lastTimestampPromise = Promise.resolve(newTimestamp);
|
|
312
|
-
this.model.
|
|
312
|
+
this.model.timestampRequest.set(newSmartTimestampRequest ?? newTimestamp);
|
|
313
313
|
}
|
|
314
314
|
};
|
|
315
315
|
_effectiveTimestampMilliseconds = new WeakSet();
|
|
316
316
|
effectiveTimestampMilliseconds_fn = async function() {
|
|
317
|
-
return (await this.model.
|
|
317
|
+
return (await this.model.detailedTimelineInfo.get()).timestamp;
|
|
318
318
|
};
|
|
319
319
|
_animFrameEffectiveTimestampStaleDropper = new WeakMap();
|
|
320
320
|
|
|
@@ -395,13 +395,15 @@ var ManagedCustomElement = class extends HTMLElementShim {
|
|
|
395
395
|
this.shadow.appendChild(this.contentWrapper);
|
|
396
396
|
}
|
|
397
397
|
addCSS(cssSource) {
|
|
398
|
-
|
|
399
|
-
|
|
398
|
+
const existing = __privateGet(this, _cssSourceMap).get(cssSource);
|
|
399
|
+
if (existing) {
|
|
400
|
+
return existing;
|
|
400
401
|
}
|
|
401
402
|
const cssElem = document.createElement("style");
|
|
402
403
|
cssElem.textContent = cssSource.getAsString();
|
|
403
404
|
__privateGet(this, _cssSourceMap).set(cssSource, cssElem);
|
|
404
405
|
this.shadow.appendChild(cssElem);
|
|
406
|
+
return cssElem;
|
|
405
407
|
}
|
|
406
408
|
removeCSS(cssSource) {
|
|
407
409
|
const cssElem = __privateGet(this, _cssSourceMap).get(cssSource);
|
|
@@ -688,12 +690,12 @@ var Twisty2DPuzzle = class extends ManagedCustomElement {
|
|
|
688
690
|
__privateAdd(this, _freshListenerManager, new FreshListenerManager());
|
|
689
691
|
this.addCSS(twisty2DSVGCSS);
|
|
690
692
|
this.resetSVG();
|
|
691
|
-
__privateGet(this, _freshListenerManager).addListener(this.model.
|
|
693
|
+
__privateGet(this, _freshListenerManager).addListener(this.model.puzzleID, (puzzleID) => {
|
|
692
694
|
if (puzzleLoader?.id !== puzzleID) {
|
|
693
695
|
this.disconnect();
|
|
694
696
|
}
|
|
695
697
|
});
|
|
696
|
-
__privateGet(this, _freshListenerManager).addListener(this.model.
|
|
698
|
+
__privateGet(this, _freshListenerManager).addListener(this.model.legacyPosition, this.onPositionChange.bind(this));
|
|
697
699
|
if (this.options?.experimentalStickering) {
|
|
698
700
|
this.experimentalSetStickering(this.options.experimentalStickering);
|
|
699
701
|
}
|
|
@@ -763,7 +765,7 @@ var Twisty2DPuzzleWrapper = class {
|
|
|
763
765
|
__privateAdd(this, _freshListenerManager2, new FreshListenerManager());
|
|
764
766
|
__privateAdd(this, _cachedTwisty2DPuzzle, null);
|
|
765
767
|
this.twisty2DPuzzle();
|
|
766
|
-
__privateGet(this, _freshListenerManager2).addListener(this.model.
|
|
768
|
+
__privateGet(this, _freshListenerManager2).addListener(this.model.stickering, async (stickering) => {
|
|
767
769
|
(await this.twisty2DPuzzle()).experimentalSetStickering(stickering);
|
|
768
770
|
});
|
|
769
771
|
}
|
|
@@ -799,7 +801,7 @@ var Twisty2DSceneWrapper = class extends ManagedCustomElement {
|
|
|
799
801
|
async connectedCallback() {
|
|
800
802
|
this.addCSS(twistyViewerWrapperCSS);
|
|
801
803
|
if (this.model) {
|
|
802
|
-
__privateGet(this, _freshListenerManager3).addListener(this.model.
|
|
804
|
+
__privateGet(this, _freshListenerManager3).addListener(this.model.puzzleLoader, this.onPuzzleLoader.bind(this));
|
|
803
805
|
}
|
|
804
806
|
}
|
|
805
807
|
async scene() {
|
|
@@ -872,12 +874,12 @@ var Twisty3DPuzzleWrapper = class {
|
|
|
872
874
|
__privateAdd(this, _freshListenerManager4, new FreshListenerManager());
|
|
873
875
|
__privateAdd(this, _cachedTwisty3DPuzzle, null);
|
|
874
876
|
this.twisty3DPuzzle();
|
|
875
|
-
__privateGet(this, _freshListenerManager4).addListener(this.model.
|
|
877
|
+
__privateGet(this, _freshListenerManager4).addListener(this.model.puzzleLoader, (puzzleLoader2) => {
|
|
876
878
|
if (this.puzzleLoader.id !== puzzleLoader2.id) {
|
|
877
879
|
this.disconnect();
|
|
878
880
|
}
|
|
879
881
|
});
|
|
880
|
-
__privateGet(this, _freshListenerManager4).addListener(this.model.
|
|
882
|
+
__privateGet(this, _freshListenerManager4).addListener(this.model.legacyPosition, async (position) => {
|
|
881
883
|
try {
|
|
882
884
|
(await this.twisty3DPuzzle()).onPositionChange(position);
|
|
883
885
|
this.scheduleRender();
|
|
@@ -885,19 +887,19 @@ var Twisty3DPuzzleWrapper = class {
|
|
|
885
887
|
this.disconnect();
|
|
886
888
|
}
|
|
887
889
|
});
|
|
888
|
-
__privateGet(this, _freshListenerManager4).addListener(this.model.
|
|
890
|
+
__privateGet(this, _freshListenerManager4).addListener(this.model.hintFacelet, async (hintFaceletStyle) => {
|
|
889
891
|
(await this.twisty3DPuzzle()).experimentalUpdateOptions({
|
|
890
892
|
hintFacelets: hintFaceletStyle === "auto" ? "floating" : hintFaceletStyle
|
|
891
893
|
});
|
|
892
894
|
this.scheduleRender();
|
|
893
895
|
});
|
|
894
|
-
__privateGet(this, _freshListenerManager4).addListener(this.model.
|
|
896
|
+
__privateGet(this, _freshListenerManager4).addListener(this.model.foundationDisplay, async (foundationDisplay) => {
|
|
895
897
|
(await this.twisty3DPuzzle()).experimentalUpdateOptions({
|
|
896
898
|
showFoundation: foundationDisplay !== "none"
|
|
897
899
|
});
|
|
898
900
|
this.scheduleRender();
|
|
899
901
|
});
|
|
900
|
-
__privateGet(this, _freshListenerManager4).addListener(this.model.
|
|
902
|
+
__privateGet(this, _freshListenerManager4).addListener(this.model.stickering, async (stickering) => {
|
|
901
903
|
if ("setStickering" in await this.twisty3DPuzzle()) {
|
|
902
904
|
(await this.twisty3DPuzzle()).setStickering(stickering);
|
|
903
905
|
this.scheduleRender();
|
|
@@ -941,7 +943,7 @@ var Twisty3DPuzzleWrapper = class {
|
|
|
941
943
|
const [foundationSprite, hintSprite, experimentalStickering] = await Promise.all([
|
|
942
944
|
this.model.foundationStickerSprite.get(),
|
|
943
945
|
this.model.hintStickerSprite.get(),
|
|
944
|
-
this.model.
|
|
946
|
+
this.model.stickering.get()
|
|
945
947
|
]);
|
|
946
948
|
return (await proxyPromise).cube3DShim({
|
|
947
949
|
foundationSprite,
|
|
@@ -950,7 +952,7 @@ var Twisty3DPuzzleWrapper = class {
|
|
|
950
952
|
});
|
|
951
953
|
} else {
|
|
952
954
|
const [hintFacelets, foundationSprite, hintSprite] = await Promise.all([
|
|
953
|
-
this.model.
|
|
955
|
+
this.model.hintFacelet.get(),
|
|
954
956
|
this.model.foundationStickerSprite.get(),
|
|
955
957
|
this.model.hintStickerSprite.get()
|
|
956
958
|
]);
|
|
@@ -1104,12 +1106,45 @@ var twisty3DVantageCSS = new CSSSource(`
|
|
|
1104
1106
|
height: 100%;
|
|
1105
1107
|
display: grid;
|
|
1106
1108
|
overflow: hidden;
|
|
1109
|
+
place-content: center;
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
.loading {
|
|
1113
|
+
width: 4em;
|
|
1114
|
+
height: 4em;
|
|
1115
|
+
border-radius: 2.5em;
|
|
1116
|
+
border: 0.5em solid rgba(0, 0, 0, 0);
|
|
1117
|
+
border-top: 0.5em solid rgba(0, 0, 0, 0.7);
|
|
1118
|
+
border-right: 0.5em solid rgba(0, 0, 0, 0.7);
|
|
1119
|
+
animation: fade-in-delayed 4s, rotate 1s linear infinite;
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
@keyframes fade-in-delayed {
|
|
1123
|
+
0% { opacity: 0; }
|
|
1124
|
+
25% {opacity: 0; }
|
|
1125
|
+
100% { opacity: 1; }
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
@keyframes rotate {
|
|
1129
|
+
from { transform: rotate(0deg); }
|
|
1130
|
+
to { transform: rotate(360deg); }
|
|
1107
1131
|
}
|
|
1108
1132
|
|
|
1109
1133
|
/* TODO: This is due to stats hack. Replace with \`canvas\`. */
|
|
1110
1134
|
.wrapper > canvas {
|
|
1111
1135
|
max-width: 100%;
|
|
1112
1136
|
max-height: 100%;
|
|
1137
|
+
cursor: grab;
|
|
1138
|
+
animation: fade-in 0.25s ease-in;
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
@keyframes fade-in {
|
|
1142
|
+
from { opacity: 0; }
|
|
1143
|
+
to { opacity: 1; }
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
.wrapper > canvas:active {
|
|
1147
|
+
cursor: grabbing;
|
|
1113
1148
|
}
|
|
1114
1149
|
|
|
1115
1150
|
.wrapper.invisible {
|
|
@@ -1322,8 +1357,8 @@ var TwistyOrbitControls = class {
|
|
|
1322
1357
|
const minDim = Math.min(this.canvas.offsetWidth, this.canvas.offsetHeight);
|
|
1323
1358
|
const temperedX = this.temperMovement(movementX / minDim);
|
|
1324
1359
|
const temperedY = this.temperMovement(movementY / minDim * VERTICAL_MOVEMENT_BASE_SCALE);
|
|
1325
|
-
this.model.
|
|
1326
|
-
const prevCoords = await this.model.
|
|
1360
|
+
this.model.orbitCoordinatesRequest.set((async () => {
|
|
1361
|
+
const prevCoords = await this.model.orbitCoordinates.get();
|
|
1327
1362
|
const newCoords = {
|
|
1328
1363
|
latitude: prevCoords.latitude + 2 * temperedY * DEGREES_PER_RADIAN * scale,
|
|
1329
1364
|
longitude: prevCoords.longitude - 2 * temperedX * DEGREES_PER_RADIAN
|
|
@@ -1383,6 +1418,7 @@ var Twisty3DVantage = class extends ManagedCustomElement {
|
|
|
1383
1418
|
this.scene = null;
|
|
1384
1419
|
this.stats = null;
|
|
1385
1420
|
this.rendererIsShared = shareRenderer();
|
|
1421
|
+
this.loadingElement = null;
|
|
1386
1422
|
__privateAdd(this, _onResizeStaleDropper, new StaleDropper());
|
|
1387
1423
|
__privateAdd(this, _width, 0);
|
|
1388
1424
|
__privateAdd(this, _height, 0);
|
|
@@ -1394,6 +1430,8 @@ var Twisty3DVantage = class extends ManagedCustomElement {
|
|
|
1394
1430
|
__privateAdd(this, _disconnectionFunctions, []);
|
|
1395
1431
|
__privateAdd(this, _scheduler, new RenderScheduler(this.render.bind(this)));
|
|
1396
1432
|
this.scene = scene ?? null;
|
|
1433
|
+
this.loadingElement = this.addElement(document.createElement("div"));
|
|
1434
|
+
this.loadingElement.classList.add("loading");
|
|
1397
1435
|
if (SHOW_STATS) {
|
|
1398
1436
|
this.stats = new Stats();
|
|
1399
1437
|
this.stats.dom.style.position = "absolute";
|
|
@@ -1435,6 +1473,7 @@ var Twisty3DVantage = class extends ManagedCustomElement {
|
|
|
1435
1473
|
const renderer = await this.renderer();
|
|
1436
1474
|
canvas = this.addElement(renderer.domElement);
|
|
1437
1475
|
}
|
|
1476
|
+
this.loadingElement?.remove();
|
|
1438
1477
|
const context = canvas.getContext("2d");
|
|
1439
1478
|
return { canvas, context };
|
|
1440
1479
|
})());
|
|
@@ -1451,7 +1490,7 @@ var Twisty3DVantage = class extends ManagedCustomElement {
|
|
|
1451
1490
|
return __privateGet(this, _cachedOrbitControls) ?? __privateSet(this, _cachedOrbitControls, (async () => {
|
|
1452
1491
|
const orbitControls = new TwistyOrbitControls(this.model, !!this.options?.backView, (await this.canvasInfo()).canvas, await __privateMethod(this, _dragTracker, dragTracker_fn).call(this));
|
|
1453
1492
|
if (this.model) {
|
|
1454
|
-
this.addListener(this.model.
|
|
1493
|
+
this.addListener(this.model.orbitCoordinates, async (orbitCoordinates) => {
|
|
1455
1494
|
const camera = await this.camera();
|
|
1456
1495
|
setCameraFromOrbitCoordinates(camera, orbitCoordinates, this.options?.backView);
|
|
1457
1496
|
this.scheduleRender();
|
|
@@ -1497,7 +1536,7 @@ _setupBasicPresses = new WeakSet();
|
|
|
1497
1536
|
setupBasicPresses_fn = async function() {
|
|
1498
1537
|
const dragTracker = await __privateMethod(this, _dragTracker, dragTracker_fn).call(this);
|
|
1499
1538
|
dragTracker.addEventListener("press", async (e) => {
|
|
1500
|
-
const movePressInput = await this.model.
|
|
1539
|
+
const movePressInput = await this.model.movePressInput.get();
|
|
1501
1540
|
if (movePressInput !== "basic") {
|
|
1502
1541
|
return;
|
|
1503
1542
|
}
|
|
@@ -1584,8 +1623,8 @@ var Twisty3DSceneWrapper = class extends ManagedCustomElement {
|
|
|
1584
1623
|
const vantage = new Twisty3DVantage(this.model, this);
|
|
1585
1624
|
this.addVantage(vantage);
|
|
1586
1625
|
if (this.model) {
|
|
1587
|
-
__privateGet(this, _freshListenerManager5).addMultiListener([this.model.
|
|
1588
|
-
__privateGet(this, _freshListenerManager5).addListener(this.model.
|
|
1626
|
+
__privateGet(this, _freshListenerManager5).addMultiListener([this.model.puzzleLoader, this.model.visualizationStrategy], this.onPuzzle.bind(this));
|
|
1627
|
+
__privateGet(this, _freshListenerManager5).addListener(this.model.backView, this.onBackView.bind(this));
|
|
1589
1628
|
}
|
|
1590
1629
|
this.scheduleRender();
|
|
1591
1630
|
}
|
|
@@ -1684,7 +1723,7 @@ _currentTwisty3DPuzzleWrapper = new WeakMap();
|
|
|
1684
1723
|
_twisty3DStaleDropper = new WeakMap();
|
|
1685
1724
|
customElementsShim.define("twisty-3d-scene-wrapper", Twisty3DSceneWrapper);
|
|
1686
1725
|
|
|
1687
|
-
// src/cubing/twisty/views/control-panel/
|
|
1726
|
+
// src/cubing/twisty/views/control-panel/TwistyButtons.css.ts
|
|
1688
1727
|
var buttonGridCSS = new CSSSource(`
|
|
1689
1728
|
:host {
|
|
1690
1729
|
width: 384px;
|
|
@@ -1709,7 +1748,7 @@ var buttonGridCSS = new CSSSource(`
|
|
|
1709
1748
|
display: none;
|
|
1710
1749
|
}
|
|
1711
1750
|
|
|
1712
|
-
.wrapper twisty-button
|
|
1751
|
+
.wrapper twisty-button,
|
|
1713
1752
|
.wrapper twisty-control-button {
|
|
1714
1753
|
width: inherit;
|
|
1715
1754
|
height: inherit;
|
|
@@ -1863,7 +1902,7 @@ var ButtonAppearanceProp = class extends TwistyPropDerived {
|
|
|
1863
1902
|
title: "Step backward"
|
|
1864
1903
|
},
|
|
1865
1904
|
"play-pause": {
|
|
1866
|
-
enabled:
|
|
1905
|
+
enabled: !(inputs.coarseTimelineInfo.atStart && inputs.coarseTimelineInfo.atEnd),
|
|
1867
1906
|
icon: inputs.coarseTimelineInfo.playing ? "pause" : "play",
|
|
1868
1907
|
title: inputs.coarseTimelineInfo.playing ? "Pause" : "Play"
|
|
1869
1908
|
},
|
|
@@ -1888,7 +1927,7 @@ var ButtonAppearanceProp = class extends TwistyPropDerived {
|
|
|
1888
1927
|
}
|
|
1889
1928
|
};
|
|
1890
1929
|
|
|
1891
|
-
// src/cubing/twisty/views/control-panel/
|
|
1930
|
+
// src/cubing/twisty/views/control-panel/TwistyButtons.ts
|
|
1892
1931
|
var buttonCommands = {
|
|
1893
1932
|
"fullscreen": true,
|
|
1894
1933
|
"jump-to-start": true,
|
|
@@ -1899,7 +1938,7 @@ var buttonCommands = {
|
|
|
1899
1938
|
"twizzle-link": true
|
|
1900
1939
|
};
|
|
1901
1940
|
var _onCommand, onCommand_fn;
|
|
1902
|
-
var
|
|
1941
|
+
var TwistyButtons = class extends ManagedCustomElement {
|
|
1903
1942
|
constructor(model, controller, fullscreenElement) {
|
|
1904
1943
|
super();
|
|
1905
1944
|
this.model = model;
|
|
@@ -1912,13 +1951,13 @@ var TwistyButtonsV2 = class extends ManagedCustomElement {
|
|
|
1912
1951
|
this.addCSS(buttonGridCSS);
|
|
1913
1952
|
const buttons = {};
|
|
1914
1953
|
for (const command in buttonCommands) {
|
|
1915
|
-
const button = new
|
|
1954
|
+
const button = new TwistyButton();
|
|
1916
1955
|
buttons[command] = button;
|
|
1917
1956
|
button.addEventListener("click", () => __privateMethod(this, _onCommand, onCommand_fn).call(this, command));
|
|
1918
1957
|
this.addElement(button);
|
|
1919
1958
|
}
|
|
1920
1959
|
this.buttons = buttons;
|
|
1921
|
-
this.model?.
|
|
1960
|
+
this.model?.buttonAppearance.addFreshListener(this.update.bind(this));
|
|
1922
1961
|
}
|
|
1923
1962
|
async onFullscreenButton() {
|
|
1924
1963
|
if (!this.fullscreenElement) {
|
|
@@ -1983,9 +2022,9 @@ onCommand_fn = function(command) {
|
|
|
1983
2022
|
throw new Error("Missing command");
|
|
1984
2023
|
}
|
|
1985
2024
|
};
|
|
1986
|
-
customElementsShim.define("twisty-buttons
|
|
2025
|
+
customElementsShim.define("twisty-buttons", TwistyButtons);
|
|
1987
2026
|
var _iconManager;
|
|
1988
|
-
var
|
|
2027
|
+
var TwistyButton = class extends ManagedCustomElement {
|
|
1989
2028
|
constructor() {
|
|
1990
2029
|
super(...arguments);
|
|
1991
2030
|
this.button = document.createElement("button");
|
|
@@ -2000,7 +2039,7 @@ var TwistyButtonV2 = class extends ManagedCustomElement {
|
|
|
2000
2039
|
}
|
|
2001
2040
|
};
|
|
2002
2041
|
_iconManager = new WeakMap();
|
|
2003
|
-
customElementsShim.define("twisty-button
|
|
2042
|
+
customElementsShim.define("twisty-button", TwistyButton);
|
|
2004
2043
|
|
|
2005
2044
|
// src/cubing/twisty/views/control-panel/TwistyScrubber.css.ts
|
|
2006
2045
|
var twistyScrubberCSS = new CSSSource(`
|
|
@@ -2017,40 +2056,15 @@ var twistyScrubberCSS = new CSSSource(`
|
|
|
2017
2056
|
overflow: hidden;
|
|
2018
2057
|
backdrop-filter: blur(4px);
|
|
2019
2058
|
-webkit-backdrop-filter: blur(4px);
|
|
2059
|
+
background: rgba(196, 196, 196, 0.75)
|
|
2020
2060
|
}
|
|
2021
2061
|
|
|
2022
|
-
input {
|
|
2023
|
-
|
|
2024
|
-
}
|
|
2025
|
-
|
|
2026
|
-
input {
|
|
2027
|
-
background: none;
|
|
2028
|
-
}
|
|
2029
|
-
|
|
2030
|
-
::-moz-range-track {
|
|
2031
|
-
background: rgba(0, 0, 0, 0.25);
|
|
2032
|
-
height: 50%;
|
|
2033
|
-
border: 1px solid rgba(0, 0, 0, 0.1);
|
|
2034
|
-
}
|
|
2035
|
-
|
|
2036
|
-
::-webkit-slider-runnable-track {
|
|
2037
|
-
background: rgba(0, 0, 0, 0.05);
|
|
2038
|
-
}
|
|
2039
|
-
|
|
2040
|
-
::-moz-range-progress {
|
|
2041
|
-
background: #3273F6;
|
|
2042
|
-
height: 50%;
|
|
2043
|
-
border: 1px solid rgba(0, 0, 0, 0.1);
|
|
2044
|
-
}
|
|
2045
|
-
|
|
2046
|
-
::-ms-fill-lower {
|
|
2047
|
-
background: #3273F6;
|
|
2048
|
-
height: 50%;
|
|
2049
|
-
border: 1px solid rgba(0, 0, 0, 0.1);
|
|
2062
|
+
input:not(:disabled) {
|
|
2063
|
+
cursor: ew-resize;
|
|
2050
2064
|
}
|
|
2051
2065
|
`);
|
|
2052
2066
|
|
|
2053
|
-
// src/cubing/twisty/views/control-panel/
|
|
2067
|
+
// src/cubing/twisty/views/control-panel/TwistyScrubber.ts
|
|
2054
2068
|
var SLOW_DOWN_SCRUBBING = false;
|
|
2055
2069
|
var isMouseDown = false;
|
|
2056
2070
|
globalSafeDocument?.addEventListener("mousedown", function(event) {
|
|
@@ -2078,7 +2092,7 @@ var lastPreval = 0;
|
|
|
2078
2092
|
var scaling = false;
|
|
2079
2093
|
var currentClickNum = 0;
|
|
2080
2094
|
var _inputElem;
|
|
2081
|
-
var
|
|
2095
|
+
var TwistyScrubber = class extends ManagedCustomElement {
|
|
2082
2096
|
constructor(model) {
|
|
2083
2097
|
super();
|
|
2084
2098
|
this.model = model;
|
|
@@ -2100,7 +2114,7 @@ var TwistyScrubberV2 = class extends ManagedCustomElement {
|
|
|
2100
2114
|
const elem = document.createElement("input");
|
|
2101
2115
|
elem.type = "range";
|
|
2102
2116
|
elem.disabled = true;
|
|
2103
|
-
this.model?.
|
|
2117
|
+
this.model?.detailedTimelineInfo.addFreshListener(this.onDetailedTimelineInfo.bind(this));
|
|
2104
2118
|
elem.addEventListener("input", this.onInput.bind(this));
|
|
2105
2119
|
return elem;
|
|
2106
2120
|
})());
|
|
@@ -2112,8 +2126,8 @@ var TwistyScrubberV2 = class extends ManagedCustomElement {
|
|
|
2112
2126
|
const inputElem = await this.inputElem();
|
|
2113
2127
|
await this.slowDown(e, inputElem);
|
|
2114
2128
|
const value = parseInt(inputElem.value);
|
|
2115
|
-
this.model?.
|
|
2116
|
-
this.model?.
|
|
2129
|
+
this.model?.playingInfo.set({ playing: false });
|
|
2130
|
+
this.model?.timestampRequest.set(value);
|
|
2117
2131
|
}
|
|
2118
2132
|
async slowDown(e, inputElem) {
|
|
2119
2133
|
if (!SLOW_DOWN_SCRUBBING) {
|
|
@@ -2148,7 +2162,7 @@ var TwistyScrubberV2 = class extends ManagedCustomElement {
|
|
|
2148
2162
|
}
|
|
2149
2163
|
};
|
|
2150
2164
|
_inputElem = new WeakMap();
|
|
2151
|
-
customElementsShim.define("twisty-scrubber
|
|
2165
|
+
customElementsShim.define("twisty-scrubber", TwistyScrubber);
|
|
2152
2166
|
|
|
2153
2167
|
// src/cubing/twisty/views/screenshot.ts
|
|
2154
2168
|
var cachedCamera = null;
|
|
@@ -2161,12 +2175,12 @@ async function screenshot(model, options) {
|
|
|
2161
2175
|
})());
|
|
2162
2176
|
const scene = new (await THREEJS).Scene();
|
|
2163
2177
|
const twisty3DWrapper = new Twisty3DPuzzleWrapper(model, { scheduleRender: () => {
|
|
2164
|
-
} }, await model.
|
|
2165
|
-
await model.
|
|
2178
|
+
} }, await model.puzzleLoader.get(), await model.visualizationStrategy.get());
|
|
2179
|
+
await model.stickering.get();
|
|
2166
2180
|
await new Promise((resolve) => setTimeout(resolve, 1e3));
|
|
2167
|
-
await model.
|
|
2181
|
+
await model.legacyPosition.get();
|
|
2168
2182
|
scene.add(await twisty3DWrapper.twisty3DPuzzle());
|
|
2169
|
-
const orbitCoordinates = await model.
|
|
2183
|
+
const orbitCoordinates = await model.orbitCoordinates.get();
|
|
2170
2184
|
await setCameraFromOrbitCoordinates(camera, orbitCoordinates);
|
|
2171
2185
|
const renderer = new (await THREEJS).WebGLRenderer({
|
|
2172
2186
|
antialias: true,
|
|
@@ -2185,8 +2199,8 @@ async function screenshot(model, options) {
|
|
|
2185
2199
|
}
|
|
2186
2200
|
async function getDefaultFilename(model) {
|
|
2187
2201
|
const [puzzleID, algWithIssues] = await Promise.all([
|
|
2188
|
-
model.
|
|
2189
|
-
model.
|
|
2202
|
+
model.puzzleID.get(),
|
|
2203
|
+
model.alg.get()
|
|
2190
2204
|
]);
|
|
2191
2205
|
return `[${puzzleID}]${algWithIssues.alg.experimentalNumUnits() === 0 ? "" : " " + algWithIssues.alg.toString()}`;
|
|
2192
2206
|
}
|
|
@@ -2211,7 +2225,7 @@ var twistyPlayerCSS = new CSSSource(`
|
|
|
2211
2225
|
.wrapper {
|
|
2212
2226
|
display: grid;
|
|
2213
2227
|
overflow: hidden;
|
|
2214
|
-
grid-template-rows: 7fr
|
|
2228
|
+
grid-template-rows: 7fr minmax(1.5em, 0.5fr) minmax(2em, 1fr);
|
|
2215
2229
|
}
|
|
2216
2230
|
|
|
2217
2231
|
.wrapper > * {
|
|
@@ -2226,8 +2240,8 @@ var twistyPlayerCSS = new CSSSource(`
|
|
|
2226
2240
|
|
|
2227
2241
|
.wrapper.controls-none twisty-scrubber,
|
|
2228
2242
|
.wrapper.controls-none twisty-control-button-panel ,
|
|
2229
|
-
.wrapper.controls-none twisty-scrubber
|
|
2230
|
-
.wrapper.controls-none twisty-buttons
|
|
2243
|
+
.wrapper.controls-none twisty-scrubber,
|
|
2244
|
+
.wrapper.controls-none twisty-buttons {
|
|
2231
2245
|
display: none;
|
|
2232
2246
|
}
|
|
2233
2247
|
|
|
@@ -2881,7 +2895,7 @@ function simulMoves(a) {
|
|
|
2881
2895
|
return l;
|
|
2882
2896
|
}
|
|
2883
2897
|
|
|
2884
|
-
// src/cubing/twisty/controllers/indexer/simultaneous-moves/
|
|
2898
|
+
// src/cubing/twisty/controllers/indexer/simultaneous-moves/SimultaneousMoveIndexer.ts
|
|
2885
2899
|
var demos = {
|
|
2886
2900
|
"y' y' U' E D R2 r2 F2 B2 U E D' R2 L2' z2 S2 U U D D S2 F2' B2": [
|
|
2887
2901
|
{ animLeaf: new Move("y", -1), start: 0, end: 1e3 },
|
|
@@ -2928,7 +2942,7 @@ var demos = {
|
|
|
2928
2942
|
{ animLeaf: new Move("E"), start: 7e3, end: 8e3 }
|
|
2929
2943
|
]
|
|
2930
2944
|
};
|
|
2931
|
-
var
|
|
2945
|
+
var SimultaneousMoveIndexer = class {
|
|
2932
2946
|
constructor(kpuzzle, alg) {
|
|
2933
2947
|
this.kpuzzle = kpuzzle;
|
|
2934
2948
|
this.animLeaves = demos[alg.toString()] ?? simulMoves(alg);
|
|
@@ -3422,7 +3436,7 @@ var IndexerConstructorProp = class extends TwistyPropDerived {
|
|
|
3422
3436
|
switch (inputs.indexerConstructorRequest) {
|
|
3423
3437
|
case "auto":
|
|
3424
3438
|
if (countMoves(inputs.alg.alg) < 100 && inputs.puzzle === "3x3x3" && inputs.visualizationStrategy === "Cube3D") {
|
|
3425
|
-
return
|
|
3439
|
+
return SimultaneousMoveIndexer;
|
|
3426
3440
|
} else {
|
|
3427
3441
|
return TreeAlgIndexer;
|
|
3428
3442
|
}
|
|
@@ -3431,7 +3445,7 @@ var IndexerConstructorProp = class extends TwistyPropDerived {
|
|
|
3431
3445
|
case "simple":
|
|
3432
3446
|
return SimpleAlgIndexer;
|
|
3433
3447
|
case "simultaneous":
|
|
3434
|
-
return
|
|
3448
|
+
return SimultaneousMoveIndexer;
|
|
3435
3449
|
default:
|
|
3436
3450
|
throw new Error("Invalid indexer request!");
|
|
3437
3451
|
}
|
|
@@ -3461,7 +3475,7 @@ var PuzzleAlgProp = class extends TwistyPropDerived {
|
|
|
3461
3475
|
// src/cubing/twisty/model/props/puzzle/state/AlgTransformationProp.ts
|
|
3462
3476
|
var AlgTransformationProp = class extends TwistyPropDerived {
|
|
3463
3477
|
derive(input) {
|
|
3464
|
-
return input.kpuzzle.algToTransformation(input.
|
|
3478
|
+
return input.kpuzzle.algToTransformation(input.setupAlg.alg);
|
|
3465
3479
|
}
|
|
3466
3480
|
};
|
|
3467
3481
|
|
|
@@ -3472,16 +3486,19 @@ var IndexerProp = class extends TwistyPropDerived {
|
|
|
3472
3486
|
}
|
|
3473
3487
|
};
|
|
3474
3488
|
|
|
3475
|
-
// src/cubing/twisty/model/props/puzzle/state/
|
|
3476
|
-
var
|
|
3489
|
+
// src/cubing/twisty/model/props/puzzle/state/AnchorTransformationProp.ts
|
|
3490
|
+
var AnchorTransformationProp = class extends TwistyPropDerived {
|
|
3477
3491
|
derive(inputs) {
|
|
3492
|
+
if (inputs.setupTransformation) {
|
|
3493
|
+
return inputs.setupTransformation;
|
|
3494
|
+
}
|
|
3478
3495
|
switch (inputs.setupAnchor) {
|
|
3479
3496
|
case "start":
|
|
3480
|
-
return inputs.
|
|
3497
|
+
return inputs.setupAlgTransformation;
|
|
3481
3498
|
case "end": {
|
|
3482
3499
|
const algTransformation = inputs.indexer.transformationAtIndex(inputs.indexer.numAnimatedLeaves());
|
|
3483
3500
|
const inverseAlgTransformation = algTransformation.invert();
|
|
3484
|
-
return inputs.
|
|
3501
|
+
return inputs.setupAlgTransformation.applyTransformation(inverseAlgTransformation);
|
|
3485
3502
|
}
|
|
3486
3503
|
default:
|
|
3487
3504
|
throw new Error("Unimplemented!");
|
|
@@ -3712,116 +3729,125 @@ var FoundationDisplayProp = class extends SimpleTwistyPropSource {
|
|
|
3712
3729
|
}
|
|
3713
3730
|
};
|
|
3714
3731
|
|
|
3732
|
+
// src/cubing/twisty/model/props/puzzle/state/SetupTransformationProp.ts
|
|
3733
|
+
var SetupTransformationProp = class extends SimpleTwistyPropSource {
|
|
3734
|
+
getDefaultValue() {
|
|
3735
|
+
return null;
|
|
3736
|
+
}
|
|
3737
|
+
};
|
|
3738
|
+
|
|
3715
3739
|
// src/cubing/twisty/model/TwistyPlayerModel.ts
|
|
3716
3740
|
var TwistyPlayerModel = class {
|
|
3717
3741
|
constructor() {
|
|
3718
3742
|
this.userVisibleErrorTracker = new UserVisibleErrorTracker();
|
|
3719
|
-
this.
|
|
3720
|
-
this.
|
|
3721
|
-
this.
|
|
3722
|
-
this.
|
|
3723
|
-
this.
|
|
3724
|
-
this.
|
|
3743
|
+
this.alg = new AlgProp();
|
|
3744
|
+
this.background = new BackgroundProp();
|
|
3745
|
+
this.backView = new BackViewProp();
|
|
3746
|
+
this.controlPanel = new ControlPanelProp();
|
|
3747
|
+
this.catchUpMove = new CatchUpMoveProp();
|
|
3748
|
+
this.foundationDisplay = new FoundationDisplayProp();
|
|
3725
3749
|
this.foundationStickerSpriteURL = new URLProp();
|
|
3726
|
-
this.
|
|
3750
|
+
this.hintFacelet = new HintFaceletProp();
|
|
3727
3751
|
this.hintStickerSpriteURL = new URLProp();
|
|
3728
|
-
this.
|
|
3729
|
-
this.
|
|
3730
|
-
this.
|
|
3731
|
-
this.
|
|
3732
|
-
this.
|
|
3733
|
-
this.
|
|
3734
|
-
this.
|
|
3735
|
-
this.
|
|
3736
|
-
this.
|
|
3737
|
-
this.
|
|
3738
|
-
this.
|
|
3739
|
-
this.
|
|
3740
|
-
this.
|
|
3741
|
-
this.
|
|
3752
|
+
this.indexerConstructorRequest = new IndexerConstructorRequestProp();
|
|
3753
|
+
this.latitudeLimit = new LatitudeLimitProp();
|
|
3754
|
+
this.movePressInput = new MovePressInputProp();
|
|
3755
|
+
this.orbitCoordinatesRequest = new OrbitCoordinatesRequestProp();
|
|
3756
|
+
this.playingInfo = new PlayingInfoProp();
|
|
3757
|
+
this.puzzleDescriptionRequest = new PGPuzzleDescriptionStringProp();
|
|
3758
|
+
this.puzzleIDRequest = new PuzzleIDRequestProp();
|
|
3759
|
+
this.setupAnchor = new SetupAnchorProp();
|
|
3760
|
+
this.setupAlg = new AlgProp();
|
|
3761
|
+
this.setupTransformation = new SetupTransformationProp();
|
|
3762
|
+
this.stickering = new StickeringProp();
|
|
3763
|
+
this.tempoScale = new TempoScaleProp();
|
|
3764
|
+
this.timestampRequest = new TimestampRequestProp();
|
|
3765
|
+
this.viewerLink = new ViewerLinkProp();
|
|
3766
|
+
this.visualizationFormat = new VisualizationFormatProp();
|
|
3742
3767
|
this.foundationStickerSprite = new SpriteProp({
|
|
3743
3768
|
spriteURL: this.foundationStickerSpriteURL
|
|
3744
3769
|
});
|
|
3745
3770
|
this.hintStickerSprite = new SpriteProp({
|
|
3746
3771
|
spriteURL: this.hintStickerSpriteURL
|
|
3747
3772
|
});
|
|
3748
|
-
this.
|
|
3749
|
-
puzzleIDRequest: this.
|
|
3750
|
-
puzzleDescriptionRequest: this.
|
|
3773
|
+
this.puzzleLoader = new PuzzleLoaderProp({
|
|
3774
|
+
puzzleIDRequest: this.puzzleIDRequest,
|
|
3775
|
+
puzzleDescriptionRequest: this.puzzleDescriptionRequest
|
|
3751
3776
|
}, this.userVisibleErrorTracker);
|
|
3752
|
-
this.
|
|
3753
|
-
this.
|
|
3754
|
-
this.
|
|
3755
|
-
algWithIssues: this.
|
|
3756
|
-
kpuzzle: this.
|
|
3777
|
+
this.kpuzzle = new KPuzzleProp({ puzzleLoader: this.puzzleLoader });
|
|
3778
|
+
this.puzzleID = new PuzzleIDProp({ puzzleLoader: this.puzzleLoader });
|
|
3779
|
+
this.puzzleAlg = new PuzzleAlgProp({
|
|
3780
|
+
algWithIssues: this.alg,
|
|
3781
|
+
kpuzzle: this.kpuzzle
|
|
3757
3782
|
});
|
|
3758
|
-
this.
|
|
3759
|
-
algWithIssues: this.
|
|
3760
|
-
kpuzzle: this.
|
|
3783
|
+
this.puzzleSetupAlg = new PuzzleAlgProp({
|
|
3784
|
+
algWithIssues: this.setupAlg,
|
|
3785
|
+
kpuzzle: this.kpuzzle
|
|
3761
3786
|
});
|
|
3762
|
-
this.
|
|
3763
|
-
visualizationRequest: this.
|
|
3764
|
-
puzzleID: this.
|
|
3787
|
+
this.visualizationStrategy = new VisualizationStrategyProp({
|
|
3788
|
+
visualizationRequest: this.visualizationFormat,
|
|
3789
|
+
puzzleID: this.puzzleID
|
|
3765
3790
|
});
|
|
3766
|
-
this.
|
|
3767
|
-
alg: this.
|
|
3768
|
-
puzzle: this.
|
|
3769
|
-
visualizationStrategy: this.
|
|
3770
|
-
indexerConstructorRequest: this.
|
|
3791
|
+
this.indexerConstructor = new IndexerConstructorProp({
|
|
3792
|
+
alg: this.alg,
|
|
3793
|
+
puzzle: this.puzzleID,
|
|
3794
|
+
visualizationStrategy: this.visualizationStrategy,
|
|
3795
|
+
indexerConstructorRequest: this.indexerConstructorRequest
|
|
3771
3796
|
});
|
|
3772
|
-
this.
|
|
3773
|
-
this.
|
|
3774
|
-
orbitCoordinatesRequest: this.
|
|
3775
|
-
latitudeLimit: this.
|
|
3776
|
-
puzzleID: this.
|
|
3777
|
-
strategy: this.
|
|
3797
|
+
this.moveCount = new NaiveMoveCountProp({ alg: this.puzzleAlg });
|
|
3798
|
+
this.orbitCoordinates = new OrbitCoordinatesProp({
|
|
3799
|
+
orbitCoordinatesRequest: this.orbitCoordinatesRequest,
|
|
3800
|
+
latitudeLimit: this.latitudeLimit,
|
|
3801
|
+
puzzleID: this.puzzleID,
|
|
3802
|
+
strategy: this.visualizationStrategy
|
|
3778
3803
|
});
|
|
3779
|
-
this.
|
|
3780
|
-
|
|
3781
|
-
kpuzzle: this.
|
|
3804
|
+
this.setupAlgTransformation = new AlgTransformationProp({
|
|
3805
|
+
setupAlg: this.puzzleSetupAlg,
|
|
3806
|
+
kpuzzle: this.kpuzzle
|
|
3782
3807
|
});
|
|
3783
|
-
this.
|
|
3784
|
-
indexerConstructor: this.
|
|
3785
|
-
algWithIssues: this.
|
|
3786
|
-
kpuzzle: this.
|
|
3808
|
+
this.indexer = new IndexerProp({
|
|
3809
|
+
indexerConstructor: this.indexerConstructor,
|
|
3810
|
+
algWithIssues: this.puzzleAlg,
|
|
3811
|
+
kpuzzle: this.kpuzzle
|
|
3787
3812
|
});
|
|
3788
|
-
this.
|
|
3789
|
-
|
|
3790
|
-
|
|
3791
|
-
|
|
3813
|
+
this.anchorTransformation = new AnchorTransformationProp({
|
|
3814
|
+
setupTransformation: this.setupTransformation,
|
|
3815
|
+
setupAnchor: this.setupAnchor,
|
|
3816
|
+
setupAlgTransformation: this.setupAlgTransformation,
|
|
3817
|
+
indexer: this.indexer
|
|
3792
3818
|
});
|
|
3793
|
-
this.
|
|
3794
|
-
indexer: this.
|
|
3819
|
+
this.timeRange = new TimeRangeProp({
|
|
3820
|
+
indexer: this.indexer
|
|
3795
3821
|
});
|
|
3796
|
-
this.
|
|
3797
|
-
timestampRequest: this.
|
|
3798
|
-
timeRange: this.
|
|
3799
|
-
setupAnchor: this.
|
|
3822
|
+
this.detailedTimelineInfo = new DetailedTimelineInfoProp({
|
|
3823
|
+
timestampRequest: this.timestampRequest,
|
|
3824
|
+
timeRange: this.timeRange,
|
|
3825
|
+
setupAnchor: this.setupAnchor
|
|
3800
3826
|
});
|
|
3801
|
-
this.
|
|
3802
|
-
detailedTimelineInfo: this.
|
|
3803
|
-
playingInfo: this.
|
|
3827
|
+
this.coarseTimelineInfo = new CoarseTimelineInfoProp({
|
|
3828
|
+
detailedTimelineInfo: this.detailedTimelineInfo,
|
|
3829
|
+
playingInfo: this.playingInfo
|
|
3804
3830
|
});
|
|
3805
|
-
this.
|
|
3806
|
-
indexer: this.
|
|
3807
|
-
detailedTimelineInfo: this.
|
|
3808
|
-
catchUpMove: this.
|
|
3831
|
+
this.currentMoveInfo = new CurrentMoveInfoProp({
|
|
3832
|
+
indexer: this.indexer,
|
|
3833
|
+
detailedTimelineInfo: this.detailedTimelineInfo,
|
|
3834
|
+
catchUpMove: this.catchUpMove
|
|
3809
3835
|
});
|
|
3810
|
-
this.
|
|
3811
|
-
coarseTimelineInfo: this.
|
|
3812
|
-
viewerLink: this.
|
|
3836
|
+
this.buttonAppearance = new ButtonAppearanceProp({
|
|
3837
|
+
coarseTimelineInfo: this.coarseTimelineInfo,
|
|
3838
|
+
viewerLink: this.viewerLink
|
|
3813
3839
|
});
|
|
3814
|
-
this.
|
|
3815
|
-
currentMoveInfo: this.
|
|
3840
|
+
this.currentLeavesSimplified = new CurrentLeavesSimplifiedProp({
|
|
3841
|
+
currentMoveInfo: this.currentMoveInfo
|
|
3816
3842
|
});
|
|
3817
|
-
this.
|
|
3818
|
-
anchoredStart: this.
|
|
3819
|
-
currentLeavesSimplified: this.
|
|
3820
|
-
indexer: this.
|
|
3843
|
+
this.currentState = new CurrentStateProp({
|
|
3844
|
+
anchoredStart: this.anchorTransformation,
|
|
3845
|
+
currentLeavesSimplified: this.currentLeavesSimplified,
|
|
3846
|
+
indexer: this.indexer
|
|
3821
3847
|
});
|
|
3822
|
-
this.
|
|
3823
|
-
currentMoveInfo: this.
|
|
3824
|
-
state: this.
|
|
3848
|
+
this.legacyPosition = new LegacyPositionProp({
|
|
3849
|
+
currentMoveInfo: this.currentMoveInfo,
|
|
3850
|
+
state: this.currentState
|
|
3825
3851
|
});
|
|
3826
3852
|
}
|
|
3827
3853
|
async twizzleLink() {
|
|
@@ -3834,13 +3860,13 @@ var TwistyPlayerModel = class {
|
|
|
3834
3860
|
anchor,
|
|
3835
3861
|
experimentalStickering
|
|
3836
3862
|
] = await Promise.all([
|
|
3837
|
-
this.
|
|
3838
|
-
this.
|
|
3839
|
-
this.
|
|
3840
|
-
this.
|
|
3841
|
-
this.
|
|
3842
|
-
this.
|
|
3843
|
-
this.
|
|
3863
|
+
this.viewerLink.get(),
|
|
3864
|
+
this.puzzleID.get(),
|
|
3865
|
+
this.puzzleDescriptionRequest.get(),
|
|
3866
|
+
this.alg.get(),
|
|
3867
|
+
this.setupAlg.get(),
|
|
3868
|
+
this.setupAnchor.get(),
|
|
3869
|
+
this.stickering.get()
|
|
3844
3870
|
]);
|
|
3845
3871
|
const isExplorer = viewerLink === "experimental-twizzle-explorer";
|
|
3846
3872
|
console.log({ isExplorer, viewerLink });
|
|
@@ -3867,19 +3893,23 @@ var TwistyPlayerModel = class {
|
|
|
3867
3893
|
experimentalAddMove(flexibleMove, options = {}) {
|
|
3868
3894
|
const move = typeof flexibleMove === "string" ? new Move(flexibleMove) : flexibleMove;
|
|
3869
3895
|
(async () => {
|
|
3870
|
-
const alg = (await this.
|
|
3896
|
+
const alg = (await this.alg.get()).alg;
|
|
3871
3897
|
const newAlg = experimentalAppendMove(alg, move, {
|
|
3872
3898
|
coalesce: options?.coalesce,
|
|
3873
3899
|
mod: options?.mod
|
|
3874
3900
|
});
|
|
3875
|
-
this.
|
|
3876
|
-
this.
|
|
3877
|
-
this.
|
|
3901
|
+
this.alg.set(newAlg);
|
|
3902
|
+
this.timestampRequest.set("end");
|
|
3903
|
+
this.catchUpMove.set({
|
|
3878
3904
|
move,
|
|
3879
3905
|
amount: 0
|
|
3880
3906
|
});
|
|
3881
3907
|
})();
|
|
3882
3908
|
}
|
|
3909
|
+
get playingInfoProp() {
|
|
3910
|
+
console.warn("Using deprecated prop: `playingInfoProp`. Please switch to: `playingInfo`");
|
|
3911
|
+
return this.playingInfo;
|
|
3912
|
+
}
|
|
3883
3913
|
};
|
|
3884
3914
|
|
|
3885
3915
|
// src/cubing/twisty/views/TwistyPlayerSettable.ts
|
|
@@ -3893,121 +3923,121 @@ var TwistyPlayerSettable = class extends ManagedCustomElement {
|
|
|
3893
3923
|
this.experimentalGet = new ExperimentalGetters(this.experimentalModel);
|
|
3894
3924
|
}
|
|
3895
3925
|
set alg(newAlg) {
|
|
3896
|
-
this.experimentalModel.
|
|
3926
|
+
this.experimentalModel.alg.set(newAlg);
|
|
3897
3927
|
}
|
|
3898
3928
|
get alg() {
|
|
3899
3929
|
throw err("alg");
|
|
3900
3930
|
}
|
|
3901
3931
|
set experimentalSetupAlg(newSetup) {
|
|
3902
|
-
this.experimentalModel.
|
|
3932
|
+
this.experimentalModel.setupAlg.set(newSetup);
|
|
3903
3933
|
}
|
|
3904
3934
|
get experimentalSetupAlg() {
|
|
3905
3935
|
throw err("setup");
|
|
3906
3936
|
}
|
|
3907
3937
|
set experimentalSetupAnchor(anchor) {
|
|
3908
|
-
this.experimentalModel.
|
|
3938
|
+
this.experimentalModel.setupAnchor.set(anchor);
|
|
3909
3939
|
}
|
|
3910
3940
|
get experimentalSetupAnchor() {
|
|
3911
3941
|
throw err("anchor");
|
|
3912
3942
|
}
|
|
3913
3943
|
set puzzle(puzzleID) {
|
|
3914
|
-
this.experimentalModel.
|
|
3944
|
+
this.experimentalModel.puzzleIDRequest.set(puzzleID);
|
|
3915
3945
|
}
|
|
3916
3946
|
get puzzle() {
|
|
3917
3947
|
throw err("puzzle");
|
|
3918
3948
|
}
|
|
3919
3949
|
set experimentalPuzzleDescription(puzzleDescription) {
|
|
3920
|
-
this.experimentalModel.
|
|
3950
|
+
this.experimentalModel.puzzleDescriptionRequest.set(puzzleDescription);
|
|
3921
3951
|
}
|
|
3922
3952
|
get experimentalPuzzleDescription() {
|
|
3923
3953
|
throw err("experimentalPuzzleDescription");
|
|
3924
3954
|
}
|
|
3925
3955
|
set timestamp(timestamp) {
|
|
3926
|
-
this.experimentalModel.
|
|
3956
|
+
this.experimentalModel.timestampRequest.set(timestamp);
|
|
3927
3957
|
}
|
|
3928
3958
|
get timestamp() {
|
|
3929
3959
|
throw err("timestamp");
|
|
3930
3960
|
}
|
|
3931
3961
|
set hintFacelets(hintFaceletStyle) {
|
|
3932
|
-
this.experimentalModel.
|
|
3962
|
+
this.experimentalModel.hintFacelet.set(hintFaceletStyle);
|
|
3933
3963
|
}
|
|
3934
3964
|
get hintFacelets() {
|
|
3935
3965
|
throw err("hintFacelets");
|
|
3936
3966
|
}
|
|
3937
3967
|
set experimentalStickering(stickering) {
|
|
3938
|
-
this.experimentalModel.
|
|
3968
|
+
this.experimentalModel.stickering.set(stickering);
|
|
3939
3969
|
}
|
|
3940
3970
|
get experimentalStickering() {
|
|
3941
3971
|
throw err("stickering");
|
|
3942
3972
|
}
|
|
3943
3973
|
set backView(backView) {
|
|
3944
|
-
this.experimentalModel.
|
|
3974
|
+
this.experimentalModel.backView.set(backView);
|
|
3945
3975
|
}
|
|
3946
3976
|
get backView() {
|
|
3947
3977
|
throw err("backView");
|
|
3948
3978
|
}
|
|
3949
3979
|
set background(backgroundTheme) {
|
|
3950
|
-
this.experimentalModel.
|
|
3980
|
+
this.experimentalModel.background.set(backgroundTheme);
|
|
3951
3981
|
}
|
|
3952
3982
|
get background() {
|
|
3953
3983
|
throw err("background");
|
|
3954
3984
|
}
|
|
3955
3985
|
set controlPanel(newControlPanel) {
|
|
3956
|
-
this.experimentalModel.
|
|
3986
|
+
this.experimentalModel.controlPanel.set(newControlPanel);
|
|
3957
3987
|
}
|
|
3958
3988
|
get controlPanel() {
|
|
3959
3989
|
throw err("controlPanel");
|
|
3960
3990
|
}
|
|
3961
3991
|
set visualization(visualizationFormat) {
|
|
3962
|
-
this.experimentalModel.
|
|
3992
|
+
this.experimentalModel.visualizationFormat.set(visualizationFormat);
|
|
3963
3993
|
}
|
|
3964
3994
|
get visualization() {
|
|
3965
3995
|
throw err("visualization");
|
|
3966
3996
|
}
|
|
3967
3997
|
set viewerLink(viewerLinkPage) {
|
|
3968
|
-
this.experimentalModel.
|
|
3998
|
+
this.experimentalModel.viewerLink.set(viewerLinkPage);
|
|
3969
3999
|
}
|
|
3970
4000
|
get viewerLink() {
|
|
3971
4001
|
throw err("viewerLink");
|
|
3972
4002
|
}
|
|
3973
4003
|
set experimentalMovePressInput(movePressInput) {
|
|
3974
|
-
this.experimentalModel.
|
|
4004
|
+
this.experimentalModel.movePressInput.set(movePressInput);
|
|
3975
4005
|
}
|
|
3976
4006
|
get experimentalMovePressInput() {
|
|
3977
4007
|
throw err("experimentalMovePressInput");
|
|
3978
4008
|
}
|
|
3979
4009
|
set cameraLatitude(latitude) {
|
|
3980
|
-
this.experimentalModel.
|
|
4010
|
+
this.experimentalModel.orbitCoordinatesRequest.set({ latitude });
|
|
3981
4011
|
}
|
|
3982
4012
|
get cameraLatitude() {
|
|
3983
4013
|
throw err("cameraLatitude");
|
|
3984
4014
|
}
|
|
3985
4015
|
set cameraLongitude(longitude) {
|
|
3986
|
-
this.experimentalModel.
|
|
4016
|
+
this.experimentalModel.orbitCoordinatesRequest.set({ longitude });
|
|
3987
4017
|
}
|
|
3988
4018
|
get cameraLongitude() {
|
|
3989
4019
|
throw err("cameraLongitude");
|
|
3990
4020
|
}
|
|
3991
4021
|
set cameraDistance(distance) {
|
|
3992
|
-
this.experimentalModel.
|
|
4022
|
+
this.experimentalModel.orbitCoordinatesRequest.set({ distance });
|
|
3993
4023
|
}
|
|
3994
4024
|
get cameraDistance() {
|
|
3995
4025
|
throw err("cameraDistance");
|
|
3996
4026
|
}
|
|
3997
4027
|
set cameraLatitudeLimit(latitudeLimit) {
|
|
3998
|
-
this.experimentalModel.
|
|
4028
|
+
this.experimentalModel.latitudeLimit.set(latitudeLimit);
|
|
3999
4029
|
}
|
|
4000
4030
|
get cameraLatitudeLimit() {
|
|
4001
4031
|
throw err("cameraLatitudeLimit");
|
|
4002
4032
|
}
|
|
4003
4033
|
set indexer(indexer) {
|
|
4004
|
-
this.experimentalModel.
|
|
4034
|
+
this.experimentalModel.indexerConstructorRequest.set(indexer);
|
|
4005
4035
|
}
|
|
4006
4036
|
get indexer() {
|
|
4007
4037
|
throw err("indexer");
|
|
4008
4038
|
}
|
|
4009
4039
|
set tempoScale(newTempoScale) {
|
|
4010
|
-
this.experimentalModel.
|
|
4040
|
+
this.experimentalModel.tempoScale.set(newTempoScale);
|
|
4011
4041
|
}
|
|
4012
4042
|
get tempoScale() {
|
|
4013
4043
|
throw err("tempoScale");
|
|
@@ -4030,16 +4060,16 @@ var ExperimentalGetters = class {
|
|
|
4030
4060
|
this.model = model;
|
|
4031
4061
|
}
|
|
4032
4062
|
async alg() {
|
|
4033
|
-
return (await this.model.
|
|
4063
|
+
return (await this.model.alg.get()).alg;
|
|
4034
4064
|
}
|
|
4035
4065
|
async setupAlg() {
|
|
4036
|
-
return (await this.model.
|
|
4066
|
+
return (await this.model.setupAlg.get()).alg;
|
|
4037
4067
|
}
|
|
4038
4068
|
puzzleID() {
|
|
4039
|
-
return this.model.
|
|
4069
|
+
return this.model.puzzleID.get();
|
|
4040
4070
|
}
|
|
4041
4071
|
async timestamp() {
|
|
4042
|
-
return (await this.model.
|
|
4072
|
+
return (await this.model.detailedTimelineInfo.get()).timestamp;
|
|
4043
4073
|
}
|
|
4044
4074
|
};
|
|
4045
4075
|
|
|
@@ -4105,18 +4135,18 @@ var TwistyPlayer = class extends TwistyPlayerSettable {
|
|
|
4105
4135
|
__privateGet(this, _errorElem).textContent = errorString;
|
|
4106
4136
|
}
|
|
4107
4137
|
});
|
|
4108
|
-
const scrubber = new
|
|
4138
|
+
const scrubber = new TwistyScrubber(this.experimentalModel);
|
|
4109
4139
|
this.contentWrapper.appendChild(scrubber);
|
|
4110
|
-
this.buttons = new
|
|
4140
|
+
this.buttons = new TwistyButtons(this.experimentalModel, this.controller, this);
|
|
4111
4141
|
this.contentWrapper.appendChild(this.buttons);
|
|
4112
|
-
this.experimentalModel.
|
|
4142
|
+
this.experimentalModel.background.addFreshListener((backgroundTheme) => {
|
|
4113
4143
|
this.contentWrapper.classList.toggle("checkered", backgroundTheme !== "none");
|
|
4114
4144
|
});
|
|
4115
|
-
this.experimentalModel.
|
|
4145
|
+
this.experimentalModel.controlPanel.addFreshListener((controlPanel) => {
|
|
4116
4146
|
__privateGet(this, _controlsManager).setValue(controlPanel);
|
|
4117
4147
|
});
|
|
4118
|
-
this.experimentalModel.
|
|
4119
|
-
this.experimentalModel.
|
|
4148
|
+
this.experimentalModel.visualizationStrategy.addFreshListener(__privateMethod(this, _setVisualizationWrapper, setVisualizationWrapper_fn).bind(this));
|
|
4149
|
+
this.experimentalModel.puzzleID.addFreshListener(this.flash.bind(this));
|
|
4120
4150
|
}
|
|
4121
4151
|
flash() {
|
|
4122
4152
|
__privateGet(this, _visualizationWrapper)?.animate([{ opacity: 0.25 }, { opacity: 1 }], {
|
|
@@ -4175,7 +4205,7 @@ var TwistyPlayer = class extends TwistyPlayerSettable {
|
|
|
4175
4205
|
return (await screenshot(this.experimentalModel, options)).dataURL;
|
|
4176
4206
|
}
|
|
4177
4207
|
async experimentalDownloadScreenshot(filename) {
|
|
4178
|
-
if (["2D", "experimental-2D-LL"].includes(await this.experimentalModel.
|
|
4208
|
+
if (["2D", "experimental-2D-LL"].includes(await this.experimentalModel.visualizationStrategy.get())) {
|
|
4179
4209
|
const wrapper2D = __privateGet(this, _visualizationWrapper);
|
|
4180
4210
|
const twisty2DPuzzle = await wrapper2D.currentTwisty2DPuzzleWrapper().twisty2DPuzzle();
|
|
4181
4211
|
const str = new XMLSerializer().serializeToString(twisty2DPuzzle.svg.element);
|
|
@@ -4489,13 +4519,13 @@ var TwistyAlgViewer = class extends HTMLElementShim {
|
|
|
4489
4519
|
return;
|
|
4490
4520
|
}
|
|
4491
4521
|
this.twistyPlayer = twistyPlayer;
|
|
4492
|
-
this.twistyPlayer.experimentalModel.
|
|
4522
|
+
this.twistyPlayer.experimentalModel.alg.addFreshListener((algWithIssues) => {
|
|
4493
4523
|
this.setAlg(algWithIssues.alg);
|
|
4494
4524
|
});
|
|
4495
|
-
const sourceAlg = (await this.twistyPlayer.experimentalModel.
|
|
4525
|
+
const sourceAlg = (await this.twistyPlayer.experimentalModel.alg.get()).alg;
|
|
4496
4526
|
const parsedAlg = "startCharIndex" in sourceAlg ? sourceAlg : Alg.fromString(sourceAlg.toString());
|
|
4497
4527
|
this.setAlg(parsedAlg);
|
|
4498
|
-
twistyPlayer.experimentalModel.
|
|
4528
|
+
twistyPlayer.experimentalModel.currentMoveInfo.addFreshListener((currentMoveInfo) => {
|
|
4499
4529
|
let moveInfo = currentMoveInfo.currentMoves[0];
|
|
4500
4530
|
moveInfo ?? (moveInfo = currentMoveInfo.movesStarting[0]);
|
|
4501
4531
|
moveInfo ?? (moveInfo = currentMoveInfo.movesFinishing[0]);
|
|
@@ -4506,7 +4536,7 @@ var TwistyAlgViewer = class extends HTMLElementShim {
|
|
|
4506
4536
|
this.highlighter.set(mainCurrentMove);
|
|
4507
4537
|
}
|
|
4508
4538
|
});
|
|
4509
|
-
twistyPlayer.experimentalModel.
|
|
4539
|
+
twistyPlayer.experimentalModel.detailedTimelineInfo.addFreshListener((detailedTimelineInfo) => {
|
|
4510
4540
|
if (detailedTimelineInfo.timestamp !== this.lastClickTimestamp) {
|
|
4511
4541
|
this.lastClickTimestamp = null;
|
|
4512
4542
|
}
|
|
@@ -4517,11 +4547,11 @@ var TwistyAlgViewer = class extends HTMLElementShim {
|
|
|
4517
4547
|
if (twistyPlayer) {
|
|
4518
4548
|
twistyPlayer.pause();
|
|
4519
4549
|
const timestampPromise = (async () => {
|
|
4520
|
-
const indexer = await twistyPlayer.experimentalModel.
|
|
4550
|
+
const indexer = await twistyPlayer.experimentalModel.indexer.get();
|
|
4521
4551
|
const offset = offsetIntoMove ? DEFAULT_OFFSET_MS : 0;
|
|
4522
4552
|
return (indexer.indexToMoveStartTimestamp(index) ?? -offset) + offset;
|
|
4523
4553
|
})();
|
|
4524
|
-
twistyPlayer.experimentalModel.
|
|
4554
|
+
twistyPlayer.experimentalModel.timestampRequest.set(await timestampPromise);
|
|
4525
4555
|
if (this.lastClickTimestamp === await timestampPromise) {
|
|
4526
4556
|
twistyPlayer.play();
|
|
4527
4557
|
this.lastClickTimestamp = null;
|
|
@@ -4840,8 +4870,8 @@ var TwistyAlgEditor = class extends ManagedCustomElement {
|
|
|
4840
4870
|
if (options?.twistyPlayer) {
|
|
4841
4871
|
this.twistyPlayer = options.twistyPlayer;
|
|
4842
4872
|
}
|
|
4843
|
-
__privateSet(this, _twistyPlayerProp, options?.twistyPlayerProp ?? "
|
|
4844
|
-
if (options?.twistyPlayerProp === "
|
|
4873
|
+
__privateSet(this, _twistyPlayerProp, options?.twistyPlayerProp ?? "alg");
|
|
4874
|
+
if (options?.twistyPlayerProp === "alg") {
|
|
4845
4875
|
this.model.leafToHighlight.addFreshListener((highlightInfo) => {
|
|
4846
4876
|
if (highlightInfo) {
|
|
4847
4877
|
this.highlightLeaf(highlightInfo.leafInfo.leaf);
|
|
@@ -4870,7 +4900,7 @@ var TwistyAlgEditor = class extends ManagedCustomElement {
|
|
|
4870
4900
|
if (document.activeElement !== this || this.shadow.activeElement !== __privateGet(this, _textarea)) {
|
|
4871
4901
|
return;
|
|
4872
4902
|
}
|
|
4873
|
-
if (__privateGet(this, _twistyPlayerProp) !== "
|
|
4903
|
+
if (__privateGet(this, _twistyPlayerProp) !== "alg") {
|
|
4874
4904
|
return;
|
|
4875
4905
|
}
|
|
4876
4906
|
const { selectionStart, selectionEnd } = __privateGet(this, _textarea);
|
|
@@ -4885,7 +4915,7 @@ var TwistyAlgEditor = class extends ManagedCustomElement {
|
|
|
4885
4915
|
__privateGet(this, _textareaClassListValidForPuzzleManager).setValue(issues);
|
|
4886
4916
|
}
|
|
4887
4917
|
highlightLeaf(leaf) {
|
|
4888
|
-
if (__privateGet(this, _twistyPlayerProp) !== "
|
|
4918
|
+
if (__privateGet(this, _twistyPlayerProp) !== "alg") {
|
|
4889
4919
|
return;
|
|
4890
4920
|
}
|
|
4891
4921
|
if (leaf === null) {
|
|
@@ -4918,8 +4948,8 @@ var TwistyAlgEditor = class extends ManagedCustomElement {
|
|
|
4918
4948
|
(async () => {
|
|
4919
4949
|
this.algString = __privateGet(this, _algProp, algProp_get) ? (await __privateGet(this, _algProp, algProp_get).get()).alg.toString() : "";
|
|
4920
4950
|
})();
|
|
4921
|
-
if (__privateGet(this, _twistyPlayerProp) === "
|
|
4922
|
-
__privateGet(this, _twistyPlayer)?.experimentalModel.
|
|
4951
|
+
if (__privateGet(this, _twistyPlayerProp) === "alg") {
|
|
4952
|
+
__privateGet(this, _twistyPlayer)?.experimentalModel.puzzleAlg.addFreshListener((algWithIssues) => {
|
|
4923
4953
|
if (algWithIssues.issues.errors.length === 0) {
|
|
4924
4954
|
this.setAlgIssueClassForPuzzle(algWithIssues.issues.warnings.length === 0 ? "none" : "warning");
|
|
4925
4955
|
const newAlg = algWithIssues.alg;
|
|
@@ -4938,8 +4968,8 @@ var TwistyAlgEditor = class extends ManagedCustomElement {
|
|
|
4938
4968
|
return;
|
|
4939
4969
|
}
|
|
4940
4970
|
const [indexer, timestampRequest] = await Promise.all([
|
|
4941
|
-
await twistyPlayer.experimentalModel.
|
|
4942
|
-
await twistyPlayer.experimentalModel.
|
|
4971
|
+
await twistyPlayer.experimentalModel.indexer.get(),
|
|
4972
|
+
await twistyPlayer.experimentalModel.timestampRequest.get()
|
|
4943
4973
|
]);
|
|
4944
4974
|
if (timestampRequest === "opposite-anchor" && !__privateGet(this, _onInputHasFired)) {
|
|
4945
4975
|
return;
|
|
@@ -4964,11 +4994,11 @@ var TwistyAlgEditor = class extends ManagedCustomElement {
|
|
|
4964
4994
|
throw new Error("Invalid where!");
|
|
4965
4995
|
}
|
|
4966
4996
|
if (!this.debugNeverRequestTimestamp) {
|
|
4967
|
-
twistyPlayer.experimentalModel.
|
|
4997
|
+
twistyPlayer.experimentalModel.timestampRequest.set(newTimestamp);
|
|
4968
4998
|
}
|
|
4969
4999
|
});
|
|
4970
|
-
twistyPlayer.experimentalModel.
|
|
4971
|
-
const indexer = await twistyPlayer.experimentalModel.
|
|
5000
|
+
twistyPlayer.experimentalModel.currentLeavesSimplified.addFreshListener(async (currentLeavesSimplified) => {
|
|
5001
|
+
const indexer = await twistyPlayer.experimentalModel.indexer.get();
|
|
4972
5002
|
const leaf = indexer.getAnimLeaf(currentLeavesSimplified.stateIndex);
|
|
4973
5003
|
this.highlightLeaf(leaf);
|
|
4974
5004
|
});
|
|
@@ -5054,6 +5084,8 @@ var twizzleLinkCSS = new CSSSource(`
|
|
|
5054
5084
|
|
|
5055
5085
|
twisty-player {
|
|
5056
5086
|
width: 100%;
|
|
5087
|
+
resize: vertical;
|
|
5088
|
+
overflow-y: hidden;
|
|
5057
5089
|
}
|
|
5058
5090
|
|
|
5059
5091
|
twisty-player + .heading {
|
|
@@ -5070,12 +5102,12 @@ var URLParamUpdater = class {
|
|
|
5070
5102
|
constructor(model, options) {
|
|
5071
5103
|
__privateAdd(this, _prefix, void 0);
|
|
5072
5104
|
__privateSet(this, _prefix, options?.prefix ?? "");
|
|
5073
|
-
this.listenToAlgProp(model.
|
|
5074
|
-
this.listenToAlgProp(model.
|
|
5075
|
-
this.listenToStringSourceProp(model.
|
|
5076
|
-
this.listenToStringSourceProp(model.
|
|
5077
|
-
this.listenToStringOrNoValueProp(model.
|
|
5078
|
-
this.listenToStringOrNoValueProp(model.
|
|
5105
|
+
this.listenToAlgProp(model.alg, "alg");
|
|
5106
|
+
this.listenToAlgProp(model.setupAlg, "setup-alg");
|
|
5107
|
+
this.listenToStringSourceProp(model.stickering, "stickering");
|
|
5108
|
+
this.listenToStringSourceProp(model.setupAnchor, "setup-anchor");
|
|
5109
|
+
this.listenToStringOrNoValueProp(model.puzzleIDRequest, "puzzle", NO_VALUE);
|
|
5110
|
+
this.listenToStringOrNoValueProp(model.puzzleDescriptionRequest, "puzzle-description", NO_VALUE);
|
|
5079
5111
|
}
|
|
5080
5112
|
setURLParam(unprefixedKey, value, defaultString) {
|
|
5081
5113
|
const prefixedKey = __privateGet(this, _prefix) + unprefixedKey;
|
|
@@ -5134,14 +5166,28 @@ function getConfigFromURL(prefix = "", url = location.href) {
|
|
|
5134
5166
|
}
|
|
5135
5167
|
|
|
5136
5168
|
// src/cubing/twisty/views/twizzle/TwizzleLink.ts
|
|
5169
|
+
var _cssElem;
|
|
5137
5170
|
var TwizzleLink = class extends ManagedCustomElement {
|
|
5138
5171
|
constructor() {
|
|
5139
5172
|
super({ mode: "open" });
|
|
5140
5173
|
this.twistyPlayer = null;
|
|
5141
5174
|
this.a = null;
|
|
5175
|
+
__privateAdd(this, _cssElem, void 0);
|
|
5176
|
+
}
|
|
5177
|
+
fallback() {
|
|
5178
|
+
this.contentWrapper.textContent = "";
|
|
5179
|
+
if (this.a) {
|
|
5180
|
+
const span = this.contentWrapper.appendChild(document.createElement("span"));
|
|
5181
|
+
span.textContent = "\u2757\uFE0F";
|
|
5182
|
+
span.title = "Could not show a player for link";
|
|
5183
|
+
this.addElement(this.a);
|
|
5184
|
+
}
|
|
5185
|
+
if (__privateGet(this, _cssElem)) {
|
|
5186
|
+
__privateGet(this, _cssElem).remove();
|
|
5187
|
+
}
|
|
5142
5188
|
}
|
|
5143
5189
|
async connectedCallback() {
|
|
5144
|
-
this.addCSS(twizzleLinkCSS);
|
|
5190
|
+
__privateSet(this, _cssElem, this.addCSS(twizzleLinkCSS));
|
|
5145
5191
|
this.a = this.querySelector("a");
|
|
5146
5192
|
if (!this.a) {
|
|
5147
5193
|
return;
|
|
@@ -5150,6 +5196,7 @@ var TwizzleLink = class extends ManagedCustomElement {
|
|
|
5150
5196
|
const href = this.a?.href;
|
|
5151
5197
|
const { hostname, pathname } = new URL(href);
|
|
5152
5198
|
if (hostname !== "alpha.twizzle.net") {
|
|
5199
|
+
this.fallback();
|
|
5153
5200
|
return;
|
|
5154
5201
|
}
|
|
5155
5202
|
if (["/edit/", "/explore/"].includes(pathname)) {
|
|
@@ -5172,6 +5219,8 @@ var TwizzleLink = class extends ManagedCustomElement {
|
|
|
5172
5219
|
this.addHeading("Moves");
|
|
5173
5220
|
const twistyAlgViewer = this.addElement(new TwistyAlgViewer({ twistyPlayer: this.twistyPlayer }));
|
|
5174
5221
|
twistyAlgViewer.part.add("twisty-alg-viewer");
|
|
5222
|
+
} else {
|
|
5223
|
+
this.fallback();
|
|
5175
5224
|
}
|
|
5176
5225
|
}
|
|
5177
5226
|
addHeading(text) {
|
|
@@ -5180,6 +5229,7 @@ var TwizzleLink = class extends ManagedCustomElement {
|
|
|
5180
5229
|
headingDiv.textContent = text;
|
|
5181
5230
|
}
|
|
5182
5231
|
};
|
|
5232
|
+
_cssElem = new WeakMap();
|
|
5183
5233
|
customElementsShim.define("twizzle-link", TwizzleLink);
|
|
5184
5234
|
export {
|
|
5185
5235
|
NO_VALUE as EXPERIMENTAL_PROP_NO_VALUE,
|