cubing 0.26.7 → 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 +3 -1
- package/dist/esm/alg/index.js +7 -11
- package/dist/esm/bluetooth/index.js +15 -16
- package/dist/esm/bluetooth/index.js.map +2 -2
- package/dist/esm/{chunk-J4SZZ5OP.js → chunk-32FWPPTW.js} +3 -3
- package/dist/esm/chunk-32FWPPTW.js.map +7 -0
- package/dist/esm/{chunk-YEXEZWAK.js → chunk-67VJZGH2.js} +3 -3
- package/dist/esm/{chunk-YEXEZWAK.js.map → chunk-67VJZGH2.js.map} +1 -1
- package/dist/esm/{chunk-ITRA3DUQ.js → chunk-7D7LW3WQ.js} +2 -2
- package/dist/esm/{chunk-ITRA3DUQ.js.map → chunk-7D7LW3WQ.js.map} +1 -1
- package/dist/esm/{chunk-GBMX6FHY.js → chunk-ALBEW4DJ.js} +1 -1
- package/dist/esm/{chunk-GBMX6FHY.js.map → chunk-ALBEW4DJ.js.map} +1 -1
- package/dist/esm/{chunk-FCB447RN.js → chunk-CSBUJ64Q.js} +197 -128
- package/dist/esm/chunk-CSBUJ64Q.js.map +7 -0
- package/dist/esm/{chunk-WQK6XWML.js → chunk-F4WWCPVE.js} +2 -2
- package/dist/esm/{chunk-WQK6XWML.js.map → chunk-F4WWCPVE.js.map} +1 -1
- package/dist/esm/{chunk-YBDBUTYE.js → chunk-GVPTO3OF.js} +1 -1
- package/dist/esm/{chunk-YBDBUTYE.js.map → chunk-GVPTO3OF.js.map} +1 -1
- package/dist/esm/chunk-LSVR2HCG.js +1111 -0
- package/dist/esm/chunk-LSVR2HCG.js.map +7 -0
- package/dist/esm/{chunk-KSNW26OV.js → chunk-MWKALF6W.js} +7 -7
- package/dist/esm/{chunk-KSNW26OV.js.map → chunk-MWKALF6W.js.map} +1 -1
- package/dist/esm/{chunk-GLII3KIK.js → chunk-NPHUBFZ6.js} +6 -6
- package/dist/esm/chunk-NPHUBFZ6.js.map +7 -0
- package/dist/esm/{chunk-BEXHMXCT.js → chunk-RHC3DIN3.js} +1 -1
- package/dist/esm/{chunk-BEXHMXCT.js.map → chunk-RHC3DIN3.js.map} +1 -1
- package/dist/esm/{chunk-NYAPGKCW.js → chunk-V55YSWJY.js} +1 -1
- package/dist/esm/{chunk-NYAPGKCW.js.map → chunk-V55YSWJY.js.map} +1 -1
- package/dist/esm/{chunk-P637ZWHR.js → chunk-WAL36PO3.js} +7 -7
- package/dist/esm/{chunk-P637ZWHR.js.map → chunk-WAL36PO3.js.map} +1 -1
- package/dist/esm/{chunk-ASOUBXFO.js → chunk-YSVFZVG4.js} +14 -14
- package/dist/esm/chunk-YSVFZVG4.js.map +7 -0
- package/dist/esm/{chunk-QK4WH7WZ.js → chunk-ZY3RTFFS.js} +5 -5
- package/dist/esm/chunk-ZY3RTFFS.js.map +7 -0
- package/dist/esm/kpuzzle/index.js +2 -2
- package/dist/esm/notation/index.js +2 -2
- package/dist/esm/protocol/index.js +8 -8
- 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/{puzzles-dynamic-side-events-HOXBZYWI.js → puzzles-dynamic-side-events-WZI4Y3N6.js} +1 -1
- package/dist/esm/{puzzles-dynamic-side-events-HOXBZYWI.js.map → puzzles-dynamic-side-events-WZI4Y3N6.js.map} +1 -1
- package/dist/esm/{puzzles-dynamic-unofficial-MGVOFUDR.js → puzzles-dynamic-unofficial-FUG3JBMH.js} +1 -1
- package/dist/esm/{puzzles-dynamic-unofficial-MGVOFUDR.js.map → puzzles-dynamic-unofficial-FUG3JBMH.js.map} +1 -1
- package/dist/esm/scramble/index.js +5 -5
- package/dist/esm/search/index.js +10 -10
- package/dist/esm/{search-dynamic-sgs-side-events-OUCE5RN6.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-KS2IT3DM.js → search-dynamic-sgs-unofficial-FQNKGHVO.js} +7 -7
- package/dist/esm/{search-dynamic-sgs-unofficial-KS2IT3DM.js.map → search-dynamic-sgs-unofficial-FQNKGHVO.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-3x3x3-K4TG7P3X.js → search-dynamic-solve-3x3x3-K42IWMQV.js} +1 -1
- package/dist/esm/{search-dynamic-solve-3x3x3-K4TG7P3X.js.map → search-dynamic-solve-3x3x3-K42IWMQV.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-4x4x4-6IIZNXXP.js → search-dynamic-solve-4x4x4-XRV4NBMQ.js} +8 -8
- package/dist/esm/{search-dynamic-solve-4x4x4-6IIZNXXP.js.map → search-dynamic-solve-4x4x4-XRV4NBMQ.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-fto-WROONLZS.js → search-dynamic-solve-fto-O6UXF7EC.js} +2 -2
- package/dist/esm/{search-dynamic-solve-fto-WROONLZS.js.map → search-dynamic-solve-fto-O6UXF7EC.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-kilominx-UEFJENHO.js → search-dynamic-solve-kilominx-G4MLGWNS.js} +3 -3
- package/dist/esm/{search-dynamic-solve-kilominx-UEFJENHO.js.map → search-dynamic-solve-kilominx-G4MLGWNS.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-master_tetraminx-3R2CJUKW.js → search-dynamic-solve-master_tetraminx-3RKD3IAN.js} +2 -2
- package/dist/esm/{search-dynamic-solve-master_tetraminx-3R2CJUKW.js.map → search-dynamic-solve-master_tetraminx-3RKD3IAN.js.map} +1 -1
- package/dist/esm/{search-dynamic-solve-sq1-RS5HN6AH.js → search-dynamic-solve-sq1-WIJEGVLP.js} +2 -2
- package/dist/esm/{search-dynamic-solve-sq1-RS5HN6AH.js.map → search-dynamic-solve-sq1-WIJEGVLP.js.map} +1 -1
- package/dist/esm/search-worker-inside-generated-string-IZCKWXUA.js +3768 -0
- package/dist/esm/search-worker-inside-generated-string-IZCKWXUA.js.map +7 -0
- package/dist/esm/{search-worker-js-entry-4A3O552B.js → search-worker-js-entry-WBEKNBB7.js} +21 -21
- package/dist/esm/search-worker-js-entry-WBEKNBB7.js.map +7 -0
- package/dist/esm/{search-worker-ts-entry-NUFPSU6U.js → search-worker-ts-entry-XQWMEOC4.js} +5 -5
- package/dist/esm/{search-worker-ts-entry-NUFPSU6U.js.map → search-worker-ts-entry-XQWMEOC4.js.map} +1 -1
- package/dist/esm/stream/index.js +4 -4
- package/dist/esm/stream/index.js.map +1 -1
- package/dist/esm/twisty/index.js +95 -813
- package/dist/esm/twisty/index.js.map +3 -3
- package/dist/esm/{twisty-dynamic-3d-YI5E4NWB.js → twisty-dynamic-3d-QOX7IEXC.js} +52 -17
- package/dist/esm/twisty-dynamic-3d-QOX7IEXC.js.map +7 -0
- package/dist/types/{Alg-5cf4b166.d.ts → Alg-e2a80975.d.ts} +66 -53
- package/dist/types/{KState-836cc3c7.d.ts → KState-a2f0e651.d.ts} +2 -1
- package/dist/types/{TwizzleLink-4f0a162d.d.ts → TwizzleLink-dcf51446.d.ts} +20 -16
- package/dist/types/alg/index.d.ts +16 -7
- package/dist/types/bluetooth/index.d.ts +17 -7
- package/dist/types/{bluetooth-puzzle-b1d62cb5.d.ts → bluetooth-puzzle-3670a6a1.d.ts} +6 -9
- package/dist/types/kpuzzle/index.d.ts +2 -2
- package/dist/types/notation/index.d.ts +1 -1
- package/dist/types/{outside-a6c8f46b.d.ts → outside-0ce1b145.d.ts} +2 -2
- package/dist/types/parseAlg-db0dec6c.d.ts +9 -0
- package/dist/types/protocol/index.d.ts +7 -3
- package/dist/types/puzzle-geometry/index.d.ts +3 -3
- package/dist/types/puzzles/index.d.ts +10 -5
- package/dist/types/scramble/index.d.ts +3 -3
- package/dist/types/search/index.d.ts +3 -3
- package/dist/types/stream/index.d.ts +4 -4
- package/dist/types/twisty/index.d.ts +13 -6
- package/package.json +29 -26
- package/dist/esm/chunk-ASOUBXFO.js.map +0 -7
- package/dist/esm/chunk-FCB447RN.js.map +0 -7
- package/dist/esm/chunk-GLII3KIK.js.map +0 -7
- package/dist/esm/chunk-J4SZZ5OP.js.map +0 -7
- package/dist/esm/chunk-KT3AIQTR.js +0 -4386
- package/dist/esm/chunk-KT3AIQTR.js.map +0 -7
- package/dist/esm/chunk-LKISJU2L.js +0 -339
- package/dist/esm/chunk-LKISJU2L.js.map +0 -7
- package/dist/esm/chunk-QK4WH7WZ.js.map +0 -7
- package/dist/esm/search-dynamic-sgs-side-events-OUCE5RN6.js.map +0 -7
- package/dist/esm/search-worker-inside-generated-string-GNBQVERX.js +0 -3768
- package/dist/esm/search-worker-inside-generated-string-GNBQVERX.js.map +0 -7
- package/dist/esm/search-worker-js-entry-4A3O552B.js.map +0 -7
- package/dist/esm/twisty-dynamic-3d-YI5E4NWB.js.map +0 -7
- package/dist/types/parse-9db7ee51.d.ts +0 -9
|
@@ -0,0 +1,1111 @@
|
|
|
1
|
+
import {
|
|
2
|
+
from
|
|
3
|
+
} from "./chunk-GVPTO3OF.js";
|
|
4
|
+
import {
|
|
5
|
+
__privateAdd,
|
|
6
|
+
__privateGet,
|
|
7
|
+
__privateMethod,
|
|
8
|
+
__privateSet,
|
|
9
|
+
__privateWrapper
|
|
10
|
+
} from "./chunk-MGJA5U5O.js";
|
|
11
|
+
|
|
12
|
+
// src/cubing/twisty/debug.ts
|
|
13
|
+
var twistyDebugGlobals = {
|
|
14
|
+
animateRaiseHintFacelets: true,
|
|
15
|
+
shareAllNewRenderers: "auto",
|
|
16
|
+
showRenderStats: false
|
|
17
|
+
};
|
|
18
|
+
function setTwistyDebug(options) {
|
|
19
|
+
for (const [key, value] of Object.entries(options)) {
|
|
20
|
+
if (key in twistyDebugGlobals) {
|
|
21
|
+
twistyDebugGlobals[key] = value;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// src/cubing/twisty/model/PromiseFreshener.ts
|
|
27
|
+
var _latestAssignedIdx, _latestResolvedIdx;
|
|
28
|
+
var PromiseFreshener = class {
|
|
29
|
+
constructor() {
|
|
30
|
+
__privateAdd(this, _latestAssignedIdx, 0);
|
|
31
|
+
__privateAdd(this, _latestResolvedIdx, 0);
|
|
32
|
+
}
|
|
33
|
+
async queue(p) {
|
|
34
|
+
const idx = ++__privateWrapper(this, _latestAssignedIdx)._;
|
|
35
|
+
const result = await p;
|
|
36
|
+
if (idx > __privateGet(this, _latestResolvedIdx)) {
|
|
37
|
+
__privateSet(this, _latestResolvedIdx, idx);
|
|
38
|
+
return {
|
|
39
|
+
fresh: true,
|
|
40
|
+
result
|
|
41
|
+
};
|
|
42
|
+
} else {
|
|
43
|
+
return { fresh: false };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
_latestAssignedIdx = new WeakMap();
|
|
48
|
+
_latestResolvedIdx = new WeakMap();
|
|
49
|
+
var _latestAssignedIdx2, _latestResolvedIdx2;
|
|
50
|
+
var StaleDropper = class {
|
|
51
|
+
constructor() {
|
|
52
|
+
__privateAdd(this, _latestAssignedIdx2, 0);
|
|
53
|
+
__privateAdd(this, _latestResolvedIdx2, 0);
|
|
54
|
+
}
|
|
55
|
+
queue(p) {
|
|
56
|
+
return new Promise(async (resolve, reject) => {
|
|
57
|
+
try {
|
|
58
|
+
const idx = ++__privateWrapper(this, _latestAssignedIdx2)._;
|
|
59
|
+
const result = await p;
|
|
60
|
+
if (idx > __privateGet(this, _latestResolvedIdx2)) {
|
|
61
|
+
__privateSet(this, _latestResolvedIdx2, idx);
|
|
62
|
+
resolve(result);
|
|
63
|
+
}
|
|
64
|
+
} catch (e) {
|
|
65
|
+
reject(e);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
_latestAssignedIdx2 = new WeakMap();
|
|
71
|
+
_latestResolvedIdx2 = new WeakMap();
|
|
72
|
+
|
|
73
|
+
// src/cubing/twisty/model/props/TwistyProp.ts
|
|
74
|
+
var globalSourceGeneration = 0;
|
|
75
|
+
var _children, _rawListeners, _scheduleRawDispatch, scheduleRawDispatch_fn, _rawDispatchPending, _dispatchRawListeners, dispatchRawListeners_fn, _freshListeners;
|
|
76
|
+
var TwistyPropParent = class {
|
|
77
|
+
constructor() {
|
|
78
|
+
__privateAdd(this, _scheduleRawDispatch);
|
|
79
|
+
__privateAdd(this, _dispatchRawListeners);
|
|
80
|
+
__privateAdd(this, _children, /* @__PURE__ */ new Set());
|
|
81
|
+
this.lastSourceGeneration = 0;
|
|
82
|
+
__privateAdd(this, _rawListeners, /* @__PURE__ */ new Set());
|
|
83
|
+
__privateAdd(this, _rawDispatchPending, false);
|
|
84
|
+
__privateAdd(this, _freshListeners, /* @__PURE__ */ new Map());
|
|
85
|
+
}
|
|
86
|
+
canReuse(v1, v2) {
|
|
87
|
+
return v1 === v2 || this.canReuseValue(v1, v2);
|
|
88
|
+
}
|
|
89
|
+
canReuseValue(_v1, _v2) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
debugGetChildren() {
|
|
93
|
+
return Array.from(__privateGet(this, _children).values());
|
|
94
|
+
}
|
|
95
|
+
addChild(child) {
|
|
96
|
+
__privateGet(this, _children).add(child);
|
|
97
|
+
}
|
|
98
|
+
removeChild(child) {
|
|
99
|
+
__privateGet(this, _children).delete(child);
|
|
100
|
+
}
|
|
101
|
+
markStale(sourceEvent) {
|
|
102
|
+
if (sourceEvent.detail.generation !== globalSourceGeneration) {
|
|
103
|
+
throw new Error("A TwistyProp was marked stale too late!");
|
|
104
|
+
}
|
|
105
|
+
if (this.lastSourceGeneration === sourceEvent.detail.generation) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
this.lastSourceGeneration = sourceEvent.detail.generation;
|
|
109
|
+
for (const child of __privateGet(this, _children)) {
|
|
110
|
+
child.markStale(sourceEvent);
|
|
111
|
+
}
|
|
112
|
+
__privateMethod(this, _scheduleRawDispatch, scheduleRawDispatch_fn).call(this);
|
|
113
|
+
}
|
|
114
|
+
addRawListener(listener, options) {
|
|
115
|
+
__privateGet(this, _rawListeners).add(listener);
|
|
116
|
+
if (options?.initial) {
|
|
117
|
+
listener();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
removeRawListener(listener) {
|
|
121
|
+
__privateGet(this, _rawListeners).delete(listener);
|
|
122
|
+
}
|
|
123
|
+
addFreshListener(listener) {
|
|
124
|
+
const staleDropper = new StaleDropper();
|
|
125
|
+
let lastResult = null;
|
|
126
|
+
const callback = async () => {
|
|
127
|
+
const result = await staleDropper.queue(this.get());
|
|
128
|
+
if (lastResult !== null && this.canReuse(lastResult, result)) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
lastResult = result;
|
|
132
|
+
listener(result);
|
|
133
|
+
};
|
|
134
|
+
__privateGet(this, _freshListeners).set(listener, callback);
|
|
135
|
+
this.addRawListener(callback, { initial: true });
|
|
136
|
+
}
|
|
137
|
+
removeFreshListener(listener) {
|
|
138
|
+
this.removeRawListener(__privateGet(this, _freshListeners).get(listener));
|
|
139
|
+
__privateGet(this, _freshListeners).delete(listener);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
_children = new WeakMap();
|
|
143
|
+
_rawListeners = new WeakMap();
|
|
144
|
+
_scheduleRawDispatch = new WeakSet();
|
|
145
|
+
scheduleRawDispatch_fn = function() {
|
|
146
|
+
if (!__privateGet(this, _rawDispatchPending)) {
|
|
147
|
+
__privateSet(this, _rawDispatchPending, true);
|
|
148
|
+
setTimeout(() => __privateMethod(this, _dispatchRawListeners, dispatchRawListeners_fn).call(this), 0);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
_rawDispatchPending = new WeakMap();
|
|
152
|
+
_dispatchRawListeners = new WeakSet();
|
|
153
|
+
dispatchRawListeners_fn = function() {
|
|
154
|
+
if (!__privateGet(this, _rawDispatchPending)) {
|
|
155
|
+
throw new Error("Invalid dispatch state!");
|
|
156
|
+
}
|
|
157
|
+
for (const listener of __privateGet(this, _rawListeners)) {
|
|
158
|
+
listener();
|
|
159
|
+
}
|
|
160
|
+
__privateSet(this, _rawDispatchPending, false);
|
|
161
|
+
};
|
|
162
|
+
_freshListeners = new WeakMap();
|
|
163
|
+
var _value;
|
|
164
|
+
var TwistyPropSource = class extends TwistyPropParent {
|
|
165
|
+
constructor(initialValue) {
|
|
166
|
+
super();
|
|
167
|
+
__privateAdd(this, _value, void 0);
|
|
168
|
+
__privateSet(this, _value, from(() => this.getDefaultValue()));
|
|
169
|
+
if (initialValue) {
|
|
170
|
+
__privateSet(this, _value, this.deriveFromPromiseOrValue(initialValue, __privateGet(this, _value)));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
set(input) {
|
|
174
|
+
__privateSet(this, _value, this.deriveFromPromiseOrValue(input, __privateGet(this, _value)));
|
|
175
|
+
const sourceEventDetail = {
|
|
176
|
+
sourceProp: this,
|
|
177
|
+
value: __privateGet(this, _value),
|
|
178
|
+
generation: ++globalSourceGeneration
|
|
179
|
+
};
|
|
180
|
+
this.markStale(new CustomEvent("stale", {
|
|
181
|
+
detail: sourceEventDetail
|
|
182
|
+
}));
|
|
183
|
+
}
|
|
184
|
+
async get() {
|
|
185
|
+
return __privateGet(this, _value);
|
|
186
|
+
}
|
|
187
|
+
async deriveFromPromiseOrValue(input, oldValuePromise) {
|
|
188
|
+
return this.derive(await input, oldValuePromise);
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
_value = new WeakMap();
|
|
192
|
+
var SimpleTwistyPropSource = class extends TwistyPropSource {
|
|
193
|
+
derive(input) {
|
|
194
|
+
return input;
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
var NO_VALUE = Symbol("no value");
|
|
198
|
+
var _parents, _cachedLastSuccessfulCalculation, _cachedLatestGenerationCalculation, _getParents, getParents_fn, _cacheDerive, cacheDerive_fn;
|
|
199
|
+
var TwistyPropDerived = class extends TwistyPropParent {
|
|
200
|
+
constructor(parents, userVisibleErrorTracker) {
|
|
201
|
+
super();
|
|
202
|
+
this.userVisibleErrorTracker = userVisibleErrorTracker;
|
|
203
|
+
__privateAdd(this, _getParents);
|
|
204
|
+
__privateAdd(this, _cacheDerive);
|
|
205
|
+
__privateAdd(this, _parents, void 0);
|
|
206
|
+
__privateAdd(this, _cachedLastSuccessfulCalculation, null);
|
|
207
|
+
__privateAdd(this, _cachedLatestGenerationCalculation, null);
|
|
208
|
+
__privateSet(this, _parents, parents);
|
|
209
|
+
for (const parent of Object.values(parents)) {
|
|
210
|
+
parent.addChild(this);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
async get() {
|
|
214
|
+
const generation = this.lastSourceGeneration;
|
|
215
|
+
if (__privateGet(this, _cachedLatestGenerationCalculation)?.generation === generation) {
|
|
216
|
+
return __privateGet(this, _cachedLatestGenerationCalculation).output;
|
|
217
|
+
}
|
|
218
|
+
const latestGenerationCalculation = {
|
|
219
|
+
generation,
|
|
220
|
+
output: __privateMethod(this, _cacheDerive, cacheDerive_fn).call(this, __privateMethod(this, _getParents, getParents_fn).call(this), generation, __privateGet(this, _cachedLastSuccessfulCalculation))
|
|
221
|
+
};
|
|
222
|
+
__privateSet(this, _cachedLatestGenerationCalculation, latestGenerationCalculation);
|
|
223
|
+
this.userVisibleErrorTracker?.reset();
|
|
224
|
+
return latestGenerationCalculation.output;
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
_parents = new WeakMap();
|
|
228
|
+
_cachedLastSuccessfulCalculation = new WeakMap();
|
|
229
|
+
_cachedLatestGenerationCalculation = new WeakMap();
|
|
230
|
+
_getParents = new WeakSet();
|
|
231
|
+
getParents_fn = async function() {
|
|
232
|
+
const inputValuePromises = {};
|
|
233
|
+
for (const [key, parent] of Object.entries(__privateGet(this, _parents))) {
|
|
234
|
+
inputValuePromises[key] = parent.get();
|
|
235
|
+
}
|
|
236
|
+
const inputs = {};
|
|
237
|
+
for (const key in __privateGet(this, _parents)) {
|
|
238
|
+
inputs[key] = await inputValuePromises[key];
|
|
239
|
+
}
|
|
240
|
+
return inputs;
|
|
241
|
+
};
|
|
242
|
+
_cacheDerive = new WeakSet();
|
|
243
|
+
cacheDerive_fn = async function(inputsPromise, generation, cachedLatestGenerationCalculation = null) {
|
|
244
|
+
const inputs = await inputsPromise;
|
|
245
|
+
const cache = (output) => {
|
|
246
|
+
__privateSet(this, _cachedLastSuccessfulCalculation, {
|
|
247
|
+
inputs,
|
|
248
|
+
output: Promise.resolve(output),
|
|
249
|
+
generation
|
|
250
|
+
});
|
|
251
|
+
return output;
|
|
252
|
+
};
|
|
253
|
+
if (!cachedLatestGenerationCalculation) {
|
|
254
|
+
return cache(await this.derive(inputs));
|
|
255
|
+
}
|
|
256
|
+
const cachedInputs = cachedLatestGenerationCalculation.inputs;
|
|
257
|
+
for (const key in __privateGet(this, _parents)) {
|
|
258
|
+
const parent = __privateGet(this, _parents)[key];
|
|
259
|
+
if (!parent.canReuse(inputs[key], cachedInputs[key])) {
|
|
260
|
+
return cache(await this.derive(inputs));
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return cachedLatestGenerationCalculation.output;
|
|
264
|
+
};
|
|
265
|
+
var _disconnectionFunctions;
|
|
266
|
+
var FreshListenerManager = class {
|
|
267
|
+
constructor() {
|
|
268
|
+
__privateAdd(this, _disconnectionFunctions, []);
|
|
269
|
+
}
|
|
270
|
+
addListener(prop, listener) {
|
|
271
|
+
let disconnected = false;
|
|
272
|
+
const wrappedListener = (value) => {
|
|
273
|
+
if (disconnected) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
listener(value);
|
|
277
|
+
};
|
|
278
|
+
prop.addFreshListener(wrappedListener);
|
|
279
|
+
__privateGet(this, _disconnectionFunctions).push(() => {
|
|
280
|
+
prop.removeFreshListener(wrappedListener);
|
|
281
|
+
disconnected = true;
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
addMultiListener3(props, listener) {
|
|
285
|
+
this.addMultiListener(props, listener);
|
|
286
|
+
}
|
|
287
|
+
addMultiListener(props, listener) {
|
|
288
|
+
let disconnected = false;
|
|
289
|
+
let initialIgnoresLeft = props.length - 1;
|
|
290
|
+
const wrappedListener = async (_) => {
|
|
291
|
+
if (initialIgnoresLeft > 0) {
|
|
292
|
+
initialIgnoresLeft--;
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (disconnected) {
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
const promises = props.map((prop) => prop.get());
|
|
299
|
+
const values = await Promise.all(promises);
|
|
300
|
+
listener(values);
|
|
301
|
+
};
|
|
302
|
+
for (const prop of props) {
|
|
303
|
+
prop.addFreshListener(wrappedListener);
|
|
304
|
+
}
|
|
305
|
+
__privateGet(this, _disconnectionFunctions).push(() => {
|
|
306
|
+
for (const prop of props) {
|
|
307
|
+
prop.removeFreshListener(wrappedListener);
|
|
308
|
+
}
|
|
309
|
+
disconnected = true;
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
disconnect() {
|
|
313
|
+
for (const disconnectionFunction of __privateGet(this, _disconnectionFunctions)) {
|
|
314
|
+
disconnectionFunction();
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
_disconnectionFunctions = new WeakMap();
|
|
319
|
+
|
|
320
|
+
// src/cubing/twisty/controllers/RenderScheduler.ts
|
|
321
|
+
var RenderScheduler = class {
|
|
322
|
+
constructor(callback) {
|
|
323
|
+
this.callback = callback;
|
|
324
|
+
this.animFrameID = null;
|
|
325
|
+
this.animFrame = this.animFrameWrapper.bind(this);
|
|
326
|
+
}
|
|
327
|
+
requestIsPending() {
|
|
328
|
+
return !!this.animFrameID;
|
|
329
|
+
}
|
|
330
|
+
requestAnimFrame() {
|
|
331
|
+
if (!this.animFrameID) {
|
|
332
|
+
this.animFrameID = requestAnimationFrame(this.animFrame);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
cancelAnimFrame() {
|
|
336
|
+
if (this.animFrameID) {
|
|
337
|
+
cancelAnimationFrame(this.animFrameID);
|
|
338
|
+
this.animFrameID = 0;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
animFrameWrapper(timestamp) {
|
|
342
|
+
this.animFrameID = 0;
|
|
343
|
+
this.callback(timestamp);
|
|
344
|
+
}
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
// src/cubing/twisty/model/props/puzzle/display/HintFaceletProp.ts
|
|
348
|
+
var hintFaceletStyles = {
|
|
349
|
+
floating: true,
|
|
350
|
+
none: true
|
|
351
|
+
};
|
|
352
|
+
var HintFaceletProp = class extends SimpleTwistyPropSource {
|
|
353
|
+
getDefaultValue() {
|
|
354
|
+
return "auto";
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
|
|
358
|
+
// src/cubing/twisty/views/3D/TAU.ts
|
|
359
|
+
var TAU = Math.PI * 2;
|
|
360
|
+
var DEGREES_PER_RADIAN = 360 / TAU;
|
|
361
|
+
|
|
362
|
+
// src/cubing/twisty/views/node-custom-element-shims.ts
|
|
363
|
+
var HTMLElementStub = class {
|
|
364
|
+
};
|
|
365
|
+
var HTMLElementShim;
|
|
366
|
+
if (globalThis.HTMLElement) {
|
|
367
|
+
HTMLElementShim = HTMLElement;
|
|
368
|
+
} else {
|
|
369
|
+
HTMLElementShim = HTMLElementStub;
|
|
370
|
+
}
|
|
371
|
+
var CustomElementsStub = class {
|
|
372
|
+
define() {
|
|
373
|
+
}
|
|
374
|
+
};
|
|
375
|
+
var customElementsShim;
|
|
376
|
+
if (globalThis.customElements) {
|
|
377
|
+
customElementsShim = customElements;
|
|
378
|
+
} else {
|
|
379
|
+
customElementsShim = new CustomElementsStub();
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// src/cubing/twisty/views/ManagedCustomElement.ts
|
|
383
|
+
var CSSSource = class {
|
|
384
|
+
constructor(sourceText) {
|
|
385
|
+
this.sourceText = sourceText;
|
|
386
|
+
}
|
|
387
|
+
getAsString() {
|
|
388
|
+
return this.sourceText;
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
var _cssSourceMap;
|
|
392
|
+
var ManagedCustomElement = class extends HTMLElementShim {
|
|
393
|
+
constructor(options) {
|
|
394
|
+
super();
|
|
395
|
+
__privateAdd(this, _cssSourceMap, /* @__PURE__ */ new Map());
|
|
396
|
+
this.shadow = this.attachShadow({ mode: options?.mode ?? "closed" });
|
|
397
|
+
this.contentWrapper = document.createElement("div");
|
|
398
|
+
this.contentWrapper.classList.add("wrapper");
|
|
399
|
+
this.shadow.appendChild(this.contentWrapper);
|
|
400
|
+
}
|
|
401
|
+
addCSS(cssSource) {
|
|
402
|
+
const existing = __privateGet(this, _cssSourceMap).get(cssSource);
|
|
403
|
+
if (existing) {
|
|
404
|
+
return existing;
|
|
405
|
+
}
|
|
406
|
+
const cssElem = document.createElement("style");
|
|
407
|
+
cssElem.textContent = cssSource.getAsString();
|
|
408
|
+
__privateGet(this, _cssSourceMap).set(cssSource, cssElem);
|
|
409
|
+
this.shadow.appendChild(cssElem);
|
|
410
|
+
return cssElem;
|
|
411
|
+
}
|
|
412
|
+
removeCSS(cssSource) {
|
|
413
|
+
const cssElem = __privateGet(this, _cssSourceMap).get(cssSource);
|
|
414
|
+
if (!cssElem) {
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
this.shadow.removeChild(cssElem);
|
|
418
|
+
__privateGet(this, _cssSourceMap).delete(cssSource);
|
|
419
|
+
}
|
|
420
|
+
addElement(element) {
|
|
421
|
+
return this.contentWrapper.appendChild(element);
|
|
422
|
+
}
|
|
423
|
+
prependElement(element) {
|
|
424
|
+
this.contentWrapper.prepend(element);
|
|
425
|
+
}
|
|
426
|
+
removeElement(element) {
|
|
427
|
+
return this.contentWrapper.removeChild(element);
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
_cssSourceMap = new WeakMap();
|
|
431
|
+
customElementsShim.define("twisty-managed-custom-element", ManagedCustomElement);
|
|
432
|
+
|
|
433
|
+
// src/cubing/vendor/three/examples/jsm/libs/stats.modified.module.ts
|
|
434
|
+
var performance = globalThis.performance;
|
|
435
|
+
var Stats = class {
|
|
436
|
+
constructor() {
|
|
437
|
+
this.mode = 0;
|
|
438
|
+
this.dom = document.createElement("div");
|
|
439
|
+
this.beginTime = (performance || Date).now();
|
|
440
|
+
this.prevTime = this.beginTime;
|
|
441
|
+
this.frames = 0;
|
|
442
|
+
this.fpsPanel = this.addPanel(new StatsPanel("FPS", "#0ff", "#002"));
|
|
443
|
+
this.msPanel = this.addPanel(new StatsPanel("MS", "#0f0", "#020"));
|
|
444
|
+
this.memPanel = performance?.memory ? this.addPanel(new StatsPanel("MB", "#f08", "#201")) : null;
|
|
445
|
+
this.REVISION = 16;
|
|
446
|
+
this.dom.style.cssText = "position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000";
|
|
447
|
+
this.dom.addEventListener("click", (event) => {
|
|
448
|
+
event.preventDefault();
|
|
449
|
+
this.showPanel(++this.mode % this.dom.children.length);
|
|
450
|
+
}, false);
|
|
451
|
+
this.showPanel(0);
|
|
452
|
+
}
|
|
453
|
+
addPanel(panel) {
|
|
454
|
+
this.dom.appendChild(panel.dom);
|
|
455
|
+
return panel;
|
|
456
|
+
}
|
|
457
|
+
showPanel(id) {
|
|
458
|
+
for (let i = 0; i < this.dom.children.length; i++) {
|
|
459
|
+
this.dom.children[i].style.display = i === id ? "block" : "none";
|
|
460
|
+
}
|
|
461
|
+
this.mode = id;
|
|
462
|
+
}
|
|
463
|
+
begin() {
|
|
464
|
+
this.beginTime = (performance || Date).now();
|
|
465
|
+
}
|
|
466
|
+
end() {
|
|
467
|
+
this.frames++;
|
|
468
|
+
const time = (performance || Date).now();
|
|
469
|
+
this.msPanel.update(time - this.beginTime, 200);
|
|
470
|
+
if (time >= this.prevTime + 1e3) {
|
|
471
|
+
this.fpsPanel.update(this.frames * 1e3 / (time - this.prevTime), 100);
|
|
472
|
+
this.prevTime = time;
|
|
473
|
+
this.frames = 0;
|
|
474
|
+
if (this.memPanel) {
|
|
475
|
+
const memory = performance.memory;
|
|
476
|
+
this.memPanel.update(memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
return time;
|
|
480
|
+
}
|
|
481
|
+
update() {
|
|
482
|
+
this.beginTime = this.end();
|
|
483
|
+
}
|
|
484
|
+
};
|
|
485
|
+
var PR = Math.round(globalThis?.window?.devicePixelRatio ?? 1);
|
|
486
|
+
var WIDTH = 80 * PR;
|
|
487
|
+
var HEIGHT = 48 * PR;
|
|
488
|
+
var TEXT_X = 3 * PR;
|
|
489
|
+
var TEXT_Y = 2 * PR;
|
|
490
|
+
var GRAPH_X = 3 * PR;
|
|
491
|
+
var GRAPH_Y = 15 * PR;
|
|
492
|
+
var GRAPH_WIDTH = 74 * PR;
|
|
493
|
+
var GRAPH_HEIGHT = 30 * PR;
|
|
494
|
+
var StatsPanel = class {
|
|
495
|
+
constructor(name, fg, bg) {
|
|
496
|
+
this.name = name;
|
|
497
|
+
this.fg = fg;
|
|
498
|
+
this.bg = bg;
|
|
499
|
+
this.min = Infinity;
|
|
500
|
+
this.max = 0;
|
|
501
|
+
this.dom = document.createElement("canvas");
|
|
502
|
+
this.context = this.dom.getContext("2d");
|
|
503
|
+
this.dom.width = WIDTH;
|
|
504
|
+
this.dom.height = HEIGHT;
|
|
505
|
+
this.dom.style.cssText = "width:80px;height:48px";
|
|
506
|
+
this.context.font = `bold ${9 * PR}px Helvetica,Arial,sans-serif`;
|
|
507
|
+
this.context.textBaseline = "top";
|
|
508
|
+
this.context.fillStyle = bg;
|
|
509
|
+
this.context.fillRect(0, 0, WIDTH, HEIGHT);
|
|
510
|
+
this.context.fillStyle = fg;
|
|
511
|
+
this.context.fillText(name, TEXT_X, TEXT_Y);
|
|
512
|
+
this.context.fillRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT);
|
|
513
|
+
this.context.fillStyle = bg;
|
|
514
|
+
this.context.globalAlpha = 0.9;
|
|
515
|
+
this.context.fillRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT);
|
|
516
|
+
}
|
|
517
|
+
update(value, maxValue) {
|
|
518
|
+
this.min = Math.min(this.min, value);
|
|
519
|
+
this.max = Math.max(this.max, value);
|
|
520
|
+
this.context.fillStyle = this.bg;
|
|
521
|
+
this.context.globalAlpha = 1;
|
|
522
|
+
this.context.fillRect(0, 0, WIDTH, GRAPH_Y);
|
|
523
|
+
this.context.fillStyle = this.fg;
|
|
524
|
+
this.context.fillText(Math.round(value) + " " + this.name + " (" + Math.round(this.min) + "-" + Math.round(this.max) + ")", TEXT_X, TEXT_Y);
|
|
525
|
+
this.context.drawImage(this.dom, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT);
|
|
526
|
+
this.context.fillRect(GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT);
|
|
527
|
+
this.context.fillStyle = this.bg;
|
|
528
|
+
this.context.globalAlpha = 0.9;
|
|
529
|
+
this.context.fillRect(GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, Math.round((1 - value / maxValue) * GRAPH_HEIGHT));
|
|
530
|
+
}
|
|
531
|
+
};
|
|
532
|
+
|
|
533
|
+
// src/cubing/twisty/heavy-code-imports/3d.ts
|
|
534
|
+
var cachedConstructorProxy = null;
|
|
535
|
+
async function proxy3D() {
|
|
536
|
+
return cachedConstructorProxy ?? (cachedConstructorProxy = import("./twisty-dynamic-3d-QOX7IEXC.js"));
|
|
537
|
+
}
|
|
538
|
+
var THREEJS = from(async () => (await proxy3D()).T3I);
|
|
539
|
+
|
|
540
|
+
// src/cubing/twisty/views/canvas.ts
|
|
541
|
+
var globalPixelRatioOverride = null;
|
|
542
|
+
function pixelRatio() {
|
|
543
|
+
return globalPixelRatioOverride ?? (devicePixelRatio || 1);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
// src/cubing/twisty/views/3D/Twisty3DVantage.css.ts
|
|
547
|
+
var twisty3DVantageCSS = new CSSSource(`
|
|
548
|
+
:host {
|
|
549
|
+
width: 384px;
|
|
550
|
+
height: 256px;
|
|
551
|
+
display: grid;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
.wrapper {
|
|
555
|
+
width: 100%;
|
|
556
|
+
height: 100%;
|
|
557
|
+
display: grid;
|
|
558
|
+
overflow: hidden;
|
|
559
|
+
place-content: center;
|
|
560
|
+
contain: strict;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
.loading {
|
|
564
|
+
width: 4em;
|
|
565
|
+
height: 4em;
|
|
566
|
+
border-radius: 2.5em;
|
|
567
|
+
border: 0.5em solid rgba(0, 0, 0, 0);
|
|
568
|
+
border-top: 0.5em solid rgba(0, 0, 0, 0.7);
|
|
569
|
+
border-right: 0.5em solid rgba(0, 0, 0, 0.7);
|
|
570
|
+
animation: fade-in-delayed 4s, rotate 1s linear infinite;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
@keyframes fade-in-delayed {
|
|
574
|
+
0% { opacity: 0; }
|
|
575
|
+
25% {opacity: 0; }
|
|
576
|
+
100% { opacity: 1; }
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
@keyframes rotate {
|
|
580
|
+
from { transform: rotate(0deg); }
|
|
581
|
+
to { transform: rotate(360deg); }
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/* TODO: This is due to stats hack. Replace with \`canvas\`. */
|
|
585
|
+
.wrapper > canvas {
|
|
586
|
+
max-width: 100%;
|
|
587
|
+
max-height: 100%;
|
|
588
|
+
animation: fade-in 0.25s ease-in;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
@keyframes fade-in {
|
|
592
|
+
from { opacity: 0; }
|
|
593
|
+
to { opacity: 1; }
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
.wrapper.invisible {
|
|
597
|
+
opacity: 0;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
.wrapper.drag-input-enabled > canvas {
|
|
601
|
+
cursor: grab;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
.wrapper.drag-input-enabled > canvas:active {
|
|
605
|
+
cursor: grabbing;
|
|
606
|
+
}
|
|
607
|
+
`);
|
|
608
|
+
|
|
609
|
+
// src/cubing/twisty/views/3D/DragTracker.ts
|
|
610
|
+
var MOVEMENT_EPSILON = 0.1;
|
|
611
|
+
var _dragInfoMap, _targetListeners, _lazyListenersRegistered, _registerLazyListeners, registerLazyListeners_fn, _clear, clear_fn, _trackDrag, trackDrag_fn;
|
|
612
|
+
var DragTracker = class extends EventTarget {
|
|
613
|
+
constructor(target) {
|
|
614
|
+
super();
|
|
615
|
+
this.target = target;
|
|
616
|
+
__privateAdd(this, _registerLazyListeners);
|
|
617
|
+
__privateAdd(this, _clear);
|
|
618
|
+
__privateAdd(this, _trackDrag);
|
|
619
|
+
__privateAdd(this, _dragInfoMap, /* @__PURE__ */ new Map());
|
|
620
|
+
__privateAdd(this, _targetListeners, /* @__PURE__ */ new Map());
|
|
621
|
+
__privateAdd(this, _lazyListenersRegistered, false);
|
|
622
|
+
}
|
|
623
|
+
start() {
|
|
624
|
+
this.addTargetListener("pointerdown", this.onPointerDown.bind(this));
|
|
625
|
+
this.addTargetListener("contextmenu", (e) => {
|
|
626
|
+
e.preventDefault();
|
|
627
|
+
});
|
|
628
|
+
this.addTargetListener("touchmove", (e) => e.preventDefault());
|
|
629
|
+
this.addTargetListener("dblclick", (e) => e.preventDefault());
|
|
630
|
+
}
|
|
631
|
+
stop() {
|
|
632
|
+
for (const [eventType, listener] of __privateGet(this, _targetListeners).entries()) {
|
|
633
|
+
this.target.removeEventListener(eventType, listener);
|
|
634
|
+
}
|
|
635
|
+
__privateGet(this, _targetListeners).clear();
|
|
636
|
+
__privateSet(this, _lazyListenersRegistered, false);
|
|
637
|
+
}
|
|
638
|
+
addTargetListener(eventType, listener) {
|
|
639
|
+
if (!__privateGet(this, _targetListeners).has(eventType)) {
|
|
640
|
+
this.target.addEventListener(eventType, listener);
|
|
641
|
+
__privateGet(this, _targetListeners).set(eventType, listener);
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
onPointerDown(e) {
|
|
645
|
+
__privateMethod(this, _registerLazyListeners, registerLazyListeners_fn).call(this);
|
|
646
|
+
const newDragInfo = {
|
|
647
|
+
attachedInfo: {},
|
|
648
|
+
hasMoved: false,
|
|
649
|
+
lastClientX: e.clientX,
|
|
650
|
+
lastClientY: e.clientY,
|
|
651
|
+
lastTimeStamp: e.timeStamp
|
|
652
|
+
};
|
|
653
|
+
__privateGet(this, _dragInfoMap).set(e.pointerId, newDragInfo);
|
|
654
|
+
this.target.setPointerCapture(e.pointerId);
|
|
655
|
+
}
|
|
656
|
+
onPointerMove(e) {
|
|
657
|
+
const movementInfo = __privateMethod(this, _trackDrag, trackDrag_fn).call(this, e).movementInfo;
|
|
658
|
+
if (movementInfo) {
|
|
659
|
+
e.preventDefault();
|
|
660
|
+
this.dispatchEvent(new CustomEvent("move", {
|
|
661
|
+
detail: movementInfo
|
|
662
|
+
}));
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
onPointerUp(e) {
|
|
666
|
+
const trackDragResult = __privateMethod(this, _trackDrag, trackDrag_fn).call(this, e);
|
|
667
|
+
const existing = __privateGet(this, _dragInfoMap).get(e.pointerId);
|
|
668
|
+
__privateMethod(this, _clear, clear_fn).call(this, e);
|
|
669
|
+
this.target.releasePointerCapture(e.pointerId);
|
|
670
|
+
let event;
|
|
671
|
+
if (trackDragResult.hasMoved) {
|
|
672
|
+
event = new CustomEvent("up", {
|
|
673
|
+
detail: { attachedInfo: existing.attachedInfo }
|
|
674
|
+
});
|
|
675
|
+
} else {
|
|
676
|
+
const { altKey, ctrlKey, metaKey, shiftKey } = e;
|
|
677
|
+
event = new CustomEvent("press", {
|
|
678
|
+
detail: {
|
|
679
|
+
normalizedX: e.offsetX / this.target.offsetWidth * 2 - 1,
|
|
680
|
+
normalizedY: 1 - e.offsetY / this.target.offsetHeight * 2,
|
|
681
|
+
rightClick: !!(e.button & 2),
|
|
682
|
+
keys: {
|
|
683
|
+
altKey,
|
|
684
|
+
ctrlOrMetaKey: ctrlKey || metaKey,
|
|
685
|
+
shiftKey
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
});
|
|
689
|
+
}
|
|
690
|
+
this.dispatchEvent(event);
|
|
691
|
+
}
|
|
692
|
+
};
|
|
693
|
+
_dragInfoMap = new WeakMap();
|
|
694
|
+
_targetListeners = new WeakMap();
|
|
695
|
+
_lazyListenersRegistered = new WeakMap();
|
|
696
|
+
_registerLazyListeners = new WeakSet();
|
|
697
|
+
registerLazyListeners_fn = function() {
|
|
698
|
+
if (__privateGet(this, _lazyListenersRegistered)) {
|
|
699
|
+
return;
|
|
700
|
+
}
|
|
701
|
+
this.addTargetListener("pointermove", this.onPointerMove.bind(this));
|
|
702
|
+
this.addTargetListener("pointerup", this.onPointerUp.bind(this));
|
|
703
|
+
__privateSet(this, _lazyListenersRegistered, true);
|
|
704
|
+
};
|
|
705
|
+
_clear = new WeakSet();
|
|
706
|
+
clear_fn = function(e) {
|
|
707
|
+
__privateGet(this, _dragInfoMap).delete(e.pointerId);
|
|
708
|
+
};
|
|
709
|
+
_trackDrag = new WeakSet();
|
|
710
|
+
trackDrag_fn = function(e) {
|
|
711
|
+
const existing = __privateGet(this, _dragInfoMap).get(e.pointerId);
|
|
712
|
+
if (!existing) {
|
|
713
|
+
return { movementInfo: null, hasMoved: false };
|
|
714
|
+
}
|
|
715
|
+
let movementInfo;
|
|
716
|
+
if ((e.movementX ?? 0) !== 0 || (e.movementY ?? 0) !== 0) {
|
|
717
|
+
movementInfo = {
|
|
718
|
+
attachedInfo: existing.attachedInfo,
|
|
719
|
+
movementX: e.movementX,
|
|
720
|
+
movementY: e.movementY,
|
|
721
|
+
elapsedMs: e.timeStamp - existing.lastTimeStamp
|
|
722
|
+
};
|
|
723
|
+
} else {
|
|
724
|
+
movementInfo = {
|
|
725
|
+
attachedInfo: existing.attachedInfo,
|
|
726
|
+
movementX: e.clientX - existing.lastClientX,
|
|
727
|
+
movementY: e.clientY - existing.lastClientY,
|
|
728
|
+
elapsedMs: e.timeStamp - existing.lastTimeStamp
|
|
729
|
+
};
|
|
730
|
+
}
|
|
731
|
+
existing.lastClientX = e.clientX;
|
|
732
|
+
existing.lastClientY = e.clientY;
|
|
733
|
+
existing.lastTimeStamp = e.timeStamp;
|
|
734
|
+
if (Math.abs(movementInfo.movementX) < MOVEMENT_EPSILON && Math.abs(movementInfo.movementY) < MOVEMENT_EPSILON) {
|
|
735
|
+
return { movementInfo: null, hasMoved: existing.hasMoved };
|
|
736
|
+
} else {
|
|
737
|
+
existing.hasMoved = true;
|
|
738
|
+
return { movementInfo, hasMoved: existing.hasMoved };
|
|
739
|
+
}
|
|
740
|
+
};
|
|
741
|
+
|
|
742
|
+
// src/cubing/twisty/views/3D/RendererPool.ts
|
|
743
|
+
var renderers = [];
|
|
744
|
+
async function renderPooled(width, height, canvas, scene, camera) {
|
|
745
|
+
if (width === 0 || height === 0) {
|
|
746
|
+
return;
|
|
747
|
+
}
|
|
748
|
+
if (renderers.length === 0) {
|
|
749
|
+
renderers.push(newRenderer());
|
|
750
|
+
}
|
|
751
|
+
const renderer = await renderers[0];
|
|
752
|
+
renderer.setSize(width, height);
|
|
753
|
+
renderer.render(scene, camera);
|
|
754
|
+
const context = canvas.getContext("2d");
|
|
755
|
+
context.clearRect(0, 0, canvas.width, canvas.height);
|
|
756
|
+
context.drawImage(renderer.domElement, 0, 0);
|
|
757
|
+
}
|
|
758
|
+
async function newRenderer() {
|
|
759
|
+
const rendererConstructor = (await THREEJS).WebGLRenderer;
|
|
760
|
+
const renderer = new rendererConstructor({
|
|
761
|
+
antialias: true,
|
|
762
|
+
alpha: true
|
|
763
|
+
});
|
|
764
|
+
renderer.setPixelRatio(pixelRatio());
|
|
765
|
+
return renderer;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
// src/cubing/twisty/views/3D/TwistyOrbitControls.ts
|
|
769
|
+
var INERTIA_DEFAULT = true;
|
|
770
|
+
var INERTIA_DURATION_MS = 500;
|
|
771
|
+
var INERTIA_TIMEOUT_MS = 50;
|
|
772
|
+
var VERTICAL_MOVEMENT_BASE_SCALE = 0.75;
|
|
773
|
+
function momentumScale(progress) {
|
|
774
|
+
return (Math.exp(1 - progress) - (1 - progress)) / (1 - Math.E) + 1;
|
|
775
|
+
}
|
|
776
|
+
var Inertia = class {
|
|
777
|
+
constructor(startTimestamp, momentumX, momentumY, callback) {
|
|
778
|
+
this.startTimestamp = startTimestamp;
|
|
779
|
+
this.momentumX = momentumX;
|
|
780
|
+
this.momentumY = momentumY;
|
|
781
|
+
this.callback = callback;
|
|
782
|
+
this.scheduler = new RenderScheduler(this.render.bind(this));
|
|
783
|
+
this.scheduler.requestAnimFrame();
|
|
784
|
+
this.lastTimestamp = startTimestamp;
|
|
785
|
+
}
|
|
786
|
+
render(now) {
|
|
787
|
+
const progressBefore = (this.lastTimestamp - this.startTimestamp) / INERTIA_DURATION_MS;
|
|
788
|
+
const progressAfter = Math.min(1, (now - this.startTimestamp) / INERTIA_DURATION_MS);
|
|
789
|
+
if (progressBefore === 0 && progressAfter > INERTIA_TIMEOUT_MS / INERTIA_DURATION_MS) {
|
|
790
|
+
return;
|
|
791
|
+
}
|
|
792
|
+
const delta = momentumScale(progressAfter) - momentumScale(progressBefore);
|
|
793
|
+
this.callback(this.momentumX * delta * 1e3, this.momentumY * delta * 1e3);
|
|
794
|
+
if (progressAfter < 1) {
|
|
795
|
+
this.scheduler.requestAnimFrame();
|
|
796
|
+
}
|
|
797
|
+
this.lastTimestamp = now;
|
|
798
|
+
}
|
|
799
|
+
};
|
|
800
|
+
var TwistyOrbitControls = class {
|
|
801
|
+
constructor(model, mirror, canvas, dragTracker) {
|
|
802
|
+
this.model = model;
|
|
803
|
+
this.mirror = mirror;
|
|
804
|
+
this.canvas = canvas;
|
|
805
|
+
this.dragTracker = dragTracker;
|
|
806
|
+
this.experimentalInertia = INERTIA_DEFAULT;
|
|
807
|
+
this.onMovementBound = this.onMovement.bind(this);
|
|
808
|
+
this.experimentalHasBeenMoved = false;
|
|
809
|
+
this.dragTracker.addEventListener("move", this.onMove.bind(this));
|
|
810
|
+
this.dragTracker.addEventListener("up", this.onUp.bind(this));
|
|
811
|
+
}
|
|
812
|
+
temperMovement(f) {
|
|
813
|
+
return Math.sign(f) * Math.log(Math.abs(f * 10) + 1) / 6;
|
|
814
|
+
}
|
|
815
|
+
onMove(e) {
|
|
816
|
+
var _a;
|
|
817
|
+
(_a = e.detail).attachedInfo ?? (_a.attachedInfo = {});
|
|
818
|
+
const { temperedX, temperedY } = this.onMovement(e.detail.movementX, e.detail.movementY);
|
|
819
|
+
const attachedInfo = e.detail.attachedInfo;
|
|
820
|
+
attachedInfo.lastTemperedX = temperedX * 10;
|
|
821
|
+
attachedInfo.lastTemperedY = temperedY * 10;
|
|
822
|
+
attachedInfo.timestamp = e.timeStamp;
|
|
823
|
+
}
|
|
824
|
+
onMovement(movementX, movementY) {
|
|
825
|
+
const scale = this.mirror ? -1 : 1;
|
|
826
|
+
const minDim = Math.min(this.canvas.offsetWidth, this.canvas.offsetHeight);
|
|
827
|
+
const temperedX = this.temperMovement(movementX / minDim);
|
|
828
|
+
const temperedY = this.temperMovement(movementY / minDim * VERTICAL_MOVEMENT_BASE_SCALE);
|
|
829
|
+
this.model.twistySceneModel.orbitCoordinatesRequest.set((async () => {
|
|
830
|
+
const prevCoords = await this.model.twistySceneModel.orbitCoordinates.get();
|
|
831
|
+
const newCoords = {
|
|
832
|
+
latitude: prevCoords.latitude + 2 * temperedY * DEGREES_PER_RADIAN * scale,
|
|
833
|
+
longitude: prevCoords.longitude - 2 * temperedX * DEGREES_PER_RADIAN
|
|
834
|
+
};
|
|
835
|
+
return newCoords;
|
|
836
|
+
})());
|
|
837
|
+
return { temperedX, temperedY };
|
|
838
|
+
}
|
|
839
|
+
onUp(e) {
|
|
840
|
+
e.preventDefault();
|
|
841
|
+
if ("lastTemperedX" in e.detail.attachedInfo && "lastTemperedY" in e.detail.attachedInfo && "timestamp" in e.detail.attachedInfo && e.timeStamp - e.detail.attachedInfo.timestamp < 60) {
|
|
842
|
+
new Inertia(e.timeStamp, e.detail.attachedInfo.lastTemperedX, e.detail.attachedInfo.lastTemperedY, this.onMovementBound);
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
};
|
|
846
|
+
|
|
847
|
+
// src/cubing/twisty/views/3D/Twisty3DVantage.ts
|
|
848
|
+
async function setCameraFromOrbitCoordinates(camera, orbitCoordinates, backView = false) {
|
|
849
|
+
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);
|
|
850
|
+
spherical.makeSafe();
|
|
851
|
+
camera.position.setFromSpherical(spherical);
|
|
852
|
+
camera.lookAt(0, 0, 0);
|
|
853
|
+
}
|
|
854
|
+
var dedicatedRenderersSoFar = 0;
|
|
855
|
+
var DEFAULT_MAX_DEDICATED_RENDERERS = 2;
|
|
856
|
+
var sharingRenderers = false;
|
|
857
|
+
function shareRenderer() {
|
|
858
|
+
if (twistyDebugGlobals.shareAllNewRenderers !== "auto") {
|
|
859
|
+
if (!twistyDebugGlobals.shareAllNewRenderers) {
|
|
860
|
+
dedicatedRenderersSoFar++;
|
|
861
|
+
}
|
|
862
|
+
return twistyDebugGlobals.shareAllNewRenderers !== "never";
|
|
863
|
+
}
|
|
864
|
+
if (dedicatedRenderersSoFar < DEFAULT_MAX_DEDICATED_RENDERERS) {
|
|
865
|
+
dedicatedRenderersSoFar++;
|
|
866
|
+
return false;
|
|
867
|
+
} else {
|
|
868
|
+
sharingRenderers = true;
|
|
869
|
+
return true;
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
function haveStartedSharingRenderers() {
|
|
873
|
+
return sharingRenderers;
|
|
874
|
+
}
|
|
875
|
+
var _setupBasicPresses, setupBasicPresses_fn, _onResizeStaleDropper, _width, _height, _onResize, onResize_fn, _cachedRenderer, _cachedCanvas, _cachedDragTracker, _dragTracker, dragTracker_fn, _cachedCamera, _cachedOrbitControls, _disconnectionFunctions2, _experimentalNextRenderFinishedCallback, _scheduler;
|
|
876
|
+
var Twisty3DVantage = class extends ManagedCustomElement {
|
|
877
|
+
constructor(model, scene, options) {
|
|
878
|
+
super();
|
|
879
|
+
this.model = model;
|
|
880
|
+
this.options = options;
|
|
881
|
+
__privateAdd(this, _setupBasicPresses);
|
|
882
|
+
__privateAdd(this, _onResize);
|
|
883
|
+
__privateAdd(this, _dragTracker);
|
|
884
|
+
this.scene = null;
|
|
885
|
+
this.stats = null;
|
|
886
|
+
this.rendererIsShared = shareRenderer();
|
|
887
|
+
this.loadingElement = null;
|
|
888
|
+
__privateAdd(this, _onResizeStaleDropper, new StaleDropper());
|
|
889
|
+
__privateAdd(this, _width, 0);
|
|
890
|
+
__privateAdd(this, _height, 0);
|
|
891
|
+
__privateAdd(this, _cachedRenderer, null);
|
|
892
|
+
__privateAdd(this, _cachedCanvas, null);
|
|
893
|
+
__privateAdd(this, _cachedDragTracker, null);
|
|
894
|
+
__privateAdd(this, _cachedCamera, null);
|
|
895
|
+
__privateAdd(this, _cachedOrbitControls, null);
|
|
896
|
+
__privateAdd(this, _disconnectionFunctions2, []);
|
|
897
|
+
__privateAdd(this, _experimentalNextRenderFinishedCallback, null);
|
|
898
|
+
__privateAdd(this, _scheduler, new RenderScheduler(this.render.bind(this)));
|
|
899
|
+
this.scene = scene ?? null;
|
|
900
|
+
this.loadingElement = this.addElement(document.createElement("div"));
|
|
901
|
+
this.loadingElement.classList.add("loading");
|
|
902
|
+
if (twistyDebugGlobals.showRenderStats) {
|
|
903
|
+
this.stats = new Stats();
|
|
904
|
+
this.stats.dom.style.position = "absolute";
|
|
905
|
+
this.contentWrapper.appendChild(this.stats.dom);
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
async connectedCallback() {
|
|
909
|
+
this.addCSS(twisty3DVantageCSS);
|
|
910
|
+
this.addElement((await this.canvasInfo()).canvas);
|
|
911
|
+
__privateMethod(this, _onResize, onResize_fn).call(this);
|
|
912
|
+
const observer = new ResizeObserver(__privateMethod(this, _onResize, onResize_fn).bind(this));
|
|
913
|
+
observer.observe(this.contentWrapper);
|
|
914
|
+
this.orbitControls();
|
|
915
|
+
__privateMethod(this, _setupBasicPresses, setupBasicPresses_fn).call(this);
|
|
916
|
+
this.scheduleRender();
|
|
917
|
+
}
|
|
918
|
+
async clearCanvas() {
|
|
919
|
+
if (this.rendererIsShared) {
|
|
920
|
+
const canvasInfo = await this.canvasInfo();
|
|
921
|
+
canvasInfo.context.clearRect(0, 0, canvasInfo.canvas.width, canvasInfo.canvas.height);
|
|
922
|
+
} else {
|
|
923
|
+
const renderer = await this.renderer();
|
|
924
|
+
const context = renderer.getContext();
|
|
925
|
+
context.clear(context.COLOR_BUFFER_BIT);
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
async renderer() {
|
|
929
|
+
if (this.rendererIsShared) {
|
|
930
|
+
throw new Error("renderer expected to be shared.");
|
|
931
|
+
}
|
|
932
|
+
return __privateGet(this, _cachedRenderer) ?? __privateSet(this, _cachedRenderer, newRenderer());
|
|
933
|
+
}
|
|
934
|
+
async canvasInfo() {
|
|
935
|
+
return __privateGet(this, _cachedCanvas) ?? __privateSet(this, _cachedCanvas, (async () => {
|
|
936
|
+
let canvas;
|
|
937
|
+
if (this.rendererIsShared) {
|
|
938
|
+
canvas = this.addElement(document.createElement("canvas"));
|
|
939
|
+
} else {
|
|
940
|
+
const renderer = await this.renderer();
|
|
941
|
+
canvas = this.addElement(renderer.domElement);
|
|
942
|
+
}
|
|
943
|
+
this.loadingElement?.remove();
|
|
944
|
+
const context = canvas.getContext("2d");
|
|
945
|
+
return { canvas, context };
|
|
946
|
+
})());
|
|
947
|
+
}
|
|
948
|
+
async camera() {
|
|
949
|
+
return __privateGet(this, _cachedCamera) ?? __privateSet(this, _cachedCamera, (async () => {
|
|
950
|
+
const camera = new (await THREEJS).PerspectiveCamera(20, 1, 0.1, 20);
|
|
951
|
+
camera.position.copy(new (await THREEJS).Vector3(2, 4, 4).multiplyScalar(this.options?.backView ? -1 : 1));
|
|
952
|
+
camera.lookAt(0, 0, 0);
|
|
953
|
+
return camera;
|
|
954
|
+
})());
|
|
955
|
+
}
|
|
956
|
+
async orbitControls() {
|
|
957
|
+
return __privateGet(this, _cachedOrbitControls) ?? __privateSet(this, _cachedOrbitControls, (async () => {
|
|
958
|
+
const orbitControls = new TwistyOrbitControls(this.model, !!this.options?.backView, (await this.canvasInfo()).canvas, await __privateMethod(this, _dragTracker, dragTracker_fn).call(this));
|
|
959
|
+
if (this.model) {
|
|
960
|
+
this.addListener(this.model.twistySceneModel.orbitCoordinates, async (orbitCoordinates) => {
|
|
961
|
+
const camera = await this.camera();
|
|
962
|
+
setCameraFromOrbitCoordinates(camera, orbitCoordinates, this.options?.backView);
|
|
963
|
+
this.scheduleRender();
|
|
964
|
+
});
|
|
965
|
+
}
|
|
966
|
+
return orbitControls;
|
|
967
|
+
})());
|
|
968
|
+
}
|
|
969
|
+
addListener(prop, listener) {
|
|
970
|
+
prop.addFreshListener(listener);
|
|
971
|
+
__privateGet(this, _disconnectionFunctions2).push(() => {
|
|
972
|
+
prop.removeFreshListener(listener);
|
|
973
|
+
});
|
|
974
|
+
}
|
|
975
|
+
disconnect() {
|
|
976
|
+
for (const fn of __privateGet(this, _disconnectionFunctions2)) {
|
|
977
|
+
fn();
|
|
978
|
+
}
|
|
979
|
+
__privateSet(this, _disconnectionFunctions2, []);
|
|
980
|
+
}
|
|
981
|
+
experimentalNextRenderFinishedCallback(callback) {
|
|
982
|
+
__privateSet(this, _experimentalNextRenderFinishedCallback, callback);
|
|
983
|
+
}
|
|
984
|
+
async render() {
|
|
985
|
+
var _a;
|
|
986
|
+
if (!this.scene) {
|
|
987
|
+
throw new Error("Attempted to render without a scene");
|
|
988
|
+
}
|
|
989
|
+
this.stats?.begin();
|
|
990
|
+
const [scene, camera, canvas] = await Promise.all([
|
|
991
|
+
this.scene.scene(),
|
|
992
|
+
this.camera(),
|
|
993
|
+
this.canvasInfo()
|
|
994
|
+
]);
|
|
995
|
+
if (this.rendererIsShared) {
|
|
996
|
+
renderPooled(__privateGet(this, _width), __privateGet(this, _height), canvas.canvas, scene, camera);
|
|
997
|
+
} else {
|
|
998
|
+
(await this.renderer()).render(scene, camera);
|
|
999
|
+
}
|
|
1000
|
+
this.stats?.end();
|
|
1001
|
+
(_a = __privateGet(this, _experimentalNextRenderFinishedCallback)) == null ? void 0 : _a.call(this);
|
|
1002
|
+
__privateSet(this, _experimentalNextRenderFinishedCallback, null);
|
|
1003
|
+
}
|
|
1004
|
+
scheduleRender() {
|
|
1005
|
+
__privateGet(this, _scheduler).requestAnimFrame();
|
|
1006
|
+
}
|
|
1007
|
+
};
|
|
1008
|
+
_setupBasicPresses = new WeakSet();
|
|
1009
|
+
setupBasicPresses_fn = async function() {
|
|
1010
|
+
const dragTracker = await __privateMethod(this, _dragTracker, dragTracker_fn).call(this);
|
|
1011
|
+
dragTracker.addEventListener("press", async (e) => {
|
|
1012
|
+
const movePressInput = await this.model.twistySceneModel.movePressInput.get();
|
|
1013
|
+
if (movePressInput !== "basic") {
|
|
1014
|
+
return;
|
|
1015
|
+
}
|
|
1016
|
+
this.dispatchEvent(new CustomEvent("press", {
|
|
1017
|
+
detail: {
|
|
1018
|
+
pressInfo: e.detail,
|
|
1019
|
+
cameraPromise: this.camera()
|
|
1020
|
+
}
|
|
1021
|
+
}));
|
|
1022
|
+
});
|
|
1023
|
+
};
|
|
1024
|
+
_onResizeStaleDropper = new WeakMap();
|
|
1025
|
+
_width = new WeakMap();
|
|
1026
|
+
_height = new WeakMap();
|
|
1027
|
+
_onResize = new WeakSet();
|
|
1028
|
+
onResize_fn = async function() {
|
|
1029
|
+
const camera = await __privateGet(this, _onResizeStaleDropper).queue(this.camera());
|
|
1030
|
+
const w = this.contentWrapper.clientWidth;
|
|
1031
|
+
const h = this.contentWrapper.clientHeight;
|
|
1032
|
+
__privateSet(this, _width, w);
|
|
1033
|
+
__privateSet(this, _height, h);
|
|
1034
|
+
const off = 0;
|
|
1035
|
+
let yoff = 0;
|
|
1036
|
+
let excess = 0;
|
|
1037
|
+
if (h > w) {
|
|
1038
|
+
excess = h - w;
|
|
1039
|
+
yoff = -Math.floor(0.5 * excess);
|
|
1040
|
+
}
|
|
1041
|
+
camera.aspect = w / h;
|
|
1042
|
+
camera.setViewOffset(w, h - excess, off, yoff, w, h);
|
|
1043
|
+
camera.updateProjectionMatrix();
|
|
1044
|
+
this.clearCanvas();
|
|
1045
|
+
if (this.rendererIsShared) {
|
|
1046
|
+
const canvasInfo = await this.canvasInfo();
|
|
1047
|
+
canvasInfo.canvas.width = w * pixelRatio();
|
|
1048
|
+
canvasInfo.canvas.height = h * pixelRatio();
|
|
1049
|
+
canvasInfo.canvas.style.width = w.toString();
|
|
1050
|
+
canvasInfo.canvas.style.height = h.toString();
|
|
1051
|
+
} else {
|
|
1052
|
+
const renderer = await this.renderer();
|
|
1053
|
+
renderer.setSize(w, h, true);
|
|
1054
|
+
}
|
|
1055
|
+
this.scheduleRender();
|
|
1056
|
+
};
|
|
1057
|
+
_cachedRenderer = new WeakMap();
|
|
1058
|
+
_cachedCanvas = new WeakMap();
|
|
1059
|
+
_cachedDragTracker = new WeakMap();
|
|
1060
|
+
_dragTracker = new WeakSet();
|
|
1061
|
+
dragTracker_fn = async function() {
|
|
1062
|
+
return __privateGet(this, _cachedDragTracker) ?? __privateSet(this, _cachedDragTracker, (async () => {
|
|
1063
|
+
const dragTracker = new DragTracker((await this.canvasInfo()).canvas);
|
|
1064
|
+
this.model?.twistySceneModel.dragInput.addFreshListener((dragInputMode) => {
|
|
1065
|
+
let dragInputEnabled = false;
|
|
1066
|
+
switch (dragInputMode) {
|
|
1067
|
+
case "auto":
|
|
1068
|
+
dragTracker.start();
|
|
1069
|
+
dragInputEnabled = true;
|
|
1070
|
+
break;
|
|
1071
|
+
case "none":
|
|
1072
|
+
dragTracker.stop();
|
|
1073
|
+
break;
|
|
1074
|
+
}
|
|
1075
|
+
this.contentWrapper.classList.toggle("drag-input-enabled", dragInputEnabled);
|
|
1076
|
+
});
|
|
1077
|
+
return dragTracker;
|
|
1078
|
+
})());
|
|
1079
|
+
};
|
|
1080
|
+
_cachedCamera = new WeakMap();
|
|
1081
|
+
_cachedOrbitControls = new WeakMap();
|
|
1082
|
+
_disconnectionFunctions2 = new WeakMap();
|
|
1083
|
+
_experimentalNextRenderFinishedCallback = new WeakMap();
|
|
1084
|
+
_scheduler = new WeakMap();
|
|
1085
|
+
customElementsShim.define("twisty-3d-vantage", Twisty3DVantage);
|
|
1086
|
+
|
|
1087
|
+
export {
|
|
1088
|
+
twistyDebugGlobals,
|
|
1089
|
+
setTwistyDebug,
|
|
1090
|
+
RenderScheduler,
|
|
1091
|
+
StaleDropper,
|
|
1092
|
+
TwistyPropSource,
|
|
1093
|
+
SimpleTwistyPropSource,
|
|
1094
|
+
NO_VALUE,
|
|
1095
|
+
TwistyPropDerived,
|
|
1096
|
+
FreshListenerManager,
|
|
1097
|
+
hintFaceletStyles,
|
|
1098
|
+
HintFaceletProp,
|
|
1099
|
+
TAU,
|
|
1100
|
+
DEGREES_PER_RADIAN,
|
|
1101
|
+
HTMLElementShim,
|
|
1102
|
+
customElementsShim,
|
|
1103
|
+
CSSSource,
|
|
1104
|
+
ManagedCustomElement,
|
|
1105
|
+
setCameraFromOrbitCoordinates,
|
|
1106
|
+
haveStartedSharingRenderers,
|
|
1107
|
+
Twisty3DVantage,
|
|
1108
|
+
proxy3D,
|
|
1109
|
+
THREEJS
|
|
1110
|
+
};
|
|
1111
|
+
//# sourceMappingURL=chunk-LSVR2HCG.js.map
|