cubing 0.20.2 → 0.21.0-pre12

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 (770) hide show
  1. package/README.md +6 -9
  2. package/dist/.DS_Store +0 -0
  3. package/dist/bin/puzzle-geometry-bin.js +1124 -1128
  4. package/dist/bin/puzzle-geometry-bin.js.map +3 -3
  5. package/dist/bundle-global/cubing.bundle-global.js +3978 -3587
  6. package/dist/esm/.DS_Store +0 -0
  7. package/dist/esm/{2x2x2.kpuzzle.json_-ZLJSYD5K.js → 2x2x2.kpuzzle.json-JOGUSQ4N.js} +3 -3
  8. package/dist/esm/{2x2x2.kpuzzle.json_-ZLJSYD5K.js.map → 2x2x2.kpuzzle.json-JOGUSQ4N.js.map} +1 -1
  9. package/dist/esm/{2x2x2.kpuzzle.svg-BNXPAM3A.js → 2x2x2.kpuzzle.svg-CQF2FTV7.js} +2 -2
  10. package/dist/esm/{2x2x2.kpuzzle.svg-BNXPAM3A.js.map → 2x2x2.kpuzzle.svg-CQF2FTV7.js.map} +0 -0
  11. package/dist/esm/3d-JZD3V366.js +39 -0
  12. package/dist/esm/3d-JZD3V366.js.map +7 -0
  13. package/dist/esm/{3x3x3-ll.kpuzzle.svg-EC42JHOH.js → 3x3x3-ll.kpuzzle.svg-53CBPG5O.js} +2 -2
  14. package/dist/esm/{3x3x3-ll.kpuzzle.svg-EC42JHOH.js.map → 3x3x3-ll.kpuzzle.svg-53CBPG5O.js.map} +0 -0
  15. package/dist/esm/{3x3x3.kpuzzle.svg-DUKG2WHC.js → 3x3x3.kpuzzle.svg-ERSSH66P.js} +2 -2
  16. package/dist/esm/{3x3x3.kpuzzle.svg-DUKG2WHC.js.map → 3x3x3.kpuzzle.svg-ERSSH66P.js.map} +0 -0
  17. package/dist/esm/alg/index.js +2 -2
  18. package/dist/esm/bluetooth/index.js +13 -11
  19. package/dist/esm/bluetooth/index.js.map +2 -2
  20. package/dist/esm/chunk-5DN4DAAX.js +2512 -0
  21. package/dist/esm/chunk-5DN4DAAX.js.map +7 -0
  22. package/dist/esm/{chunk-KKSDHNLH.js → chunk-7GADUDIG.js} +49 -71
  23. package/dist/esm/chunk-7GADUDIG.js.map +7 -0
  24. package/dist/esm/{chunk-YNB7QLBF.js → chunk-BU5PUJK3.js} +9 -10
  25. package/dist/esm/chunk-BU5PUJK3.js.map +7 -0
  26. package/dist/esm/chunk-CQS6JZ7G.js +762 -0
  27. package/dist/esm/chunk-CQS6JZ7G.js.map +7 -0
  28. package/dist/esm/{chunk-2GRKPQQL.js → chunk-RE7MIN5R.js} +2 -2
  29. package/dist/esm/{chunk-2GRKPQQL.js.map → chunk-RE7MIN5R.js.map} +0 -0
  30. package/dist/esm/{chunk-WJ7AVUI7.js → chunk-WO2AXYFE.js} +12 -1
  31. package/dist/esm/{chunk-WJ7AVUI7.js.map → chunk-WO2AXYFE.js.map} +0 -0
  32. package/dist/esm/{chunk-CWVB5RRW.js → chunk-YV3RT5PX.js} +625 -1282
  33. package/dist/esm/chunk-YV3RT5PX.js.map +7 -0
  34. package/dist/esm/{clock.kpuzzle.json_-PXORG6YF.js → clock.kpuzzle.json-EKWRMHJM.js} +3 -3
  35. package/dist/esm/{clock.kpuzzle.json_-PXORG6YF.js.map → clock.kpuzzle.json-EKWRMHJM.js.map} +1 -1
  36. package/dist/esm/{clock.kpuzzle.svg-E52B5OQV.js → clock.kpuzzle.svg-B7TMN3SY.js} +2 -2
  37. package/dist/esm/{clock.kpuzzle.svg-E52B5OQV.js.map → clock.kpuzzle.svg-B7TMN3SY.js.map} +0 -0
  38. package/dist/esm/esm-test-worker.js +2 -2
  39. package/dist/esm/esm-test-worker.js.map +1 -1
  40. package/dist/esm/kpuzzle/index.js +5 -3
  41. package/dist/esm/{node-SIGYKAZG.js → node-BSAQKO3G.js} +2 -2
  42. package/dist/esm/{node-SIGYKAZG.js.map → node-BSAQKO3G.js.map} +0 -0
  43. package/dist/esm/{node-BHGOVUN3.js → node-WEHVBEKP.js} +2 -2
  44. package/dist/esm/{node-BHGOVUN3.js.map → node-WEHVBEKP.js.map} +0 -0
  45. package/dist/esm/notation/index.js +3 -3
  46. package/dist/esm/protocol/index.js +3 -3
  47. package/dist/esm/puzzle-geometry/index.js +1085 -1179
  48. package/dist/esm/puzzle-geometry/index.js.map +3 -3
  49. package/dist/esm/puzzles/index.js +10 -4
  50. package/dist/esm/{pyraminx.kpuzzle.svg-QKUJX37T.js → pyraminx.kpuzzle.svg-QBBMZVDY.js} +2 -2
  51. package/dist/esm/{pyraminx.kpuzzle.svg-QKUJX37T.js.map → pyraminx.kpuzzle.svg-QBBMZVDY.js.map} +0 -0
  52. package/dist/esm/scramble/index.js +5 -4
  53. package/dist/esm/search/index.js +7 -4
  54. package/dist/esm/{sq1-hyperorbit.kpuzzle.json_-7KW5LSXC.js → sq1-hyperorbit.kpuzzle.json-N3FGCPML.js} +3 -3
  55. package/dist/esm/{sq1-hyperorbit.kpuzzle.json_-7KW5LSXC.js.map → sq1-hyperorbit.kpuzzle.json-N3FGCPML.js.map} +1 -1
  56. package/dist/esm/{sq1-hyperorbit.kpuzzle.svg-7Y7N37NN.js → sq1-hyperorbit.kpuzzle.svg-ID57EER7.js} +2 -2
  57. package/dist/esm/{sq1-hyperorbit.kpuzzle.svg-7Y7N37NN.js.map → sq1-hyperorbit.kpuzzle.svg-ID57EER7.js.map} +0 -0
  58. package/dist/esm/stream/index.js +3 -3
  59. package/dist/esm/stream/index.js.map +2 -2
  60. package/dist/esm/twisty/index.js +4442 -3214
  61. package/dist/esm/twisty/index.js.map +3 -3
  62. package/dist/esm/worker-inside-generated-string-KDZOUGJF.js +2831 -0
  63. package/dist/esm/worker-inside-generated-string-KDZOUGJF.js.map +7 -0
  64. package/dist/types/alg/Alg.d.ts +88 -0
  65. package/dist/types/alg/Alg.d.ts.map +1 -1
  66. package/dist/types/alg/Alg.spec.d.ts +2 -0
  67. package/dist/types/alg/Alg.spec.d.ts.map +1 -0
  68. package/dist/types/alg/common.d.ts.map +1 -1
  69. package/dist/types/alg/operation.spec.d.ts +2 -0
  70. package/dist/types/alg/operation.spec.d.ts.map +1 -0
  71. package/dist/types/alg/parse.spec.d.ts +2 -0
  72. package/dist/types/alg/parse.spec.d.ts.map +1 -0
  73. package/dist/types/alg/test/alg-comparison.d.ts.map +1 -1
  74. package/dist/types/alg/test/alg.spec.d.ts +2 -0
  75. package/dist/types/alg/test/alg.spec.d.ts.map +1 -0
  76. package/dist/types/alg/units/leaves/LineComment.spec.d.ts +2 -0
  77. package/dist/types/alg/units/leaves/LineComment.spec.d.ts.map +1 -0
  78. package/dist/types/alg/units/leaves/Move.spec.d.ts +2 -0
  79. package/dist/types/alg/units/leaves/Move.spec.d.ts.map +1 -0
  80. package/dist/types/alg/url.spec.d.ts +2 -0
  81. package/dist/types/alg/url.spec.d.ts.map +1 -0
  82. package/dist/types/bluetooth/smart-puzzle/bluetooth-puzzle.d.ts +1 -1
  83. package/dist/types/bluetooth/smart-puzzle/bluetooth-puzzle.d.ts.map +1 -1
  84. package/dist/types/bluetooth/smart-puzzle/giiker.spec.d.ts +5 -0
  85. package/dist/types/bluetooth/smart-puzzle/giiker.spec.d.ts.map +1 -0
  86. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.d.ts +3 -0
  87. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.d.ts.map +1 -0
  88. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.d.ts +2 -0
  89. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.d.ts.map +1 -0
  90. package/dist/types/kpuzzle/canon.spec.d.ts +2 -0
  91. package/dist/types/kpuzzle/canon.spec.d.ts.map +1 -0
  92. package/dist/types/kpuzzle/index.d.ts +1 -0
  93. package/dist/types/kpuzzle/index.d.ts.map +1 -1
  94. package/dist/types/kpuzzle/kpuzzle.spec.d.ts +2 -0
  95. package/dist/types/kpuzzle/kpuzzle.spec.d.ts.map +1 -0
  96. package/dist/types/kpuzzle/prunetable.spec.d.ts +2 -0
  97. package/dist/types/kpuzzle/prunetable.spec.d.ts.map +1 -0
  98. package/dist/types/kpuzzle/svg.d.ts.map +1 -1
  99. package/dist/types/kpuzzle/transformations.spec.d.ts +2 -0
  100. package/dist/types/kpuzzle/transformations.spec.d.ts.map +1 -0
  101. package/dist/types/protocol/binary/binary3x3x3.spec.d.ts +2 -0
  102. package/dist/types/protocol/binary/binary3x3x3.spec.d.ts.map +1 -0
  103. package/dist/types/protocol/binary/hex.spec.d.ts +2 -0
  104. package/dist/types/protocol/binary/hex.spec.d.ts.map +1 -0
  105. package/dist/types/protocol/binary/orbit-indexing.spec.d.ts +2 -0
  106. package/dist/types/protocol/binary/orbit-indexing.spec.d.ts.map +1 -0
  107. package/dist/types/puzzle-geometry/Options.d.ts +45 -1
  108. package/dist/types/puzzle-geometry/Options.d.ts.map +1 -1
  109. package/dist/types/puzzle-geometry/PGPuzzles.spec.d.ts +2 -0
  110. package/dist/types/puzzle-geometry/PGPuzzles.spec.d.ts.map +1 -0
  111. package/dist/types/puzzle-geometry/PermOriSet.d.ts +39 -39
  112. package/dist/types/puzzle-geometry/PermOriSet.d.ts.map +1 -1
  113. package/dist/types/puzzle-geometry/PuzzleGeometry.d.ts +118 -110
  114. package/dist/types/puzzle-geometry/PuzzleGeometry.d.ts.map +1 -1
  115. package/dist/types/puzzle-geometry/Quat.d.ts +0 -11
  116. package/dist/types/puzzle-geometry/Quat.d.ts.map +1 -1
  117. package/dist/types/puzzle-geometry/Quat.spec.d.ts +2 -0
  118. package/dist/types/puzzle-geometry/Quat.spec.d.ts.map +1 -0
  119. package/dist/types/puzzle-geometry/SchreierSims.d.ts.map +1 -1
  120. package/dist/types/puzzle-geometry/index.d.ts +2 -4
  121. package/dist/types/puzzle-geometry/index.d.ts.map +1 -1
  122. package/dist/types/puzzle-geometry/interfaces.d.ts +1 -21
  123. package/dist/types/puzzle-geometry/interfaces.d.ts.map +1 -1
  124. package/dist/types/puzzle-geometry/orientcenters.spec.d.ts +2 -0
  125. package/dist/types/puzzle-geometry/orientcenters.spec.d.ts.map +1 -0
  126. package/dist/types/puzzles/async/async-pg3d.d.ts.map +1 -1
  127. package/dist/types/puzzles/customPGPuzzleLoader.d.ts +12 -0
  128. package/dist/types/puzzles/customPGPuzzleLoader.d.ts.map +1 -0
  129. package/dist/types/puzzles/implementations/2x2x2/{2x2x2.kpuzzle.json_.d.ts → 2x2x2.kpuzzle.json.d.ts} +1 -1
  130. package/dist/types/puzzles/implementations/2x2x2/2x2x2.kpuzzle.json.d.ts.map +1 -0
  131. package/dist/types/puzzles/implementations/3x3x3/index.d.ts.map +1 -1
  132. package/dist/types/puzzles/implementations/clock/{clock.kpuzzle.json_.d.ts → clock.kpuzzle.json.d.ts} +1 -1
  133. package/dist/types/puzzles/implementations/clock/clock.kpuzzle.json.d.ts.map +1 -0
  134. package/dist/types/puzzles/implementations/fto/index.d.ts +2 -2
  135. package/dist/types/puzzles/implementations/fto/index.d.ts.map +1 -1
  136. package/dist/types/puzzles/implementations/pyraminx/{pyraminx.kpuzzle.json_.d.ts → pyraminx.kpuzzle.json.d.ts} +1 -1
  137. package/dist/types/puzzles/implementations/pyraminx/pyraminx.kpuzzle.json.d.ts.map +1 -0
  138. package/dist/types/puzzles/implementations/square1/index.d.ts.map +1 -1
  139. package/dist/types/puzzles/implementations/square1/{sq1-hyperorbit.kpuzzle.json_.d.ts → sq1-hyperorbit.kpuzzle.json.d.ts} +1 -1
  140. package/dist/types/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.json.d.ts.map +1 -0
  141. package/dist/types/puzzles/index.d.ts +4 -2
  142. package/dist/types/puzzles/index.d.ts.map +1 -1
  143. package/dist/types/puzzles/stickerings/appearance.d.ts +9 -9
  144. package/dist/types/puzzles/stickerings/appearance.d.ts.map +1 -1
  145. package/dist/types/puzzles/stickerings/cube-stickerings.d.ts.map +1 -1
  146. package/dist/types/puzzles/stickerings/fto-stickerings.d.ts.map +1 -1
  147. package/dist/types/puzzles/stickerings/global-custom-stickering-hack.d.ts +3 -0
  148. package/dist/types/puzzles/stickerings/global-custom-stickering-hack.d.ts.map +1 -0
  149. package/dist/types/search/index.d.ts +1 -1
  150. package/dist/types/search/index.d.ts.map +1 -1
  151. package/dist/types/search/inside/api.d.ts +2 -1
  152. package/dist/types/search/inside/api.d.ts.map +1 -1
  153. package/dist/types/search/inside/api.spec.d.ts +2 -0
  154. package/dist/types/search/inside/api.spec.d.ts.map +1 -0
  155. package/dist/types/search/inside/solve/parseSGS.d.ts.map +1 -1
  156. package/dist/types/search/inside/solve/puzzles/3x3x3/filter.d.ts.map +1 -1
  157. package/dist/types/search/inside/solve/puzzles/3x3x3/index.d.ts.map +1 -1
  158. package/dist/types/search/inside/solve/puzzles/megaminx.sgs.json.d.ts.map +1 -1
  159. package/dist/types/search/inside/solve/puzzles/sgs-defs.spec.d.ts +2 -0
  160. package/dist/types/search/inside/solve/puzzles/sgs-defs.spec.d.ts.map +1 -0
  161. package/dist/types/search/inside/solve/puzzles/skewb.sgs.json.d.ts.map +1 -1
  162. package/dist/types/search/inside/solve/tremble.d.ts.map +1 -1
  163. package/dist/types/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.d.ts +4 -31
  164. package/dist/types/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.d.ts.map +1 -1
  165. package/dist/types/search/inside/solve/vendor/cstimer/src/js/scramble/scramble_444.d.ts.map +1 -1
  166. package/dist/types/search/inside/solve/vendor/min2phase/gwt.d.ts +3 -0
  167. package/dist/types/search/inside/solve/vendor/min2phase/gwt.d.ts.map +1 -0
  168. package/dist/types/search/inside/solve/vendor/random-uint-below/get-random-values.d.ts.map +1 -1
  169. package/dist/types/search/inside/solve/vendor/random-uint-below/random-int.d.ts.map +1 -1
  170. package/dist/types/search/inside/solve/vendor/sq12phase/scramble_sq1.d.ts.map +1 -1
  171. package/dist/types/search/instantiator.d.ts.map +1 -1
  172. package/dist/types/search/outside.d.ts +4 -2
  173. package/dist/types/search/outside.d.ts.map +1 -1
  174. package/dist/types/search/worker-inside-generated-string.d.ts +1 -1
  175. package/dist/types/search/worker-inside-generated-string.d.ts.map +1 -1
  176. package/dist/types/stream/twizzle/TwizzleStream.d.ts +9 -8
  177. package/dist/types/stream/twizzle/TwizzleStream.d.ts.map +1 -1
  178. package/dist/types/stream/websocket-proxy.d.ts +1 -1
  179. package/dist/types/stream/websocket-proxy.d.ts.map +1 -1
  180. package/dist/types/twisty/controllers/TwistyAnimationController.d.ts +34 -0
  181. package/dist/types/twisty/controllers/TwistyAnimationController.d.ts.map +1 -0
  182. package/dist/types/twisty/controllers/TwistyPlayerController.d.ts +16 -0
  183. package/dist/types/twisty/controllers/TwistyPlayerController.d.ts.map +1 -0
  184. package/dist/types/twisty/heavy-code-imports/3d.d.ts +3 -0
  185. package/dist/types/twisty/heavy-code-imports/3d.d.ts.map +1 -0
  186. package/dist/types/twisty/heavy-code-imports/dynamic-entries/3d.d.ts +12 -0
  187. package/dist/types/twisty/heavy-code-imports/dynamic-entries/3d.d.ts.map +1 -0
  188. package/dist/types/twisty/index.d.ts +20 -15
  189. package/dist/types/twisty/index.d.ts.map +1 -1
  190. package/dist/types/twisty/model/PromiseFreshener.d.ts +14 -0
  191. package/dist/types/twisty/model/PromiseFreshener.d.ts.map +1 -0
  192. package/dist/types/twisty/model/TwistyPlayerModel.d.ts +84 -0
  193. package/dist/types/twisty/model/TwistyPlayerModel.d.ts.map +1 -0
  194. package/dist/types/twisty/model/UserVisibleErrorTracker.d.ts +11 -0
  195. package/dist/types/twisty/model/UserVisibleErrorTracker.d.ts.map +1 -0
  196. package/dist/types/twisty/model/helpers.d.ts +5 -0
  197. package/dist/types/twisty/model/helpers.d.ts.map +1 -0
  198. package/dist/types/twisty/model/props/TwistyProp.d.ts +60 -0
  199. package/dist/types/twisty/model/props/TwistyProp.d.ts.map +1 -0
  200. package/dist/types/twisty/model/props/TwistyProp.spec.d.ts +5 -0
  201. package/dist/types/twisty/model/props/TwistyProp.spec.d.ts.map +1 -0
  202. package/dist/types/twisty/model/props/TwistyPropDebugger.d.ts +28 -0
  203. package/dist/types/twisty/model/props/TwistyPropDebugger.d.ts.map +1 -0
  204. package/dist/types/twisty/model/props/general/URLProp.d.ts +6 -0
  205. package/dist/types/twisty/model/props/general/URLProp.d.ts.map +1 -0
  206. package/dist/types/twisty/model/props/puzzle/display/HintFaceletProp.d.ts +7 -0
  207. package/dist/types/twisty/model/props/puzzle/display/HintFaceletProp.d.ts.map +1 -0
  208. package/dist/types/twisty/model/props/puzzle/display/SpriteProp.d.ts +10 -0
  209. package/dist/types/twisty/model/props/puzzle/display/SpriteProp.d.ts.map +1 -0
  210. package/dist/types/twisty/model/props/puzzle/display/StickeringProp.d.ts +6 -0
  211. package/dist/types/twisty/model/props/puzzle/display/StickeringProp.d.ts.map +1 -0
  212. package/dist/types/twisty/model/props/puzzle/state/AlgProp.d.ts +27 -0
  213. package/dist/types/twisty/model/props/puzzle/state/AlgProp.d.ts.map +1 -0
  214. package/dist/types/twisty/model/props/puzzle/state/AlgTransformationProp.d.ts +14 -0
  215. package/dist/types/twisty/model/props/puzzle/state/AlgTransformationProp.d.ts.map +1 -0
  216. package/dist/types/twisty/model/props/puzzle/state/AnchoredStartProp.d.ts +15 -0
  217. package/dist/types/twisty/model/props/puzzle/state/AnchoredStartProp.d.ts.map +1 -0
  218. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesProp.d.ts +12 -0
  219. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesProp.d.ts.map +1 -0
  220. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesSimplified.d.ts +17 -0
  221. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesSimplified.d.ts.map +1 -0
  222. package/dist/types/twisty/model/props/puzzle/state/CurrentTransformationProp.d.ts +15 -0
  223. package/dist/types/twisty/model/props/puzzle/state/CurrentTransformationProp.d.ts.map +1 -0
  224. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorProp.d.ts +17 -0
  225. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorProp.d.ts.map +1 -0
  226. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.d.ts +12 -0
  227. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.d.ts.map +1 -0
  228. package/dist/types/twisty/model/props/puzzle/state/IndexerProp.d.ts +15 -0
  229. package/dist/types/twisty/model/props/puzzle/state/IndexerProp.d.ts.map +1 -0
  230. package/dist/types/twisty/model/props/puzzle/state/LegacyPositionProp.d.ts +12 -0
  231. package/dist/types/twisty/model/props/puzzle/state/LegacyPositionProp.d.ts.map +1 -0
  232. package/dist/types/twisty/model/props/puzzle/state/PuzzleAlgProp.d.ts +13 -0
  233. package/dist/types/twisty/model/props/puzzle/state/PuzzleAlgProp.d.ts.map +1 -0
  234. package/dist/types/twisty/model/props/puzzle/state/SetupAnchorProp.d.ts +6 -0
  235. package/dist/types/twisty/model/props/puzzle/state/SetupAnchorProp.d.ts.map +1 -0
  236. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDefProp.d.ts +11 -0
  237. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDefProp.d.ts.map +1 -0
  238. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.d.ts +6 -0
  239. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.d.ts.map +1 -0
  240. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDProp.d.ts +11 -0
  241. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDProp.d.ts.map +1 -0
  242. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.d.ts +6 -0
  243. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.d.ts.map +1 -0
  244. package/dist/types/twisty/model/props/puzzle/structure/PuzzleLoaderProp.d.ts +13 -0
  245. package/dist/types/twisty/model/props/puzzle/structure/PuzzleLoaderProp.d.ts.map +1 -0
  246. package/dist/types/twisty/model/props/timeline/CoarseTimelineInfoProp.d.ts +25 -0
  247. package/dist/types/twisty/model/props/timeline/CoarseTimelineInfoProp.d.ts.map +1 -0
  248. package/dist/types/twisty/model/props/timeline/DetailedTimelineInfoProp.d.ts +23 -0
  249. package/dist/types/twisty/model/props/timeline/DetailedTimelineInfoProp.d.ts.map +1 -0
  250. package/dist/types/twisty/model/props/timeline/PlayingInfoProp.d.ts +15 -0
  251. package/dist/types/twisty/model/props/timeline/PlayingInfoProp.d.ts.map +1 -0
  252. package/dist/types/twisty/model/props/timeline/TempoScaleProp.d.ts +6 -0
  253. package/dist/types/twisty/model/props/timeline/TempoScaleProp.d.ts.map +1 -0
  254. package/dist/types/twisty/model/props/timeline/TimestampRequestProp.d.ts +16 -0
  255. package/dist/types/twisty/model/props/timeline/TimestampRequestProp.d.ts.map +1 -0
  256. package/dist/types/twisty/model/props/viewer/BackViewProp.d.ts +7 -0
  257. package/dist/types/twisty/model/props/viewer/BackViewProp.d.ts.map +1 -0
  258. package/dist/types/twisty/model/props/viewer/BackgroundProp.d.ts +7 -0
  259. package/dist/types/twisty/model/props/viewer/BackgroundProp.d.ts.map +1 -0
  260. package/dist/types/twisty/model/props/viewer/ButtonAppearanceProp.d.ts +22 -0
  261. package/dist/types/twisty/model/props/viewer/ButtonAppearanceProp.d.ts.map +1 -0
  262. package/dist/types/twisty/model/props/viewer/ControlPanelProp.d.ts +7 -0
  263. package/dist/types/twisty/model/props/viewer/ControlPanelProp.d.ts.map +1 -0
  264. package/dist/types/twisty/model/props/viewer/LatitudeLimit.d.ts +6 -0
  265. package/dist/types/twisty/model/props/viewer/LatitudeLimit.d.ts.map +1 -0
  266. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesProp.d.ts +16 -0
  267. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesProp.d.ts.map +1 -0
  268. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesRequestProp.d.ts +15 -0
  269. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesRequestProp.d.ts.map +1 -0
  270. package/dist/types/twisty/model/props/viewer/TimeRangeProp.d.ts +11 -0
  271. package/dist/types/twisty/model/props/viewer/TimeRangeProp.d.ts.map +1 -0
  272. package/dist/types/twisty/model/props/viewer/ViewerLinkProp.d.ts +7 -0
  273. package/dist/types/twisty/model/props/viewer/ViewerLinkProp.d.ts.map +1 -0
  274. package/dist/types/twisty/model/props/viewer/VisualizationProp.d.ts +7 -0
  275. package/dist/types/twisty/model/props/viewer/VisualizationProp.d.ts.map +1 -0
  276. package/dist/types/twisty/model/props/viewer/VisualizationStrategyProp.d.ts +13 -0
  277. package/dist/types/twisty/model/props/viewer/VisualizationStrategyProp.d.ts.map +1 -0
  278. package/dist/types/twisty/{animation → old/animation}/RenderScheduler.d.ts +3 -0
  279. package/dist/types/twisty/old/animation/RenderScheduler.d.ts.map +1 -0
  280. package/dist/types/twisty/{animation → old/animation}/Timeline.d.ts +0 -0
  281. package/dist/types/twisty/old/animation/Timeline.d.ts.map +1 -0
  282. package/dist/types/twisty/{animation → old/animation}/cursor/AlgCursor.d.ts +4 -4
  283. package/dist/types/twisty/old/animation/cursor/AlgCursor.d.ts.map +1 -0
  284. package/dist/types/twisty/{animation → old/animation}/cursor/CursorTypes.d.ts +4 -4
  285. package/dist/types/twisty/old/animation/cursor/CursorTypes.d.ts.map +1 -0
  286. package/dist/types/twisty/{animation → old/animation}/easing.d.ts +0 -0
  287. package/dist/types/twisty/old/animation/easing.d.ts.map +1 -0
  288. package/dist/types/twisty/{animation → old/animation}/indexer/AlgDuration.d.ts +1 -1
  289. package/dist/types/twisty/old/animation/indexer/AlgDuration.d.ts.map +1 -0
  290. package/dist/types/twisty/old/animation/indexer/AlgIndexer.d.ts +36 -0
  291. package/dist/types/twisty/old/animation/indexer/AlgIndexer.d.ts.map +1 -0
  292. package/dist/types/twisty/{animation → old/animation}/indexer/SimpleAlgIndexer.d.ts +3 -3
  293. package/dist/types/twisty/old/animation/indexer/SimpleAlgIndexer.d.ts.map +1 -0
  294. package/dist/types/twisty/{animation → old/animation}/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts +6 -5
  295. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts.map +1 -0
  296. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.d.ts +22 -0
  297. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.d.ts.map +1 -0
  298. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/simul-moves.d.ts +26 -0
  299. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/simul-moves.d.ts.map +1 -0
  300. package/dist/types/twisty/{animation → old/animation}/indexer/tree/AlgWalker.d.ts +2 -2
  301. package/dist/types/twisty/old/animation/indexer/tree/AlgWalker.d.ts.map +1 -0
  302. package/dist/types/twisty/{animation → old/animation}/indexer/tree/TreeAlgIndexer.d.ts +3 -3
  303. package/dist/types/twisty/old/animation/indexer/tree/TreeAlgIndexer.d.ts.map +1 -0
  304. package/dist/types/twisty/old/animation/indexer/tree/chunkAlgs.d.ts +3 -0
  305. package/dist/types/twisty/old/animation/indexer/tree/chunkAlgs.d.ts.map +1 -0
  306. package/dist/types/twisty/{animation → old/animation}/stream/timeline-move-calculation-draft.d.ts +1 -1
  307. package/dist/types/twisty/old/animation/stream/timeline-move-calculation-draft.d.ts.map +1 -0
  308. package/dist/types/twisty/{dom/TwistyAlgViewer.css_.d.ts → old/dom/TwistyAlgViewerV1.css.d.ts} +1 -1
  309. package/dist/types/twisty/old/dom/TwistyAlgViewerV1.css.d.ts.map +1 -0
  310. package/dist/types/twisty/old/dom/TwistyAlgViewerV1.d.ts +52 -0
  311. package/dist/types/twisty/old/dom/TwistyAlgViewerV1.d.ts.map +1 -0
  312. package/dist/types/twisty/{dom/TwistyPlayer.css_.d.ts → old/dom/TwistyPlayer.css.d.ts} +1 -1
  313. package/dist/types/twisty/old/dom/TwistyPlayer.css.d.ts.map +1 -0
  314. package/dist/types/twisty/{dom → old/dom}/TwistyPlayer.d.ts +8 -8
  315. package/dist/types/twisty/old/dom/TwistyPlayer.d.ts.map +1 -0
  316. package/dist/types/twisty/old/dom/TwistyPlayer.spec.d.ts +5 -0
  317. package/dist/types/twisty/old/dom/TwistyPlayer.spec.d.ts.map +1 -0
  318. package/dist/types/twisty/{dom → old/dom}/TwistyPlayerConfig.d.ts +10 -5
  319. package/dist/types/twisty/old/dom/TwistyPlayerConfig.d.ts.map +1 -0
  320. package/dist/types/twisty/old/dom/controls/TwistyControlElement.d.ts +2 -0
  321. package/dist/types/twisty/old/dom/controls/TwistyControlElement.d.ts.map +1 -0
  322. package/dist/types/twisty/{dom/controls/TwistyScrubber.css_.d.ts → old/dom/controls/TwistyScrubber.css.d.ts} +1 -1
  323. package/dist/types/twisty/old/dom/controls/TwistyScrubber.css.d.ts.map +1 -0
  324. package/dist/types/twisty/{dom → old/dom}/controls/TwistyScrubber.d.ts +1 -1
  325. package/dist/types/twisty/old/dom/controls/TwistyScrubber.d.ts.map +1 -0
  326. package/dist/types/twisty/{dom/controls/buttons.css_.d.ts → old/dom/controls/buttons.css.d.ts} +1 -1
  327. package/dist/types/twisty/old/dom/controls/buttons.css.d.ts.map +1 -0
  328. package/dist/types/twisty/{dom → old/dom}/controls/buttons.d.ts +1 -1
  329. package/dist/types/twisty/old/dom/controls/buttons.d.ts.map +1 -0
  330. package/dist/types/twisty/old/dom/controls/buttons.spec.d.ts +5 -0
  331. package/dist/types/twisty/old/dom/controls/buttons.spec.d.ts.map +1 -0
  332. package/dist/types/twisty/{dom → old/dom}/element/ClassListManager.d.ts +0 -0
  333. package/dist/types/twisty/old/dom/element/ClassListManager.d.ts.map +1 -0
  334. package/dist/types/twisty/{dom → old/dom}/element/ElementConfig.d.ts +1 -1
  335. package/dist/types/twisty/old/dom/element/ElementConfig.d.ts.map +1 -0
  336. package/dist/types/twisty/{dom → old/dom}/element/ManagedCustomElement.d.ts +0 -0
  337. package/dist/types/twisty/old/dom/element/ManagedCustomElement.d.ts.map +1 -0
  338. package/dist/types/twisty/{dom → old/dom}/element/node-custom-element-shims.d.ts +0 -0
  339. package/dist/types/twisty/old/dom/element/node-custom-element-shims.d.ts.map +1 -0
  340. package/dist/types/twisty/{dom/stream/TwistyStreamSource.css_.d.ts → old/dom/stream/TwistyStreamSource.css.d.ts} +1 -1
  341. package/dist/types/twisty/old/dom/stream/TwistyStreamSource.css.d.ts.map +1 -0
  342. package/dist/types/twisty/{dom → old/dom}/stream/TwistyStreamSource.d.ts +0 -0
  343. package/dist/types/twisty/old/dom/stream/TwistyStreamSource.d.ts.map +1 -0
  344. package/dist/types/twisty/{dom → old/dom}/viewers/Twisty2DSVG.d.ts +2 -2
  345. package/dist/types/twisty/old/dom/viewers/Twisty2DSVG.d.ts.map +1 -0
  346. package/dist/types/twisty/{dom/viewers/Twisty2DSVGView.css_.d.ts → old/dom/viewers/Twisty2DSVGView.css.d.ts} +1 -1
  347. package/dist/types/twisty/old/dom/viewers/Twisty2DSVGView.css.d.ts.map +1 -0
  348. package/dist/types/twisty/{dom/viewers/Twisty3DCanvas.css_.d.ts → old/dom/viewers/Twisty3DCanvas.css.d.ts} +1 -1
  349. package/dist/types/twisty/old/dom/viewers/Twisty3DCanvas.css.d.ts.map +1 -0
  350. package/dist/types/twisty/{dom → old/dom}/viewers/Twisty3DCanvas.d.ts +1 -2
  351. package/dist/types/twisty/old/dom/viewers/Twisty3DCanvas.d.ts.map +1 -0
  352. package/dist/types/twisty/{dom → old/dom}/viewers/TwistyOrbitControls.d.ts +0 -0
  353. package/dist/types/twisty/old/dom/viewers/TwistyOrbitControls.d.ts.map +1 -0
  354. package/dist/types/twisty/old/dom/viewers/TwistyViewerElement.d.ts +4 -0
  355. package/dist/types/twisty/old/dom/viewers/TwistyViewerElement.d.ts.map +1 -0
  356. package/dist/types/twisty/{dom/viewers/TwistyViewerWrapper.css_.d.ts → old/dom/viewers/TwistyViewerWrapper.css.d.ts} +1 -1
  357. package/dist/types/twisty/old/dom/viewers/TwistyViewerWrapper.css.d.ts.map +1 -0
  358. package/dist/types/twisty/{dom → old/dom}/viewers/TwistyViewerWrapper.d.ts +0 -0
  359. package/dist/types/twisty/old/dom/viewers/TwistyViewerWrapper.d.ts.map +1 -0
  360. package/dist/types/twisty/old/dom/viewers/canvas.d.ts +3 -0
  361. package/dist/types/twisty/old/dom/viewers/canvas.d.ts.map +1 -0
  362. package/dist/types/twisty/views/2D/Twisty2DPuzzle.d.ts +29 -0
  363. package/dist/types/twisty/views/2D/Twisty2DPuzzle.d.ts.map +1 -0
  364. package/dist/types/twisty/views/2D/Twisty2DPuzzleWrapper.d.ts +16 -0
  365. package/dist/types/twisty/views/2D/Twisty2DPuzzleWrapper.d.ts.map +1 -0
  366. package/dist/types/twisty/views/2D/Twisty2DSceneWrapper.d.ts +20 -0
  367. package/dist/types/twisty/views/2D/Twisty2DSceneWrapper.d.ts.map +1 -0
  368. package/dist/types/twisty/views/3D/RendererPool.d.ts +4 -0
  369. package/dist/types/twisty/views/3D/RendererPool.d.ts.map +1 -0
  370. package/dist/types/twisty/{3D → views/3D}/TAU.d.ts +0 -0
  371. package/dist/types/twisty/views/3D/TAU.d.ts.map +1 -0
  372. package/dist/types/twisty/views/3D/Twisty3DPuzzleWrapper.d.ts +17 -0
  373. package/dist/types/twisty/views/3D/Twisty3DPuzzleWrapper.d.ts.map +1 -0
  374. package/dist/types/twisty/{3D → views/3D}/Twisty3DRenderTarget.d.ts +0 -0
  375. package/dist/types/twisty/views/3D/Twisty3DRenderTarget.d.ts.map +1 -0
  376. package/dist/types/twisty/{3D → views/3D}/Twisty3DScene.d.ts +0 -0
  377. package/dist/types/twisty/views/3D/Twisty3DScene.d.ts.map +1 -0
  378. package/dist/types/twisty/views/3D/Twisty3DSceneWrapper.d.ts +28 -0
  379. package/dist/types/twisty/views/3D/Twisty3DSceneWrapper.d.ts.map +1 -0
  380. package/dist/types/twisty/views/3D/Twisty3DVantage.d.ts +32 -0
  381. package/dist/types/twisty/views/3D/Twisty3DVantage.d.ts.map +1 -0
  382. package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.d.ts +41 -0
  383. package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.d.ts.map +1 -0
  384. package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.spec.d.ts +5 -0
  385. package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.spec.d.ts.map +1 -0
  386. package/dist/types/twisty/{3D → views/3D}/puzzles/Cube3D.d.ts +11 -7
  387. package/dist/types/twisty/views/3D/puzzles/Cube3D.d.ts.map +1 -0
  388. package/dist/types/twisty/{3D → views/3D}/puzzles/KPuzzleWrapper.d.ts +2 -2
  389. package/dist/types/twisty/views/3D/puzzles/KPuzzleWrapper.d.ts.map +1 -0
  390. package/dist/types/twisty/views/3D/puzzles/PG3D.d.ts +57 -0
  391. package/dist/types/twisty/views/3D/puzzles/PG3D.d.ts.map +1 -0
  392. package/dist/types/twisty/{3D → views/3D}/puzzles/Twisty3DPuzzle.d.ts +1 -1
  393. package/dist/types/twisty/views/3D/puzzles/Twisty3DPuzzle.d.ts.map +1 -0
  394. package/dist/types/twisty/{3D → views/3D}/puzzles/TwistyTestBox.d.ts +2 -2
  395. package/dist/types/twisty/views/3D/puzzles/TwistyTestBox.d.ts.map +1 -0
  396. package/dist/types/twisty/views/TwistyAlgEditor/LeafTokens.d.ts +18 -0
  397. package/dist/types/twisty/views/TwistyAlgEditor/LeafTokens.d.ts.map +1 -0
  398. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.css.d.ts +3 -0
  399. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.css.d.ts.map +1 -0
  400. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.d.ts +40 -0
  401. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.d.ts.map +1 -0
  402. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.spec.d.ts +5 -0
  403. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.spec.d.ts.map +1 -0
  404. package/dist/types/twisty/views/TwistyAlgEditor/model.d.ts +61 -0
  405. package/dist/types/twisty/views/TwistyAlgEditor/model.d.ts.map +1 -0
  406. package/dist/types/twisty/views/TwistyAlgViewer.css.d.ts +3 -0
  407. package/dist/types/twisty/views/TwistyAlgViewer.css.d.ts.map +1 -0
  408. package/dist/types/twisty/{dom → views}/TwistyAlgViewer.d.ts +6 -6
  409. package/dist/types/twisty/views/TwistyAlgViewer.d.ts.map +1 -0
  410. package/dist/types/twisty/views/TwistyPlayer.d.ts +97 -0
  411. package/dist/types/twisty/views/TwistyPlayer.d.ts.map +1 -0
  412. package/dist/types/twisty/views/TwistyPlayerSettable.d.ts +71 -0
  413. package/dist/types/twisty/views/TwistyPlayerSettable.d.ts.map +1 -0
  414. package/dist/types/twisty/views/control-panel/TwistyButtonsV2.d.ts +33 -0
  415. package/dist/types/twisty/views/control-panel/TwistyButtonsV2.d.ts.map +1 -0
  416. package/dist/types/twisty/views/control-panel/TwistyScrubberV2.d.ts +14 -0
  417. package/dist/types/twisty/views/control-panel/TwistyScrubberV2.d.ts.map +1 -0
  418. package/dist/types/twisty/views/control-panel/webkit-fullscreen.d.ts +15 -0
  419. package/dist/types/twisty/views/control-panel/webkit-fullscreen.d.ts.map +1 -0
  420. package/dist/types/twisty/views/document.d.ts +2 -0
  421. package/dist/types/twisty/views/document.d.ts.map +1 -0
  422. package/dist/types/twisty/views/screenshot.d.ts +12 -0
  423. package/dist/types/twisty/views/screenshot.d.ts.map +1 -0
  424. package/dist/types/vendor/p-lazy/p-lazy.d.ts +10 -0
  425. package/dist/types/vendor/p-lazy/p-lazy.d.ts.map +1 -0
  426. package/dist/types/vendor/three/examples/jsm/libs/stats.modified.module.d.ts +33 -0
  427. package/dist/types/vendor/three/examples/jsm/libs/stats.modified.module.d.ts.map +1 -0
  428. package/docs/.DS_Store +0 -0
  429. package/docs/cubing/.DS_Store +0 -0
  430. package/docs/cubing/alg/index.html +37 -23
  431. package/docs/cubing/index.html +56 -252
  432. package/docs/cubing/scramble/index.html +122 -0
  433. package/docs/cubing/twisty/index.html +329 -0
  434. package/docs/main.css +15 -3
  435. package/package.json +83 -57
  436. package/src/cubing/.DS_Store +0 -0
  437. package/src/cubing/alg/.DS_Store +0 -0
  438. package/src/cubing/alg/Alg.ts +89 -0
  439. package/src/cubing/alg/common.ts +4 -2
  440. package/src/cubing/alg/iteration.ts +1 -1
  441. package/src/cubing/alg/parse.ts +2 -0
  442. package/src/cubing/alg/test/alg-comparison.ts +1 -0
  443. package/src/cubing/alg/units/.DS_Store +0 -0
  444. package/src/cubing/alg/units/Unit.ts +0 -3
  445. package/src/cubing/alg/units/containers/Commutator.ts +1 -1
  446. package/src/cubing/alg/units/leaves/Move.ts +4 -4
  447. package/src/cubing/bluetooth/.DS_Store +0 -0
  448. package/src/cubing/bluetooth/connect/index.ts +1 -1
  449. package/src/cubing/bluetooth/smart-puzzle/Heykube.ts +1 -1
  450. package/src/cubing/bluetooth/smart-puzzle/bluetooth-puzzle.ts +1 -1
  451. package/src/cubing/bluetooth/smart-puzzle/gan.ts +5 -5
  452. package/src/cubing/bluetooth/smart-puzzle/giiker.ts +2 -2
  453. package/src/cubing/bluetooth/smart-puzzle/gocube.ts +5 -5
  454. package/src/cubing/bluetooth/smart-robot/GanRobot.ts +5 -5
  455. package/src/cubing/bluetooth/smart-timer/GanTimer.ts +2 -2
  456. package/src/cubing/kpuzzle/.DS_Store +0 -0
  457. package/src/cubing/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.ts +40 -0
  458. package/src/cubing/{puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.ts → kpuzzle/3x3x3/3x3x3.kpuzzle.json.ts} +11 -6
  459. package/src/cubing/kpuzzle/canon.spec.ts +6 -11
  460. package/src/cubing/kpuzzle/canonicalize.ts +1 -1
  461. package/src/cubing/kpuzzle/definition_types.ts +0 -3
  462. package/src/cubing/kpuzzle/index.ts +1 -0
  463. package/src/cubing/kpuzzle/prunetable.spec.ts +2 -4
  464. package/src/cubing/kpuzzle/puzzle-orientation.ts +1 -1
  465. package/src/cubing/kpuzzle/svg.ts +4 -9
  466. package/src/cubing/kpuzzle/transformations.ts +1 -1
  467. package/src/cubing/protocol/binary/binary3x3x3.spec.ts +5 -2
  468. package/src/cubing/protocol/binary/hex.ts +4 -4
  469. package/src/cubing/protocol/binary/orbit-indexing.ts +2 -2
  470. package/src/cubing/protocol/binary/puzzle-orientation.ts +2 -2
  471. package/src/cubing/puzzle-geometry/Options.ts +151 -22
  472. package/src/cubing/puzzle-geometry/PGPuzzles.spec.ts +24 -28
  473. package/src/cubing/puzzle-geometry/PermOriSet.ts +99 -98
  474. package/src/cubing/puzzle-geometry/PlatonicGenerator.ts +1 -1
  475. package/src/cubing/puzzle-geometry/PuzzleGeometry.ts +836 -867
  476. package/src/cubing/puzzle-geometry/Quat.ts +1 -68
  477. package/src/cubing/puzzle-geometry/SchreierSims.ts +2 -13
  478. package/src/cubing/puzzle-geometry/index.ts +2 -11
  479. package/src/cubing/puzzle-geometry/interfaces.ts +1 -27
  480. package/src/cubing/puzzle-geometry/orientcenters.spec.ts +24 -30
  481. package/src/cubing/puzzles/.DS_Store +0 -0
  482. package/src/cubing/puzzles/PuzzleLoader.ts +1 -1
  483. package/src/cubing/puzzles/async/async-pg3d.ts +5 -8
  484. package/src/cubing/puzzles/customPGPuzzleLoader.ts +60 -0
  485. package/src/cubing/puzzles/implementations/.DS_Store +0 -0
  486. package/src/cubing/puzzles/implementations/2x2x2/{2x2x2.kpuzzle.json_.ts → 2x2x2.kpuzzle.json.ts} +0 -0
  487. package/src/cubing/puzzles/implementations/2x2x2/index.ts +1 -1
  488. package/src/cubing/puzzles/implementations/3x3x3/index.ts +2 -3
  489. package/src/cubing/puzzles/implementations/clock/{clock.kpuzzle.json_.ts → clock.kpuzzle.json.ts} +0 -0
  490. package/src/cubing/puzzles/implementations/clock/index.ts +1 -1
  491. package/src/cubing/puzzles/implementations/fto/index.ts +19 -11
  492. package/src/cubing/puzzles/implementations/pyraminx/{pyraminx.kpuzzle.json_.ts → pyraminx.kpuzzle.json.ts} +0 -0
  493. package/src/cubing/puzzles/implementations/square1/index.ts +1 -2
  494. package/src/cubing/puzzles/implementations/square1/{sq1-hyperorbit.kpuzzle.json_.ts → sq1-hyperorbit.kpuzzle.json.ts} +0 -0
  495. package/src/cubing/puzzles/index.ts +30 -20
  496. package/src/cubing/puzzles/stickerings/appearance.ts +10 -9
  497. package/src/cubing/puzzles/stickerings/cube-stickerings.ts +8 -0
  498. package/src/cubing/puzzles/stickerings/fto-stickerings.ts +9 -0
  499. package/src/cubing/puzzles/stickerings/global-custom-stickering-hack.ts +61 -0
  500. package/src/cubing/search/.DS_Store +0 -0
  501. package/src/cubing/search/.gitignore +1 -2
  502. package/src/cubing/search/esm-test-worker.js +1 -1
  503. package/src/cubing/search/index.ts +1 -0
  504. package/src/cubing/search/inside/api.spec.ts +1 -0
  505. package/src/cubing/search/inside/api.ts +6 -1
  506. package/src/cubing/search/inside/solve/parseSGS.ts +7 -11
  507. package/src/cubing/search/inside/solve/puzzles/2x2x2.ts +3 -3
  508. package/src/cubing/search/inside/solve/puzzles/3x3x3/filter.ts +0 -6
  509. package/src/cubing/search/inside/solve/puzzles/3x3x3/index.ts +0 -2
  510. package/src/cubing/search/inside/solve/puzzles/FTO.sgs +264 -0
  511. package/src/cubing/search/inside/solve/puzzles/megaminx.sgs.json.ts +4 -6
  512. package/src/cubing/search/inside/solve/puzzles/skewb.sgs.json.ts +4 -6
  513. package/src/cubing/search/inside/solve/tremble.ts +6 -9
  514. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.ts +20 -822
  515. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/scramble/scramble_444.ts +177 -252
  516. package/src/cubing/search/inside/solve/vendor/min2phase/gwt.js +62 -222
  517. package/src/cubing/search/inside/solve/vendor/random-uint-below/get-random-values.ts +4 -5
  518. package/src/cubing/search/inside/solve/vendor/random-uint-below/random-int.ts +9 -11
  519. package/src/cubing/search/inside/solve/vendor/sq12phase/scramble_sq1.js +13 -582
  520. package/src/cubing/search/instantiator.ts +11 -7
  521. package/src/cubing/search/outside.ts +8 -2
  522. package/src/cubing/search/worker-inside-generated-string.js +1 -1
  523. package/src/cubing/stream/.DS_Store +0 -0
  524. package/src/cubing/stream/process/ReorientedStream.ts +1 -1
  525. package/src/cubing/stream/twizzle/TwizzleStream.ts +11 -8
  526. package/src/cubing/stream/websocket-proxy.ts +1 -3
  527. package/src/cubing/twisty/.DS_Store +0 -0
  528. package/src/cubing/twisty/controllers/TwistyAnimationController.ts +248 -0
  529. package/src/cubing/twisty/controllers/TwistyPlayerController.ts +38 -0
  530. package/src/cubing/twisty/heavy-code-imports/3d.ts +18 -0
  531. package/src/cubing/twisty/heavy-code-imports/dynamic-entries/3d.ts +41 -0
  532. package/src/cubing/twisty/index.ts +24 -17
  533. package/src/cubing/twisty/model/.DS_Store +0 -0
  534. package/src/cubing/twisty/model/PromiseFreshener.ts +49 -0
  535. package/src/cubing/twisty/model/TwistyPlayerModel.ts +222 -0
  536. package/src/cubing/twisty/model/UserVisibleErrorTracker.ts +22 -0
  537. package/src/cubing/twisty/model/helpers.ts +47 -0
  538. package/src/cubing/{search/vendor → twisty/model/props}/.DS_Store +0 -0
  539. package/src/cubing/twisty/model/props/TwistyProp.spec.ts +38 -0
  540. package/src/cubing/twisty/model/props/TwistyProp.ts +366 -0
  541. package/src/cubing/twisty/model/props/TwistyPropDebugger.ts +370 -0
  542. package/src/cubing/twisty/model/props/general/URLProp.ts +14 -0
  543. package/src/cubing/{solve → twisty/model/props/puzzle}/.DS_Store +0 -0
  544. package/src/cubing/twisty/model/props/puzzle/display/HintFaceletProp.ts +10 -0
  545. package/src/cubing/twisty/model/props/puzzle/display/SpriteProp.ts +43 -0
  546. package/src/cubing/twisty/model/props/puzzle/display/StickeringProp.ts +8 -0
  547. package/src/cubing/twisty/model/props/puzzle/state/AlgProp.ts +91 -0
  548. package/src/cubing/twisty/model/props/puzzle/state/AlgTransformationProp.ts +28 -0
  549. package/src/cubing/twisty/model/props/puzzle/state/AnchoredStartProp.ts +44 -0
  550. package/src/cubing/twisty/model/props/puzzle/state/CurrentLeavesProp.ts +91 -0
  551. package/src/cubing/twisty/model/props/puzzle/state/CurrentLeavesSimplified.ts +48 -0
  552. package/src/cubing/twisty/model/props/puzzle/state/CurrentTransformationProp.ts +46 -0
  553. package/src/cubing/twisty/model/props/puzzle/state/IndexerConstructorProp.ts +46 -0
  554. package/src/cubing/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.ts +15 -0
  555. package/src/cubing/twisty/model/props/puzzle/state/IndexerProp.ts +24 -0
  556. package/src/cubing/twisty/model/props/puzzle/state/LegacyPositionProp.ts +22 -0
  557. package/src/cubing/twisty/model/props/puzzle/state/PuzzleAlgProp.ts +28 -0
  558. package/src/cubing/twisty/model/props/puzzle/state/SetupAnchorProp.ts +8 -0
  559. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleDefProp.ts +14 -0
  560. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.ts +14 -0
  561. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleIDProp.ts +12 -0
  562. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.ts +17 -0
  563. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleLoaderProp.ts +38 -0
  564. package/src/cubing/twisty/model/props/timeline/CoarseTimelineInfoProp.ts +45 -0
  565. package/src/cubing/twisty/model/props/timeline/DetailedTimelineInfoProp.ts +76 -0
  566. package/src/cubing/twisty/model/props/timeline/PlayingInfoProp.ts +51 -0
  567. package/src/cubing/twisty/model/props/timeline/TempoScaleProp.ts +13 -0
  568. package/src/cubing/twisty/model/props/timeline/TimestampRequestProp.ts +38 -0
  569. package/src/cubing/twisty/model/props/viewer/BackViewProp.ts +10 -0
  570. package/src/cubing/twisty/model/props/viewer/BackgroundProp.ts +10 -0
  571. package/src/cubing/twisty/model/props/viewer/ButtonAppearanceProp.ts +86 -0
  572. package/src/cubing/twisty/model/props/viewer/ControlPanelProp.ts +10 -0
  573. package/src/cubing/twisty/model/props/viewer/LatitudeLimit.ts +11 -0
  574. package/src/cubing/twisty/model/props/viewer/OrbitCoordinatesProp.ts +56 -0
  575. package/src/cubing/twisty/model/props/viewer/OrbitCoordinatesRequestProp.ts +69 -0
  576. package/src/cubing/twisty/model/props/viewer/TimeRangeProp.ts +15 -0
  577. package/src/cubing/twisty/model/props/viewer/ViewerLinkProp.ts +10 -0
  578. package/src/cubing/twisty/model/props/viewer/VisualizationProp.ts +10 -0
  579. package/src/cubing/twisty/model/props/viewer/VisualizationStrategyProp.ts +45 -0
  580. package/src/cubing/twisty/old/.DS_Store +0 -0
  581. package/src/cubing/twisty/old/animation/.DS_Store +0 -0
  582. package/src/cubing/twisty/{animation → old/animation}/RenderScheduler.ts +5 -0
  583. package/src/cubing/twisty/{animation → old/animation}/Timeline.ts +0 -0
  584. package/src/cubing/twisty/{animation → old/animation}/cursor/AlgCursor.ts +15 -8
  585. package/src/cubing/twisty/{animation → old/animation}/cursor/CursorTypes.ts +4 -4
  586. package/src/cubing/twisty/{animation → old/animation}/easing.ts +0 -0
  587. package/src/cubing/{search/inside → twisty/old/animation/indexer}/.DS_Store +0 -0
  588. package/src/cubing/twisty/{animation → old/animation}/indexer/AlgDuration.ts +1 -1
  589. package/src/cubing/twisty/old/animation/indexer/AlgIndexer.ts +86 -0
  590. package/src/cubing/twisty/{animation → old/animation}/indexer/SimpleAlgIndexer.ts +9 -6
  591. package/src/cubing/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.ts +181 -0
  592. package/src/cubing/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.ts +243 -0
  593. package/src/cubing/twisty/{animation → old/animation}/indexer/simultaneous-moves/simul-moves.ts +46 -34
  594. package/src/cubing/twisty/{animation → old/animation}/indexer/tree/AlgWalker.ts +6 -3
  595. package/src/cubing/twisty/{animation → old/animation}/indexer/tree/TreeAlgIndexer.ts +8 -5
  596. package/src/cubing/twisty/{animation → old/animation}/indexer/tree/chunkAlgs.ts +2 -2
  597. package/src/cubing/twisty/{animation → old/animation}/stream/timeline-move-calculation-draft.spec.ts.TODO +0 -0
  598. package/src/cubing/twisty/{animation → old/animation}/stream/timeline-move-calculation-draft.ts +2 -2
  599. package/src/cubing/twisty/old/dom/.DS_Store +0 -0
  600. package/src/cubing/twisty/{dom/TwistyAlgViewer.css_.ts → old/dom/TwistyAlgViewerV1.css.ts} +0 -0
  601. package/src/cubing/twisty/{dom/TwistyAlgViewer.ts → old/dom/TwistyAlgViewerV1.ts} +43 -36
  602. package/src/cubing/twisty/{dom/TwistyPlayer.css_.ts → old/dom/TwistyPlayer.css.ts} +28 -1
  603. package/src/cubing/twisty/{dom → old/dom}/TwistyPlayer.spec.ts +5 -6
  604. package/src/cubing/twisty/{dom → old/dom}/TwistyPlayer.ts +36 -43
  605. package/src/cubing/twisty/{dom → old/dom}/TwistyPlayerConfig.ts +27 -10
  606. package/src/cubing/twisty/{dom/controls/TwistyControlElement.ts.ts → old/dom/controls/TwistyControlElement.ts} +0 -0
  607. package/src/cubing/twisty/{dom/controls/TwistyScrubber.css_.ts → old/dom/controls/TwistyScrubber.css.ts} +0 -0
  608. package/src/cubing/twisty/{dom → old/dom}/controls/TwistyScrubber.ts +3 -3
  609. package/src/cubing/twisty/{dom/controls/buttons.css_.ts → old/dom/controls/buttons.css.ts} +14 -1
  610. package/src/cubing/twisty/{dom → old/dom}/controls/buttons.spec.ts +1 -1
  611. package/src/cubing/twisty/{dom → old/dom}/controls/buttons.ts +15 -15
  612. package/src/cubing/twisty/{dom → old/dom}/element/ClassListManager.ts +0 -0
  613. package/src/cubing/twisty/{dom → old/dom}/element/ElementConfig.ts +1 -1
  614. package/src/cubing/twisty/{dom → old/dom}/element/ManagedCustomElement.ts +0 -0
  615. package/src/cubing/twisty/{dom → old/dom}/element/node-custom-element-shims.ts +0 -0
  616. package/src/cubing/twisty/{dom/stream/TwistyStreamSource.css_.ts → old/dom/stream/TwistyStreamSource.css.ts} +0 -0
  617. package/src/cubing/twisty/{dom → old/dom}/stream/TwistyStreamSource.ts +8 -8
  618. package/src/cubing/twisty/{dom → old/dom}/viewers/Twisty2DSVG.ts +7 -9
  619. package/src/cubing/twisty/{dom/viewers/Twisty2DSVGView.css_.ts → old/dom/viewers/Twisty2DSVGView.css.ts} +0 -0
  620. package/src/cubing/twisty/{dom/viewers/Twisty3DCanvas.css_.ts → old/dom/viewers/Twisty3DCanvas.css.ts} +0 -0
  621. package/src/cubing/twisty/{dom → old/dom}/viewers/Twisty3DCanvas.ts +5 -12
  622. package/src/cubing/twisty/{dom → old/dom}/viewers/TwistyOrbitControls.ts +53 -20
  623. package/src/cubing/twisty/{dom → old/dom}/viewers/TwistyViewerElement.ts +1 -1
  624. package/src/cubing/twisty/{dom/viewers/TwistyViewerWrapper.css_.ts → old/dom/viewers/TwistyViewerWrapper.css.ts} +0 -0
  625. package/src/cubing/twisty/{dom → old/dom}/viewers/TwistyViewerWrapper.ts +1 -1
  626. package/src/cubing/twisty/old/dom/viewers/canvas.ts +9 -0
  627. package/src/cubing/twisty/views/.DS_Store +0 -0
  628. package/src/cubing/twisty/views/2D/Twisty2DPuzzle.ts +150 -0
  629. package/src/cubing/twisty/views/2D/Twisty2DPuzzleWrapper.ts +52 -0
  630. package/src/cubing/twisty/views/2D/Twisty2DSceneWrapper.ts +77 -0
  631. package/src/cubing/twisty/views/3D/RendererPool.ts +53 -0
  632. package/src/cubing/twisty/{3D → views/3D}/TAU.ts +0 -0
  633. package/src/cubing/twisty/views/3D/Twisty3DPuzzleWrapper.ts +168 -0
  634. package/src/cubing/twisty/{3D → views/3D}/Twisty3DRenderTarget.ts +0 -0
  635. package/src/cubing/twisty/{3D → views/3D}/Twisty3DScene.ts +0 -0
  636. package/src/cubing/twisty/views/3D/Twisty3DSceneWrapper.ts +144 -0
  637. package/src/cubing/twisty/views/3D/Twisty3DVantage.ts +244 -0
  638. package/src/cubing/twisty/views/3D/TwistyOrbitControlsV2.spec.ts +209 -0
  639. package/src/cubing/twisty/views/3D/TwistyOrbitControlsV2.ts +270 -0
  640. package/src/cubing/twisty/{3D → views/3D}/puzzles/Cube3D.ts +36 -15
  641. package/src/cubing/twisty/{3D → views/3D}/puzzles/KPuzzleWrapper.ts +4 -5
  642. package/src/cubing/twisty/views/3D/puzzles/PG3D.ts +988 -0
  643. package/src/cubing/twisty/views/3D/puzzles/Twisty3DPuzzle.ts +6 -0
  644. package/src/cubing/twisty/{3D → views/3D}/puzzles/TwistyTestBox.ts +2 -2
  645. package/src/cubing/twisty/views/TwistyAlgEditor/LeafTokens.ts +116 -0
  646. package/src/cubing/twisty/{dom/TwistyAlgEditor.css_.ts → views/TwistyAlgEditor/TwistyAlgEditor.css.ts} +3 -1
  647. package/src/cubing/twisty/{dom → views/TwistyAlgEditor}/TwistyAlgEditor.spec.ts +7 -6
  648. package/src/cubing/twisty/views/TwistyAlgEditor/TwistyAlgEditor.ts +360 -0
  649. package/src/cubing/twisty/views/TwistyAlgEditor/model.ts +179 -0
  650. package/src/cubing/twisty/views/TwistyAlgViewer.css.ts +25 -0
  651. package/src/cubing/twisty/views/TwistyAlgViewer.ts +502 -0
  652. package/src/cubing/twisty/views/TwistyPlayer.ts +327 -0
  653. package/src/cubing/twisty/views/TwistyPlayerSettable.ts +111 -0
  654. package/src/cubing/twisty/views/control-panel/TwistyButtonsV2.ts +159 -0
  655. package/src/cubing/twisty/views/control-panel/TwistyScrubberV2.ts +145 -0
  656. package/src/cubing/twisty/views/control-panel/webkit-fullscreen.ts +44 -0
  657. package/src/cubing/twisty/views/document.ts +4 -0
  658. package/src/cubing/twisty/views/screenshot.ts +90 -0
  659. package/src/cubing/vendor/.DS_Store +0 -0
  660. package/src/cubing/vendor/p-lazy/license +9 -0
  661. package/src/cubing/vendor/p-lazy/p-lazy.ts +52 -0
  662. package/src/cubing/vendor/p-lazy/readme.md +54 -0
  663. package/src/cubing/vendor/three/examples/jsm/libs/stats.modified.module.ts +179 -0
  664. package/dist/esm/chunk-CWVB5RRW.js.map +0 -7
  665. package/dist/esm/chunk-KKSDHNLH.js.map +0 -7
  666. package/dist/esm/chunk-YNB7QLBF.js.map +0 -7
  667. package/dist/esm/worker-inside-generated-string-LT4NV55Q.js +0 -2826
  668. package/dist/esm/worker-inside-generated-string-LT4NV55Q.js.map +0 -7
  669. package/dist/types/puzzles/implementations/2x2x2/2x2x2.kpuzzle.json_.d.ts.map +0 -1
  670. package/dist/types/puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.d.ts +0 -3
  671. package/dist/types/puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.d.ts.map +0 -1
  672. package/dist/types/puzzles/implementations/clock/clock.kpuzzle.json_.d.ts.map +0 -1
  673. package/dist/types/puzzles/implementations/pyraminx/pyraminx.kpuzzle.json_.d.ts.map +0 -1
  674. package/dist/types/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.json_.d.ts.map +0 -1
  675. package/dist/types/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.d.ts +0 -3
  676. package/dist/types/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.d.ts.map +0 -1
  677. package/dist/types/twisty/3D/TAU.d.ts.map +0 -1
  678. package/dist/types/twisty/3D/Twisty3DRenderTarget.d.ts.map +0 -1
  679. package/dist/types/twisty/3D/Twisty3DScene.d.ts.map +0 -1
  680. package/dist/types/twisty/3D/puzzles/Cube3D.d.ts.map +0 -1
  681. package/dist/types/twisty/3D/puzzles/KPuzzleWrapper.d.ts.map +0 -1
  682. package/dist/types/twisty/3D/puzzles/PG3D.d.ts +0 -51
  683. package/dist/types/twisty/3D/puzzles/PG3D.d.ts.map +0 -1
  684. package/dist/types/twisty/3D/puzzles/Twisty3DPuzzle.d.ts.map +0 -1
  685. package/dist/types/twisty/3D/puzzles/TwistyTestBox.d.ts.map +0 -1
  686. package/dist/types/twisty/animation/RenderScheduler.d.ts.map +0 -1
  687. package/dist/types/twisty/animation/Timeline.d.ts.map +0 -1
  688. package/dist/types/twisty/animation/cursor/AlgCursor.d.ts.map +0 -1
  689. package/dist/types/twisty/animation/cursor/CursorTypes.d.ts.map +0 -1
  690. package/dist/types/twisty/animation/easing.d.ts.map +0 -1
  691. package/dist/types/twisty/animation/indexer/AlgDuration.d.ts.map +0 -1
  692. package/dist/types/twisty/animation/indexer/AlgIndexer.d.ts +0 -15
  693. package/dist/types/twisty/animation/indexer/AlgIndexer.d.ts.map +0 -1
  694. package/dist/types/twisty/animation/indexer/SimpleAlgIndexer.d.ts.map +0 -1
  695. package/dist/types/twisty/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts.map +0 -1
  696. package/dist/types/twisty/animation/indexer/simultaneous-moves/simul-moves.d.ts +0 -25
  697. package/dist/types/twisty/animation/indexer/simultaneous-moves/simul-moves.d.ts.map +0 -1
  698. package/dist/types/twisty/animation/indexer/tree/AlgWalker.d.ts.map +0 -1
  699. package/dist/types/twisty/animation/indexer/tree/TreeAlgIndexer.d.ts.map +0 -1
  700. package/dist/types/twisty/animation/indexer/tree/chunkAlgs.d.ts +0 -3
  701. package/dist/types/twisty/animation/indexer/tree/chunkAlgs.d.ts.map +0 -1
  702. package/dist/types/twisty/animation/stream/timeline-move-calculation-draft.d.ts.map +0 -1
  703. package/dist/types/twisty/dom/TwistyAlgEditor.css_.d.ts +0 -3
  704. package/dist/types/twisty/dom/TwistyAlgEditor.css_.d.ts.map +0 -1
  705. package/dist/types/twisty/dom/TwistyAlgEditor.d.ts +0 -27
  706. package/dist/types/twisty/dom/TwistyAlgEditor.d.ts.map +0 -1
  707. package/dist/types/twisty/dom/TwistyAlgEditorStartCharSearch.d.ts +0 -26
  708. package/dist/types/twisty/dom/TwistyAlgEditorStartCharSearch.d.ts.map +0 -1
  709. package/dist/types/twisty/dom/TwistyAlgViewer.css_.d.ts.map +0 -1
  710. package/dist/types/twisty/dom/TwistyAlgViewer.d.ts.map +0 -1
  711. package/dist/types/twisty/dom/TwistyPlayer.css_.d.ts.map +0 -1
  712. package/dist/types/twisty/dom/TwistyPlayer.d.ts.map +0 -1
  713. package/dist/types/twisty/dom/TwistyPlayerConfig.d.ts.map +0 -1
  714. package/dist/types/twisty/dom/controls/TwistyControlElement.ts.d.ts +0 -2
  715. package/dist/types/twisty/dom/controls/TwistyControlElement.ts.d.ts.map +0 -1
  716. package/dist/types/twisty/dom/controls/TwistyScrubber.css_.d.ts.map +0 -1
  717. package/dist/types/twisty/dom/controls/TwistyScrubber.d.ts.map +0 -1
  718. package/dist/types/twisty/dom/controls/buttons.css_.d.ts.map +0 -1
  719. package/dist/types/twisty/dom/controls/buttons.d.ts.map +0 -1
  720. package/dist/types/twisty/dom/element/ClassListManager.d.ts.map +0 -1
  721. package/dist/types/twisty/dom/element/ElementConfig.d.ts.map +0 -1
  722. package/dist/types/twisty/dom/element/ManagedCustomElement.d.ts.map +0 -1
  723. package/dist/types/twisty/dom/element/node-custom-element-shims.d.ts.map +0 -1
  724. package/dist/types/twisty/dom/stream/TwistyStreamSource.css_.d.ts.map +0 -1
  725. package/dist/types/twisty/dom/stream/TwistyStreamSource.d.ts.map +0 -1
  726. package/dist/types/twisty/dom/viewers/Twisty2DSVG.d.ts.map +0 -1
  727. package/dist/types/twisty/dom/viewers/Twisty2DSVGView.css_.d.ts.map +0 -1
  728. package/dist/types/twisty/dom/viewers/Twisty3DCanvas.css_.d.ts.map +0 -1
  729. package/dist/types/twisty/dom/viewers/Twisty3DCanvas.d.ts.map +0 -1
  730. package/dist/types/twisty/dom/viewers/TwistyOrbitControls.d.ts.map +0 -1
  731. package/dist/types/twisty/dom/viewers/TwistyViewerElement.d.ts +0 -4
  732. package/dist/types/twisty/dom/viewers/TwistyViewerElement.d.ts.map +0 -1
  733. package/dist/types/twisty/dom/viewers/TwistyViewerWrapper.css_.d.ts.map +0 -1
  734. package/dist/types/twisty/dom/viewers/TwistyViewerWrapper.d.ts.map +0 -1
  735. package/dist/types/twisty/dom/viewers/canvas.d.ts +0 -2
  736. package/dist/types/twisty/dom/viewers/canvas.d.ts.map +0 -1
  737. package/dist/types/vendor/three/examples/jsm/libs/stats.module.d.ts +0 -2
  738. package/dist/types/vendor/three/examples/jsm/libs/stats.module.d.ts.map +0 -1
  739. package/dist/types/vendor/three/examples/jsm/libs/stats.module.wrapped.d.ts +0 -21
  740. package/dist/types/vendor/three/examples/jsm/libs/stats.module.wrapped.d.ts.map +0 -1
  741. package/src/cubing/protocol/.DS_Store +0 -0
  742. package/src/cubing/puzzle-geometry/.DS_Store +0 -0
  743. package/src/cubing/search/inside/solve/.DS_Store +0 -0
  744. package/src/cubing/search/inside/solve/puzzles/.DS_Store +0 -0
  745. package/src/cubing/search/inside/solve/puzzles/3x3x3/.DS_Store +0 -0
  746. package/src/cubing/search/inside/solve/vendor/.DS_Store +0 -0
  747. package/src/cubing/search/inside/solve/vendor/cstimer/.DS_Store +0 -0
  748. package/src/cubing/search/inside/solve/vendor/cstimer/src/.DS_Store +0 -0
  749. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/.DS_Store +0 -0
  750. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/.DS_Store +0 -0
  751. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.ts +0 -13
  752. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lib/.DS_Store +0 -0
  753. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/scramble/.DS_Store +0 -0
  754. package/src/cubing/search/inside/solve/vendor/sgs/.DS_Store +0 -0
  755. package/src/cubing/search/inside/solve/vendor/sgs/src/.DS_Store +0 -0
  756. package/src/cubing/search/inside/solve/vendor/sgs/src/test/.DS_Store +0 -0
  757. package/src/cubing/search/vendor/comlink-everywhere/.DS_Store +0 -0
  758. package/src/cubing/twisty/3D/puzzles/PG3D.ts +0 -600
  759. package/src/cubing/twisty/3D/puzzles/Twisty3DPuzzle.ts +0 -9
  760. package/src/cubing/twisty/3D/puzzles/mkbhd.svg +0 -5
  761. package/src/cubing/twisty/animation/indexer/AlgIndexer.ts +0 -25
  762. package/src/cubing/twisty/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.ts +0 -168
  763. package/src/cubing/twisty/dom/TwistyAlgEditor.ts +0 -373
  764. package/src/cubing/twisty/dom/TwistyAlgEditorStartCharSearch.ts +0 -138
  765. package/src/cubing/twisty/dom/viewers/canvas.ts +0 -4
  766. package/src/cubing/twisty/views/3D/.DS_Store +0 -0
  767. package/src/cubing/vendor/three/.DS_Store +0 -0
  768. package/src/cubing/vendor/three/examples/jsm/libs/stats.module.ts +0 -2
  769. package/src/cubing/vendor/three/examples/jsm/libs/stats.module.wrapped.d.ts +0 -24
  770. package/src/cubing/vendor/three/examples/jsm/libs/stats.module.wrapped.js +0 -178
