cubing 0.26.1 → 0.26.4

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 (145) hide show
  1. package/dist/esm/alg/index.js +1 -1
  2. package/dist/esm/bluetooth/index.js +3 -3
  3. package/dist/esm/bluetooth/index.js.map +1 -1
  4. package/dist/esm/{chunk-HUCMGBEC.js → chunk-2KNZ3W2X.js} +2 -2
  5. package/dist/esm/{chunk-HUCMGBEC.js.map → chunk-2KNZ3W2X.js.map} +1 -1
  6. package/dist/esm/{chunk-CYG3DDTX.js → chunk-2Z7I5AC3.js} +385 -89
  7. package/dist/esm/chunk-2Z7I5AC3.js.map +7 -0
  8. package/dist/esm/{chunk-RHC3DIN3.js → chunk-BEXHMXCT.js} +1 -1
  9. package/dist/esm/{chunk-RHC3DIN3.js.map → chunk-BEXHMXCT.js.map} +1 -1
  10. package/dist/esm/{chunk-ALBEW4DJ.js → chunk-GBMX6FHY.js} +1 -1
  11. package/dist/esm/{chunk-ALBEW4DJ.js.map → chunk-GBMX6FHY.js.map} +1 -1
  12. package/dist/esm/{chunk-XQKTAWAA.js → chunk-IW4IMXS5.js} +46 -37
  13. package/dist/esm/chunk-IW4IMXS5.js.map +7 -0
  14. package/dist/esm/{chunk-J7OB2GEM.js → chunk-LETRSCIC.js} +14 -12
  15. package/dist/esm/chunk-LETRSCIC.js.map +7 -0
  16. package/dist/esm/{chunk-JIBAUV55.js → chunk-NGC5FA64.js} +10 -10
  17. package/dist/esm/chunk-NGC5FA64.js.map +7 -0
  18. package/dist/esm/{chunk-V55YSWJY.js → chunk-NYAPGKCW.js} +1 -1
  19. package/dist/esm/{chunk-V55YSWJY.js.map → chunk-NYAPGKCW.js.map} +1 -1
  20. package/dist/esm/{chunk-5Q4SJSNY.js → chunk-TKUB3UH6.js} +2 -2
  21. package/dist/esm/{chunk-5Q4SJSNY.js.map → chunk-TKUB3UH6.js.map} +1 -1
  22. package/dist/esm/{chunk-AD6PFNOU.js → chunk-WQK6XWML.js} +3 -3
  23. package/dist/esm/chunk-WQK6XWML.js.map +7 -0
  24. package/dist/esm/{chunk-3CEMUTUD.js → chunk-XENF236F.js} +2 -2
  25. package/dist/esm/{chunk-3CEMUTUD.js.map → chunk-XENF236F.js.map} +1 -1
  26. package/dist/esm/chunk-YBDBUTYE.js +42 -0
  27. package/dist/esm/chunk-YBDBUTYE.js.map +7 -0
  28. package/dist/esm/{chunk-PDVAUAMY.js → chunk-YRXW6WCD.js} +6 -40
  29. package/dist/esm/chunk-YRXW6WCD.js.map +7 -0
  30. package/dist/esm/{chunk-QZOJPCN5.js → chunk-ZNQAOJ4A.js} +5 -4
  31. package/dist/esm/chunk-ZNQAOJ4A.js.map +7 -0
  32. package/dist/esm/kpuzzle/index.js +2 -2
  33. package/dist/esm/notation/index.js +2 -2
  34. package/dist/esm/protocol/index.js +2 -2
  35. package/dist/esm/puzzle-geometry/index.js +6 -2
  36. package/dist/esm/puzzles/index.js +3 -3
  37. package/dist/esm/{3x3x3.kpuzzle.svg-5U7LUACF.js → puzzles-dynamic-3x3x3-NB2PEZTV.js} +115 -4
  38. package/dist/esm/puzzles-dynamic-3x3x3-NB2PEZTV.js.map +7 -0
  39. package/dist/esm/puzzles-dynamic-side-events-HOXBZYWI.js +1855 -0
  40. package/dist/esm/puzzles-dynamic-side-events-HOXBZYWI.js.map +7 -0
  41. package/dist/esm/puzzles-dynamic-unofficial-MGVOFUDR.js +399 -0
  42. package/dist/esm/puzzles-dynamic-unofficial-MGVOFUDR.js.map +7 -0
  43. package/dist/esm/scramble/index.js +5 -8
  44. package/dist/esm/search/index.js +11 -12
  45. package/dist/esm/{chunk-PMKVGKT4.js → search-dynamic-sgs-side-events-DWRW3XUN.js} +322 -8
  46. package/dist/esm/search-dynamic-sgs-side-events-DWRW3XUN.js.map +7 -0
  47. package/dist/esm/{fto.dynamic-ISSUUAOX.js → search-dynamic-sgs-unofficial-GM6G44QE.js} +564 -11
  48. package/dist/esm/search-dynamic-sgs-unofficial-GM6G44QE.js.map +7 -0
  49. package/dist/esm/{3x3x3-min2phase-GFNNX26U.js → search-dynamic-solve-3x3x3-K4TG7P3X.js} +1 -1
  50. package/dist/esm/{3x3x3-min2phase-GFNNX26U.js.map → search-dynamic-solve-3x3x3-K4TG7P3X.js.map} +1 -1
  51. package/dist/esm/{444-solver-2ECPETB3.js → search-dynamic-solve-4x4x4-GH5TQ72U.js} +7 -6
  52. package/dist/esm/{444-solver-2ECPETB3.js.map → search-dynamic-solve-4x4x4-GH5TQ72U.js.map} +1 -1
  53. package/dist/esm/{fto-solver-5EQEC77M.js → search-dynamic-solve-fto-WROONLZS.js} +7 -7
  54. package/dist/esm/search-dynamic-solve-fto-WROONLZS.js.map +7 -0
  55. package/dist/esm/{kilosolver-RP3POREU.js → search-dynamic-solve-kilominx-7Y4UNPAG.js} +3 -5
  56. package/dist/esm/{kilosolver-RP3POREU.js.map → search-dynamic-solve-kilominx-7Y4UNPAG.js.map} +1 -1
  57. package/dist/esm/{master_tetraminx-solver-RFBUNQMC.js → search-dynamic-solve-master_tetraminx-3R2CJUKW.js} +2 -4
  58. package/dist/esm/{master_tetraminx-solver-RFBUNQMC.js.map → search-dynamic-solve-master_tetraminx-3R2CJUKW.js.map} +1 -1
  59. package/dist/esm/{sq1-solver-G73T6FTJ.js → search-dynamic-solve-sq1-RS5HN6AH.js} +2 -2
  60. package/dist/esm/{sq1-solver-G73T6FTJ.js.map → search-dynamic-solve-sq1-RS5HN6AH.js.map} +1 -1
  61. package/dist/esm/search-worker-inside-generated-string-F45TUE2M.js +3768 -0
  62. package/dist/esm/search-worker-inside-generated-string-F45TUE2M.js.map +7 -0
  63. package/dist/esm/{search-worker-js-entry-CZHIWNVF.js → search-worker-js-entry-HKWTUNTT.js} +55 -70
  64. package/dist/esm/search-worker-js-entry-HKWTUNTT.js.map +7 -0
  65. package/dist/esm/{search-worker-ts-entry-4WJDKASM.js → search-worker-ts-entry-BQGURH6Z.js} +5 -5
  66. package/dist/esm/{search-worker-ts-entry-4WJDKASM.js.map → search-worker-ts-entry-BQGURH6Z.js.map} +1 -1
  67. package/dist/esm/stream/index.js +1 -1
  68. package/dist/esm/stream/index.js.map +1 -1
  69. package/dist/esm/twisty/index.js +82 -27
  70. package/dist/esm/twisty/index.js.map +3 -3
  71. package/dist/esm/{3d-dynamic-OTQHIOVR.js → twisty-dynamic-3d-D5A3LR3B.js} +24 -8
  72. package/dist/esm/{3d-dynamic-OTQHIOVR.js.map → twisty-dynamic-3d-D5A3LR3B.js.map} +3 -3
  73. package/dist/types/{Alg-6f3dc52c.d.ts → Alg-5cf4b166.d.ts} +2 -2
  74. package/dist/types/{KPuzzleDefinition-8531b592.d.ts → KPuzzleDefinition-a1b2c545.d.ts} +18 -12
  75. package/dist/types/{KState-ba36d9a3.d.ts → KState-0ba4140d.d.ts} +2 -2
  76. package/dist/types/PuzzleLoader-77346930.d.ts +1178 -0
  77. package/dist/types/alg/index.d.ts +4 -4
  78. package/dist/types/bluetooth/index.d.ts +5 -5
  79. package/dist/types/{bluetooth-puzzle-bc1a5264.d.ts → bluetooth-puzzle-0d818529.d.ts} +2 -2
  80. package/dist/types/kpuzzle/index.d.ts +4 -4
  81. package/dist/types/notation/index.d.ts +1 -1
  82. package/dist/types/{outside-d6602f71.d.ts → outside-9857fc7e.d.ts} +2 -2
  83. package/dist/types/{parse-6d363160.d.ts → parse-9db7ee51.d.ts} +1 -1
  84. package/dist/types/protocol/index.d.ts +3 -3
  85. package/dist/types/puzzle-geometry/index.d.ts +4 -4
  86. package/dist/types/puzzles/index.d.ts +7 -5
  87. package/dist/types/scramble/index.d.ts +4 -4
  88. package/dist/types/search/index.d.ts +4 -4
  89. package/dist/types/stream/index.d.ts +4 -4
  90. package/dist/types/twisty/index.d.ts +8 -977
  91. package/package.json +9 -4
  92. package/dist/esm/.DS_Store +0 -0
  93. package/dist/esm/2x2x2.kpuzzle.json-RJHNQ246.js +0 -96
  94. package/dist/esm/2x2x2.kpuzzle.json-RJHNQ246.js.map +0 -7
  95. package/dist/esm/2x2x2.kpuzzle.svg-CYX37VBY.js +0 -52
  96. package/dist/esm/2x2x2.kpuzzle.svg-CYX37VBY.js.map +0 -7
  97. package/dist/esm/2x2x2.sgs.json-OIAKZDZZ.js +0 -122
  98. package/dist/esm/2x2x2.sgs.json-OIAKZDZZ.js.map +0 -7
  99. package/dist/esm/3x3x3-ll.kpuzzle.svg-KZNSV76X.js +0 -115
  100. package/dist/esm/3x3x3-ll.kpuzzle.svg-KZNSV76X.js.map +0 -7
  101. package/dist/esm/3x3x3.kpuzzle.svg-5U7LUACF.js.map +0 -7
  102. package/dist/esm/chunk-AD6PFNOU.js.map +0 -7
  103. package/dist/esm/chunk-CRU5TVHA.js +0 -122
  104. package/dist/esm/chunk-CRU5TVHA.js.map +0 -7
  105. package/dist/esm/chunk-CYG3DDTX.js.map +0 -7
  106. package/dist/esm/chunk-J7OB2GEM.js.map +0 -7
  107. package/dist/esm/chunk-JIBAUV55.js.map +0 -7
  108. package/dist/esm/chunk-MC2D6L32.js +0 -103
  109. package/dist/esm/chunk-MC2D6L32.js.map +0 -7
  110. package/dist/esm/chunk-PDVAUAMY.js.map +0 -7
  111. package/dist/esm/chunk-PMKVGKT4.js.map +0 -7
  112. package/dist/esm/chunk-QZOJPCN5.js.map +0 -7
  113. package/dist/esm/chunk-XQKTAWAA.js.map +0 -7
  114. package/dist/esm/clock.kpuzzle.json-3Q7KDODZ.js +0 -714
  115. package/dist/esm/clock.kpuzzle.json-3Q7KDODZ.js.map +0 -7
  116. package/dist/esm/clock.kpuzzle.svg-JSRDCSQF.js +0 -376
  117. package/dist/esm/clock.kpuzzle.svg-JSRDCSQF.js.map +0 -7
  118. package/dist/esm/fto-solver-5EQEC77M.js.map +0 -7
  119. package/dist/esm/fto.dynamic-ISSUUAOX.js.map +0 -7
  120. package/dist/esm/fto.kpuzzle.svg-H2RJX6UR.js +0 -102
  121. package/dist/esm/fto.kpuzzle.svg-H2RJX6UR.js.map +0 -7
  122. package/dist/esm/kilominx.kpuzzle.svg-ZLRTRUTM.js +0 -83
  123. package/dist/esm/kilominx.kpuzzle.svg-ZLRTRUTM.js.map +0 -7
  124. package/dist/esm/megaminx.sgs.json-NUXKWG2L.js +0 -16
  125. package/dist/esm/megaminx.sgs.json-NUXKWG2L.js.map +0 -7
  126. package/dist/esm/pyraminx.kpuzzle.svg-UHDZCBET.js +0 -95
  127. package/dist/esm/pyraminx.kpuzzle.svg-UHDZCBET.js.map +0 -7
  128. package/dist/esm/pyraminx.sgs.json-2BVIFZAF.js +0 -14
  129. package/dist/esm/pyraminx.sgs.json-2BVIFZAF.js.map +0 -7
  130. package/dist/esm/redi_cube-5B6YHJGL.js +0 -565
  131. package/dist/esm/redi_cube-5B6YHJGL.js.map +0 -7
  132. package/dist/esm/redi_cube.kpuzzle.json-VGO74GBL.js +0 -66
  133. package/dist/esm/redi_cube.kpuzzle.json-VGO74GBL.js.map +0 -7
  134. package/dist/esm/redi_cube.kpuzzle.svg-3DWDYE3O.js +0 -160
  135. package/dist/esm/redi_cube.kpuzzle.svg-3DWDYE3O.js.map +0 -7
  136. package/dist/esm/search-worker-js-entry-CZHIWNVF.js.map +0 -7
  137. package/dist/esm/skewb.sgs.json-IMR7QJQC.js +0 -16
  138. package/dist/esm/skewb.sgs.json-IMR7QJQC.js.map +0 -7
  139. package/dist/esm/sq1-hyperorbit.kpuzzle.json-NHAYS6MD.js +0 -244
  140. package/dist/esm/sq1-hyperorbit.kpuzzle.json-NHAYS6MD.js.map +0 -7
  141. package/dist/esm/sq1-hyperorbit.kpuzzle.svg-MNHJTJ6V.js +0 -302
  142. package/dist/esm/sq1-hyperorbit.kpuzzle.svg-MNHJTJ6V.js.map +0 -7
  143. package/dist/esm/worker-inside-generated-string-4FDHMKDI.js +0 -3768
  144. package/dist/esm/worker-inside-generated-string-4FDHMKDI.js.map +0 -7
  145. package/dist/types/PuzzleLoader-a7faf593.d.ts +0 -172
