cubing 0.24.2 → 0.24.3

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 (55) hide show
  1. package/README.md +37 -7
  2. package/dist/esm/{2x2x2.sgs.json-5MCXGXA6.js → 2x2x2.sgs.json-FGJMEY7L.js} +2 -2
  3. package/dist/esm/{2x2x2.sgs.json-5MCXGXA6.js.map → 2x2x2.sgs.json-FGJMEY7L.js.map} +0 -0
  4. package/dist/esm/{3d-dynamic-inside-XYXXTULQ.js → 3d-dynamic-inside-OI3KFE53.js} +3 -4
  5. package/dist/esm/{3d-dynamic-inside-XYXXTULQ.js.map → 3d-dynamic-inside-OI3KFE53.js.map} +2 -2
  6. package/dist/esm/bluetooth/index.js +1 -1
  7. package/dist/esm/{chunk-2I3MTSRM.js → chunk-2DZQQRAX.js} +2 -2
  8. package/dist/esm/{chunk-2I3MTSRM.js.map → chunk-2DZQQRAX.js.map} +0 -0
  9. package/dist/esm/{chunk-BBEJTW6Z.js → chunk-63M53ZZ5.js} +2 -2
  10. package/dist/esm/{chunk-BBEJTW6Z.js.map → chunk-63M53ZZ5.js.map} +0 -0
  11. package/dist/esm/{chunk-UZTY6GHM.js → chunk-ARBPSZE4.js} +3 -3
  12. package/dist/esm/{chunk-UZTY6GHM.js.map → chunk-ARBPSZE4.js.map} +0 -0
  13. package/dist/esm/{chunk-2CGRUO5X.js → chunk-IS5V7Y6I.js} +1 -1
  14. package/dist/esm/{chunk-2CGRUO5X.js.map → chunk-IS5V7Y6I.js.map} +0 -0
  15. package/dist/esm/{chunk-ZDALYMGF.js → chunk-KRL5KQQK.js} +32 -3
  16. package/dist/esm/chunk-KRL5KQQK.js.map +7 -0
  17. package/dist/esm/{chunk-HU55EGD6.js → chunk-PJXFSZFG.js} +2 -2
  18. package/dist/esm/{chunk-HU55EGD6.js.map → chunk-PJXFSZFG.js.map} +0 -0
  19. package/dist/esm/{chunk-LR6VCMD2.js → chunk-V5DHYMZ7.js} +2 -2
  20. package/dist/esm/{chunk-LR6VCMD2.js.map → chunk-V5DHYMZ7.js.map} +0 -0
  21. package/dist/esm/{chunk-TOPMNZ57.js → chunk-ZA7DHVIG.js} +2 -2
  22. package/dist/esm/{chunk-TOPMNZ57.js.map → chunk-ZA7DHVIG.js.map} +0 -0
  23. package/dist/esm/{entry-FOASJVBZ.js → entry-35P24GUC.js} +14 -14
  24. package/dist/esm/{entry-FOASJVBZ.js.map → entry-35P24GUC.js.map} +0 -0
  25. package/dist/esm/{fto.sgs.json-USK5JCKN.js → fto.sgs.json-5DLOFNGP.js} +2 -2
  26. package/dist/esm/{fto.sgs.json-USK5JCKN.js.map → fto.sgs.json-5DLOFNGP.js.map} +0 -0
  27. package/dist/esm/{megaminx.sgs.json-3UELYHNZ.js → megaminx.sgs.json-6QTJOWQY.js} +3 -3
  28. package/dist/esm/{megaminx.sgs.json-3UELYHNZ.js.map → megaminx.sgs.json-6QTJOWQY.js.map} +0 -0
  29. package/dist/esm/{module-entry-DBPFVUZH.js → module-entry-EAI3JQ2N.js} +2 -2
  30. package/dist/esm/{module-entry-DBPFVUZH.js.map → module-entry-EAI3JQ2N.js.map} +0 -0
  31. package/dist/esm/puzzle-geometry/index.js +1 -1
  32. package/dist/esm/puzzles/index.js +1 -1
  33. package/dist/esm/{pyraminx.sgs.json-ARYGZ7E4.js → pyraminx.sgs.json-P7ND22JU.js} +3 -3
  34. package/dist/esm/{pyraminx.sgs.json-ARYGZ7E4.js.map → pyraminx.sgs.json-P7ND22JU.js.map} +0 -0
  35. package/dist/esm/scramble/index.js +3 -3
  36. package/dist/esm/{scramble_444-HZ7HJLTT.js → scramble_444-Q22ZMCV5.js} +3 -3
  37. package/dist/esm/{scramble_444-HZ7HJLTT.js.map → scramble_444-Q22ZMCV5.js.map} +0 -0
  38. package/dist/esm/search/index.js +3 -3
  39. package/dist/esm/{skewb.sgs.json-QVGBEYZV.js → skewb.sgs.json-PE7DQP2D.js} +3 -3
  40. package/dist/esm/{skewb.sgs.json-QVGBEYZV.js.map → skewb.sgs.json-PE7DQP2D.js.map} +0 -0
  41. package/dist/esm/twisty/index.js +58 -34
  42. package/dist/esm/twisty/index.js.map +3 -3
  43. package/dist/esm/{worker-inside-generated-string-OWBTRAXR.js → worker-inside-generated-string-4JQKOQND.js} +23 -23
  44. package/dist/esm/worker-inside-generated-string-4JQKOQND.js.map +7 -0
  45. package/dist/types/puzzle-geometry/FaceNameSwizzler.d.ts +1 -0
  46. package/dist/types/puzzle-geometry/PermOriSet.d.ts +2 -1
  47. package/dist/types/puzzle-geometry/PuzzleGeometry.d.ts +1 -0
  48. package/dist/types/search/worker-inside-generated-string.d.ts +1 -1
  49. package/dist/types/twisty/model/TwistyPlayerModel.d.ts +2 -0
  50. package/dist/types/twisty/model/props/puzzle/state/AnchorTransformationProp.d.ts +2 -1
  51. package/dist/types/twisty/model/props/puzzle/state/SetupTransformationProp.d.ts +5 -0
  52. package/dist/types/twisty/views/3D/Twisty3DVantage.d.ts +1 -0
  53. package/package.json +2 -2
  54. package/dist/esm/chunk-ZDALYMGF.js.map +0 -7
  55. package/dist/esm/worker-inside-generated-string-OWBTRAXR.js.map +0 -7
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-27KJGD3S.js";
4
4
  import {
5
5
  puzzles
6
- } from "./chunk-2CGRUO5X.js";
6
+ } from "./chunk-IS5V7Y6I.js";
7
7
 