@@ -0,0 +1,988 @@
1
+ import {
2
+ BufferAttribute,
3
+ BufferGeometry,
4
+ Color,
5
+ DoubleSide,
6
+ Euler,
7
+ FrontSide,
8
+ Group,
9
+ Material,
10
+ Mesh,
11
+ MeshBasicMaterial,
12
+ Object3D,
13
+ Texture,
14
+ Vector3,
15
+ } from "three";
16
+ import {
17
+ areTransformationsEquivalent,
18
+ KPuzzleDefinition,
19
+ Transformation,
20
+ } from "../../../../kpuzzle";
21
+ import { experimentalTransformationForQuantumMove } from "../../../../kpuzzle";
22
+ import type {
23
+ StickerDat,
24
+ StickerDatSticker,
25
+ } from "../../../../puzzle-geometry";
26
+ import type { TextureMapper } from "../../../../puzzle-geometry/PuzzleGeometry";
27
+ import {
28
+ ExperimentalFaceletMeshAppearance,
29
+ experimentalGetFaceletAppearance,
30
+ ExperimentalPuzzleAppearance,
31
+ } from "../../../../puzzles";
32
+ import type { AlgCursor } from "../../../old/animation/cursor/AlgCursor";
33
+ import type { PuzzlePosition } from "../../../old/animation/cursor/CursorTypes";
34
+ import { smootherStep } from "../../../old/animation/easing";
35
+ import type { HintFaceletStyle } from "../../../old/dom/TwistyPlayerConfig";
36
+ import { TAU } from "../TAU";
37
+
38
+ import type { Twisty3DPuzzle } from "./Twisty3DPuzzle";
39
+
40
+ const foundationMaterial = new MeshBasicMaterial({
41
+ side: DoubleSide,
42
+ color: 0x000000,
43
+ });
44
+ const invisMaterial = new MeshBasicMaterial({
45
+ visible: false,
46
+ });
47
+ const basicStickerMaterial = new MeshBasicMaterial({
48
+ vertexColors: true,
49
+ });
50
+
51
+ function dist(coords: number[], a: number, b: number): number {
52
+ return Math.hypot(
53
+ coords[3 * a] - coords[3 * b],
54
+ coords[3 * a + 1] - coords[3 * b + 1],
55
+ coords[3 * a + 2] - coords[3 * b + 2],
56
+ );
57
+ }
58
+
59
+ function triarea(coords: number[], a: number, b: number, c: number): number {
60
+ const ab = dist(coords, a, b);
61
+ const bc = dist(coords, b, c);
62
+ const ac = dist(coords, a, c);
63
+ const p = (ab + bc + ac) / 2;
64
+ return Math.sqrt(p * (p - ab) * (p - bc) * (p - ac));
65
+ }
66
+
67
+ function polyarea(coords: number[]): number {
68
+ let sum = 0;
69
+ for (let i = 2; 3 * i < coords.length; i++) {
70
+ sum += triarea(coords, 0, 1, i);
71
+ }
72
+ return sum;
73
+ }
74
+
75
+ function normalize(r: number[]): number[] {
76
+ const m = Math.hypot(r[0], r[1], r[2]);
77
+ r[0] /= m;
78
+ r[1] /= m;
79
+ r[2] /= m;
80
+ return r;
81
+ }
82
+
83
+ function cross(a: number[], b: number[]): number[] {
84
+ const r = new Array<number>(3);
85
+ r[0] = a[1] * b[2] - a[2] * b[1];
86
+ r[1] = a[2] * b[0] - a[0] * b[2];
87
+ r[2] = a[0] * b[1] - a[1] * b[0];
88
+ return r;
89
+ }
90
+
91
+ function normal(c: number[]): number[] {
92
+ const a: number[] = [c[3] - c[0], c[4] - c[1], c[5] - c[2]];
93
+ const b: number[] = [c[6] - c[3], c[7] - c[4], c[8] - c[5]];
94
+ const r = cross(a, b);
95
+ return normalize(r);
96
+ }
97
+
98
+ function trimEdges(face: number[], tr: number): number[] {
99
+ const r: number[] = [];
100
+ const A: number[] = new Array(3);
101
+ const B: number[] = new Array(3);
102
+ for (let iter = 1; iter < 10; iter++) {
103
+ for (let i = 0; i < face.length; i += 3) {
104
+ const pi = (i + face.length - 3) % face.length;
105
+ const ni = (i + 3) % face.length;
106
+ for (let k = 0; k < 3; k++) {
107
+ A[k] = face[pi + k] - face[i + k];
108
+ B[k] = face[ni + k] - face[i + k];
109
+ }
110
+ const alen = Math.hypot(A[0], A[1], A[2]);
111
+ const blen = Math.hypot(B[0], B[1], B[2]);
112
+ for (let k = 0; k < 3; k++) {
113
+ A[k] /= alen;
114
+ B[k] /= blen;
115
+ }
116
+ const d = A[0] * B[0] + A[1] * B[1] + A[2] * B[2];
117
+ const m = tr / Math.sqrt(1 - d * d);
118
+ for (let k = 0; k < 3; k++) {
119
+ r[i + k] = face[i + k] + (A[k] + B[k]) * m;
120
+ }
121
+ }
122
+ let good = true;
123
+ for (let i = 0; good && i < r.length; i += 3) {
124
+ const ni = (i + 3) % face.length;
125
+ let t = 0;
126
+ for (let k = 0; k < 3; k++) {
127
+ const a = face[ni + k] - face[i + k];
128
+ const b = r[ni + k] - r[i + k];
129
+ t += a * b;
130
+ }
131
+ if (t <= 0) {
132
+ good = false;
133
+ }
134
+ }
135
+ if (good) {
136
+ return r;
137
+ }
138
+ tr /= 2;
139
+ }
140
+ return face;
141
+ }
142
+
143
+ class Filler {
144
+ pos: number;
145
+ ipos: number;
146
+ vertices: Float32Array;
147
+ colors: Uint8Array;
148
+ uvs?: Float32Array;
149
+ ind: Uint8Array;
150
+ constructor(public sz: number, public tm: TextureMapper) {
151
+ this.vertices = new Float32Array(9 * sz);
152
+ this.uvs = undefined;
153
+ this.colors = new Uint8Array(18 * sz);
154
+ this.ind = new Uint8Array(sz);
155
+ this.pos = 0;
156
+ this.ipos = 0;
157
+ }
158
+
159
+ add(pt: number[], i: number, c: number) {
160
+ this.vertices[this.pos] = pt[3 * i + 0];
161
+ this.vertices[this.pos + 1] = pt[3 * i + 1];
162
+ this.vertices[this.pos + 2] = pt[3 * i + 2];
163
+ this.colors[this.pos] = c >> 16;
164
+ this.colors[this.pos + 1] = (c >> 8) & 255;
165
+ this.colors[this.pos + 2] = c & 255;
166
+ this.pos += 3;
167
+ }
168
+
169
+ addUncolored(pt: number[], i: number) {
170
+ this.vertices[this.pos] = pt[3 * i + 0];
171
+ this.vertices[this.pos + 1] = pt[3 * i + 1];
172
+ this.vertices[this.pos + 2] = pt[3 * i + 2];
173
+ this.pos += 3;
174
+ }
175
+
176
+ setind(i: number) {
177
+ this.ind[this.ipos++] = i;
178
+ }
179
+
180
+ makePoly(coords: number[], color: number, ind: number): void {
181
+ const ncoords: number[] = coords;
182
+ for (let g = 1; 3 * (g + 1) < ncoords.length; g++) {
183
+ this.add(ncoords, 0, color);
184
+ this.add(ncoords, g, color);
185
+ this.add(ncoords, g + 1, color);
186
+ this.setind(ind);
187
+ }
188
+ }
189
+
190
+ setAttributes(geo: BufferGeometry) {
191
+ geo.setAttribute("position", new BufferAttribute(this.vertices, 3));
192
+ // the geometry only needs the first half of the array
193
+ const sa2 = this.colors.subarray(0, 9 * this.sz);
194
+ geo.setAttribute("color", new BufferAttribute(sa2, 3, true));
195
+ }
196
+
197
+ makeGroups(geo: BufferGeometry) {
198
+ geo.clearGroups();
199
+ for (let i = 0; i < this.ipos; ) {
200
+ const si = i++;
201
+ const iv = this.ind[si];
202
+ while (this.ind[i] === iv) {
203
+ i++;
204
+ }
205
+ geo.addGroup(3 * si, 3 * (i - si), iv);
206
+ }
207
+ }
208
+
209
+ saveOriginalColors() {
210
+ this.colors.copyWithin(this.pos, 0, this.pos);
211
+ }
212
+ }
213
+
214
+ class StickerDef {
215
+ private origColor: number;
216
+ private origColorAppearance: number;
217
+ private faceColor: number;
218
+ private texturePtr?: StickerDef = undefined;
219
+ public twistVal: number = -1;
220
+ public stickerStart: number;
221
+ public stickerEnd: number;
222
+ public hintStart: number;
223
+ public hintEnd: number;
224
+ public foundationStart: number;
225
+ public foundationEnd: number;
226
+ private isDup: boolean;
227
+ private faceNum: number;
228
+ constructor(
229
+ filler: Filler,
230
+ stickerDat: StickerDatSticker,
231
+ trim: number,
232
+ options?: {
233
+ appearance?: ExperimentalFaceletMeshAppearance;
234
+ },
235
+ ) {
236
+ this.isDup = !!stickerDat.isDup;
237
+ this.faceNum = stickerDat.face;
238
+ this.stickerStart = filler.ipos;
239
+ const sdColor = new Color(stickerDat.color).getHex();
240
+ this.origColor = sdColor;
241
+ this.origColorAppearance = sdColor;
242
+ if (options?.appearance) {
243
+ this.setAppearance(filler, options.appearance);
244
+ }
245
+ this.faceColor = sdColor;
246
+ const coords = this.stickerCoords(stickerDat.coords, trim);
247
+ filler.makePoly(coords, this.faceColor, this.isDup ? 4 : 0);
248
+ this.stickerEnd = filler.ipos;
249
+ }
250
+
251
+ private stickerCoords(coords: number[], trim: number): number[] {
252
+ return trimEdges(coords.slice(), trim);
253
+ }
254
+
255
+ private hintCoords(
256
+ coords: number[],
257
+ hintStickerHeightScale: number,
258
+ trim: number,
259
+ normal: number[],
260
+ ): number[] {
261
+ coords = this.stickerCoords(coords, trim); // pick up trim from stickers
262
+ normal = normal.slice();
263
+ for (let i = 0; i < 3; i++) {
264
+ normal[i] *= 0.5 * hintStickerHeightScale;
265
+ }
266
+ const hCoords = new Array<number>(coords.length);
267
+ for (let i = 0; 3 * i < coords.length; i++) {
268
+ const j = coords.length / 3 - 1 - i;
269
+ hCoords[3 * i] = coords[3 * j] + normal[0];
270
+ hCoords[3 * i + 1] = coords[3 * j + 1] + normal[1];
271
+ hCoords[3 * i + 2] = coords[3 * j + 2] + normal[2];
272
+ }
273
+ return hCoords;
274
+ }
275
+
276
+ private foundationCoords(coords: number[]): number[] {
277
+ const ncoords = coords.slice();
278
+ for (let i = 0; i < coords.length; i++) {
279
+ ncoords[i] = coords[i] * 0.999;
280
+ }
281
+ return ncoords;
282
+ }
283
+
284
+ addHint(
285
+ filler: Filler,
286
+ stickerDat: StickerDatSticker,
287
+ hintStickers: boolean,
288
+ hintStickerHeightScale: number,
289
+ trim: number,
290
+ normal: number[],
291
+ ): void {
292
+ this.hintStart = filler.ipos;
293
+ const coords = this.hintCoords(
294
+ stickerDat.coords,
295
+ hintStickerHeightScale,
296
+ trim,
297
+ normal,
298
+ );
299
+ filler.makePoly(
300
+ coords,
301
+ this.faceColor,
302
+ hintStickers && !this.isDup ? 2 : 4,
303
+ );
304
+ this.hintEnd = filler.ipos;
305
+ }
306
+
307
+ public addFoundation(
308
+ filler: Filler,
309
+ stickerDat: StickerDatSticker,
310
+ black: number,
311
+ ) {
312
+ this.foundationStart = filler.ipos;
313
+ const coords = this.foundationCoords(stickerDat.coords);
314
+ filler.makePoly(coords, black, this.isDup ? 4 : 6);
315
+ this.foundationEnd = filler.ipos;
316
+ }
317
+
318
+ private setHintStickers(filler: Filler, hintStickers: boolean): void {
319
+ const indv = this.isDup || !hintStickers ? 4 : 2;
320
+ for (let i = this.hintStart; i < this.hintEnd; i++) {
321
+ filler.ind[i] = indv | (filler.ind[i] & 1);
322
+ }
323
+ }
324
+
325
+ public setAppearance(
326
+ filler: Filler,
327
+ faceletMeshAppearance: ExperimentalFaceletMeshAppearance,
328
+ ): void {
329
+ let c = 0;
330
+ switch (faceletMeshAppearance) {
331
+ case "regular":
332
+ c = this.origColor;
333
+ break;
334
+ case "dim":
335
+ if (this.origColor === 0xffffff) {
336
+ c = 0xdddddd;
337
+ } else {
338
+ c = new Color(this.origColor).multiplyScalar(0.5).getHex();
339
+ }
340
+ break;
341
+ case "oriented":
342
+ c = 0xff88ff;
343
+ break;
344
+ case "ignored":
345
+ c = 0x444444;
346
+ break;
347
+ case "invisible":
348
+ c = this.origColor;
349
+ }
350
+ this.origColorAppearance = c;
351
+ for (let i = 9 * this.stickerStart; i < 9 * this.stickerEnd; i += 3) {
352
+ filler.colors[filler.pos + i] = c >> 16;
353
+ filler.colors[filler.pos + i + 1] = (c >> 8) & 255;
354
+ filler.colors[filler.pos + i + 2] = c & 255;
355
+ }
356
+ for (let i = 9 * this.hintStart; i < 9 * this.hintEnd; i += 3) {
357
+ filler.colors[filler.pos + i] = c >> 16;
358
+ filler.colors[filler.pos + i + 1] = (c >> 8) & 255;
359
+ filler.colors[filler.pos + i + 2] = c & 255;
360
+ }
361
+ this.setHintStickers(
362
+ filler,
363
+ faceletMeshAppearance !== "invisible" && !this.isDup,
364
+ );
365
+ }
366
+
367
+ public addUVs(filler: Filler): void {
368
+ const uvs = filler.uvs!;
369
+ const vert = filler.vertices;
370
+ const coords = new Array(3);
371
+ for (let i = 3 * this.stickerStart; i < 3 * this.stickerEnd; i++) {
372
+ coords[0] = vert[3 * i];
373
+ coords[1] = vert[3 * i + 1];
374
+ coords[2] = vert[3 * i + 2];
375
+ const uv = filler.tm.getuv(this.faceNum, coords);
376
+ uvs[2 * i] = uv[0];
377
+ uvs[2 * i + 1] = uv[1];
378
+ }
379
+ for (let i = 3 * this.hintStart; i < 3 * this.hintEnd; i++) {
380
+ coords[0] = vert[3 * i];
381
+ coords[1] = vert[3 * i + 1];
382
+ coords[2] = vert[3 * i + 2];
383
+ const uv = filler.tm.getuv(this.faceNum, coords);
384
+ uvs[2 * i] = uv[0];
385
+ uvs[2 * i + 1] = uv[1];
386
+ }
387
+ }
388
+
389
+ public setTexture(filler: Filler, sd: StickerDef): number {
390
+ if (this.texturePtr === sd) {
391
+ return 0;
392
+ }
393
+ this.texturePtr = sd;
394
+ const sz = 6 * filler.sz;
395
+ filler.uvs!.copyWithin(
396
+ 6 * this.stickerStart,
397
+ 6 * sd.stickerStart + sz,
398
+ 6 * sd.stickerEnd + sz,
399
+ );
400
+ filler.uvs!.copyWithin(
401
+ 6 * this.hintStart,
402
+ 6 * sd.hintStart + sz,
403
+ 6 * sd.hintEnd + sz,
404
+ );
405
+ return 1;
406
+ }
407
+
408
+ public setColor(filler: Filler, sd: StickerDef): number {
409
+ const c = sd.origColorAppearance;
410
+ if (this.faceColor !== c) {
411
+ this.faceColor = c;
412
+ const sz = filler.pos;
413
+ filler.colors.copyWithin(
414
+ 9 * this.stickerStart,
415
+ 9 * sd.stickerStart + sz,
416
+ 9 * sd.stickerEnd + sz,
417
+ );
418
+ filler.colors.copyWithin(
419
+ 9 * this.hintStart,
420
+ 9 * sd.hintStart + sz,
421
+ 9 * sd.hintEnd + sz,
422
+ );
423
+ return 1;
424
+ } else {
425
+ return 0;
426
+ }
427
+ }
428
+ }
429
+
430
+ class HitPlaneDef {
431
+ public cubie: Group;
432
+ private geo: BufferGeometry;
433
+ constructor(hitface: any, tm: TextureMapper) {
434
+ this.cubie = new Group();
435
+ const coords = hitface.coords as number[];
436
+ const filler = new Filler(coords.length / 3 - 2, tm);
437
+ for (let g = 1; 3 * g + 3 < coords.length; g++) {
438
+ filler.addUncolored(coords, 0);
439
+ filler.addUncolored(coords, g);
440
+ filler.addUncolored(coords, g + 1);
441
+ }
442
+ this.geo = new BufferGeometry();
443
+ filler.setAttributes(this.geo);
444
+ const obj = new Mesh(this.geo, invisMaterial);
445
+ obj.userData.name = hitface.name;
446
+ this.cubie.scale.setScalar(0.99);
447
+ this.cubie.add(obj);
448
+ }
449
+ }
450
+
451
+ class AxisInfo {
452
+ public axis: Vector3;
453
+ public order: number;
454
+ constructor(axisDat: any) {
455
+ const vec = axisDat[0] as number[];
456
+ this.axis = new Vector3(vec[0], vec[1], vec[2]);
457
+ this.order = axisDat[2];
458
+ }
459
+ }
460
+
461
+ export interface PG3DOptions {
462
+ appearance?: ExperimentalPuzzleAppearance;
463
+ }
464
+
465
+ const DEFAULT_COLOR_FRACTION = 0.71;
466
+ const PG_SCALE = 0.5;
467
+
468
+ // TODO: Split into "scene model" and "view".
469
+ /*
470
+ * PG3D uses a single geometry for the puzzle, with all the faces for
471
+ * each sticker (including the foundation stickers) in a single
472
+ * geometry. We use the materialIndex in the face to point to a
473
+ * specific entry, which is either a colored sticker, invisible, or
474
+ * black (foundation).
475
+ *
476
+ * To support general twisting of a subset of the puzzle, we then
477
+ * instantiate this same geometry in two different meshes with two
478
+ * distinct material arrays. One, the fixed mesh, has the material
479
+ * array set up like: [colored, invisible, black, invisible].
480
+ * The twisting mesh has the material array set up as
481
+ * [invisible, colored, invislble, black]. When not twisted, the
482
+ * two meshes are directly coincident, and the (shared) materialIndex
483
+ * in each face points to a non-invisible material in exactly one of
484
+ * the two meshes. When we decide to twist some cubies, we make
485
+ * the cubies that move point to visible materials in the moving
486
+ * mesh (which makes them point to invisible materials in the static
487
+ * mesh). This way, we only need to rotate the moving mesh as a
488
+ * single object---this should be very fast, and occur entirely in
489
+ * the GPU. Unfortunately this doesn't quite work as fast as we'd
490
+ * like because three.js makes a draw call every time we have a change
491
+ * in the material index. By moving the foundation triangles separate
492
+ * from the sticker triangles, we enhance the probability that many
493
+ * triangles can be rendered in one call speeding up the render.
494
+ * We also get some assistance from puzzleGeometry to try to keep
495
+ * nearby stickers close to each other.
496
+ */
497
+ export class PG3D extends Object3D implements Twisty3DPuzzle {
498
+ private stickers: { [key: string]: StickerDef[][] };
499
+ private axesInfo: { [key: string]: AxisInfo };
500
+
501
+ private stickerTargets: Object3D[] = [];
502
+ private controlTargets: Object3D[] = [];
503
+
504
+ private movingObj: Object3D;
505
+ private filler: Filler;
506
+ private foundationBound: number; // before this: colored; after: black
507
+ private fixedGeo: BufferGeometry;
508
+ private lastPos: PuzzlePosition;
509
+ private lastMove: Transformation;
510
+ private hintMaterial: Material;
511
+ private stickerMaterial: Material;
512
+ private materialArray1: Material[];
513
+ private materialArray2: Material[];
514
+ private textured: boolean = false;
515
+ private hintMaterialDisposable: boolean;
516
+ private stickerMaterialDisposable: boolean;
517
+
518
+ #pendingStickeringUpdate: boolean = false;
519
+
520
+ constructor(
521
+ cursor: AlgCursor,
522
+ private scheduleRenderCallback: () => void,
523
+ private definition: KPuzzleDefinition,
524
+ private pgdat: StickerDat,
525
+ private showFoundation: boolean = false,
526
+ private showHintStickers: boolean = false,
527
+ hintStickerHeightScale: number = 1,
528
+ private params: PG3DOptions = {},
529
+ ) {
530
+ super();
531
+ if (pgdat.stickers.length === 0) {
532
+ throw Error("Reuse of stickerdat from pg; please don't do that.");
533
+ }
534
+ this.hintMaterial = new MeshBasicMaterial({
535
+ vertexColors: true,
536
+ transparent: true,
537
+ opacity: 0.5,
538
+ });
539
+ this.hintMaterialDisposable = true;
540
+ this.stickerMaterial = basicStickerMaterial;
541
+ this.stickerMaterialDisposable = false;
542
+ this.axesInfo = {};
543
+ const axesDef = this.pgdat.axis as any[];
544
+ for (const axis of axesDef) {
545
+ this.axesInfo[axis[1]] = new AxisInfo(axis);
546
+ }
547
+ const stickers = this.pgdat.stickers as any[];
548
+ this.stickers = {};
549
+ this.materialArray1 = new Array(8);
550
+ this.materialArray2 = new Array(8);
551
+ this.enableFoundation(showFoundation);
552
+ this.updateMaterialArrays();
553
+ let triangleCount = 0;
554
+ const multiplier = 3;
555
+ for (const sticker of stickers) {
556
+ const sides = sticker.coords.length / 3;
557
+ triangleCount += multiplier * (sides - 2);
558
+ }
559
+ const filler = new Filler(triangleCount, pgdat.textureMapper);
560
+ const black = 0;
561
+ const normals: number[][] = [];
562
+ let totArea = 0;
563
+ for (const f of pgdat.faces) {
564
+ normals.push(normal(f.coords));
565
+ totArea += polyarea(f.coords);
566
+ }
567
+ const colorfrac = DEFAULT_COLOR_FRACTION;
568
+ let nonDupStickers = 0;
569
+ for (const sticker of stickers) {
570
+ if (!sticker.isDup) {
571
+ nonDupStickers++;
572
+ }
573
+ }
574
+ const trim =
575
+ (Math.sqrt(totArea / nonDupStickers) * (1 - Math.sqrt(colorfrac))) / 2;
576
+ for (const sticker of stickers) {
577
+ const orbit = sticker.orbit;
578
+ const ord = sticker.ord;
579
+ const ori = sticker.ori;
580
+ if (!this.stickers[orbit]) {
581
+ this.stickers[orbit] = [];
582
+ }
583
+ if (!this.stickers[orbit][ori]) {
584
+ this.stickers[orbit][ori] = [];
585
+ }
586
+ const options: { appearance?: ExperimentalFaceletMeshAppearance } = {};
587
+ if (params.appearance) {
588
+ options.appearance = experimentalGetFaceletAppearance(
589
+ params.appearance,
590
+ orbit,
591
+ ord,
592
+ ori,
593
+ false,
594
+ );
595
+ }
596
+ const stickerdef = new StickerDef(filler, sticker, trim, options);
597
+ this.stickers[orbit][ori][ord] = stickerdef;
598
+ }
599
+ for (const sticker of stickers) {
600
+ const orbit = sticker.orbit;
601
+ const ord = sticker.ord;
602
+ const ori = sticker.ori;
603
+ this.stickers[orbit][ori][ord].addHint(
604
+ filler,
605
+ sticker,
606
+ showHintStickers,
607
+ hintStickerHeightScale,
608
+ trim,
609
+ normals[sticker.face],
610
+ );
611
+ }
612
+ this.foundationBound = filler.ipos;
613
+ for (const sticker of stickers) {
614
+ const orbit = sticker.orbit;
615
+ const ord = sticker.ord;
616
+ const ori = sticker.ori;
617
+ this.stickers[orbit][ori][ord].addFoundation(filler, sticker, black);
618
+ }
619
+ const fixedGeo = new BufferGeometry();
620
+ filler.setAttributes(fixedGeo);
621
+ filler.makeGroups(fixedGeo);
622
+ const obj = new Mesh(fixedGeo, this.materialArray1);
623
+ obj.scale.set(PG_SCALE, PG_SCALE, PG_SCALE);
624
+ this.add(obj);
625
+ const obj2 = new Mesh(fixedGeo, this.materialArray2);
626
+ obj2.scale.set(PG_SCALE, PG_SCALE, PG_SCALE);
627
+ this.add(obj2);
628
+ const hitfaces = this.pgdat.faces as any[];
629
+ this.movingObj = obj2;
630
+ this.fixedGeo = fixedGeo;
631
+ this.filler = filler;
632
+ for (const hitface of hitfaces) {
633
+ const facedef = new HitPlaneDef(hitface, pgdat.textureMapper);
634
+ facedef.cubie.scale.set(PG_SCALE, PG_SCALE, PG_SCALE);
635
+ this.add(facedef.cubie);
636
+ this.controlTargets.push(facedef.cubie.children[0]);
637
+ }
638
+ filler.saveOriginalColors();
639
+ cursor.addPositionListener(this);
640
+ pgdat.stickers = []; // don't need these anymore
641
+ /*
642
+ this.experimentalUpdateTexture(
643
+ true,
644
+ new TextureLoader().load(
645
+ "/experiments.cubing.net/cubing.js/twisty/mkbhd-sprite-red.png",
646
+ ),
647
+ new TextureLoader().load(
648
+ "/experiments.cubing.net/cubing.js/twisty/mkbhd-sprite-red-hint.png",
649
+ ),
650
+ );
651
+ */
652
+ }
653
+
654
+ public dispose(): void {
655
+ if (this.fixedGeo) {
656
+ this.fixedGeo.dispose();
657
+ }
658
+ if (this.stickerMaterialDisposable) {
659
+ this.stickerMaterial.dispose();
660
+ this.stickerMaterial = basicStickerMaterial;
661
+ this.stickerMaterialDisposable = false;
662
+ }
663
+ if (this.hintMaterialDisposable) {
664
+ this.hintMaterial.dispose();
665
+ this.hintMaterial = basicStickerMaterial;
666
+ this.hintMaterialDisposable = false;
667
+ }
668
+ }
669
+
670
+ public experimentalGetStickerTargets(): Object3D[] {
671
+ return this.stickerTargets;
672
+ }
673
+
674
+ public experimentalGetControlTargets(): Object3D[] {
675
+ return this.controlTargets;
676
+ }
677
+
678
+ experimentalSetAppearance(appearance: ExperimentalPuzzleAppearance): void {
679
+ this.params.appearance = appearance;
680
+ for (const orbitName in this.definition.orbits) {
681
+ const { numPieces, orientations } = this.definition.orbits[orbitName];
682
+ for (let pieceIdx = 0; pieceIdx < numPieces; pieceIdx++) {
683
+ for (let faceletIdx = 0; faceletIdx < orientations; faceletIdx++) {
684
+ const faceletAppearance = experimentalGetFaceletAppearance(
685
+ appearance,
686
+ orbitName,
687
+ pieceIdx,
688
+ faceletIdx,
689
+ false,
690
+ );
691
+ const stickerDef = this.stickers[orbitName][faceletIdx][pieceIdx];
692
+ stickerDef.setAppearance(this.filler, faceletAppearance);
693
+ }
694
+ }
695
+ }
696
+ if (this.scheduleRenderCallback) {
697
+ this.#pendingStickeringUpdate = true;
698
+ if (this.lastPos) {
699
+ this.onPositionChange(this.lastPos);
700
+ }
701
+ this.scheduleRenderCallback();
702
+ }
703
+ }
704
+
705
+ public onPositionChange(p: PuzzlePosition): void {
706
+ const state = p.state;
707
+ const noRotation = new Euler();
708
+ this.movingObj.rotation.copy(noRotation);
709
+ let colormods = 0;
710
+ const filler = this.filler;
711
+ const ind = filler.ind;
712
+ if (
713
+ !this.lastPos ||
714
+ this.#pendingStickeringUpdate ||
715
+ !areTransformationsEquivalent(this.definition, this.lastPos.state, state)
716
+ ) {
717
+ for (const orbit in this.stickers) {
718
+ const pieces = this.stickers[orbit];
719
+ const pos2 = state[orbit];
720
+ const orin = pieces.length;
721
+ if (orin === 1) {
722
+ const pieces2 = pieces[0];
723
+ for (let i = 0; i < pieces2.length; i++) {
724
+ const ni = pos2.permutation[i];
725
+ if (this.textured) {
726
+ colormods += pieces2[i].setTexture(filler, pieces2[ni]);
727
+ } else {
728
+ colormods += pieces2[i].setColor(filler, pieces2[ni]);
729
+ }
730
+ }
731
+ } else {
732
+ for (let ori = 0; ori < orin; ori++) {
733
+ const pieces2 = pieces[ori];
734
+ for (let i = 0; i < pieces2.length; i++) {
735
+ const nori = (ori + orin - pos2.orientation[i]) % orin;
736
+ const ni = pos2.permutation[i];
737
+ if (this.textured) {
738
+ colormods += pieces2[i].setTexture(filler, pieces[nori][ni]);
739
+ } else {
740
+ colormods += pieces2[i].setColor(filler, pieces[nori][ni]);
741
+ }
742
+ }
743
+ }
744
+ }
745
+ }
746
+ this.lastPos = p;
747
+ this.#pendingStickeringUpdate = false;
748
+ }
749
+ let vismods = 0;
750
+ for (const moveProgress of p.movesInProgress) {
751
+ const externalMove = moveProgress.move;
752
+ // TODO: unswizzle goes external to internal, and so does the call after that
753
+ // and so does the stateForBlockMove call
754
+ const unswizzled = this.pgdat.unswizzle(externalMove);
755
+ const move = this.pgdat.notationMapper.notationToInternal(externalMove);
756
+ if (move === null) {
757
+ throw Error("Bad blockmove " + externalMove.family);
758
+ }
759
+ const quantumTransformation = experimentalTransformationForQuantumMove(
760
+ this.definition,
761
+ externalMove.quantum,
762
+ );
763
+ const ax = this.axesInfo[unswizzled];
764
+ const turnNormal = ax.axis;
765
+ const angle =
766
+ (-this.ease(moveProgress.fraction) *
767
+ moveProgress.direction *
768
+ move.amount *
769
+ TAU) /
770
+ ax.order;
771
+ this.movingObj.rotateOnAxis(turnNormal, angle);
772
+ if (this.lastMove !== quantumTransformation) {
773
+ for (const orbit in this.stickers) {
774
+ const pieces = this.stickers[orbit];
775
+ const orin = pieces.length;
776
+ const bmv = quantumTransformation[orbit];
777
+ for (let ori = 0; ori < orin; ori++) {
778
+ const pieces2 = pieces[ori];
779
+ for (let i = 0; i < pieces2.length; i++) {
780
+ const p2 = pieces2[i];
781
+ const ni = bmv.permutation[i];
782
+ let tv = 0;
783
+ if (ni !== i || bmv.orientation[i] !== 0) {
784
+ tv = 1;
785
+ }
786
+ if (tv !== p2.twistVal) {
787
+ if (tv) {
788
+ for (let j = p2.stickerStart; j < p2.stickerEnd; j++) {
789
+ ind[j] |= 1;
790
+ }
791
+ for (let j = p2.hintStart; j < p2.hintEnd; j++) {
792
+ ind[j] |= 1;
793
+ }
794
+ for (let j = p2.foundationStart; j < p2.foundationEnd; j++) {
795
+ ind[j] |= 1;
796
+ }
797
+ } else {
798
+ for (let j = p2.stickerStart; j < p2.stickerEnd; j++) {
799
+ ind[j] &= ~1;
800
+ }
801
+ for (let j = p2.hintStart; j < p2.hintEnd; j++) {
802
+ ind[j] &= ~1;
803
+ }
804
+ for (let j = p2.foundationStart; j < p2.foundationEnd; j++) {
805
+ ind[j] &= ~1;
806
+ }
807
+ }
808
+ p2.twistVal = tv;
809
+ vismods++;
810
+ }
811
+ }
812
+ }
813
+ }
814
+ this.lastMove = quantumTransformation;
815
+ }
816
+ }
817
+ if (vismods) {
818
+ this.filler.makeGroups(this.fixedGeo);
819
+ }
820
+ if (colormods) {
821
+ if (this.textured) {
822
+ (this.fixedGeo.getAttribute("uv") as BufferAttribute).updateRange = {
823
+ offset: 0,
824
+ count: 6 * this.foundationBound,
825
+ };
826
+ (this.fixedGeo.getAttribute("uv") as BufferAttribute).needsUpdate =
827
+ true;
828
+ } else {
829
+ (this.fixedGeo.getAttribute("color") as BufferAttribute).updateRange = {
830
+ offset: 0,
831
+ count: 9 * this.foundationBound,
832
+ };
833
+ (this.fixedGeo.getAttribute("color") as BufferAttribute).needsUpdate =
834
+ true;
835
+ }
836
+ }
837
+ this.scheduleRenderCallback();
838
+ }
839
+
840
+ private ease(fraction: number): number {
841
+ return smootherStep(fraction);
842
+ }
843
+
844
+ private enableHintFacelets(v: boolean) {
845
+ this.showHintStickers = v;
846
+ this.updateMaterialArrays();
847
+ }
848
+
849
+ private updateMaterialArrays() {
850
+ for (let i = 0; i < 8; i++) {
851
+ this.materialArray1[i] = invisMaterial;
852
+ this.materialArray2[i] = invisMaterial;
853
+ }
854
+ this.materialArray1[0] = this.stickerMaterial;
855
+ this.materialArray2[1] = this.stickerMaterial;
856
+ if (this.showHintStickers) {
857
+ this.materialArray1[2] = this.hintMaterial;
858
+ this.materialArray2[3] = this.hintMaterial;
859
+ } else {
860
+ this.materialArray1[2] = invisMaterial;
861
+ this.materialArray2[3] = invisMaterial;
862
+ }
863
+ if (this.showFoundation) {
864
+ this.materialArray1[6] = foundationMaterial;
865
+ this.materialArray2[7] = foundationMaterial;
866
+ } else {
867
+ this.materialArray1[6] = invisMaterial;
868
+ this.materialArray2[7] = invisMaterial;
869
+ }
870
+ }
871
+
872
+ private enableFoundation(v: boolean) {
873
+ this.showFoundation = v;
874
+ this.updateMaterialArrays();
875
+ }
876
+
877
+ private setHintStickerOpacity(v: number): void {
878
+ if (this.hintMaterialDisposable) {
879
+ this.hintMaterial.dispose();
880
+ this.hintMaterialDisposable = false;
881
+ }
882
+ if (v === 0) {
883
+ this.hintMaterial = invisMaterial;
884
+ } else if (v === 1) {
885
+ this.hintMaterial = this.stickerMaterial;
886
+ } else {
887
+ this.hintMaterial = new MeshBasicMaterial({
888
+ vertexColors: true,
889
+ transparent: true,
890
+ opacity: 0.5,
891
+ });
892
+ this.hintMaterialDisposable = true;
893
+ }
894
+ }
895
+
896
+ public experimentalUpdateOptions(options: {
897
+ showMainStickers?: boolean;
898
+ hintFacelets?: HintFaceletStyle;
899
+ showFoundation?: boolean; // TODO: better name
900
+ hintStickerOpacity?: number;
901
+ }): void {
902
+ if (options.hintFacelets !== undefined) {
903
+ this.enableHintFacelets(options.hintFacelets !== "none");
904
+ }
905
+ if (options.showFoundation !== undefined) {
906
+ this.enableFoundation(options.showFoundation);
907
+ }
908
+ if (options.hintStickerOpacity !== undefined) {
909
+ this.setHintStickerOpacity(options.hintStickerOpacity);
910
+ }
911
+ this.#pendingStickeringUpdate = true;
912
+ if (this.lastPos) {
913
+ this.onPositionChange(this.lastPos);
914
+ }
915
+ this.scheduleRenderCallback();
916
+ }
917
+
918
+ private adduvs() {
919
+ const filler = this.filler;
920
+ if (filler.uvs) {
921
+ return;
922
+ }
923
+ this.filler.uvs = new Float32Array(12 * filler.sz);
924
+ for (const orbit in this.stickers) {
925
+ const pieces = this.stickers[orbit];
926
+ const orin = pieces.length;
927
+ for (let ori = 0; ori < orin; ori++) {
928
+ const pieces2 = pieces[ori];
929
+ for (const piece2 of pieces2) {
930
+ piece2.addUVs(this.filler);
931
+ }
932
+ }
933
+ }
934
+ filler.uvs!.copyWithin(6 * filler.sz, 0, 6 * filler.sz);
935
+ const sa1 = filler.uvs!.subarray(0, 6 * filler.sz);
936
+ this.fixedGeo.setAttribute("uv", new BufferAttribute(sa1, 2, true));
937
+ }
938
+
939
+ public experimentalUpdateTexture(
940
+ enabled: boolean,
941
+ stickerTexture?: Texture | null,
942
+ hintTexture?: Texture | null,
943
+ ) {
944
+ if (!stickerTexture) {
945
+ enabled = false;
946
+ } else if (!hintTexture) {
947
+ hintTexture = stickerTexture;
948
+ }
949
+ if (enabled && !this.filler.uvs) {
950
+ this.adduvs();
951
+ }
952
+ this.textured = enabled;
953
+ if (this.stickerMaterialDisposable) {
954
+ this.stickerMaterial.dispose();
955
+ this.stickerMaterialDisposable = false;
956
+ }
957
+ if (enabled) {
958
+ this.stickerMaterial = new MeshBasicMaterial({
959
+ map: stickerTexture,
960
+ side: FrontSide,
961
+ transparent: false,
962
+ });
963
+ this.stickerMaterialDisposable = true;
964
+ } else {
965
+ this.stickerMaterial = basicStickerMaterial;
966
+ }
967
+ if (this.hintMaterialDisposable) {
968
+ this.hintMaterial.dispose();
969
+ this.hintMaterialDisposable = false;
970
+ }
971
+ if (enabled) {
972
+ this.hintMaterial = new MeshBasicMaterial({
973
+ map: hintTexture,
974
+ side: FrontSide,
975
+ transparent: false,
976
+ });
977
+ this.hintMaterialDisposable = true;
978
+ } else {
979
+ this.hintMaterial = basicStickerMaterial;
980
+ }
981
+ this.updateMaterialArrays();
982
+ this.#pendingStickeringUpdate = true;
983
+ if (this.lastPos) {
984
+ this.onPositionChange(this.lastPos);
985
+ }
986
+ this.scheduleRenderCallback();
987
+ }
988
+ }