cubing 0.20.0 → 0.21.0-pre10

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 (755) 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 +3319 -3007
  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-BRT2MZMN.js +39 -0
  12. package/dist/esm/3d-BRT2MZMN.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-BGFVB2OS.js +740 -0
  21. package/dist/esm/chunk-BGFVB2OS.js.map +7 -0
  22. package/dist/esm/{chunk-YNB7QLBF.js → chunk-BU5PUJK3.js} +9 -10
  23. package/dist/esm/chunk-BU5PUJK3.js.map +7 -0
  24. package/dist/esm/chunk-EM5F24AO.js +2511 -0
  25. package/dist/esm/chunk-EM5F24AO.js.map +7 -0
  26. package/dist/esm/{chunk-FKDOQP32.js → chunk-H7EP5SIJ.js} +49 -71
  27. package/dist/esm/chunk-H7EP5SIJ.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 +4486 -3308
  61. package/dist/esm/twisty/index.js.map +3 -3
  62. package/dist/esm/worker-inside-generated-string-LA5JHD4B.js +2831 -0
  63. package/dist/esm/worker-inside-generated-string-LA5JHD4B.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/giiker.spec.d.ts +5 -0
  83. package/dist/types/bluetooth/smart-puzzle/giiker.spec.d.ts.map +1 -0
  84. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.d.ts +3 -0
  85. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.d.ts.map +1 -0
  86. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.d.ts +2 -0
  87. package/dist/types/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.d.ts.map +1 -0
  88. package/dist/types/kpuzzle/canon.spec.d.ts +2 -0
  89. package/dist/types/kpuzzle/canon.spec.d.ts.map +1 -0
  90. package/dist/types/kpuzzle/index.d.ts +1 -0
  91. package/dist/types/kpuzzle/index.d.ts.map +1 -1
  92. package/dist/types/kpuzzle/kpuzzle.spec.d.ts +2 -0
  93. package/dist/types/kpuzzle/kpuzzle.spec.d.ts.map +1 -0
  94. package/dist/types/kpuzzle/prunetable.spec.d.ts +2 -0
  95. package/dist/types/kpuzzle/prunetable.spec.d.ts.map +1 -0
  96. package/dist/types/kpuzzle/svg.d.ts.map +1 -1
  97. package/dist/types/kpuzzle/transformations.spec.d.ts +2 -0
  98. package/dist/types/kpuzzle/transformations.spec.d.ts.map +1 -0
  99. package/dist/types/protocol/binary/binary3x3x3.spec.d.ts +2 -0
  100. package/dist/types/protocol/binary/binary3x3x3.spec.d.ts.map +1 -0
  101. package/dist/types/protocol/binary/hex.spec.d.ts +2 -0
  102. package/dist/types/protocol/binary/hex.spec.d.ts.map +1 -0
  103. package/dist/types/protocol/binary/orbit-indexing.spec.d.ts +2 -0
  104. package/dist/types/protocol/binary/orbit-indexing.spec.d.ts.map +1 -0
  105. package/dist/types/puzzle-geometry/Options.d.ts +45 -1
  106. package/dist/types/puzzle-geometry/Options.d.ts.map +1 -1
  107. package/dist/types/puzzle-geometry/PGPuzzles.spec.d.ts +2 -0
  108. package/dist/types/puzzle-geometry/PGPuzzles.spec.d.ts.map +1 -0
  109. package/dist/types/puzzle-geometry/PermOriSet.d.ts +39 -39
  110. package/dist/types/puzzle-geometry/PermOriSet.d.ts.map +1 -1
  111. package/dist/types/puzzle-geometry/PuzzleGeometry.d.ts +118 -110
  112. package/dist/types/puzzle-geometry/PuzzleGeometry.d.ts.map +1 -1
  113. package/dist/types/puzzle-geometry/Quat.d.ts +0 -11
  114. package/dist/types/puzzle-geometry/Quat.d.ts.map +1 -1
  115. package/dist/types/puzzle-geometry/Quat.spec.d.ts +2 -0
  116. package/dist/types/puzzle-geometry/Quat.spec.d.ts.map +1 -0
  117. package/dist/types/puzzle-geometry/SchreierSims.d.ts.map +1 -1
  118. package/dist/types/puzzle-geometry/index.d.ts +2 -4
  119. package/dist/types/puzzle-geometry/index.d.ts.map +1 -1
  120. package/dist/types/puzzle-geometry/interfaces.d.ts +1 -21
  121. package/dist/types/puzzle-geometry/interfaces.d.ts.map +1 -1
  122. package/dist/types/puzzle-geometry/orientcenters.spec.d.ts +2 -0
  123. package/dist/types/puzzle-geometry/orientcenters.spec.d.ts.map +1 -0
  124. package/dist/types/puzzles/async/async-pg3d.d.ts.map +1 -1
  125. package/dist/types/puzzles/customPGPuzzleLoader.d.ts +12 -0
  126. package/dist/types/puzzles/customPGPuzzleLoader.d.ts.map +1 -0
  127. package/dist/types/puzzles/implementations/2x2x2/{2x2x2.kpuzzle.json_.d.ts → 2x2x2.kpuzzle.json.d.ts} +1 -1
  128. package/dist/types/puzzles/implementations/2x2x2/2x2x2.kpuzzle.json.d.ts.map +1 -0
  129. package/dist/types/puzzles/implementations/3x3x3/index.d.ts.map +1 -1
  130. package/dist/types/puzzles/implementations/clock/{clock.kpuzzle.json_.d.ts → clock.kpuzzle.json.d.ts} +1 -1
  131. package/dist/types/puzzles/implementations/clock/clock.kpuzzle.json.d.ts.map +1 -0
  132. package/dist/types/puzzles/implementations/pyraminx/{pyraminx.kpuzzle.json_.d.ts → pyraminx.kpuzzle.json.d.ts} +1 -1
  133. package/dist/types/puzzles/implementations/pyraminx/pyraminx.kpuzzle.json.d.ts.map +1 -0
  134. package/dist/types/puzzles/implementations/square1/index.d.ts.map +1 -1
  135. package/dist/types/puzzles/implementations/square1/{sq1-hyperorbit.kpuzzle.json_.d.ts → sq1-hyperorbit.kpuzzle.json.d.ts} +1 -1
  136. package/dist/types/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.json.d.ts.map +1 -0
  137. package/dist/types/puzzles/index.d.ts +4 -2
  138. package/dist/types/puzzles/index.d.ts.map +1 -1
  139. package/dist/types/puzzles/stickerings/appearance.d.ts +9 -9
  140. package/dist/types/puzzles/stickerings/appearance.d.ts.map +1 -1
  141. package/dist/types/puzzles/stickerings/cube-stickerings.d.ts.map +1 -1
  142. package/dist/types/puzzles/stickerings/global-custom-stickering-hack.d.ts +3 -0
  143. package/dist/types/puzzles/stickerings/global-custom-stickering-hack.d.ts.map +1 -0
  144. package/dist/types/search/index.d.ts +1 -1
  145. package/dist/types/search/index.d.ts.map +1 -1
  146. package/dist/types/search/inside/api.d.ts +2 -1
  147. package/dist/types/search/inside/api.d.ts.map +1 -1
  148. package/dist/types/search/inside/api.spec.d.ts +2 -0
  149. package/dist/types/search/inside/api.spec.d.ts.map +1 -0
  150. package/dist/types/search/inside/solve/parseSGS.d.ts.map +1 -1
  151. package/dist/types/search/inside/solve/puzzles/2x2x2.d.ts.map +1 -1
  152. package/dist/types/search/inside/solve/puzzles/3x3x3/filter.d.ts.map +1 -1
  153. package/dist/types/search/inside/solve/puzzles/3x3x3/index.d.ts.map +1 -1
  154. package/dist/types/search/inside/solve/puzzles/megaminx.sgs.json.d.ts.map +1 -1
  155. package/dist/types/search/inside/solve/puzzles/sgs-defs.spec.d.ts +2 -0
  156. package/dist/types/search/inside/solve/puzzles/sgs-defs.spec.d.ts.map +1 -0
  157. package/dist/types/search/inside/solve/puzzles/skewb.sgs.json.d.ts.map +1 -1
  158. package/dist/types/search/inside/solve/tremble.d.ts.map +1 -1
  159. package/dist/types/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.d.ts +4 -31
  160. package/dist/types/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.d.ts.map +1 -1
  161. package/dist/types/search/inside/solve/vendor/cstimer/src/js/scramble/scramble_444.d.ts.map +1 -1
  162. package/dist/types/search/inside/solve/vendor/min2phase/gwt.d.ts +3 -0
  163. package/dist/types/search/inside/solve/vendor/min2phase/gwt.d.ts.map +1 -0
  164. package/dist/types/search/inside/solve/vendor/random-uint-below/get-random-values.d.ts.map +1 -1
  165. package/dist/types/search/inside/solve/vendor/random-uint-below/random-int.d.ts.map +1 -1
  166. package/dist/types/search/inside/solve/vendor/sq12phase/scramble_sq1.d.ts.map +1 -1
  167. package/dist/types/search/instantiator.d.ts.map +1 -1
  168. package/dist/types/search/outside.d.ts +4 -2
  169. package/dist/types/search/outside.d.ts.map +1 -1
  170. package/dist/types/search/worker-inside-generated-string.d.ts +1 -1
  171. package/dist/types/search/worker-inside-generated-string.d.ts.map +1 -1
  172. package/dist/types/stream/twizzle/TwizzleStream.d.ts +9 -8
  173. package/dist/types/stream/twizzle/TwizzleStream.d.ts.map +1 -1
  174. package/dist/types/stream/websocket-proxy.d.ts +1 -1
  175. package/dist/types/stream/websocket-proxy.d.ts.map +1 -1
  176. package/dist/types/twisty/controllers/TwistyAnimationController.d.ts +34 -0
  177. package/dist/types/twisty/controllers/TwistyAnimationController.d.ts.map +1 -0
  178. package/dist/types/twisty/controllers/TwistyPlayerController.d.ts +16 -0
  179. package/dist/types/twisty/controllers/TwistyPlayerController.d.ts.map +1 -0
  180. package/dist/types/twisty/heavy-code-imports/3d.d.ts +3 -0
  181. package/dist/types/twisty/heavy-code-imports/3d.d.ts.map +1 -0
  182. package/dist/types/twisty/heavy-code-imports/dynamic-entries/3d.d.ts +12 -0
  183. package/dist/types/twisty/heavy-code-imports/dynamic-entries/3d.d.ts.map +1 -0
  184. package/dist/types/twisty/index.d.ts +20 -15
  185. package/dist/types/twisty/index.d.ts.map +1 -1
  186. package/dist/types/twisty/model/PromiseFreshener.d.ts +14 -0
  187. package/dist/types/twisty/model/PromiseFreshener.d.ts.map +1 -0
  188. package/dist/types/twisty/model/TwistyPlayerModel.d.ts +82 -0
  189. package/dist/types/twisty/model/TwistyPlayerModel.d.ts.map +1 -0
  190. package/dist/types/twisty/model/helpers.d.ts +5 -0
  191. package/dist/types/twisty/model/helpers.d.ts.map +1 -0
  192. package/dist/types/twisty/model/props/TwistyProp.d.ts +58 -0
  193. package/dist/types/twisty/model/props/TwistyProp.d.ts.map +1 -0
  194. package/dist/types/twisty/model/props/TwistyProp.spec.d.ts +5 -0
  195. package/dist/types/twisty/model/props/TwistyProp.spec.d.ts.map +1 -0
  196. package/dist/types/twisty/model/props/TwistyPropDebugger.d.ts +28 -0
  197. package/dist/types/twisty/model/props/TwistyPropDebugger.d.ts.map +1 -0
  198. package/dist/types/twisty/model/props/general/URLProp.d.ts +6 -0
  199. package/dist/types/twisty/model/props/general/URLProp.d.ts.map +1 -0
  200. package/dist/types/twisty/model/props/puzzle/display/HintFaceletProp.d.ts +7 -0
  201. package/dist/types/twisty/model/props/puzzle/display/HintFaceletProp.d.ts.map +1 -0
  202. package/dist/types/twisty/model/props/puzzle/display/SpriteProp.d.ts +10 -0
  203. package/dist/types/twisty/model/props/puzzle/display/SpriteProp.d.ts.map +1 -0
  204. package/dist/types/twisty/model/props/puzzle/display/StickeringProp.d.ts +6 -0
  205. package/dist/types/twisty/model/props/puzzle/display/StickeringProp.d.ts.map +1 -0
  206. package/dist/types/twisty/model/props/puzzle/state/AlgProp.d.ts +27 -0
  207. package/dist/types/twisty/model/props/puzzle/state/AlgProp.d.ts.map +1 -0
  208. package/dist/types/twisty/model/props/puzzle/state/AlgTransformationProp.d.ts +14 -0
  209. package/dist/types/twisty/model/props/puzzle/state/AlgTransformationProp.d.ts.map +1 -0
  210. package/dist/types/twisty/model/props/puzzle/state/AnchoredStartProp.d.ts +15 -0
  211. package/dist/types/twisty/model/props/puzzle/state/AnchoredStartProp.d.ts.map +1 -0
  212. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesProp.d.ts +12 -0
  213. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesProp.d.ts.map +1 -0
  214. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesSimplified.d.ts +17 -0
  215. package/dist/types/twisty/model/props/puzzle/state/CurrentLeavesSimplified.d.ts.map +1 -0
  216. package/dist/types/twisty/model/props/puzzle/state/CurrentTransformationProp.d.ts +15 -0
  217. package/dist/types/twisty/model/props/puzzle/state/CurrentTransformationProp.d.ts.map +1 -0
  218. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorProp.d.ts +17 -0
  219. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorProp.d.ts.map +1 -0
  220. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.d.ts +12 -0
  221. package/dist/types/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.d.ts.map +1 -0
  222. package/dist/types/twisty/model/props/puzzle/state/IndexerProp.d.ts +15 -0
  223. package/dist/types/twisty/model/props/puzzle/state/IndexerProp.d.ts.map +1 -0
  224. package/dist/types/twisty/model/props/puzzle/state/LegacyPositionProp.d.ts +12 -0
  225. package/dist/types/twisty/model/props/puzzle/state/LegacyPositionProp.d.ts.map +1 -0
  226. package/dist/types/twisty/model/props/puzzle/state/PuzzleAlgProp.d.ts +13 -0
  227. package/dist/types/twisty/model/props/puzzle/state/PuzzleAlgProp.d.ts.map +1 -0
  228. package/dist/types/twisty/model/props/puzzle/state/SetupAnchorProp.d.ts +6 -0
  229. package/dist/types/twisty/model/props/puzzle/state/SetupAnchorProp.d.ts.map +1 -0
  230. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDefProp.d.ts +11 -0
  231. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDefProp.d.ts.map +1 -0
  232. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.d.ts +6 -0
  233. package/dist/types/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.d.ts.map +1 -0
  234. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDProp.d.ts +11 -0
  235. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDProp.d.ts.map +1 -0
  236. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.d.ts +6 -0
  237. package/dist/types/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.d.ts.map +1 -0
  238. package/dist/types/twisty/model/props/puzzle/structure/PuzzleLoaderProp.d.ts +13 -0
  239. package/dist/types/twisty/model/props/puzzle/structure/PuzzleLoaderProp.d.ts.map +1 -0
  240. package/dist/types/twisty/model/props/timeline/CoarseTimelineInfoProp.d.ts +25 -0
  241. package/dist/types/twisty/model/props/timeline/CoarseTimelineInfoProp.d.ts.map +1 -0
  242. package/dist/types/twisty/model/props/timeline/DetailedTimelineInfoProp.d.ts +23 -0
  243. package/dist/types/twisty/model/props/timeline/DetailedTimelineInfoProp.d.ts.map +1 -0
  244. package/dist/types/twisty/model/props/timeline/PlayingInfoProp.d.ts +15 -0
  245. package/dist/types/twisty/model/props/timeline/PlayingInfoProp.d.ts.map +1 -0
  246. package/dist/types/twisty/model/props/timeline/TempoScaleProp.d.ts +6 -0
  247. package/dist/types/twisty/model/props/timeline/TempoScaleProp.d.ts.map +1 -0
  248. package/dist/types/twisty/model/props/timeline/TimestampRequestProp.d.ts +16 -0
  249. package/dist/types/twisty/model/props/timeline/TimestampRequestProp.d.ts.map +1 -0
  250. package/dist/types/twisty/model/props/viewer/BackViewProp.d.ts +7 -0
  251. package/dist/types/twisty/model/props/viewer/BackViewProp.d.ts.map +1 -0
  252. package/dist/types/twisty/model/props/viewer/BackgroundProp.d.ts +7 -0
  253. package/dist/types/twisty/model/props/viewer/BackgroundProp.d.ts.map +1 -0
  254. package/dist/types/twisty/model/props/viewer/ButtonAppearanceProp.d.ts +22 -0
  255. package/dist/types/twisty/model/props/viewer/ButtonAppearanceProp.d.ts.map +1 -0
  256. package/dist/types/twisty/model/props/viewer/ControlPanelProp.d.ts +7 -0
  257. package/dist/types/twisty/model/props/viewer/ControlPanelProp.d.ts.map +1 -0
  258. package/dist/types/twisty/model/props/viewer/LatitudeLimit.d.ts +6 -0
  259. package/dist/types/twisty/model/props/viewer/LatitudeLimit.d.ts.map +1 -0
  260. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesProp.d.ts +16 -0
  261. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesProp.d.ts.map +1 -0
  262. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesRequestProp.d.ts +15 -0
  263. package/dist/types/twisty/model/props/viewer/OrbitCoordinatesRequestProp.d.ts.map +1 -0
  264. package/dist/types/twisty/model/props/viewer/TimeRangeProp.d.ts +11 -0
  265. package/dist/types/twisty/model/props/viewer/TimeRangeProp.d.ts.map +1 -0
  266. package/dist/types/twisty/model/props/viewer/ViewerLinkProp.d.ts +7 -0
  267. package/dist/types/twisty/model/props/viewer/ViewerLinkProp.d.ts.map +1 -0
  268. package/dist/types/twisty/model/props/viewer/VisualizationProp.d.ts +7 -0
  269. package/dist/types/twisty/model/props/viewer/VisualizationProp.d.ts.map +1 -0
  270. package/dist/types/twisty/model/props/viewer/VisualizationStrategyProp.d.ts +13 -0
  271. package/dist/types/twisty/model/props/viewer/VisualizationStrategyProp.d.ts.map +1 -0
  272. package/dist/types/twisty/{animation → old/animation}/RenderScheduler.d.ts +3 -0
  273. package/dist/types/twisty/old/animation/RenderScheduler.d.ts.map +1 -0
  274. package/dist/types/twisty/{animation → old/animation}/Timeline.d.ts +0 -0
  275. package/dist/types/twisty/old/animation/Timeline.d.ts.map +1 -0
  276. package/dist/types/twisty/{animation → old/animation}/cursor/AlgCursor.d.ts +4 -4
  277. package/dist/types/twisty/old/animation/cursor/AlgCursor.d.ts.map +1 -0
  278. package/dist/types/twisty/{animation → old/animation}/cursor/CursorTypes.d.ts +4 -4
  279. package/dist/types/twisty/old/animation/cursor/CursorTypes.d.ts.map +1 -0
  280. package/dist/types/twisty/{animation → old/animation}/easing.d.ts +0 -0
  281. package/dist/types/twisty/old/animation/easing.d.ts.map +1 -0
  282. package/dist/types/twisty/{animation → old/animation}/indexer/AlgDuration.d.ts +1 -1
  283. package/dist/types/twisty/old/animation/indexer/AlgDuration.d.ts.map +1 -0
  284. package/dist/types/twisty/old/animation/indexer/AlgIndexer.d.ts +36 -0
  285. package/dist/types/twisty/old/animation/indexer/AlgIndexer.d.ts.map +1 -0
  286. package/dist/types/twisty/{animation → old/animation}/indexer/SimpleAlgIndexer.d.ts +3 -3
  287. package/dist/types/twisty/old/animation/indexer/SimpleAlgIndexer.d.ts.map +1 -0
  288. package/dist/types/twisty/{animation → old/animation}/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts +6 -5
  289. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts.map +1 -0
  290. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.d.ts +22 -0
  291. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.d.ts.map +1 -0
  292. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/simul-moves.d.ts +26 -0
  293. package/dist/types/twisty/old/animation/indexer/simultaneous-moves/simul-moves.d.ts.map +1 -0
  294. package/dist/types/twisty/{animation → old/animation}/indexer/tree/AlgWalker.d.ts +2 -2
  295. package/dist/types/twisty/old/animation/indexer/tree/AlgWalker.d.ts.map +1 -0
  296. package/dist/types/twisty/{animation → old/animation}/indexer/tree/TreeAlgIndexer.d.ts +3 -3
  297. package/dist/types/twisty/old/animation/indexer/tree/TreeAlgIndexer.d.ts.map +1 -0
  298. package/dist/types/twisty/old/animation/indexer/tree/chunkAlgs.d.ts +3 -0
  299. package/dist/types/twisty/old/animation/indexer/tree/chunkAlgs.d.ts.map +1 -0
  300. package/dist/types/twisty/{animation → old/animation}/stream/timeline-move-calculation-draft.d.ts +1 -1
  301. package/dist/types/twisty/old/animation/stream/timeline-move-calculation-draft.d.ts.map +1 -0
  302. package/dist/types/twisty/{dom/TwistyAlgViewer.css_.d.ts → old/dom/TwistyAlgViewerV1.css.d.ts} +1 -1
  303. package/dist/types/twisty/old/dom/TwistyAlgViewerV1.css.d.ts.map +1 -0
  304. package/dist/types/twisty/old/dom/TwistyAlgViewerV1.d.ts +52 -0
  305. package/dist/types/twisty/old/dom/TwistyAlgViewerV1.d.ts.map +1 -0
  306. package/dist/types/twisty/{dom/TwistyPlayer.css_.d.ts → old/dom/TwistyPlayer.css.d.ts} +1 -1
  307. package/dist/types/twisty/old/dom/TwistyPlayer.css.d.ts.map +1 -0
  308. package/dist/types/twisty/{dom → old/dom}/TwistyPlayer.d.ts +8 -8
  309. package/dist/types/twisty/old/dom/TwistyPlayer.d.ts.map +1 -0
  310. package/dist/types/twisty/old/dom/TwistyPlayer.spec.d.ts +5 -0
  311. package/dist/types/twisty/old/dom/TwistyPlayer.spec.d.ts.map +1 -0
  312. package/dist/types/twisty/{dom → old/dom}/TwistyPlayerConfig.d.ts +9 -5
  313. package/dist/types/twisty/old/dom/TwistyPlayerConfig.d.ts.map +1 -0
  314. package/dist/types/twisty/old/dom/controls/TwistyControlElement.d.ts +2 -0
  315. package/dist/types/twisty/old/dom/controls/TwistyControlElement.d.ts.map +1 -0
  316. package/dist/types/twisty/{dom/controls/TwistyScrubber.css_.d.ts → old/dom/controls/TwistyScrubber.css.d.ts} +1 -1
  317. package/dist/types/twisty/old/dom/controls/TwistyScrubber.css.d.ts.map +1 -0
  318. package/dist/types/twisty/{dom → old/dom}/controls/TwistyScrubber.d.ts +1 -1
  319. package/dist/types/twisty/old/dom/controls/TwistyScrubber.d.ts.map +1 -0
  320. package/dist/types/twisty/{dom/controls/buttons.css_.d.ts → old/dom/controls/buttons.css.d.ts} +1 -1
  321. package/dist/types/twisty/old/dom/controls/buttons.css.d.ts.map +1 -0
  322. package/dist/types/twisty/{dom → old/dom}/controls/buttons.d.ts +1 -1
  323. package/dist/types/twisty/old/dom/controls/buttons.d.ts.map +1 -0
  324. package/dist/types/twisty/old/dom/controls/buttons.spec.d.ts +5 -0
  325. package/dist/types/twisty/old/dom/controls/buttons.spec.d.ts.map +1 -0
  326. package/dist/types/twisty/{dom → old/dom}/element/ClassListManager.d.ts +0 -0
  327. package/dist/types/twisty/old/dom/element/ClassListManager.d.ts.map +1 -0
  328. package/dist/types/twisty/{dom → old/dom}/element/ElementConfig.d.ts +1 -1
  329. package/dist/types/twisty/old/dom/element/ElementConfig.d.ts.map +1 -0
  330. package/dist/types/twisty/{dom → old/dom}/element/ManagedCustomElement.d.ts +0 -0
  331. package/dist/types/twisty/old/dom/element/ManagedCustomElement.d.ts.map +1 -0
  332. package/dist/types/twisty/{dom → old/dom}/element/node-custom-element-shims.d.ts +0 -0
  333. package/dist/types/twisty/old/dom/element/node-custom-element-shims.d.ts.map +1 -0
  334. package/dist/types/twisty/{dom/stream/TwistyStreamSource.css_.d.ts → old/dom/stream/TwistyStreamSource.css.d.ts} +1 -1
  335. package/dist/types/twisty/old/dom/stream/TwistyStreamSource.css.d.ts.map +1 -0
  336. package/dist/types/twisty/{dom → old/dom}/stream/TwistyStreamSource.d.ts +0 -0
  337. package/dist/types/twisty/old/dom/stream/TwistyStreamSource.d.ts.map +1 -0
  338. package/dist/types/twisty/{dom → old/dom}/viewers/Twisty2DSVG.d.ts +2 -2
  339. package/dist/types/twisty/old/dom/viewers/Twisty2DSVG.d.ts.map +1 -0
  340. package/dist/types/twisty/{dom/viewers/Twisty2DSVGView.css_.d.ts → old/dom/viewers/Twisty2DSVGView.css.d.ts} +1 -1
  341. package/dist/types/twisty/old/dom/viewers/Twisty2DSVGView.css.d.ts.map +1 -0
  342. package/dist/types/twisty/{dom/viewers/Twisty3DCanvas.css_.d.ts → old/dom/viewers/Twisty3DCanvas.css.d.ts} +1 -1
  343. package/dist/types/twisty/old/dom/viewers/Twisty3DCanvas.css.d.ts.map +1 -0
  344. package/dist/types/twisty/{dom → old/dom}/viewers/Twisty3DCanvas.d.ts +1 -2
  345. package/dist/types/twisty/old/dom/viewers/Twisty3DCanvas.d.ts.map +1 -0
  346. package/dist/types/twisty/{dom → old/dom}/viewers/TwistyOrbitControls.d.ts +0 -0
  347. package/dist/types/twisty/old/dom/viewers/TwistyOrbitControls.d.ts.map +1 -0
  348. package/dist/types/twisty/old/dom/viewers/TwistyViewerElement.d.ts +4 -0
  349. package/dist/types/twisty/old/dom/viewers/TwistyViewerElement.d.ts.map +1 -0
  350. package/dist/types/twisty/{dom/viewers/TwistyViewerWrapper.css_.d.ts → old/dom/viewers/TwistyViewerWrapper.css.d.ts} +1 -1
  351. package/dist/types/twisty/old/dom/viewers/TwistyViewerWrapper.css.d.ts.map +1 -0
  352. package/dist/types/twisty/{dom → old/dom}/viewers/TwistyViewerWrapper.d.ts +0 -0
  353. package/dist/types/twisty/old/dom/viewers/TwistyViewerWrapper.d.ts.map +1 -0
  354. package/dist/types/twisty/old/dom/viewers/canvas.d.ts +3 -0
  355. package/dist/types/twisty/old/dom/viewers/canvas.d.ts.map +1 -0
  356. package/dist/types/twisty/views/2D/Twisty2DPuzzle.d.ts +29 -0
  357. package/dist/types/twisty/views/2D/Twisty2DPuzzle.d.ts.map +1 -0
  358. package/dist/types/twisty/views/2D/Twisty2DPuzzleWrapper.d.ts +16 -0
  359. package/dist/types/twisty/views/2D/Twisty2DPuzzleWrapper.d.ts.map +1 -0
  360. package/dist/types/twisty/views/2D/Twisty2DSceneWrapper.d.ts +20 -0
  361. package/dist/types/twisty/views/2D/Twisty2DSceneWrapper.d.ts.map +1 -0
  362. package/dist/types/twisty/views/3D/RendererPool.d.ts +4 -0
  363. package/dist/types/twisty/views/3D/RendererPool.d.ts.map +1 -0
  364. package/dist/types/twisty/{3D → views/3D}/TAU.d.ts +0 -0
  365. package/dist/types/twisty/views/3D/TAU.d.ts.map +1 -0
  366. package/dist/types/twisty/views/3D/Twisty3DPuzzleWrapper.d.ts +17 -0
  367. package/dist/types/twisty/views/3D/Twisty3DPuzzleWrapper.d.ts.map +1 -0
  368. package/dist/types/twisty/{3D → views/3D}/Twisty3DRenderTarget.d.ts +0 -0
  369. package/dist/types/twisty/views/3D/Twisty3DRenderTarget.d.ts.map +1 -0
  370. package/dist/types/twisty/{3D → views/3D}/Twisty3DScene.d.ts +0 -0
  371. package/dist/types/twisty/views/3D/Twisty3DScene.d.ts.map +1 -0
  372. package/dist/types/twisty/views/3D/Twisty3DSceneWrapper.d.ts +28 -0
  373. package/dist/types/twisty/views/3D/Twisty3DSceneWrapper.d.ts.map +1 -0
  374. package/dist/types/twisty/views/3D/Twisty3DVantage.d.ts +32 -0
  375. package/dist/types/twisty/views/3D/Twisty3DVantage.d.ts.map +1 -0
  376. package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.d.ts +41 -0
  377. package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.d.ts.map +1 -0
  378. package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.spec.d.ts +5 -0
  379. package/dist/types/twisty/views/3D/TwistyOrbitControlsV2.spec.d.ts.map +1 -0
  380. package/dist/types/twisty/{3D → views/3D}/puzzles/Cube3D.d.ts +11 -7
  381. package/dist/types/twisty/views/3D/puzzles/Cube3D.d.ts.map +1 -0
  382. package/dist/types/twisty/{3D → views/3D}/puzzles/KPuzzleWrapper.d.ts +2 -2
  383. package/dist/types/twisty/views/3D/puzzles/KPuzzleWrapper.d.ts.map +1 -0
  384. package/dist/types/twisty/views/3D/puzzles/PG3D.d.ts +57 -0
  385. package/dist/types/twisty/views/3D/puzzles/PG3D.d.ts.map +1 -0
  386. package/dist/types/twisty/{3D → views/3D}/puzzles/Twisty3DPuzzle.d.ts +1 -1
  387. package/dist/types/twisty/views/3D/puzzles/Twisty3DPuzzle.d.ts.map +1 -0
  388. package/dist/types/twisty/{3D → views/3D}/puzzles/TwistyTestBox.d.ts +2 -2
  389. package/dist/types/twisty/views/3D/puzzles/TwistyTestBox.d.ts.map +1 -0
  390. package/dist/types/twisty/views/TwistyAlgEditor/LeafTokens.d.ts +18 -0
  391. package/dist/types/twisty/views/TwistyAlgEditor/LeafTokens.d.ts.map +1 -0
  392. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.css.d.ts +3 -0
  393. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.css.d.ts.map +1 -0
  394. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.d.ts +40 -0
  395. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.d.ts.map +1 -0
  396. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.spec.d.ts +5 -0
  397. package/dist/types/twisty/views/TwistyAlgEditor/TwistyAlgEditor.spec.d.ts.map +1 -0
  398. package/dist/types/twisty/views/TwistyAlgEditor/model.d.ts +61 -0
  399. package/dist/types/twisty/views/TwistyAlgEditor/model.d.ts.map +1 -0
  400. package/dist/types/twisty/views/TwistyAlgViewer.css.d.ts +3 -0
  401. package/dist/types/twisty/views/TwistyAlgViewer.css.d.ts.map +1 -0
  402. package/dist/types/twisty/{dom → views}/TwistyAlgViewer.d.ts +6 -6
  403. package/dist/types/twisty/views/TwistyAlgViewer.d.ts.map +1 -0
  404. package/dist/types/twisty/views/TwistyPlayer.d.ts +97 -0
  405. package/dist/types/twisty/views/TwistyPlayer.d.ts.map +1 -0
  406. package/dist/types/twisty/views/TwistyPlayerSettable.d.ts +71 -0
  407. package/dist/types/twisty/views/TwistyPlayerSettable.d.ts.map +1 -0
  408. package/dist/types/twisty/views/control-panel/TwistyButtonsV2.d.ts +33 -0
  409. package/dist/types/twisty/views/control-panel/TwistyButtonsV2.d.ts.map +1 -0
  410. package/dist/types/twisty/views/control-panel/TwistyScrubberV2.d.ts +14 -0
  411. package/dist/types/twisty/views/control-panel/TwistyScrubberV2.d.ts.map +1 -0
  412. package/dist/types/twisty/views/control-panel/webkit-fullscreen.d.ts +15 -0
  413. package/dist/types/twisty/views/control-panel/webkit-fullscreen.d.ts.map +1 -0
  414. package/dist/types/twisty/views/document.d.ts +2 -0
  415. package/dist/types/twisty/views/document.d.ts.map +1 -0
  416. package/dist/types/twisty/views/screenshot.d.ts +12 -0
  417. package/dist/types/twisty/views/screenshot.d.ts.map +1 -0
  418. package/dist/types/vendor/p-lazy/p-lazy.d.ts +10 -0
  419. package/dist/types/vendor/p-lazy/p-lazy.d.ts.map +1 -0
  420. package/dist/types/vendor/three/examples/jsm/libs/stats.modified.module.d.ts +33 -0
  421. package/dist/types/vendor/three/examples/jsm/libs/stats.modified.module.d.ts.map +1 -0
  422. package/docs/.DS_Store +0 -0
  423. package/docs/cubing/.DS_Store +0 -0
  424. package/docs/cubing/alg/index.html +37 -23
  425. package/docs/cubing/index.html +56 -252
  426. package/docs/cubing/scramble/index.html +122 -0
  427. package/docs/cubing/twisty/index.html +329 -0
  428. package/docs/main.css +15 -3
  429. package/package.json +81 -55
  430. package/src/cubing/.DS_Store +0 -0
  431. package/src/cubing/alg/.DS_Store +0 -0
  432. package/src/cubing/alg/Alg.ts +89 -0
  433. package/src/cubing/alg/common.ts +4 -2
  434. package/src/cubing/alg/iteration.ts +1 -1
  435. package/src/cubing/alg/parse.ts +2 -0
  436. package/src/cubing/alg/test/alg-comparison.ts +1 -0
  437. package/src/cubing/alg/units/.DS_Store +0 -0
  438. package/src/cubing/alg/units/Unit.ts +0 -3
  439. package/src/cubing/alg/units/containers/Commutator.ts +1 -1
  440. package/src/cubing/alg/units/leaves/Move.ts +4 -4
  441. package/src/cubing/bluetooth/.DS_Store +0 -0
  442. package/src/cubing/bluetooth/smart-puzzle/Heykube.ts +1 -1
  443. package/src/cubing/bluetooth/smart-puzzle/gan.ts +5 -5
  444. package/src/cubing/bluetooth/smart-puzzle/giiker.ts +2 -2
  445. package/src/cubing/bluetooth/smart-puzzle/gocube.ts +5 -5
  446. package/src/cubing/bluetooth/smart-robot/GanRobot.ts +5 -5
  447. package/src/cubing/bluetooth/smart-timer/GanTimer.ts +2 -2
  448. package/src/cubing/{solve → kpuzzle}/.DS_Store +0 -0
  449. package/src/cubing/kpuzzle/3x3x3/3x3x3.kpuzzle.json.spec.ts +40 -0
  450. package/src/cubing/{puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.ts → kpuzzle/3x3x3/3x3x3.kpuzzle.json.ts} +11 -6
  451. package/src/cubing/kpuzzle/canon.spec.ts +6 -11
  452. package/src/cubing/kpuzzle/canonicalize.ts +1 -1
  453. package/src/cubing/kpuzzle/definition_types.ts +0 -3
  454. package/src/cubing/kpuzzle/index.ts +1 -0
  455. package/src/cubing/kpuzzle/prunetable.spec.ts +2 -4
  456. package/src/cubing/kpuzzle/puzzle-orientation.ts +1 -1
  457. package/src/cubing/kpuzzle/svg.ts +4 -9
  458. package/src/cubing/kpuzzle/transformations.ts +1 -1
  459. package/src/cubing/protocol/binary/binary3x3x3.spec.ts +5 -2
  460. package/src/cubing/protocol/binary/hex.ts +4 -4
  461. package/src/cubing/protocol/binary/orbit-indexing.ts +2 -2
  462. package/src/cubing/protocol/binary/puzzle-orientation.ts +2 -2
  463. package/src/cubing/puzzle-geometry/Options.ts +151 -22
  464. package/src/cubing/puzzle-geometry/PGPuzzles.spec.ts +24 -28
  465. package/src/cubing/puzzle-geometry/PermOriSet.ts +99 -98
  466. package/src/cubing/puzzle-geometry/PlatonicGenerator.ts +1 -1
  467. package/src/cubing/puzzle-geometry/PuzzleGeometry.ts +836 -867
  468. package/src/cubing/puzzle-geometry/Quat.ts +1 -68
  469. package/src/cubing/puzzle-geometry/SchreierSims.ts +2 -13
  470. package/src/cubing/puzzle-geometry/index.ts +2 -11
  471. package/src/cubing/puzzle-geometry/interfaces.ts +1 -27
  472. package/src/cubing/puzzle-geometry/orientcenters.spec.ts +24 -30
  473. package/src/cubing/puzzles/.DS_Store +0 -0
  474. package/src/cubing/puzzles/async/async-pg3d.ts +5 -8
  475. package/src/cubing/puzzles/customPGPuzzleLoader.ts +60 -0
  476. package/src/cubing/puzzles/implementations/.DS_Store +0 -0
  477. package/src/cubing/puzzles/implementations/2x2x2/{2x2x2.kpuzzle.json_.ts → 2x2x2.kpuzzle.json.ts} +0 -0
  478. package/src/cubing/puzzles/implementations/2x2x2/index.ts +1 -1
  479. package/src/cubing/puzzles/implementations/3x3x3/index.ts +2 -3
  480. package/src/cubing/puzzles/implementations/clock/{clock.kpuzzle.json_.ts → clock.kpuzzle.json.ts} +0 -0
  481. package/src/cubing/puzzles/implementations/clock/index.ts +1 -1
  482. package/src/cubing/puzzles/implementations/pyraminx/{pyraminx.kpuzzle.json_.ts → pyraminx.kpuzzle.json.ts} +0 -0
  483. package/src/cubing/puzzles/implementations/square1/index.ts +1 -2
  484. package/src/cubing/puzzles/implementations/square1/{sq1-hyperorbit.kpuzzle.json_.ts → sq1-hyperorbit.kpuzzle.json.ts} +0 -0
  485. package/src/cubing/puzzles/index.ts +5 -2
  486. package/src/cubing/puzzles/stickerings/appearance.ts +10 -9
  487. package/src/cubing/puzzles/stickerings/cube-stickerings.ts +8 -0
  488. package/src/cubing/puzzles/stickerings/global-custom-stickering-hack.ts +61 -0
  489. package/src/cubing/search/.DS_Store +0 -0
  490. package/src/cubing/search/.gitignore +1 -2
  491. package/src/cubing/search/esm-test-worker.js +1 -1
  492. package/src/cubing/search/index.ts +1 -0
  493. package/src/cubing/search/inside/api.ts +5 -1
  494. package/src/cubing/search/inside/solve/parseSGS.ts +7 -11
  495. package/src/cubing/search/inside/solve/puzzles/2x2x2.ts +4 -3
  496. package/src/cubing/search/inside/solve/puzzles/3x3x3/filter.ts +0 -6
  497. package/src/cubing/search/inside/solve/puzzles/3x3x3/index.ts +0 -2
  498. package/src/cubing/search/inside/solve/puzzles/FTO.sgs +264 -0
  499. package/src/cubing/search/inside/solve/puzzles/megaminx.sgs.json.ts +4 -6
  500. package/src/cubing/search/inside/solve/puzzles/pyraminx.sgs.json.ts +1 -1
  501. package/src/cubing/search/inside/solve/puzzles/skewb.sgs.json.ts +4 -6
  502. package/src/cubing/search/inside/solve/tremble.ts +6 -9
  503. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lib/mathlib.ts +20 -822
  504. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/scramble/scramble_444.ts +177 -252
  505. package/src/cubing/search/inside/solve/vendor/min2phase/gwt.js +62 -222
  506. package/src/cubing/search/inside/solve/vendor/random-uint-below/get-random-values.ts +4 -5
  507. package/src/cubing/search/inside/solve/vendor/random-uint-below/random-int.ts +9 -11
  508. package/src/cubing/search/inside/solve/vendor/sq12phase/scramble_sq1.js +13 -582
  509. package/src/cubing/search/instantiator.ts +11 -7
  510. package/src/cubing/search/outside.ts +8 -2
  511. package/src/cubing/search/worker-inside-generated-string.js +1 -1
  512. package/src/cubing/stream/.DS_Store +0 -0
  513. package/src/cubing/stream/process/ReorientedStream.ts +1 -1
  514. package/src/cubing/stream/twizzle/TwizzleStream.ts +11 -8
  515. package/src/cubing/stream/websocket-proxy.ts +1 -3
  516. package/src/cubing/twisty/.DS_Store +0 -0
  517. package/src/cubing/twisty/controllers/TwistyAnimationController.ts +248 -0
  518. package/src/cubing/twisty/controllers/TwistyPlayerController.ts +38 -0
  519. package/src/cubing/twisty/heavy-code-imports/3d.ts +18 -0
  520. package/src/cubing/twisty/heavy-code-imports/dynamic-entries/3d.ts +41 -0
  521. package/src/cubing/twisty/index.ts +24 -17
  522. package/src/cubing/{protocol → twisty/model}/.DS_Store +0 -0
  523. package/src/cubing/twisty/model/PromiseFreshener.ts +49 -0
  524. package/src/cubing/twisty/model/TwistyPlayerModel.ts +214 -0
  525. package/src/cubing/twisty/model/helpers.ts +47 -0
  526. package/src/cubing/{search/vendor → twisty/model/props}/.DS_Store +0 -0
  527. package/src/cubing/twisty/model/props/TwistyProp.spec.ts +38 -0
  528. package/src/cubing/twisty/model/props/TwistyProp.ts +361 -0
  529. package/src/cubing/twisty/model/props/TwistyPropDebugger.ts +370 -0
  530. package/src/cubing/twisty/model/props/general/URLProp.ts +14 -0
  531. package/src/cubing/twisty/{3D → model/props/puzzle}/.DS_Store +0 -0
  532. package/src/cubing/twisty/model/props/puzzle/display/HintFaceletProp.ts +10 -0
  533. package/src/cubing/twisty/model/props/puzzle/display/SpriteProp.ts +43 -0
  534. package/src/cubing/twisty/model/props/puzzle/display/StickeringProp.ts +8 -0
  535. package/src/cubing/twisty/model/props/puzzle/state/AlgProp.ts +91 -0
  536. package/src/cubing/twisty/model/props/puzzle/state/AlgTransformationProp.ts +28 -0
  537. package/src/cubing/twisty/model/props/puzzle/state/AnchoredStartProp.ts +44 -0
  538. package/src/cubing/twisty/model/props/puzzle/state/CurrentLeavesProp.ts +91 -0
  539. package/src/cubing/twisty/model/props/puzzle/state/CurrentLeavesSimplified.ts +48 -0
  540. package/src/cubing/twisty/model/props/puzzle/state/CurrentTransformationProp.ts +46 -0
  541. package/src/cubing/twisty/model/props/puzzle/state/IndexerConstructorProp.ts +46 -0
  542. package/src/cubing/twisty/model/props/puzzle/state/IndexerConstructorRequestProp.ts +15 -0
  543. package/src/cubing/twisty/model/props/puzzle/state/IndexerProp.ts +24 -0
  544. package/src/cubing/twisty/model/props/puzzle/state/LegacyPositionProp.ts +22 -0
  545. package/src/cubing/twisty/model/props/puzzle/state/PuzzleAlgProp.ts +28 -0
  546. package/src/cubing/twisty/model/props/puzzle/state/SetupAnchorProp.ts +8 -0
  547. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleDefProp.ts +14 -0
  548. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleDescriptionProp.ts +14 -0
  549. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleIDProp.ts +12 -0
  550. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleIDRequestProp.ts +17 -0
  551. package/src/cubing/twisty/model/props/puzzle/structure/PuzzleLoaderProp.ts +32 -0
  552. package/src/cubing/twisty/model/props/timeline/CoarseTimelineInfoProp.ts +45 -0
  553. package/src/cubing/twisty/model/props/timeline/DetailedTimelineInfoProp.ts +76 -0
  554. package/src/cubing/twisty/model/props/timeline/PlayingInfoProp.ts +51 -0
  555. package/src/cubing/twisty/model/props/timeline/TempoScaleProp.ts +13 -0
  556. package/src/cubing/twisty/model/props/timeline/TimestampRequestProp.ts +38 -0
  557. package/src/cubing/twisty/model/props/viewer/BackViewProp.ts +10 -0
  558. package/src/cubing/twisty/model/props/viewer/BackgroundProp.ts +10 -0
  559. package/src/cubing/twisty/model/props/viewer/ButtonAppearanceProp.ts +86 -0
  560. package/src/cubing/twisty/model/props/viewer/ControlPanelProp.ts +10 -0
  561. package/src/cubing/twisty/model/props/viewer/LatitudeLimit.ts +11 -0
  562. package/src/cubing/twisty/model/props/viewer/OrbitCoordinatesProp.ts +56 -0
  563. package/src/cubing/twisty/model/props/viewer/OrbitCoordinatesRequestProp.ts +69 -0
  564. package/src/cubing/twisty/model/props/viewer/TimeRangeProp.ts +15 -0
  565. package/src/cubing/twisty/model/props/viewer/ViewerLinkProp.ts +10 -0
  566. package/src/cubing/twisty/model/props/viewer/VisualizationProp.ts +10 -0
  567. package/src/cubing/twisty/model/props/viewer/VisualizationStrategyProp.ts +45 -0
  568. package/src/cubing/twisty/{animation → old}/.DS_Store +0 -0
  569. package/src/cubing/{search/inside → twisty/old/animation}/.DS_Store +0 -0
  570. package/src/cubing/twisty/{animation → old/animation}/RenderScheduler.ts +5 -0
  571. package/src/cubing/twisty/{animation → old/animation}/Timeline.ts +0 -0
  572. package/src/cubing/twisty/{animation → old/animation}/cursor/AlgCursor.ts +15 -8
  573. package/src/cubing/twisty/{animation → old/animation}/cursor/CursorTypes.ts +4 -4
  574. package/src/cubing/twisty/{animation → old/animation}/easing.ts +0 -0
  575. package/src/cubing/twisty/old/animation/indexer/.DS_Store +0 -0
  576. package/src/cubing/twisty/{animation → old/animation}/indexer/AlgDuration.ts +1 -1
  577. package/src/cubing/twisty/old/animation/indexer/AlgIndexer.ts +86 -0
  578. package/src/cubing/twisty/{animation → old/animation}/indexer/SimpleAlgIndexer.ts +9 -6
  579. package/src/cubing/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.ts +181 -0
  580. package/src/cubing/twisty/old/animation/indexer/simultaneous-moves/SimultaneousMoveIndexerV2.ts +243 -0
  581. package/src/cubing/twisty/{animation → old/animation}/indexer/simultaneous-moves/simul-moves.ts +46 -34
  582. package/src/cubing/twisty/{animation → old/animation}/indexer/tree/AlgWalker.ts +6 -3
  583. package/src/cubing/twisty/{animation → old/animation}/indexer/tree/TreeAlgIndexer.ts +8 -5
  584. package/src/cubing/twisty/{animation → old/animation}/indexer/tree/chunkAlgs.ts +2 -2
  585. package/src/cubing/twisty/{animation → old/animation}/stream/timeline-move-calculation-draft.spec.ts.TODO +0 -0
  586. package/src/cubing/twisty/{animation → old/animation}/stream/timeline-move-calculation-draft.ts +2 -2
  587. package/src/cubing/{search/vendor/comlink-everywhere → twisty/old/dom}/.DS_Store +0 -0
  588. package/src/cubing/twisty/{dom/TwistyAlgViewer.css_.ts → old/dom/TwistyAlgViewerV1.css.ts} +0 -0
  589. package/src/cubing/twisty/{dom/TwistyAlgViewer.ts → old/dom/TwistyAlgViewerV1.ts} +43 -36
  590. package/src/cubing/twisty/{dom/TwistyPlayer.css_.ts → old/dom/TwistyPlayer.css.ts} +8 -1
  591. package/src/cubing/twisty/{dom → old/dom}/TwistyPlayer.spec.ts +5 -6
  592. package/src/cubing/twisty/{dom → old/dom}/TwistyPlayer.ts +36 -43
  593. package/src/cubing/twisty/{dom → old/dom}/TwistyPlayerConfig.ts +26 -10
  594. package/src/cubing/twisty/{dom/controls/TwistyControlElement.ts.ts → old/dom/controls/TwistyControlElement.ts} +0 -0
  595. package/src/cubing/twisty/{dom/controls/TwistyScrubber.css_.ts → old/dom/controls/TwistyScrubber.css.ts} +0 -0
  596. package/src/cubing/twisty/{dom → old/dom}/controls/TwistyScrubber.ts +3 -3
  597. package/src/cubing/twisty/{dom/controls/buttons.css_.ts → old/dom/controls/buttons.css.ts} +14 -1
  598. package/src/cubing/twisty/{dom → old/dom}/controls/buttons.spec.ts +1 -1
  599. package/src/cubing/twisty/{dom → old/dom}/controls/buttons.ts +15 -15
  600. package/src/cubing/twisty/{dom → old/dom}/element/ClassListManager.ts +0 -0
  601. package/src/cubing/twisty/{dom → old/dom}/element/ElementConfig.ts +1 -1
  602. package/src/cubing/twisty/{dom → old/dom}/element/ManagedCustomElement.ts +0 -0
  603. package/src/cubing/twisty/{dom → old/dom}/element/node-custom-element-shims.ts +0 -0
  604. package/src/cubing/twisty/{dom/stream/TwistyStreamSource.css_.ts → old/dom/stream/TwistyStreamSource.css.ts} +0 -0
  605. package/src/cubing/twisty/{dom → old/dom}/stream/TwistyStreamSource.ts +8 -8
  606. package/src/cubing/twisty/{dom → old/dom}/viewers/Twisty2DSVG.ts +7 -9
  607. package/src/cubing/twisty/{dom/viewers/Twisty2DSVGView.css_.ts → old/dom/viewers/Twisty2DSVGView.css.ts} +0 -0
  608. package/src/cubing/twisty/{dom/viewers/Twisty3DCanvas.css_.ts → old/dom/viewers/Twisty3DCanvas.css.ts} +0 -0
  609. package/src/cubing/twisty/{dom → old/dom}/viewers/Twisty3DCanvas.ts +5 -12
  610. package/src/cubing/twisty/{dom → old/dom}/viewers/TwistyOrbitControls.ts +57 -20
  611. package/src/cubing/twisty/{dom → old/dom}/viewers/TwistyViewerElement.ts +1 -1
  612. package/src/cubing/twisty/{dom/viewers/TwistyViewerWrapper.css_.ts → old/dom/viewers/TwistyViewerWrapper.css.ts} +0 -0
  613. package/src/cubing/twisty/{dom → old/dom}/viewers/TwistyViewerWrapper.ts +1 -1
  614. package/src/cubing/twisty/old/dom/viewers/canvas.ts +9 -0
  615. package/src/cubing/twisty/{dom/twisty-player-model → views}/.DS_Store +0 -0
  616. package/src/cubing/twisty/views/2D/Twisty2DPuzzle.ts +150 -0
  617. package/src/cubing/twisty/views/2D/Twisty2DPuzzleWrapper.ts +52 -0
  618. package/src/cubing/twisty/views/2D/Twisty2DSceneWrapper.ts +77 -0
  619. package/src/cubing/twisty/views/3D/RendererPool.ts +53 -0
  620. package/src/cubing/twisty/{3D → views/3D}/TAU.ts +0 -0
  621. package/src/cubing/twisty/views/3D/Twisty3DPuzzleWrapper.ts +168 -0
  622. package/src/cubing/twisty/{3D → views/3D}/Twisty3DRenderTarget.ts +0 -0
  623. package/src/cubing/twisty/{3D → views/3D}/Twisty3DScene.ts +0 -0
  624. package/src/cubing/twisty/views/3D/Twisty3DSceneWrapper.ts +144 -0
  625. package/src/cubing/twisty/views/3D/Twisty3DVantage.ts +244 -0
  626. package/src/cubing/twisty/views/3D/TwistyOrbitControlsV2.spec.ts +209 -0
  627. package/src/cubing/twisty/views/3D/TwistyOrbitControlsV2.ts +270 -0
  628. package/src/cubing/twisty/{3D → views/3D}/puzzles/Cube3D.ts +36 -15
  629. package/src/cubing/twisty/{3D → views/3D}/puzzles/KPuzzleWrapper.ts +4 -5
  630. package/src/cubing/twisty/views/3D/puzzles/PG3D.ts +988 -0
  631. package/src/cubing/twisty/views/3D/puzzles/Twisty3DPuzzle.ts +6 -0
  632. package/src/cubing/twisty/{3D → views/3D}/puzzles/TwistyTestBox.ts +2 -2
  633. package/src/cubing/twisty/views/TwistyAlgEditor/LeafTokens.ts +116 -0
  634. package/src/cubing/twisty/{dom/TwistyAlgEditor.css_.ts → views/TwistyAlgEditor/TwistyAlgEditor.css.ts} +3 -1
  635. package/src/cubing/twisty/{dom → views/TwistyAlgEditor}/TwistyAlgEditor.spec.ts +7 -6
  636. package/src/cubing/twisty/views/TwistyAlgEditor/TwistyAlgEditor.ts +360 -0
  637. package/src/cubing/twisty/views/TwistyAlgEditor/model.ts +179 -0
  638. package/src/cubing/twisty/views/TwistyAlgViewer.css.ts +25 -0
  639. package/src/cubing/twisty/views/TwistyAlgViewer.ts +502 -0
  640. package/src/cubing/twisty/views/TwistyPlayer.ts +315 -0
  641. package/src/cubing/twisty/views/TwistyPlayerSettable.ts +111 -0
  642. package/src/cubing/twisty/views/control-panel/TwistyButtonsV2.ts +159 -0
  643. package/src/cubing/twisty/views/control-panel/TwistyScrubberV2.ts +145 -0
  644. package/src/cubing/twisty/views/control-panel/webkit-fullscreen.ts +44 -0
  645. package/src/cubing/twisty/views/document.ts +4 -0
  646. package/src/cubing/twisty/views/screenshot.ts +90 -0
  647. package/src/cubing/{twisty/animation/indexer → vendor}/.DS_Store +0 -0
  648. package/src/cubing/vendor/p-lazy/license +9 -0
  649. package/src/cubing/vendor/p-lazy/p-lazy.ts +52 -0
  650. package/src/cubing/vendor/p-lazy/readme.md +54 -0
  651. package/src/cubing/vendor/three/examples/jsm/libs/stats.modified.module.ts +179 -0
  652. package/dist/esm/chunk-CWVB5RRW.js.map +0 -7
  653. package/dist/esm/chunk-FKDOQP32.js.map +0 -7
  654. package/dist/esm/chunk-YNB7QLBF.js.map +0 -7
  655. package/dist/esm/worker-inside-generated-string-SJBWGHB4.js +0 -2826
  656. package/dist/esm/worker-inside-generated-string-SJBWGHB4.js.map +0 -7
  657. package/dist/types/puzzles/implementations/2x2x2/2x2x2.kpuzzle.json_.d.ts.map +0 -1
  658. package/dist/types/puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.d.ts +0 -3
  659. package/dist/types/puzzles/implementations/3x3x3/3x3x3.kpuzzle.json_.d.ts.map +0 -1
  660. package/dist/types/puzzles/implementations/clock/clock.kpuzzle.json_.d.ts.map +0 -1
  661. package/dist/types/puzzles/implementations/pyraminx/pyraminx.kpuzzle.json_.d.ts.map +0 -1
  662. package/dist/types/puzzles/implementations/square1/sq1-hyperorbit.kpuzzle.json_.d.ts.map +0 -1
  663. package/dist/types/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.d.ts +0 -3
  664. package/dist/types/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.d.ts.map +0 -1
  665. package/dist/types/twisty/3D/TAU.d.ts.map +0 -1
  666. package/dist/types/twisty/3D/Twisty3DRenderTarget.d.ts.map +0 -1
  667. package/dist/types/twisty/3D/Twisty3DScene.d.ts.map +0 -1
  668. package/dist/types/twisty/3D/puzzles/Cube3D.d.ts.map +0 -1
  669. package/dist/types/twisty/3D/puzzles/KPuzzleWrapper.d.ts.map +0 -1
  670. package/dist/types/twisty/3D/puzzles/PG3D.d.ts +0 -51
  671. package/dist/types/twisty/3D/puzzles/PG3D.d.ts.map +0 -1
  672. package/dist/types/twisty/3D/puzzles/Twisty3DPuzzle.d.ts.map +0 -1
  673. package/dist/types/twisty/3D/puzzles/TwistyTestBox.d.ts.map +0 -1
  674. package/dist/types/twisty/animation/RenderScheduler.d.ts.map +0 -1
  675. package/dist/types/twisty/animation/Timeline.d.ts.map +0 -1
  676. package/dist/types/twisty/animation/cursor/AlgCursor.d.ts.map +0 -1
  677. package/dist/types/twisty/animation/cursor/CursorTypes.d.ts.map +0 -1
  678. package/dist/types/twisty/animation/easing.d.ts.map +0 -1
  679. package/dist/types/twisty/animation/indexer/AlgDuration.d.ts.map +0 -1
  680. package/dist/types/twisty/animation/indexer/AlgIndexer.d.ts +0 -15
  681. package/dist/types/twisty/animation/indexer/AlgIndexer.d.ts.map +0 -1
  682. package/dist/types/twisty/animation/indexer/SimpleAlgIndexer.d.ts.map +0 -1
  683. package/dist/types/twisty/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.d.ts.map +0 -1
  684. package/dist/types/twisty/animation/indexer/simultaneous-moves/simul-moves.d.ts +0 -25
  685. package/dist/types/twisty/animation/indexer/simultaneous-moves/simul-moves.d.ts.map +0 -1
  686. package/dist/types/twisty/animation/indexer/tree/AlgWalker.d.ts.map +0 -1
  687. package/dist/types/twisty/animation/indexer/tree/TreeAlgIndexer.d.ts.map +0 -1
  688. package/dist/types/twisty/animation/indexer/tree/chunkAlgs.d.ts +0 -3
  689. package/dist/types/twisty/animation/indexer/tree/chunkAlgs.d.ts.map +0 -1
  690. package/dist/types/twisty/animation/stream/timeline-move-calculation-draft.d.ts.map +0 -1
  691. package/dist/types/twisty/dom/TwistyAlgEditor.css_.d.ts +0 -3
  692. package/dist/types/twisty/dom/TwistyAlgEditor.css_.d.ts.map +0 -1
  693. package/dist/types/twisty/dom/TwistyAlgEditor.d.ts +0 -27
  694. package/dist/types/twisty/dom/TwistyAlgEditor.d.ts.map +0 -1
  695. package/dist/types/twisty/dom/TwistyAlgEditorStartCharSearch.d.ts +0 -26
  696. package/dist/types/twisty/dom/TwistyAlgEditorStartCharSearch.d.ts.map +0 -1
  697. package/dist/types/twisty/dom/TwistyAlgViewer.css_.d.ts.map +0 -1
  698. package/dist/types/twisty/dom/TwistyAlgViewer.d.ts.map +0 -1
  699. package/dist/types/twisty/dom/TwistyPlayer.css_.d.ts.map +0 -1
  700. package/dist/types/twisty/dom/TwistyPlayer.d.ts.map +0 -1
  701. package/dist/types/twisty/dom/TwistyPlayerConfig.d.ts.map +0 -1
  702. package/dist/types/twisty/dom/controls/TwistyControlElement.ts.d.ts +0 -2
  703. package/dist/types/twisty/dom/controls/TwistyControlElement.ts.d.ts.map +0 -1
  704. package/dist/types/twisty/dom/controls/TwistyScrubber.css_.d.ts.map +0 -1
  705. package/dist/types/twisty/dom/controls/TwistyScrubber.d.ts.map +0 -1
  706. package/dist/types/twisty/dom/controls/buttons.css_.d.ts.map +0 -1
  707. package/dist/types/twisty/dom/controls/buttons.d.ts.map +0 -1
  708. package/dist/types/twisty/dom/element/ClassListManager.d.ts.map +0 -1
  709. package/dist/types/twisty/dom/element/ElementConfig.d.ts.map +0 -1
  710. package/dist/types/twisty/dom/element/ManagedCustomElement.d.ts.map +0 -1
  711. package/dist/types/twisty/dom/element/node-custom-element-shims.d.ts.map +0 -1
  712. package/dist/types/twisty/dom/stream/TwistyStreamSource.css_.d.ts.map +0 -1
  713. package/dist/types/twisty/dom/stream/TwistyStreamSource.d.ts.map +0 -1
  714. package/dist/types/twisty/dom/viewers/Twisty2DSVG.d.ts.map +0 -1
  715. package/dist/types/twisty/dom/viewers/Twisty2DSVGView.css_.d.ts.map +0 -1
  716. package/dist/types/twisty/dom/viewers/Twisty3DCanvas.css_.d.ts.map +0 -1
  717. package/dist/types/twisty/dom/viewers/Twisty3DCanvas.d.ts.map +0 -1
  718. package/dist/types/twisty/dom/viewers/TwistyOrbitControls.d.ts.map +0 -1
  719. package/dist/types/twisty/dom/viewers/TwistyViewerElement.d.ts +0 -4
  720. package/dist/types/twisty/dom/viewers/TwistyViewerElement.d.ts.map +0 -1
  721. package/dist/types/twisty/dom/viewers/TwistyViewerWrapper.css_.d.ts.map +0 -1
  722. package/dist/types/twisty/dom/viewers/TwistyViewerWrapper.d.ts.map +0 -1
  723. package/dist/types/twisty/dom/viewers/canvas.d.ts +0 -2
  724. package/dist/types/twisty/dom/viewers/canvas.d.ts.map +0 -1
  725. package/dist/types/vendor/three/examples/jsm/libs/stats.module.d.ts +0 -2
  726. package/dist/types/vendor/three/examples/jsm/libs/stats.module.d.ts.map +0 -1
  727. package/dist/types/vendor/three/examples/jsm/libs/stats.module.wrapped.d.ts +0 -21
  728. package/dist/types/vendor/three/examples/jsm/libs/stats.module.wrapped.d.ts.map +0 -1
  729. package/src/cubing/puzzle-geometry/.DS_Store +0 -0
  730. package/src/cubing/search/inside/solve/.DS_Store +0 -0
  731. package/src/cubing/search/inside/solve/puzzles/.DS_Store +0 -0
  732. package/src/cubing/search/inside/solve/puzzles/3x3x3/.DS_Store +0 -0
  733. package/src/cubing/search/inside/solve/vendor/.DS_Store +0 -0
  734. package/src/cubing/search/inside/solve/vendor/cstimer/.DS_Store +0 -0
  735. package/src/cubing/search/inside/solve/vendor/cstimer/src/.DS_Store +0 -0
  736. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/.DS_Store +0 -0
  737. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/.DS_Store +0 -0
  738. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lgarron-additions-for-typescript/shim-lib.ts +0 -13
  739. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/lib/.DS_Store +0 -0
  740. package/src/cubing/search/inside/solve/vendor/cstimer/src/js/scramble/.DS_Store +0 -0
  741. package/src/cubing/search/inside/solve/vendor/sgs/.DS_Store +0 -0
  742. package/src/cubing/search/inside/solve/vendor/sgs/src/.DS_Store +0 -0
  743. package/src/cubing/search/inside/solve/vendor/sgs/src/test/.DS_Store +0 -0
  744. package/src/cubing/twisty/3D/puzzles/PG3D.ts +0 -600
  745. package/src/cubing/twisty/3D/puzzles/Twisty3DPuzzle.ts +0 -9
  746. package/src/cubing/twisty/3D/puzzles/mkbhd.svg +0 -5
  747. package/src/cubing/twisty/animation/indexer/AlgIndexer.ts +0 -25
  748. package/src/cubing/twisty/animation/indexer/simultaneous-moves/SimultaneousMoveIndexer.ts +0 -168
  749. package/src/cubing/twisty/dom/.DS_Store +0 -0
  750. package/src/cubing/twisty/dom/TwistyAlgEditor.ts +0 -373
  751. package/src/cubing/twisty/dom/TwistyAlgEditorStartCharSearch.ts +0 -138
  752. package/src/cubing/twisty/dom/viewers/canvas.ts +0 -4
  753. package/src/cubing/vendor/three/examples/jsm/libs/stats.module.ts +0 -2
  754. package/src/cubing/vendor/three/examples/jsm/libs/stats.module.wrapped.d.ts +0 -24
  755. package/src/cubing/vendor/three/examples/jsm/libs/stats.module.wrapped.js +0 -178