8
8
  // src/cubing/search/inside/solve/puzzles/pyraminx.sgs.json.ts
9
9
  var cachedData = null;
@@ -100,4 +100,4 @@ export {
100
100
  sgsDataPyraminx,
101
101
  sgsDataPyraminxFixedOrientation
102
102
  };
103
- //# sourceMappingURL=chunk-HU55EGD6.js.map
103
+ //# sourceMappingURL=chunk-PJXFSZFG.js.map
@@ -4,7 +4,7 @@ import {
4
4
  import {
5
5
  PGNotation,
6
6
  getPuzzleGeometryByName
7
- } from "./chunk-ZDALYMGF.js";
7
+ } from "./chunk-KRL5KQQK.js";
8
8
  import {
9
9
  KPuzzle
10
10
  } from "./chunk-B27E6KTE.js";
@@ -1558,4 +1558,4 @@ export {
1558
1558
  cachedSGSDataMegaminx,
1559
1559
  sgsDataMegaminx
1560
1560
  };
1561
- //# sourceMappingURL=chunk-LR6VCMD2.js.map
1561
+ //# sourceMappingURL=chunk-V5DHYMZ7.js.map
@@ -400,7 +400,7 @@ var DEGREES_PER_RADIAN = 360 / TAU;
400
400
  // src/cubing/twisty/heavy-code-imports/3d.ts
