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.
Files changed (64) hide show
  1. package/README.md +1 -1
  2. package/dist/esm/alg/index.js +3 -3
  3. package/dist/esm/bluetooth/index.js +5 -5
  4. package/dist/esm/{chunk-4KIZAW2Z.js → chunk-32FWPPTW.js} +3 -3
  5. package/dist/esm/{chunk-4KIZAW2Z.js.map → chunk-32FWPPTW.js.map} +0 -0
  6. package/dist/esm/{chunk-LTPPXK6F.js → chunk-67VJZGH2.js} +3 -3
  7. package/dist/esm/{chunk-LTPPXK6F.js.map → chunk-67VJZGH2.js.map} +0 -0
  8. package/dist/esm/{chunk-NJPSC7SH.js → chunk-7D7LW3WQ.js} +2 -2
  9. package/dist/esm/{chunk-NJPSC7SH.js.map → chunk-7D7LW3WQ.js.map} +0 -0
  10. package/dist/esm/{chunk-GXZIBFSN.js → chunk-CSBUJ64Q.js} +8 -5
  11. package/dist/esm/chunk-CSBUJ64Q.js.map +7 -0
  12. package/dist/esm/chunk-LSVR2HCG.js +1111 -0
  13. package/dist/esm/chunk-LSVR2HCG.js.map +7 -0
  14. package/dist/esm/{chunk-4V4RM3YJ.js → chunk-MWKALF6W.js} +4 -4
  15. package/dist/esm/{chunk-4V4RM3YJ.js.map → chunk-MWKALF6W.js.map} +0 -0
  16. package/dist/esm/{chunk-47SWOA3X.js → chunk-NPHUBFZ6.js} +2 -2
  17. package/dist/esm/{chunk-47SWOA3X.js.map → chunk-NPHUBFZ6.js.map} +0 -0
  18. package/dist/esm/{chunk-KBOIUBUE.js → chunk-WAL36PO3.js} +4 -4
  19. package/dist/esm/{chunk-KBOIUBUE.js.map → chunk-WAL36PO3.js.map} +0 -0
  20. package/dist/esm/{chunk-JAGHV77R.js → chunk-YSVFZVG4.js} +3 -3
  21. package/dist/esm/{chunk-JAGHV77R.js.map → chunk-YSVFZVG4.js.map} +0 -0
  22. package/dist/esm/{chunk-UP6RBLG2.js → chunk-ZY3RTFFS.js} +2 -2
  23. package/dist/esm/{chunk-UP6RBLG2.js.map → chunk-ZY3RTFFS.js.map} +0 -0
  24. package/dist/esm/kpuzzle/index.js +2 -2
  25. package/dist/esm/notation/index.js +2 -2
  26. package/dist/esm/protocol/index.js +4 -4
  27. package/dist/esm/puzzle-geometry/index.js +4369 -14
  28. package/dist/esm/puzzle-geometry/index.js.map +3 -3
  29. package/dist/esm/puzzles/index.js +4 -4
  30. package/dist/esm/scramble/index.js +2 -2
  31. package/dist/esm/search/index.js +6 -6
  32. package/dist/esm/{search-dynamic-sgs-side-events-ZTOWSMQT.js → search-dynamic-sgs-side-events-R3HDJ5XQ.js} +10 -12
  33. package/dist/esm/search-dynamic-sgs-side-events-R3HDJ5XQ.js.map +7 -0
  34. package/dist/esm/{search-dynamic-sgs-unofficial-V6HZTLGM.js → search-dynamic-sgs-unofficial-FQNKGHVO.js} +6 -6
  35. package/dist/esm/{search-dynamic-sgs-unofficial-V6HZTLGM.js.map → search-dynamic-sgs-unofficial-FQNKGHVO.js.map} +0 -0
  36. package/dist/esm/{search-dynamic-solve-4x4x4-YH6SB2WB.js → search-dynamic-solve-4x4x4-XRV4NBMQ.js} +6 -6
  37. package/dist/esm/{search-dynamic-solve-4x4x4-YH6SB2WB.js.map → search-dynamic-solve-4x4x4-XRV4NBMQ.js.map} +0 -0
  38. package/dist/esm/{search-dynamic-solve-kilominx-ZPEOK4DY.js → search-dynamic-solve-kilominx-G4MLGWNS.js} +2 -2
  39. package/dist/esm/{search-dynamic-solve-kilominx-ZPEOK4DY.js.map → search-dynamic-solve-kilominx-G4MLGWNS.js.map} +0 -0
  40. package/dist/esm/{search-worker-inside-generated-string-T43JGYSP.js → search-worker-inside-generated-string-IZCKWXUA.js} +19 -19
  41. package/dist/esm/search-worker-inside-generated-string-IZCKWXUA.js.map +7 -0
  42. package/dist/esm/{search-worker-js-entry-3VKCL3RX.js → search-worker-js-entry-WBEKNBB7.js} +12 -12
  43. package/dist/esm/{search-worker-js-entry-3VKCL3RX.js.map → search-worker-js-entry-WBEKNBB7.js.map} +0 -0
  44. package/dist/esm/{search-worker-ts-entry-J3TDBCMV.js → search-worker-ts-entry-XQWMEOC4.js} +2 -2
  45. package/dist/esm/{search-worker-ts-entry-J3TDBCMV.js.map → search-worker-ts-entry-XQWMEOC4.js.map} +0 -0
  46. package/dist/esm/stream/index.js +1 -1
  47. package/dist/esm/twisty/index.js +18 -759
  48. package/dist/esm/twisty/index.js.map +3 -3
  49. package/dist/esm/{twisty-dynamic-3d-UQJETF7O.js → twisty-dynamic-3d-QOX7IEXC.js} +51 -16
  50. package/dist/esm/twisty-dynamic-3d-QOX7IEXC.js.map +7 -0
  51. package/dist/types/{TwizzleLink-cd0fa192.d.ts → TwizzleLink-dcf51446.d.ts} +2 -4
  52. package/dist/types/alg/index.d.ts +4 -3
  53. package/dist/types/{parse-ec97687c.d.ts → parseAlg-db0dec6c.d.ts} +0 -0
  54. package/dist/types/puzzles/index.d.ts +3 -3
  55. package/dist/types/twisty/index.d.ts +11 -4
  56. package/package.json +4 -4
  57. package/dist/esm/chunk-7BLWQDZX.js +0 -342
  58. package/dist/esm/chunk-7BLWQDZX.js.map +0 -7
  59. package/dist/esm/chunk-GXZIBFSN.js.map +0 -7
  60. package/dist/esm/chunk-ROGN5SXC.js +0 -4386
  61. package/dist/esm/chunk-ROGN5SXC.js.map +0 -7
  62. package/dist/esm/search-dynamic-sgs-side-events-ZTOWSMQT.js.map +0 -7
  63. package/dist/esm/search-worker-inside-generated-string-T43JGYSP.js.map +0 -7
  64. package/dist/esm/twisty-dynamic-3d-UQJETF7O.js.map +0 -7
@@ -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
- proxy3D
12
- } from "../chunk-7BLWQDZX.js";
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-47SWOA3X.js";
25
+ } from "../chunk-NPHUBFZ6.js";
18
26
  import {
19
27
  cube3x3x3,
20
28
  puzzles
21
- } from "../chunk-JAGHV77R.js";
29
+ } from "../chunk-YSVFZVG4.js";
22
30
  import {
23
31
  customPGPuzzleLoader
24
- } from "../chunk-LTPPXK6F.js";
25
- import "../chunk-UP6RBLG2.js";
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-GXZIBFSN.js";
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
- debugShowRenderStats as experimentalDebugShowRenderStats,
5462
- experimentalForceNewRendererSharing
4721
+ setTwistyDebug
5463
4722
  };
5464
4723
  //# sourceMappingURL=index.js.map