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
@@ -18,7 +18,7 @@
18
18
  * A `-width` may have one to four lengths, like `border-width`. The pixel rules hold here: no `translate(-50%)` centring and no `zoom` (the components place in whole pixels), no
19
19
  * blurred shadow, no gradient. A frame's middle shows through only when its slice says `fill`.
20
20
  */
21
- export declare const baseCss = "\n:root {\n --e1681-font: inherit;\n --e1681-font-size: 16px;\n --e1681-text: #ece6d6;\n --e1681-muted: #9c968a;\n --e1681-accent: #e8c060;\n --e1681-bg: #1d242e;\n --e1681-well: #131a24;\n --e1681-control-bg: #2a323e;\n --e1681-border: #6a5634;\n --e1681-border-width: 2px;\n --e1681-backdrop: rgba(0, 0, 0, 0.5);\n --e1681-frame: none;\n --e1681-frame-slice: 0;\n --e1681-frame-width: var(--e1681-border-width);\n --e1681-tip-frame: var(--e1681-frame);\n --e1681-tip-frame-slice: var(--e1681-frame-slice);\n --e1681-tip-frame-width: var(--e1681-frame-width);\n --e1681-control-frame: none;\n --e1681-control-frame-slice: 0;\n --e1681-control-frame-width: var(--e1681-border-width);\n --e1681-tab-frame: var(--e1681-control-frame);\n --e1681-tab-active-frame: var(--e1681-tab-frame);\n --e1681-tab-frame-slice: var(--e1681-control-frame-slice);\n --e1681-tab-frame-width: var(--e1681-control-frame-width);\n --e1681-well-frame: none;\n --e1681-well-frame-slice: 0;\n --e1681-well-frame-width: var(--e1681-border-width);\n}\n\n.e1681-frame {\n color: var(--e1681-text);\n font-family: var(--e1681-font);\n font-size: var(--e1681-font-size);\n background: var(--e1681-bg) padding-box;\n border-style: solid; border-color: var(--e1681-border); border-width: var(--e1681-frame-width);\n border-image: var(--e1681-frame) var(--e1681-frame-slice) / var(--e1681-frame-width) stretch;\n box-sizing: border-box;\n}\n.e1681-tip-frame {\n color: var(--e1681-text);\n font-family: var(--e1681-font);\n font-size: var(--e1681-font-size);\n background: var(--e1681-bg) padding-box;\n border-style: solid; border-color: var(--e1681-border); border-width: var(--e1681-tip-frame-width);\n border-image: var(--e1681-tip-frame) var(--e1681-tip-frame-slice) / var(--e1681-tip-frame-width) stretch;\n box-sizing: border-box;\n}\n\n/* windows: placed by useFitToViewport in whole pixels; header kept, body scrolls */\n.e1681-panel {\n position: fixed;\n z-index: 10;\n display: flex;\n flex-direction: column;\n min-width: 0;\n overflow: hidden;\n pointer-events: auto;\n}\n.e1681-panel-header { display: flex; align-items: center; gap: 8px; flex: none; padding: 2px 4px 6px; }\n.e1681-panel-title { flex: 1; min-width: 0; margin: 0; font-size: 1.25em; font-weight: normal; color: var(--e1681-accent); }\n.e1681-panel-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: 0 4px 4px; }\n.e1681-panel-footer { flex: none; display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; padding: 6px 4px 0; }\n.e1681-close {\n flex: none; padding: 2px; border: 0; background: none; color: var(--e1681-text); cursor: pointer; line-height: 0;\n}\n.e1681-close:hover { color: var(--e1681-accent); }\n/* a touch screen's sheet: the whole screen inside the safe area */\n.e1681-panel.e1681-sheet {\n inset: env(safe-area-inset-top, 0px) env(safe-area-inset-right, 0px) env(safe-area-inset-bottom, 0px) env(safe-area-inset-left, 0px);\n width: auto;\n height: auto;\n}\n.e1681-panel.e1681-sheet .e1681-panel-body { overscroll-behavior: contain; -webkit-overflow-scrolling: touch; }\n\n/* controls */\n.e1681-button, .e1681-input, .e1681-select {\n color: var(--e1681-text);\n font: inherit;\n background: var(--e1681-control-bg) padding-box;\n border-style: solid; border-color: var(--e1681-border); border-width: var(--e1681-control-frame-width);\n border-image: var(--e1681-control-frame) var(--e1681-control-frame-slice) / var(--e1681-control-frame-width) stretch;\n box-shadow: none;\n}\n.e1681-button { padding: 2px 10px; cursor: pointer; min-height: 28px; }\n.e1681-button.small { padding: 0 6px; min-height: 22px; }\n.e1681-button.ghost { background-color: transparent; }\n.e1681-button:hover:not(:disabled) { color: var(--e1681-accent); }\n/* pressed: the same face a pixel lower, never a transform */\n.e1681-button:active:not(:disabled) { padding-top: 3px; padding-bottom: 1px; }\n.e1681-button:disabled { opacity: 0.55; cursor: default; }\n.e1681-input { padding: 2px 6px; min-width: 0; }\n.e1681-glyph { display: inline-block; flex: none; vertical-align: -1px; }\n\n/* tabs: a row that scrolls sideways, or wraps with .wrap */\n.e1681-tabs { display: flex; gap: 2px; align-items: flex-end; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; margin-bottom: 8px; }\n.e1681-tabs::-webkit-scrollbar { display: none; }\n.e1681-tabs.wrap { flex-wrap: wrap; overflow-x: visible; row-gap: 4px; }\n.e1681-tab {\n flex: 0 0 auto;\n padding: 2px 10px;\n color: var(--e1681-muted);\n font: inherit;\n cursor: pointer;\n white-space: nowrap;\n background: var(--e1681-control-bg) padding-box;\n border-style: solid; border-color: var(--e1681-border); border-width: var(--e1681-tab-frame-width);\n border-image: var(--e1681-tab-frame) var(--e1681-tab-frame-slice) / var(--e1681-tab-frame-width) stretch;\n}\n.e1681-tab:hover:not(.active):not(:disabled) { color: var(--e1681-text); }\n.e1681-tab.active { color: var(--e1681-accent); padding-bottom: 6px; border-image-source: var(--e1681-tab-active-frame); }\n.e1681-tab:disabled { opacity: 0.55; cursor: default; }\n.e1681-tab:focus-visible { outline: 2px solid var(--e1681-accent); outline-offset: -4px; }\n.e1681-tabs.small { margin-bottom: 4px; }\n.e1681-tabs.small .e1681-tab { padding: 0 6px; }\n.e1681-tabs.small .e1681-tab.active { padding-bottom: 4px; }\n\n/* list beside detail */\n.e1681-split {\n display: grid;\n grid-template-columns: var(--e1681-split-list, minmax(0, 1fr)) minmax(0, 1fr);\n gap: 12px;\n height: min(58vh, 620px);\n}\n.e1681-split.fit { height: auto; max-height: min(58vh, 620px); }\n.e1681-split-list, .e1681-split-detail { min-height: 0; overflow-y: auto; overflow-x: hidden; }\n.e1681-split-list { padding-right: 4px; }\n.e1681-split-detail {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 8px 10px;\n background: var(--e1681-well) padding-box;\n border-style: solid; border-color: var(--e1681-border); border-width: var(--e1681-well-frame-width);\n border-image: var(--e1681-well-frame) var(--e1681-well-frame-slice) / var(--e1681-well-frame-width) stretch;\n}\n.e1681-split-empty { flex: 1; display: flex; align-items: center; justify-content: center; text-align: center; color: var(--e1681-muted); }\n.e1681-split.stack { grid-template-columns: minmax(0, 1fr); }\n.e1681-split.stack.show-list .e1681-split-detail, .e1681-split.stack.show-detail .e1681-split-list { display: none; }\n.e1681-split-back { align-self: flex-start; }\n.e1681-row { display: flex; align-items: center; gap: 8px; padding: 4px 6px; margin-bottom: 4px; border: var(--e1681-border-width) solid transparent; }\n.e1681-pickable { cursor: pointer; }\n.e1681-pickable:hover:not(.picked):not(.disabled) { border-color: var(--e1681-border); }\n.e1681-row.picked { border-color: var(--e1681-accent); color: var(--e1681-accent); }\n.e1681-row.disabled { opacity: 0.55; cursor: default; }\n\n/* the select: as wide as its longest label */\n.e1681-select { display: inline-flex; align-items: center; gap: 6px; flex: none; padding: 1px 4px; text-align: left; cursor: pointer; }\n.e1681-select:hover:not(:disabled), .e1681-select.open { color: var(--e1681-accent); }\n.e1681-select:disabled { opacity: 0.6; cursor: default; }\n.e1681-select.grow { flex: 1 1 auto; min-width: 0; }\n.e1681-select.grow .e1681-select-labels { flex: 1 1 auto; min-width: 0; overflow: hidden; }\n.e1681-select.grow .e1681-select-labels > span { overflow: hidden; text-overflow: ellipsis; }\n.e1681-select-labels { display: grid; white-space: nowrap; }\n.e1681-select-labels > span { grid-area: 1 / 1; visibility: hidden; }\n.e1681-select-labels > span.shown { visibility: visible; }\n.e1681-select-list {\n position: fixed;\n z-index: 10000;\n box-sizing: border-box;\n width: max-content;\n padding: 2px;\n overflow-y: auto;\n pointer-events: auto;\n}\n.e1681-select-option { padding: 2px 6px; white-space: nowrap; cursor: pointer; }\n.e1681-select-list.measuring .e1681-select-option { width: max-content; }\n.e1681-select-option.hot { background: var(--e1681-control-bg); }\n.e1681-select-option.picked { color: var(--e1681-accent); }\n\n/* tooltips */\n.e1681-tooltip { position: fixed; z-index: 10001; max-width: 360px; padding: 4px 8px; overflow: hidden; pointer-events: none; }\n.e1681-title-tip { white-space: pre-line; }\n\n/* slider: a square knob, flat fills */\n.e1681-slider-row { display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0; }\n.e1681-slider { flex: 1; min-width: 0; padding: 6px 7px; cursor: pointer; touch-action: none; user-select: none; pointer-events: auto; }\n.e1681-slider:focus { outline: none; }\n.e1681-slider:focus-visible { outline: 2px solid var(--e1681-accent); outline-offset: 2px; }\n.e1681-slider[aria-disabled='true'] { opacity: 0.55; cursor: default; }\n.e1681-slider-track {\n position: relative;\n height: 6px;\n background: var(--e1681-well) padding-box;\n border-style: solid; border-color: var(--e1681-border); border-width: var(--e1681-well-frame-width);\n border-image: var(--e1681-well-frame) var(--e1681-well-frame-slice) / var(--e1681-well-frame-width) stretch;\n}\n.e1681-slider-fill { position: absolute; left: 0; top: 0; bottom: 0; background: var(--e1681-accent); }\n/* the knob is offset by half its own whole-pixel width with a margin, so it stays on the pixel grid */\n.e1681-slider-knob { position: absolute; top: -6px; width: 10px; height: 14px; margin-left: -5px; background: var(--e1681-text); border: 2px solid var(--e1681-well); box-sizing: border-box; }\n.e1681-slider-value { min-width: 40px; text-align: right; font-variant-numeric: tabular-nums; }\n\n/* dialogs */\n.e1681-backdrop { position: fixed; inset: 0; z-index: 9000; background: var(--e1681-backdrop); pointer-events: auto; }\n.e1681-dialog { position: fixed; display: flex; flex-direction: column; overflow: hidden; padding: 8px 10px; }\n.e1681-dialog-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; }\n.e1681-dialog-actions { flex: none; display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; padding-top: 10px; }\n.e1681-confirm-text { white-space: pre-line; }\n.e1681-confirm-qty { display: flex; align-items: center; gap: 6px; margin-top: 10px; }\n.e1681-confirm-qty-input { width: 56px; text-align: right; }\n.e1681-choice-list { margin-top: 8px; }\n.e1681-choice-icon { flex: none; line-height: 0; }\n.e1681-choice-label { flex: 1; min-width: 0; }\n.e1681-choice-note { flex: none; margin-left: auto; color: var(--e1681-muted); }\n\n/* sprites at whole multiples */\n.e1681-pixel-image { display: inline-flex; align-items: center; justify-content: center; flex: none; overflow: hidden; }\n.e1681-pixel-image > img { image-rendering: pixelated; flex: none; }\n";
21
+ export declare const baseCss = "\n:root {\n --e1681-font: inherit;\n --e1681-font-size: 16px;\n --e1681-text: #ece6d6;\n --e1681-muted: #9c968a;\n --e1681-accent: #e8c060;\n --e1681-bg: #1d242e;\n --e1681-well: #131a24;\n --e1681-control-bg: #2a323e;\n --e1681-border: #6a5634;\n --e1681-border-width: 2px;\n --e1681-backdrop: rgba(0, 0, 0, 0.5);\n --e1681-frame: none;\n --e1681-frame-slice: 0;\n --e1681-frame-width: var(--e1681-border-width);\n --e1681-tip-frame: var(--e1681-frame);\n --e1681-tip-frame-slice: var(--e1681-frame-slice);\n --e1681-tip-frame-width: var(--e1681-frame-width);\n --e1681-control-frame: none;\n --e1681-control-frame-slice: 0;\n --e1681-control-frame-width: var(--e1681-border-width);\n --e1681-tab-frame: var(--e1681-control-frame);\n --e1681-tab-active-frame: var(--e1681-tab-frame);\n --e1681-tab-frame-slice: var(--e1681-control-frame-slice);\n --e1681-tab-frame-width: var(--e1681-control-frame-width);\n --e1681-well-frame: none;\n --e1681-well-frame-slice: 0;\n --e1681-well-frame-width: var(--e1681-border-width);\n}\n\n.e1681-frame {\n color: var(--e1681-text);\n font-family: var(--e1681-font);\n font-size: var(--e1681-font-size);\n background: var(--e1681-bg) padding-box;\n border-style: solid; border-color: var(--e1681-border); border-width: var(--e1681-frame-width);\n border-image: var(--e1681-frame) var(--e1681-frame-slice) / var(--e1681-frame-width) stretch;\n box-sizing: border-box;\n}\n.e1681-tip-frame {\n color: var(--e1681-text);\n font-family: var(--e1681-font);\n font-size: var(--e1681-font-size);\n background: var(--e1681-bg) padding-box;\n border-style: solid; border-color: var(--e1681-border); border-width: var(--e1681-tip-frame-width);\n border-image: var(--e1681-tip-frame) var(--e1681-tip-frame-slice) / var(--e1681-tip-frame-width) stretch;\n box-sizing: border-box;\n}\n\n/* windows: placed by useFitToViewport in whole pixels; header kept, body scrolls */\n.e1681-panel {\n position: fixed;\n z-index: 10;\n display: flex;\n flex-direction: column;\n min-width: 0;\n overflow: hidden;\n pointer-events: auto;\n}\n.e1681-panel-header { display: flex; align-items: center; gap: 8px; flex: none; padding: 2px 4px 6px; }\n.e1681-panel-title { flex: 1; min-width: 0; margin: 0; font-size: 1.25em; font-weight: normal; color: var(--e1681-accent); }\n.e1681-panel-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: 0 4px 4px; }\n.e1681-panel-footer { flex: none; display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; padding: 6px 4px 0; }\n.e1681-close {\n flex: none; padding: 2px; border: 0; background: none; color: var(--e1681-text); cursor: pointer; line-height: 0;\n}\n.e1681-close:hover { color: var(--e1681-accent); }\n/* a touch screen's sheet: the whole screen inside the safe area */\n.e1681-panel.e1681-sheet {\n inset: env(safe-area-inset-top, 0px) env(safe-area-inset-right, 0px) env(safe-area-inset-bottom, 0px) env(safe-area-inset-left, 0px);\n width: auto;\n height: auto;\n}\n.e1681-panel.e1681-sheet .e1681-panel-body { overscroll-behavior: contain; -webkit-overflow-scrolling: touch; }\n\n/* controls */\n.e1681-button, .e1681-input, .e1681-select {\n color: var(--e1681-text);\n font: inherit;\n background: var(--e1681-control-bg) padding-box;\n border-style: solid; border-color: var(--e1681-border); border-width: var(--e1681-control-frame-width);\n border-image: var(--e1681-control-frame) var(--e1681-control-frame-slice) / var(--e1681-control-frame-width) stretch;\n box-shadow: none;\n}\n.e1681-button { padding: 2px 10px; cursor: pointer; min-height: 28px; }\n.e1681-button.small { padding: 0 6px; min-height: 22px; }\n.e1681-button.ghost { background-color: transparent; }\n.e1681-button.e1681-armed { color: var(--e1681-accent); }\n.e1681-button:hover:not(:disabled) { color: var(--e1681-accent); }\n/* pressed: the same face a pixel lower, never a transform */\n.e1681-button:active:not(:disabled) { padding-top: 3px; padding-bottom: 1px; }\n.e1681-button:disabled { opacity: 0.55; cursor: default; }\n.e1681-input { padding: 2px 6px; min-width: 0; }\n.e1681-glyph { display: inline-block; flex: none; vertical-align: -1px; }\n\n/* tabs: a row that scrolls sideways, or wraps with .wrap */\n.e1681-tabs { display: flex; gap: 2px; align-items: flex-end; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; margin-bottom: 8px; }\n.e1681-tabs::-webkit-scrollbar { display: none; }\n.e1681-tabs.wrap { flex-wrap: wrap; overflow-x: visible; row-gap: 4px; }\n.e1681-tab {\n flex: 0 0 auto;\n padding: 2px 10px;\n color: var(--e1681-muted);\n font: inherit;\n cursor: pointer;\n white-space: nowrap;\n background: var(--e1681-control-bg) padding-box;\n border-style: solid; border-color: var(--e1681-border); border-width: var(--e1681-tab-frame-width);\n border-image: var(--e1681-tab-frame) var(--e1681-tab-frame-slice) / var(--e1681-tab-frame-width) stretch;\n}\n.e1681-tab:hover:not(.active):not(:disabled) { color: var(--e1681-text); }\n.e1681-tab.active { color: var(--e1681-accent); padding-bottom: 6px; border-image-source: var(--e1681-tab-active-frame); }\n.e1681-tab:disabled { opacity: 0.55; cursor: default; }\n.e1681-tab:focus-visible { outline: 2px solid var(--e1681-accent); outline-offset: -4px; }\n.e1681-tabs.small { margin-bottom: 4px; }\n.e1681-tabs.small .e1681-tab { padding: 0 6px; }\n.e1681-tabs.small .e1681-tab.active { padding-bottom: 4px; }\n\n/* list beside detail */\n.e1681-split {\n display: grid;\n grid-template-columns: var(--e1681-split-list, minmax(0, 1fr)) minmax(0, 1fr);\n gap: 12px;\n height: min(58vh, 620px);\n}\n.e1681-split.fit { height: auto; max-height: min(58vh, 620px); }\n.e1681-split-list, .e1681-split-detail { min-height: 0; overflow-y: auto; overflow-x: hidden; }\n.e1681-split-list { padding-right: 4px; }\n.e1681-split-detail {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 8px 10px;\n background: var(--e1681-well) padding-box;\n border-style: solid; border-color: var(--e1681-border); border-width: var(--e1681-well-frame-width);\n border-image: var(--e1681-well-frame) var(--e1681-well-frame-slice) / var(--e1681-well-frame-width) stretch;\n}\n.e1681-split-empty { flex: 1; display: flex; align-items: center; justify-content: center; text-align: center; color: var(--e1681-muted); }\n.e1681-split.stack { grid-template-columns: minmax(0, 1fr); }\n.e1681-split.stack.show-list .e1681-split-detail, .e1681-split.stack.show-detail .e1681-split-list { display: none; }\n.e1681-split-back { align-self: flex-start; }\n.e1681-row { display: flex; align-items: center; gap: 8px; padding: 4px 6px; margin-bottom: 4px; border: var(--e1681-border-width) solid transparent; }\n.e1681-pickable { cursor: pointer; }\n.e1681-pickable:hover:not(.picked):not(.disabled) { border-color: var(--e1681-border); }\n.e1681-row.picked { border-color: var(--e1681-accent); color: var(--e1681-accent); }\n.e1681-row.disabled { opacity: 0.55; cursor: default; }\n\n/* the select: as wide as its longest label */\n.e1681-select { display: inline-flex; align-items: center; gap: 6px; flex: none; padding: 1px 4px; text-align: left; cursor: pointer; }\n.e1681-select:hover:not(:disabled), .e1681-select.open { color: var(--e1681-accent); }\n.e1681-select:disabled { opacity: 0.6; cursor: default; }\n.e1681-select.grow { flex: 1 1 auto; min-width: 0; }\n.e1681-select.grow .e1681-select-labels { flex: 1 1 auto; min-width: 0; overflow: hidden; }\n.e1681-select.grow .e1681-select-labels > span { overflow: hidden; text-overflow: ellipsis; }\n.e1681-select-labels { display: grid; white-space: nowrap; }\n.e1681-select-labels > span { grid-area: 1 / 1; visibility: hidden; }\n.e1681-select-labels > span.shown { visibility: visible; }\n.e1681-select-list {\n position: fixed;\n z-index: 10000;\n box-sizing: border-box;\n width: max-content;\n padding: 2px;\n overflow-y: auto;\n pointer-events: auto;\n}\n.e1681-select-option { padding: 2px 6px; white-space: nowrap; cursor: pointer; }\n.e1681-select-list.measuring .e1681-select-option { width: max-content; }\n.e1681-select-option.hot { background: var(--e1681-control-bg); }\n.e1681-select-option.picked { color: var(--e1681-accent); }\n\n/* tooltips */\n.e1681-tooltip { position: fixed; z-index: 10001; max-width: 360px; padding: 4px 8px; overflow: hidden; pointer-events: none; }\n.e1681-title-tip { white-space: pre-line; }\n\n/* slider: a square knob, flat fills */\n.e1681-slider-row { display: flex; align-items: center; gap: 8px; flex: 1; min-width: 0; }\n.e1681-slider { flex: 1; min-width: 0; padding: 6px 7px; cursor: pointer; touch-action: none; user-select: none; pointer-events: auto; }\n.e1681-slider:focus { outline: none; }\n.e1681-slider:focus-visible { outline: 2px solid var(--e1681-accent); outline-offset: 2px; }\n.e1681-slider[aria-disabled='true'] { opacity: 0.55; cursor: default; }\n.e1681-slider-track {\n position: relative;\n height: 6px;\n background: var(--e1681-well) padding-box;\n border-style: solid; border-color: var(--e1681-border); border-width: var(--e1681-well-frame-width);\n border-image: var(--e1681-well-frame) var(--e1681-well-frame-slice) / var(--e1681-well-frame-width) stretch;\n}\n.e1681-slider-fill { position: absolute; left: 0; top: 0; bottom: 0; background: var(--e1681-accent); }\n/* the knob is offset by half its own whole-pixel width with a margin, so it stays on the pixel grid */\n.e1681-slider-knob { position: absolute; top: -6px; width: 10px; height: 14px; margin-left: -5px; background: var(--e1681-text); border: 2px solid var(--e1681-well); box-sizing: border-box; }\n.e1681-slider-value { min-width: 40px; text-align: right; font-variant-numeric: tabular-nums; }\n\n/* dialogs */\n.e1681-backdrop { position: fixed; inset: 0; z-index: 9000; background: var(--e1681-backdrop); pointer-events: auto; }\n.e1681-dialog { position: fixed; display: flex; flex-direction: column; overflow: hidden; padding: 8px 10px; }\n.e1681-dialog-body { flex: 1 1 auto; min-height: 0; overflow-y: auto; }\n.e1681-dialog-actions { flex: none; display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; padding-top: 10px; }\n.e1681-confirm-text { white-space: pre-line; }\n.e1681-confirm-qty { display: flex; align-items: center; gap: 6px; margin-top: 10px; }\n.e1681-confirm-qty-input { width: 56px; text-align: right; }\n.e1681-choice-list { margin-top: 8px; }\n.e1681-choice-icon { flex: none; line-height: 0; }\n.e1681-choice-label { flex: 1; min-width: 0; }\n.e1681-choice-note { flex: none; margin-left: auto; color: var(--e1681-muted); }\n\n/* sprites at whole multiples */\n.e1681-pixel-image { display: inline-flex; align-items: center; justify-content: center; flex: none; overflow: hidden; }\n.e1681-pixel-image > img { image-rendering: pixelated; flex: none; }\n";
22
22
  /**
23
23
  * Puts `baseCss` into the page once, first in `<head>` so the game's own rules (and its custom properties) win
24
24
  * without needing more specific selectors. Returns the `<style>` element; nothing on a server.
@@ -1 +1 @@
1
- {"version":3,"file":"baseCss.d.ts","sourceRoot":"","sources":["../../../src/react/baseCss.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,OAAO,giVAiNnB,CAAC;AAIF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,GAAE,QAAQ,GAAG,SAAkE,GAAG,gBAAgB,GAAG,IAAI,CASzI"}
1
+ {"version":3,"file":"baseCss.d.ts","sourceRoot":"","sources":["../../../src/react/baseCss.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,OAAO,2lVAkNnB,CAAC;AAIF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,GAAE,QAAQ,GAAG,SAAkE,GAAG,gBAAgB,GAAG,IAAI,CASzI"}
@@ -11,6 +11,7 @@ export { classJoiner, type ClassJoiner } from './classNames.js';
11
11
  export { DEFAULT_LABELS, fillLabel, type UiLabels } from './labels.js';
12
12
  export { baseCss, injectBaseCss } from './baseCss.js';
13
13
  export { useStore } from './useStore.js';
14
+ export { useJsonSelector, useStoreJson, type SelectingHook } from './useJsonSelector.js';
14
15
  export { useViewport } from './useViewport.js';
15
16
  export { useFitToViewport, SCROLL_CLASS, type FitTarget } from './useFitToViewport.js';
16
17
  export { useFillSheet } from './useFillSheet.js';
@@ -24,6 +25,7 @@ export { Tooltip, type TooltipProps } from './Tooltip.js';
24
25
  export { TitleTips, type TitleTipsProps } from './TitleTips.js';
25
26
  export { Modal, type ModalProps } from './Modal.js';
26
27
  export { ConfirmDialog } from './ConfirmDialog.js';
28
+ export { ConfirmButton, type ConfirmButtonProps } from './ConfirmButton.js';
27
29
  export { askConfirm, askQuantity, answerConfirm, cancelConfirm, confirmStore, parseQuantity, type AskOptions, type ConfirmQuestion } from './confirmStore.js';
28
30
  export { ChoiceDialog } from './ChoiceDialog.js';
29
31
  export { askChoice, answerChoice, cancelChoice, choiceStore, firstChoice, type ChoiceOption, type ChoiceQuestion } from './choiceStore.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAClH,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EACL,WAAW,EACX,eAAe,EACf,SAAS,EACT,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC3J,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACxI,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAClH,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EACL,WAAW,EACX,eAAe,EACf,SAAS,EACT,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,KAAK,GAAG,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC3J,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACxI,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC"}
@@ -17,6 +17,8 @@ export interface UiLabels {
17
17
  quantity: string;
18
18
  /** The choice dialog's confirm button. */
