1681-engine 0.5.8 → 0.5.10

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 (724) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +3 -0
  3. package/dist/1681-engine.js +526 -409
  4. package/dist/ambient/ColorGrade.js +0 -1
  5. package/dist/ambient/DayClock.js +0 -1
  6. package/dist/ambient/WeatherLayer.js +0 -1
  7. package/dist/ambient/grade.js +0 -1
  8. package/dist/ambient/life/Birds.js +73 -0
  9. package/dist/ambient/life/Butterflies.js +43 -0
  10. package/dist/ambient/life/ChimneySmoke.js +50 -0
  11. package/dist/ambient/life/Drift.js +75 -0
  12. package/dist/ambient/life/Fireflies.js +52 -0
  13. package/dist/ambient/life/lifeMotion.js +49 -0
  14. package/dist/ambient/weather.js +0 -1
  15. package/dist/anim/AnimStateMachine.js +0 -1
  16. package/dist/anim/Animator.js +0 -1
  17. package/dist/anim/animStateCompile.js +0 -1
  18. package/dist/anim/animStateSystem.js +0 -1
  19. package/dist/anim/animationSystem.js +0 -1
  20. package/dist/anim/asepriteSlices.js +0 -1
  21. package/dist/anim/asepriteTags.js +0 -1
  22. package/dist/anim/parseAseprite.js +0 -1
  23. package/dist/assets/AssetLoader.js +177 -34
  24. package/dist/assets/Prepainter.js +61 -0
  25. package/dist/assets/loadAseprite.js +0 -1
  26. package/dist/assets/takeCleanerWorker-DTcI_Jqr.js +0 -1
  27. package/dist/assets/textureAtlas.js +58 -0
  28. package/dist/assets/workerPainter.js +39 -0
  29. package/dist/audio/Footsteps.js +0 -1
  30. package/dist/audio/MusicPlayer.js +0 -1
  31. package/dist/audio/SoundEngine.js +13 -7
  32. package/dist/audio/cleanTake.js +0 -1
  33. package/dist/audio/music/ElementVoice.js +0 -1
  34. package/dist/audio/music/GraphVoice.js +0 -1
  35. package/dist/audio/music/MusicChannel.js +0 -1
  36. package/dist/audio/music/musicVoice.js +0 -1
  37. package/dist/audio/sampleBank.js +0 -1
  38. package/dist/audio/soundTable.js +0 -1
  39. package/dist/audio/synth.js +0 -1
  40. package/dist/cjs/electron/electronLike.d.ts +55 -0
  41. package/dist/cjs/electron/electronLike.js +7 -0
  42. package/dist/cjs/electron/index.d.ts +14 -0
  43. package/dist/cjs/electron/index.js +20 -0
  44. package/dist/cjs/electron/lockdown.d.ts +33 -0
  45. package/dist/cjs/electron/lockdown.js +69 -0
  46. package/dist/cjs/electron/lockdownRules.d.ts +28 -0
  47. package/dist/cjs/electron/lockdownRules.js +61 -0
  48. package/dist/cjs/electron/sessionStore.d.ts +40 -0
  49. package/dist/cjs/electron/sessionStore.js +77 -0
  50. package/dist/cjs/electron/shellId.d.ts +22 -0
  51. package/dist/cjs/electron/shellId.js +31 -0
  52. package/dist/cjs/electron/webFiles.d.ts +13 -0
  53. package/dist/cjs/electron/webFiles.js +52 -0
  54. package/dist/cjs/electron/webPatcher.d.ts +80 -0
  55. package/dist/cjs/electron/webPatcher.js +216 -0
  56. package/dist/cjs/electron/webPointers.d.ts +19 -0
  57. package/dist/cjs/electron/webPointers.js +35 -0
  58. package/dist/cjs/package.json +1 -0
  59. package/dist/cjs/updates/index.d.ts +8 -0
  60. package/dist/cjs/updates/index.js +21 -0
  61. package/dist/cjs/updates/manifest.d.ts +73 -0
  62. package/dist/cjs/updates/manifest.js +67 -0
  63. package/dist/cjs/updates/pickUpdate.d.ts +42 -0
  64. package/dist/cjs/updates/pickUpdate.js +52 -0
  65. package/dist/cjs/updates/webPlan.d.ts +20 -0
  66. package/dist/cjs/updates/webPlan.js +34 -0
  67. package/dist/core/BitmapLabel.js +0 -1
  68. package/dist/core/Camera.js +1 -2
  69. package/dist/core/Clock.js +31 -21
  70. package/dist/core/Graphics.js +0 -1
  71. package/dist/core/Group.js +0 -1
  72. package/dist/core/Image.js +0 -1
  73. package/dist/core/ObjectFactory.js +0 -1
  74. package/dist/core/Pointer.js +46 -24
  75. package/dist/core/Rectangle.js +0 -1
  76. package/dist/core/Stage.js +5 -6
  77. package/dist/core/Text.js +0 -1
  78. package/dist/core/TextureRegistry.js +54 -24
  79. package/dist/core/Timeline.js +0 -1
  80. package/dist/core/TimelineBuilder.js +0 -1
  81. package/dist/core/TimelineChild.js +0 -1
  82. package/dist/core/Tweener.js +0 -1
  83. package/dist/core/atlas.js +0 -1
  84. package/dist/core/atlasPlan.js +0 -1
  85. package/dist/core/blendLayer.js +11 -0
  86. package/dist/core/eases.js +0 -1
  87. package/dist/core/gameObject.js +22 -20
  88. package/dist/core/pixelZoom.js +43 -0
  89. package/dist/core/pixiPatches.js +0 -1
  90. package/dist/core/runDue.js +28 -0
  91. package/dist/core/silhouette.js +49 -0
  92. package/dist/core/timelinePlace.js +0 -1
  93. package/dist/core/tweenProps.js +0 -1
  94. package/dist/debug/DebugOverlay.js +0 -1
  95. package/dist/debug/DrawCallCounter.js +15 -12
  96. package/dist/debug/ErrorLog.js +0 -1
  97. package/dist/debug/FrameStats.js +0 -1
  98. package/dist/debug/inspectWorld.js +0 -1
  99. package/dist/diagnostics/ErrorDeduper.js +0 -1
  100. package/dist/diagnostics/FrameSampler.js +0 -1
  101. package/dist/diagnostics/bootWatch.js +0 -1
  102. package/dist/diagnostics/captureErrors.js +0 -1
  103. package/dist/diagnostics/contextLoss.js +0 -1
  104. package/dist/diagnostics/frameStats.js +0 -1
  105. package/dist/diagnostics/gpuInfo.js +0 -1
  106. package/dist/diagnostics/renderGuard.js +0 -1
  107. package/dist/ecs/SparseSet.js +0 -1
  108. package/dist/ecs/World.js +0 -1
  109. package/dist/ecs/fields.js +0 -1
  110. package/dist/electron/lockdown.js +31 -0
  111. package/dist/electron/lockdownRules.js +42 -0
  112. package/dist/electron/sessionStore.js +48 -0
  113. package/dist/electron/shellId.js +18 -0
  114. package/dist/electron/webFiles.js +36 -0
  115. package/dist/electron/webPatcher.js +147 -0
  116. package/dist/electron/webPointers.js +25 -0
  117. package/dist/electron.js +19 -0
  118. package/dist/engine/Engine.js +42 -18
  119. package/dist/engine/FixedLoop.js +0 -1
  120. package/dist/engine/HiddenPause.js +27 -0
  121. package/dist/engine/Scene.js +0 -1
  122. package/dist/engine/SceneManager.js +0 -1
  123. package/dist/events/EventBus.js +0 -1
  124. package/dist/fx/Afterimages.js +82 -0
  125. package/dist/fx/FloatingText.js +0 -1
  126. package/dist/fx/hitStop.js +0 -1
  127. package/dist/fx/viewCull.js +0 -1
  128. package/dist/i18n/Translator.js +0 -1
  129. package/dist/i18n/extractStrings.js +0 -1
  130. package/dist/i18n/formatMessage.js +0 -1
  131. package/dist/input/Actions.js +29 -21
  132. package/dist/input/AimGesture.js +0 -1
  133. package/dist/input/Keyboard.js +0 -1
  134. package/dist/input/Keymap.js +0 -1
  135. package/dist/input/TargetLock.js +0 -1
  136. package/dist/input/aimAxis.js +0 -1
  137. package/dist/input/haptics.js +50 -0
  138. package/dist/input/keyChord.js +0 -1
  139. package/dist/input/longPress.js +0 -1
  140. package/dist/input/rumble.js +42 -0
  141. package/dist/input/stickAxis.js +0 -1
  142. package/dist/input/touchDetect.js +0 -1
  143. package/dist/light/LightLayer.js +0 -1
  144. package/dist/nav/MinHeap.js +0 -1
  145. package/dist/nav/findPath.js +0 -1
  146. package/dist/nav/navGrid.js +0 -1
  147. package/dist/nav/nearestOpen.js +0 -1
  148. package/dist/nav/straightenPath.js +0 -1
  149. package/dist/net/ApiClient.js +96 -0
  150. package/dist/net/Connection.js +39 -16
  151. package/dist/net/InterpolationBuffer.js +0 -1
  152. package/dist/net/PredictedMover.js +0 -1
  153. package/dist/net/Room.js +0 -1
  154. package/dist/net/RoomHost.js +0 -1
  155. package/dist/net/cadence.js +0 -1
  156. package/dist/net/constants.js +0 -1
  157. package/dist/net/lobby/LobbyClient.js +0 -1
  158. package/dist/net/lobby/LobbyHost.js +0 -1
  159. package/dist/net/lobby/LobbyRooms.js +0 -1
  160. package/dist/net/lobby/Matchmaker.js +0 -1
  161. package/dist/net/movement.js +40 -39
  162. package/dist/net/protocol.js +0 -1
  163. package/dist/net/reconnect.js +10 -0
  164. package/dist/net/serverClock.js +0 -1
  165. package/dist/net/snapshotCodec.js +0 -1
  166. package/dist/parallax/Parallax.js +0 -1
  167. package/dist/parallax/ParallaxLayer.js +0 -1
  168. package/dist/parallax/parallaxMath.js +0 -1
  169. package/dist/particles/Emitter.js +0 -1
  170. package/dist/particles/ParticleBudget.js +0 -1
  171. package/dist/particles/ParticleSim.js +0 -1
  172. package/dist/particles/particleCurves.js +0 -1
  173. package/dist/particles/particleSampling.js +0 -1
  174. package/dist/physics/Body.js +0 -1
  175. package/dist/physics/BroadPhase.js +0 -1
  176. package/dist/physics/Contact.js +0 -1
  177. package/dist/physics/ContactSolver.js +0 -1
  178. package/dist/physics/PhysicsWorld.js +0 -1
  179. package/dist/physics/SpatialHash.js +0 -1
  180. package/dist/physics/collide.js +0 -1
  181. package/dist/physics/collidePolygon.js +0 -1
  182. package/dist/physics/contactReport.js +0 -1
  183. package/dist/physics/drawColliders.js +0 -1
  184. package/dist/physics/physicsSystem.js +0 -1
  185. package/dist/physics/polygon.js +0 -1
  186. package/dist/physics/raycast.js +0 -1
  187. package/dist/physics/syncToBody.js +0 -1
  188. package/dist/physics/tileBodies.js +0 -1
  189. package/dist/physics/types.js +0 -1
  190. package/dist/pixel/Darkness.js +50 -47
  191. package/dist/pixel/DitherVignette.js +0 -1
  192. package/dist/pixel/Evaporation.js +0 -1
  193. package/dist/pixel/NightShade.js +0 -1
  194. package/dist/pixel/PixelLayer.js +0 -1
  195. package/dist/pixel/PixelMarks.js +99 -0
  196. package/dist/pixel/SwayProp.js +0 -1
  197. package/dist/pixel/aimPixels.js +67 -0
  198. package/dist/pixel/lifeArt.js +83 -0
  199. package/dist/pixel/lights.js +0 -1
  200. package/dist/pixel/nineSlice.js +0 -1
  201. package/dist/pixel/paintLayer.js +0 -1
  202. package/dist/pixel/palette.js +0 -1
  203. package/dist/pixel/pixel.js +0 -1
  204. package/dist/pixel/pixelPaint.js +27 -24
  205. package/dist/pixel/pixelParticles.js +35 -0
  206. package/dist/pixel/pixelTone.js +0 -1
  207. package/dist/pixel/propKit.js +0 -1
  208. package/dist/pixel/ramp.js +0 -1
  209. package/dist/pixel/selout.js +0 -1
  210. package/dist/pixel/spritePixels.js +0 -1
  211. package/dist/pixel/swayRig.js +0 -1
  212. package/dist/pixel/vignetteMask.js +0 -1
  213. package/dist/pixel/weatherArt.js +0 -1
  214. package/dist/pixel.js +82 -71
  215. package/dist/platform/appResume.js +18 -0
  216. package/dist/platform/fullscreen.js +52 -0
  217. package/dist/platform/orientation.js +26 -0
  218. package/dist/platform/pointerLock.js +37 -0
  219. package/dist/platform/reducedMotion.js +23 -0
  220. package/dist/platform/timeoutSignal.js +14 -0
  221. package/dist/platform/touch.js +0 -1
  222. package/dist/postfx/BloomFilter.js +0 -1
  223. package/dist/postfx/ChromaticAberrationFilter.js +0 -1
  224. package/dist/postfx/ColorAdjustFilter.js +0 -1
  225. package/dist/postfx/CrtFilter.js +0 -1
  226. package/dist/postfx/PixelateFilter.js +0 -1
  227. package/dist/postfx/PostFx.js +0 -1
  228. package/dist/postfx/ShockwaveFilter.js +0 -1
  229. package/dist/postfx/VignetteFilter.js +0 -1
  230. package/dist/postfx/fxAnimator.js +0 -1
  231. package/dist/postfx/fxShader.js +0 -1
  232. package/dist/postfx.js +0 -1
  233. package/dist/react/ChoiceDialog.js +0 -1
  234. package/dist/react/ConfirmButton.js +24 -0
  235. package/dist/react/ConfirmDialog.js +0 -1
  236. package/dist/react/Glyph.js +0 -1
  237. package/dist/react/Modal.js +0 -1
  238. package/dist/react/Panel.js +0 -1
  239. package/dist/react/PixelImage.js +0 -1
  240. package/dist/react/Select.js +0 -1
  241. package/dist/react/Slider.js +0 -1
  242. package/dist/react/SplitPane.js +0 -1
  243. package/dist/react/TabStrip.js +0 -1
  244. package/dist/react/TitleTips.js +0 -1
  245. package/dist/react/Tooltip.js +0 -1
  246. package/dist/react/UiProvider.js +0 -1
  247. package/dist/react/baseCss.js +1 -1
  248. package/dist/react/choiceStore.js +0 -1
  249. package/dist/react/classNames.js +0 -1
  250. package/dist/react/confirmStore.js +0 -1
  251. package/dist/react/labels.js +7 -7
  252. package/dist/react/placement.js +0 -1
  253. package/dist/react/useFillSheet.js +0 -1
  254. package/dist/react/useFitToViewport.js +0 -1
  255. package/dist/react/useJsonSelector.js +13 -0
  256. package/dist/react/usePicked.js +0 -1
  257. package/dist/react/useStore.js +0 -1
  258. package/dist/react/useViewport.js +0 -1
  259. package/dist/react.js +73 -69
  260. package/dist/rig/PosePlayer.js +0 -1
  261. package/dist/rig/RigView.js +0 -1
  262. package/dist/rig/Skeleton.js +0 -1
  263. package/dist/rig/humanoid.js +0 -1
  264. package/dist/rig/humanoid.json.js +0 -1
  265. package/dist/rig/humanoidPoses.js +0 -1
  266. package/dist/rig/poseMath.js +0 -1
  267. package/dist/rig/poses.json.js +0 -1
  268. package/dist/save/Autosaver.js +0 -1
  269. package/dist/save/MemoryBackend.js +0 -1
  270. package/dist/save/SaveStore.js +0 -1
  271. package/dist/save/WebStorageBackend.js +0 -1
  272. package/dist/save/checksum.js +0 -1
  273. package/dist/save/migrateSave.js +0 -1
  274. package/dist/settings.js +0 -1
  275. package/dist/tilemap/TilemapView.js +57 -33
  276. package/dist/tilemap/autotile.js +103 -0
  277. package/dist/tilemap/collision.js +29 -19
  278. package/dist/tilemap/ldtk.js +21 -0
  279. package/dist/tilemap/ldtkParse.js +191 -0
  280. package/dist/tilemap/tiled.js +0 -1
  281. package/dist/transitions/CrossfadeTransition.js +0 -1
  282. package/dist/transitions/DitherWipeTransition.js +0 -1
  283. package/dist/transitions/FadeTransition.js +0 -1
  284. package/dist/transitions/Letterbox.js +0 -1
  285. package/dist/transitions/ditherMask.js +0 -1
  286. package/dist/transitions/transitionTo.js +0 -1
  287. package/dist/transitions/tweenDone.js +0 -1
  288. package/dist/types/ambient/life/Birds.d.ts +50 -0
  289. package/dist/types/ambient/life/Birds.d.ts.map +1 -0
  290. package/dist/types/ambient/life/Butterflies.d.ts +32 -0
  291. package/dist/types/ambient/life/Butterflies.d.ts.map +1 -0
  292. package/dist/types/ambient/life/ChimneySmoke.d.ts +37 -0
  293. package/dist/types/ambient/life/ChimneySmoke.d.ts.map +1 -0
  294. package/dist/types/ambient/life/Drift.d.ts +58 -0
  295. package/dist/types/ambient/life/Drift.d.ts.map +1 -0
  296. package/dist/types/ambient/life/Fireflies.d.ts +43 -0
  297. package/dist/types/ambient/life/Fireflies.d.ts.map +1 -0
  298. package/dist/types/ambient/life/lifeMotion.d.ts +63 -0
  299. package/dist/types/ambient/life/lifeMotion.d.ts.map +1 -0
  300. package/dist/types/assets/AssetLoader.d.ts +83 -8
  301. package/dist/types/assets/AssetLoader.d.ts.map +1 -1
  302. package/dist/types/assets/Prepainter.d.ts +64 -0
  303. package/dist/types/assets/Prepainter.d.ts.map +1 -0
  304. package/dist/types/assets/textureAtlas.d.ts +35 -0
  305. package/dist/types/assets/textureAtlas.d.ts.map +1 -0
  306. package/dist/types/assets/workerPainter.d.ts +21 -0
  307. package/dist/types/assets/workerPainter.d.ts.map +1 -0
  308. package/dist/types/audio/SoundEngine.d.ts +5 -0
  309. package/dist/types/audio/SoundEngine.d.ts.map +1 -1
  310. package/dist/types/core/Camera.d.ts +1 -1
  311. package/dist/types/core/Camera.d.ts.map +1 -1
  312. package/dist/types/core/Clock.d.ts +14 -2
  313. package/dist/types/core/Clock.d.ts.map +1 -1
  314. package/dist/types/core/Pointer.d.ts +18 -0
  315. package/dist/types/core/Pointer.d.ts.map +1 -1
  316. package/dist/types/core/Stage.d.ts.map +1 -1
  317. package/dist/types/core/TextureRegistry.d.ts +39 -0
  318. package/dist/types/core/TextureRegistry.d.ts.map +1 -1
  319. package/dist/types/core/blendLayer.d.ts +23 -0
  320. package/dist/types/core/blendLayer.d.ts.map +1 -0
  321. package/dist/types/core/gameObject.d.ts.map +1 -1
  322. package/dist/types/core/pixelZoom.d.ts +45 -0
  323. package/dist/types/core/pixelZoom.d.ts.map +1 -0
  324. package/dist/types/core/runDue.d.ts +15 -0
  325. package/dist/types/core/runDue.d.ts.map +1 -0
  326. package/dist/types/core/silhouette.d.ts +16 -0
  327. package/dist/types/core/silhouette.d.ts.map +1 -0
  328. package/dist/types/debug/DrawCallCounter.d.ts.map +1 -1
  329. package/dist/types/electron/electronLike.d.ts +56 -0
  330. package/dist/types/electron/electronLike.d.ts.map +1 -0
  331. package/dist/types/electron/index.d.ts +15 -0
  332. package/dist/types/electron/index.d.ts.map +1 -0
  333. package/dist/types/electron/lockdown.d.ts +34 -0
  334. package/dist/types/electron/lockdown.d.ts.map +1 -0
  335. package/dist/types/electron/lockdownRules.d.ts +29 -0
  336. package/dist/types/electron/lockdownRules.d.ts.map +1 -0
  337. package/dist/types/electron/sessionStore.d.ts +41 -0
  338. package/dist/types/electron/sessionStore.d.ts.map +1 -0
  339. package/dist/types/electron/shellId.d.ts +23 -0
  340. package/dist/types/electron/shellId.d.ts.map +1 -0
  341. package/dist/types/electron/webFiles.d.ts +14 -0
  342. package/dist/types/electron/webFiles.d.ts.map +1 -0
  343. package/dist/types/electron/webPatcher.d.ts +81 -0
  344. package/dist/types/electron/webPatcher.d.ts.map +1 -0
  345. package/dist/types/electron/webPointers.d.ts +20 -0
  346. package/dist/types/electron/webPointers.d.ts.map +1 -0
  347. package/dist/types/engine/Engine.d.ts +16 -0
  348. package/dist/types/engine/Engine.d.ts.map +1 -1
  349. package/dist/types/engine/HiddenPause.d.ts +22 -0
  350. package/dist/types/engine/HiddenPause.d.ts.map +1 -0
  351. package/dist/types/fx/Afterimages.d.ts +62 -0
  352. package/dist/types/fx/Afterimages.d.ts.map +1 -0
  353. package/dist/types/index.d.ts +32 -4
  354. package/dist/types/index.d.ts.map +1 -1
  355. package/dist/types/input/Actions.d.ts +7 -1
  356. package/dist/types/input/Actions.d.ts.map +1 -1
  357. package/dist/types/input/haptics.d.ts +42 -0
  358. package/dist/types/input/haptics.d.ts.map +1 -0
  359. package/dist/types/input/rumble.d.ts +41 -0
  360. package/dist/types/input/rumble.d.ts.map +1 -0
  361. package/dist/types/net/ApiClient.d.ts +74 -0
  362. package/dist/types/net/ApiClient.d.ts.map +1 -0
  363. package/dist/types/net/Connection.d.ts +22 -0
  364. package/dist/types/net/Connection.d.ts.map +1 -1
  365. package/dist/types/net/constants.d.ts +13 -4
  366. package/dist/types/net/constants.d.ts.map +1 -1
  367. package/dist/types/net/movement.d.ts.map +1 -1
  368. package/dist/types/net/reconnect.d.ts +14 -0
  369. package/dist/types/net/reconnect.d.ts.map +1 -0
  370. package/dist/types/pixel/Darkness.d.ts +17 -5
  371. package/dist/types/pixel/Darkness.d.ts.map +1 -1
  372. package/dist/types/pixel/PixelMarks.d.ts +68 -0
  373. package/dist/types/pixel/PixelMarks.d.ts.map +1 -0
  374. package/dist/types/pixel/aimPixels.d.ts +23 -0
  375. package/dist/types/pixel/aimPixels.d.ts.map +1 -0
  376. package/dist/types/pixel/index.d.ts +4 -1
  377. package/dist/types/pixel/index.d.ts.map +1 -1
  378. package/dist/types/pixel/lifeArt.d.ts +63 -0
  379. package/dist/types/pixel/lifeArt.d.ts.map +1 -0
  380. package/dist/types/pixel/pixelPaint.d.ts +1 -0
  381. package/dist/types/pixel/pixelPaint.d.ts.map +1 -1
  382. package/dist/types/pixel/pixelParticles.d.ts +21 -0
  383. package/dist/types/pixel/pixelParticles.d.ts.map +1 -0
  384. package/dist/types/platform/appResume.d.ts +25 -0
  385. package/dist/types/platform/appResume.d.ts.map +1 -0
  386. package/dist/types/platform/fullscreen.d.ts +37 -0
  387. package/dist/types/platform/fullscreen.d.ts.map +1 -0
  388. package/dist/types/platform/orientation.d.ts +19 -0
  389. package/dist/types/platform/orientation.d.ts.map +1 -0
  390. package/dist/types/platform/pointerLock.d.ts +26 -0
  391. package/dist/types/platform/pointerLock.d.ts.map +1 -0
  392. package/dist/types/platform/reducedMotion.d.ts +20 -0
  393. package/dist/types/platform/reducedMotion.d.ts.map +1 -0
  394. package/dist/types/platform/timeoutSignal.d.ts +6 -0
  395. package/dist/types/platform/timeoutSignal.d.ts.map +1 -0
  396. package/dist/types/react/ConfirmButton.d.ts +26 -0
  397. package/dist/types/react/ConfirmButton.d.ts.map +1 -0
  398. package/dist/types/react/baseCss.d.ts +1 -1
  399. package/dist/types/react/baseCss.d.ts.map +1 -1
  400. package/dist/types/react/index.d.ts +2 -0
  401. package/dist/types/react/index.d.ts.map +1 -1
  402. package/dist/types/react/labels.d.ts +2 -0
  403. package/dist/types/react/labels.d.ts.map +1 -1
  404. package/dist/types/react/useJsonSelector.d.ts +13 -0
  405. package/dist/types/react/useJsonSelector.d.ts.map +1 -0
  406. package/dist/types/tilemap/TilemapView.d.ts +17 -0
  407. package/dist/types/tilemap/TilemapView.d.ts.map +1 -1
  408. package/dist/types/tilemap/autotile.d.ts +95 -0
  409. package/dist/types/tilemap/autotile.d.ts.map +1 -0
  410. package/dist/types/tilemap/collision.d.ts +8 -0
  411. package/dist/types/tilemap/collision.d.ts.map +1 -1
  412. package/dist/types/tilemap/ldtk.d.ts +97 -0
  413. package/dist/types/tilemap/ldtk.d.ts.map +1 -0
  414. package/dist/types/tilemap/ldtkParse.d.ts +26 -0
  415. package/dist/types/tilemap/ldtkParse.d.ts.map +1 -0
  416. package/dist/types/ui/index.d.ts +4 -0
  417. package/dist/types/ui/index.d.ts.map +1 -1
  418. package/dist/types/ui/rich/RichText.d.ts +48 -0
  419. package/dist/types/ui/rich/RichText.d.ts.map +1 -0
  420. package/dist/types/ui/rich/richFonts.d.ts +70 -0
  421. package/dist/types/ui/rich/richFonts.d.ts.map +1 -0
  422. package/dist/types/ui/rich/richLayout.d.ts +76 -0
  423. package/dist/types/ui/rich/richLayout.d.ts.map +1 -0
  424. package/dist/types/ui/rich/richMarkup.d.ts +48 -0
  425. package/dist/types/ui/rich/richMarkup.d.ts.map +1 -0
  426. package/dist/types/updates/index.d.ts +9 -0
  427. package/dist/types/updates/index.d.ts.map +1 -0
  428. package/dist/types/updates/manifest.d.ts +74 -0
  429. package/dist/types/updates/manifest.d.ts.map +1 -0
  430. package/dist/types/updates/pickUpdate.d.ts +43 -0
  431. package/dist/types/updates/pickUpdate.d.ts.map +1 -0
  432. package/dist/types/updates/webPlan.d.ts +21 -0
  433. package/dist/types/updates/webPlan.d.ts.map +1 -0
  434. package/dist/ui/Bar.js +0 -1
  435. package/dist/ui/Button.js +0 -1
  436. package/dist/ui/Dialog.js +0 -1
  437. package/dist/ui/FocusManager.js +0 -1
  438. package/dist/ui/Label.js +0 -1
  439. package/dist/ui/List.js +0 -1
  440. package/dist/ui/Panel.js +0 -1
  441. package/dist/ui/ScrollView.js +0 -1
  442. package/dist/ui/Slider.js +0 -1
  443. package/dist/ui/Stack.js +0 -1
  444. package/dist/ui/Toggle.js +0 -1
  445. package/dist/ui/UiHost.js +0 -1
  446. package/dist/ui/UiPointerGate.js +0 -1
  447. package/dist/ui/UiRoot.js +0 -1
  448. package/dist/ui/Widget.js +0 -1
  449. package/dist/ui/dom/DomOverlay.js +0 -1
  450. package/dist/ui/dom/DomWorldAnchors.js +0 -1
  451. package/dist/ui/dom/InputShield.js +0 -1
  452. package/dist/ui/dom/createStore.js +0 -1
  453. package/dist/ui/dom/shieldDecision.js +0 -1
  454. package/dist/ui/dom/worldToScreen.js +0 -1
  455. package/dist/ui/layout/anchor.js +0 -1
  456. package/dist/ui/layout/barDrain.js +0 -1
  457. package/dist/ui/layout/fitToViewport.js +0 -1
  458. package/dist/ui/layout/focusNav.js +0 -1
  459. package/dist/ui/layout/geometry.js +0 -1
  460. package/dist/ui/layout/listWidth.js +0 -1
  461. package/dist/ui/layout/placeTooltip.js +0 -1
  462. package/dist/ui/layout/scroll.js +0 -1
  463. package/dist/ui/layout/slider.js +0 -1
  464. package/dist/ui/layout/stack.js +0 -1
  465. package/dist/ui/layout/wrapRow.js +0 -1
  466. package/dist/ui/rich/RichText.js +87 -0
  467. package/dist/ui/rich/richFonts.js +105 -0
  468. package/dist/ui/rich/richLayout.js +132 -0
  469. package/dist/ui/rich/richMarkup.js +67 -0
  470. package/dist/ui.js +75 -65
  471. package/dist/updates/manifest.js +35 -0
  472. package/dist/updates/pickUpdate.js +27 -0
  473. package/dist/updates/webPlan.js +14 -0
  474. package/dist/updates.js +15 -0
  475. package/package.json +31 -6
  476. package/dist/1681-engine.js.map +0 -1
  477. package/dist/ambient/ColorGrade.js.map +0 -1
  478. package/dist/ambient/DayClock.js.map +0 -1
  479. package/dist/ambient/WeatherLayer.js.map +0 -1
  480. package/dist/ambient/grade.js.map +0 -1
  481. package/dist/ambient/weather.js.map +0 -1
  482. package/dist/anim/AnimStateMachine.js.map +0 -1
  483. package/dist/anim/Animator.js.map +0 -1
  484. package/dist/anim/animStateCompile.js.map +0 -1
  485. package/dist/anim/animStateSystem.js.map +0 -1
  486. package/dist/anim/animationSystem.js.map +0 -1
  487. package/dist/anim/asepriteSlices.js.map +0 -1
  488. package/dist/anim/asepriteTags.js.map +0 -1
  489. package/dist/anim/parseAseprite.js.map +0 -1
  490. package/dist/assets/AssetLoader.js.map +0 -1
  491. package/dist/assets/loadAseprite.js.map +0 -1
  492. package/dist/assets/takeCleanerWorker-DTcI_Jqr.js.map +0 -1
  493. package/dist/audio/Footsteps.js.map +0 -1
  494. package/dist/audio/MusicPlayer.js.map +0 -1
  495. package/dist/audio/SoundEngine.js.map +0 -1
  496. package/dist/audio/cleanTake.js.map +0 -1
  497. package/dist/audio/music/ElementVoice.js.map +0 -1
  498. package/dist/audio/music/GraphVoice.js.map +0 -1
  499. package/dist/audio/music/MusicChannel.js.map +0 -1
  500. package/dist/audio/music/musicVoice.js.map +0 -1
  501. package/dist/audio/sampleBank.js.map +0 -1
  502. package/dist/audio/soundTable.js.map +0 -1
  503. package/dist/audio/synth.js.map +0 -1
  504. package/dist/core/BitmapLabel.js.map +0 -1
  505. package/dist/core/Camera.js.map +0 -1
  506. package/dist/core/Clock.js.map +0 -1
  507. package/dist/core/Graphics.js.map +0 -1
  508. package/dist/core/Group.js.map +0 -1
  509. package/dist/core/Image.js.map +0 -1
  510. package/dist/core/ObjectFactory.js.map +0 -1
  511. package/dist/core/Pointer.js.map +0 -1
  512. package/dist/core/Rectangle.js.map +0 -1
  513. package/dist/core/Stage.js.map +0 -1
  514. package/dist/core/Text.js.map +0 -1
  515. package/dist/core/TextureRegistry.js.map +0 -1
  516. package/dist/core/Timeline.js.map +0 -1
  517. package/dist/core/TimelineBuilder.js.map +0 -1
  518. package/dist/core/TimelineChild.js.map +0 -1
  519. package/dist/core/Tweener.js.map +0 -1
  520. package/dist/core/atlas.js.map +0 -1
  521. package/dist/core/atlasPlan.js.map +0 -1
  522. package/dist/core/eases.js.map +0 -1
  523. package/dist/core/gameObject.js.map +0 -1
  524. package/dist/core/pixiPatches.js.map +0 -1
  525. package/dist/core/timelinePlace.js.map +0 -1
  526. package/dist/core/tweenProps.js.map +0 -1
  527. package/dist/debug/DebugOverlay.js.map +0 -1
  528. package/dist/debug/DrawCallCounter.js.map +0 -1
  529. package/dist/debug/ErrorLog.js.map +0 -1
  530. package/dist/debug/FrameStats.js.map +0 -1
  531. package/dist/debug/inspectWorld.js.map +0 -1
  532. package/dist/diagnostics/ErrorDeduper.js.map +0 -1
  533. package/dist/diagnostics/FrameSampler.js.map +0 -1
  534. package/dist/diagnostics/bootWatch.js.map +0 -1
  535. package/dist/diagnostics/captureErrors.js.map +0 -1
  536. package/dist/diagnostics/contextLoss.js.map +0 -1
  537. package/dist/diagnostics/frameStats.js.map +0 -1
  538. package/dist/diagnostics/gpuInfo.js.map +0 -1
  539. package/dist/diagnostics/renderGuard.js.map +0 -1
  540. package/dist/ecs/SparseSet.js.map +0 -1
  541. package/dist/ecs/World.js.map +0 -1
  542. package/dist/ecs/fields.js.map +0 -1
  543. package/dist/engine/Engine.js.map +0 -1
  544. package/dist/engine/FixedLoop.js.map +0 -1
  545. package/dist/engine/Scene.js.map +0 -1
  546. package/dist/engine/SceneManager.js.map +0 -1
  547. package/dist/events/EventBus.js.map +0 -1
  548. package/dist/fx/FloatingText.js.map +0 -1
  549. package/dist/fx/hitStop.js.map +0 -1
  550. package/dist/fx/viewCull.js.map +0 -1
  551. package/dist/i18n/Translator.js.map +0 -1
  552. package/dist/i18n/extractStrings.js.map +0 -1
  553. package/dist/i18n/formatMessage.js.map +0 -1
  554. package/dist/input/Actions.js.map +0 -1
  555. package/dist/input/AimGesture.js.map +0 -1
  556. package/dist/input/Keyboard.js.map +0 -1
  557. package/dist/input/Keymap.js.map +0 -1
  558. package/dist/input/TargetLock.js.map +0 -1
  559. package/dist/input/aimAxis.js.map +0 -1
  560. package/dist/input/keyChord.js.map +0 -1
  561. package/dist/input/longPress.js.map +0 -1
  562. package/dist/input/stickAxis.js.map +0 -1
  563. package/dist/input/touchDetect.js.map +0 -1
  564. package/dist/light/LightLayer.js.map +0 -1
  565. package/dist/nav/MinHeap.js.map +0 -1
  566. package/dist/nav/findPath.js.map +0 -1
  567. package/dist/nav/navGrid.js.map +0 -1
  568. package/dist/nav/nearestOpen.js.map +0 -1
  569. package/dist/nav/straightenPath.js.map +0 -1
  570. package/dist/net/Connection.js.map +0 -1
  571. package/dist/net/InterpolationBuffer.js.map +0 -1
  572. package/dist/net/PredictedMover.js.map +0 -1
  573. package/dist/net/Room.js.map +0 -1
  574. package/dist/net/RoomHost.js.map +0 -1
  575. package/dist/net/cadence.js.map +0 -1
  576. package/dist/net/constants.js.map +0 -1
  577. package/dist/net/lobby/LobbyClient.js.map +0 -1
  578. package/dist/net/lobby/LobbyHost.js.map +0 -1
  579. package/dist/net/lobby/LobbyRooms.js.map +0 -1
  580. package/dist/net/lobby/Matchmaker.js.map +0 -1
  581. package/dist/net/movement.js.map +0 -1
  582. package/dist/net/protocol.js.map +0 -1
  583. package/dist/net/serverClock.js.map +0 -1
  584. package/dist/net/snapshotCodec.js.map +0 -1
  585. package/dist/parallax/Parallax.js.map +0 -1
  586. package/dist/parallax/ParallaxLayer.js.map +0 -1
  587. package/dist/parallax/parallaxMath.js.map +0 -1
  588. package/dist/particles/Emitter.js.map +0 -1
  589. package/dist/particles/ParticleBudget.js.map +0 -1
  590. package/dist/particles/ParticleSim.js.map +0 -1
  591. package/dist/particles/particleCurves.js.map +0 -1
  592. package/dist/particles/particleSampling.js.map +0 -1
  593. package/dist/physics/Body.js.map +0 -1
  594. package/dist/physics/BroadPhase.js.map +0 -1
  595. package/dist/physics/Contact.js.map +0 -1
  596. package/dist/physics/ContactSolver.js.map +0 -1
  597. package/dist/physics/PhysicsWorld.js.map +0 -1
  598. package/dist/physics/SpatialHash.js.map +0 -1
  599. package/dist/physics/collide.js.map +0 -1
  600. package/dist/physics/collidePolygon.js.map +0 -1
  601. package/dist/physics/contactReport.js.map +0 -1
  602. package/dist/physics/drawColliders.js.map +0 -1
  603. package/dist/physics/physicsSystem.js.map +0 -1
  604. package/dist/physics/polygon.js.map +0 -1
  605. package/dist/physics/raycast.js.map +0 -1
  606. package/dist/physics/syncToBody.js.map +0 -1
  607. package/dist/physics/tileBodies.js.map +0 -1
  608. package/dist/physics/types.js.map +0 -1
  609. package/dist/pixel/Darkness.js.map +0 -1
  610. package/dist/pixel/DitherVignette.js.map +0 -1
  611. package/dist/pixel/Evaporation.js.map +0 -1
  612. package/dist/pixel/NightShade.js.map +0 -1
  613. package/dist/pixel/PixelLayer.js.map +0 -1
  614. package/dist/pixel/SwayProp.js.map +0 -1
  615. package/dist/pixel/lights.js.map +0 -1
  616. package/dist/pixel/nineSlice.js.map +0 -1
  617. package/dist/pixel/paintLayer.js.map +0 -1
  618. package/dist/pixel/palette.js.map +0 -1
  619. package/dist/pixel/pixel.js.map +0 -1
  620. package/dist/pixel/pixelPaint.js.map +0 -1
  621. package/dist/pixel/pixelTone.js.map +0 -1
  622. package/dist/pixel/propKit.js.map +0 -1
  623. package/dist/pixel/ramp.js.map +0 -1
  624. package/dist/pixel/selout.js.map +0 -1
  625. package/dist/pixel/spritePixels.js.map +0 -1
  626. package/dist/pixel/swayRig.js.map +0 -1
  627. package/dist/pixel/vignetteMask.js.map +0 -1
  628. package/dist/pixel/weatherArt.js.map +0 -1
  629. package/dist/pixel.js.map +0 -1
  630. package/dist/platform/touch.js.map +0 -1
  631. package/dist/postfx/BloomFilter.js.map +0 -1
  632. package/dist/postfx/ChromaticAberrationFilter.js.map +0 -1
  633. package/dist/postfx/ColorAdjustFilter.js.map +0 -1
  634. package/dist/postfx/CrtFilter.js.map +0 -1
  635. package/dist/postfx/PixelateFilter.js.map +0 -1
  636. package/dist/postfx/PostFx.js.map +0 -1
  637. package/dist/postfx/ShockwaveFilter.js.map +0 -1
  638. package/dist/postfx/VignetteFilter.js.map +0 -1
  639. package/dist/postfx/fxAnimator.js.map +0 -1
  640. package/dist/postfx/fxShader.js.map +0 -1
  641. package/dist/postfx.js.map +0 -1
  642. package/dist/react/ChoiceDialog.js.map +0 -1
  643. package/dist/react/ConfirmDialog.js.map +0 -1
  644. package/dist/react/Glyph.js.map +0 -1
  645. package/dist/react/Modal.js.map +0 -1
  646. package/dist/react/Panel.js.map +0 -1
  647. package/dist/react/PixelImage.js.map +0 -1
  648. package/dist/react/Select.js.map +0 -1
  649. package/dist/react/Slider.js.map +0 -1
  650. package/dist/react/SplitPane.js.map +0 -1
  651. package/dist/react/TabStrip.js.map +0 -1
  652. package/dist/react/TitleTips.js.map +0 -1
  653. package/dist/react/Tooltip.js.map +0 -1
  654. package/dist/react/UiProvider.js.map +0 -1
  655. package/dist/react/baseCss.js.map +0 -1
  656. package/dist/react/choiceStore.js.map +0 -1
  657. package/dist/react/classNames.js.map +0 -1
  658. package/dist/react/confirmStore.js.map +0 -1
  659. package/dist/react/labels.js.map +0 -1
  660. package/dist/react/placement.js.map +0 -1
  661. package/dist/react/useFillSheet.js.map +0 -1
  662. package/dist/react/useFitToViewport.js.map +0 -1
  663. package/dist/react/usePicked.js.map +0 -1
  664. package/dist/react/useStore.js.map +0 -1
  665. package/dist/react/useViewport.js.map +0 -1
  666. package/dist/react.js.map +0 -1
  667. package/dist/rig/PosePlayer.js.map +0 -1
  668. package/dist/rig/RigView.js.map +0 -1
  669. package/dist/rig/Skeleton.js.map +0 -1
  670. package/dist/rig/humanoid.js.map +0 -1
  671. package/dist/rig/humanoid.json.js.map +0 -1
  672. package/dist/rig/humanoidPoses.js.map +0 -1
  673. package/dist/rig/poseMath.js.map +0 -1
  674. package/dist/rig/poses.json.js.map +0 -1
  675. package/dist/save/Autosaver.js.map +0 -1
  676. package/dist/save/MemoryBackend.js.map +0 -1
  677. package/dist/save/SaveStore.js.map +0 -1
  678. package/dist/save/WebStorageBackend.js.map +0 -1
  679. package/dist/save/checksum.js.map +0 -1
  680. package/dist/save/migrateSave.js.map +0 -1
  681. package/dist/settings.js.map +0 -1
  682. package/dist/tilemap/TilemapView.js.map +0 -1
  683. package/dist/tilemap/collision.js.map +0 -1
  684. package/dist/tilemap/tiled.js.map +0 -1
  685. package/dist/transitions/CrossfadeTransition.js.map +0 -1
  686. package/dist/transitions/DitherWipeTransition.js.map +0 -1
  687. package/dist/transitions/FadeTransition.js.map +0 -1
  688. package/dist/transitions/Letterbox.js.map +0 -1
  689. package/dist/transitions/ditherMask.js.map +0 -1
  690. package/dist/transitions/transitionTo.js.map +0 -1
  691. package/dist/transitions/tweenDone.js.map +0 -1
  692. package/dist/ui/Bar.js.map +0 -1
  693. package/dist/ui/Button.js.map +0 -1
  694. package/dist/ui/Dialog.js.map +0 -1
  695. package/dist/ui/FocusManager.js.map +0 -1
  696. package/dist/ui/Label.js.map +0 -1
  697. package/dist/ui/List.js.map +0 -1
  698. package/dist/ui/Panel.js.map +0 -1
  699. package/dist/ui/ScrollView.js.map +0 -1
  700. package/dist/ui/Slider.js.map +0 -1
  701. package/dist/ui/Stack.js.map +0 -1
  702. package/dist/ui/Toggle.js.map +0 -1
  703. package/dist/ui/UiHost.js.map +0 -1
  704. package/dist/ui/UiPointerGate.js.map +0 -1
  705. package/dist/ui/UiRoot.js.map +0 -1
  706. package/dist/ui/Widget.js.map +0 -1
  707. package/dist/ui/dom/DomOverlay.js.map +0 -1
  708. package/dist/ui/dom/DomWorldAnchors.js.map +0 -1
  709. package/dist/ui/dom/InputShield.js.map +0 -1
  710. package/dist/ui/dom/createStore.js.map +0 -1
  711. package/dist/ui/dom/shieldDecision.js.map +0 -1
  712. package/dist/ui/dom/worldToScreen.js.map +0 -1
  713. package/dist/ui/layout/anchor.js.map +0 -1
  714. package/dist/ui/layout/barDrain.js.map +0 -1
  715. package/dist/ui/layout/fitToViewport.js.map +0 -1
  716. package/dist/ui/layout/focusNav.js.map +0 -1
  717. package/dist/ui/layout/geometry.js.map +0 -1
  718. package/dist/ui/layout/listWidth.js.map +0 -1
  719. package/dist/ui/layout/placeTooltip.js.map +0 -1
  720. package/dist/ui/layout/scroll.js.map +0 -1
  721. package/dist/ui/layout/slider.js.map +0 -1
  722. package/dist/ui/layout/stack.js.map +0 -1
  723. package/dist/ui/layout/wrapRow.js.map +0 -1
  724. package/dist/ui.js.map +0 -1