@@ -10,18 +10,19 @@ import {
10
10
  TwistyPropDerived,
11
11
  TwistyPropSource,
12
12
  proxy3D
13
- } from "../chunk-PDVAUAMY.js";
13
+ } from "../chunk-YRXW6WCD.js";
14
+ import "../chunk-YBDBUTYE.js";
14
15
  import {
15
16
  countAnimatedLeaves,
16
17
  countMoves
17
- } from "../chunk-5Q4SJSNY.js";
18
+ } from "../chunk-TKUB3UH6.js";
18
19
  import {
19
20
  cube3x3x3,
20
21
  cubeAppearance,
21
22
  customPGPuzzleLoader,
22
23
  puzzles
23
- } from "../chunk-XQKTAWAA.js";
24
- import "../chunk-HUCMGBEC.js";
24
+ } from "../chunk-IW4IMXS5.js";
25
+ import "../chunk-2KNZ3W2X.js";
25
26
  import {
26
27
  Alg,
27
28
  AlgBuilder,
@@ -33,7 +34,7 @@ import {
33
34
  direct,
34
35
  directedGenerator,
35
36
  experimentalAppendMove
36
- } from "../chunk-QZOJPCN5.js";
37
+ } from "../chunk-ZNQAOJ4A.js";
37
38
  import {
38
39
  __privateAdd,
39
40
  __privateGet,
@@ -1135,7 +1136,6 @@ var twisty3DVantageCSS = new CSSSource(`
1135
1136
  .wrapper > canvas {
1136
1137
  max-width: 100%;
1137
1138
  max-height: 100%;
1138
- cursor: grab;
1139
1139
  animation: fade-in 0.25s ease-in;
1140
1140
  }
1141
1141
 
@@ -1144,18 +1144,22 @@ var twisty3DVantageCSS = new CSSSource(`
1144
1144
  to { opacity: 1; }
1145
1145
  }
1146
1146
 
1147
- .wrapper > canvas:active {
1148
- cursor: grabbing;
1149
- }
1150
-
1151
1147
  .wrapper.invisible {
1152
1148
  opacity: 0;
1153
1149
  }
1150
+
1151
+ .wrapper.drag-input-enabled > canvas {
1152
+ cursor: grab;
1153
+ }
1154
+
1155
+ .wrapper.drag-input-enabled > canvas:active {
1156
+ cursor: grabbing;
1157
+ }
1154
1158
  `);
1155
1159
 
1156
1160
  // src/cubing/twisty/views/3D/DragTracker.ts
1157
1161
  var MOVEMENT_EPSILON = 0.1;
1158
- var _dragInfoMap, _lazyListenersRegistered, _registerLazyListeners, registerLazyListeners_fn, _clear, clear_fn, _trackDrag, trackDrag_fn;
1162
+ var _dragInfoMap, _targetListeners, _lazyListenersRegistered, _registerLazyListeners, registerLazyListeners_fn, _clear, clear_fn, _trackDrag, trackDrag_fn;
1159
1163
  var DragTracker = class extends EventTarget {
1160
1164
  constructor(target) {
1161
1165
  super();
@@ -1164,13 +1168,29 @@ var DragTracker = class extends EventTarget {
1164
1168
  __privateAdd(this, _clear);
1165
1169
  __privateAdd(this, _trackDrag);
1166
1170
  __privateAdd(this, _dragInfoMap, /* @__PURE__ */ new Map());
1171
+ __privateAdd(this, _targetListeners, /* @__PURE__ */ new Map());
1167
1172
  __privateAdd(this, _lazyListenersRegistered, false);
1168
- target.addEventListener("pointerdown", this.onPointerDown.bind(this));
1169
- this.target.addEventListener("contextmenu", (e) => {
1173
+ }
1174
+ start() {
1175
+ this.addTargetListener("pointerdown", this.onPointerDown.bind(this));
1176
+ this.addTargetListener("contextmenu", (e) => {
1170
1177
  e.preventDefault();
1171
1178
  });
1172
- this.target.addEventListener("touchmove", (e) => e.preventDefault());
1173
- this.target.addEventListener("dblclick", (e) => e.preventDefault());
1179
+ this.addTargetListener("touchmove", (e) => e.preventDefault());
1180
+ this.addTargetListener("dblclick", (e) => e.preventDefault());
1181
+ }
1182
+ stop() {
1183
+ for (const [eventType, listener] of __privateGet(this, _targetListeners).entries()) {
1184
+ this.target.removeEventListener(eventType, listener);
1185
+ }
1186
+ __privateGet(this, _targetListeners).clear();
1187
+ __privateSet(this, _lazyListenersRegistered, false);
1188
+ }
1189
+ addTargetListener(eventType, listener) {
1190
+ if (!__privateGet(this, _targetListeners).has(eventType)) {
1191
+ this.target.addEventListener(eventType, listener);
1192
+ __privateGet(this, _targetListeners).set(eventType, listener);
1193
+ }
1174
1194
  }
1175
1195
  onPointerDown(e) {
1176
1196
  __privateMethod(this, _registerLazyListeners, registerLazyListeners_fn).call(this);
@@ -1222,14 +1242,15 @@ var DragTracker = class extends EventTarget {
1222
1242
  }
1223
1243
  };
1224
1244
  _dragInfoMap = new WeakMap();
1245
+ _targetListeners = new WeakMap();
1225
1246
  _lazyListenersRegistered = new WeakMap();
1226
1247
  _registerLazyListeners = new WeakSet();
1227
1248
  registerLazyListeners_fn = function() {
1228
1249
  if (__privateGet(this, _lazyListenersRegistered)) {
1229
1250
  return;
1230
1251
  }
1231
- this.target.addEventListener("pointermove", this.onPointerMove.bind(this));
1232
- this.target.addEventListener("pointerup", this.onPointerUp.bind(this));
1252
+ this.addTargetListener("pointermove", this.onPointerMove.bind(this));
1253
+ this.addTargetListener("pointerup", this.onPointerUp.bind(this));
1233
1254
  __privateSet(this, _lazyListenersRegistered, true);
1234
1255
  };
1235
1256
  _clear = new WeakSet();
@@ -1586,7 +1607,21 @@ _cachedDragTracker = new WeakMap();
1586
1607
  _dragTracker = new WeakSet();
1587
1608
  dragTracker_fn = async function() {
1588
1609
  return __privateGet(this, _cachedDragTracker) ?? __privateSet(this, _cachedDragTracker, (async () => {
1589
- return new DragTracker((await this.canvasInfo()).canvas);
1610
+ const dragTracker = new DragTracker((await this.canvasInfo()).canvas);
1611
+ this.model?.twistySceneModel.dragInput.addFreshListener((dragInputMode) => {
1612
+ let dragInputEnabled = false;
1613
+ switch (dragInputMode) {
1614
+ case "auto":
1615
+ dragTracker.start();
1616
+ dragInputEnabled = true;
1617
+ break;
1618
+ case "none":
1619
+ dragTracker.stop();
1620
+ break;
1621
+ }
1622
+ this.contentWrapper.classList.toggle("drag-input-enabled", dragInputEnabled);
1623
+ });
1624
+ return dragTracker;
1590
1625
  })());
1591
1626
  };
1592
1627
  _cachedCamera = new WeakMap();
@@ -1955,7 +1990,7 @@ var TwistyButtons = class extends ManagedCustomElement {
1955
1990
  for (const command in buttonCommands) {
1956
1991
  const button = new TwistyButton();
1957
1992
  buttons[command] = button;
1958
- button.addEventListener("click", () => __privateMethod(this, _onCommand, onCommand_fn).call(this, command));
1993
+ button.htmlButton.addEventListener("click", () => __privateMethod(this, _onCommand, onCommand_fn).call(this, command));
1959
1994
  this.addElement(button);
1960
1995
  }
1961
1996
  this.buttons = buttons;
@@ -1983,8 +2018,8 @@ var TwistyButtons = class extends ManagedCustomElement {
1983
2018
  for (const command in buttonCommands) {
1984
2019
  const button = this.buttons[command];
1985
2020
  const info = buttonAppearances[command];
1986
- button.button.disabled = !info.enabled;
1987
- button.button.title = info.title;
2021
+ button.htmlButton.disabled = !info.enabled;
2022
+ button.htmlButton.title = info.title;
1988
2023
  button.setIcon(info.icon);
1989
2024
  button.hidden = !!info.hidden;
1990
2025
  }
@@ -2029,12 +2064,12 @@ var _iconManager;
2029
2064
  var TwistyButton = class extends ManagedCustomElement {
2030
2065
  constructor() {
2031
2066
  super(...arguments);
2032
- this.button = document.createElement("button");
2067
+ this.htmlButton = document.createElement("button");
2033
2068
  __privateAdd(this, _iconManager, new ClassListManager(this, "svg-", buttonIcons));
2034
2069
  }
2035
2070
  connectedCallback() {
2036
2071
  this.addCSS(buttonCSS);
2037
- this.addElement(this.button);
2072
+ this.addElement(this.htmlButton);
2038
2073
  }
2039
2074
  setIcon(iconName) {
2040
2075
  __privateGet(this, _iconManager).setValue(iconName);
@@ -2456,7 +2491,7 @@ var CurrentMoveInfoProp = class extends TwistyPropDerived {
2456
2491
  }
2457
2492
  const start = inputs.indexer.indexToMoveStartTimestamp(idx);
2458
2493
  const duration = inputs.indexer.moveDuration(idx);
2459
- const fraction = (inputs.detailedTimelineInfo.timestamp - start) / duration;
2494
+ const fraction = duration ? (inputs.detailedTimelineInfo.timestamp - start) / duration : 0;
2460
2495
  const end = start + duration;
2461
2496
  const currentMove = {
2462
2497
  move,
@@ -3610,6 +3645,13 @@ var SpriteProp = class extends TwistyPropDerived {
3610
3645
  }
3611
3646
  };
3612
3647
 
3648
+ // src/cubing/twisty/model/props/puzzle/state/DragInputProp.ts
3649
+ var DragInputProp = class extends SimpleTwistyPropSource {
3650
+ getDefaultValue() {
3651
+ return "auto";
3652
+ }
3653
+ };
3654
+
3613
3655
  // src/cubing/twisty/model/props/puzzle/state/MovePressInputProp.ts
3614
3656
  var MovePressInputProp = class extends SimpleTwistyPropSource {
3615
3657
  getDefaultValue() {
@@ -3738,6 +3780,7 @@ var TwistySceneModel = class {
3738
3780
  constructor(twistyPlayerModel) {
3739
3781
  this.twistyPlayerModel = twistyPlayerModel;
3740
3782
  this.background = new BackgroundProp();
3783
+ this.dragInput = new DragInputProp();
3741
3784
  this.foundationDisplay = new FoundationDisplayProp();
3742
3785
  this.foundationStickerSpriteURL = new URLProp();
3743
3786
  this.hintFacelet = new HintFaceletProp();
@@ -3891,7 +3934,6 @@ var TwistyPlayerModel = class {
3891
3934
  this.twistySceneModel.stickering.get()
3892
3935
  ]);
3893
3936
  const isExplorer = viewerLink === "experimental-twizzle-explorer";
3894
- console.log({ isExplorer, viewerLink });
3895
3937
  const url = new URL(`https://alpha.twizzle.net/${isExplorer ? "explore" : "edit"}/`);
3896
3938
  if (!alg.alg.experimentalIsEmpty()) {
3897
3939
  url.searchParams.set("alg", alg.alg.toString());
@@ -4094,6 +4136,12 @@ var TwistyPlayerSettable = class extends ManagedCustomElement {
4094
4136
  get experimentalHintSprite() {
4095
4137
  throw err("experimentalHintSprite");
4096
4138
  }
4139
+ set experimentalDragInput(dragInputMode) {
4140
+ this.experimentalModel.twistySceneModel.dragInput.set(dragInputMode);
4141
+ }
4142
+ get experimentalDragInput() {
4143
+ throw err("experimentalDragInput");
4144
+ }
4097
4145
  };
4098
4146
  var ExperimentalGetters = class {
4099
4147
  constructor(model) {
@@ -4129,6 +4177,7 @@ var twistyPlayerAttributeMap = {
4129
4177
  "back-view": "backView",
4130
4178
  "viewer-link": "viewerLink",
4131
4179
  "experimental-move-press-input": "experimentalMovePressInput",
4180
+ "experimental-drag-input": "experimentalDragInput",
4132
4181
  "experimental-title": "experimentalTitle",
4133
4182
  "experimental-video-url": "experimentalVideoURL",
4134
4183
  "experimental-competition-id": "experimentalCompetitionID",
@@ -4199,7 +4248,8 @@ var TwistyPlayer = class extends TwistyPlayerSettable {
4199
4248
  flash() {
4200
4249
  if (__privateGet(this, _flashLevel) === "auto") {
4201
4250
  __privateGet(this, _visualizationWrapper)?.animate([{ opacity: 0.25 }, { opacity: 1 }], {
4202
- duration: 250
4251
+ duration: 250,
4252
+ easing: "ease-out"
4203
4253
  });
4204
4254
  }
4205
4255
  }
@@ -4628,7 +4678,6 @@ setTwistyPlayer_fn = async function(twistyPlayer) {
4628
4678
  }
4629
4679
  __privateSet(this, _twistyPlayer, twistyPlayer);
4630
4680
  __privateGet(this, _twistyPlayer).experimentalModel.alg.addFreshListener((algWithIssues) => {
4631
- console.log("setting alg from ", algWithIssues);
4632
4681
  this.setAlg(algWithIssues.alg);
4633
4682
  });
4634
4683
  const sourceAlg = (await __privateGet(this, _twistyPlayer).experimentalModel.alg.get()).alg;
@@ -5183,6 +5232,7 @@ var URLParamUpdater = class {
5183
5232
  this.listenToAlgProp(model.setupAlg, "setup-alg");
5184
5233
  this.listenToStringSourceProp(model.twistySceneModel.stickering, "stickering");
5185
5234
  this.listenToStringSourceProp(model.setupAnchor, "setup-anchor");
5235
+ this.listenToStringOrNullProp(model.title, "title");
5186
5236
  this.listenToStringOrNoValueProp(model.puzzleIDRequest, "puzzle", NO_VALUE);
5187
5237
  this.listenToStringOrNoValueProp(model.puzzleDescriptionRequest, "puzzle-description", NO_VALUE);
5188
5238
  }
@@ -5202,6 +5252,11 @@ var URLParamUpdater = class {
5202
5252
  this.setURLParam(key, s, actualDefaultString);
5203
5253
  });
5204
5254
  }
5255
+ async listenToStringOrNullProp(prop, key, defaultString = "") {
5256
+ prop.addFreshListener((s) => {
5257
+ this.setURLParam(key, s ?? defaultString, defaultString);
5258
+ });
5259
+ }
5205
5260
  async listenToStringOrNoValueProp(prop, key, defaultString) {
5206
5261
  prop.addFreshListener((s) => {
5207
5262
  if (s === NO_VALUE) {