19
19
  choose: string;
20
+ /** What an armed `ConfirmButton` says when the game gives it no words of its own. */
21
+ confirmAgain?: string;
20
22
  }
21
23
  export declare const DEFAULT_LABELS: UiLabels;
22
24
  /** `{0}`, `{1}`… replaced by the arguments, in order. */
@@ -1 +1 @@
1
- {"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../../src/react/labels.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,cAAc,EAAE,QAS5B,CAAC;AAEF,yDAAyD;AACzD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE3E"}
1
+ {"version":3,"file":"labels.d.ts","sourceRoot":"","sources":["../../../src/react/labels.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,cAAc,EAAE,QAU5B,CAAC;AAEF,yDAAyD;AACzD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE3E"}
@@ -0,0 +1,13 @@
1
+ import type { Store } from '../ui/dom/createStore.js';
2
+ /** A store hook that selects (zustand's `useStore`, or `(sel) => useStore(store, sel)`). */
3
+ export type SelectingHook<S> = (select: (state: S) => string) => string;
4
+ /**
5
+ * Selects a small, plain piece of a store by its content: the selector's result is compared as JSON, so a store that
6
+ * hands out a fresh array or object for unchanged content — a game's player state pushed several times a second in a
7
+ * fight — re-renders nothing that reads it, and the value returned keeps its reference until the content changes.
8
+ * Only for small data (a few ids, a list of buffs): the JSON is written once per store change.
9
+ */
10
+ export declare function useJsonSelector<S, T>(useHook: SelectingHook<S>, select: (state: S) => T): T;
11
+ /** `useJsonSelector` over an engine `Store` (`createStore`). */
12
+ export declare function useStoreJson<S extends object, T>(store: Store<S>, select: (state: S) => T): T;
13
+ //# sourceMappingURL=useJsonSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useJsonSelector.d.ts","sourceRoot":"","sources":["../../../src/react/useJsonSelector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,4FAA4F;AAC5F,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,KAAK,MAAM,CAAC;AAExE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAG3F;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAE7F"}
@@ -16,6 +16,12 @@ export interface TilemapViewOptions {
16
16
  baseDepth?: number;
17
17
  /** Where the layers go (default the stage's world layer); a scene passes its `root` so they leave with it. */
18
18
  parent?: Container;
19
+ /**
20
+ * World position of the map's top-left corner (default 0, 0): an LDtk level's `worldX`/`worldY`, or any map laid
21
+ * beside another. Culling in `update` counts it.
22
+ */
23
+ x?: number;
24
+ y?: number;
19
25
  }
20
26
  /**
21
27
  * Draws a Tiled map's tile layers. Each layer is cut into chunks painted once into textures; a frame only toggles
@@ -30,9 +36,20 @@ export declare class TilemapView {
30
36
  readonly layers: Map<string, Container<import("pixi.js").ContainerChild>>;
31
37
  private readonly chunks;
32
38
  private readonly id;
39
+ private readonly chunkTiles;
40
+ private readonly textureFor;
41
+ private readonly drawn;
42
+ private readonly originX;
43
+ private readonly originY;
33
44
  constructor(stage: Stage, map: TileMap, options?: TilemapViewOptions);
34
45
  /** Shows only the chunks in the camera's view (plus a margin in world px). Call once a frame. */
35
46
  update(margin?: number): void;
47
+ /**
48
+ * Repaints the chunks holding these cells (row-major indices) of a drawn layer, after its `data` changed: a door
49
+ * opening, a wall dug out, a cell autotiled again (`updateAutotile` returns exactly the indices to pass). Costs one
50
+ * chunk's painting per chunk touched, so keep it out of every frame.
51
+ */
52
+ refreshTiles(layerName: string, cells: Iterable<number>): void;
36
53
  /** World size of the map in px. */
37
54
  get widthPx(): number;
38
55
  get heightPx(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"TilemapView.d.ts","sourceRoot":"","sources":["../../../src/tilemap/TilemapView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAA4D,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAE/G,MAAM,WAAW,kBAAkB;IACjC,wHAAwH;IACxH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;IAC1C,+FAA+F;IAC/F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8GAA8G;IAC9G,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAID;;;;;GAKG;AACH,qBAAa,WAAW;IAOpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,QAAQ,CAAC,GAAG,EAAE,OAAO;IAPvB,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,2DAAgC;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqF;IAC5G,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAc;gBAGd,KAAK,EAAE,KAAK,EACpB,GAAG,EAAE,OAAO,EACrB,OAAO,GAAE,kBAAuB;IA0BlC,iGAAiG;IACjG,MAAM,CAAC,MAAM,SAAK,GAAG,IAAI;IAOzB,mCAAmC;IACnC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,UAAU;CA0CnB"}
1
+ {"version":3,"file":"TilemapView.d.ts","sourceRoot":"","sources":["../../../src/tilemap/TilemapView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAA4D,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAE/G,MAAM,WAAW,kBAAkB;IACjC,wHAAwH;IACxH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;IAC1C,+FAA+F;IAC/F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8GAA8G;IAC9G,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;OAGG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAID;;;;;GAKG;AACH,qBAAa,WAAW;IAYpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,QAAQ,CAAC,GAAG,EAAE,OAAO;IAZvB,2FAA2F;IAC3F,QAAQ,CAAC,MAAM,2DAAgC;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqF;IAC5G,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA0B;IACrD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAGd,KAAK,EAAE,KAAK,EACpB,GAAG,EAAE,OAAO,EACrB,OAAO,GAAE,kBAAuB;IA+BlC,iGAAiG;IACjG,MAAM,CAAC,MAAM,SAAK,GAAG,IAAI;IAOzB;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;IAuB9D,mCAAmC;IACnC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,UAAU;CA2CnB"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Autotiling: picking each cell's tile from which of its neighbours share its terrain, so a painter only says "wall
3
+ * here, water there" and the borders draw themselves. Two bitmasks are offered:
4
+ *
5
+ * - **edges** (4-bit, 16 tiles): the four sides only. Enough for paths, fences and pipes, and for terrain whose
6
+ * inner corners need no tile of their own.
7
+ * - **blob** (8-bit reduced to the 47-tile set): the sides and the corners, a corner counting only when both sides
8
+ * beside it match. Without that reduction 256 masks would need 256 tiles; with it a full terrain (outer edges,
9
+ * inner corners, thin bridges) needs 47.
10
+ *
11
+ * Pure: no Pixi, no DOM, so a server or a map tool can run the same rules.
12
+ */
13
+ /** The edge bits, clockwise from the top. */
14
+ export declare const EDGE_N = 1;
15
+ export declare const EDGE_E = 2;
16
+ export declare const EDGE_S = 4;
17
+ export declare const EDGE_W = 8;
18
+ /** The blob bits, clockwise from the top. */
19
+ export declare const BLOB_N = 1;
20
+ export declare const BLOB_NE = 2;
21
+ export declare const BLOB_E = 4;
22
+ export declare const BLOB_SE = 8;
23
+ export declare const BLOB_S = 16;
24
+ export declare const BLOB_SW = 32;
25
+ export declare const BLOB_W = 64;
26
+ export declare const BLOB_NW = 128;
27
+ /** A grid of terrain ids, row-major. Any id is fine; the rules say what each one is. */
28
+ export interface TerrainGrid {
29
+ width: number;
30
+ height: number;
31
+ cells: ArrayLike<number> & {
32
+ [i: number]: number;
33
+ };
34
+ }
35
+ export type AutotileMode = 'edges' | 'blob';
36
+ export interface MaskOptions {
37
+ /**
38
+ * Whether a neighbour counts as "the same" for `terrain` (default: the same id). A rule's `connectsTo` builds one:
39
+ * grass that also joins flowers, a wall that also joins a door.
40
+ */
41
+ joins?: (terrain: number, neighbour: number) => boolean;
42
+ /**
43
+ * What lies outside the grid: `'same'` (default) joins the edge so a terrain running off the map shows no border;
44
+ * `'other'` closes it.
45
+ */
46
+ edge?: 'same' | 'other';
47
+ }
48
+ /** Drops each corner bit unless both sides beside it are set: what the 47-tile blob set is drawn for. */
49
+ export declare function reduceBlobMask(mask: number): number;
50
+ /** The 47 reduced blob masks in ascending order; a tileset laid out in that order is indexed by `blob47Index`. */
51
+ export declare const BLOB47_MASKS: readonly number[];
52
+ /** Where a blob mask (reduced or not) sits among the 47: 0…46. */
53
+ export declare function blob47Index(mask: number): number;
54
+ /** The 4-bit edge mask of cell (x, y): `EDGE_*` set for each side whose neighbour joins it. */
55
+ export declare function edgeMask(grid: TerrainGrid, x: number, y: number, options?: MaskOptions): number;
56
+ /** The reduced 8-bit blob mask of cell (x, y): one of `BLOB47_MASKS`. */
57
+ export declare function blobMask(grid: TerrainGrid, x: number, y: number, options?: MaskOptions): number;
58
+ /** How one terrain picks its tiles. */
59
+ export interface AutotileRule {
60
+ /** The terrain id this rule draws. */
61
+ terrain: number;
62
+ /** Which mask picks the tile (default `'blob'`). */
63
+ mode?: AutotileMode;
64
+ /**
65
+ * The tile for a mask: a table by mask (a list picks one of several by the cell's position, the same every time),
66
+ * or a function of the mask (and the cell, for anything fancier). Blob masks are the reduced ones; to lay a
67
+ * 47-tile set out in `BLOB47_MASKS` order use `(m) => first + blob47Index(m)`. Edge masks run 0…15, so a 16-tile
68
+ * strip in mask order is `(m) => first + m`.
69
+ */
70
+ tiles: Readonly<Record<number, number | readonly number[]>> | ((mask: number, x: number, y: number) => number);
71
+ /** The tile when the table has no entry for a mask (default: the entry for the full mask, else `empty`). */
72
+ fallback?: number;
73
+ /** Other terrain ids this one joins as if they were its own (a road meeting a bridge). */
74
+ connectsTo?: readonly number[];
75
+ }
76
+ /** Read once, the first time it is used (compiled lookups are kept per object): build a new set to change the rules. */
77
+ export interface AutotileRuleSet {
78
+ rules: readonly AutotileRule[];
79
+ /** The tile for a terrain no rule draws (default 0, an empty cell). */
80
+ empty?: number;
81
+ /** What lies outside the grid; see `MaskOptions.edge`. */
82
+ edge?: 'same' | 'other';
83
+ }
84
+ /** The tile cell (x, y) gets under `set`. */
85
+ export declare function autotileAt(grid: TerrainGrid, set: AutotileRuleSet, x: number, y: number): number;
86
+ /** Every cell's tile, row-major: the whole grid autotiled. */
87
+ export declare function autotile(grid: TerrainGrid, set: AutotileRuleSet, out?: Uint32Array<ArrayBuffer>): Uint32Array;
88
+ /**
89
+ * After cell (x, y) changed terrain, retiles it and its eight neighbours (the only cells whose masks can change)
90
+ * into `out`. Returns the indices whose tile actually changed, so a view repaints only those.
91
+ */
92
+ export declare function updateAutotile(grid: TerrainGrid, set: AutotileRuleSet, out: Uint32Array, x: number, y: number): number[];
93
+ /** Sets cell (x, y) to `terrain` and retiles around it; the changed indices, as `updateAutotile` returns them. */
94
+ export declare function paintTerrain(grid: TerrainGrid, set: AutotileRuleSet, out: Uint32Array, x: number, y: number, terrain: number): number[];
95
+ //# sourceMappingURL=autotile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autotile.d.ts","sourceRoot":"","sources":["../../../src/tilemap/autotile.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type CollisionGrid, type CollisionGridOptions } from '../net/movement.js';
2
+ import type { LdtkIntGrid } from './ldtk.js';
2
3
  import { type TileMap } from './tiled.js';
3
4
  export interface TiledCollisionOptions extends Omit<CollisionGridOptions, 'ground'> {
4
5
  /**
@@ -13,4 +14,11 @@ export interface TiledCollisionOptions extends Omit<CollisionGridOptions, 'groun
13
14
  }
14
15
  /** The `CollisionGrid` of a Tiled map, for `stepMover`; cells are the map's tiles. */
15
16
  export declare function collisionFromTiled(map: TileMap, options?: TiledCollisionOptions): CollisionGrid;
17
+ /** Which IntGrid cells are solid: a list of values, or a test given the value and the name LDtk gives it. */
18
+ export type IntGridSolid = readonly number[] | ((value: number, name: string | undefined) => boolean);
19
+ /**
20
+ * The `CollisionGrid` of an LDtk IntGrid layer, for `stepMover`: the same grid `collisionFromTiled` builds, so movement,
21
+ * `navGridFromCollision` and `tileBodiesFromGrid` treat both editors' maps alike. `solid` says which values block.
22
+ */
23
+ export declare function collisionFromIntGrid(grid: LdtkIntGrid, solid: IntGridSolid, options?: Omit<CollisionGridOptions, 'ground'>): CollisionGrid;
16
24
  //# sourceMappingURL=collision.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"collision.d.ts","sourceRoot":"","sources":["../../../src/tilemap/collision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACrG,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAEtD,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC;IACjF;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,qBAA0B,GAAG,aAAa,CAsBnG"}
1
+ {"version":3,"file":"collision.d.ts","sourceRoot":"","sources":["../../../src/tilemap/collision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACrG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,SAAS,CAAC;AAEtD,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC;IACjF;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACvC;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,qBAA0B,GAAG,aAAa,CAsBnG;AAED,6GAA6G;AAC7G,MAAM,MAAM,YAAY,GAAG,SAAS,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC;AAEtG;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,GAAE,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAM,GAAG,aAAa,CAW9I"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Projects made in LDtk (https://ldtk.io), read into the same `TileMap` a Tiled map becomes, so `TilemapView` draws
3
+ * an LDtk level and `collisionFromTiled` / `objectsOf` work on it unchanged. What LDtk has and Tiled has not —
4
+ * IntGrid values, entity fields with their full JSON, world positions — rides beside the map on `LdtkLevel`.
5
+ *
6
+ * Pure: no Pixi, no DOM. The parser is `parseLdtk` (in `ldtkParse.ts`); this file holds the model and its helpers.
7
+ */
8
+ import type { TileMap, Tileset } from './tiled.js';
9
+ /** A field's value as LDtk exports it: a number, string, boolean, null, a point `{ cx, cy }`, an entity ref, an array… */
10
+ export type LdtkFieldValue = unknown;
11
+ /** `Free` and `GridVania` place levels by hand; the `Linear*` layouts line them up in order. */
12
+ export type LdtkWorldLayout = 'Free' | 'GridVania' | 'LinearHorizontal' | 'LinearVertical';
13
+ /** One IntGrid layer's values: what a level says each cell is (wall, water, ladder…), drawn or not. */
14
+ export interface LdtkIntGrid {
15
+ name: string;
16
+ width: number;
17
+ height: number;
18
+ gridSize: number;
19
+ /** Row-major values, 0 = empty. */
20
+ values: Int32Array;
21
+ /** The identifier LDtk gives each value (`1 → "wall"`); values named nothing are absent. */
22
+ names: Map<number, string>;
23
+ offsetX: number;
24
+ offsetY: number;
25
+ }
26
+ export interface LdtkEntity {
27
+ iid: string;
28
+ /** The entity definition's identifier (`Player`, `Chest`…). */
29
+ identifier: string;
30
+ /** The pivot point in level px (the layer's offset included): where LDtk shows the entity standing. */
31
+ x: number;
32
+ y: number;
33
+ width: number;
34
+ height: number;
35
+ pivotX: number;
36
+ pivotY: number;
37
+ /** The grid cell it stands in. */
38
+ cx: number;
39
+ cy: number;
40
+ tags: string[];
41
+ /** Every field instance by identifier, as exported (`Point`s, arrays and entity refs included). */
42
+ fields: Record<string, LdtkFieldValue>;
43
+ /** The layer it was placed on. */
44
+ layer: string;
45
+ }
46
+ export interface LdtkLevel {
47
+ identifier: string;
48
+ iid: string;
49
+ uid: number;
50
+ /** The level's top-left corner in world px (worked out for the `Linear*` layouts, which store -1). */
51
+ worldX: number;
52
+ worldY: number;
53
+ worldDepth: number;
54
+ pxWidth: number;
55
+ pxHeight: number;
56
+ bgColor: string;
57
+ fields: Record<string, LdtkFieldValue>;
58
+ /**
59
+ * The level as a `TileMap`: one tile layer per Tiles, AutoLayer and auto-tiled IntGrid layer (a layer stacking
60
+ * several tiles in a cell is split into `name`, `name#1`… drawn above it), one object layer per Entities layer, in
61
+ * draw order (LDtk lists its layers top first; here the bottom comes first, as in Tiled).
62
+ */
63
+ map: TileMap;
64
+ intGrids: Map<string, LdtkIntGrid>;
65
+ entities: LdtkEntity[];
66
+ /** The separate `.ldtkl` file this level lives in, relative to the project, when the project saves levels apart. */
67
+ externalRelPath?: string;
68
+ /** False for an external level whose file was not handed to `parseLdtk`: everything but its layers is known. */
69
+ loaded: boolean;
70
+ }
71
+ export interface LdtkWorld {
72
+ identifier: string;
73
+ iid: string;
74
+ layout: LdtkWorldLayout;
75
+ gridWidth: number;
76
+ gridHeight: number;
77
+ levels: LdtkLevel[];
78
+ }
79
+ export interface LdtkProject {
80
+ jsonVersion: string;
81
+ defaultGridSize: number;
82
+ bgColor: string;
83
+ /** Every tileset with an image, gids allotted in definition order (the same in every level's `map`). */
84
+ tilesets: Tileset[];
85
+ /** One world, or several in a multi-worlds project. */
86
+ worlds: LdtkWorld[];
87
+ /** Every level of every world. */
88
+ levels: LdtkLevel[];
89
+ }
90
+ export declare function levelByName(project: LdtkProject, identifier: string): LdtkLevel | undefined;
91
+ /** The level whose rectangle holds world point (x, y), the deepest-listed first; null between levels. */
92
+ export declare function levelAt(levels: readonly LdtkLevel[], x: number, y: number, depth?: number): LdtkLevel | null;
93
+ /** An IntGrid cell's value; 0 outside the grid. */
94
+ export declare function intGridAt(grid: LdtkIntGrid, cx: number, cy: number): number;
95
+ /** Every entity of a level (optionally only one identifier). */
96
+ export declare function entitiesOf(level: LdtkLevel, identifier?: string): LdtkEntity[];
97
+ //# sourceMappingURL=ldtk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ldtk.d.ts","sourceRoot":"","sources":["../../../src/tilemap/ldtk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The LDtk reader: a project's JSON (and its `.ldtkl` level files, when it saves levels apart) into `LdtkProject`.
3
+ * Supported: IntGrid, AutoLayer, Tiles and Entities layers; tilesets with an image; tile custom data and enum tags
4
+ * (as tile properties); entity and level fields; Free, GridVania and Linear world layouts; multi-worlds projects.
5
+ * Not drawn: the IntGrid colours of a layer with no tileset, the embedded icon atlas, level backgrounds.
6
+ *
7
+ * Pure: no Pixi, no DOM.
8
+ */
9
+ import type { LdtkLevel, LdtkProject } from './ldtk.js';
10
+ /** The `.ldtkl` files a project saves its levels in, relative to the project file; empty when levels are inline. */
11
+ export declare function ldtkExternalLevels(json: unknown): string[];
12
+ export interface LdtkParseOptions {
13
+ /**
14
+ * The parsed JSON of each external level file, by the `externalRelPath` the project names it with
15
+ * (`ldtkExternalLevels` lists them). A level left out stays `loaded: false`, so levels can be streamed in later.
16
+ */
17
+ levels?: Record<string, unknown> | ((relPath: string) => unknown);
18
+ }
19
+ /** Reads an LDtk project (already `JSON.parse`d). Throws an `LDtk project: …` error saying what is wrong. */
20
+ export declare function parseLdtk(json: unknown, options?: LdtkParseOptions): LdtkProject;
21
+ /**
22
+ * Reads one external level file into a level `parseLdtk` left unloaded (`loaded: false`), for projects that stream
23
+ * their levels. Returns the same level, now loaded.
24
+ */
25
+ export declare function loadLdtkLevel(project: LdtkProject, projectJson: unknown, level: LdtkLevel, levelJson: unknown): LdtkLevel;
26
+ //# sourceMappingURL=ldtkParse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ldtkParse.d.ts","sourceRoot":"","sources":["../../../src/tilemap/ldtkParse.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAA2C,SAAS,EAAE,WAAW,EAA8B,MAAM,QAAQ,CAAC;AAoC1H,oHAAoH;AACpH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAM1D;AAwMD,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;CACnE;AAED,6GAA6G;AAC7G,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB,GAAG,WAAW,CA6BpF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,SAAS,CAMzH"}
@@ -35,4 +35,8 @@ export { worldToScreen, onScreen, type LayerTransform } from './dom/worldToScree
35
35
  export { createStore, type Store, type StoreListener } from './dom/createStore.js';
36
36
  export { InputShield } from './dom/InputShield.js';
37
37
  export { shouldShield, isEditable, isInside, type ShieldFacts, type ShieldOptions, type ElementLike } from './dom/shieldDecision.js';
38
+ export { RichText, type RichTextOptions } from './rich/RichText.js';
39
+ export { CanvasRichFont, BitmapRichFont, type RichFont, type RichFontOptions, type BitmapRichFontOptions } from './rich/richFonts.js';
40
+ export { parseRichText, escapeRichText, stripRichText, type RichSpan, type RichTextSpan, type RichIconSpan, type RichStyle, type RichMarkupOptions } from './rich/richMarkup.js';
41
+ export { layoutRichText, type RichMeasure, type RichLayoutOptions, type RichLayout, type RichLine, type RichItem, type RichTextItem, type RichIconItem, type RichAlign } from './rich/richLayout.js';
38
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { type DestroyOptions } from 'pixi.js';
2
+ import type { TextureRegistry } from '../../core/TextureRegistry.js';
3
+ import { Widget } from '../Widget.js';
4
+ import type { RichFont } from './richFonts.js';
5
+ import { type RichAlign, type RichLayout, type RichLayoutOptions } from './richLayout.js';
6
+ import { type RichMarkupOptions } from './richMarkup.js';
7
+ export interface RichTextOptions extends RichLayoutOptions, RichMarkupOptions {
8
+ /** What the runs are drawn with: `CanvasRichFont`, `BitmapRichFont`, or a game's own. */
9
+ font: RichFont;
10
+ /** Where `[icon=…]` keys are looked up; without it icons take no room and draw nothing. */
11
+ textures?: TextureRegistry;
12
+ }
13
+ /**
14
+ * Text with inline markup — colour, bold, italic, size and icons (see `parseRichText`) — wrapped to a width and
15
+ * aligned. A `Widget`, so it stacks and pins like a `Label`, and a plain Pixi container in the world too.
16
+ *
17
+ * It does its work only when the text or the layout options change: no per-frame cost. Its runs and icons are kept
18
+ * and reused when the text changes, so a log line rewritten keeps its display objects. Under a pixel-perfect UI root
19
+ * (or with `pixelPerfect`) every run and icon lands on a whole pixel and icons scale by whole multiples.
20
+ */
21
+ export declare class RichText extends Widget {
22
+ private source;
23
+ private last;
24
+ private readonly runs;
25
+ private readonly icons;
26
+ private readonly measure;
27
+ private readonly options;
28
+ /** Whether the last layout was on whole pixels. */
29
+ private snapped;
30
+ constructor(markup: string, options: RichTextOptions);
31
+ /** The markup shown. */
32
+ get markup(): string;
33
+ /** Where every line, run and icon was placed, for hit-testing a word or drawing behind one. */
34
+ get layout(): RichLayout;
35
+ /** Changes the text; the same markup again costs nothing. */
36
+ setText(markup: string): this;
37
+ /** Wraps to a new width (undefined: only at `\n`). */
38
+ setWrapWidth(width: number | undefined): this;
39
+ setAlign(align: RichAlign): this;
40
+ /** Lays out and draws again: after the font's colours or the icons' textures were swapped under it. */
41
+ relayout(): void;
42
+ destroy(options?: DestroyOptions): void;
43
+ protected redraw(): void;
44
+ private pixelPerfect;
45
+ private addRun;
46
+ private addIcon;
47
+ }
48
+ //# sourceMappingURL=RichText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RichText.d.ts","sourceRoot":"","sources":["../../../../src/ui/rich/RichText.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,SAAS,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAkB,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAoB,MAAM,cAAc,CAAC;AACzH,OAAO,EAAiB,KAAK,iBAAiB,EAAkB,MAAM,cAAc,CAAC;AAErF,MAAM,WAAW,eAAgB,SAAQ,iBAAiB,EAAE,iBAAiB;IAC3E,yFAAyF;IACzF,IAAI,EAAE,QAAQ,CAAC;IACf,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,qBAAa,QAAS,SAAQ,MAAM;IAClC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,IAAI,CAAkD;IAC9D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,mDAAmD;IACnD,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe;IAmBpD,wBAAwB;IACxB,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,+FAA+F;IAC/F,IAAI,MAAM,IAAI,UAAU,CAEvB;IAED,6DAA6D;IAC7D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAO7B,sDAAsD;IACtD,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAQ7C,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAOhC,uGAAuG;IACvG,QAAQ,IAAI,IAAI;IAoCP,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAKhD,SAAS,CAAC,MAAM,IAAI,IAAI;IAIxB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,OAAO;CAOhB"}
@@ -0,0 +1,70 @@
1
+ import { type Container } from 'pixi.js';
2
+ import type { RichMeasure } from './richLayout.js';
3
+ import type { RichStyle } from './richMarkup.js';
4
+ /**
5
+ * What `RichText` draws its runs with: it measures text for the layout and makes and updates one display object a
6
+ * run. Two come with the engine — `CanvasRichFont` (any font, bold and italic) and `BitmapRichFont` (glyphs baked
7
+ * once, cheap to change) — and a game may write its own.
8
+ */
9
+ export interface RichFont extends Omit<RichMeasure, 'iconSize'> {
10
+ /** A fresh, empty run. */
11
+ createRun(): Container;
12
+ /** Shows `text` in `style` on a run made by `createRun`; cheap when neither changed. */
13
+ updateRun(run: Container, text: string, style: RichStyle): void;
14
+ }
15
+ export interface RichFontOptions {
16
+ /** Must already be loaded (`document.fonts.load`), or the text measures and bakes in the fallback. */
17
+ fontFamily: string;
18
+ /** The size of text with no `[size]`. */
19
+ fontSize: number;
20
+ /** The colour of text with no `[color]`. */
21
+ color?: string;
22
+ stroke?: string;
23
+ strokeWidth?: number;
24
+ /** Texture pixels per pixel: text in the world is zoomed by the camera, so it is rasterised finer. */
25
+ resolution?: number;
26
+ }
27
+ /**
28
+ * Runs as canvas `Text`: any font the page has, with bold and italic. Every style used gets one Pixi `TextStyle`,
29
+ * shared by every run in it. Changing a run's text repaints and uploads its canvas, so text rewritten every frame
30
+ * belongs in a `BitmapRichFont`.
31
+ */
32
+ export declare class CanvasRichFont implements RichFont {
33
+ private readonly options;
34
+ private readonly styles;
35
+ private readonly metrics;
36
+ constructor(options: RichFontOptions);
37
+ textWidth(text: string, style: RichStyle): number;
38
+ lineHeight(style: RichStyle): number;
39
+ ascent(style: RichStyle): number;
40
+ createRun(): Container;
41
+ updateRun(run: Container, text: string, style: RichStyle): void;
42
+ private metricsOf;
43
+ private pixiStyle;
44
+ }
45
+ export interface BitmapRichFontOptions extends RichFontOptions {
46
+ /** Letters beyond ASCII the text prints (see `installLabelFont`). */
47
+ glyphs?: string;
48
+ }
49
+ /**
50
+ * Runs as `BitmapText` from label fonts (`installLabelFont`): changing the text costs no canvas and no upload, and the
51
+ * runs batch. Each colour × size is a font of its own, baked the first time it is used — keep to a few and print each
52
+ * once while loading, or the first line to use one bakes it on that frame. Bitmap fonts have no bold or italic: those
53
+ * tags change nothing here.
54
+ */
55
+ export declare class BitmapRichFont implements RichFont {
56
+ private readonly options;
57
+ private readonly styles;
58
+ private readonly metrics;
59
+ constructor(options: BitmapRichFontOptions);
60
+ textWidth(text: string, style: RichStyle): number;
61
+ lineHeight(style: RichStyle): number;
62
+ ascent(style: RichStyle): number;
63
+ createRun(): Container;
64
+ updateRun(run: Container, text: string, style: RichStyle): void;
65
+ private metricsOf;
66
+ /** Bold and italic do not reach a bitmap font: styles differing only by them share one. */
67
+ private fontKey;
68
+ private pixiStyle;
69
+ }
70
+ //# sourceMappingURL=richFonts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"richFonts.d.ts","sourceRoot":"","sources":["../../../../src/ui/rich/richFonts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqE,KAAK,SAAS,EAAE,MAAM,SAAS,CAAC;AAE5G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C;;;;GAIG;AACH,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IAC7D,0BAA0B;IAC1B,SAAS,IAAI,SAAS,CAAC;IACvB,wFAAwF;IACxF,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CACjE;AAED,MAAM,WAAW,eAAe;IAC9B,sGAAsG;IACtG,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sGAAsG;IACtG,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAWD;;;;GAIG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAIjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;gBAEzB,OAAO,EAAE,eAAe;IAErD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM;IAKjD,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAIpC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAIhC,SAAS,IAAI,SAAS;IAItB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAO/D,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,SAAS;CAiBlB;AAED,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAIjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;gBAEzB,OAAO,EAAE,qBAAqB;IAE3D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM;IAKjD,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAIpC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAIhC,SAAS,IAAI,SAAS;IAItB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAO/D,OAAO,CAAC,SAAS;IAajB,2FAA2F;IAC3F,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,SAAS;CAYlB"}