401
401
  var cachedConstructorProxy = null;
402
402
  async function proxy3D() {
403
- return cachedConstructorProxy ?? (cachedConstructorProxy = import("./3d-dynamic-inside-XYXXTULQ.js"));
403
+ return cachedConstructorProxy ?? (cachedConstructorProxy = import("./3d-dynamic-inside-OI3KFE53.js"));
404
404
  }
405
405
  var THREEJS = from(async () => (await proxy3D()).T3I);
406
406
 
@@ -420,4 +420,4 @@ export {
420
420
  proxy3D,
421
421
  THREEJS
422
422
  };
423
- //# sourceMappingURL=chunk-TOPMNZ57.js.map
423
+ //# sourceMappingURL=chunk-ZA7DHVIG.js.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  cachedMegaminxKPuzzleWithoutMO
3
- } from "./chunk-LR6VCMD2.js";
3
+ } from "./chunk-V5DHYMZ7.js";
4
4
  import {
5
5
  sgsDataPyraminxFixedOrientation
6
- } from "./chunk-HU55EGD6.js";
6
+ } from "./chunk-PJXFSZFG.js";
7
7
  import {
8
8
  sgsDataSkewbFixedCorner,
9
9
  skewbKPuzzleWithoutMOCached
10
- } from "./chunk-BBEJTW6Z.js";
10
+ } from "./chunk-63M53ZZ5.js";
11
11
  import "./chunk-27KJGD3S.js";