@@ -0,0 +1,2511 @@
1
+ import {
2
+ getFaceletAppearance,
3
+ puzzles
4
+ } from "./chunk-BGFVB2OS.js";
5
+ import {
6
+ areTransformationsEquivalent,
7
+ transformationForQuantumMove
8
+ } from "./chunk-YV3RT5PX.js";
9
+ import {
10
+ Alg
11
+ } from "./chunk-BU5PUJK3.js";
12
+ import {
13
+ __privateAdd,
14
+ __privateGet,
15
+ __privateMethod,
16
+ __privateSet
17
+ } from "./chunk-WO2AXYFE.js";
18
+
19
+ // src/cubing/twisty/views/3D/puzzles/Cube3D.ts
20
+ import {
21
+ BackSide,
22
+ BoxGeometry,
23
+ BufferAttribute,
24
+ BufferGeometry,
25
+ DoubleSide,
26
+ Euler,
27
+ Group,
28
+ Matrix4,
29
+ Mesh,
30
+ MeshBasicMaterial,
31
+ Object3D,
32
+ Quaternion,
33
+ TextureLoader,
34
+ Vector2,
35
+ Vector3 as Vector32
36
+ } from "three";
37
+
38
+ // src/cubing/twisty/old/animation/easing.ts
39
+ function smootherStep(x) {
40
+ return x * x * x * (10 - x * (15 - 6 * x));
41
+ }
42
+
43
+ // src/cubing/twisty/old/dom/TwistyPlayerConfig.ts
44
+ import { Vector3 } from "three";
45
+
46
+ // src/cubing/twisty/views/3D/TAU.ts
47
+ var TAU = Math.PI * 2;
48
+ var DEGREES_PER_RADIAN = 360 / TAU;
49
+
50
+ // src/cubing/twisty/old/dom/element/ElementConfig.ts
51
+ var AlgAttribute = class {
52
+ constructor(initialValue) {
53
+ if (initialValue) {
54
+ if (typeof initialValue === "string") {
55
+ this.setString(initialValue);
56
+ } else {
57
+ this.setValue(initialValue);
58
+ }
59
+ } else {
60
+ this.setValue(this.defaultValue());
61
+ }
62
+ }
63
+ setString(str) {
64
+ if (this.string === str) {
65
+ return false;
66
+ }
67
+ this.string = str;
68
+ this.value = this.toValue(str);
69
+ return true;
70
+ }
71
+ setValue(val) {
72
+ const str = this.toString(val);
73
+ if (this.string === str) {
74
+ return false;
75
+ }
76
+ this.string = str;
77
+ this.value = val;
78
+ return true;
79
+ }
80
+ defaultValue() {
81
+ return new Alg([]);
82
+ }
83
+ toValue(s) {
84
+ return Alg.fromString(s);
85
+ }
86
+ toString(val) {
87
+ return val.toString();
88
+ }
89
+ };
90
+ var StringEnumAttribute = class {
91
+ constructor(enumVal, initialValue) {
92
+ this.enumVal = enumVal;
93
+ this.setString(initialValue ?? this.defaultValue());
94
+ }
95
+ setString(str) {
96
+ if (this.string === str) {
97
+ return false;
98
+ }
99
+ if (!(str in this.enumVal)) {
100
+ throw new Error(`Invalid string for attribute!: ${str}`);
101
+ }
102
+ this.string = str;
103
+ this.value = this.toValue(str);
104
+ return true;
105
+ }
106
+ setValue(val) {
107
+ return this.setString(val);
108
+ }
109
+ defaultValue() {
110
+ return Object.keys(this.enumVal)[0];
111
+ }
112
+ toValue(s) {
113
+ return s;
114
+ }
115
+ };
116
+ var _defaultValue, _clampValue, clampValue_fn;
117
+ var RangedFloatAttribute = class {
118
+ constructor(defaultValue, minValue, maxValue, initialValue) {
119
+ this.minValue = minValue;
120
+ this.maxValue = maxValue;
121
+ __privateAdd(this, _clampValue);
122
+ __privateAdd(this, _defaultValue, void 0);
123
+ __privateSet(this, _defaultValue, defaultValue === null ? null : __privateMethod(this, _clampValue, clampValue_fn).call(this, defaultValue));
124
+ this.setValue(initialValue ?? this.defaultValue());
125
+ }
126
+ setString(str) {
127
+ return this.setValue(str === "" ? null : this.toValue(str));
128
+ }
129
+ setValue(val) {
130
+ const str = this.toString(val);
131
+ if (this.string === str) {
132
+ return false;
133
+ }
134
+ this.string = str;
135
+ this.value = val;
136
+ return true;
137
+ }
138
+ defaultValue() {
139
+ return __privateGet(this, _defaultValue);
140
+ }
141
+ toValue(s) {
142
+ return parseFloat(s);
143
+ }
144
+ toString(v) {
145
+ return v === null ? "" : v.toString();
146
+ }
147
+ };
148
+ _defaultValue = new WeakMap();
149
+ _clampValue = new WeakSet();
150
+ clampValue_fn = function(val) {
151
+ return Math.max(Math.min(val, this.maxValue), this.minValue);
152
+ };
153
+
154
+ // src/cubing/twisty/old/dom/element/ClassListManager.ts
155
+ var _currentClassName;
156
+ var ClassListManager = class {
157
+ constructor(elem, prefix, validSuffixes) {
158
+ this.elem = elem;
159
+ this.prefix = prefix;
160
+ this.validSuffixes = validSuffixes;
161
+ __privateAdd(this, _currentClassName, null);
162
+ }
163
+ clearValue() {
164
+ if (__privateGet(this, _currentClassName)) {
165
+ this.elem.contentWrapper.classList.remove(__privateGet(this, _currentClassName));
166
+ }
167
+ __privateSet(this, _currentClassName, null);
168
+ }
169
+ setValue(suffix) {
170
+ if (!this.validSuffixes.includes(suffix)) {
171
+ throw new Error(`Invalid suffix: ${suffix}`);
172
+ }
173
+ const newClassName = `${this.prefix}${suffix}`;
174
+ const changed = __privateGet(this, _currentClassName) !== newClassName;
175
+ if (changed) {
176
+ this.clearValue();
177
+ this.elem.contentWrapper.classList.add(newClassName);
178
+ __privateSet(this, _currentClassName, newClassName);
179
+ }
180
+ return changed;
181
+ }
182
+ };
183
+ _currentClassName = new WeakMap();
184
+
185
+ // src/cubing/twisty/old/dom/element/node-custom-element-shims.ts
186
+ var HTMLElementStub = class {
187
+ };
188
+ var HTMLElementShim;
189
+ if (typeof HTMLElement !== "undefined") {
190
+ HTMLElementShim = HTMLElement;
191
+ } else {
192
+ HTMLElementShim = HTMLElementStub;
193
+ }
194
+ var CustomElementsStub = class {
195
+ define() {
196
+ }
197
+ };
198
+ var customElementsShim;
199
+ if (typeof customElements !== "undefined") {
200
+ customElementsShim = customElements;
201
+ } else {
202
+ customElementsShim = new CustomElementsStub();
203
+ }
204
+
205
+ // src/cubing/twisty/old/dom/element/ManagedCustomElement.ts
206
+ var CSSSource = class {
207
+ constructor(sourceText) {
208
+ this.sourceText = sourceText;
209
+ }
210
+ getAsString() {
211
+ return this.sourceText;
212
+ }
213
+ };
214
+ var _cssSourceMap;
215
+ var ManagedCustomElement = class extends HTMLElementShim {
216
+ constructor(options) {
217
+ super();
218
+ __privateAdd(this, _cssSourceMap, new Map());
219
+ this.shadow = this.attachShadow({ mode: options?.mode ?? "closed" });
220
+ this.contentWrapper = document.createElement("div");
221
+ this.contentWrapper.classList.add("wrapper");
222
+ this.shadow.appendChild(this.contentWrapper);
223
+ }
224
+ addCSS(cssSource) {
225
+ if (__privateGet(this, _cssSourceMap).get(cssSource)) {
226
+ return;
227
+ }
228
+ const cssElem = document.createElement("style");
229
+ cssElem.textContent = cssSource.getAsString();
230
+ __privateGet(this, _cssSourceMap).set(cssSource, cssElem);
231
+ this.shadow.appendChild(cssElem);
232
+ }
233
+ removeCSS(cssSource) {
234
+ const cssElem = __privateGet(this, _cssSourceMap).get(cssSource);
235
+ if (!cssElem) {
236
+ return;
237
+ }
238
+ this.shadow.removeChild(cssElem);
239
+ __privateGet(this, _cssSourceMap).delete(cssSource);
240
+ }
241
+ addElement(element) {
242
+ return this.contentWrapper.appendChild(element);
243
+ }
244
+ prependElement(element) {
245
+ this.contentWrapper.prepend(element);
246
+ }
247
+ removeElement(element) {
248
+ return this.contentWrapper.removeChild(element);
249
+ }
250
+ };
251
+ _cssSourceMap = new WeakMap();
252
+ customElementsShim.define("twisty-managed-custom-element", ManagedCustomElement);
253
+
254
+ // src/cubing/twisty/old/dom/viewers/TwistyViewerWrapper.css.ts
255
+ var twistyViewerWrapperCSS = new CSSSource(`
256
+ :host {
257
+ width: 384px;
258
+ height: 256px;
259
+ display: grid;
260
+ }
261
+
262
+ .wrapper {
263
+ width: 100%;
264
+ height: 100%;
265
+ display: grid;
266
+ overflow: hidden;
267
+ }
268
+
269
+ .wrapper > * {
270
+ width: 100%;
271
+ height: 100%;
272
+ overflow: hidden;
273
+ }
274
+
275
+ .wrapper.back-view-side-by-side {
276
+ grid-template-columns: 1fr 1fr;
277
+ }
278
+
279
+ .wrapper.back-view-top-right {
280
+ grid-template-columns: 3fr 1fr;
281
+ grid-template-rows: 1fr 3fr;
282
+ }
283
+
284
+ .wrapper.back-view-top-right > :nth-child(1) {
285
+ grid-row: 1 / 3;
286
+ grid-column: 1 / 3;
287
+ }
288
+
289
+ .wrapper.back-view-top-right > :nth-child(2) {
290
+ grid-row: 1 / 2;
291
+ grid-column: 2 / 3;
292
+ }
293
+ `);
294
+
295
+ // src/cubing/twisty/old/dom/viewers/TwistyViewerWrapper.ts
296
+ var backViewLayouts = {
297
+ "none": true,
298
+ "side-by-side": true,
299
+ "top-right": true
300
+ };
301
+ var _backViewClassListManager;
302
+ var TwistyViewerWrapper = class extends ManagedCustomElement {
303
+ constructor(config = {}) {
304
+ super();
305
+ __privateAdd(this, _backViewClassListManager, new ClassListManager(this, "back-view-", [
306
+ "none",
307
+ "side-by-side",
308
+ "top-right"
309
+ ]));
310
+ this.addCSS(twistyViewerWrapperCSS);
311
+ if (config.backView && config.backView in backViewLayouts) {
312
+ __privateGet(this, _backViewClassListManager).setValue(config.backView);
313
+ }
314
+ }
315
+ setBackView(backView) {
316
+ return __privateGet(this, _backViewClassListManager).setValue(backView);
317
+ }
318
+ clear() {
319
+ this.contentWrapper.innerHTML = "";
320
+ }
321
+ };
322
+ _backViewClassListManager = new WeakMap();
323
+ customElementsShim.define("twisty-viewer-wrapper", TwistyViewerWrapper);
324
+
325
+ // src/cubing/twisty/old/dom/TwistyPlayerConfig.ts
326
+ var centeredCameraOrbitCoordinates = {
327
+ latitude: 31.717474411461005,
328
+ longitude: 0,
329
+ distance: 5.877852522924731
330
+ };
331
+ var cubeCube3DCameraOrbitCoordinates = {
332
+ latitude: 35,
333
+ longitude: 30,
334
+ distance: 6
335
+ };
336
+ var cubePG3DCameraOrbitCoordinates = {
337
+ latitude: 35,
338
+ longitude: 30,
339
+ distance: 6.25
340
+ };
341
+ var megaminxCameraOrbitCoordinates = {
342
+ latitude: Math.atan(1 / 2) * DEGREES_PER_RADIAN,
343
+ longitude: 0,
344
+ distance: 6.7
345
+ };
346
+ var pyraminxCameraOrbitCoordinates = {
347
+ latitude: 26.56505117707799,
348
+ longitude: 0,
349
+ distance: 6
350
+ };
351
+ var pyraminxLookAt = new Vector3(0, 1 / 6, 0);
352
+ function defaultCameraOrbitCoordinates(puzzleID, strategy) {
353
+ if (puzzleID[1] === "x") {
354
+ if (strategy === "Cube3D") {
355
+ return cubeCube3DCameraOrbitCoordinates;
356
+ } else {
357
+ return cubePG3DCameraOrbitCoordinates;
358
+ }
359
+ } else {
360
+ switch (puzzleID) {
361
+ case "megaminx":
362
+ case "gigaminx":
363
+ return megaminxCameraOrbitCoordinates;
364
+ case "pyraminx":
365
+ case "master_tetraminx":
366
+ return pyraminxCameraOrbitCoordinates;
367
+ case "skewb":
368
+ return cubePG3DCameraOrbitCoordinates;
369
+ default:
370
+ return centeredCameraOrbitCoordinates;
371
+ }
372
+ }
373
+ }
374
+ var setupToLocations = {
375
+ start: true,
376
+ end: true
377
+ };
378
+ var visualizationFormats = {
379
+ "3D": true,
380
+ "2D": true,
381
+ "experimental-2D-LL": true,
382
+ "PG3D": true
383
+ };
384
+ var backgroundThemes = {
385
+ checkered: true,
386
+ none: true
387
+ };
388
+ var hintFaceletStyles = {
389
+ floating: true,
390
+ none: true
391
+ };
392
+ var experimentalStickerings = {
393
+ "full": true,
394
+ "centers-only": true,
395
+ "PLL": true,
396
+ "CLS": true,
397
+ "OLL": true,
398
+ "COLL": true,
399
+ "OCLL": true,
400
+ "CLL": true,
401
+ "ELL": true,
402
+ "ELS": true,
403
+ "LL": true,
404
+ "F2L": true,
405
+ "ZBLL": true,
406
+ "ZBLS": true,
407
+ "WVLS": true,
408
+ "VLS": true,
409
+ "LS": true,
410
+ "EO": true,
411
+ "CMLL": true,
412
+ "L6E": true,
413
+ "L6EO": true,
414
+ "Daisy": true,
415
+ "Cross": true,
416
+ "2x2x2": true,
417
+ "2x2x3": true,
418
+ "Void Cube": true,
419
+ "invisible": true,
420
+ "picture": true,
421
+ "experimental-centers-U": true,
422
+ "experimental-centers-U-D": true,
423
+ "experimental-centers-U-L-D": true,
424
+ "experimental-centers-U-L-B-D": true,
425
+ "experimental-centers": true,
426
+ "experimental-fto-fc": true,
427
+ "experimental-fto-f2t": true,
428
+ "experimental-fto-sc": true,
429
+ "experimental-fto-l2c": true,
430
+ "experimental-fto-lbt": true,
431
+ "experimental-global-custom-1": true,
432
+ "experimental-global-custom-2": true
433
+ };
434
+ var controlsLocations = {
435
+ "bottom-row": true,
436
+ "none": true
437
+ };
438
+ var puzzleIDs = {
439
+ "3x3x3": true,
440
+ "custom": true,
441
+ "2x2x2": true,
442
+ "4x4x4": true,
443
+ "5x5x5": true,
444
+ "6x6x6": true,
445
+ "7x7x7": true,
446
+ "40x40x40": true,
447
+ "megaminx": true,
448
+ "pyraminx": true,
449
+ "square1": true,
450
+ "clock": true,
451
+ "skewb": true,
452
+ "fto": true,
453
+ "gigaminx": true,
454
+ "master_tetraminx": true
455
+ };
456
+ var viewerLinkPages = {
457
+ twizzle: true,
458
+ none: true
459
+ };
460
+ var cameraLatitudeLimits = {
461
+ auto: true,
462
+ none: true
463
+ };
464
+ var twistyPlayerAttributeMap = {
465
+ "alg": "alg",
466
+ "experimental-setup-alg": "experimentalSetupAlg",
467
+ "experimental-setup-anchor": "experimentalSetupAnchor",
468
+ "puzzle": "puzzle",
469
+ "visualization": "visualization",
470
+ "hint-facelets": "hintFacelets",
471
+ "experimental-stickering": "experimentalStickering",
472
+ "background": "background",
473
+ "control-panel": "controlPanel",
474
+ "back-view": "backView",
475
+ "experimental-camera-latitude": "experimentalCameraLatitude",
476
+ "experimental-camera-longitude": "experimentalCameraLongitude",
477
+ "experimental-camera-latitude-limits": "experimentalCameraLatitudeLimits",
478
+ "viewer-link": "viewerLink"
479
+ };
480
+ var TwistyPlayerConfig = class {
481
+ constructor(twistyPlayer, initialValues) {
482
+ this.twistyPlayer = twistyPlayer;
483
+ this.attributes = {
484
+ "alg": new AlgAttribute(initialValues.alg),
485
+ "experimental-setup-alg": new AlgAttribute(initialValues.experimentalSetupAlg),
486
+ "experimental-setup-anchor": new StringEnumAttribute(setupToLocations, initialValues.experimentalSetupAnchor),
487
+ "puzzle": new StringEnumAttribute(puzzleIDs, initialValues.puzzle),
488
+ "visualization": new StringEnumAttribute(visualizationFormats, initialValues.visualization),
489
+ "hint-facelets": new StringEnumAttribute(hintFaceletStyles, initialValues.hintFacelets),
490
+ "experimental-stickering": new StringEnumAttribute(experimentalStickerings, initialValues.experimentalStickering),
491
+ "background": new StringEnumAttribute(backgroundThemes, initialValues.background),
492
+ "control-panel": new StringEnumAttribute(controlsLocations, initialValues.controlPanel),
493
+ "back-view": new StringEnumAttribute(backViewLayouts, initialValues["backView"]),
494
+ "experimental-camera-latitude": new RangedFloatAttribute(null, -90, 90, initialValues["experimentalCameraLatitude"]),
495
+ "experimental-camera-longitude": new RangedFloatAttribute(null, -180, 180, initialValues["experimentalCameraLongitude"]),
496
+ "experimental-camera-latitude-limits": new StringEnumAttribute(cameraLatitudeLimits, initialValues["experimentalCameraLatitudeLimits"]),
497
+ "viewer-link": new StringEnumAttribute(viewerLinkPages, initialValues.viewerLink)
498
+ };
499
+ }
500
+ static get observedAttributes() {
501
+ return Object.keys(twistyPlayerAttributeMap);
502
+ }
503
+ attributeChangedCallback(attributeName, oldValue, newValue) {
504
+ const managedAttribute = this.attributes[attributeName];
505
+ if (managedAttribute) {
506
+ if (oldValue !== null && managedAttribute.string !== oldValue) {
507
+ console.warn("Attribute out of sync!", attributeName, managedAttribute.string, oldValue);
508
+ }
509
+ managedAttribute.setString(newValue);
510
+ const propertyName = twistyPlayerAttributeMap[attributeName];
511
+ this.twistyPlayer[propertyName] = managedAttribute.value;
512
+ }
513
+ }
514
+ };
515
+
516
+ // src/cubing/twisty/views/3D/puzzles/Cube3D.ts
517
+ var svgLoader = new TextureLoader();
518
+ var ignoredMaterial = new MeshBasicMaterial({
519
+ color: 4473924,
520
+ side: DoubleSide
521
+ });
522
+ var ignoredMaterialHint = new MeshBasicMaterial({
523
+ color: 13421772,
524
+ side: BackSide,
525
+ transparent: true,
526
+ opacity: 0.75
527
+ });
528
+ var invisibleMaterial = new MeshBasicMaterial({
529
+ visible: false
530
+ });
531
+ var orientedMaterial = new MeshBasicMaterial({
532
+ color: 16746751
533
+ });
534
+ var orientedMaterialHint = new MeshBasicMaterial({
535
+ color: 16746751,
536
+ side: BackSide,
537
+ transparent: true,
538
+ opacity: 0.5
539
+ });
540
+ var AxisInfo = class {
541
+ constructor(vector, fromZ, color, dimColor, hintOpacityScale, options) {
542
+ this.vector = vector;
543
+ this.fromZ = fromZ;
544
+ this.color = color;
545
+ this.dimColor = dimColor;
546
+ this.hintOpacityScale = hintOpacityScale;
547
+ this.stickerMaterial = {
548
+ regular: new MeshBasicMaterial({
549
+ color,
550
+ side: DoubleSide
551
+ }),
552
+ dim: new MeshBasicMaterial({
553
+ color: dimColor,
554
+ side: DoubleSide
555
+ }),
556
+ oriented: orientedMaterial,
557
+ ignored: ignoredMaterial,
558
+ invisible: invisibleMaterial
559
+ };
560
+ this.hintStickerMaterial = {
561
+ regular: new MeshBasicMaterial({
562
+ color: options?.hintColor ?? color,
563
+ side: BackSide,
564
+ transparent: true,
565
+ opacity: 0.5 * hintOpacityScale
566
+ }),
567
+ dim: new MeshBasicMaterial({
568
+ color: options?.hintDimColor ?? color,
569
+ side: BackSide,
570
+ transparent: true,
571
+ opacity: 0.5 * hintOpacityScale
572
+ }),
573
+ oriented: orientedMaterialHint,
574
+ ignored: ignoredMaterialHint,
575
+ invisible: invisibleMaterial
576
+ };
577
+ }
578
+ };
579
+ var axesInfo = [
580
+ new AxisInfo(new Vector32(0, 1, 0), new Euler(-TAU / 4, 0, 0), 16777215, 14540253, 1.25),
581
+ new AxisInfo(new Vector32(-1, 0, 0), new Euler(0, -TAU / 4, 0), 16746496, 8930304, 1),
582
+ new AxisInfo(new Vector32(0, 0, 1), new Euler(0, 0, 0), 65280, 34816, 1),
583
+ new AxisInfo(new Vector32(1, 0, 0), new Euler(0, TAU / 4, 0), 16711680, 6684672, 1),
584
+ new AxisInfo(new Vector32(0, 0, -1), new Euler(0, TAU / 2, 0), 255, 136, 0.75, { hintColor: 17663, hintDimColor: 8840 }),
585
+ new AxisInfo(new Vector32(0, -1, 0), new Euler(TAU / 4, 0, 0), 16776960, 8947712, 1.25)
586
+ ];
587
+ var face = {
588
+ U: 0,
589
+ L: 1,
590
+ F: 2,
591
+ R: 3,
592
+ B: 4,
593
+ D: 5
594
+ };
595
+ var familyToAxis = {
596
+ U: face.U,
597
+ u: face.U,
598
+ Uw: face.U,
599
+ Uv: face.U,
600
+ y: face.U,
601
+ L: face.L,
602
+ l: face.L,
603
+ Lw: face.L,
604
+ Lv: face.L,
605
+ M: face.L,
606
+ F: face.F,
607
+ f: face.F,
608
+ Fw: face.F,
609
+ Fv: face.F,
610
+ S: face.F,
611
+ z: face.F,
612
+ R: face.R,
613
+ r: face.R,
614
+ Rw: face.R,
615
+ Rv: face.R,
616
+ x: face.R,
617
+ B: face.B,
618
+ b: face.B,
619
+ Bw: face.B,
620
+ Bv: face.B,
621
+ D: face.D,
622
+ d: face.D,
623
+ Dw: face.D,
624
+ Dv: face.D,
625
+ E: face.D
626
+ };
627
+ var cubieDimensions = {
628
+ stickerWidth: 0.85,
629
+ stickerElevation: 0.503,
630
+ foundationWidth: 1,
631
+ hintStickerElevation: 1.45
632
+ };
633
+ var EXPERIMENTAL_PICTURE_CUBE_HINT_ELEVATION = 2;
634
+ var cube3DOptionsDefaults = {
635
+ showMainStickers: true,
636
+ hintFacelets: "floating",
637
+ showFoundation: true,
638
+ experimentalStickering: "full",
639
+ foundationSprite: null,
640
+ hintSprite: null
641
+ };
642
+ var blackMesh = new MeshBasicMaterial({
643
+ color: 0,
644
+ opacity: 1,
645
+ transparent: true
646
+ });
647
+ var blackTranslucentMesh = new MeshBasicMaterial({
648
+ color: 0,
649
+ opacity: 0.3,
650
+ transparent: true
651
+ });
652
+ var CubieDef = class {
653
+ constructor(orbit, stickerFaceNames, q) {
654
+ this.orbit = orbit;
655
+ const individualStickerFaceNames = typeof stickerFaceNames === "string" ? stickerFaceNames.split("") : stickerFaceNames;
656
+ this.stickerFaces = individualStickerFaceNames.map((s) => face[s]);
657
+ this.matrix = new Matrix4();
658
+ this.matrix.setPosition(firstPiecePosition[orbit]);
659
+ this.matrix.premultiply(new Matrix4().makeRotationFromQuaternion(q));
660
+ }
661
+ };
662
+ function t(v, t4) {
663
+ return new Quaternion().setFromAxisAngle(v, TAU * t4 / 4);
664
+ }
665
+ var r = {
666
+ O: new Vector32(0, 0, 0),
667
+ U: new Vector32(0, -1, 0),
668
+ L: new Vector32(1, 0, 0),
669
+ F: new Vector32(0, 0, -1),
670
+ R: new Vector32(-1, 0, 0),
671
+ B: new Vector32(0, 0, 1),
672
+ D: new Vector32(0, 1, 0)
673
+ };
674
+ var firstPiecePosition = {
675
+ EDGES: new Vector32(0, 1, 1),
676
+ CORNERS: new Vector32(1, 1, 1),
677
+ CENTERS: new Vector32(0, 1, 0)
678
+ };
679
+ var orientationRotation = {
680
+ EDGES: [0, 1].map((i) => new Matrix4().makeRotationAxis(firstPiecePosition.EDGES.clone().normalize(), -i * TAU / 2)),
681
+ CORNERS: [0, 1, 2].map((i) => new Matrix4().makeRotationAxis(firstPiecePosition.CORNERS.clone().normalize(), -i * TAU / 3)),
682
+ CENTERS: [0, 1, 2, 3].map((i) => new Matrix4().makeRotationAxis(firstPiecePosition.CENTERS.clone().normalize(), -i * TAU / 4))
683
+ };
684
+ var cubieStickerOrder = [face.U, face.F, face.R];
685
+ var pieceDefs = {
686
+ EDGES: [
687
+ new CubieDef("EDGES", "UF", t(r.O, 0)),
688
+ new CubieDef("EDGES", "UR", t(r.U, 3)),
689
+ new CubieDef("EDGES", "UB", t(r.U, 2)),
690
+ new CubieDef("EDGES", "UL", t(r.U, 1)),
691
+ new CubieDef("EDGES", "DF", t(r.F, 2)),
692
+ new CubieDef("EDGES", "DR", t(r.F, 2).premultiply(t(r.D, 1))),
693
+ new CubieDef("EDGES", "DB", t(r.F, 2).premultiply(t(r.D, 2))),
694
+ new CubieDef("EDGES", "DL", t(r.F, 2).premultiply(t(r.D, 3))),
695
+ new CubieDef("EDGES", "FR", t(r.U, 3).premultiply(t(r.R, 3))),
696
+ new CubieDef("EDGES", "FL", t(r.U, 1).premultiply(t(r.R, 3))),
697
+ new CubieDef("EDGES", "BR", t(r.U, 3).premultiply(t(r.R, 1))),
698
+ new CubieDef("EDGES", "BL", t(r.U, 1).premultiply(t(r.R, 1)))
699
+ ],
700
+ CORNERS: [
701
+ new CubieDef("CORNERS", "UFR", t(r.O, 0)),
702
+ new CubieDef("CORNERS", "URB", t(r.U, 3)),
703
+ new CubieDef("CORNERS", "UBL", t(r.U, 2)),
704
+ new CubieDef("CORNERS", "ULF", t(r.U, 1)),
705
+ new CubieDef("CORNERS", "DRF", t(r.F, 2).premultiply(t(r.D, 1))),
706
+ new CubieDef("CORNERS", "DFL", t(r.F, 2).premultiply(t(r.D, 0))),
707
+ new CubieDef("CORNERS", "DLB", t(r.F, 2).premultiply(t(r.D, 3))),
708
+ new CubieDef("CORNERS", "DBR", t(r.F, 2).premultiply(t(r.D, 2)))
709
+ ],
710
+ CENTERS: [
711
+ new CubieDef("CENTERS", "U", t(r.O, 0)),
712
+ new CubieDef("CENTERS", "L", t(r.R, 3).premultiply(t(r.U, 1))),
713
+ new CubieDef("CENTERS", "F", t(r.R, 3)),
714
+ new CubieDef("CENTERS", "R", t(r.R, 3).premultiply(t(r.D, 1))),
715
+ new CubieDef("CENTERS", "B", t(r.R, 3).premultiply(t(r.D, 2))),
716
+ new CubieDef("CENTERS", "D", t(r.R, 2))
717
+ ]
718
+ };
719
+ var CUBE_SCALE = 1 / 3;
720
+ var pictureStickerCoords = {
721
+ EDGES: [
722
+ [
723
+ [0, 4, 6],
724
+ [0, 4, 5]
725
+ ],
726
+ [
727
+ [3, 5, 7],
728
+ [0, 7, 5]
729
+ ],
730
+ [
731
+ [2, 4, 8],
732
+ [0, 10, 5]
733
+ ],
734
+ [
735
+ [1, 3, 7],
736
+ [0, 1, 5]
737
+ ],
738
+ [
739
+ [2, 4, 2],
740
+ [2, 4, 3]
741
+ ],
742
+ [
743
+ [3, 5, 1],
744
+ [2, 7, 3]
745
+ ],
746
+ [
747
+ [0, 4, 0],
748
+ [2, 10, 3]
749
+ ],
750
+ [
751
+ [1, 3, 1],
752
+ [2, 1, 3]
753
+ ],
754
+ [
755
+ [3, 5, 4],
756
+ [3, 6, 4]
757
+ ],
758
+ [
759
+ [1, 3, 4],
760
+ [1, 2, 4]
761
+ ],
762
+ [
763
+ [1, 9, 4],
764
+ [1, 8, 4]
765
+ ],
766
+ [
767
+ [3, 11, 4],
768
+ [3, 0, 4]
769
+ ]
770
+ ],
771
+ CORNERS: [
772
+ [
773
+ [0, 5, 6],
774
+ [0, 5, 5],
775
+ [0, 6, 5]
776
+ ],
777
+ [
778
+ [3, 5, 8],
779
+ [0, 8, 5],
780
+ [0, 9, 5]
781
+ ],
782
+ [
783
+ [2, 3, 8],
784
+ [0, 11, 5],
785
+ [0, 0, 5]
786
+ ],
787
+ [
788
+ [1, 3, 6],
789
+ [0, 2, 5],
790
+ [0, 3, 5]
791
+ ],
792
+ [
793
+ [3, 5, 2],
794
+ [2, 6, 3],
795
+ [2, 5, 3]
796
+ ],
797
+ [
798
+ [2, 3, 2],
799
+ [2, 3, 3],
800
+ [2, 2, 3]
801
+ ],
802
+ [
803
+ [1, 3, 0],
804
+ [2, 0, 3],
805
+ [2, 11, 3]
806
+ ],
807
+ [
808
+ [0, 5, 0],
809
+ [2, 9, 3],
810
+ [2, 8, 3]
811
+ ]
812
+ ],
813
+ CENTERS: [
814
+ [[0, 4, 7]],
815
+ [[0, 1, 4]],
816
+ [[0, 4, 4]],
817
+ [[0, 7, 4]],
818
+ [[0, 10, 4]],
819
+ [[0, 4, 1]]
820
+ ]
821
+ };
822
+ var sharedCubieFoundationGeometryCache = null;
823
+ function sharedCubieFoundationGeometry() {
824
+ return sharedCubieFoundationGeometryCache ?? (sharedCubieFoundationGeometryCache = new BoxGeometry(cubieDimensions.foundationWidth, cubieDimensions.foundationWidth, cubieDimensions.foundationWidth));
825
+ }
826
+ function newStickerGeometry() {
827
+ const r2 = new BufferGeometry();
828
+ const half = 0.5 * cubieDimensions.stickerWidth;
829
+ r2.setAttribute("position", new BufferAttribute(new Float32Array([
830
+ half,
831
+ half,
832
+ 0,
833
+ -half,
834
+ half,
835
+ 0,
836
+ half,
837
+ -half,
838
+ 0,
839
+ -half,
840
+ half,
841
+ 0,
842
+ -half,
843
+ -half,
844
+ 0,
845
+ half,
846
+ -half,
847
+ 0
848
+ ]), 3));
849
+ r2.setAttribute("uv", new BufferAttribute(new Float32Array([
850
+ 1,
851
+ 1,
852
+ 0,
853
+ 1,
854
+ 1,
855
+ 0,
856
+ 0,
857
+ 1,
858
+ 0,
859
+ 0,
860
+ 1,
861
+ 0,
862
+ 0,
863
+ 1,
864
+ 0,
865
+ 0,
866
+ 1,
867
+ 1,
868
+ 0,
869
+ 0,
870
+ 1,
871
+ 0,
872
+ 1,
873
+ 1
874
+ ]), 2));
875
+ return r2;
876
+ }
877
+ var sharedStickerGeometryCache = null;
878
+ function sharedStickerGeometry() {
879
+ return sharedStickerGeometryCache ?? (sharedStickerGeometryCache = newStickerGeometry());
880
+ }
881
+ var Cube3D = class extends Object3D {
882
+ constructor(def, cursor, scheduleRenderCallback, options = {}) {
883
+ super();
884
+ this.def = def;
885
+ this.scheduleRenderCallback = scheduleRenderCallback;
886
+ this.pieces = {};
887
+ this.experimentalHintStickerMeshes = [];
888
+ this.experimentalFoundationMeshes = [];
889
+ this.sprite = new Promise((resolve) => {
890
+ this.setSpriteURL = (url) => {
891
+ svgLoader.load(url, resolve);
892
+ };
893
+ });
894
+ this.hintSprite = new Promise((resolve) => {
895
+ this.setHintSpriteURL = (url) => {
896
+ svgLoader.load(url, resolve);
897
+ };
898
+ });
899
+ this.options = { ...cube3DOptionsDefaults };
900
+ Object.assign(this.options, options);
901
+ if (this.def.name !== "3x3x3") {
902
+ throw new Error(`Invalid puzzle for this Cube3D implementation: ${this.def.name}`);
903
+ }
904
+ if (options.foundationSprite) {
905
+ this.setSprite(options.foundationSprite);
906
+ }
907
+ if (options.hintSprite) {
908
+ this.setHintSprite(options.hintSprite);
909
+ }
910
+ this.kpuzzleFaceletInfo = {};
911
+ for (const orbit in pieceDefs) {
912
+ const orbitFaceletInfo = [];
913
+ this.kpuzzleFaceletInfo[orbit] = orbitFaceletInfo;
914
+ this.pieces[orbit] = pieceDefs[orbit].map(this.createCubie.bind(this, orbit, orbitFaceletInfo));
915
+ }
916
+ this.scale.set(CUBE_SCALE, CUBE_SCALE, CUBE_SCALE);
917
+ if (this.options.experimentalStickering) {
918
+ this.setStickering(this.options.experimentalStickering);
919
+ }
920
+ cursor?.addPositionListener(this);
921
+ }
922
+ setSprite(texture) {
923
+ this.sprite = texture;
924
+ }
925
+ setHintSprite(texture) {
926
+ this.hintSprite = texture;
927
+ }
928
+ experimentalSetStickerSpriteURL(stickerSpriteURL) {
929
+ this.setSpriteURL(stickerSpriteURL);
930
+ }
931
+ experimentalSetHintStickerSpriteURL(hintStickerSpriteURL) {
932
+ this.setHintSpriteURL(hintStickerSpriteURL);
933
+ }
934
+ setStickering(stickering) {
935
+ (async () => {
936
+ const appearance = await puzzles["3x3x3"].appearance(stickering ?? "full");
937
+ this.setAppearance(appearance ?? await puzzles["3x3x3"].appearance("full"));
938
+ })();
939
+ }
940
+ setAppearance(appearance) {
941
+ for (const [orbitName, orbitAppearance] of Object.entries(appearance.orbits)) {
942
+ for (let pieceIdx = 0; pieceIdx < orbitAppearance.pieces.length; pieceIdx++) {
943
+ const pieceAppearance = orbitAppearance.pieces[pieceIdx];
944
+ if (pieceAppearance) {
945
+ const pieceInfo = this.kpuzzleFaceletInfo[orbitName][pieceIdx];
946
+ for (let faceletIdx = 0; faceletIdx < pieceInfo.length; faceletIdx++) {
947
+ const faceletAppearance = pieceAppearance.facelets[faceletIdx];
948
+ if (faceletAppearance) {
949
+ const faceletInfo = pieceInfo[faceletIdx];
950
+ const appearance2 = typeof faceletAppearance === "string" ? faceletAppearance : faceletAppearance?.appearance;
951
+ faceletInfo.facelet.material = axesInfo[faceletInfo.faceIdx].stickerMaterial[appearance2];
952
+ const hintAppearance = typeof faceletAppearance === "string" ? appearance2 : faceletAppearance.hintAppearance ?? appearance2;
953
+ if (faceletInfo.hintFacelet) {
954
+ faceletInfo.hintFacelet.material = axesInfo[faceletInfo.faceIdx].hintStickerMaterial[hintAppearance];
955
+ }
956
+ }
957
+ }
958
+ }
959
+ }
960
+ }
961
+ if (this.scheduleRenderCallback) {
962
+ this.scheduleRenderCallback();
963
+ }
964
+ }
965
+ experimentalUpdateOptions(options) {
966
+ if ("showMainStickers" in options) {
967
+ throw new Error("Unimplemented");
968
+ }
969
+ const showFoundation = options.showFoundation;
970
+ if (typeof showFoundation !== "undefined" && this.options.showFoundation !== showFoundation) {
971
+ this.options.showFoundation = showFoundation;
972
+ for (const foundation of this.experimentalFoundationMeshes) {
973
+ foundation.visible = showFoundation;
974
+ }
975
+ }
976
+ const hintFacelets = options.hintFacelets;
977
+ if (typeof hintFacelets !== "undefined" && this.options.hintFacelets !== hintFacelets && hintFaceletStyles[hintFacelets]) {
978
+ this.options.hintFacelets = hintFacelets;
979
+ for (const hintSticker of this.experimentalHintStickerMeshes) {
980
+ hintSticker.visible = hintFacelets === "floating";
981
+ }
982
+ this.scheduleRenderCallback();
983
+ }
984
+ const experimentalStickering = options.experimentalStickering;
985
+ if (typeof experimentalStickering !== "undefined" && this.options.experimentalStickering !== experimentalStickering && experimentalStickerings[experimentalStickering]) {
986
+ this.options.experimentalStickering = experimentalStickering;
987
+ this.setStickering(experimentalStickering);
988
+ this.scheduleRenderCallback();
989
+ }
990
+ }
991
+ onPositionChange(p) {
992
+ const reid333 = p.state;
993
+ for (const orbit in pieceDefs) {
994
+ const pieces = pieceDefs[orbit];
995
+ for (let i = 0; i < pieces.length; i++) {
996
+ const j = reid333[orbit].permutation[i];
997
+ this.pieces[orbit][j].matrix.copy(pieceDefs[orbit][i].matrix);
998
+ this.pieces[orbit][j].matrix.multiply(orientationRotation[orbit][reid333[orbit].orientation[i]]);
999
+ }
1000
+ for (const moveProgress of p.movesInProgress) {
1001
+ const move = moveProgress.move;
1002
+ const turnNormal = axesInfo[familyToAxis[move.family]].vector;
1003
+ const moveMatrix = new Matrix4().makeRotationAxis(turnNormal, -this.ease(moveProgress.fraction) * moveProgress.direction * move.amount * TAU / 4);
1004
+ for (let i = 0; i < pieces.length; i++) {
1005
+ const k = this.def.moves[move.family][orbit].permutation[i];
1006
+ if (i !== k || this.def.moves[move.family][orbit].orientation[i] !== 0) {
1007
+ const j = reid333[orbit].permutation[i];
1008
+ this.pieces[orbit][j].matrix.premultiply(moveMatrix);
1009
+ }
1010
+ }
1011
+ }
1012
+ }
1013
+ this.scheduleRenderCallback();
1014
+ }
1015
+ createCubie(orbit, orbitFacelets, piece, orbitPieceIdx) {
1016
+ const cubieFaceletInfo = [];
1017
+ orbitFacelets.push(cubieFaceletInfo);
1018
+ const cubie = new Group();
1019
+ if (this.options.showFoundation) {
1020
+ const foundation = this.createCubieFoundation();
1021
+ cubie.add(foundation);
1022
+ this.experimentalFoundationMeshes.push(foundation);
1023
+ }
1024
+ for (let i = 0; i < piece.stickerFaces.length; i++) {
1025
+ const sticker = this.createSticker(axesInfo[cubieStickerOrder[i]], axesInfo[piece.stickerFaces[i]], false);
1026
+ const faceletInfo = {
1027
+ faceIdx: piece.stickerFaces[i],
1028
+ facelet: sticker
1029
+ };
1030
+ cubie.add(sticker);
1031
+ if (this.options.hintFacelets === "floating") {
1032
+ const hintSticker = this.createSticker(axesInfo[cubieStickerOrder[i]], axesInfo[piece.stickerFaces[i]], true);
1033
+ cubie.add(hintSticker);
1034
+ faceletInfo.hintFacelet = hintSticker;
1035
+ this.experimentalHintStickerMeshes.push(hintSticker);
1036
+ }
1037
+ if (this.options.experimentalStickering === "picture" && pictureStickerCoords[orbit] && pictureStickerCoords[orbit][orbitPieceIdx] && pictureStickerCoords[orbit][orbitPieceIdx][i]) {
1038
+ const [rotate, offsetX, offsetY] = pictureStickerCoords[orbit][orbitPieceIdx][i];
1039
+ (async () => {
1040
+ const addImageSticker = async (hint) => {
1041
+ const texture = await (hint ? this.hintSprite : this.sprite);
1042
+ const mesh = this.createSticker(axesInfo[cubieStickerOrder[i]], axesInfo[piece.stickerFaces[i]], hint);
1043
+ mesh.material = new MeshBasicMaterial({
1044
+ map: texture,
1045
+ side: hint ? BackSide : DoubleSide,
1046
+ transparent: true
1047
+ });
1048
+ const x1 = offsetX / 12;
1049
+ const x2 = (offsetX + 1) / 12;
1050
+ const y1 = offsetY / 9;
1051
+ const y2 = (offsetY + 1) / 9;
1052
+ let v1 = new Vector2(x1, y1);
1053
+ let v2 = new Vector2(x1, y2);
1054
+ let v3 = new Vector2(x2, y2);
1055
+ let v4 = new Vector2(x2, y1);
1056
+ switch (rotate) {
1057
+ case 1:
1058
+ [v1, v2, v3, v4] = [v2, v3, v4, v1];
1059
+ break;
1060
+ case 2:
1061
+ [v1, v2, v3, v4] = [v3, v4, v1, v2];
1062
+ break;
1063
+ case 3:
1064
+ [v1, v2, v3, v4] = [v4, v1, v2, v3];
1065
+ break;
1066
+ }
1067
+ mesh.geometry.setAttribute("uv", new BufferAttribute(new Float32Array([
1068
+ v3.x,
1069
+ v3.y,
1070
+ v2.x,
1071
+ v2.y,
1072
+ v4.x,
1073
+ v4.y,
1074
+ v2.x,
1075
+ v2.y,
1076
+ v1.x,
1077
+ v1.y,
1078
+ v4.x,
1079
+ v4.y
1080
+ ]), 2));
1081
+ cubie.add(mesh);
1082
+ };
1083
+ addImageSticker(true);
1084
+ addImageSticker(false);
1085
+ })();
1086
+ }
1087
+ cubieFaceletInfo.push(faceletInfo);
1088
+ }
1089
+ cubie.matrix.copy(piece.matrix);
1090
+ cubie.matrixAutoUpdate = false;
1091
+ this.add(cubie);
1092
+ return cubie;
1093
+ }
1094
+ createCubieFoundation() {
1095
+ const box = sharedCubieFoundationGeometry();
1096
+ return new Mesh(box, this.options.experimentalStickering === "picture" ? blackMesh : blackTranslucentMesh);
1097
+ }
1098
+ createSticker(posAxisInfo, materialAxisInfo, isHint) {
1099
+ const geo = this.options.experimentalStickering === "picture" ? newStickerGeometry() : sharedStickerGeometry();
1100
+ const stickerMesh = new Mesh(geo, isHint ? materialAxisInfo.hintStickerMaterial.regular : materialAxisInfo.stickerMaterial.regular);
1101
+ stickerMesh.setRotationFromEuler(posAxisInfo.fromZ);
1102
+ stickerMesh.position.copy(posAxisInfo.vector);
1103
+ stickerMesh.position.multiplyScalar(isHint ? this.options.experimentalStickering === "picture" ? EXPERIMENTAL_PICTURE_CUBE_HINT_ELEVATION : cubieDimensions.hintStickerElevation : cubieDimensions.stickerElevation);
1104
+ return stickerMesh;
1105
+ }
1106
+ experimentalSetFoundationOpacity(opacity) {
1107
+ this.experimentalFoundationMeshes[0].material.opacity = opacity;
1108
+ }
1109
+ experimentalSetStickerWidth(width) {
1110
+ for (const orbitInfo of Object.values(this.kpuzzleFaceletInfo)) {
1111
+ for (const pieceInfo of orbitInfo) {
1112
+ for (const faceletInfo of pieceInfo) {
1113
+ faceletInfo.facelet.scale.setScalar(width / cubieDimensions.stickerWidth);
1114
+ }
1115
+ }
1116
+ }
1117
+ }
1118
+ experimentalSetCenterStickerWidth(width) {
1119
+ for (const orbitInfo of [this.kpuzzleFaceletInfo["CENTERS"]]) {
1120
+ for (const pieceInfo of orbitInfo) {
1121
+ for (const faceletInfo of pieceInfo) {
1122
+ faceletInfo.facelet.scale.setScalar(width / cubieDimensions.stickerWidth);
1123
+ }
1124
+ }
1125
+ }
1126
+ }
1127
+ ease(fraction) {
1128
+ return smootherStep(fraction);
1129
+ }
1130
+ };
1131
+
1132
+ // src/cubing/twisty/views/3D/puzzles/PG3D.ts
1133
+ import {
1134
+ BufferAttribute as BufferAttribute2,
1135
+ BufferGeometry as BufferGeometry2,
1136
+ Color,
1137
+ DoubleSide as DoubleSide2,
1138
+ Euler as Euler2,
1139
+ FrontSide,
1140
+ Group as Group2,
1141
+ Mesh as Mesh2,
1142
+ MeshBasicMaterial as MeshBasicMaterial2,
1143
+ Object3D as Object3D2,
1144
+ Vector3 as Vector33
1145
+ } from "three";
1146
+ var foundationMaterial = new MeshBasicMaterial2({
1147
+ side: DoubleSide2,
1148
+ color: 0
1149
+ });
1150
+ var invisMaterial = new MeshBasicMaterial2({
1151
+ visible: false
1152
+ });
1153
+ var basicStickerMaterial = new MeshBasicMaterial2({
1154
+ vertexColors: true
1155
+ });
1156
+ function dist(coords, a, b) {
1157
+ return Math.hypot(coords[3 * a] - coords[3 * b], coords[3 * a + 1] - coords[3 * b + 1], coords[3 * a + 2] - coords[3 * b + 2]);
1158
+ }
1159
+ function triarea(coords, a, b, c) {
1160
+ const ab = dist(coords, a, b);
1161
+ const bc = dist(coords, b, c);
1162
+ const ac = dist(coords, a, c);
1163
+ const p = (ab + bc + ac) / 2;
1164
+ return Math.sqrt(p * (p - ab) * (p - bc) * (p - ac));
1165
+ }
1166
+ function polyarea(coords) {
1167
+ let sum = 0;
1168
+ for (let i = 2; 3 * i < coords.length; i++) {
1169
+ sum += triarea(coords, 0, 1, i);
1170
+ }
1171
+ return sum;
1172
+ }
1173
+ function normalize(r2) {
1174
+ const m = Math.hypot(r2[0], r2[1], r2[2]);
1175
+ r2[0] /= m;
1176
+ r2[1] /= m;
1177
+ r2[2] /= m;
1178
+ return r2;
1179
+ }
1180
+ function cross(a, b) {
1181
+ const r2 = new Array(3);
1182
+ r2[0] = a[1] * b[2] - a[2] * b[1];
1183
+ r2[1] = a[2] * b[0] - a[0] * b[2];
1184
+ r2[2] = a[0] * b[1] - a[1] * b[0];
1185
+ return r2;
1186
+ }
1187
+ function normal(c) {
1188
+ const a = [c[3] - c[0], c[4] - c[1], c[5] - c[2]];
1189
+ const b = [c[6] - c[3], c[7] - c[4], c[8] - c[5]];
1190
+ const r2 = cross(a, b);
1191
+ return normalize(r2);
1192
+ }
1193
+ function trimEdges(face2, tr) {
1194
+ const r2 = [];
1195
+ const A = new Array(3);
1196
+ const B = new Array(3);
1197
+ for (let iter = 1; iter < 10; iter++) {
1198
+ for (let i = 0; i < face2.length; i += 3) {
1199
+ const pi = (i + face2.length - 3) % face2.length;
1200
+ const ni = (i + 3) % face2.length;
1201
+ for (let k = 0; k < 3; k++) {
1202
+ A[k] = face2[pi + k] - face2[i + k];
1203
+ B[k] = face2[ni + k] - face2[i + k];
1204
+ }
1205
+ const alen = Math.hypot(A[0], A[1], A[2]);
1206
+ const blen = Math.hypot(B[0], B[1], B[2]);
1207
+ for (let k = 0; k < 3; k++) {
1208
+ A[k] /= alen;
1209
+ B[k] /= blen;
1210
+ }
1211
+ const d = A[0] * B[0] + A[1] * B[1] + A[2] * B[2];
1212
+ const m = tr / Math.sqrt(1 - d * d);
1213
+ for (let k = 0; k < 3; k++) {
1214
+ r2[i + k] = face2[i + k] + (A[k] + B[k]) * m;
1215
+ }
1216
+ }
1217
+ let good = true;
1218
+ for (let i = 0; good && i < r2.length; i += 3) {
1219
+ const ni = (i + 3) % face2.length;
1220
+ let t2 = 0;
1221
+ for (let k = 0; k < 3; k++) {
1222
+ const a = face2[ni + k] - face2[i + k];
1223
+ const b = r2[ni + k] - r2[i + k];
1224
+ t2 += a * b;
1225
+ }
1226
+ if (t2 <= 0) {
1227
+ good = false;
1228
+ }
1229
+ }
1230
+ if (good) {
1231
+ return r2;
1232
+ }
1233
+ tr /= 2;
1234
+ }
1235
+ return face2;
1236
+ }
1237
+ var Filler = class {
1238
+ constructor(sz, tm) {
1239
+ this.sz = sz;
1240
+ this.tm = tm;
1241
+ this.vertices = new Float32Array(9 * sz);
1242
+ this.uvs = void 0;
1243
+ this.colors = new Uint8Array(18 * sz);
1244
+ this.ind = new Uint8Array(sz);
1245
+ this.pos = 0;
1246
+ this.ipos = 0;
1247
+ }
1248
+ add(pt, i, c) {
1249
+ this.vertices[this.pos] = pt[3 * i + 0];
1250
+ this.vertices[this.pos + 1] = pt[3 * i + 1];
1251
+ this.vertices[this.pos + 2] = pt[3 * i + 2];
1252
+ this.colors[this.pos] = c >> 16;
1253
+ this.colors[this.pos + 1] = c >> 8 & 255;
1254
+ this.colors[this.pos + 2] = c & 255;
1255
+ this.pos += 3;
1256
+ }
1257
+ addUncolored(pt, i) {
1258
+ this.vertices[this.pos] = pt[3 * i + 0];
1259
+ this.vertices[this.pos + 1] = pt[3 * i + 1];
1260
+ this.vertices[this.pos + 2] = pt[3 * i + 2];
1261
+ this.pos += 3;
1262
+ }
1263
+ setind(i) {
1264
+ this.ind[this.ipos++] = i;
1265
+ }
1266
+ makePoly(coords, color, ind) {
1267
+ const ncoords = coords;
1268
+ for (let g = 1; 3 * (g + 1) < ncoords.length; g++) {
1269
+ this.add(ncoords, 0, color);
1270
+ this.add(ncoords, g, color);
1271
+ this.add(ncoords, g + 1, color);
1272
+ this.setind(ind);
1273
+ }
1274
+ }
1275
+ setAttributes(geo) {
1276
+ geo.setAttribute("position", new BufferAttribute2(this.vertices, 3));
1277
+ const sa2 = this.colors.subarray(0, 9 * this.sz);
1278
+ geo.setAttribute("color", new BufferAttribute2(sa2, 3, true));
1279
+ }
1280
+ makeGroups(geo) {
1281
+ geo.clearGroups();
1282
+ for (let i = 0; i < this.ipos; ) {
1283
+ const si = i++;
1284
+ const iv = this.ind[si];
1285
+ while (this.ind[i] === iv) {
1286
+ i++;
1287
+ }
1288
+ geo.addGroup(3 * si, 3 * (i - si), iv);
1289
+ }
1290
+ }
1291
+ saveOriginalColors() {
1292
+ this.colors.copyWithin(this.pos, 0, this.pos);
1293
+ }
1294
+ };
1295
+ var StickerDef = class {
1296
+ constructor(filler, stickerDat, trim, options) {
1297
+ this.texturePtr = void 0;
1298
+ this.twistVal = -1;
1299
+ this.isDup = !!stickerDat.isDup;
1300
+ this.faceNum = stickerDat.face;
1301
+ this.stickerStart = filler.ipos;
1302
+ const sdColor = new Color(stickerDat.color).getHex();
1303
+ this.origColor = sdColor;
1304
+ this.origColorAppearance = sdColor;
1305
+ if (options?.appearance) {
1306
+ this.setAppearance(filler, options.appearance);
1307
+ }
1308
+ this.faceColor = sdColor;
1309
+ const coords = this.stickerCoords(stickerDat.coords, trim);
1310
+ filler.makePoly(coords, this.faceColor, this.isDup ? 4 : 0);
1311
+ this.stickerEnd = filler.ipos;
1312
+ }
1313
+ stickerCoords(coords, trim) {
1314
+ return trimEdges(coords.slice(), trim);
1315
+ }
1316
+ hintCoords(coords, hintStickerHeightScale, trim, normal2) {
1317
+ coords = this.stickerCoords(coords, trim);
1318
+ normal2 = normal2.slice();
1319
+ for (let i = 0; i < 3; i++) {
1320
+ normal2[i] *= 0.5 * hintStickerHeightScale;
1321
+ }
1322
+ const hCoords = new Array(coords.length);
1323
+ for (let i = 0; 3 * i < coords.length; i++) {
1324
+ const j = coords.length / 3 - 1 - i;
1325
+ hCoords[3 * i] = coords[3 * j] + normal2[0];
1326
+ hCoords[3 * i + 1] = coords[3 * j + 1] + normal2[1];
1327
+ hCoords[3 * i + 2] = coords[3 * j + 2] + normal2[2];
1328
+ }
1329
+ return hCoords;
1330
+ }
1331
+ foundationCoords(coords) {
1332
+ const ncoords = coords.slice();
1333
+ for (let i = 0; i < coords.length; i++) {
1334
+ ncoords[i] = coords[i] * 0.999;
1335
+ }
1336
+ return ncoords;
1337
+ }
1338
+ addHint(filler, stickerDat, hintStickers, hintStickerHeightScale, trim, normal2) {
1339
+ this.hintStart = filler.ipos;
1340
+ const coords = this.hintCoords(stickerDat.coords, hintStickerHeightScale, trim, normal2);
1341
+ filler.makePoly(coords, this.faceColor, hintStickers && !this.isDup ? 2 : 4);
1342
+ this.hintEnd = filler.ipos;
1343
+ }
1344
+ addFoundation(filler, stickerDat, black) {
1345
+ this.foundationStart = filler.ipos;
1346
+ const coords = this.foundationCoords(stickerDat.coords);
1347
+ filler.makePoly(coords, black, this.isDup ? 4 : 6);
1348
+ this.foundationEnd = filler.ipos;
1349
+ }
1350
+ setHintStickers(filler, hintStickers) {
1351
+ const indv = this.isDup || !hintStickers ? 4 : 2;
1352
+ for (let i = this.hintStart; i < this.hintEnd; i++) {
1353
+ filler.ind[i] = indv | filler.ind[i] & 1;
1354
+ }
1355
+ }
1356
+ setAppearance(filler, faceletMeshAppearance) {
1357
+ let c = 0;
1358
+ switch (faceletMeshAppearance) {
1359
+ case "regular":
1360
+ c = this.origColor;
1361
+ break;
1362
+ case "dim":
1363
+ if (this.origColor === 16777215) {
1364
+ c = 14540253;
1365
+ } else {
1366
+ c = new Color(this.origColor).multiplyScalar(0.5).getHex();
1367
+ }
1368
+ break;
1369
+ case "oriented":
1370
+ c = 16746751;
1371
+ break;
1372
+ case "ignored":
1373
+ c = 4473924;
1374
+ break;
1375
+ case "invisible":
1376
+ c = this.origColor;
1377
+ }
1378
+ this.origColorAppearance = c;
1379
+ for (let i = 9 * this.stickerStart; i < 9 * this.stickerEnd; i += 3) {
1380
+ filler.colors[filler.pos + i] = c >> 16;
1381
+ filler.colors[filler.pos + i + 1] = c >> 8 & 255;
1382
+ filler.colors[filler.pos + i + 2] = c & 255;
1383
+ }
1384
+ for (let i = 9 * this.hintStart; i < 9 * this.hintEnd; i += 3) {
1385
+ filler.colors[filler.pos + i] = c >> 16;
1386
+ filler.colors[filler.pos + i + 1] = c >> 8 & 255;
1387
+ filler.colors[filler.pos + i + 2] = c & 255;
1388
+ }
1389
+ this.setHintStickers(filler, faceletMeshAppearance !== "invisible" && !this.isDup);
1390
+ }
1391
+ addUVs(filler) {
1392
+ const uvs = filler.uvs;
1393
+ const vert = filler.vertices;
1394
+ const coords = new Array(3);
1395
+ for (let i = 3 * this.stickerStart; i < 3 * this.stickerEnd; i++) {
1396
+ coords[0] = vert[3 * i];
1397
+ coords[1] = vert[3 * i + 1];
1398
+ coords[2] = vert[3 * i + 2];
1399
+ const uv = filler.tm.getuv(this.faceNum, coords);
1400
+ uvs[2 * i] = uv[0];
1401
+ uvs[2 * i + 1] = uv[1];
1402
+ }
1403
+ for (let i = 3 * this.hintStart; i < 3 * this.hintEnd; i++) {
1404
+ coords[0] = vert[3 * i];
1405
+ coords[1] = vert[3 * i + 1];
1406
+ coords[2] = vert[3 * i + 2];
1407
+ const uv = filler.tm.getuv(this.faceNum, coords);
1408
+ uvs[2 * i] = uv[0];
1409
+ uvs[2 * i + 1] = uv[1];
1410
+ }
1411
+ }
1412
+ setTexture(filler, sd) {
1413
+ if (this.texturePtr === sd) {
1414
+ return 0;
1415
+ }
1416
+ this.texturePtr = sd;
1417
+ const sz = 6 * filler.sz;
1418
+ filler.uvs.copyWithin(6 * this.stickerStart, 6 * sd.stickerStart + sz, 6 * sd.stickerEnd + sz);
1419
+ filler.uvs.copyWithin(6 * this.hintStart, 6 * sd.hintStart + sz, 6 * sd.hintEnd + sz);
1420
+ return 1;
1421
+ }
1422
+ setColor(filler, sd) {
1423
+ const c = sd.origColorAppearance;
1424
+ if (this.faceColor !== c) {
1425
+ this.faceColor = c;
1426
+ const sz = filler.pos;
1427
+ filler.colors.copyWithin(9 * this.stickerStart, 9 * sd.stickerStart + sz, 9 * sd.stickerEnd + sz);
1428
+ filler.colors.copyWithin(9 * this.hintStart, 9 * sd.hintStart + sz, 9 * sd.hintEnd + sz);
1429
+ return 1;
1430
+ } else {
1431
+ return 0;
1432
+ }
1433
+ }
1434
+ };
1435
+ var HitPlaneDef = class {
1436
+ constructor(hitface, tm) {
1437
+ this.cubie = new Group2();
1438
+ const coords = hitface.coords;
1439
+ const filler = new Filler(coords.length / 3 - 2, tm);
1440
+ for (let g = 1; 3 * g + 3 < coords.length; g++) {
1441
+ filler.addUncolored(coords, 0);
1442
+ filler.addUncolored(coords, g);
1443
+ filler.addUncolored(coords, g + 1);
1444
+ }
1445
+ this.geo = new BufferGeometry2();
1446
+ filler.setAttributes(this.geo);
1447
+ const obj = new Mesh2(this.geo, invisMaterial);
1448
+ obj.userData.name = hitface.name;
1449
+ this.cubie.scale.setScalar(0.99);
1450
+ this.cubie.add(obj);
1451
+ }
1452
+ };
1453
+ var AxisInfo2 = class {
1454
+ constructor(axisDat) {
1455
+ const vec = axisDat[0];
1456
+ this.axis = new Vector33(vec[0], vec[1], vec[2]);
1457
+ this.order = axisDat[2];
1458
+ }
1459
+ };
1460
+ var DEFAULT_COLOR_FRACTION = 0.71;
1461
+ var PG_SCALE = 0.5;
1462
+ var _pendingStickeringUpdate;
1463
+ var PG3D = class extends Object3D2 {
1464
+ constructor(cursor, scheduleRenderCallback, definition, pgdat, showFoundation = false, showHintStickers = false, hintStickerHeightScale = 1, params = {}) {
1465
+ super();
1466
+ this.scheduleRenderCallback = scheduleRenderCallback;
1467
+ this.definition = definition;
1468
+ this.pgdat = pgdat;
1469
+ this.showFoundation = showFoundation;
1470
+ this.showHintStickers = showHintStickers;
1471
+ this.params = params;
1472
+ this.stickerTargets = [];
1473
+ this.controlTargets = [];
1474
+ this.textured = false;
1475
+ __privateAdd(this, _pendingStickeringUpdate, false);
1476
+ if (pgdat.stickers.length === 0) {
1477
+ throw Error("Reuse of stickerdat from pg; please don't do that.");
1478
+ }
1479
+ this.hintMaterial = new MeshBasicMaterial2({
1480
+ vertexColors: true,
1481
+ transparent: true,
1482
+ opacity: 0.5
1483
+ });
1484
+ this.hintMaterialDisposable = true;
1485
+ this.stickerMaterial = basicStickerMaterial;
1486
+ this.stickerMaterialDisposable = false;
1487
+ this.axesInfo = {};
1488
+ const axesDef = this.pgdat.axis;
1489
+ for (const axis of axesDef) {
1490
+ this.axesInfo[axis[1]] = new AxisInfo2(axis);
1491
+ }
1492
+ const stickers = this.pgdat.stickers;
1493
+ this.stickers = {};
1494
+ this.materialArray1 = new Array(8);
1495
+ this.materialArray2 = new Array(8);
1496
+ this.enableFoundation(showFoundation);
1497
+ this.updateMaterialArrays();
1498
+ let triangleCount = 0;
1499
+ const multiplier = 3;
1500
+ for (const sticker of stickers) {
1501
+ const sides = sticker.coords.length / 3;
1502
+ triangleCount += multiplier * (sides - 2);
1503
+ }
1504
+ const filler = new Filler(triangleCount, pgdat.textureMapper);
1505
+ const black = 0;
1506
+ const normals = [];
1507
+ let totArea = 0;
1508
+ for (const f of pgdat.faces) {
1509
+ normals.push(normal(f.coords));
1510
+ totArea += polyarea(f.coords);
1511
+ }
1512
+ const colorfrac = DEFAULT_COLOR_FRACTION;
1513
+ let nonDupStickers = 0;
1514
+ for (const sticker of stickers) {
1515
+ if (!sticker.isDup) {
1516
+ nonDupStickers++;
1517
+ }
1518
+ }
1519
+ const trim = Math.sqrt(totArea / nonDupStickers) * (1 - Math.sqrt(colorfrac)) / 2;
1520
+ for (const sticker of stickers) {
1521
+ const orbit = sticker.orbit;
1522
+ const ord = sticker.ord;
1523
+ const ori = sticker.ori;
1524
+ if (!this.stickers[orbit]) {
1525
+ this.stickers[orbit] = [];
1526
+ }
1527
+ if (!this.stickers[orbit][ori]) {
1528
+ this.stickers[orbit][ori] = [];
1529
+ }
1530
+ const options = {};
1531
+ if (params.appearance) {
1532
+ options.appearance = getFaceletAppearance(params.appearance, orbit, ord, ori, false);
1533
+ }
1534
+ const stickerdef = new StickerDef(filler, sticker, trim, options);
1535
+ this.stickers[orbit][ori][ord] = stickerdef;
1536
+ }
1537
+ for (const sticker of stickers) {
1538
+ const orbit = sticker.orbit;
1539
+ const ord = sticker.ord;
1540
+ const ori = sticker.ori;
1541
+ this.stickers[orbit][ori][ord].addHint(filler, sticker, showHintStickers, hintStickerHeightScale, trim, normals[sticker.face]);
1542
+ }
1543
+ this.foundationBound = filler.ipos;
1544
+ for (const sticker of stickers) {
1545
+ const orbit = sticker.orbit;
1546
+ const ord = sticker.ord;
1547
+ const ori = sticker.ori;
1548
+ this.stickers[orbit][ori][ord].addFoundation(filler, sticker, black);
1549
+ }
1550
+ const fixedGeo = new BufferGeometry2();
1551
+ filler.setAttributes(fixedGeo);
1552
+ filler.makeGroups(fixedGeo);
1553
+ const obj = new Mesh2(fixedGeo, this.materialArray1);
1554
+ obj.scale.set(PG_SCALE, PG_SCALE, PG_SCALE);
1555
+ this.add(obj);
1556
+ const obj2 = new Mesh2(fixedGeo, this.materialArray2);
1557
+ obj2.scale.set(PG_SCALE, PG_SCALE, PG_SCALE);
1558
+ this.add(obj2);
1559
+ const hitfaces = this.pgdat.faces;
1560
+ this.movingObj = obj2;
1561
+ this.fixedGeo = fixedGeo;
1562
+ this.filler = filler;
1563
+ for (const hitface of hitfaces) {
1564
+ const facedef = new HitPlaneDef(hitface, pgdat.textureMapper);
1565
+ facedef.cubie.scale.set(PG_SCALE, PG_SCALE, PG_SCALE);
1566
+ this.add(facedef.cubie);
1567
+ this.controlTargets.push(facedef.cubie.children[0]);
1568
+ }
1569
+ filler.saveOriginalColors();
1570
+ cursor.addPositionListener(this);
1571
+ pgdat.stickers = [];
1572
+ }
1573
+ dispose() {
1574
+ if (this.fixedGeo) {
1575
+ this.fixedGeo.dispose();
1576
+ }
1577
+ if (this.stickerMaterialDisposable) {
1578
+ this.stickerMaterial.dispose();
1579
+ this.stickerMaterial = basicStickerMaterial;
1580
+ this.stickerMaterialDisposable = false;
1581
+ }
1582
+ if (this.hintMaterialDisposable) {
1583
+ this.hintMaterial.dispose();
1584
+ this.hintMaterial = basicStickerMaterial;
1585
+ this.hintMaterialDisposable = false;
1586
+ }
1587
+ }
1588
+ experimentalGetStickerTargets() {
1589
+ return this.stickerTargets;
1590
+ }
1591
+ experimentalGetControlTargets() {
1592
+ return this.controlTargets;
1593
+ }
1594
+ experimentalSetAppearance(appearance) {
1595
+ this.params.appearance = appearance;
1596
+ for (const orbitName in this.definition.orbits) {
1597
+ const { numPieces, orientations } = this.definition.orbits[orbitName];
1598
+ for (let pieceIdx = 0; pieceIdx < numPieces; pieceIdx++) {
1599
+ for (let faceletIdx = 0; faceletIdx < orientations; faceletIdx++) {
1600
+ const faceletAppearance = getFaceletAppearance(appearance, orbitName, pieceIdx, faceletIdx, false);
1601
+ const stickerDef = this.stickers[orbitName][faceletIdx][pieceIdx];
1602
+ stickerDef.setAppearance(this.filler, faceletAppearance);
1603
+ }
1604
+ }
1605
+ }
1606
+ if (this.scheduleRenderCallback) {
1607
+ __privateSet(this, _pendingStickeringUpdate, true);
1608
+ if (this.lastPos) {
1609
+ this.onPositionChange(this.lastPos);
1610
+ }
1611
+ this.scheduleRenderCallback();
1612
+ }
1613
+ }
1614
+ onPositionChange(p) {
1615
+ const state = p.state;
1616
+ const noRotation = new Euler2();
1617
+ this.movingObj.rotation.copy(noRotation);
1618
+ let colormods = 0;
1619
+ const filler = this.filler;
1620
+ const ind = filler.ind;
1621
+ if (!this.lastPos || __privateGet(this, _pendingStickeringUpdate) || !areTransformationsEquivalent(this.definition, this.lastPos.state, state)) {
1622
+ for (const orbit in this.stickers) {
1623
+ const pieces = this.stickers[orbit];
1624
+ const pos2 = state[orbit];
1625
+ const orin = pieces.length;
1626
+ if (orin === 1) {
1627
+ const pieces2 = pieces[0];
1628
+ for (let i = 0; i < pieces2.length; i++) {
1629
+ const ni = pos2.permutation[i];
1630
+ if (this.textured) {
1631
+ colormods += pieces2[i].setTexture(filler, pieces2[ni]);
1632
+ } else {
1633
+ colormods += pieces2[i].setColor(filler, pieces2[ni]);
1634
+ }
1635
+ }
1636
+ } else {
1637
+ for (let ori = 0; ori < orin; ori++) {
1638
+ const pieces2 = pieces[ori];
1639
+ for (let i = 0; i < pieces2.length; i++) {
1640
+ const nori = (ori + orin - pos2.orientation[i]) % orin;
1641
+ const ni = pos2.permutation[i];
1642
+ if (this.textured) {
1643
+ colormods += pieces2[i].setTexture(filler, pieces[nori][ni]);
1644
+ } else {
1645
+ colormods += pieces2[i].setColor(filler, pieces[nori][ni]);
1646
+ }
1647
+ }
1648
+ }
1649
+ }
1650
+ }
1651
+ this.lastPos = p;
1652
+ __privateSet(this, _pendingStickeringUpdate, false);
1653
+ }
1654
+ let vismods = 0;
1655
+ for (const moveProgress of p.movesInProgress) {
1656
+ const externalMove = moveProgress.move;
1657
+ const unswizzled = this.pgdat.unswizzle(externalMove);
1658
+ const move = this.pgdat.notationMapper.notationToInternal(externalMove);
1659
+ if (move === null) {
1660
+ throw Error("Bad blockmove " + externalMove.family);
1661
+ }
1662
+ const quantumTransformation = transformationForQuantumMove(this.definition, externalMove.quantum);
1663
+ const ax = this.axesInfo[unswizzled];
1664
+ const turnNormal = ax.axis;
1665
+ const angle = -this.ease(moveProgress.fraction) * moveProgress.direction * move.amount * TAU / ax.order;
1666
+ this.movingObj.rotateOnAxis(turnNormal, angle);
1667
+ if (this.lastMove !== quantumTransformation) {
1668
+ for (const orbit in this.stickers) {
1669
+ const pieces = this.stickers[orbit];
1670
+ const orin = pieces.length;
1671
+ const bmv = quantumTransformation[orbit];
1672
+ for (let ori = 0; ori < orin; ori++) {
1673
+ const pieces2 = pieces[ori];
1674
+ for (let i = 0; i < pieces2.length; i++) {
1675
+ const p2 = pieces2[i];
1676
+ const ni = bmv.permutation[i];
1677
+ let tv = 0;
1678
+ if (ni !== i || bmv.orientation[i] !== 0) {
1679
+ tv = 1;
1680
+ }
1681
+ if (tv !== p2.twistVal) {
1682
+ if (tv) {
1683
+ for (let j = p2.stickerStart; j < p2.stickerEnd; j++) {
1684
+ ind[j] |= 1;
1685
+ }
1686
+ for (let j = p2.hintStart; j < p2.hintEnd; j++) {
1687
+ ind[j] |= 1;
1688
+ }
1689
+ for (let j = p2.foundationStart; j < p2.foundationEnd; j++) {
1690
+ ind[j] |= 1;
1691
+ }
1692
+ } else {
1693
+ for (let j = p2.stickerStart; j < p2.stickerEnd; j++) {
1694
+ ind[j] &= ~1;
1695
+ }
1696
+ for (let j = p2.hintStart; j < p2.hintEnd; j++) {
1697
+ ind[j] &= ~1;
1698
+ }
1699
+ for (let j = p2.foundationStart; j < p2.foundationEnd; j++) {
1700
+ ind[j] &= ~1;
1701
+ }
1702
+ }
1703
+ p2.twistVal = tv;
1704
+ vismods++;
1705
+ }
1706
+ }
1707
+ }
1708
+ }
1709
+ this.lastMove = quantumTransformation;
1710
+ }
1711
+ }
1712
+ if (vismods) {
1713
+ this.filler.makeGroups(this.fixedGeo);
1714
+ }
1715
+ if (colormods) {
1716
+ if (this.textured) {
1717
+ this.fixedGeo.getAttribute("uv").updateRange = {
1718
+ offset: 0,
1719
+ count: 6 * this.foundationBound
1720
+ };
1721
+ this.fixedGeo.getAttribute("uv").needsUpdate = true;
1722
+ } else {
1723
+ this.fixedGeo.getAttribute("color").updateRange = {
1724
+ offset: 0,
1725
+ count: 9 * this.foundationBound
1726
+ };
1727
+ this.fixedGeo.getAttribute("color").needsUpdate = true;
1728
+ }
1729
+ }
1730
+ this.scheduleRenderCallback();
1731
+ }
1732
+ ease(fraction) {
1733
+ return smootherStep(fraction);
1734
+ }
1735
+ enableHintFacelets(v) {
1736
+ this.showHintStickers = v;
1737
+ this.updateMaterialArrays();
1738
+ }
1739
+ updateMaterialArrays() {
1740
+ for (let i = 0; i < 8; i++) {
1741
+ this.materialArray1[i] = invisMaterial;
1742
+ this.materialArray2[i] = invisMaterial;
1743
+ }
1744
+ this.materialArray1[0] = this.stickerMaterial;
1745
+ this.materialArray2[1] = this.stickerMaterial;
1746
+ if (this.showHintStickers) {
1747
+ this.materialArray1[2] = this.hintMaterial;
1748
+ this.materialArray2[3] = this.hintMaterial;
1749
+ } else {
1750
+ this.materialArray1[2] = invisMaterial;
1751
+ this.materialArray2[3] = invisMaterial;
1752
+ }
1753
+ if (this.showFoundation) {
1754
+ this.materialArray1[6] = foundationMaterial;
1755
+ this.materialArray2[7] = foundationMaterial;
1756
+ } else {
1757
+ this.materialArray1[6] = invisMaterial;
1758
+ this.materialArray2[7] = invisMaterial;
1759
+ }
1760
+ }
1761
+ enableFoundation(v) {
1762
+ this.showFoundation = v;
1763
+ this.updateMaterialArrays();
1764
+ }
1765
+ setHintStickerOpacity(v) {
1766
+ if (this.hintMaterialDisposable) {
1767
+ this.hintMaterial.dispose();
1768
+ this.hintMaterialDisposable = false;
1769
+ }
1770
+ if (v === 0) {
1771
+ this.hintMaterial = invisMaterial;
1772
+ } else if (v === 1) {
1773
+ this.hintMaterial = this.stickerMaterial;
1774
+ } else {
1775
+ this.hintMaterial = new MeshBasicMaterial2({
1776
+ vertexColors: true,
1777
+ transparent: true,
1778
+ opacity: 0.5
1779
+ });
1780
+ this.hintMaterialDisposable = true;
1781
+ }
1782
+ }
1783
+ experimentalUpdateOptions(options) {
1784
+ if (options.hintFacelets !== void 0) {
1785
+ this.enableHintFacelets(options.hintFacelets !== "none");
1786
+ }
1787
+ if (options.showFoundation !== void 0) {
1788
+ this.enableFoundation(options.showFoundation);
1789
+ }
1790
+ if (options.hintStickerOpacity !== void 0) {
1791
+ this.setHintStickerOpacity(options.hintStickerOpacity);
1792
+ }
1793
+ __privateSet(this, _pendingStickeringUpdate, true);
1794
+ if (this.lastPos) {
1795
+ this.onPositionChange(this.lastPos);
1796
+ }
1797
+ this.scheduleRenderCallback();
1798
+ }
1799
+ adduvs() {
1800
+ const filler = this.filler;
1801
+ if (filler.uvs) {
1802
+ return;
1803
+ }
1804
+ this.filler.uvs = new Float32Array(12 * filler.sz);
1805
+ for (const orbit in this.stickers) {
1806
+ const pieces = this.stickers[orbit];
1807
+ const orin = pieces.length;
1808
+ for (let ori = 0; ori < orin; ori++) {
1809
+ const pieces2 = pieces[ori];
1810
+ for (const piece2 of pieces2) {
1811
+ piece2.addUVs(this.filler);
1812
+ }
1813
+ }
1814
+ }
1815
+ filler.uvs.copyWithin(6 * filler.sz, 0, 6 * filler.sz);
1816
+ const sa1 = filler.uvs.subarray(0, 6 * filler.sz);
1817
+ this.fixedGeo.setAttribute("uv", new BufferAttribute2(sa1, 2, true));
1818
+ }
1819
+ experimentalUpdateTexture(enabled, stickerTexture, hintTexture) {
1820
+ if (!stickerTexture) {
1821
+ enabled = false;
1822
+ } else if (!hintTexture) {
1823
+ hintTexture = stickerTexture;
1824
+ }
1825
+ if (enabled && !this.filler.uvs) {
1826
+ this.adduvs();
1827
+ }
1828
+ this.textured = enabled;
1829
+ if (this.stickerMaterialDisposable) {
1830
+ this.stickerMaterial.dispose();
1831
+ this.stickerMaterialDisposable = false;
1832
+ }
1833
+ if (enabled) {
1834
+ this.stickerMaterial = new MeshBasicMaterial2({
1835
+ map: stickerTexture,
1836
+ side: FrontSide,
1837
+ transparent: false
1838
+ });
1839
+ this.stickerMaterialDisposable = true;
1840
+ } else {
1841
+ this.stickerMaterial = basicStickerMaterial;
1842
+ }
1843
+ if (this.hintMaterialDisposable) {
1844
+ this.hintMaterial.dispose();
1845
+ this.hintMaterialDisposable = false;
1846
+ }
1847
+ if (enabled) {
1848
+ this.hintMaterial = new MeshBasicMaterial2({
1849
+ map: hintTexture,
1850
+ side: FrontSide,
1851
+ transparent: false
1852
+ });
1853
+ this.hintMaterialDisposable = true;
1854
+ } else {
1855
+ this.hintMaterial = basicStickerMaterial;
1856
+ }
1857
+ this.updateMaterialArrays();
1858
+ __privateSet(this, _pendingStickeringUpdate, true);
1859
+ if (this.lastPos) {
1860
+ this.onPositionChange(this.lastPos);
1861
+ }
1862
+ this.scheduleRenderCallback();
1863
+ }
1864
+ };
1865
+ _pendingStickeringUpdate = new WeakMap();
1866
+
1867
+ // src/cubing/twisty/old/dom/viewers/Twisty3DCanvas.ts
1868
+ import { PerspectiveCamera, Vector3 as Vector35, WebGLRenderer } from "three";
1869
+
1870
+ // src/cubing/twisty/old/animation/RenderScheduler.ts
1871
+ var RenderScheduler = class {
1872
+ constructor(callback) {
1873
+ this.callback = callback;
1874
+ this.animFrameID = null;
1875
+ this.animFrame = this.animFrameWrapper.bind(this);
1876
+ }
1877
+ requestAnimFrame() {
1878
+ if (!this.animFrameID) {
1879
+ this.animFrameID = requestAnimationFrame(this.animFrame);
1880
+ }
1881
+ }
1882
+ cancelAnimFrame() {
1883
+ if (this.animFrameID) {
1884
+ cancelAnimationFrame(this.animFrameID);
1885
+ this.animFrameID = 0;
1886
+ }
1887
+ }
1888
+ animFrameWrapper(timestamp) {
1889
+ this.animFrameID = 0;
1890
+ this.callback(timestamp);
1891
+ }
1892
+ };
1893
+
1894
+ // src/cubing/twisty/old/dom/viewers/canvas.ts
1895
+ var globalPixelRatioOverride = null;
1896
+ function pixelRatio() {
1897
+ return globalPixelRatioOverride ?? (devicePixelRatio || 1);
1898
+ }
1899
+
1900
+ // src/cubing/twisty/old/dom/viewers/Twisty3DCanvas.css.ts
1901
+ var twisty3DCanvasCSS = new CSSSource(`
1902
+ :host {
1903
+ width: 384px;
1904
+ height: 256px;
1905
+ display: grid;
1906
+ }
1907
+
1908
+ .wrapper {
1909
+ width: 100%;
1910
+ height: 100%;
1911
+ display: grid;
1912
+ overflow: hidden;
1913
+ }
1914
+
1915
+ /* TODO: This is due to stats hack. Replace with \`canvas\`. */
1916
+ .wrapper > canvas {
1917
+ max-width: 100%;
1918
+ max-height: 100%;
1919
+ }
1920
+
1921
+ .wrapper.invisible {
1922
+ opacity: 0;
1923
+ }
1924
+ `);
1925
+
1926
+ // src/cubing/twisty/old/dom/viewers/TwistyOrbitControls.ts
1927
+ import { Spherical, Vector3 as Vector34 } from "three";
1928
+ var EPSILON = 1e-8;
1929
+ var INERTIA_DEFAULT = true;
1930
+ var LATITUDE_LIMITS_DEFAULT = "auto";
1931
+ var INERTIA_DURATION_MS = 500;
1932
+ var INERTIA_TIMEOUT_MS = 50;
1933
+ var VERTICAL_MOVEMENT_BASE_SCALE = 0.75;
1934
+ function momentumScale(progress) {
1935
+ return (Math.exp(1 - progress) - (1 - progress)) / (1 - Math.E) + 1;
1936
+ }
1937
+ var Inertia = class {
1938
+ constructor(startTimestamp, momentumX, momentumY, callback) {
1939
+ this.startTimestamp = startTimestamp;
1940
+ this.momentumX = momentumX;
1941
+ this.momentumY = momentumY;
1942
+ this.callback = callback;
1943
+ this.scheduler = new RenderScheduler(this.render.bind(this));
1944
+ this.scheduler.requestAnimFrame();
1945
+ this.lastTimestamp = startTimestamp;
1946
+ }
1947
+ render(now) {
1948
+ const progressBefore = (this.lastTimestamp - this.startTimestamp) / INERTIA_DURATION_MS;
1949
+ const progressAfter = Math.min(1, (now - this.startTimestamp) / INERTIA_DURATION_MS);
1950
+ if (progressBefore === 0 && progressAfter > INERTIA_TIMEOUT_MS / INERTIA_DURATION_MS) {
1951
+ return;
1952
+ }
1953
+ const delta = momentumScale(progressAfter) - momentumScale(progressBefore);
1954
+ this.callback(this.momentumX * delta * 1e3, this.momentumY * delta * 1e3);
1955
+ if (progressAfter < 1) {
1956
+ this.scheduler.requestAnimFrame();
1957
+ }
1958
+ this.lastTimestamp = now;
1959
+ }
1960
+ };
1961
+ var _spherical, _lookAt, _adjust, adjust_fn, _acceptPropagation, _propagateSpherical, propagateSpherical_fn;
1962
+ var TwistyOrbitControls = class {
1963
+ constructor(camera, canvas, scheduleRender) {
1964
+ this.camera = camera;
1965
+ this.canvas = canvas;
1966
+ this.scheduleRender = scheduleRender;
1967
+ __privateAdd(this, _adjust);
1968
+ __privateAdd(this, _propagateSpherical);
1969
+ __privateAdd(this, _spherical, new Spherical());
1970
+ __privateAdd(this, _lookAt, new Vector34(0, 0, 0));
1971
+ this.experimentalInertia = INERTIA_DEFAULT;
1972
+ this.experimentalLatitudeLimits = LATITUDE_LIMITS_DEFAULT;
1973
+ this.lastTouchClientX = 0;
1974
+ this.lastTouchClientY = 0;
1975
+ this.currentTouchID = null;
1976
+ this.onMoveBound = this.onMove.bind(this);
1977
+ this.onMouseMoveBound = this.onMouseMove.bind(this);
1978
+ this.onMouseEndBound = this.onMouseEnd.bind(this);
1979
+ this.onTouchMoveBound = this.onTouchMove.bind(this);
1980
+ this.onTouchEndBound = this.onTouchEnd.bind(this);
1981
+ this.lastTouchTimestamp = 0;
1982
+ this.lastTouchMoveMomentumX = 0;
1983
+ this.lastTouchMoveMomentumY = 0;
1984
+ this.lastMouseTimestamp = 0;
1985
+ this.lastMouseMoveMomentumX = 0;
1986
+ this.lastMouseMoveMomentumY = 0;
1987
+ this.experimentalHasBeenMoved = false;
1988
+ __privateAdd(this, _acceptPropagation, true);
1989
+ __privateGet(this, _spherical).setFromVector3(camera.position);
1990
+ __privateMethod(this, _propagateSpherical, propagateSpherical_fn).call(this);
1991
+ canvas.addEventListener("mousedown", this.onMouseStart.bind(this));
1992
+ canvas.addEventListener("touchstart", this.onTouchStart.bind(this));
1993
+ }
1994
+ lookAt(v) {
1995
+ if (!__privateGet(this, _acceptPropagation)) {
1996
+ return;
1997
+ }
1998
+ __privateSet(this, _lookAt, v);
1999
+ __privateSet(this, _acceptPropagation, false);
2000
+ __privateMethod(this, _adjust, adjust_fn).call(this);
2001
+ this.scheduleRender();
2002
+ try {
2003
+ if (this.mirrorControls) {
2004
+ this.mirrorControls.lookAt(v);
2005
+ }
2006
+ } finally {
2007
+ __privateSet(this, _acceptPropagation, true);
2008
+ }
2009
+ }
2010
+ set latitude(newLatitude) {
2011
+ __privateGet(this, _spherical).phi = (90 - newLatitude) / DEGREES_PER_RADIAN;
2012
+ __privateMethod(this, _propagateSpherical, propagateSpherical_fn).call(this);
2013
+ }
2014
+ get latitude() {
2015
+ return 90 - __privateGet(this, _spherical).phi * DEGREES_PER_RADIAN;
2016
+ }
2017
+ set longitude(newLongitude) {
2018
+ __privateGet(this, _spherical).theta = newLongitude / DEGREES_PER_RADIAN;
2019
+ __privateMethod(this, _propagateSpherical, propagateSpherical_fn).call(this);
2020
+ }
2021
+ get longitude() {
2022
+ return __privateGet(this, _spherical).theta * DEGREES_PER_RADIAN;
2023
+ }
2024
+ set distance(newDistance) {
2025
+ __privateGet(this, _spherical).radius = newDistance;
2026
+ __privateMethod(this, _propagateSpherical, propagateSpherical_fn).call(this);
2027
+ }
2028
+ get distance() {
2029
+ return __privateGet(this, _spherical).radius;
2030
+ }
2031
+ get orbitCoordinates() {
2032
+ return {
2033
+ latitude: this.latitude,
2034
+ longitude: this.longitude,
2035
+ distance: this.distance
2036
+ };
2037
+ }
2038
+ set orbitCoordinates(orbitCoordinates) {
2039
+ this.latitude = orbitCoordinates.latitude;
2040
+ this.longitude = orbitCoordinates.longitude;
2041
+ this.distance = orbitCoordinates.distance;
2042
+ }
2043
+ temperMovement(f) {
2044
+ return Math.sign(f) * Math.log(Math.abs(f * 10) + 1) / 6;
2045
+ }
2046
+ onMouseStart(e) {
2047
+ this.experimentalHasBeenMoved = true;
2048
+ window.addEventListener("mousemove", this.onMouseMoveBound);
2049
+ window.addEventListener("mouseup", this.onMouseEndBound);
2050
+ this.onStart(e);
2051
+ this.lastMouseTimestamp = e.timeStamp;
2052
+ }
2053
+ onMouseMove(e) {
2054
+ if (e.buttons === 0) {
2055
+ this.onMouseEnd(e);
2056
+ return;
2057
+ }
2058
+ if (e.movementX === 0 && e.movementY === 0) {
2059
+ console.log("short-circuit mouse!");
2060
+ return;
2061
+ }
2062
+ const minDim = Math.min(this.canvas.offsetWidth, this.canvas.offsetHeight);
2063
+ const movementX = this.temperMovement(e.movementX / minDim);
2064
+ const movementY = this.temperMovement(e.movementY / minDim * VERTICAL_MOVEMENT_BASE_SCALE);
2065
+ this.onMove(movementX, movementY);
2066
+ const deltaMs = e.timeStamp - this.lastMouseTimestamp;
2067
+ if (deltaMs > 0) {
2068
+ this.lastMouseMoveMomentumX = movementX / deltaMs;
2069
+ this.lastMouseMoveMomentumY = movementY / deltaMs;
2070
+ this.lastMouseTimestamp = e.timeStamp;
2071
+ }
2072
+ }
2073
+ onMouseEnd(e) {
2074
+ window.removeEventListener("mousemove", this.onMouseMoveBound);
2075
+ window.removeEventListener("mouseup", this.onMouseEndBound);
2076
+ this.onEnd(e);
2077
+ if (this.experimentalInertia) {
2078
+ new Inertia(this.lastMouseTimestamp, this.lastMouseMoveMomentumX, this.lastMouseMoveMomentumY, this.onMoveBound);
2079
+ }
2080
+ }
2081
+ onTouchStart(e) {
2082
+ this.experimentalHasBeenMoved = true;
2083
+ if (this.currentTouchID === null) {
2084
+ if (e.touches[0].clientX === 0 && e.touches[0].clientY === 0) {
2085
+ console.log("short-circuit touch!");
2086
+ return;
2087
+ }
2088
+ this.currentTouchID = e.changedTouches[0].identifier;
2089
+ this.lastTouchClientX = e.touches[0].clientX;
2090
+ this.lastTouchClientY = e.touches[0].clientY;
2091
+ window.addEventListener("touchmove", this.onTouchMoveBound);
2092
+ window.addEventListener("touchend", this.onTouchEndBound);
2093
+ window.addEventListener("touchcancel", this.onTouchEndBound);
2094
+ this.onStart(e);
2095
+ this.lastTouchTimestamp = e.timeStamp;
2096
+ }
2097
+ }
2098
+ onTouchMove(e) {
2099
+ for (let i = 0; i < e.changedTouches.length; i++) {
2100
+ const touch = e.changedTouches[i];
2101
+ if (touch.identifier === this.currentTouchID) {
2102
+ const minDim = Math.min(this.canvas.offsetWidth, this.canvas.offsetHeight);
2103
+ const movementX = this.temperMovement((touch.clientX - this.lastTouchClientX) / minDim);
2104
+ const movementY = this.temperMovement((touch.clientY - this.lastTouchClientY) / minDim * VERTICAL_MOVEMENT_BASE_SCALE);
2105
+ this.onMove(movementX, movementY);
2106
+ this.lastTouchClientX = touch.clientX;
2107
+ this.lastTouchClientY = touch.clientY;
2108
+ const deltaMs = e.timeStamp - this.lastTouchTimestamp;
2109
+ if (deltaMs > 0) {
2110
+ this.lastTouchMoveMomentumX = movementX / deltaMs;
2111
+ this.lastTouchMoveMomentumY = movementY / deltaMs;
2112
+ this.lastTouchTimestamp = e.timeStamp;
2113
+ }
2114
+ }
2115
+ }
2116
+ }
2117
+ onTouchEnd(e) {
2118
+ for (let i = 0; i < e.changedTouches.length; i++) {
2119
+ const touch = e.changedTouches[i];
2120
+ if (touch.identifier === this.currentTouchID) {
2121
+ this.currentTouchID = null;
2122
+ window.removeEventListener("touchmove", this.onTouchMoveBound);
2123
+ window.removeEventListener("touchend", this.onTouchEndBound);
2124
+ window.removeEventListener("touchcancel", this.onTouchEndBound);
2125
+ this.onEnd(e);
2126
+ }
2127
+ }
2128
+ if (this.experimentalInertia) {
2129
+ new Inertia(this.lastTouchTimestamp, this.lastTouchMoveMomentumX, this.lastTouchMoveMomentumY, this.onMoveBound);
2130
+ }
2131
+ }
2132
+ onStart(e) {
2133
+ e.preventDefault();
2134
+ }
2135
+ onMove(movementX, movementY) {
2136
+ const newSpherical = new Spherical();
2137
+ newSpherical.copy(__privateGet(this, _spherical));
2138
+ newSpherical.theta += -2 * movementX;
2139
+ newSpherical.phi += -2 * movementY;
2140
+ if (this.experimentalLatitudeLimits !== "none") {
2141
+ newSpherical.phi = Math.max(newSpherical.phi, Math.PI * 0.3);
2142
+ newSpherical.phi = Math.min(newSpherical.phi, Math.PI * 0.7);
2143
+ } else {
2144
+ newSpherical.phi = Math.max(newSpherical.phi, EPSILON);
2145
+ newSpherical.phi = Math.min(newSpherical.phi, Math.PI - EPSILON);
2146
+ }
2147
+ if (isNaN(newSpherical.theta) || newSpherical.theta === Infinity || newSpherical.theta === -Infinity) {
2148
+ return;
2149
+ }
2150
+ if (isNaN(newSpherical.phi) || newSpherical.phi === Infinity || newSpherical.phi === -Infinity) {
2151
+ return;
2152
+ }
2153
+ __privateSet(this, _spherical, newSpherical);
2154
+ __privateMethod(this, _propagateSpherical, propagateSpherical_fn).call(this);
2155
+ }
2156
+ onEnd(e) {
2157
+ e.preventDefault();
2158
+ }
2159
+ setMirror(m) {
2160
+ this.mirrorControls = m;
2161
+ }
2162
+ updateMirroredCamera(orbitCoordinates) {
2163
+ if (__privateGet(this, _acceptPropagation)) {
2164
+ this.latitude = -orbitCoordinates.latitude;
2165
+ this.longitude = orbitCoordinates.longitude + 180;
2166
+ this.distance = orbitCoordinates.distance;
2167
+ __privateMethod(this, _adjust, adjust_fn).call(this);
2168
+ this.scheduleRender();
2169
+ }
2170
+ }
2171
+ };
2172
+ _spherical = new WeakMap();
2173
+ _lookAt = new WeakMap();
2174
+ _adjust = new WeakSet();
2175
+ adjust_fn = function() {
2176
+ __privateGet(this, _spherical).makeSafe();
2177
+ this.camera.position.setFromSpherical(__privateGet(this, _spherical));
2178
+ this.camera.lookAt(__privateGet(this, _lookAt));
2179
+ };
2180
+ _acceptPropagation = new WeakMap();
2181
+ _propagateSpherical = new WeakSet();
2182
+ propagateSpherical_fn = function() {
2183
+ __privateSet(this, _acceptPropagation, false);
2184
+ try {
2185
+ __privateMethod(this, _adjust, adjust_fn).call(this);
2186
+ this.scheduleRender();
2187
+ this.mirrorControls?.updateMirroredCamera({
2188
+ latitude: this.latitude,
2189
+ longitude: this.longitude,
2190
+ distance: this.distance
2191
+ });
2192
+ } finally {
2193
+ __privateSet(this, _acceptPropagation, true);
2194
+ }
2195
+ };
2196
+
2197
+ // src/cubing/vendor/three/examples/jsm/libs/stats.modified.module.ts
2198
+ var performance = globalThis.performance;
2199
+ var Stats = class {
2200
+ constructor() {
2201
+ this.mode = 0;
2202
+ this.dom = document.createElement("div");
2203
+ this.beginTime = (performance || Date).now();
2204
+ this.prevTime = this.beginTime;
2205
+ this.frames = 0;
2206
+ this.fpsPanel = this.addPanel(new StatsPanel("FPS", "#0ff", "#002"));
2207
+ this.msPanel = this.addPanel(new StatsPanel("MS", "#0f0", "#020"));
2208
+ this.memPanel = performance?.memory ? this.addPanel(new StatsPanel("MB", "#f08", "#201")) : null;
2209
+ this.REVISION = 16;
2210
+ this.dom.style.cssText = "position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000";
2211
+ this.dom.addEventListener("click", (event) => {
2212
+ event.preventDefault();
2213
+ this.showPanel(++this.mode % this.dom.children.length);
2214
+ }, false);
2215
+ this.showPanel(0);
2216
+ }
2217
+ addPanel(panel) {
2218
+ this.dom.appendChild(panel.dom);
2219
+ return panel;
2220
+ }
2221
+ showPanel(id) {
2222
+ for (let i = 0; i < this.dom.children.length; i++) {
2223
+ this.dom.children[i].style.display = i === id ? "block" : "none";
2224
+ }
2225
+ this.mode = id;
2226
+ }
2227
+ begin() {
2228
+ this.beginTime = (performance || Date).now();
2229
+ }
2230
+ end() {
2231
+ this.frames++;
2232
+ const time = (performance || Date).now();
2233
+ this.msPanel.update(time - this.beginTime, 200);
2234
+ if (time >= this.prevTime + 1e3) {
2235
+ this.fpsPanel.update(this.frames * 1e3 / (time - this.prevTime), 100);
2236
+ this.prevTime = time;
2237
+ this.frames = 0;
2238
+ if (this.memPanel) {
2239
+ const memory = performance.memory;
2240
+ this.memPanel.update(memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576);
2241
+ }
2242
+ }
2243
+ return time;
2244
+ }
2245
+ update() {
2246
+ this.beginTime = this.end();
2247
+ }
2248
+ };
2249
+ var PR = Math.round(globalThis?.window?.devicePixelRatio ?? 1);
2250
+ var WIDTH = 80 * PR;
2251
+ var HEIGHT = 48 * PR;
2252
+ var TEXT_X = 3 * PR;
2253
+ var TEXT_Y = 2 * PR;
2254
+ var GRAPH_X = 3 * PR;
2255
+ var GRAPH_Y = 15 * PR;
2256
+ var GRAPH_WIDTH = 74 * PR;
2257
+ var GRAPH_HEIGHT = 30 * PR;
2258
+ var StatsPanel = class {
2259
+ constructor(name, fg, bg) {
2260
+ this.name = name;
2261
+ this.fg = fg;
2262
+ this.bg = bg;
2263
+ this.min = Infinity;
2264
+ this.max = 0;
2265
+ this.dom = document.createElement("canvas");
2266
+ this.context = this.dom.getContext("2d");
2267
+ this.dom.width = WIDTH;
2268
+ this.dom.height = HEIGHT;
2269
+ this.dom.style.cssText = "width:80px;height:48px";
2270
+ this.context.font = `bold ${9 * PR}px Helvetica,Arial,sans-serif`;
2271
+ this.context.textBaseline = "top";
2272
+ this.context.fillStyle = bg;
2273
+ this.context.fillRect(0, 0, WIDTH, HEIGHT);
2274
+ this.context.fillStyle = fg;
2275
+ this.context.fillText(name, TEXT_X, TEXT_Y);
2276
+ this.context.fillRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT);
2277
+ this.context.fillStyle = bg;
2278
+ this.context.globalAlpha = 0.9;
2279
+ this.context.fillRect(GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT);
2280
+ }
2281
+ update(value, maxValue) {
2282
+ this.min = Math.min(this.min, value);
2283
+ this.max = Math.max(this.max, value);
2284
+ this.context.fillStyle = this.bg;
2285
+ this.context.globalAlpha = 1;
2286
+ this.context.fillRect(0, 0, WIDTH, GRAPH_Y);
2287
+ this.context.fillStyle = this.fg;
2288
+ this.context.fillText(Math.round(value) + " " + this.name + " (" + Math.round(this.min) + "-" + Math.round(this.max) + ")", TEXT_X, TEXT_Y);
2289
+ this.context.drawImage(this.dom, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT);
2290
+ this.context.fillRect(GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT);
2291
+ this.context.fillStyle = this.bg;
2292
+ this.context.globalAlpha = 0.9;
2293
+ this.context.fillRect(GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, Math.round((1 - value / maxValue) * GRAPH_HEIGHT));
2294
+ }
2295
+ };
2296
+
2297
+ // src/cubing/twisty/old/dom/viewers/Twisty3DCanvas.ts
2298
+ var SHOW_STATS = false;
2299
+ function experimentalShowRenderStats(show) {
2300
+ SHOW_STATS = show;
2301
+ }
2302
+ var shareAllNewRenderers = false;
2303
+ var sharedRenderer = null;
2304
+ function newRenderer() {
2305
+ return new WebGLRenderer({
2306
+ antialias: true,
2307
+ alpha: true
2308
+ });
2309
+ }
2310
+ function newSharedRenderer() {
2311
+ return sharedRenderer ?? (sharedRenderer = newRenderer());
2312
+ }
2313
+ var _invisible, _onRenderFinish, _resize, resize_fn;
2314
+ var Twisty3DCanvas = class extends ManagedCustomElement {
2315
+ constructor(scene, options = {}) {
2316
+ super();
2317
+ __privateAdd(this, _resize);
2318
+ this.legacyExperimentalShift = 0;
2319
+ this.scheduler = new RenderScheduler(this.render.bind(this));
2320
+ this.resizePending = false;
2321
+ this.stats = null;
2322
+ __privateAdd(this, _invisible, false);
2323
+ __privateAdd(this, _onRenderFinish, null);
2324
+ this.addCSS(twisty3DCanvasCSS);
2325
+ this.scene = scene;
2326
+ this.scene?.addRenderTarget(this);
2327
+ if (SHOW_STATS) {
2328
+ this.stats = new Stats();
2329
+ this.stats.dom.style.position = "absolute";
2330
+ this.addElement(this.stats.dom);
2331
+ }
2332
+ this.rendererIsShared = shareAllNewRenderers;
2333
+ this.renderer = this.rendererIsShared ? newSharedRenderer() : newRenderer();
2334
+ this.canvas = this.rendererIsShared ? document.createElement("canvas") : this.renderer.domElement;
2335
+ this.canvas2DContext = this.canvas.getContext("2d");
2336
+ this.addElement(this.canvas);
2337
+ this.camera = new PerspectiveCamera(20, 1, 0.1, 20);
2338
+ this.camera.position.copy(new Vector35(2, 4, 4));
2339
+ this.orbitControls = new TwistyOrbitControls(this.camera, this.canvas, this.scheduleRender.bind(this));
2340
+ if (options.orbitCoordinates) {
2341
+ this.orbitControls.latitude = options.orbitCoordinates.latitude * (options.negateCameraPosition ? -1 : 1);
2342
+ }
2343
+ if (options.orbitCoordinates) {
2344
+ this.orbitControls.longitude = options.orbitCoordinates.longitude + (options.negateCameraPosition ? 180 : 0);
2345
+ }
2346
+ if (options.orbitCoordinates) {
2347
+ this.orbitControls.distance = options.orbitCoordinates.distance;
2348
+ }
2349
+ this.camera.lookAt(new Vector35(0, 0, 0));
2350
+ const observer = new ResizeObserver(this.onResize.bind(this));
2351
+ observer.observe(this.contentWrapper);
2352
+ }
2353
+ setMirror(partner) {
2354
+ this.orbitControls.setMirror(partner.orbitControls);
2355
+ partner.orbitControls.setMirror(this.orbitControls);
2356
+ }
2357
+ experimentalSetLatitudeLimits(limits) {
2358
+ this.orbitControls.experimentalLatitudeLimits = limits;
2359
+ }
2360
+ connectedCallback() {
2361
+ __privateMethod(this, _resize, resize_fn).call(this);
2362
+ this.render();
2363
+ }
2364
+ scheduleRender() {
2365
+ this.scheduler.requestAnimFrame();
2366
+ }
2367
+ makeInvisibleUntilRender() {
2368
+ this.contentWrapper.classList.add("invisible");
2369
+ __privateSet(this, _invisible, true);
2370
+ }
2371
+ experimentalSetOnRenderFinish(f) {
2372
+ __privateSet(this, _onRenderFinish, f);
2373
+ }
2374
+ render() {
2375
+ this.stats?.begin();
2376
+ this.scheduler.cancelAnimFrame();
2377
+ if (this.resizePending) {
2378
+ __privateMethod(this, _resize, resize_fn).call(this);
2379
+ }
2380
+ if (this.rendererIsShared) {
2381
+ this.renderer.setSize(this.canvas.width, this.canvas.height, false);
2382
+ this.canvas2DContext.clearRect(0, 0, this.canvas.width, this.canvas.height);
2383
+ }
2384
+ if (this.scene) {
2385
+ this.renderer.render(this.scene, this.camera);
2386
+ }
2387
+ if (this.rendererIsShared) {
2388
+ this.canvas2DContext.drawImage(this.renderer.domElement, 0, 0);
2389
+ }
2390
+ if (__privateGet(this, _invisible)) {
2391
+ this.contentWrapper.classList.remove("invisible");
2392
+ }
2393
+ this.stats?.end();
2394
+ if (__privateGet(this, _onRenderFinish)) {
2395
+ __privateGet(this, _onRenderFinish).call(this);
2396
+ }
2397
+ }
2398
+ onResize() {
2399
+ this.resizePending = true;
2400
+ this.scheduleRender();
2401
+ }
2402
+ renderToDataURL(options = {}) {
2403
+ __privateMethod(this, _resize, resize_fn).call(this, options.minWidth, options.minHeight);
2404
+ this.render();
2405
+ let url;
2406
+ if (!options.squareCrop || this.canvas.width === this.canvas.height) {
2407
+ url = this.canvas.toDataURL();
2408
+ } else {
2409
+ const tempCanvas = document.createElement("canvas");
2410
+ const squareSize = Math.min(this.canvas.width, this.canvas.height);
2411
+ tempCanvas.width = squareSize;
2412
+ tempCanvas.height = squareSize;
2413
+ const tempCtx = tempCanvas.getContext("2d");
2414
+ tempCtx.drawImage(this.canvas, -(this.canvas.width - squareSize) / 2, -(this.canvas.height - squareSize) / 2);
2415
+ url = tempCanvas.toDataURL();
2416
+ }
2417
+ __privateMethod(this, _resize, resize_fn).call(this);
2418
+ return url;
2419
+ }
2420
+ };
2421
+ _invisible = new WeakMap();
2422
+ _onRenderFinish = new WeakMap();
2423
+ _resize = new WeakSet();
2424
+ resize_fn = function(minWidth = 0, minHeight = 0) {
2425
+ this.resizePending = false;
2426
+ const w = Math.max(this.contentWrapper.clientWidth, minWidth);
2427
+ const h = Math.max(this.contentWrapper.clientHeight, minHeight);
2428
+ let off = 0;
2429
+ if (this.legacyExperimentalShift > 0) {
2430
+ off = Math.max(0, Math.floor((w - h) * 0.5));
2431
+ } else if (this.legacyExperimentalShift < 0) {
2432
+ off = -Math.max(0, Math.floor((w - h) * 0.5));
2433
+ }
2434
+ let yoff = 0;
2435
+ let excess = 0;
2436
+ if (h > w) {
2437
+ excess = h - w;
2438
+ yoff = -Math.floor(0.5 * excess);
2439
+ }
2440
+ this.camera.aspect = w / h;
2441
+ this.camera.setViewOffset(w, h - excess, off, yoff, w, h);
2442
+ this.camera.updateProjectionMatrix();
2443
+ if (this.rendererIsShared) {
2444
+ this.canvas.width = w * pixelRatio();
2445
+ this.canvas.height = h * pixelRatio();
2446
+ this.canvas.style.width = w.toString();
2447
+ this.canvas.style.height = w.toString();
2448
+ } else {
2449
+ this.renderer.setPixelRatio(pixelRatio());
2450
+ this.renderer.setSize(w, h, true);
2451
+ }
2452
+ this.scheduleRender();
2453
+ };
2454
+ customElementsShim.define("twisty-3d-canvas", Twisty3DCanvas);
2455
+
2456
+ // src/cubing/twisty/views/3D/Twisty3DScene.ts
2457
+ import { Scene as ThreeScene } from "three";
2458
+ var Twisty3DScene = class extends ThreeScene {
2459
+ constructor() {
2460
+ super();
2461
+ this.renderTargets = new Set();
2462
+ this.twisty3Ds = new Set();
2463
+ }
2464
+ addRenderTarget(renderTarget) {
2465
+ this.renderTargets.add(renderTarget);
2466
+ }
2467
+ scheduleRender() {
2468
+ for (const renderTarget of this.renderTargets) {
2469
+ renderTarget.scheduleRender();
2470
+ }
2471
+ }
2472
+ addTwisty3DPuzzle(twisty3DPuzzle) {
2473
+ this.twisty3Ds.add(twisty3DPuzzle);
2474
+ this.add(twisty3DPuzzle);
2475
+ }
2476
+ removeTwisty3DPuzzle(twisty3DPuzzle) {
2477
+ this.twisty3Ds.delete(twisty3DPuzzle);
2478
+ this.remove(twisty3DPuzzle);
2479
+ }
2480
+ clearPuzzles() {
2481
+ for (const puz of this.twisty3Ds) {
2482
+ this.remove(puz);
2483
+ }
2484
+ this.twisty3Ds.clear();
2485
+ }
2486
+ };
2487
+
2488
+ export {
2489
+ RenderScheduler,
2490
+ ClassListManager,
2491
+ HTMLElementShim,
2492
+ customElementsShim,
2493
+ CSSSource,
2494
+ ManagedCustomElement,
2495
+ DEGREES_PER_RADIAN,
2496
+ twistyViewerWrapperCSS,
2497
+ TwistyViewerWrapper,
2498
+ pyraminxLookAt,
2499
+ defaultCameraOrbitCoordinates,
2500
+ controlsLocations,
2501
+ TwistyPlayerConfig,
2502
+ Cube3D,
2503
+ PG3D,
2504
+ pixelRatio,
2505
+ twisty3DCanvasCSS,
2506
+ Stats,
2507
+ experimentalShowRenderStats,
2508
+ Twisty3DCanvas,
2509
+ Twisty3DScene
2510
+ };
2511
+ //# sourceMappingURL=chunk-EM5F24AO.js.map