@@ -1,40 +1,62 @@
1
- import { parseTiled as h } from "../tilemap/tiled.js";
2
- function n(r, t) {
1
+ import { sound as f } from "../audio/SoundEngine.js";
2
+ import { ldtkExternalLevels as w, parseLdtk as m } from "../tilemap/ldtkParse.js";
3
+ import { parseTiled as p } from "../tilemap/tiled.js";
4
+ import { collectAtlasPages as g, duplicateFrames as x, parseAtlas as v } from "./textureAtlas.js";
5
+ function l(r) {
6
+ return r instanceof Error ? r.message : String(r);
7
+ }
8
+ function h(r, t) {
3
9
  if (/^[a-z][a-z0-9+.-]*:/i.test(r) || r.startsWith("/")) return r;
4
- const a = (t.slice(0, t.lastIndexOf("/") + 1) + r).split("/"), s = [];
5
- for (const o of a)
6
- o === ".." && s.length && s[s.length - 1] !== ".." && s[s.length - 1] !== "" ? s.pop() : o !== "." && s.push(o);
7
- return s.join("/");
10
+ const s = (t.slice(0, t.lastIndexOf("/") + 1) + r).split("/"), a = [];
11
+ for (const o of s)
12
+ o === ".." && a.length && a[a.length - 1] !== ".." && a[a.length - 1] !== "" ? a.pop() : o !== "." && a.push(o);
13
+ return a.join("/");
14
+ }
15
+ function A(r, t, e) {
16
+ const s = r;
17
+ return [...s.levels ?? [], ...(s.worlds ?? []).flatMap((o) => o.levels ?? [])].some((o) => o.externalRelPath === t && o.identifier !== void 0 && e.has(o.identifier));
8
18
  }
9
- async function c(r) {
19
+ async function $(r) {
10
20
  const t = await createImageBitmap(r), e = document.createElement("canvas");
11
21
  e.width = t.width, e.height = t.height;
12
- const a = e.getContext("2d");
13
- if (!a) throw new Error("AssetLoader: no 2D context (out of canvas memory?)");
14
- return a.drawImage(t, 0, 0), t.close(), e;
22
+ const s = e.getContext("2d");
23
+ if (!s) throw new Error("AssetLoader: no 2D context (out of canvas memory?)");
24
+ return s.drawImage(t, 0, 0), t.close(), e;
15
25
  }
16
- class u {
26
+ async function b(r, t, e) {
27
+ if (typeof FontFace > "u" || typeof document > "u" || !document.fonts)
28
+ throw new Error(`AssetLoader: this browser cannot load the font "${r}" (no FontFace)`);
29
+ const s = new FontFace(r, t, e);
30
+ await s.load(), document.fonts.add(s);
31
+ }
32
+ class B {
17
33
  constructor(t, e = {}) {
18
- this.textures = t, this.options = e, this.fetcher = e.fetch ?? ((a) => fetch(a)), this.toCanvas = e.toCanvas ?? c;
34
+ this.textures = t, this.options = e, this.fetcher = e.fetch ?? ((s) => fetch(s)), this.toCanvas = e.toCanvas ?? $;
19
35
  }
20
36
  textures;
21
37
  options;
22
38
  queue = [];
23
39
  data = /* @__PURE__ */ new Map();
24
40
  maps = /* @__PURE__ */ new Map();
41
+ ldtks = /* @__PURE__ */ new Map();
42
+ atlases = /* @__PURE__ */ new Map();
43
+ /** Decoded audio by key; a key with bytes only waits for a context (`decodeAudio`). */
44
+ audioBuffers = /* @__PURE__ */ new Map();
45
+ audioBytes = /* @__PURE__ */ new Map();
46
+ decoding = /* @__PURE__ */ new Map();
25
47
  fetcher;
26
48
  toCanvas;
27
49
  total = 0;
28
50
  done = 0;
29
51
  image(t, e) {
30
52
  return this.add(t, async () => {
31
- this.textures.addCanvas(t, await this.toCanvas(await this.blob(e)));
53
+ this.textures.addCanvas(t, await this.canvas(e));
32
54
  });
33
55
  }
34
56
  /** An image cut into equal frames named 0, 1, 2…, left to right, then row by row. */
35
- spritesheet(t, e, a) {
57
+ spritesheet(t, e, s) {
36
58
  return this.add(t, async () => {
37
- this.textures.addSpriteSheet(t, await this.toCanvas(await this.blob(e)), a);
59
+ this.textures.addSpriteSheet(t, await this.canvas(e), s);
38
60
  });
39
61
  }
40
62
  json(t, e) {
@@ -48,21 +70,120 @@ class u {
48
70
  });
49
71
  }
50
72
  /** A Tiled JSON map, then every tileset image it names (resolved beside the map file). */
51
- tilemap(t, e, a = {}) {
73
+ tilemap(t, e, s = {}) {
74
+ return this.add(t, async () => {
75
+ const a = p(await (await this.request(e)).json());
76
+ this.maps.set(t, a);
77
+ const o = s.textureKey ?? ((i) => i.name);
78
+ for (const i of a.tilesets) this.image(o(i), h(i.image, e));
79
+ });
80
+ }
81
+ /**
82
+ * An LDtk project: the `.ldtk` file, the `.ldtkl` file of each level it saves apart (resolved beside the project),
83
+ * then every tileset image (resolved beside the project, as LDtk writes `relPath`). Counts as one asset, plus one
84
+ * per tileset image. Read it back with `ldtkProject(key)`; each level's `map` goes to `TilemapView` as it is.
85
+ */
86
+ ldtk(t, e, s = {}) {
87
+ return this.add(t, async () => {
88
+ const a = await (await this.request(e)).json(), o = s.levels ? new Set(s.levels) : null, i = w(a).filter((d) => !o || A(a, d, o)), c = await Promise.all(i.map(async (d) => [d, await (await this.request(h(d, e))).json()])), n = m(a, { levels: Object.fromEntries(c) });
89
+ this.ldtks.set(t, n);
90
+ const u = s.textureKey ?? ((d) => d.name);
91
+ for (const d of n.tilesets) this.image(u(d), h(d.image, e));
92
+ });
93
+ }
94
+ /** A loaded LDtk project. */
95
+ ldtkProject(t) {
96
+ const e = this.ldtks.get(t);
97
+ if (!e) throw new Error(`AssetLoader: no LDtk project loaded as "${t}"`);
98
+ return e;
99
+ }
100
+ /**
101
+ * A TexturePacker (or Pixi) JSON atlas, hash or array format: its page image, and for a multipack atlas every page
102
+ * named in `meta.related_multi_packs` (each resolved beside the file naming it). The first page is the texture
103
+ * `key`, further pages `key~1`, `key~2`…, and every frame of every page is found as `textures.get(key, frameName)`.
104
+ * Counts as one asset in the progress.
105
+ */
106
+ atlas(t, e) {
107
+ return this.add(t, async () => {
108
+ const s = this.textures.addAtlas?.bind(this.textures);
109
+ if (!s) throw new Error(`AssetLoader: the texture sink cannot take atlases (no addAtlas) for "${t}"`);
110
+ const a = await g(
111
+ e,
112
+ async (n) => v(await (await this.request(n)).json(), n),
113
+ h
114
+ ), o = await Promise.all(a.map((n) => this.canvas(h(n.page.image, n.url)))), i = x(a.map((n) => n.page));
115
+ i.length && console.warn(`[assets] atlas "${t}" names ${i.length} frame(s) on more than one page: ${i.slice(0, 5).join(", ")}`), s(t, a.map((n, u) => ({ canvas: o[u], frames: n.page.frames })));
116
+ const c = {};
117
+ for (const n of a) Object.assign(c, n.page.animations);
118
+ this.atlases.set(t, { frames: [...new Set(a.flatMap((n) => n.page.frames.map((u) => u.name)))], animations: c, pages: a.length });
119
+ });
120
+ }
121
+ /**
122
+ * A web font (woff2, woff, ttf) under `family`, added to `document.fonts` once loaded so canvas text and the DOM can
123
+ * use it at once — load fonts before the first `Text` is drawn, or it measures with the fallback.
124
+ */
125
+ font(t, e, s) {
126
+ const a = this.options.addFont ?? b;
52
127
  return this.add(t, async () => {
53
- const s = h(await (await this.request(e)).json());
54
- this.maps.set(t, s);
55
- const o = a.textureKey ?? ((i) => i.name);
56
- for (const i of s.tilesets) this.image(o(i), n(i.image, e));
128
+ const o = await this.bytes(e);
129
+ try {
130
+ await a(t, o, s);
131
+ } catch (i) {
132
+ throw new Error(`AssetLoader: could not load font "${t}" from ${this.full(e)}: ${l(i)}`);
133
+ }
57
134
  });
58
135
  }
136
+ /**
137
+ * A sound file decoded into an `AudioBuffer` through the engine's audio context (`getAudio`). Before any context
138
+ * exists (browsers open one only after a gesture) the bytes are kept and decoded by `decodeAudio`, so a loading
139
+ * screen never has to wait for the player to click.
140
+ */
141
+ audio(t, e) {
142
+ return this.add(t, async () => {
143
+ const s = await this.bytes(e);
144
+ this.audioBuffers.delete(t), this.decoding.delete(t);
145
+ const a = (this.options.audioContext ?? (() => f.audioContext))();
146
+ a ? this.audioBuffers.set(t, await this.decode(a, s, e)) : this.audioBytes.set(t, s);
147
+ });
148
+ }
149
+ /** A loaded sound, decoded; null while it waits for an audio context (`decodeAudio`). */
150
+ getAudio(t) {
151
+ const e = this.audioBuffers.get(t);
152
+ if (e) return e;
153
+ if (this.audioBytes.has(t)) return null;
154
+ throw new Error(`AssetLoader: no audio loaded as "${t}"`);
155
+ }
156
+ /** A loaded sound, decoding its kept bytes through `ctx` (default: the loader's context) the first time. */
157
+ decodeAudio(t, e) {
158
+ const s = this.audioBuffers.get(t);
159
+ if (s) return Promise.resolve(s);
160
+ const a = this.decoding.get(t);
161
+ if (a) return a;
162
+ const o = this.audioBytes.get(t);
163
+ if (!o) return Promise.reject(new Error(`AssetLoader: no audio loaded as "${t}"`));
164
+ const i = e ?? (this.options.audioContext ?? (() => f.audioContext))();
165
+ if (!i) return Promise.reject(new Error(`AssetLoader: no audio context to decode "${t}" yet`));
166
+ const c = this.decode(i, o, t).then(
167
+ (n) => (this.audioBuffers.set(t, n), this.audioBytes.delete(t), this.decoding.delete(t), n),
168
+ (n) => {
169
+ throw this.decoding.delete(t), n;
170
+ }
171
+ );
172
+ return this.decoding.set(t, c), c;
173
+ }
174
+ /** What a loaded atlas holds: its frame names and animations. */
175
+ getAtlas(t) {
176
+ const e = this.atlases.get(t);
177
+ if (!e) throw new Error(`AssetLoader: no atlas loaded as "${t}"`);
178
+ return e;
179
+ }
59
180
  /** Runs everything queued; `onProgress` after each asset. Safe to call again after queueing more. */
60
181
  async load(t) {
61
- const e = Math.max(1, this.options.concurrency ?? 6), a = async () => {
62
- for (let s = this.queue.shift(); s; s = this.queue.shift())
63
- await s.run(), this.done++, t?.({ done: this.done, total: this.total, key: s.key });
182
+ const e = Math.max(1, this.options.concurrency ?? 6), s = async () => {
183
+ for (let a = this.queue.shift(); a; a = this.queue.shift())
184
+ await a.run(), this.done++, t?.({ done: this.done, total: this.total, key: a.key });
64
185
  };
65
- for (; this.queue.length; ) await Promise.all(Array.from({ length: e }, a));
186
+ for (; this.queue.length; ) await Promise.all(Array.from({ length: e }, s));
66
187
  }
67
188
  /** A loaded JSON value. */
68
189
  getJson(t) {
@@ -82,23 +203,45 @@ class u {
82
203
  add(t, e) {
83
204
  return this.queue.push({ key: t, run: e }), this.total++, this;
84
205
  }
206
+ full(t) {
207
+ return h(t, this.options.baseUrl ?? "");
208
+ }
85
209
  async request(t) {
86
- const e = n(t, this.options.baseUrl ?? "");
87
- let a;
210
+ const e = this.full(t);
211
+ let s;
88
212
  try {
89
- a = await this.fetcher(e);
90
- } catch (s) {
91
- throw new Error(`AssetLoader: could not fetch ${e}: ${s instanceof Error ? s.message : String(s)}`);
213
+ s = await this.fetcher(e);
214
+ } catch (a) {
215
+ throw new Error(`AssetLoader: could not fetch ${e}: ${l(a)}`);
92
216
  }
93
- if (!a.ok) throw new Error(`AssetLoader: ${e} answered ${a.status}`);
94
- return a;
217
+ if (!s.ok) throw new Error(`AssetLoader: ${e} answered ${s.status}`);
218
+ return s;
95
219
  }
96
220
  async blob(t) {
97
221
  return (await this.request(t)).blob();
98
222
  }
223
+ /** An image file decoded into a canvas; a file that is not an image fails naming its URL. */
224
+ async canvas(t) {
225
+ const e = await this.blob(t);
226
+ try {
227
+ return await this.toCanvas(e);
228
+ } catch (s) {
229
+ throw new Error(`AssetLoader: could not decode image ${this.full(t)}: ${l(s)}`);
230
+ }
231
+ }
232
+ async bytes(t) {
233
+ const e = await this.request(t);
234
+ return typeof e.arrayBuffer == "function" ? e.arrayBuffer() : (await e.blob()).arrayBuffer();
235
+ }
236
+ async decode(t, e, s) {
237
+ try {
238
+ return await t.decodeAudioData(e.slice(0));
239
+ } catch (a) {
240
+ throw new Error(`AssetLoader: could not decode audio ${s}: ${l(a)}`);
241
+ }
242
+ }
99
243
  }
100
244
  export {
101
- u as AssetLoader,
102
- n as resolveUrl
245
+ B as AssetLoader,
246
+ h as resolveUrl
103
247
  };
104
- //# sourceMappingURL=AssetLoader.js.map
@@ -0,0 +1,61 @@
1
+ function d({ w: o, h: t, pixels: e }) {
2
+ if (typeof document > "u") return null;
3
+ const s = document.createElement("canvas");
4
+ s.width = o, s.height = t;
5
+ const n = s.getContext("2d");
6
+ return n ? (n.putImageData(new ImageData(new Uint8ClampedArray(e), o, t), 0, 0), s) : null;
7
+ }
8
+ class h {
9
+ constructor(t) {
10
+ this.options = t, this.key = t.key ?? ((e) => e);
11
+ }
12
+ options;
13
+ pending = /* @__PURE__ */ new Set();
14
+ /** Ids whose painting is held as a texture: the current one and its neighbours. */
15
+ held = /* @__PURE__ */ new Set();
16
+ key;
17
+ destroyed = !1;
18
+ /**
19
+ * Stands on `current`: its texture (painted by the caller on arrival, or ahead) and its neighbours' are kept, every
20
+ * other one this prepainter held is freed, and the neighbours not yet painted are started.
21
+ */
22
+ enter(t, e) {
23
+ const s = this.options.id, n = s(t), r = /* @__PURE__ */ new Set([n, ...e.map(s)]);
24
+ for (const i of this.held)
25
+ r.has(i) || (this.options.textures.remove(this.key(i)), this.held.delete(i));
26
+ this.held.add(n);
27
+ for (const i of e) this.prepare(i);
28
+ }
29
+ /** Whether `id` is being painted right now (so a caller may wait for it a moment rather than paint it again). */
30
+ painting(t) {
31
+ return this.pending.has(t);
32
+ }
33
+ /** Ids held as textures now. */
34
+ get holding() {
35
+ return this.held;
36
+ }
37
+ /** Starts painting `item` unless it is painted or under way. */
38
+ prepare(t) {
39
+ const e = this.options.id(t), s = this.options.textures.exists(this.key(e));
40
+ s && this.held.add(e);
41
+ const n = this.options.painter;
42
+ s || this.pending.has(e) || !n || this.destroyed || (this.pending.add(e), n.paint(t, e).then(
43
+ (r) => this.receive(e, r),
44
+ () => this.pending.delete(e)
45
+ ));
46
+ }
47
+ /** Stops painting; textures already made are left to the registry. */
48
+ destroy() {
49
+ this.destroyed = !0, this.options.painter?.dispose?.(), this.pending.clear();
50
+ }
51
+ receive(t, e) {
52
+ if (this.pending.delete(t), this.destroyed) return;
53
+ const s = this.key(t);
54
+ if (this.options.textures.exists(s)) return;
55
+ const n = (this.options.canvas ?? d)(e);
56
+ n && (this.options.textures.addCanvas(s, n), this.held.add(t), this.options.onPainted?.(t));
57
+ }
58
+ }
59
+ export {
60
+ h as Prepainter
61
+ };
@@ -47,4 +47,3 @@ export {
47
47
  p as addAsepriteTextures,
48
48
  A as loadAseprite
49
49
  };
50
- //# sourceMappingURL=loadAseprite.js.map
@@ -28,4 +28,3 @@ self.onmessage = (l) => {
28
28
  const { id: h, channels: a, sampleRate: f } = l.data, e = m(a, f);
29
29
  self.postMessage({ id: h, data: e }, e ? { transfer: [e.buffer] } : void 0);
30
30
  };
31
- //# sourceMappingURL=takeCleanerWorker-DTcI_Jqr.js.map
@@ -0,0 +1,58 @@
1
+ function m(n) {
2
+ const e = n;
3
+ return typeof e == "object" && e !== null && [e.x, e.y, e.w, e.h].every((t) => typeof t == "number" && Number.isFinite(t));
4
+ }
5
+ function u(n, e, t) {
6
+ if (!m(e.frame)) throw new Error(`${t}: frame "${n}" has no frame rect`);
7
+ const o = e.frame, i = e.rotated === !0, a = {
8
+ name: n,
9
+ x: Math.floor(o.x),
10
+ y: Math.floor(o.y),
11
+ w: Math.floor(i ? o.h : o.w),
12
+ h: Math.floor(i ? o.w : o.h),
13
+ rotated: i,
14
+ sourceW: Math.floor(e.trimmed && e.sourceSize ? e.sourceSize.w : o.w),
15
+ sourceH: Math.floor(e.trimmed && e.sourceSize ? e.sourceSize.h : o.h)
16
+ };
17
+ if (e.trimmed !== !1 && m(e.spriteSourceSize) && e.sourceSize) {
18
+ const f = e.spriteSourceSize;
19
+ f.x === 0 && f.y === 0 && o.w === e.sourceSize.w && o.h === e.sourceSize.h || (a.trim = { x: Math.floor(f.x), y: Math.floor(f.y), w: Math.floor(o.w), h: Math.floor(o.h) }, a.sourceW = Math.floor(e.sourceSize.w), a.sourceH = Math.floor(e.sourceSize.h));
20
+ }
21
+ const r = e.anchor ?? e.pivot;
22
+ return r && typeof r.x == "number" && typeof r.y == "number" && (a.anchor = { x: r.x, y: r.y }), a;
23
+ }
24
+ function h(n, e = "atlas") {
25
+ const t = n;
26
+ if (typeof t != "object" || t === null || typeof t.frames != "object" || t.frames === null)
27
+ throw new Error(`${e}: not a TexturePacker JSON atlas (no "frames")`);
28
+ const o = t.meta?.image;
29
+ if (typeof o != "string" || o === "") throw new Error(`${e}: no "meta.image"`);
30
+ const i = Array.isArray(t.frames) ? t.frames.map((s, c) => u(typeof s?.filename == "string" ? s.filename : String(c), s ?? {}, e)) : Object.entries(t.frames).map(([s, c]) => u(s, c ?? {}, e)), a = Array.isArray(t.meta?.related_multi_packs) ? t.meta.related_multi_packs.filter((s) => typeof s == "string" && s !== "") : [], r = {};
31
+ if (typeof t.animations == "object" && t.animations !== null)
32
+ for (const [s, c] of Object.entries(t.animations))
33
+ Array.isArray(c) && (r[s] = c.filter((l) => typeof l == "string"));
34
+ const f = Number(t.meta?.scale);
35
+ return { image: o, frames: i, animations: r, related: a, scale: Number.isFinite(f) && f > 0 ? f : 1 };
36
+ }
37
+ async function y(n, e, t) {
38
+ const o = /* @__PURE__ */ new Set([n]), i = [], a = [n];
39
+ for (let r = a.shift(); r !== void 0; r = a.shift()) {
40
+ const f = await e(r);
41
+ i.push({ url: r, page: f });
42
+ for (const s of f.related) {
43
+ const c = t(s, r);
44
+ o.has(c) || (o.add(c), a.push(c));
45
+ }
46
+ }
47
+ return i;
48
+ }
49
+ function p(n) {
50
+ const e = /* @__PURE__ */ new Set(), t = /* @__PURE__ */ new Set();
51
+ for (const o of n) for (const i of o.frames) (e.has(i.name) ? t : e).add(i.name);
52
+ return [...t];
53
+ }
54
+ export {
55
+ y as collectAtlasPages,
56
+ p as duplicateFrames,
57
+ h as parseAtlas
58
+ };
@@ -0,0 +1,39 @@
1
+ function w(i) {
2
+ let n;
3
+ const o = /* @__PURE__ */ new Map(), c = (r) => {
4
+ n?.terminate(), n = null;
5
+ for (const t of o.values()) for (const e of t) e.reject(new Error(r));
6
+ o.clear();
7
+ }, f = () => {
8
+ if (n !== void 0) return n;
9
+ try {
10
+ const r = i.create();
11
+ r.onmessage = (t) => {
12
+ const e = t.data, s = o.get(e.id);
13
+ if (s) {
14
+ o.delete(e.id);
15
+ for (const a of s)
16
+ "error" in e ? a.reject(new Error(e.error)) : a.resolve(e);
17
+ }
18
+ }, r.onerror = () => c("the painter worker failed"), n = r;
19
+ } catch {
20
+ n = null;
21
+ }
22
+ return n;
23
+ };
24
+ return {
25
+ paint(r, t) {
26
+ const e = f();
27
+ return e ? new Promise((s, a) => {
28
+ const l = o.get(t);
29
+ l ? l.push({ resolve: s, reject: a }) : (o.set(t, [{ resolve: s, reject: a }]), e.postMessage(i.message ? i.message(r, t) : { id: t, item: r }));
30
+ }) : Promise.reject(new Error("no painter worker"));
31
+ },
32
+ dispose() {
33
+ c("disposed");
34
+ }
35
+ };
36
+ }
37
+ export {
38
+ w as workerPainter
39
+ };
@@ -23,4 +23,3 @@ class u {
23
23
  export {
24
24
  u as Footsteps
25
25
  };
26
- //# sourceMappingURL=Footsteps.js.map
@@ -75,4 +75,3 @@ export {
75
75
  a as MusicPlayer,
76
76
  w as music
77
77
  };
78
- //# sourceMappingURL=MusicPlayer.js.map
@@ -2,8 +2,8 @@ import { engineSettings as m } from "../settings.js";
2
2
  import { SampleBank as E, hasTakes as y } from "./sampleBank.js";
3
3
  import { SOUNDS as u } from "./soundTable.js";
4
4
  import { renderRecipe as R, SYNTH_RATE as k } from "./synth.js";
5
- const p = 480, _ = 10, q = 6, B = 60, F = 0.45, O = 0.05, w = 80, g = [18e3, 1800], T = { freq: 3500, gainDb: -7 }, V = 11e3;
6
- class C {
5
+ const p = 480, _ = 10, q = 6, B = 60, F = 0.45, C = 0.05, w = 80, g = [18e3, 1800], T = { freq: 3500, gainDb: -7 }, O = 11e3;
6
+ class V {
7
7
  ctx = null;
8
8
  master = null;
9
9
  buffers = /* @__PURE__ */ new Map();
@@ -32,6 +32,13 @@ class C {
32
32
  this.ctx && this.master && this.master.gain.setTargetAtTime(this.level(s.sfxVolume), this.ctx.currentTime, 0.02);
33
33
  });
34
34
  }
35
+ /**
36
+ * The effects' audio context once something opened it (the first gesture does), else null: never created here, so
37
+ * asking does not open a context the browser would hold suspended. `AssetLoader.audio` decodes through it.
38
+ */
39
+ get audioContext() {
40
+ return this.ctx;
41
+ }
35
42
  play(t, n = {}) {
36
43
  if (!t || !u.recipes[t] && !y(t) || m.getState().sfxVolume <= 0) return;
37
44
  const e = this.ctx;
@@ -53,7 +60,7 @@ class C {
53
60
  v && (i *= u.recipes[t]?.fileGain ?? 1), this.lastAt.set(t, x);
54
61
  const c = e.createBufferSource();
55
62
  c.buffer = l;
56
- const S = u.recipes[t]?.jitter ?? O;
63
+ const S = u.recipes[t]?.jitter ?? C;
57
64
  c.playbackRate.value = 1 + (Math.random() * 2 - 1) * S;
58
65
  const a = e.createGain();
59
66
  a.gain.value = Math.min(1, i);
@@ -79,7 +86,7 @@ class C {
79
86
  const t = this.ctx.createBiquadFilter();
80
87
  t.type = "highshelf", t.frequency.value = T.freq, t.gain.value = T.gainDb;
81
88
  const n = this.ctx.createBiquadFilter();
82
- n.type = "lowpass", n.frequency.value = V, this.master.connect(t).connect(n).connect(this.ctx.destination);
89
+ n.type = "lowpass", n.frequency.value = O, this.master.connect(t).connect(n).connect(this.ctx.destination);
83
90
  const e = this.ctx, i = () => {
84
91
  const s = e.state === "running";
85
92
  this.onRunning(s), s && this.prerender(e);
@@ -111,9 +118,8 @@ class C {
111
118
  return this.buffers.set(n, s), s;
112
119
  }
113
120
  }
114
- const H = new C();
121
+ const H = new V();
115
122
  export {
116
- C as SoundEngine,
123
+ V as SoundEngine,
117
124
  H as sound
118
125
  };
119
- //# sourceMappingURL=SoundEngine.js.map
@@ -27,4 +27,3 @@ function L(c, h) {
27
27
  export {
28
28
  L as cleanSamples
29
29
  };
30
- //# sourceMappingURL=cleanTake.js.map
@@ -32,4 +32,3 @@ class m {
32
32
  export {
33
33
  m as ElementVoice
34
34
  };
35
- //# sourceMappingURL=ElementVoice.js.map
@@ -36,4 +36,3 @@ class h {
36
36
  export {
37
37
  h as GraphVoice
38
38
  };
39
- //# sourceMappingURL=GraphVoice.js.map
@@ -55,4 +55,3 @@ class h {
55
55
  export {
56
56
  h as MusicChannel
57
57
  };
58
- //# sourceMappingURL=MusicChannel.js.map
@@ -10,4 +10,3 @@ export {
10
10
  o as clamp01,
11
11
  n as elementVolumeLocked
12
12
  };
13
- //# sourceMappingURL=musicVoice.js.map
@@ -79,4 +79,3 @@ export {
79
79
  y as hasTakes,
80
80
  k as registerTakes
81
81
  };
82
- //# sourceMappingURL=sampleBank.js.map
@@ -6,4 +6,3 @@ export {
6
6
  s as SOUNDS,
7
7
  r as registerSounds
8
8
  };
9
- //# sourceMappingURL=soundTable.js.map
@@ -33,4 +33,3 @@ export {
33
33
  Y as SYNTH_RATE,
34
34
  _ as renderRecipe
35
35
  };
36
- //# sourceMappingURL=synth.js.map
@@ -0,0 +1,55 @@
1
+ /** `electron.safeStorage`. */
2
+ export interface SafeStorageLike {
3
+ isEncryptionAvailable(): boolean;
4
+ /** Linux only: `basic_text` means a hard-coded key, which is no encryption at all. */
5
+ getSelectedStorageBackend?(): string;
6
+ encryptString(plainText: string): Uint8Array;
7
+ decryptString(encrypted: Buffer): string;
8
+ }
9
+ /** `electron.ipcMain`. */
10
+ export interface IpcMainLike {
11
+ handle(channel: string, listener: (event: any, ...args: any[]) => unknown): void;
12
+ removeHandler?(channel: string): void;
13
+ }
14
+ /** `electron.shell`. */
15
+ export interface ShellLike {
16
+ openExternal(url: string): Promise<void>;
17
+ }
18
+ /** What `before-input-event` hands a listener (`Electron.Input`). */
19
+ export interface InputLike {
20
+ type: string;
21
+ key: string;
22
+ control: boolean;
23
+ meta: boolean;
24
+ shift: boolean;
25
+ alt: boolean;
26
+ }
27
+ /** An event a listener may cancel. */
28
+ export interface PreventableLike {
29
+ preventDefault(): void;
30
+ }
31
+ /** `electron.Session`, for the permission handlers. */
32
+ export interface SessionLike {
33
+ setPermissionRequestHandler(handler: ((webContents: any, permission: any, callback: (granted: boolean) => void, details: any) => void) | null): void;
34
+ setPermissionCheckHandler(handler: ((webContents: any, permission: any, requestingOrigin: string, details: any) => boolean) | null): void;
35
+ }
36
+ /** `electron.WebContents`. */
37
+ export interface WebContentsLike {
38
+ setWindowOpenHandler(handler: (details: {
39
+ url: string;
40
+ }) => any): void;
41
+ on(event: any, listener: (...args: any[]) => void): unknown;
42
+ toggleDevTools(): void;
43
+ session?: SessionLike;
44
+ }
45
+ /** `electron.BrowserWindow`, as far as a lockdown needs it. */
46
+ export interface WindowLike {
47
+ webContents: WebContentsLike;
48
+ }
49
+ /** `electron.app`, as far as the debugger refusal needs it. */
50
+ export interface AppLike {
51
+ isPackaged: boolean;
52
+ commandLine: {
53
+ hasSwitch(name: string): boolean;
54
+ };
55
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /*
3
+ * The few parts of Electron's main-process API this module touches, written as structural types so the engine never
4
+ * imports or depends on `electron`: a game passes its own `app`, `safeStorage`, `ipcMain`, `shell` and windows, and
5
+ * a test passes fakes. Each is a subset of Electron's own type, so Electron's objects fit them as they are.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `1681-engine/electron`: the main-process side of a desktop build on Electron — file-by-file web patching from a
3
+ * release store, the shell's identity, an OS-encrypted session store and a window lockdown. Electron is an optional
4
+ * peer: nothing here imports it, the game hands in its own `app`, `safeStorage`, `ipcMain`, `shell` and windows. Runs
5
+ * in the main process only (it uses Node's `fs` and `crypto`); the pure rules it shares with browsers and phones are
6
+ * `1681-engine/updates`. Importable from ESM (`import`) and from a CommonJS main process (`require`).
7
+ */
8
+ export type { SafeStorageLike, IpcMainLike, ShellLike, InputLike, PreventableLike, SessionLike, WebContentsLike, WindowLike, AppLike } from './electronLike';
9
+ export { shellId, type ShellIdOptions } from './shellId';
10
+ export { WebPatcher, type WebPatcherOptions } from './webPatcher';
11
+ export type { WebPointer, PointerName } from './webPointers';
12
+ export { SessionStore, registerSessionStore, type SessionStoreOptions } from './sessionStore';
13
+ export { isAllowedExternal, isAllowedNavigation, isDevToolsKey, debuggerRequested, DEBUG_SWITCHES, type ExternalPolicy } from './lockdownRules';
14
+ export { lockDownWindow, denyPermissions, refuseDebugLaunch, type LockdownOptions } from './lockdown';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.refuseDebugLaunch = exports.denyPermissions = exports.lockDownWindow = exports.DEBUG_SWITCHES = exports.debuggerRequested = exports.isDevToolsKey = exports.isAllowedNavigation = exports.isAllowedExternal = exports.registerSessionStore = exports.SessionStore = exports.WebPatcher = exports.shellId = void 0;
4
+ var shellId_1 = require("./shellId");
5
+ Object.defineProperty(exports, "shellId", { enumerable: true, get: function () { return shellId_1.shellId; } });
6
+ var webPatcher_1 = require("./webPatcher");
7
+ Object.defineProperty(exports, "WebPatcher", { enumerable: true, get: function () { return webPatcher_1.WebPatcher; } });
8
+ var sessionStore_1 = require("./sessionStore");
9
+ Object.defineProperty(exports, "SessionStore", { enumerable: true, get: function () { return sessionStore_1.SessionStore; } });
10
+ Object.defineProperty(exports, "registerSessionStore", { enumerable: true, get: function () { return sessionStore_1.registerSessionStore; } });
11
+ var lockdownRules_1 = require("./lockdownRules");
12
+ Object.defineProperty(exports, "isAllowedExternal", { enumerable: true, get: function () { return lockdownRules_1.isAllowedExternal; } });
13
+ Object.defineProperty(exports, "isAllowedNavigation", { enumerable: true, get: function () { return lockdownRules_1.isAllowedNavigation; } });
14
+ Object.defineProperty(exports, "isDevToolsKey", { enumerable: true, get: function () { return lockdownRules_1.isDevToolsKey; } });
15
+ Object.defineProperty(exports, "debuggerRequested", { enumerable: true, get: function () { return lockdownRules_1.debuggerRequested; } });
16
+ Object.defineProperty(exports, "DEBUG_SWITCHES", { enumerable: true, get: function () { return lockdownRules_1.DEBUG_SWITCHES; } });
17
+ var lockdown_1 = require("./lockdown");
18
+ Object.defineProperty(exports, "lockDownWindow", { enumerable: true, get: function () { return lockdown_1.lockDownWindow; } });
19
+ Object.defineProperty(exports, "denyPermissions", { enumerable: true, get: function () { return lockdown_1.denyPermissions; } });
20
+ Object.defineProperty(exports, "refuseDebugLaunch", { enumerable: true, get: function () { return lockdown_1.refuseDebugLaunch; } });