12
12
  import {
13
13
  expose
@@ -15,7 +15,7 @@ import {
15
15
  import {
16
16
  countMoves
17
17
  } from "./chunk-U2TSTTDG.js";
18
- import "./chunk-ZDALYMGF.js";
18
+ import "./chunk-KRL5KQQK.js";
19
19
  import {
20
20
  addOrientationSuffix,
21
21
  initialize333,
@@ -25,7 +25,7 @@ import {
25
25
  random333Scramble,
26
26
  setIsInsideWorker,
27
27
  solve333
28
- } from "./chunk-2I3MTSRM.js";
28
+ } from "./chunk-2DZQQRAX.js";
29
29
  import {
30
30
  randomChoiceFactory,
31
31
  randomPermute,
@@ -33,7 +33,7 @@ import {
33
33
  } from "./chunk-37EHU3GZ.js";
34
34
  import {
35
35
  puzzles
36
- } from "./chunk-2CGRUO5X.js";
36
+ } from "./chunk-IS5V7Y6I.js";
37
37
  import {
38
38
  KState
39
39
  } from "./chunk-B27E6KTE.js";
@@ -164,7 +164,7 @@ var TREMBLE_DEPTH = 3;
164
164
  var cachedTrembleSolver = null;
165
165
  async function getCachedTrembleSolver() {
166
166
  return cachedTrembleSolver || (cachedTrembleSolver = (async () => {
167
- const sgsCachedData = await (await import("./2x2x2.sgs.json-5MCXGXA6.js")).cachedData222();
167
+ const sgsCachedData = await (await import("./2x2x2.sgs.json-FGJMEY7L.js")).cachedData222();
168
168
  return new TrembleSolver(await puzzles["2x2x2"].kpuzzle(), sgsCachedData, "URFLBD".split(""));
169
169
  })());
170
170
  }
@@ -211,7 +211,7 @@ var randomSuffixes = [
211
211
  ];
212
212
  var cachedImport = null;
213
213
  function dynamicScramble444() {
214
- return cachedImport ?? (cachedImport = import("./scramble_444-HZ7HJLTT.js"));
214
+ return cachedImport ?? (cachedImport = import("./scramble_444-Q22ZMCV5.js"));
215
215
  }
216
216
  async function initialize444() {
217
217
  return (await dynamicScramble444()).initialize();
@@ -302,7 +302,7 @@ var TREMBLE_DEPTH2 = 3;
302
302
  var cachedTrembleSolver2 = null;
303
303
  async function getCachedTrembleSolver2() {
304
304
  return cachedTrembleSolver2 || (cachedTrembleSolver2 = (async () => {
305
- const sgs = await import("./fto.sgs.json-USK5JCKN.js");
305
+ const sgs = await import("./fto.sgs.json-5DLOFNGP.js");
306
306
  const json = await sgs.sgsDataFTO();
307
307
  return new TrembleSolver(await puzzles["fto"].kpuzzle(), json, [
308
308
  "U",
@@ -328,7 +328,7 @@ async function randomFTOScramble() {
328
328
  console.warn("FTO scrambles are not yet optimized. They may be much too long (\u224890 moves).");
329
329
  warned = true;
330
330
  }
331
- const sgs = await import("./fto.sgs.json-USK5JCKN.js");
331
+ const sgs = await import("./fto.sgs.json-5DLOFNGP.js");
332
332
  return solveFTO(await randomStateFromSGS(await puzzles["fto"].kpuzzle(), await sgs.sgsDataFTO()));
333
333
  }
334
334
 
@@ -337,7 +337,7 @@ var TREMBLE_DEPTH3 = 2;
337
337
  var cachedTrembleSolver3 = null;
338
338
  async function getCachedTrembleSolver3() {
339
339
  return cachedTrembleSolver3 || (cachedTrembleSolver3 = (async () => {
340
- const sgs = await import("./megaminx.sgs.json-3UELYHNZ.js");
340
+ const sgs = await import("./megaminx.sgs.json-6QTJOWQY.js");
341
341
  const json = await sgs.cachedSGSDataMegaminx();
342
342
  return new TrembleSolver(await cachedMegaminxKPuzzleWithoutMO(), json, [
343
343
  "U",
@@ -370,7 +370,7 @@ var TREMBLE_DEPTH4 = 3;
370
370
  var cachedTrembleSolver4 = null;
371
371
  async function getCachedTrembleSolver4() {
372
372
  return cachedTrembleSolver4 || (cachedTrembleSolver4 = (async () => {
373
- const sgs = await import("./pyraminx.sgs.json-ARYGZ7E4.js");
373
+ const sgs = await import("./pyraminx.sgs.json-P7ND22JU.js");
374
374
  const json = await sgs.sgsDataPyraminx();
375
375
  return new TrembleSolver(await puzzles.pyraminx.kpuzzle(), json, "RLUB".split(""));
376
376
  })());
@@ -393,7 +393,7 @@ var TREMBLE_DEPTH5 = 3;
393
393
  var cachedTrembleSolver5 = null;
394
394
  async function getCachedTrembleSolver5() {
395
395
  return cachedTrembleSolver5 || (cachedTrembleSolver5 = (async () => {
396
- const sgs = await import("./skewb.sgs.json-QVGBEYZV.js");
396
+ const sgs = await import("./skewb.sgs.json-PE7DQP2D.js");
397
397
  const json = await sgs.sgsDataSkewb();
398
398
  return new TrembleSolver(await sgs.skewbKPuzzleWithoutMOCached(), json, "RLUB".split(""));
399
399
  })());
@@ -533,4 +533,4 @@ var insideAPI = {
533
533
 
534
534
  // src/cubing/search/inside/entry.js
535
535
  expose(insideAPI);
536
- //# sourceMappingURL=entry-FOASJVBZ.js.map
536
+ //# sourceMappingURL=entry-35P24GUC.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-27KJGD3S.js";
4
4
  import {
5
5
  puzzles
6
- } from "./chunk-2CGRUO5X.js";
6
+ } from "./chunk-IS5V7Y6I.js";
7
7
  import "./chunk-B27E6KTE.js";
8
8
  import "./chunk-EWRBHQFX.js";
9
9
  import "./chunk-WO2AXYFE.js";
@@ -638,4 +638,4 @@ Alg U BR' U' BR BL' BR BL BR'
638
638
  export {
639
639
  sgsDataFTO
640
640
  };
641
- //# sourceMappingURL=fto.sgs.json-USK5JCKN.js.map
641
+ //# sourceMappingURL=fto.sgs.json-5DLOFNGP.js.map
@@ -2,9 +2,9 @@ import {
2
2
  cachedMegaminxKPuzzleWithoutMO,
3
3
  cachedSGSDataMegaminx,
4
4
  sgsDataMegaminx
5
- } from "./chunk-LR6VCMD2.js";
5
+ } from "./chunk-V5DHYMZ7.js";
6
6
  import "./chunk-27KJGD3S.js";
7
- import "./chunk-ZDALYMGF.js";
7
+ import "./chunk-KRL5KQQK.js";
8
8
  import "./chunk-B27E6KTE.js";
9
9
  import "./chunk-EWRBHQFX.js";
10
10
  import "./chunk-WO2AXYFE.js";
@@ -13,4 +13,4 @@ export {
13
13
  cachedSGSDataMegaminx,
14
14
  sgsDataMegaminx
15
15
  };
16
- //# sourceMappingURL=megaminx.sgs.json-3UELYHNZ.js.map
16
+ //# sourceMappingURL=megaminx.sgs.json-6QTJOWQY.js.map
@@ -6,7 +6,7 @@ async function getNodeMessagePort() {
6
6
  }
7
7
  if (!globalThis.DO_NOT_EXPOSE_API) {
8
8
  (async () => {
9
- await import("./entry-FOASJVBZ.js");
9
+ await import("./entry-35P24GUC.js");
10
10
  const messagePort = globalThis.postMessage ? globalThis : await getNodeMessagePort();
11
11
  messagePort.postMessage("comlink-exposed");
12
12
  })();
@@ -15,4 +15,4 @@ var WORKER_ENTRY_FILE_URL = import.meta.url;
15
15
  export {
16
16
  WORKER_ENTRY_FILE_URL
17
17
  };
18
- //# sourceMappingURL=module-entry-DBPFVUZH.js.map
18
+ //# sourceMappingURL=module-entry-EAI3JQ2N.js.map
@@ -9,7 +9,7 @@ import {
9
9
  parseOptions,
10
10
  parsePuzzleDescription,
11
11
  schreierSims
12
- } from "../chunk-ZDALYMGF.js";
12
+ } from "../chunk-KRL5KQQK.js";
13
13
  import "../chunk-EWRBHQFX.js";
14
14
  import "../chunk-WO2AXYFE.js";
15
15
  export {
@@ -6,7 +6,7 @@ import {
6
6
  getFaceletAppearance,
7
7
  puzzles,
8
8
  wcaEventInfo
9
- } from "../chunk-2CGRUO5X.js";
9
+ } from "../chunk-IS5V7Y6I.js";
10
10
  import {
11
11
  experimental3x3x3KPuzzle
12
12
  } from "../chunk-B27E6KTE.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  sgsDataPyraminx,
3
3
  sgsDataPyraminxFixedOrientation
4
- } from "./chunk-HU55EGD6.js";
4
+ } from "./chunk-PJXFSZFG.js";
5
5
  import "./chunk-27KJGD3S.js";
6
- import "./chunk-2CGRUO5X.js";
6
+ import "./chunk-IS5V7Y6I.js";
7
7
  import "./chunk-B27E6KTE.js";
8
8
  import "./chunk-EWRBHQFX.js";
9
9
  import "./chunk-WO2AXYFE.js";
@@ -11,4 +11,4 @@ export {
11
11
  sgsDataPyraminx,
12
12
  sgsDataPyraminxFixedOrientation
13
13
  };
14
- //# sourceMappingURL=pyraminx.sgs.json-ARYGZ7E4.js.map
14
+ //# sourceMappingURL=pyraminx.sgs.json-P7ND22JU.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  randomScrambleForEvent
3
- } from "../chunk-UZTY6GHM.js";
4
- import "../chunk-2I3MTSRM.js";
3
+ } from "../chunk-ARBPSZE4.js";
4
+ import "../chunk-2DZQQRAX.js";
5
5
  import "../chunk-37EHU3GZ.js";
6
- import "../chunk-2CGRUO5X.js";
6
+ import "../chunk-IS5V7Y6I.js";
7
7
  import "../chunk-B27E6KTE.js";
8
8
  import "../chunk-EWRBHQFX.js";
9
9
  import "../chunk-WO2AXYFE.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  mustBeInsideWorker,
3
3
  random333Scramble
4
- } from "./chunk-2I3MTSRM.js";
4
+ } from "./chunk-2DZQQRAX.js";
5
5
  import {
6
6
  randomUIntBelowFactory
7
7
  } from "./chunk-37EHU3GZ.js";
8
- import "./chunk-2CGRUO5X.js";
8
+ import "./chunk-IS5V7Y6I.js";
9
9
  import "./chunk-B27E6KTE.js";
10
10
  import {
11
11
  Alg
@@ -2570,4 +2570,4 @@ export {
2570
2570
  initialize,
2571
2571
  random444Scramble
2572
2572
  };
2573
- //# sourceMappingURL=scramble_444-HZ7HJLTT.js.map
2573
+ //# sourceMappingURL=scramble_444-Q22ZMCV5.js.map
@@ -6,12 +6,12 @@ import {
6
6
  solveMegaminx,
7
7
  solvePyraminx,
8
8
  solveSkewb
9
- } from "../chunk-UZTY6GHM.js";
9
+ } from "../chunk-ARBPSZE4.js";
10
10
  import {
11
11
  random333State
12
- } from "../chunk-2I3MTSRM.js";
12
+ } from "../chunk-2DZQQRAX.js";
13
13
  import "../chunk-37EHU3GZ.js";
14
- import "../chunk-2CGRUO5X.js";
14
+ import "../chunk-IS5V7Y6I.js";
15
15
  import "../chunk-B27E6KTE.js";
16
16
  import "../chunk-EWRBHQFX.js";
17
17
  import "../chunk-WO2AXYFE.js";
@@ -2,9 +2,9 @@ import {
2
2
  sgsDataSkewb,
3
3
  sgsDataSkewbFixedCorner,
4
4
  skewbKPuzzleWithoutMOCached
5
- } from "./chunk-BBEJTW6Z.js";
5
+ } from "./chunk-63M53ZZ5.js";
6
6
  import "./chunk-27KJGD3S.js";
7
- import "./chunk-ZDALYMGF.js";
7
+ import "./chunk-KRL5KQQK.js";
8
8
  import "./chunk-B27E6KTE.js";
9
9
  import "./chunk-EWRBHQFX.js";
10
10
  import "./chunk-WO2AXYFE.js";
@@ -13,4 +13,4 @@ export {
13
13
  sgsDataSkewbFixedCorner,
14
14
  skewbKPuzzleWithoutMOCached
15
15
  };
16
- //# sourceMappingURL=skewb.sgs.json-QVGBEYZV.js.map
16
+ //# sourceMappingURL=skewb.sgs.json-PE7DQP2D.js.map
@@ -10,7 +10,7 @@ import {
10
10
  TwistyPropDerived,
11
11
  TwistyPropSource,
12
12
  proxy3D
13
- } from "../chunk-TOPMNZ57.js";
13
+ } from "../chunk-ZA7DHVIG.js";
14
14
  import {
15
15
  countAnimatedLeaves,
16
16
  countMoves
@@ -20,7 +20,7 @@ import {
20
20
  cubeAppearance,
21
21
  customPGPuzzleLoader,
22
22
  puzzles
23
- } from "../chunk-2CGRUO5X.js";
23
+ } from "../chunk-IS5V7Y6I.js";
24
24
  import "../chunk-B27E6KTE.js";
25
25
  import {
26
26
  Alg,
@@ -1106,12 +1106,45 @@ var twisty3DVantageCSS = new CSSSource(`
1106
1106
  height: 100%;
1107
1107
  display: grid;
1108
1108
  overflow: hidden;
1109
+ place-content: center;
1110
+ }
1111
+
1112
+ .loading {
1113
+ width: 4em;
1114
+ height: 4em;
1115
+ border-radius: 2.5em;
1116
+ border: 0.5em solid rgba(0, 0, 0, 0);
1117
+ border-top: 0.5em solid rgba(0, 0, 0, 0.7);
1118
+ border-right: 0.5em solid rgba(0, 0, 0, 0.7);
1119
+ animation: fade-in-delayed 4s, rotate 1s linear infinite;
1120
+ }
1121
+
1122
+ @keyframes fade-in-delayed {
1123
+ 0% { opacity: 0; }
1124
+ 25% {opacity: 0; }
1125
+ 100% { opacity: 1; }
1126
+ }
1127
+
1128
+ @keyframes rotate {
1129
+ from { transform: rotate(0deg); }
1130
+ to { transform: rotate(360deg); }
1109
1131
  }
1110
1132
 
1111
1133
  /* TODO: This is due to stats hack. Replace with \`canvas\`. */
1112
1134
  .wrapper > canvas {
1113
1135
  max-width: 100%;
1114
1136
  max-height: 100%;
1137
+ cursor: grab;
1138
+ animation: fade-in 0.25s ease-in;
1139
+ }
1140
+
1141
+ @keyframes fade-in {
1142
+ from { opacity: 0; }
1143
+ to { opacity: 1; }
1144
+ }
1145
+
1146
+ .wrapper > canvas:active {
1147
+ cursor: grabbing;
1115
1148
  }
1116
1149
 
1117
1150
  .wrapper.invisible {
@@ -1385,6 +1418,7 @@ var Twisty3DVantage = class extends ManagedCustomElement {
1385
1418
  this.scene = null;
1386
1419
  this.stats = null;
1387
1420
  this.rendererIsShared = shareRenderer();
1421
+ this.loadingElement = null;
1388
1422
  __privateAdd(this, _onResizeStaleDropper, new StaleDropper());
1389
1423
  __privateAdd(this, _width, 0);
1390
1424
  __privateAdd(this, _height, 0);
@@ -1396,6 +1430,8 @@ var Twisty3DVantage = class extends ManagedCustomElement {
1396
1430
  __privateAdd(this, _disconnectionFunctions, []);
1397
1431
  __privateAdd(this, _scheduler, new RenderScheduler(this.render.bind(this)));
1398
1432
  this.scene = scene ?? null;
1433
+ this.loadingElement = this.addElement(document.createElement("div"));
1434
+ this.loadingElement.classList.add("loading");
1399
1435
  if (SHOW_STATS) {
1400
1436
  this.stats = new Stats();
1401
1437
  this.stats.dom.style.position = "absolute";
@@ -1437,6 +1473,7 @@ var Twisty3DVantage = class extends ManagedCustomElement {
1437
1473
  const renderer = await this.renderer();
1438
1474
  canvas = this.addElement(renderer.domElement);
1439
1475
  }
1476
+ this.loadingElement?.remove();
1440
1477
  const context = canvas.getContext("2d");
1441
1478
  return { canvas, context };
1442
1479
  })());
@@ -2019,36 +2056,11 @@ var twistyScrubberCSS = new CSSSource(`
2019
2056
  overflow: hidden;
2020
2057
  backdrop-filter: blur(4px);
2021
2058
  -webkit-backdrop-filter: blur(4px);
2059
+ background: rgba(196, 196, 196, 0.75)
2022
2060
  }
2023
2061
 
2024
- input {
2025
- margin: 0; width: 100%;
2026
- }
2027
-
2028
- input {
2029
- background: none;
2030
- }
2031
-
2032
- ::-moz-range-track {
2033
- background: rgba(0, 0, 0, 0.25);
2034
- height: 50%;
2035
- border: 1px solid rgba(0, 0, 0, 0.1);
2036
- }
2037
-
2038
- ::-webkit-slider-runnable-track {
2039
- background: rgba(0, 0, 0, 0.05);
2040
- }
2041
-
2042
- ::-moz-range-progress {
2043
- background: #3273F6;
2044
- height: 50%;
2045
- border: 1px solid rgba(0, 0, 0, 0.1);
2046
- }
2047
-
2048
- ::-ms-fill-lower {
2049
- background: #3273F6;
2050
- height: 50%;
2051
- border: 1px solid rgba(0, 0, 0, 0.1);
2062
+ input:not(:disabled) {
2063
+ cursor: ew-resize;
2052
2064
  }
2053
2065
  `);
2054
2066
 
@@ -2213,7 +2225,7 @@ var twistyPlayerCSS = new CSSSource(`
2213
2225
  .wrapper {
2214
2226
  display: grid;
2215
2227
  overflow: hidden;
2216
- grid-template-rows: 7fr 1em 1fr;
2228
+ grid-template-rows: 7fr minmax(1.5em, 0.5fr) minmax(2em, 1fr);
2217
2229
  }
2218
2230
 
2219
2231
  .wrapper > * {
@@ -3477,13 +3489,16 @@ var IndexerProp = class extends TwistyPropDerived {
3477
3489
  // src/cubing/twisty/model/props/puzzle/state/AnchorTransformationProp.ts
3478
3490
  var AnchorTransformationProp = class extends TwistyPropDerived {
3479
3491
  derive(inputs) {
3492
+ if (inputs.setupTransformation) {
3493
+ return inputs.setupTransformation;
3494
+ }
3480
3495
  switch (inputs.setupAnchor) {
3481
3496
  case "start":
3482
- return inputs.setupTransformation;
3497
+ return inputs.setupAlgTransformation;
3483
3498
  case "end": {
3484
3499
  const algTransformation = inputs.indexer.transformationAtIndex(inputs.indexer.numAnimatedLeaves());
3485
3500
  const inverseAlgTransformation = algTransformation.invert();
3486
- return inputs.setupTransformation.applyTransformation(inverseAlgTransformation);
3501
+ return inputs.setupAlgTransformation.applyTransformation(inverseAlgTransformation);
3487
3502
  }
3488
3503
  default:
3489
3504
  throw new Error("Unimplemented!");
@@ -3714,6 +3729,13 @@ var FoundationDisplayProp = class extends SimpleTwistyPropSource {
3714
3729
  }
3715
3730
  };
3716
3731
 
3732
+ // src/cubing/twisty/model/props/puzzle/state/SetupTransformationProp.ts
3733
+ var SetupTransformationProp = class extends SimpleTwistyPropSource {
3734
+ getDefaultValue() {
3735
+ return null;
3736
+ }
3737
+ };
3738
+
3717
3739
  // src/cubing/twisty/model/TwistyPlayerModel.ts
3718
3740
  var TwistyPlayerModel = class {
3719
3741
  constructor() {
@@ -3736,6 +3758,7 @@ var TwistyPlayerModel = class {
3736
3758
  this.puzzleIDRequest = new PuzzleIDRequestProp();
3737
3759
  this.setupAnchor = new SetupAnchorProp();
3738
3760
  this.setupAlg = new AlgProp();
3761
+ this.setupTransformation = new SetupTransformationProp();
3739
3762
  this.stickering = new StickeringProp();
3740
3763
  this.tempoScale = new TempoScaleProp();
3741
3764
  this.timestampRequest = new TimestampRequestProp();
@@ -3788,8 +3811,9 @@ var TwistyPlayerModel = class {
3788
3811
  kpuzzle: this.kpuzzle
3789
3812
  });
3790
3813
  this.anchorTransformation = new AnchorTransformationProp({
3814
+ setupTransformation: this.setupTransformation,
3791
3815
  setupAnchor: this.setupAnchor,
3792
- setupTransformation: this.setupAlgTransformation,
3816
+ setupAlgTransformation: this.setupAlgTransformation,
3793
3817
  indexer: this.indexer
3794
3818
  });
3795
3819
  this.timeRange = new TimeRangeProp({