cubing 0.28.0 → 0.28.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/esm/alg/index.js +3 -3
- package/dist/esm/bluetooth/index.js +5 -5
- package/dist/esm/{chunk-4KIZAW2Z.js → chunk-32FWPPTW.js} +3 -3
- package/dist/esm/{chunk-4KIZAW2Z.js.map → chunk-32FWPPTW.js.map} +0 -0
- package/dist/esm/{chunk-LTPPXK6F.js → chunk-67VJZGH2.js} +3 -3
- package/dist/esm/{chunk-LTPPXK6F.js.map → chunk-67VJZGH2.js.map} +0 -0
- package/dist/esm/{chunk-NJPSC7SH.js → chunk-7D7LW3WQ.js} +2 -2
- package/dist/esm/{chunk-NJPSC7SH.js.map → chunk-7D7LW3WQ.js.map} +0 -0
- package/dist/esm/{chunk-GXZIBFSN.js → chunk-CSBUJ64Q.js} +8 -5
- package/dist/esm/chunk-CSBUJ64Q.js.map +7 -0
- package/dist/esm/chunk-LSVR2HCG.js +1111 -0
- package/dist/esm/chunk-LSVR2HCG.js.map +7 -0
- package/dist/esm/{chunk-4V4RM3YJ.js → chunk-MWKALF6W.js} +4 -4
- package/dist/esm/{chunk-4V4RM3YJ.js.map → chunk-MWKALF6W.js.map} +0 -0
- package/dist/esm/{chunk-47SWOA3X.js → chunk-NPHUBFZ6.js} +2 -2
- package/dist/esm/{chunk-47SWOA3X.js.map → chunk-NPHUBFZ6.js.map} +0 -0
- package/dist/esm/{chunk-KBOIUBUE.js → chunk-WAL36PO3.js} +4 -4
- package/dist/esm/{chunk-KBOIUBUE.js.map → chunk-WAL36PO3.js.map} +0 -0
- package/dist/esm/{chunk-JAGHV77R.js → chunk-YSVFZVG4.js} +3 -3
- package/dist/esm/{chunk-JAGHV77R.js.map → chunk-YSVFZVG4.js.map} +0 -0
- package/dist/esm/{chunk-UP6RBLG2.js → chunk-ZY3RTFFS.js} +2 -2
- package/dist/esm/{chunk-UP6RBLG2.js.map → chunk-ZY3RTFFS.js.map} +0 -0
- package/dist/esm/kpuzzle/index.js +2 -2
- package/dist/esm/notation/index.js +2 -2
- package/dist/esm/protocol/index.js +4 -4
- package/dist/esm/puzzle-geometry/index.js +4369 -14
- package/dist/esm/puzzle-geometry/index.js.map +3 -3
- package/dist/esm/puzzles/index.js +4 -4
- package/dist/esm/scramble/index.js +2 -2
- package/dist/esm/search/index.js +6 -6
- package/dist/esm/{search-dynamic-sgs-side-events-ZTOWSMQT.js → search-dynamic-sgs-side-events-R3HDJ5XQ.js} +10 -12
- package/dist/esm/search-dynamic-sgs-side-events-R3HDJ5XQ.js.map +7 -0
- package/dist/esm/{search-dynamic-sgs-unofficial-V6HZTLGM.js → search-dynamic-sgs-unofficial-FQNKGHVO.js} +6 -6
- package/dist/esm/{search-dynamic-sgs-unofficial-V6HZTLGM.js.map → search-dynamic-sgs-unofficial-FQNKGHVO.js.map} +0 -0
- package/dist/esm/{search-dynamic-solve-4x4x4-YH6SB2WB.js → search-dynamic-solve-4x4x4-XRV4NBMQ.js} +6 -6
- package/dist/esm/{search-dynamic-solve-4x4x4-YH6SB2WB.js.map → search-dynamic-solve-4x4x4-XRV4NBMQ.js.map} +0 -0
- package/dist/esm/{search-dynamic-solve-kilominx-ZPEOK4DY.js → search-dynamic-solve-kilominx-G4MLGWNS.js} +2 -2
- package/dist/esm/{search-dynamic-solve-kilominx-ZPEOK4DY.js.map → search-dynamic-solve-kilominx-G4MLGWNS.js.map} +0 -0
- package/dist/esm/{search-worker-inside-generated-string-T43JGYSP.js → search-worker-inside-generated-string-IZCKWXUA.js} +19 -19
- package/dist/esm/search-worker-inside-generated-string-IZCKWXUA.js.map +7 -0
- package/dist/esm/{search-worker-js-entry-3VKCL3RX.js → search-worker-js-entry-WBEKNBB7.js} +12 -12
- package/dist/esm/{search-worker-js-entry-3VKCL3RX.js.map → search-worker-js-entry-WBEKNBB7.js.map} +0 -0
- package/dist/esm/{search-worker-ts-entry-J3TDBCMV.js → search-worker-ts-entry-XQWMEOC4.js} +2 -2
- package/dist/esm/{search-worker-ts-entry-J3TDBCMV.js.map → search-worker-ts-entry-XQWMEOC4.js.map} +0 -0
- package/dist/esm/stream/index.js +1 -1
- package/dist/esm/twisty/index.js +18 -759
- package/dist/esm/twisty/index.js.map +3 -3
- package/dist/esm/{twisty-dynamic-3d-UQJETF7O.js → twisty-dynamic-3d-QOX7IEXC.js} +51 -16
- package/dist/esm/twisty-dynamic-3d-QOX7IEXC.js.map +7 -0
- package/dist/types/{TwizzleLink-cd0fa192.d.ts → TwizzleLink-dcf51446.d.ts} +2 -4
- package/dist/types/alg/index.d.ts +4 -3
- package/dist/types/{parse-ec97687c.d.ts → parseAlg-db0dec6c.d.ts} +0 -0
- package/dist/types/puzzles/index.d.ts +3 -3
- package/dist/types/twisty/index.d.ts +11 -4
- package/package.json +4 -4
- package/dist/esm/chunk-7BLWQDZX.js +0 -342
- package/dist/esm/chunk-7BLWQDZX.js.map +0 -7
- package/dist/esm/chunk-GXZIBFSN.js.map +0 -7
- package/dist/esm/chunk-ROGN5SXC.js +0 -4386
- package/dist/esm/chunk-ROGN5SXC.js.map +0 -7
- package/dist/esm/search-dynamic-sgs-side-events-ZTOWSMQT.js.map +0 -7
- package/dist/esm/search-worker-inside-generated-string-T43JGYSP.js.map +0 -7
- package/dist/esm/twisty-dynamic-3d-UQJETF7O.js.map +0 -7
package/dist/esm/twisty/index.js
CHANGED
|
@@ -1,28 +1,36 @@
|
|
|
1
1
|
import {
|
|
2
|
+
CSSSource,
|
|
2
3
|
DEGREES_PER_RADIAN,
|
|
3
4
|
FreshListenerManager,
|
|
5
|
+
HTMLElementShim,
|
|
4
6
|
HintFaceletProp,
|
|
7
|
+
ManagedCustomElement,
|
|
5
8
|
NO_VALUE,
|
|
9
|
+
RenderScheduler,
|
|
6
10
|
SimpleTwistyPropSource,
|
|
7
11
|
StaleDropper,
|
|
8
12
|
THREEJS,
|
|
13
|
+
Twisty3DVantage,
|
|
9
14
|
TwistyPropDerived,
|
|
10
15
|
TwistyPropSource,
|
|
11
|
-
|
|
12
|
-
|
|
16
|
+
customElementsShim,
|
|
17
|
+
proxy3D,
|
|
18
|
+
setCameraFromOrbitCoordinates,
|
|
19
|
+
setTwistyDebug
|
|
20
|
+
} from "../chunk-LSVR2HCG.js";
|
|
13
21
|
import "../chunk-GVPTO3OF.js";
|
|
14
22
|
import {
|
|
15
23
|
countAnimatedLeaves,
|
|
16
24
|
countMoves
|
|
17
|
-
} from "../chunk-
|
|
25
|
+
} from "../chunk-NPHUBFZ6.js";
|
|
18
26
|
import {
|
|
19
27
|
cube3x3x3,
|
|
20
28
|
puzzles
|
|
21
|
-
} from "../chunk-
|
|
29
|
+
} from "../chunk-YSVFZVG4.js";
|
|
22
30
|
import {
|
|
23
31
|
customPGPuzzleLoader
|
|
24
|
-
} from "../chunk-
|
|
25
|
-
import "../chunk-
|
|
32
|
+
} from "../chunk-67VJZGH2.js";
|
|
33
|
+
import "../chunk-ZY3RTFFS.js";
|
|
26
34
|
import {
|
|
27
35
|
Alg,
|
|
28
36
|
AlgBuilder,
|
|
@@ -35,7 +43,7 @@ import {
|
|
|
35
43
|
direct,
|
|
36
44
|
directedGenerator,
|
|
37
45
|
experimentalAppendMove
|
|
38
|
-
} from "../chunk-
|
|
46
|
+
} from "../chunk-CSBUJ64Q.js";
|
|
39
47
|
import {
|
|
40
48
|
__privateAdd,
|
|
41
49
|
__privateGet,
|
|
@@ -43,33 +51,6 @@ import {
|
|
|
43
51
|
__privateSet
|
|
44
52
|
} from "../chunk-MGJA5U5O.js";
|
|
45
53
|
|
|
46
|
-
// src/cubing/twisty/controllers/RenderScheduler.ts
|
|
47
|
-
var RenderScheduler = class {
|
|
48
|
-
constructor(callback) {
|
|
49
|
-
this.callback = callback;
|
|
50
|
-
this.animFrameID = null;
|
|
51
|
-
this.animFrame = this.animFrameWrapper.bind(this);
|
|
52
|
-
}
|
|
53
|
-
requestIsPending() {
|
|
54
|
-
return !!this.animFrameID;
|
|
55
|
-
}
|
|
56
|
-
requestAnimFrame() {
|
|
57
|
-
if (!this.animFrameID) {
|
|
58
|
-
this.animFrameID = requestAnimationFrame(this.animFrame);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
cancelAnimFrame() {
|
|
62
|
-
if (this.animFrameID) {
|
|
63
|
-
cancelAnimationFrame(this.animFrameID);
|
|
64
|
-
this.animFrameID = 0;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
animFrameWrapper(timestamp) {
|
|
68
|
-
this.animFrameID = 0;
|
|
69
|
-
this.callback(timestamp);
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
|
|
73
54
|
// src/cubing/twisty/controllers/AnimationTypes.ts
|
|
74
55
|
function directionScalar(direction) {
|
|
75
56
|
return direction;
|
|
@@ -348,77 +329,6 @@ var ControlPanelProp = class extends SimpleTwistyPropSource {
|
|
|
348
329
|
}
|
|
349
330
|
};
|
|
350
331
|
|
|
351
|
-
// src/cubing/twisty/views/node-custom-element-shims.ts
|
|
352
|
-
var HTMLElementStub = class {
|
|
353
|
-
};
|
|
354
|
-
var HTMLElementShim;
|
|
355
|
-
if (globalThis.HTMLElement) {
|
|
356
|
-
HTMLElementShim = HTMLElement;
|
|
357
|
-
} else {
|
|
358
|
-
HTMLElementShim = HTMLElementStub;
|
|
359
|
-
}
|
|
360
|
-
var CustomElementsStub = class {
|
|
361
|
-
define() {
|
|
362
|
-
}
|
|
363
|
-
};
|
|
364
|
-
var customElementsShim;
|
|
365
|
-
if (globalThis.customElements) {
|
|
366
|
-
customElementsShim = customElements;
|
|
367
|
-
} else {
|
|
368
|
-
customElementsShim = new CustomElementsStub();
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
// src/cubing/twisty/views/ManagedCustomElement.ts
|
|
372
|
-
var CSSSource = class {
|
|
373
|
-
constructor(sourceText) {
|
|
374
|
-
this.sourceText = sourceText;
|
|
375
|
-
}
|
|
376
|
-
getAsString() {
|
|
377
|
-
return this.sourceText;
|
|
378
|
-
}
|
|
379
|
-
};
|
|
380
|
-
var _cssSourceMap;
|
|
381
|
-
var ManagedCustomElement = class extends HTMLElementShim {
|
|
382
|
-
constructor(options) {
|
|
383
|
-
super();
|
|
384
|
-
__privateAdd(this, _cssSourceMap, /* @__PURE__ */ new Map());
|
|
385
|
-
this.shadow = this.attachShadow({ mode: options?.mode ?? "closed" });
|
|
386
|
-
this.contentWrapper = document.createElement("div");
|
|
387
|
-
this.contentWrapper.classList.add("wrapper");
|
|
388
|
-
this.shadow.appendChild(this.contentWrapper);
|
|
389
|
-
}
|
|
390
|
-
addCSS(cssSource) {
|
|
391
|
-
const existing = __privateGet(this, _cssSourceMap).get(cssSource);
|
|
392
|
-
if (existing) {
|
|
393
|
-
return existing;
|
|
394
|
-
}
|
|
395
|
-
const cssElem = document.createElement("style");
|
|
396
|
-
cssElem.textContent = cssSource.getAsString();
|
|
397
|
-
__privateGet(this, _cssSourceMap).set(cssSource, cssElem);
|
|
398
|
-
this.shadow.appendChild(cssElem);
|
|
399
|
-
return cssElem;
|
|
400
|
-
}
|
|
401
|
-
removeCSS(cssSource) {
|
|
402
|
-
const cssElem = __privateGet(this, _cssSourceMap).get(cssSource);
|
|
403
|
-
if (!cssElem) {
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
this.shadow.removeChild(cssElem);
|
|
407
|
-
__privateGet(this, _cssSourceMap).delete(cssSource);
|
|
408
|
-
}
|
|
409
|
-
addElement(element) {
|
|
410
|
-
return this.contentWrapper.appendChild(element);
|
|
411
|
-
}
|
|
412
|
-
prependElement(element) {
|
|
413
|
-
this.contentWrapper.prepend(element);
|
|
414
|
-
}
|
|
415
|
-
removeElement(element) {
|
|
416
|
-
return this.contentWrapper.removeChild(element);
|
|
417
|
-
}
|
|
418
|
-
};
|
|
419
|
-
_cssSourceMap = new WeakMap();
|
|
420
|
-
customElementsShim.define("twisty-managed-custom-element", ManagedCustomElement);
|
|
421
|
-
|
|
422
332
|
// src/cubing/twisty/views/TwistyViewerWrapper.css.ts
|
|
423
333
|
var twistyViewerWrapperCSS = new CSSSource(`
|
|
424
334
|
:host {
|
|
@@ -961,7 +871,7 @@ var Twisty3DPuzzleWrapper = class extends EventTarget {
|
|
|
961
871
|
this.model.twistySceneModel.hintStickerSprite.get(),
|
|
962
872
|
this.model.twistySceneModel.stickering.get()
|
|
963
873
|
]);
|
|
964
|
-
return (await proxyPromise).cube3DShim({
|
|
874
|
+
return (await proxyPromise).cube3DShim(() => this.schedulable.scheduleRender(), {
|
|
965
875
|
foundationSprite,
|
|
966
876
|
hintSprite,
|
|
967
877
|
experimentalStickering
|
|
@@ -972,7 +882,7 @@ var Twisty3DPuzzleWrapper = class extends EventTarget {
|
|
|
972
882
|
this.model.twistySceneModel.foundationStickerSprite.get(),
|
|
973
883
|
this.model.twistySceneModel.hintStickerSprite.get()
|
|
974
884
|
]);
|
|
975
|
-
const pg3d = (await proxyPromise).pg3dShim(this.puzzleLoader, hintFacelets === "auto" ? "floating" : hintFacelets);
|
|
885
|
+
const pg3d = (await proxyPromise).pg3dShim(() => this.schedulable.scheduleRender(), this.puzzleLoader, hintFacelets === "auto" ? "floating" : hintFacelets);
|
|
976
886
|
pg3d.then((p) => p.experimentalUpdateTexture(true, foundationSprite ?? void 0, hintSprite ?? void 0));
|
|
977
887
|
return pg3d;
|
|
978
888
|
}
|
|
@@ -1003,656 +913,6 @@ var Twisty3DPuzzleWrapper = class extends EventTarget {
|
|
|
1003
913
|
_freshListenerManager4 = new WeakMap();
|
|
1004
914
|
_cachedTwisty3DPuzzle = new WeakMap();
|
|
1005
915
|
|
|
1006
|
-
// src/cubing/vendor/three/examples/jsm/libs/stats.modified.module.ts
|
|
1007
|
-
var performance2 = globalThis.performance;
|
|
1008
|
-
var Stats = class {
|
|
1009
|
-
constructor() {
|
|
1010
|
-
this.mode = 0;
|
|
1011
|
-
this.dom = document.createElement("div");
|
|
1012
|
-
this.beginTime = (performance2 || Date).now();
|
|
1013
|
-
this.prevTime = this.beginTime;
|
|
1014
|
-
this.frames = 0;
|
|
1015
|
-
this.fpsPanel = this.addPanel(new StatsPanel("FPS", "#0ff", "#002"));
|
|
1016
|
-
this.msPanel = this.addPanel(new StatsPanel("MS", "#0f0", "#020"));
|
|
1017
|
-
this.memPanel = performance2?.memory ? this.addPanel(new StatsPanel("MB", "#f08", "#201")) : null;
|
|
1018
|
-
this.REVISION = 16;
|
|
1019
|
-
this.dom.style.cssText = "position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000";
|
|
1020
|
-
this.dom.addEventListener("click", (event) => {
|
|
1021
|
-
event.preventDefault();
|
|
1022
|
-
this.showPanel(++this.mode % this.dom.children.length);
|
|
1023
|
-
}, false);
|
|
1024
|
-
this.showPanel(0);
|
|
1025
|
-
}
|
|
1026
|
-
addPanel(panel) {
|
|
1027
|
-
this.dom.appendChild(panel.dom);
|
|
1028
|
-
return panel;
|
|
1029
|
-
}
|
|
1030
|
-
showPanel(id) {
|
|
1031
|
-
for (let i = 0; i < this.dom.children.length; i++) {
|
|
1032
|
-
this.dom.children[i].style.display = i === id ? "block" : "none";
|
|
1033
|
-
}
|
|
1034
|
-
this.mode = id;
|
|
1035
|
-
}
|
|
1036
|
-
begin() {
|
|
1037
|
-
this.beginTime = (performance2 || Date).now();
|
|
1038
|
-
}
|
|
1039
|
-
end() {
|
|
1040
|
-
this.frames++;
|
|
1041
|
-
const time = (performance2 || Date).now();
|
|
1042
|
-
this.msPanel.update(time - this.beginTime, 200);
|
|
1043
|
-
if (time >= this.prevTime + 1e3) {
|
|
1044
|
-
this.fpsPanel.update(this.frames * 1e3 / (time - this.prevTime), 100);
|
|
1045
|
-
this.prevTime = time;
|
|
1046
|
-
this.frames = 0;
|
|
1047
|
-
if (this.memPanel) {
|
|
1048
|
-
const memory = performance2.memory;
|
|
1049
|
-
this.memPanel.update(memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576);
|
|
1050
|
-
}
|
|
1051
|
-
}
|
|
1052
|
-
return time;
|
|
1053
|
-
}
|
|
1054
|
-
update() {
|
|
1055
|
-
this.beginTime = this.end();
|
|
1056
|
-
}
|
|
1057
|
-
};
|
|
1058
|
-
var PR = Math.round(globalThis?.window?.devicePixelRatio ?? 1);
|
|
1059
|
-
var WIDTH = 80 * PR;
|
|
1060
|
-
var HEIGHT = 48 * PR;
|
|
1061
|
-
var TEXT_X = 3 * PR;
|
|
1062
|
-
var TEXT_Y = 2 * PR;
|
|
1063
|
-
var GRAPH_X = 3 * PR;
|
|
1064
|
-
var GRAPH_Y = 15 * PR;
|
|
1065
|
-
var GRAPH_WIDTH = 74 * PR;
|
|
1066
|
-
var GRAPH_HEIGHT = 30 * PR;
|
|
1067
|
-
var StatsPanel = class {
|
|
1068
|
-
constructor(name, fg, bg) {
|
|
1069
|
-
this.name = name;
|
|
1070
|
-
this.fg = fg;
|
|
1071
|
-
this.bg = bg;
|
|
1072
|
-
this.min = Infinity;
|
|
1073
|
-
this.max = 0;
|
|
1074
|
-
this.dom = document.createElement("canvas");
|
|
1075
|
-
this.context = this.dom.getContext("2d");
|
|
1076
|
-
this.dom.width = WIDTH;
|
|
1077
|
-
this.dom.height = HEIGHT;
|
|
1078
|
-
this.dom.style.cssText = "width:80px;height:48px";
|
|
1079
|
-
this.context.font = `bold ${9 * PR}px Helvetica,Arial,sans-serif`;
|
|
1080
|
-
this.context.textBaseline = "top";
|
|
1081
|
-
this.context.fillStyle = bg;
|
|
1082
|
-
this.context.fillRect(0, 0, WIDTH, HEIGHT);
|
|
1083
|
-
this.context.fillStyle = fg;
|
|
1084
|
-
this.context.fillText(name, TEXT_X, TEXT_Y);
|
|
1085
|
-
this.context.fillRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT);
|
|
1086
|
-
this.context.fillStyle = bg;
|
|
1087
|
-
this.context.globalAlpha = 0.9;
|
|
1088
|
-
this.context.fillRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT);
|
|
1089
|
-
}
|
|
1090
|
-
update(value, maxValue) {
|
|
1091
|
-
this.min = Math.min(this.min, value);
|
|
1092
|
-
this.max = Math.max(this.max, value);
|
|
1093
|
-
this.context.fillStyle = this.bg;
|
|
1094
|
-
this.context.globalAlpha = 1;
|
|
1095
|
-
this.context.fillRect(0, 0, WIDTH, GRAPH_Y);
|
|
1096
|
-
this.context.fillStyle = this.fg;
|
|
1097
|
-
this.context.fillText(Math.round(value) + " " + this.name + " (" + Math.round(this.min) + "-" + Math.round(this.max) + ")", TEXT_X, TEXT_Y);
|
|
1098
|
-
this.context.drawImage(this.dom, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT);
|
|
1099
|
-
this.context.fillRect(GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT);
|
|
1100
|
-
this.context.fillStyle = this.bg;
|
|
1101
|
-
this.context.globalAlpha = 0.9;
|
|
1102
|
-
this.context.fillRect(GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, Math.round((1 - value / maxValue) * GRAPH_HEIGHT));
|
|
1103
|
-
}
|
|
1104
|
-
};
|
|
1105
|
-
|
|
1106
|
-
// src/cubing/twisty/views/canvas.ts
|
|
1107
|
-
var globalPixelRatioOverride = null;
|
|
1108
|
-
function pixelRatio() {
|
|
1109
|
-
return globalPixelRatioOverride ?? (devicePixelRatio || 1);
|
|
1110
|
-
}
|
|
1111
|
-
|
|
1112
|
-
// src/cubing/twisty/views/3D/Twisty3DVantage.css.ts
|
|
1113
|
-
var twisty3DVantageCSS = new CSSSource(`
|
|
1114
|
-
:host {
|
|
1115
|
-
width: 384px;
|
|
1116
|
-
height: 256px;
|
|
1117
|
-
display: grid;
|
|
1118
|
-
}
|
|
1119
|
-
|
|
1120
|
-
.wrapper {
|
|
1121
|
-
width: 100%;
|
|
1122
|
-
height: 100%;
|
|
1123
|
-
display: grid;
|
|
1124
|
-
overflow: hidden;
|
|
1125
|
-
place-content: center;
|
|
1126
|
-
contain: strict;
|
|
1127
|
-
}
|
|
1128
|
-
|
|
1129
|
-
.loading {
|
|
1130
|
-
width: 4em;
|
|
1131
|
-
height: 4em;
|
|
1132
|
-
border-radius: 2.5em;
|
|
1133
|
-
border: 0.5em solid rgba(0, 0, 0, 0);
|
|
1134
|
-
border-top: 0.5em solid rgba(0, 0, 0, 0.7);
|
|
1135
|
-
border-right: 0.5em solid rgba(0, 0, 0, 0.7);
|
|
1136
|
-
animation: fade-in-delayed 4s, rotate 1s linear infinite;
|
|
1137
|
-
}
|
|
1138
|
-
|
|
1139
|
-
@keyframes fade-in-delayed {
|
|
1140
|
-
0% { opacity: 0; }
|
|
1141
|
-
25% {opacity: 0; }
|
|
1142
|
-
100% { opacity: 1; }
|
|
1143
|
-
}
|
|
1144
|
-
|
|
1145
|
-
@keyframes rotate {
|
|
1146
|
-
from { transform: rotate(0deg); }
|
|
1147
|
-
to { transform: rotate(360deg); }
|
|
1148
|
-
}
|
|
1149
|
-
|
|
1150
|
-
/* TODO: This is due to stats hack. Replace with \`canvas\`. */
|
|
1151
|
-
.wrapper > canvas {
|
|
1152
|
-
max-width: 100%;
|
|
1153
|
-
max-height: 100%;
|
|
1154
|
-
animation: fade-in 0.25s ease-in;
|
|
1155
|
-
}
|
|
1156
|
-
|
|
1157
|
-
@keyframes fade-in {
|
|
1158
|
-
from { opacity: 0; }
|
|
1159
|
-
to { opacity: 1; }
|
|
1160
|
-
}
|
|
1161
|
-
|
|
1162
|
-
.wrapper.invisible {
|
|
1163
|
-
opacity: 0;
|
|
1164
|
-
}
|
|
1165
|
-
|
|
1166
|
-
.wrapper.drag-input-enabled > canvas {
|
|
1167
|
-
cursor: grab;
|
|
1168
|
-
}
|
|
1169
|
-
|
|
1170
|
-
.wrapper.drag-input-enabled > canvas:active {
|
|
1171
|
-
cursor: grabbing;
|
|
1172
|
-
}
|
|
1173
|
-
`);
|
|
1174
|
-
|
|
1175
|
-
// src/cubing/twisty/views/3D/DragTracker.ts
|
|
1176
|
-
var MOVEMENT_EPSILON = 0.1;
|
|
1177
|
-
var _dragInfoMap, _targetListeners, _lazyListenersRegistered, _registerLazyListeners, registerLazyListeners_fn, _clear, clear_fn, _trackDrag, trackDrag_fn;
|
|
1178
|
-
var DragTracker = class extends EventTarget {
|
|
1179
|
-
constructor(target) {
|
|
1180
|
-
super();
|
|
1181
|
-
this.target = target;
|
|
1182
|
-
__privateAdd(this, _registerLazyListeners);
|
|
1183
|
-
__privateAdd(this, _clear);
|
|
1184
|
-
__privateAdd(this, _trackDrag);
|
|
1185
|
-
__privateAdd(this, _dragInfoMap, /* @__PURE__ */ new Map());
|
|
1186
|
-
__privateAdd(this, _targetListeners, /* @__PURE__ */ new Map());
|
|
1187
|
-
__privateAdd(this, _lazyListenersRegistered, false);
|
|
1188
|
-
}
|
|
1189
|
-
start() {
|
|
1190
|
-
this.addTargetListener("pointerdown", this.onPointerDown.bind(this));
|
|
1191
|
-
this.addTargetListener("contextmenu", (e) => {
|
|
1192
|
-
e.preventDefault();
|
|
1193
|
-
});
|
|
1194
|
-
this.addTargetListener("touchmove", (e) => e.preventDefault());
|
|
1195
|
-
this.addTargetListener("dblclick", (e) => e.preventDefault());
|
|
1196
|
-
}
|
|
1197
|
-
stop() {
|
|
1198
|
-
for (const [eventType, listener] of __privateGet(this, _targetListeners).entries()) {
|
|
1199
|
-
this.target.removeEventListener(eventType, listener);
|
|
1200
|
-
}
|
|
1201
|
-
__privateGet(this, _targetListeners).clear();
|
|
1202
|
-
__privateSet(this, _lazyListenersRegistered, false);
|
|
1203
|
-
}
|
|
1204
|
-
addTargetListener(eventType, listener) {
|
|
1205
|
-
if (!__privateGet(this, _targetListeners).has(eventType)) {
|
|
1206
|
-
this.target.addEventListener(eventType, listener);
|
|
1207
|
-
__privateGet(this, _targetListeners).set(eventType, listener);
|
|
1208
|
-
}
|
|
1209
|
-
}
|
|
1210
|
-
onPointerDown(e) {
|
|
1211
|
-
__privateMethod(this, _registerLazyListeners, registerLazyListeners_fn).call(this);
|
|
1212
|
-
const newDragInfo = {
|
|
1213
|
-
attachedInfo: {},
|
|
1214
|
-
hasMoved: false,
|
|
1215
|
-
lastClientX: e.clientX,
|
|
1216
|
-
lastClientY: e.clientY,
|
|
1217
|
-
lastTimeStamp: e.timeStamp
|
|
1218
|
-
};
|
|
1219
|
-
__privateGet(this, _dragInfoMap).set(e.pointerId, newDragInfo);
|
|
1220
|
-
this.target.setPointerCapture(e.pointerId);
|
|
1221
|
-
}
|
|
1222
|
-
onPointerMove(e) {
|
|
1223
|
-
const movementInfo = __privateMethod(this, _trackDrag, trackDrag_fn).call(this, e).movementInfo;
|
|
1224
|
-
if (movementInfo) {
|
|
1225
|
-
e.preventDefault();
|
|
1226
|
-
this.dispatchEvent(new CustomEvent("move", {
|
|
1227
|
-
detail: movementInfo
|
|
1228
|
-
}));
|
|
1229
|
-
}
|
|
1230
|
-
}
|
|
1231
|
-
onPointerUp(e) {
|
|
1232
|
-
const trackDragResult = __privateMethod(this, _trackDrag, trackDrag_fn).call(this, e);
|
|
1233
|
-
const existing = __privateGet(this, _dragInfoMap).get(e.pointerId);
|
|
1234
|
-
__privateMethod(this, _clear, clear_fn).call(this, e);
|
|
1235
|
-
this.target.releasePointerCapture(e.pointerId);
|
|
1236
|
-
let event;
|
|
1237
|
-
if (trackDragResult.hasMoved) {
|
|
1238
|
-
event = new CustomEvent("up", {
|
|
1239
|
-
detail: { attachedInfo: existing.attachedInfo }
|
|
1240
|
-
});
|
|
1241
|
-
} else {
|
|
1242
|
-
const { altKey, ctrlKey, metaKey, shiftKey } = e;
|
|
1243
|
-
event = new CustomEvent("press", {
|
|
1244
|
-
detail: {
|
|
1245
|
-
normalizedX: e.offsetX / this.target.offsetWidth * 2 - 1,
|
|
1246
|
-
normalizedY: 1 - e.offsetY / this.target.offsetHeight * 2,
|
|
1247
|
-
rightClick: !!(e.button & 2),
|
|
1248
|
-
keys: {
|
|
1249
|
-
altKey,
|
|
1250
|
-
ctrlOrMetaKey: ctrlKey || metaKey,
|
|
1251
|
-
shiftKey
|
|
1252
|
-
}
|
|
1253
|
-
}
|
|
1254
|
-
});
|
|
1255
|
-
}
|
|
1256
|
-
this.dispatchEvent(event);
|
|
1257
|
-
}
|
|
1258
|
-
};
|
|
1259
|
-
_dragInfoMap = new WeakMap();
|
|
1260
|
-
_targetListeners = new WeakMap();
|
|
1261
|
-
_lazyListenersRegistered = new WeakMap();
|
|
1262
|
-
_registerLazyListeners = new WeakSet();
|
|
1263
|
-
registerLazyListeners_fn = function() {
|
|
1264
|
-
if (__privateGet(this, _lazyListenersRegistered)) {
|
|
1265
|
-
return;
|
|
1266
|
-
}
|
|
1267
|
-
this.addTargetListener("pointermove", this.onPointerMove.bind(this));
|
|
1268
|
-
this.addTargetListener("pointerup", this.onPointerUp.bind(this));
|
|
1269
|
-
__privateSet(this, _lazyListenersRegistered, true);
|
|
1270
|
-
};
|
|
1271
|
-
_clear = new WeakSet();
|
|
1272
|
-
clear_fn = function(e) {
|
|
1273
|
-
__privateGet(this, _dragInfoMap).delete(e.pointerId);
|
|
1274
|
-
};
|
|
1275
|
-
_trackDrag = new WeakSet();
|
|
1276
|
-
trackDrag_fn = function(e) {
|
|
1277
|
-
const existing = __privateGet(this, _dragInfoMap).get(e.pointerId);
|
|
1278
|
-
if (!existing) {
|
|
1279
|
-
return { movementInfo: null, hasMoved: false };
|
|
1280
|
-
}
|
|
1281
|
-
let movementInfo;
|
|
1282
|
-
if ((e.movementX ?? 0) !== 0 || (e.movementY ?? 0) !== 0) {
|
|
1283
|
-
movementInfo = {
|
|
1284
|
-
attachedInfo: existing.attachedInfo,
|
|
1285
|
-
movementX: e.movementX,
|
|
1286
|
-
movementY: e.movementY,
|
|
1287
|
-
elapsedMs: e.timeStamp - existing.lastTimeStamp
|
|
1288
|
-
};
|
|
1289
|
-
} else {
|
|
1290
|
-
movementInfo = {
|
|
1291
|
-
attachedInfo: existing.attachedInfo,
|
|
1292
|
-
movementX: e.clientX - existing.lastClientX,
|
|
1293
|
-
movementY: e.clientY - existing.lastClientY,
|
|
1294
|
-
elapsedMs: e.timeStamp - existing.lastTimeStamp
|
|
1295
|
-
};
|
|
1296
|
-
}
|
|
1297
|
-
existing.lastClientX = e.clientX;
|
|
1298
|
-
existing.lastClientY = e.clientY;
|
|
1299
|
-
existing.lastTimeStamp = e.timeStamp;
|
|
1300
|
-
if (Math.abs(movementInfo.movementX) < MOVEMENT_EPSILON && Math.abs(movementInfo.movementY) < MOVEMENT_EPSILON) {
|
|
1301
|
-
return { movementInfo: null, hasMoved: existing.hasMoved };
|
|
1302
|
-
} else {
|
|
1303
|
-
existing.hasMoved = true;
|
|
1304
|
-
return { movementInfo, hasMoved: existing.hasMoved };
|
|
1305
|
-
}
|
|
1306
|
-
};
|
|
1307
|
-
|
|
1308
|
-
// src/cubing/twisty/views/3D/RendererPool.ts
|
|
1309
|
-
var renderers = [];
|
|
1310
|
-
async function renderPooled(width, height, canvas, scene, camera) {
|
|
1311
|
-
if (width === 0 || height === 0) {
|
|
1312
|
-
return;
|
|
1313
|
-
}
|
|
1314
|
-
if (renderers.length === 0) {
|
|
1315
|
-
renderers.push(newRenderer());
|
|
1316
|
-
}
|
|
1317
|
-
const renderer = await renderers[0];
|
|
1318
|
-
renderer.setSize(width, height);
|
|
1319
|
-
renderer.render(scene, camera);
|
|
1320
|
-
const context = canvas.getContext("2d");
|
|
1321
|
-
context.clearRect(0, 0, canvas.width, canvas.height);
|
|
1322
|
-
context.drawImage(renderer.domElement, 0, 0);
|
|
1323
|
-
}
|
|
1324
|
-
async function newRenderer() {
|
|
1325
|
-
const rendererConstructor = (await THREEJS).WebGLRenderer;
|
|
1326
|
-
const renderer = new rendererConstructor({
|
|
1327
|
-
antialias: true,
|
|
1328
|
-
alpha: true
|
|
1329
|
-
});
|
|
1330
|
-
renderer.setPixelRatio(pixelRatio());
|
|
1331
|
-
return renderer;
|
|
1332
|
-
}
|
|
1333
|
-
|
|
1334
|
-
// src/cubing/twisty/views/3D/TwistyOrbitControls.ts
|
|
1335
|
-
var INERTIA_DEFAULT = true;
|
|
1336
|
-
var INERTIA_DURATION_MS = 500;
|
|
1337
|
-
var INERTIA_TIMEOUT_MS = 50;
|
|
1338
|
-
var VERTICAL_MOVEMENT_BASE_SCALE = 0.75;
|
|
1339
|
-
function momentumScale(progress) {
|
|
1340
|
-
return (Math.exp(1 - progress) - (1 - progress)) / (1 - Math.E) + 1;
|
|
1341
|
-
}
|
|
1342
|
-
var Inertia = class {
|
|
1343
|
-
constructor(startTimestamp, momentumX, momentumY, callback) {
|
|
1344
|
-
this.startTimestamp = startTimestamp;
|
|
1345
|
-
this.momentumX = momentumX;
|
|
1346
|
-
this.momentumY = momentumY;
|
|
1347
|
-
this.callback = callback;
|
|
1348
|
-
this.scheduler = new RenderScheduler(this.render.bind(this));
|
|
1349
|
-
this.scheduler.requestAnimFrame();
|
|
1350
|
-
this.lastTimestamp = startTimestamp;
|
|
1351
|
-
}
|
|
1352
|
-
render(now) {
|
|
1353
|
-
const progressBefore = (this.lastTimestamp - this.startTimestamp) / INERTIA_DURATION_MS;
|
|
1354
|
-
const progressAfter = Math.min(1, (now - this.startTimestamp) / INERTIA_DURATION_MS);
|
|
1355
|
-
if (progressBefore === 0 && progressAfter > INERTIA_TIMEOUT_MS / INERTIA_DURATION_MS) {
|
|
1356
|
-
return;
|
|
1357
|
-
}
|
|
1358
|
-
const delta = momentumScale(progressAfter) - momentumScale(progressBefore);
|
|
1359
|
-
this.callback(this.momentumX * delta * 1e3, this.momentumY * delta * 1e3);
|
|
1360
|
-
if (progressAfter < 1) {
|
|
1361
|
-
this.scheduler.requestAnimFrame();
|
|
1362
|
-
}
|
|
1363
|
-
this.lastTimestamp = now;
|
|
1364
|
-
}
|
|
1365
|
-
};
|
|
1366
|
-
var TwistyOrbitControls = class {
|
|
1367
|
-
constructor(model, mirror, canvas, dragTracker) {
|
|
1368
|
-
this.model = model;
|
|
1369
|
-
this.mirror = mirror;
|
|
1370
|
-
this.canvas = canvas;
|
|
1371
|
-
this.dragTracker = dragTracker;
|
|
1372
|
-
this.experimentalInertia = INERTIA_DEFAULT;
|
|
1373
|
-
this.onMovementBound = this.onMovement.bind(this);
|
|
1374
|
-
this.experimentalHasBeenMoved = false;
|
|
1375
|
-
this.dragTracker.addEventListener("move", this.onMove.bind(this));
|
|
1376
|
-
this.dragTracker.addEventListener("up", this.onUp.bind(this));
|
|
1377
|
-
}
|
|
1378
|
-
temperMovement(f) {
|
|
1379
|
-
return Math.sign(f) * Math.log(Math.abs(f * 10) + 1) / 6;
|
|
1380
|
-
}
|
|
1381
|
-
onMove(e) {
|
|
1382
|
-
var _a;
|
|
1383
|
-
(_a = e.detail).attachedInfo ?? (_a.attachedInfo = {});
|
|
1384
|
-
const { temperedX, temperedY } = this.onMovement(e.detail.movementX, e.detail.movementY);
|
|
1385
|
-
const attachedInfo = e.detail.attachedInfo;
|
|
1386
|
-
attachedInfo.lastTemperedX = temperedX * 10;
|
|
1387
|
-
attachedInfo.lastTemperedY = temperedY * 10;
|
|
1388
|
-
attachedInfo.timestamp = e.timeStamp;
|
|
1389
|
-
}
|
|
1390
|
-
onMovement(movementX, movementY) {
|
|
1391
|
-
const scale = this.mirror ? -1 : 1;
|
|
1392
|
-
const minDim = Math.min(this.canvas.offsetWidth, this.canvas.offsetHeight);
|
|
1393
|
-
const temperedX = this.temperMovement(movementX / minDim);
|
|
1394
|
-
const temperedY = this.temperMovement(movementY / minDim * VERTICAL_MOVEMENT_BASE_SCALE);
|
|
1395
|
-
this.model.twistySceneModel.orbitCoordinatesRequest.set((async () => {
|
|
1396
|
-
const prevCoords = await this.model.twistySceneModel.orbitCoordinates.get();
|
|
1397
|
-
const newCoords = {
|
|
1398
|
-
latitude: prevCoords.latitude + 2 * temperedY * DEGREES_PER_RADIAN * scale,
|
|
1399
|
-
longitude: prevCoords.longitude - 2 * temperedX * DEGREES_PER_RADIAN
|
|
1400
|
-
};
|
|
1401
|
-
return newCoords;
|
|
1402
|
-
})());
|
|
1403
|
-
return { temperedX, temperedY };
|
|
1404
|
-
}
|
|
1405
|
-
onUp(e) {
|
|
1406
|
-
e.preventDefault();
|
|
1407
|
-
if ("lastTemperedX" in e.detail.attachedInfo && "lastTemperedY" in e.detail.attachedInfo && "timestamp" in e.detail.attachedInfo && e.timeStamp - e.detail.attachedInfo.timestamp < 60) {
|
|
1408
|
-
new Inertia(e.timeStamp, e.detail.attachedInfo.lastTemperedX, e.detail.attachedInfo.lastTemperedY, this.onMovementBound);
|
|
1409
|
-
}
|
|
1410
|
-
}
|
|
1411
|
-
};
|
|
1412
|
-
|
|
1413
|
-
// src/cubing/twisty/views/3D/Twisty3DVantage.ts
|
|
1414
|
-
var SHOW_STATS = false;
|
|
1415
|
-
function debugShowRenderStats(enable) {
|
|
1416
|
-
SHOW_STATS = enable;
|
|
1417
|
-
}
|
|
1418
|
-
async function setCameraFromOrbitCoordinates(camera, orbitCoordinates, backView = false) {
|
|
1419
|
-
const spherical = new (await THREEJS).Spherical(orbitCoordinates.distance, (90 - (backView ? -1 : 1) * orbitCoordinates.latitude) / DEGREES_PER_RADIAN, ((backView ? 180 : 0) + orbitCoordinates.longitude) / DEGREES_PER_RADIAN);
|
|
1420
|
-
spherical.makeSafe();
|
|
1421
|
-
camera.position.setFromSpherical(spherical);
|
|
1422
|
-
camera.lookAt(0, 0, 0);
|
|
1423
|
-
}
|
|
1424
|
-
var shareAllNewRenderers = null;
|
|
1425
|
-
function experimentalForceNewRendererSharing(share) {
|
|
1426
|
-
shareAllNewRenderers = share;
|
|
1427
|
-
}
|
|
1428
|
-
var dedicatedRenderersSoFar = 0;
|
|
1429
|
-
var DEFAULT_MAX_DEDICATED_RENDERERS = 2;
|
|
1430
|
-
function shareRenderer() {
|
|
1431
|
-
if (shareAllNewRenderers !== null) {
|
|
1432
|
-
if (!shareAllNewRenderers) {
|
|
1433
|
-
dedicatedRenderersSoFar++;
|
|
1434
|
-
}
|
|
1435
|
-
return shareAllNewRenderers;
|
|
1436
|
-
}
|
|
1437
|
-
if (dedicatedRenderersSoFar < DEFAULT_MAX_DEDICATED_RENDERERS) {
|
|
1438
|
-
dedicatedRenderersSoFar++;
|
|
1439
|
-
return false;
|
|
1440
|
-
} else {
|
|
1441
|
-
return true;
|
|
1442
|
-
}
|
|
1443
|
-
}
|
|
1444
|
-
var _setupBasicPresses, setupBasicPresses_fn, _onResizeStaleDropper, _width, _height, _onResize, onResize_fn, _cachedRenderer, _cachedCanvas, _cachedDragTracker, _dragTracker, dragTracker_fn, _cachedCamera, _cachedOrbitControls, _disconnectionFunctions, _experimentalNextRenderFinishedCallback, _scheduler;
|
|
1445
|
-
var Twisty3DVantage = class extends ManagedCustomElement {
|
|
1446
|
-
constructor(model, scene, options) {
|
|
1447
|
-
super();
|
|
1448
|
-
this.model = model;
|
|
1449
|
-
this.options = options;
|
|
1450
|
-
__privateAdd(this, _setupBasicPresses);
|
|
1451
|
-
__privateAdd(this, _onResize);
|
|
1452
|
-
__privateAdd(this, _dragTracker);
|
|
1453
|
-
this.scene = null;
|
|
1454
|
-
this.stats = null;
|
|
1455
|
-
this.rendererIsShared = shareRenderer();
|
|
1456
|
-
this.loadingElement = null;
|
|
1457
|
-
__privateAdd(this, _onResizeStaleDropper, new StaleDropper());
|
|
1458
|
-
__privateAdd(this, _width, 0);
|
|
1459
|
-
__privateAdd(this, _height, 0);
|
|
1460
|
-
__privateAdd(this, _cachedRenderer, null);
|
|
1461
|
-
__privateAdd(this, _cachedCanvas, null);
|
|
1462
|
-
__privateAdd(this, _cachedDragTracker, null);
|
|
1463
|
-
__privateAdd(this, _cachedCamera, null);
|
|
1464
|
-
__privateAdd(this, _cachedOrbitControls, null);
|
|
1465
|
-
__privateAdd(this, _disconnectionFunctions, []);
|
|
1466
|
-
__privateAdd(this, _experimentalNextRenderFinishedCallback, null);
|
|
1467
|
-
__privateAdd(this, _scheduler, new RenderScheduler(this.render.bind(this)));
|
|
1468
|
-
this.scene = scene ?? null;
|
|
1469
|
-
this.loadingElement = this.addElement(document.createElement("div"));
|
|
1470
|
-
this.loadingElement.classList.add("loading");
|
|
1471
|
-
if (SHOW_STATS) {
|
|
1472
|
-
this.stats = new Stats();
|
|
1473
|
-
this.stats.dom.style.position = "absolute";
|
|
1474
|
-
this.contentWrapper.appendChild(this.stats.dom);
|
|
1475
|
-
}
|
|
1476
|
-
}
|
|
1477
|
-
async connectedCallback() {
|
|
1478
|
-
this.addCSS(twisty3DVantageCSS);
|
|
1479
|
-
this.addElement((await this.canvasInfo()).canvas);
|
|
1480
|
-
__privateMethod(this, _onResize, onResize_fn).call(this);
|
|
1481
|
-
const observer = new ResizeObserver(__privateMethod(this, _onResize, onResize_fn).bind(this));
|
|
1482
|
-
observer.observe(this.contentWrapper);
|
|
1483
|
-
this.orbitControls();
|
|
1484
|
-
__privateMethod(this, _setupBasicPresses, setupBasicPresses_fn).call(this);
|
|
1485
|
-
this.scheduleRender();
|
|
1486
|
-
}
|
|
1487
|
-
async clearCanvas() {
|
|
1488
|
-
if (this.rendererIsShared) {
|
|
1489
|
-
const canvasInfo = await this.canvasInfo();
|
|
1490
|
-
canvasInfo.context.clearRect(0, 0, canvasInfo.canvas.width, canvasInfo.canvas.height);
|
|
1491
|
-
} else {
|
|
1492
|
-
const renderer = await this.renderer();
|
|
1493
|
-
const context = renderer.getContext();
|
|
1494
|
-
context.clear(context.COLOR_BUFFER_BIT);
|
|
1495
|
-
}
|
|
1496
|
-
}
|
|
1497
|
-
async renderer() {
|
|
1498
|
-
if (this.rendererIsShared) {
|
|
1499
|
-
throw new Error("renderer expected to be shared.");
|
|
1500
|
-
}
|
|
1501
|
-
return __privateGet(this, _cachedRenderer) ?? __privateSet(this, _cachedRenderer, newRenderer());
|
|
1502
|
-
}
|
|
1503
|
-
async canvasInfo() {
|
|
1504
|
-
return __privateGet(this, _cachedCanvas) ?? __privateSet(this, _cachedCanvas, (async () => {
|
|
1505
|
-
let canvas;
|
|
1506
|
-
if (this.rendererIsShared) {
|
|
1507
|
-
canvas = this.addElement(document.createElement("canvas"));
|
|
1508
|
-
} else {
|
|
1509
|
-
const renderer = await this.renderer();
|
|
1510
|
-
canvas = this.addElement(renderer.domElement);
|
|
1511
|
-
}
|
|
1512
|
-
this.loadingElement?.remove();
|
|
1513
|
-
const context = canvas.getContext("2d");
|
|
1514
|
-
return { canvas, context };
|
|
1515
|
-
})());
|
|
1516
|
-
}
|
|
1517
|
-
async camera() {
|
|
1518
|
-
return __privateGet(this, _cachedCamera) ?? __privateSet(this, _cachedCamera, (async () => {
|
|
1519
|
-
const camera = new (await THREEJS).PerspectiveCamera(20, 1, 0.1, 20);
|
|
1520
|
-
camera.position.copy(new (await THREEJS).Vector3(2, 4, 4).multiplyScalar(this.options?.backView ? -1 : 1));
|
|
1521
|
-
camera.lookAt(0, 0, 0);
|
|
1522
|
-
return camera;
|
|
1523
|
-
})());
|
|
1524
|
-
}
|
|
1525
|
-
async orbitControls() {
|
|
1526
|
-
return __privateGet(this, _cachedOrbitControls) ?? __privateSet(this, _cachedOrbitControls, (async () => {
|
|
1527
|
-
const orbitControls = new TwistyOrbitControls(this.model, !!this.options?.backView, (await this.canvasInfo()).canvas, await __privateMethod(this, _dragTracker, dragTracker_fn).call(this));
|
|
1528
|
-
if (this.model) {
|
|
1529
|
-
this.addListener(this.model.twistySceneModel.orbitCoordinates, async (orbitCoordinates) => {
|
|
1530
|
-
const camera = await this.camera();
|
|
1531
|
-
setCameraFromOrbitCoordinates(camera, orbitCoordinates, this.options?.backView);
|
|
1532
|
-
this.scheduleRender();
|
|
1533
|
-
});
|
|
1534
|
-
}
|
|
1535
|
-
return orbitControls;
|
|
1536
|
-
})());
|
|
1537
|
-
}
|
|
1538
|
-
addListener(prop, listener) {
|
|
1539
|
-
prop.addFreshListener(listener);
|
|
1540
|
-
__privateGet(this, _disconnectionFunctions).push(() => {
|
|
1541
|
-
prop.removeFreshListener(listener);
|
|
1542
|
-
});
|
|
1543
|
-
}
|
|
1544
|
-
disconnect() {
|
|
1545
|
-
for (const fn of __privateGet(this, _disconnectionFunctions)) {
|
|
1546
|
-
fn();
|
|
1547
|
-
}
|
|
1548
|
-
__privateSet(this, _disconnectionFunctions, []);
|
|
1549
|
-
}
|
|
1550
|
-
experimentalNextRenderFinishedCallback(callback) {
|
|
1551
|
-
__privateSet(this, _experimentalNextRenderFinishedCallback, callback);
|
|
1552
|
-
}
|
|
1553
|
-
async render() {
|
|
1554
|
-
var _a;
|
|
1555
|
-
if (!this.scene) {
|
|
1556
|
-
throw new Error("Attempted to render without a scene");
|
|
1557
|
-
}
|
|
1558
|
-
this.stats?.begin();
|
|
1559
|
-
const [scene, camera, canvas] = await Promise.all([
|
|
1560
|
-
this.scene.scene(),
|
|
1561
|
-
this.camera(),
|
|
1562
|
-
this.canvasInfo()
|
|
1563
|
-
]);
|
|
1564
|
-
if (this.rendererIsShared) {
|
|
1565
|
-
renderPooled(__privateGet(this, _width), __privateGet(this, _height), canvas.canvas, scene, camera);
|
|
1566
|
-
} else {
|
|
1567
|
-
(await this.renderer()).render(scene, camera);
|
|
1568
|
-
}
|
|
1569
|
-
this.stats?.end();
|
|
1570
|
-
(_a = __privateGet(this, _experimentalNextRenderFinishedCallback)) == null ? void 0 : _a.call(this);
|
|
1571
|
-
__privateSet(this, _experimentalNextRenderFinishedCallback, null);
|
|
1572
|
-
}
|
|
1573
|
-
scheduleRender() {
|
|
1574
|
-
__privateGet(this, _scheduler).requestAnimFrame();
|
|
1575
|
-
}
|
|
1576
|
-
};
|
|
1577
|
-
_setupBasicPresses = new WeakSet();
|
|
1578
|
-
setupBasicPresses_fn = async function() {
|
|
1579
|
-
const dragTracker = await __privateMethod(this, _dragTracker, dragTracker_fn).call(this);
|
|
1580
|
-
dragTracker.addEventListener("press", async (e) => {
|
|
1581
|
-
const movePressInput = await this.model.twistySceneModel.movePressInput.get();
|
|
1582
|
-
if (movePressInput !== "basic") {
|
|
1583
|
-
return;
|
|
1584
|
-
}
|
|
1585
|
-
this.dispatchEvent(new CustomEvent("press", {
|
|
1586
|
-
detail: {
|
|
1587
|
-
pressInfo: e.detail,
|
|
1588
|
-
cameraPromise: this.camera()
|
|
1589
|
-
}
|
|
1590
|
-
}));
|
|
1591
|
-
});
|
|
1592
|
-
};
|
|
1593
|
-
_onResizeStaleDropper = new WeakMap();
|
|
1594
|
-
_width = new WeakMap();
|
|
1595
|
-
_height = new WeakMap();
|
|
1596
|
-
_onResize = new WeakSet();
|
|
1597
|
-
onResize_fn = async function() {
|
|
1598
|
-
const camera = await __privateGet(this, _onResizeStaleDropper).queue(this.camera());
|
|
1599
|
-
const w = this.contentWrapper.clientWidth;
|
|
1600
|
-
const h = this.contentWrapper.clientHeight;
|
|
1601
|
-
__privateSet(this, _width, w);
|
|
1602
|
-
__privateSet(this, _height, h);
|
|
1603
|
-
const off = 0;
|
|
1604
|
-
let yoff = 0;
|
|
1605
|
-
let excess = 0;
|
|
1606
|
-
if (h > w) {
|
|
1607
|
-
excess = h - w;
|
|
1608
|
-
yoff = -Math.floor(0.5 * excess);
|
|
1609
|
-
}
|
|
1610
|
-
camera.aspect = w / h;
|
|
1611
|
-
camera.setViewOffset(w, h - excess, off, yoff, w, h);
|
|
1612
|
-
camera.updateProjectionMatrix();
|
|
1613
|
-
this.clearCanvas();
|
|
1614
|
-
if (this.rendererIsShared) {
|
|
1615
|
-
const canvasInfo = await this.canvasInfo();
|
|
1616
|
-
canvasInfo.canvas.width = w * pixelRatio();
|
|
1617
|
-
canvasInfo.canvas.height = h * pixelRatio();
|
|
1618
|
-
canvasInfo.canvas.style.width = w.toString();
|
|
1619
|
-
canvasInfo.canvas.style.height = h.toString();
|
|
1620
|
-
} else {
|
|
1621
|
-
const renderer = await this.renderer();
|
|
1622
|
-
renderer.setSize(w, h, true);
|
|
1623
|
-
}
|
|
1624
|
-
this.scheduleRender();
|
|
1625
|
-
};
|
|
1626
|
-
_cachedRenderer = new WeakMap();
|
|
1627
|
-
_cachedCanvas = new WeakMap();
|
|
1628
|
-
_cachedDragTracker = new WeakMap();
|
|
1629
|
-
_dragTracker = new WeakSet();
|
|
1630
|
-
dragTracker_fn = async function() {
|
|
1631
|
-
return __privateGet(this, _cachedDragTracker) ?? __privateSet(this, _cachedDragTracker, (async () => {
|
|
1632
|
-
const dragTracker = new DragTracker((await this.canvasInfo()).canvas);
|
|
1633
|
-
this.model?.twistySceneModel.dragInput.addFreshListener((dragInputMode) => {
|
|
1634
|
-
let dragInputEnabled = false;
|
|
1635
|
-
switch (dragInputMode) {
|
|
1636
|
-
case "auto":
|
|
1637
|
-
dragTracker.start();
|
|
1638
|
-
dragInputEnabled = true;
|
|
1639
|
-
break;
|
|
1640
|
-
case "none":
|
|
1641
|
-
dragTracker.stop();
|
|
1642
|
-
break;
|
|
1643
|
-
}
|
|
1644
|
-
this.contentWrapper.classList.toggle("drag-input-enabled", dragInputEnabled);
|
|
1645
|
-
});
|
|
1646
|
-
return dragTracker;
|
|
1647
|
-
})());
|
|
1648
|
-
};
|
|
1649
|
-
_cachedCamera = new WeakMap();
|
|
1650
|
-
_cachedOrbitControls = new WeakMap();
|
|
1651
|
-
_disconnectionFunctions = new WeakMap();
|
|
1652
|
-
_experimentalNextRenderFinishedCallback = new WeakMap();
|
|
1653
|
-
_scheduler = new WeakMap();
|
|
1654
|
-
customElementsShim.define("twisty-3d-vantage", Twisty3DVantage);
|
|
1655
|
-
|
|
1656
916
|
// src/cubing/twisty/views/3D/Twisty3DSceneWrapper.ts
|
|
1657
917
|
var _backViewClassListManager, _freshListenerManager5, _backViewVantage, _cachedScene2, _vantages, _currentTwisty3DPuzzleWrapper, _initialWrapperTracker, _twisty3DStaleDropper;
|
|
1658
918
|
var Twisty3DSceneWrapper = class extends ManagedCustomElement {
|
|
@@ -5458,7 +4718,6 @@ export {
|
|
|
5458
4718
|
TwistyPlayer,
|
|
5459
4719
|
TwizzleLink,
|
|
5460
4720
|
backViewLayouts,
|
|
5461
|
-
|
|
5462
|
-
experimentalForceNewRendererSharing
|
|
4721
|
+
setTwistyDebug
|
|
5463
4722
|
};
|
|
5464
4723
|
//# sourceMappingURL=index.js.map
|