@thunderclap-engine/engine 0.0.0-stage → 1.1.0

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 (566) hide show
  1. package/CHANGELOG.md +390 -0
  2. package/LICENSE +21 -0
  3. package/README.md +333 -2
  4. package/dist/analytics/analytics.d.ts +80 -0
  5. package/dist/analytics/analytics.js +129 -0
  6. package/dist/analytics/index.d.ts +1 -0
  7. package/dist/analytics/index.js +1 -0
  8. package/dist/anim/aim.d.ts +43 -0
  9. package/dist/anim/aim.js +157 -0
  10. package/dist/anim/clip.d.ts +98 -0
  11. package/dist/anim/clip.js +282 -0
  12. package/dist/anim/compress.d.ts +65 -0
  13. package/dist/anim/compress.js +339 -0
  14. package/dist/anim/foot-ik.d.ts +74 -0
  15. package/dist/anim/foot-ik.js +241 -0
  16. package/dist/anim/graph.d.ts +153 -0
  17. package/dist/anim/graph.js +532 -0
  18. package/dist/anim/ik.d.ts +105 -0
  19. package/dist/anim/ik.js +435 -0
  20. package/dist/anim/index.d.ts +36 -0
  21. package/dist/anim/index.js +21 -0
  22. package/dist/anim/match.d.ts +66 -0
  23. package/dist/anim/match.js +153 -0
  24. package/dist/anim/mixer.d.ts +113 -0
  25. package/dist/anim/mixer.js +314 -0
  26. package/dist/anim/morph.d.ts +41 -0
  27. package/dist/anim/morph.js +94 -0
  28. package/dist/anim/pose.d.ts +74 -0
  29. package/dist/anim/pose.js +254 -0
  30. package/dist/anim/quat.d.ts +44 -0
  31. package/dist/anim/quat.js +187 -0
  32. package/dist/anim/retarget.d.ts +97 -0
  33. package/dist/anim/retarget.js +366 -0
  34. package/dist/anim/root-motion.d.ts +44 -0
  35. package/dist/anim/root-motion.js +224 -0
  36. package/dist/anim/skin-pose.d.ts +39 -0
  37. package/dist/anim/skin-pose.js +53 -0
  38. package/dist/anim/socket.d.ts +47 -0
  39. package/dist/anim/socket.js +84 -0
  40. package/dist/anim/spring-chain.d.ts +73 -0
  41. package/dist/anim/spring-chain.js +294 -0
  42. package/dist/assets/atlas.d.ts +90 -0
  43. package/dist/assets/atlas.js +212 -0
  44. package/dist/assets/baked.d.ts +33 -0
  45. package/dist/assets/baked.js +38 -0
  46. package/dist/assets/bundle.d.ts +88 -0
  47. package/dist/assets/bundle.js +464 -0
  48. package/dist/assets/cache.d.ts +56 -0
  49. package/dist/assets/cache.js +123 -0
  50. package/dist/assets/gltf-load.d.ts +252 -0
  51. package/dist/assets/gltf-load.js +661 -0
  52. package/dist/assets/gltf-skin.d.ts +36 -0
  53. package/dist/assets/gltf-skin.js +109 -0
  54. package/dist/assets/gltf.d.ts +706 -0
  55. package/dist/assets/gltf.js +1376 -0
  56. package/dist/assets/index.d.ts +20 -0
  57. package/dist/assets/index.js +10 -0
  58. package/dist/assets/ktx2.d.ts +71 -0
  59. package/dist/assets/ktx2.js +213 -0
  60. package/dist/assets/manifest.d.ts +79 -0
  61. package/dist/assets/manifest.js +7 -0
  62. package/dist/assets/meshopt.d.ts +23 -0
  63. package/dist/assets/meshopt.js +403 -0
  64. package/dist/audio/audio.d.ts +733 -0
  65. package/dist/audio/audio.js +2013 -0
  66. package/dist/audio/dsp.d.ts +61 -0
  67. package/dist/audio/dsp.js +159 -0
  68. package/dist/audio/duck.d.ts +44 -0
  69. package/dist/audio/duck.js +101 -0
  70. package/dist/audio/envelope.d.ts +53 -0
  71. package/dist/audio/envelope.js +106 -0
  72. package/dist/audio/index.d.ts +13 -0
  73. package/dist/audio/index.js +14 -0
  74. package/dist/audio/music.d.ts +113 -0
  75. package/dist/audio/music.js +548 -0
  76. package/dist/audio/occlusion.d.ts +55 -0
  77. package/dist/audio/occlusion.js +61 -0
  78. package/dist/audio/persist.d.ts +23 -0
  79. package/dist/audio/persist.js +27 -0
  80. package/dist/audio/recipes.d.ts +55 -0
  81. package/dist/audio/recipes.js +227 -0
  82. package/dist/audio/send.d.ts +41 -0
  83. package/dist/audio/send.js +118 -0
  84. package/dist/audio/sprites.d.ts +59 -0
  85. package/dist/audio/sprites.js +43 -0
  86. package/dist/audio/synth.d.ts +103 -0
  87. package/dist/audio/synth.js +197 -0
  88. package/dist/audio/variations.d.ts +25 -0
  89. package/dist/audio/variations.js +55 -0
  90. package/dist/audio/zones.d.ts +100 -0
  91. package/dist/audio/zones.js +167 -0
  92. package/dist/core/detached-surface.d.ts +44 -0
  93. package/dist/core/detached-surface.js +104 -0
  94. package/dist/core/events.d.ts +24 -0
  95. package/dist/core/events.js +43 -0
  96. package/dist/core/game.d.ts +409 -0
  97. package/dist/core/game.js +530 -0
  98. package/dist/core/hash.d.ts +24 -0
  99. package/dist/core/hash.js +49 -0
  100. package/dist/core/index.d.ts +17 -0
  101. package/dist/core/index.js +9 -0
  102. package/dist/core/loop.d.ts +113 -0
  103. package/dist/core/loop.js +185 -0
  104. package/dist/core/math.d.ts +58 -0
  105. package/dist/core/math.js +210 -0
  106. package/dist/core/noise.d.ts +40 -0
  107. package/dist/core/noise.js +247 -0
  108. package/dist/core/pool.d.ts +42 -0
  109. package/dist/core/pool.js +85 -0
  110. package/dist/core/random.d.ts +61 -0
  111. package/dist/core/random.js +199 -0
  112. package/dist/core/scene.d.ts +79 -0
  113. package/dist/core/scene.js +195 -0
  114. package/dist/core/timer.d.ts +66 -0
  115. package/dist/core/timer.js +286 -0
  116. package/dist/fx/billboard-wgsl.d.ts +29 -0
  117. package/dist/fx/billboard-wgsl.js +158 -0
  118. package/dist/fx/billboard.d.ts +249 -0
  119. package/dist/fx/billboard.js +702 -0
  120. package/dist/fx/debug-draw.d.ts +127 -0
  121. package/dist/fx/debug-draw.js +523 -0
  122. package/dist/fx/debug-wgsl.d.ts +7 -0
  123. package/dist/fx/debug-wgsl.js +32 -0
  124. package/dist/fx/decals-wgsl.d.ts +15 -0
  125. package/dist/fx/decals-wgsl.js +173 -0
  126. package/dist/fx/decals.d.ts +216 -0
  127. package/dist/fx/decals.js +607 -0
  128. package/dist/fx/effect.d.ts +129 -0
  129. package/dist/fx/effect.js +349 -0
  130. package/dist/fx/effects/hit-spark.json +48 -0
  131. package/dist/fx/effects/index.d.ts +8 -0
  132. package/dist/fx/effects/index.js +9 -0
  133. package/dist/fx/effects/magic-aura.json +47 -0
  134. package/dist/fx/effects/smoke-puff.json +34 -0
  135. package/dist/fx/emit-surface.d.ts +40 -0
  136. package/dist/fx/emit-surface.js +124 -0
  137. package/dist/fx/flicker.d.ts +30 -0
  138. package/dist/fx/flicker.js +42 -0
  139. package/dist/fx/index.d.ts +31 -0
  140. package/dist/fx/index.js +20 -0
  141. package/dist/fx/particles-wgsl.d.ts +57 -0
  142. package/dist/fx/particles-wgsl.js +828 -0
  143. package/dist/fx/particles.d.ts +566 -0
  144. package/dist/fx/particles.js +1533 -0
  145. package/dist/fx/random.d.ts +15 -0
  146. package/dist/fx/random.js +20 -0
  147. package/dist/fx/sky-wgsl.d.ts +23 -0
  148. package/dist/fx/sky-wgsl.js +127 -0
  149. package/dist/fx/sky.d.ts +96 -0
  150. package/dist/fx/sky.js +175 -0
  151. package/dist/fx/text-atlas.d.ts +143 -0
  152. package/dist/fx/text-atlas.js +327 -0
  153. package/dist/fx/trail-wgsl.d.ts +11 -0
  154. package/dist/fx/trail-wgsl.js +42 -0
  155. package/dist/fx/trail.d.ts +194 -0
  156. package/dist/fx/trail.js +555 -0
  157. package/dist/fx/water-wgsl.d.ts +34 -0
  158. package/dist/fx/water-wgsl.js +197 -0
  159. package/dist/fx/water.d.ts +176 -0
  160. package/dist/fx/water.js +371 -0
  161. package/dist/geom/collide/bvh.d.ts +151 -0
  162. package/dist/geom/collide/bvh.js +493 -0
  163. package/dist/geom/collide/debug.d.ts +14 -0
  164. package/dist/geom/collide/debug.js +74 -0
  165. package/dist/geom/collide/grid.d.ts +26 -0
  166. package/dist/geom/collide/grid.js +91 -0
  167. package/dist/geom/collide/index.d.ts +8 -0
  168. package/dist/geom/collide/index.js +8 -0
  169. package/dist/geom/collide/queries.d.ts +70 -0
  170. package/dist/geom/collide/queries.js +583 -0
  171. package/dist/geom/collide/serialize.d.ts +14 -0
  172. package/dist/geom/collide/serialize.js +145 -0
  173. package/dist/geom/collide/shapes.d.ts +161 -0
  174. package/dist/geom/collide/shapes.js +686 -0
  175. package/dist/geom/collide/slide.d.ts +66 -0
  176. package/dist/geom/collide/slide.js +375 -0
  177. package/dist/geom/collide/tile-slide.d.ts +88 -0
  178. package/dist/geom/collide/tile-slide.js +255 -0
  179. package/dist/geom/geometry.d.ts +95 -0
  180. package/dist/geom/geometry.js +322 -0
  181. package/dist/geom/heightfield.d.ts +72 -0
  182. package/dist/geom/heightfield.js +295 -0
  183. package/dist/geom/hull.d.ts +27 -0
  184. package/dist/geom/hull.js +279 -0
  185. package/dist/geom/index.d.ts +35 -0
  186. package/dist/geom/index.js +23 -0
  187. package/dist/geom/iso.d.ts +74 -0
  188. package/dist/geom/iso.js +89 -0
  189. package/dist/geom/lod.d.ts +29 -0
  190. package/dist/geom/lod.js +27 -0
  191. package/dist/geom/ops.d.ts +47 -0
  192. package/dist/geom/ops.js +285 -0
  193. package/dist/geom/primitives.d.ts +97 -0
  194. package/dist/geom/primitives.js +359 -0
  195. package/dist/geom/shapes.d.ts +43 -0
  196. package/dist/geom/shapes.js +88 -0
  197. package/dist/geom/simplify.d.ts +38 -0
  198. package/dist/geom/simplify.js +519 -0
  199. package/dist/geom/split.d.ts +37 -0
  200. package/dist/geom/split.js +413 -0
  201. package/dist/geom/sweep.d.ts +83 -0
  202. package/dist/geom/sweep.js +534 -0
  203. package/dist/geom/tangents.d.ts +16 -0
  204. package/dist/geom/tangents.js +124 -0
  205. package/dist/geom/triangulate.d.ts +19 -0
  206. package/dist/geom/triangulate.js +147 -0
  207. package/dist/host/default.d.ts +10 -0
  208. package/dist/host/default.js +10 -0
  209. package/dist/host/index.d.ts +4 -0
  210. package/dist/host/index.js +3 -0
  211. package/dist/host/types.d.ts +144 -0
  212. package/dist/host/types.js +1 -0
  213. package/dist/host/web-links.d.ts +38 -0
  214. package/dist/host/web-links.js +110 -0
  215. package/dist/host/web.d.ts +30 -0
  216. package/dist/host/web.js +216 -0
  217. package/dist/host/xr.d.ts +24 -0
  218. package/dist/host/xr.js +59 -0
  219. package/dist/i18n/i18n.d.ts +59 -0
  220. package/dist/i18n/i18n.js +241 -0
  221. package/dist/i18n/index.d.ts +3 -0
  222. package/dist/i18n/index.js +3 -0
  223. package/dist/i18n/message.d.ts +72 -0
  224. package/dist/i18n/message.js +369 -0
  225. package/dist/i18n/negotiate.d.ts +17 -0
  226. package/dist/i18n/negotiate.js +58 -0
  227. package/dist/index.d.ts +7 -0
  228. package/dist/index.js +1 -0
  229. package/dist/input/bindings.d.ts +31 -0
  230. package/dist/input/bindings.js +141 -0
  231. package/dist/input/clock.d.ts +44 -0
  232. package/dist/input/clock.js +49 -0
  233. package/dist/input/follow.d.ts +133 -0
  234. package/dist/input/follow.js +218 -0
  235. package/dist/input/gestures.d.ts +281 -0
  236. package/dist/input/gestures.js +662 -0
  237. package/dist/input/glyphs.d.ts +35 -0
  238. package/dist/input/glyphs.js +216 -0
  239. package/dist/input/gyro.d.ts +85 -0
  240. package/dist/input/gyro.js +140 -0
  241. package/dist/input/index.d.ts +19 -0
  242. package/dist/input/index.js +16 -0
  243. package/dist/input/input.d.ts +543 -0
  244. package/dist/input/input.js +1492 -0
  245. package/dist/input/look.d.ts +327 -0
  246. package/dist/input/look.js +681 -0
  247. package/dist/input/magnify.d.ts +177 -0
  248. package/dist/input/magnify.js +131 -0
  249. package/dist/input/pointer-dispatch.d.ts +138 -0
  250. package/dist/input/pointer-dispatch.js +180 -0
  251. package/dist/input/pointer-router.d.ts +204 -0
  252. package/dist/input/pointer-router.js +533 -0
  253. package/dist/input/pointer-sources.d.ts +164 -0
  254. package/dist/input/pointer-sources.js +306 -0
  255. package/dist/input/rays.d.ts +138 -0
  256. package/dist/input/rays.js +615 -0
  257. package/dist/input/record.d.ts +209 -0
  258. package/dist/input/record.js +601 -0
  259. package/dist/input/touch-zones.d.ts +147 -0
  260. package/dist/input/touch-zones.js +300 -0
  261. package/dist/input/types.d.ts +158 -0
  262. package/dist/input/types.js +1 -0
  263. package/dist/input/xr-source.d.ts +53 -0
  264. package/dist/input/xr-source.js +164 -0
  265. package/dist/nav/astar.d.ts +45 -0
  266. package/dist/nav/astar.js +182 -0
  267. package/dist/nav/corridor.d.ts +40 -0
  268. package/dist/nav/corridor.js +95 -0
  269. package/dist/nav/crowd.d.ts +94 -0
  270. package/dist/nav/crowd.js +624 -0
  271. package/dist/nav/flow.d.ts +61 -0
  272. package/dist/nav/flow.js +193 -0
  273. package/dist/nav/grid.d.ts +108 -0
  274. package/dist/nav/grid.js +210 -0
  275. package/dist/nav/heap.d.ts +22 -0
  276. package/dist/nav/heap.js +92 -0
  277. package/dist/nav/index.d.ts +37 -0
  278. package/dist/nav/index.js +19 -0
  279. package/dist/nav/mesh/areas.d.ts +44 -0
  280. package/dist/nav/mesh/areas.js +98 -0
  281. package/dist/nav/mesh/bake-options.d.ts +33 -0
  282. package/dist/nav/mesh/bake-options.js +76 -0
  283. package/dist/nav/mesh/contour.d.ts +22 -0
  284. package/dist/nav/mesh/contour.js +323 -0
  285. package/dist/nav/mesh/flow3.d.ts +35 -0
  286. package/dist/nav/mesh/flow3.js +229 -0
  287. package/dist/nav/mesh/links.d.ts +38 -0
  288. package/dist/nav/mesh/links.js +72 -0
  289. package/dist/nav/mesh/mesh-path.d.ts +152 -0
  290. package/dist/nav/mesh/mesh-path.js +643 -0
  291. package/dist/nav/mesh/mesh-reach.d.ts +78 -0
  292. package/dist/nav/mesh/mesh-reach.js +450 -0
  293. package/dist/nav/mesh/navmesh.d.ts +117 -0
  294. package/dist/nav/mesh/navmesh.js +647 -0
  295. package/dist/nav/mesh/polymesh.d.ts +24 -0
  296. package/dist/nav/mesh/polymesh.js +384 -0
  297. package/dist/nav/mesh/regions.d.ts +12 -0
  298. package/dist/nav/mesh/regions.js +367 -0
  299. package/dist/nav/mesh/serialize.d.ts +13 -0
  300. package/dist/nav/mesh/serialize.js +197 -0
  301. package/dist/nav/mesh/voxelize.d.ts +111 -0
  302. package/dist/nav/mesh/voxelize.js +552 -0
  303. package/dist/nav/obstacles.d.ts +75 -0
  304. package/dist/nav/obstacles.js +294 -0
  305. package/dist/nav/path.d.ts +59 -0
  306. package/dist/nav/path.js +177 -0
  307. package/dist/nav/query-queue.d.ts +46 -0
  308. package/dist/nav/query-queue.js +308 -0
  309. package/dist/nav/reach.d.ts +53 -0
  310. package/dist/nav/reach.js +148 -0
  311. package/dist/nav/steer.d.ts +36 -0
  312. package/dist/nav/steer.js +78 -0
  313. package/dist/platform/boot.d.ts +28 -0
  314. package/dist/platform/boot.js +43 -0
  315. package/dist/platform/device-mode.d.ts +40 -0
  316. package/dist/platform/device-mode.js +104 -0
  317. package/dist/platform/device.d.ts +31 -0
  318. package/dist/platform/device.js +91 -0
  319. package/dist/platform/environment.d.ts +42 -0
  320. package/dist/platform/environment.js +82 -0
  321. package/dist/platform/gpu.d.ts +40 -0
  322. package/dist/platform/gpu.js +57 -0
  323. package/dist/platform/index.d.ts +18 -0
  324. package/dist/platform/index.js +10 -0
  325. package/dist/platform/letterbox.d.ts +43 -0
  326. package/dist/platform/letterbox.js +57 -0
  327. package/dist/platform/links.d.ts +20 -0
  328. package/dist/platform/links.js +43 -0
  329. package/dist/platform/screens.d.ts +36 -0
  330. package/dist/platform/screens.js +138 -0
  331. package/dist/platform/surface.d.ts +72 -0
  332. package/dist/platform/surface.js +157 -0
  333. package/dist/platform/xr-fake.d.ts +168 -0
  334. package/dist/platform/xr-fake.js +434 -0
  335. package/dist/platform/xr-surface.d.ts +120 -0
  336. package/dist/platform/xr-surface.js +214 -0
  337. package/dist/platform/xr-types.d.ts +262 -0
  338. package/dist/post/ao.d.ts +12 -0
  339. package/dist/post/ao.js +136 -0
  340. package/dist/post/blend.d.ts +27 -0
  341. package/dist/post/blend.js +129 -0
  342. package/dist/post/depth-pass.d.ts +43 -0
  343. package/dist/post/depth-pass.js +118 -0
  344. package/dist/post/dof.d.ts +1 -0
  345. package/dist/post/dof.js +66 -0
  346. package/dist/post/exposure.d.ts +80 -0
  347. package/dist/post/exposure.js +322 -0
  348. package/dist/post/index.d.ts +12 -0
  349. package/dist/post/index.js +11 -0
  350. package/dist/post/lens-dirt.d.ts +13 -0
  351. package/dist/post/lens-dirt.js +91 -0
  352. package/dist/post/lut.d.ts +19 -0
  353. package/dist/post/lut.js +50 -0
  354. package/dist/post/motion-blur.d.ts +9 -0
  355. package/dist/post/motion-blur.js +78 -0
  356. package/dist/post/post-stack.d.ts +302 -0
  357. package/dist/post/post-stack.js +1137 -0
  358. package/dist/post/settings.d.ts +485 -0
  359. package/dist/post/settings.js +416 -0
  360. package/dist/post/shaders.d.ts +25 -0
  361. package/dist/post/shaders.js +410 -0
  362. package/dist/post/ssr.d.ts +16 -0
  363. package/dist/post/ssr.js +155 -0
  364. package/dist/post/taa.d.ts +74 -0
  365. package/dist/post/taa.js +235 -0
  366. package/dist/post/white-balance.d.ts +25 -0
  367. package/dist/post/white-balance.js +98 -0
  368. package/dist/render/bindings.d.ts +98 -0
  369. package/dist/render/bindings.js +281 -0
  370. package/dist/render/blend.d.ts +13 -0
  371. package/dist/render/blend.js +26 -0
  372. package/dist/render/camera-2d.d.ts +72 -0
  373. package/dist/render/camera-2d.js +92 -0
  374. package/dist/render/camera.d.ts +302 -0
  375. package/dist/render/camera.js +671 -0
  376. package/dist/render/color.d.ts +16 -0
  377. package/dist/render/color.js +41 -0
  378. package/dist/render/compressed.d.ts +104 -0
  379. package/dist/render/compressed.js +248 -0
  380. package/dist/render/diagnostics.d.ts +15 -0
  381. package/dist/render/diagnostics.js +43 -0
  382. package/dist/render/dynamic-resolution.d.ts +70 -0
  383. package/dist/render/dynamic-resolution.js +126 -0
  384. package/dist/render/fake-gpu.d.ts +204 -0
  385. package/dist/render/fake-gpu.js +426 -0
  386. package/dist/render/flipbook.d.ts +56 -0
  387. package/dist/render/flipbook.js +87 -0
  388. package/dist/render/frame.d.ts +278 -0
  389. package/dist/render/frame.js +174 -0
  390. package/dist/render/fullscreen.d.ts +54 -0
  391. package/dist/render/fullscreen.js +91 -0
  392. package/dist/render/gpu-timer.d.ts +73 -0
  393. package/dist/render/gpu-timer.js +186 -0
  394. package/dist/render/index.d.ts +53 -0
  395. package/dist/render/index.js +29 -0
  396. package/dist/render/instance-list.d.ts +185 -0
  397. package/dist/render/instance-list.js +547 -0
  398. package/dist/render/lights.d.ts +181 -0
  399. package/dist/render/lights.js +233 -0
  400. package/dist/render/lod.d.ts +54 -0
  401. package/dist/render/lod.js +52 -0
  402. package/dist/render/material.d.ts +165 -0
  403. package/dist/render/material.js +292 -0
  404. package/dist/render/mesh.d.ts +284 -0
  405. package/dist/render/mesh.js +472 -0
  406. package/dist/render/mipmap.d.ts +16 -0
  407. package/dist/render/mipmap.js +121 -0
  408. package/dist/render/parallax.d.ts +50 -0
  409. package/dist/render/parallax.js +47 -0
  410. package/dist/render/pbr-wgsl.d.ts +31 -0
  411. package/dist/render/pbr-wgsl.js +119 -0
  412. package/dist/render/ping-pong.d.ts +42 -0
  413. package/dist/render/ping-pong.js +74 -0
  414. package/dist/render/renderer.d.ts +741 -0
  415. package/dist/render/renderer.js +2486 -0
  416. package/dist/render/scene-pipelines.d.ts +44 -0
  417. package/dist/render/scene-pipelines.js +92 -0
  418. package/dist/render/scene-target.d.ts +170 -0
  419. package/dist/render/scene-target.js +450 -0
  420. package/dist/render/shadow.d.ts +74 -0
  421. package/dist/render/shadow.js +208 -0
  422. package/dist/render/skin.d.ts +112 -0
  423. package/dist/render/skin.js +240 -0
  424. package/dist/render/snapshot.d.ts +36 -0
  425. package/dist/render/snapshot.js +34 -0
  426. package/dist/render/standard.d.ts +162 -0
  427. package/dist/render/standard.js +263 -0
  428. package/dist/render/texture.d.ts +142 -0
  429. package/dist/render/texture.js +228 -0
  430. package/dist/render/tile-layer.d.ts +110 -0
  431. package/dist/render/tile-layer.js +304 -0
  432. package/dist/render/transform.d.ts +115 -0
  433. package/dist/render/transform.js +318 -0
  434. package/dist/render/wgsl.d.ts +131 -0
  435. package/dist/render/wgsl.js +528 -0
  436. package/dist/save/codec.d.ts +49 -0
  437. package/dist/save/codec.js +169 -0
  438. package/dist/save/index.d.ts +8 -0
  439. package/dist/save/index.js +8 -0
  440. package/dist/save/journal.d.ts +24 -0
  441. package/dist/save/journal.js +102 -0
  442. package/dist/save/migrate.d.ts +15 -0
  443. package/dist/save/migrate.js +37 -0
  444. package/dist/save/schema.d.ts +72 -0
  445. package/dist/save/schema.js +154 -0
  446. package/dist/save/settings.d.ts +28 -0
  447. package/dist/save/settings.js +59 -0
  448. package/dist/save/slots.d.ts +56 -0
  449. package/dist/save/slots.js +200 -0
  450. package/dist/save/storage.d.ts +35 -0
  451. package/dist/save/storage.js +62 -0
  452. package/dist/save/store.d.ts +114 -0
  453. package/dist/save/store.js +269 -0
  454. package/dist/testing/fake-host.d.ts +103 -0
  455. package/dist/testing/fake-host.js +163 -0
  456. package/dist/testing/fixed-clock.d.ts +25 -0
  457. package/dist/testing/fixed-clock.js +30 -0
  458. package/dist/testing/index.d.ts +4 -0
  459. package/dist/testing/index.js +5 -0
  460. package/dist/testing/test-game.d.ts +76 -0
  461. package/dist/testing/test-game.js +92 -0
  462. package/dist/tween/ease.d.ts +77 -0
  463. package/dist/tween/ease.js +192 -0
  464. package/dist/tween/index.d.ts +8 -0
  465. package/dist/tween/index.js +7 -0
  466. package/dist/tween/timeline.d.ts +78 -0
  467. package/dist/tween/timeline.js +269 -0
  468. package/dist/tween/tween.d.ts +168 -0
  469. package/dist/tween/tween.js +320 -0
  470. package/dist/ui/anchor.d.ts +206 -0
  471. package/dist/ui/anchor.js +307 -0
  472. package/dist/ui/caption.d.ts +122 -0
  473. package/dist/ui/caption.js +286 -0
  474. package/dist/ui/cursor.d.ts +105 -0
  475. package/dist/ui/cursor.js +261 -0
  476. package/dist/ui/dom.d.ts +30 -0
  477. package/dist/ui/dom.js +92 -0
  478. package/dist/ui/floats.d.ts +86 -0
  479. package/dist/ui/floats.js +260 -0
  480. package/dist/ui/hud.d.ts +198 -0
  481. package/dist/ui/hud.js +431 -0
  482. package/dist/ui/index.d.ts +37 -0
  483. package/dist/ui/index.js +34 -0
  484. package/dist/ui/inventory-card.d.ts +52 -0
  485. package/dist/ui/inventory-card.js +173 -0
  486. package/dist/ui/inventory-context.d.ts +29 -0
  487. package/dist/ui/inventory-context.js +125 -0
  488. package/dist/ui/inventory-drag.d.ts +63 -0
  489. package/dist/ui/inventory-drag.js +394 -0
  490. package/dist/ui/inventory-grid.d.ts +66 -0
  491. package/dist/ui/inventory-grid.js +625 -0
  492. package/dist/ui/inventory-radial.d.ts +39 -0
  493. package/dist/ui/inventory-radial.js +168 -0
  494. package/dist/ui/inventory.d.ts +128 -0
  495. package/dist/ui/inventory.js +154 -0
  496. package/dist/ui/layout.d.ts +356 -0
  497. package/dist/ui/layout.js +856 -0
  498. package/dist/ui/link.d.ts +64 -0
  499. package/dist/ui/link.js +155 -0
  500. package/dist/ui/loading.d.ts +40 -0
  501. package/dist/ui/loading.js +157 -0
  502. package/dist/ui/loupe.d.ts +74 -0
  503. package/dist/ui/loupe.js +164 -0
  504. package/dist/ui/menu-nav.d.ts +33 -0
  505. package/dist/ui/menu-nav.js +28 -0
  506. package/dist/ui/minimap-canvas.d.ts +145 -0
  507. package/dist/ui/minimap-canvas.js +460 -0
  508. package/dist/ui/notify.d.ts +40 -0
  509. package/dist/ui/notify.js +141 -0
  510. package/dist/ui/orb.d.ts +53 -0
  511. package/dist/ui/orb.js +304 -0
  512. package/dist/ui/overlay.d.ts +213 -0
  513. package/dist/ui/overlay.js +394 -0
  514. package/dist/ui/padnav.d.ts +53 -0
  515. package/dist/ui/padnav.js +146 -0
  516. package/dist/ui/perf.d.ts +130 -0
  517. package/dist/ui/perf.js +329 -0
  518. package/dist/ui/rotate-card.d.ts +54 -0
  519. package/dist/ui/rotate-card.js +97 -0
  520. package/dist/ui/stack.d.ts +128 -0
  521. package/dist/ui/stack.js +312 -0
  522. package/dist/ui/styles.d.ts +13 -0
  523. package/dist/ui/styles.js +200 -0
  524. package/dist/ui/text-scale.d.ts +67 -0
  525. package/dist/ui/text-scale.js +102 -0
  526. package/dist/ui/theme.d.ts +70 -0
  527. package/dist/ui/theme.js +98 -0
  528. package/dist/ui/toast.d.ts +23 -0
  529. package/dist/ui/toast.js +46 -0
  530. package/dist/ui/tooltip.d.ts +89 -0
  531. package/dist/ui/tooltip.js +333 -0
  532. package/dist/ui/widgets-2.d.ts +134 -0
  533. package/dist/ui/widgets-2.js +399 -0
  534. package/dist/ui/widgets-3.d.ts +91 -0
  535. package/dist/ui/widgets-3.js +212 -0
  536. package/dist/ui/widgets.d.ts +34 -0
  537. package/dist/ui/widgets.js +50 -0
  538. package/dist/ui/world-panel/index.d.ts +5 -0
  539. package/dist/ui/world-panel/index.js +5 -0
  540. package/dist/ui/world-panel/layout.d.ts +38 -0
  541. package/dist/ui/world-panel/layout.js +68 -0
  542. package/dist/ui/world-panel/paint.d.ts +96 -0
  543. package/dist/ui/world-panel/paint.js +136 -0
  544. package/dist/ui/world-panel/panel.d.ts +235 -0
  545. package/dist/ui/world-panel/panel.js +762 -0
  546. package/dist/ui/world-panel/wgsl.d.ts +10 -0
  547. package/dist/ui/world-panel/wgsl.js +52 -0
  548. package/dist/ui/world-panel/widgets.d.ts +207 -0
  549. package/dist/ui/world-panel/widgets.js +569 -0
  550. package/dist/voxel/chunks.d.ts +77 -0
  551. package/dist/voxel/chunks.js +149 -0
  552. package/dist/voxel/grid.d.ts +84 -0
  553. package/dist/voxel/grid.js +223 -0
  554. package/dist/voxel/index.d.ts +22 -0
  555. package/dist/voxel/index.js +7 -0
  556. package/dist/voxel/mesher-worker.d.ts +14 -0
  557. package/dist/voxel/mesher-worker.js +47 -0
  558. package/dist/voxel/mesher.d.ts +73 -0
  559. package/dist/voxel/mesher.js +306 -0
  560. package/dist/voxel/ray.d.ts +32 -0
  561. package/dist/voxel/ray.js +73 -0
  562. package/dist/voxel/wgsl.d.ts +16 -0
  563. package/dist/voxel/wgsl.js +28 -0
  564. package/dist/voxel/worker-client.d.ts +79 -0
  565. package/dist/voxel/worker-client.js +122 -0
  566. package/package.json +177 -3
@@ -0,0 +1,307 @@
1
+ import { logicalToClient } from '../platform/letterbox.js';
2
+ const BEHIND = 1e-6;
3
+ const IDENTITY = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
4
+ const ZERO_RECT = { x: 0, y: 0, width: 0, height: 0 };
5
+ /** How far past the viewport an off-screen point is pushed before clamping (clip units). */
6
+ const FAR = 1e6;
7
+ class Anchor {
8
+ el;
9
+ owner;
10
+ world = new Float32Array(3);
11
+ visible = true;
12
+ clamped = false;
13
+ x = Number.NaN;
14
+ y = Number.NaN;
15
+ scale = 1;
16
+ removed = false;
17
+ ax;
18
+ ay;
19
+ ox;
20
+ oy;
21
+ clamp;
22
+ margin;
23
+ byDistance;
24
+ distance;
25
+ min;
26
+ max;
27
+ hideBehind;
28
+ layer;
29
+ typed;
30
+ /** The string fallback's tail: `scale(…)` is written in front of it. */
31
+ alignCss;
32
+ constructor(el, world, opts, owner) {
33
+ this.el = el;
34
+ this.owner = owner;
35
+ this.set(world);
36
+ [this.ax, this.ay] = opts.align ?? [0.5, 0.5];
37
+ [this.ox, this.oy] = opts.offset ?? [0, 0];
38
+ this.clamp = opts.clamp ?? false;
39
+ this.margin = opts.margin ?? 16;
40
+ this.byDistance = opts.scale === 'distance';
41
+ this.distance = opts.distance ?? 10;
42
+ this.min = opts.min ?? 0.25;
43
+ this.max = opts.max ?? 2;
44
+ this.hideBehind = opts.hideBehind ?? true;
45
+ this.layer = opts.layer ?? null;
46
+ this.alignCss = `translate(${-this.ax * 100}%, ${-this.ay * 100}%)`;
47
+ this.typed = typedTransform(el, this.ax, this.ay);
48
+ }
49
+ set(world) {
50
+ this.world[0] = world[0] ?? 0;
51
+ this.world[1] = world[1] ?? 0;
52
+ this.world[2] = world[2] ?? 0;
53
+ }
54
+ remove() {
55
+ if (this.removed)
56
+ return;
57
+ this.removed = true;
58
+ this.owner.drop(this);
59
+ this.el.remove();
60
+ }
61
+ /** Write the element's place; only what changed touches the DOM. */
62
+ place(x, y, s, visible, clamped) {
63
+ const el = this.el;
64
+ if (visible !== this.visible) {
65
+ this.visible = visible;
66
+ el.hidden = !visible;
67
+ }
68
+ if (clamped !== this.clamped) {
69
+ this.clamped = clamped;
70
+ el.toggleAttribute('data-anchor-clamped', clamped);
71
+ }
72
+ if (!visible || (x === this.x && y === this.y && s === this.scale))
73
+ return;
74
+ this.x = x;
75
+ this.y = y;
76
+ this.scale = s;
77
+ const t = this.typed;
78
+ if (t) {
79
+ t.x.value = x;
80
+ t.y.value = y;
81
+ t.s.value = s;
82
+ el.attributeStyleMap.set('transform', t.value);
83
+ }
84
+ else {
85
+ el.style.transform = `translate3d(${x}px, ${y}px, 0) scale(${s}) ${this.alignCss}`;
86
+ }
87
+ }
88
+ }
89
+ /**
90
+ * CSS Typed OM where the browser has it (Chromium, WebKit); null elsewhere (string fallback).
91
+ * `translate3d(x, y, 0) scale(s) translate(-ax%, -ay%)` with its three values reusable.
92
+ * @internal shared with the float numbers.
93
+ */
94
+ export function typedTransform(el, ax, ay) {
95
+ if (typeof CSSUnitValue === 'undefined' ||
96
+ typeof CSSTransformValue === 'undefined' ||
97
+ !('attributeStyleMap' in el)) {
98
+ return null;
99
+ }
100
+ try {
101
+ const x = new CSSUnitValue(0, 'px');
102
+ const y = new CSSUnitValue(0, 'px');
103
+ const s = new CSSUnitValue(1, 'number');
104
+ const value = new CSSTransformValue([
105
+ new CSSTranslate(x, y, new CSSUnitValue(0, 'px')),
106
+ new CSSScale(s, s),
107
+ new CSSTranslate(new CSSUnitValue(-ax * 100, 'percent'), new CSSUnitValue(-ay * 100, 'percent')),
108
+ ]);
109
+ return { x, y, s, value };
110
+ }
111
+ catch {
112
+ return null;
113
+ }
114
+ }
115
+ /**
116
+ * DOM elements that follow world points: a name over a character, a damage number, a hint on a
117
+ * tile, a marker that stays on screen for something off it. Each `update()` projects every point
118
+ * through the camera (`viewProjection`), maps clip space onto the camera's `screen` and that onto
119
+ * the canvas rect in CSS px, and writes `transform` on the element (layout never reflows). A
120
+ * point behind the camera or outside clip space hides its element (`hidden`) unless it is
121
+ * clamped. `update()` allocates nothing in steady state where CSS Typed OM exists; elsewhere a
122
+ * moved element gets one transform string.
123
+ *
124
+ * In a game, `ctx.ui.anchors(camera)` builds the overlay's one `Anchors` on `ui.layers.hud`, and
125
+ * `createGame` updates it after every frame.
126
+ */
127
+ export class Anchors {
128
+ opts;
129
+ list = [];
130
+ clip = new Float32Array(4);
131
+ pt = { x: 0, y: 0 };
132
+ cam;
133
+ frameState = { width: 0, height: 0, rect: ZERO_RECT };
134
+ // The camera and viewport as of `prepare()`, shared by `update()` and `project()`.
135
+ m = IDENTITY;
136
+ sc = ZERO_RECT;
137
+ kx = 1;
138
+ ky = 1;
139
+ vx0 = 0;
140
+ vy0 = 0;
141
+ vx1 = 0;
142
+ vy1 = 0;
143
+ /** The clip w of the last projected point (view depth under a perspective camera). */
144
+ depth = 1;
145
+ constructor(opts) {
146
+ this.opts = opts;
147
+ this.cam = opts.camera;
148
+ }
149
+ /** Anchored elements. */
150
+ get size() {
151
+ return this.list.length;
152
+ }
153
+ /** The logical size and CSS rect projected into, as the surface has them now (one reused object). */
154
+ get frame() {
155
+ const surf = this.opts.surface;
156
+ const f = this.frameState;
157
+ f.width = surf.logicalWidth;
158
+ f.height = surf.logicalHeight;
159
+ f.rect = surf.rect;
160
+ return f;
161
+ }
162
+ /**
163
+ * Project a world point into frame CSS px (the hud layer's coordinates), written to `out`, the
164
+ * way an anchor is placed before its offset and clamp. Returns whether the point is in view: a
165
+ * point behind the camera is pushed far out along its direction, one outside the viewport
166
+ * lands where it would. Allocates nothing.
167
+ */
168
+ project(x, y, z, out) {
169
+ this.prepare();
170
+ return this.projectPrepared(x, y, z, out);
171
+ }
172
+ /** Project through another camera from the next `update()` on. */
173
+ setCamera(camera) {
174
+ this.cam = camera;
175
+ }
176
+ /**
177
+ * Place `el` at the world point `world` (copied) from the next `update()` on. The element is
178
+ * appended to its layer (`opts.layer`, else `root`) and positioned absolutely at the layer's
179
+ * top-left, moved by `transform` only.
180
+ */
181
+ add(el, world, opts = {}) {
182
+ const a = new Anchor(el, world, opts, this);
183
+ const layer = (a.layer !== null && this.opts.layers?.[a.layer]) || this.opts.root;
184
+ const s = el.style;
185
+ s.position = 'absolute';
186
+ s.left = '0';
187
+ s.top = '0';
188
+ s.transformOrigin = '0 0';
189
+ s.willChange = 'transform';
190
+ el.classList.add('tc-anchor');
191
+ layer.append(el);
192
+ this.list.push(a);
193
+ return a;
194
+ }
195
+ /** Remove every anchored element. */
196
+ clear() {
197
+ for (let i = this.list.length - 1; i >= 0; i--)
198
+ this.list[i].remove();
199
+ }
200
+ /** @internal */
201
+ drop(a) {
202
+ const i = this.list.indexOf(a);
203
+ if (i >= 0)
204
+ this.list.splice(i, 1);
205
+ }
206
+ /** Place every element for the camera as it is now. Call once a frame, after the camera moved. */
207
+ update() {
208
+ this.prepare();
209
+ const rect = this.opts.surface.rect;
210
+ const onFrame = this.opts.onFrame;
211
+ const pt = this.pt;
212
+ const vx0 = this.vx0;
213
+ const vy0 = this.vy0;
214
+ const vx1 = this.vx1;
215
+ const vy1 = this.vy1;
216
+ for (let i = 0; i < this.list.length; i++) {
217
+ const a = this.list[i];
218
+ const inside = this.projectPrepared(a.world[0], a.world[1], a.world[2], pt);
219
+ if (!inside && !a.clamp && a.hideBehind) {
220
+ a.place(a.x, a.y, a.scale, false, false);
221
+ continue;
222
+ }
223
+ const w = this.depth;
224
+ let x = pt.x + a.ox;
225
+ let y = pt.y + a.oy;
226
+ let clamped = false;
227
+ if (a.clamp) {
228
+ const mg = a.margin;
229
+ const cx = Math.min(Math.max(x, vx0 + mg), vx1 - mg);
230
+ const cy = Math.min(Math.max(y, vy0 + mg), vy1 - mg);
231
+ clamped = !inside || cx !== x || cy !== y;
232
+ x = cx;
233
+ y = cy;
234
+ }
235
+ if (a.layer !== null && onFrame && !onFrame(a.layer)) {
236
+ x += rect.x;
237
+ y += rect.y;
238
+ }
239
+ let s = 1;
240
+ if (a.byDistance) {
241
+ s = w > BEHIND ? a.distance / w : a.max;
242
+ s = Math.min(Math.max(s, a.min), a.max);
243
+ }
244
+ a.place(x, y, s, true, clamped);
245
+ }
246
+ }
247
+ /** Read the camera and the viewport (camera.screen in frame CSS px) for the projections after. */
248
+ prepare() {
249
+ const cam = this.cam();
250
+ const sc = cam.screen;
251
+ const surf = this.opts.surface;
252
+ const lw = surf.logicalWidth;
253
+ const lh = surf.logicalHeight;
254
+ const rect = surf.rect;
255
+ // camera.screen → logical px: a rect inside the unit square is a fraction of the canvas.
256
+ const frac = sc.x >= 0 && sc.y >= 0 && sc.x + sc.width <= 1 && sc.y + sc.height <= 1;
257
+ const kx = frac ? lw : 1;
258
+ const ky = frac ? lh : 1;
259
+ const pt = this.pt;
260
+ logicalToClient(rect, lw, lh, sc.x * kx, sc.y * ky, pt);
261
+ this.vx0 = pt.x - rect.x;
262
+ this.vy0 = pt.y - rect.y;
263
+ logicalToClient(rect, lw, lh, (sc.x + sc.width) * kx, (sc.y + sc.height) * ky, pt);
264
+ this.vx1 = pt.x - rect.x;
265
+ this.vy1 = pt.y - rect.y;
266
+ this.m = cam.viewProjection;
267
+ this.sc = sc;
268
+ this.kx = kx;
269
+ this.ky = ky;
270
+ }
271
+ /** One point through the prepared camera: `out` gets frame CSS px, `depth` the clip w. */
272
+ projectPrepared(wx, wy, wz, out) {
273
+ const m = this.m;
274
+ const sc = this.sc;
275
+ const surf = this.opts.surface;
276
+ const rect = surf.rect;
277
+ const c = this.clip;
278
+ for (let r = 0; r < 4; r++) {
279
+ c[r] = m[r] * wx + m[4 + r] * wy + m[8 + r] * wz + m[12 + r];
280
+ }
281
+ const w = c[3];
282
+ this.depth = w;
283
+ const inside = w > BEHIND && Math.abs(c[0]) <= w && Math.abs(c[1]) <= w && c[2] >= 0 && c[2] <= w;
284
+ let nx;
285
+ let ny;
286
+ if (w > BEHIND) {
287
+ nx = c[0] / w;
288
+ ny = c[1] / w;
289
+ }
290
+ else {
291
+ // Behind the eye the projection mirrors; the point's direction is x, y over |w|, and it
292
+ // is off screen whatever its size, so push it far out before clamping.
293
+ const d = Math.max(Math.abs(c[0]), Math.abs(c[1])) || 1;
294
+ nx = (c[0] / d) * FAR;
295
+ ny = (c[1] / d) * FAR;
296
+ if (nx === 0 && ny === 0)
297
+ ny = -FAR;
298
+ }
299
+ // NDC → screen units → logical px → frame CSS px.
300
+ const sx = (sc.x + ((nx + 1) / 2) * sc.width) * this.kx;
301
+ const sy = (sc.y + ((1 - ny) / 2) * sc.height) * this.ky;
302
+ logicalToClient(rect, surf.logicalWidth, surf.logicalHeight, sx, sy, out);
303
+ out.x -= rect.x;
304
+ out.y -= rect.y;
305
+ return inside;
306
+ }
307
+ }
@@ -0,0 +1,122 @@
1
+ import type { Rect } from './overlay.js';
2
+ export type Corner = 'bottom-right' | 'bottom-left' | 'top-right' | 'top-left';
3
+ /** Area (px²) of `box` that lies inside any of `regions` (overlaps between regions count twice). Pure. */
4
+ export declare function overlapArea(box: Rect, regions: readonly Rect[]): number;
5
+ /** The order corners are tried in: the preferred one, its mirror across, then the other edge. Pure. */
6
+ export declare function cornerOrder(preferred: Corner): Corner[];
7
+ export interface ReadingTimeOptions {
8
+ /** Base time added to every line. Default 1200 ms. */
9
+ baseMs?: number;
10
+ /** Per character. Default 45 ms (~220 wpm with base). */
11
+ perCharMs?: number;
12
+ /** Floor. Default 2000 ms. */
13
+ minMs?: number;
14
+ /** Ceiling. Default 12000 ms. */
15
+ maxMs?: number;
16
+ }
17
+ /** How long a line should stay up once fully revealed. Pure. */
18
+ export declare function readingTimeMs(text: string, opts?: ReadingTimeOptions): number;
19
+ /** Delay before revealing the next char: pauses after punctuation. Pure. */
20
+ export declare function revealDelayMs(prev: string, cps: number): number;
21
+ export interface SayOptions {
22
+ /** Shown above the text (e.g. a name). Omit for none. */
23
+ speaker?: string;
24
+ /** Optional element shown left of the text (a canvas, an svg glyph...). */
25
+ portrait?: Node;
26
+ /** Reveal speed in characters per second. `0` or reduced motion = instant. Default 45. */
27
+ cps?: number;
28
+ /** ms to hold once fully shown; `0` = until clicked / `advance()`. Default `readingTimeMs(text)`. */
29
+ hold?: number;
30
+ /** Called with each revealed character (e.g. to blip a sound). Not called for whitespace. */
31
+ onChar?: (ch: string, index: number) => void;
32
+ /** Override the card's corner for this line. */
33
+ corner?: Corner;
34
+ }
35
+ export interface CaptionOptions {
36
+ corner?: Corner;
37
+ /** Force reduced motion (default: the user's `prefers-reduced-motion`). */
38
+ reducedMotion?: boolean;
39
+ /** Default reveal speed. */
40
+ cps?: number;
41
+ /** Clicking the card skips the reveal, then advances. Default true. */
42
+ clickToAdvance?: boolean;
43
+ }
44
+ /**
45
+ * A corner speech/caption card with a typewriter reveal and a queue. The full line goes into a
46
+ * polite live region at once (screen readers don't hear the typewriter), and the visible text
47
+ * keeps its final layout from the start (unrevealed chars are `visibility:hidden`) so the card
48
+ * never reflows while typing.
49
+ */
50
+ export declare class CaptionCard {
51
+ readonly element: HTMLElement;
52
+ private readonly portraitEl;
53
+ private readonly speakerEl;
54
+ private readonly textEl;
55
+ private readonly shownEl;
56
+ private readonly pendingEl;
57
+ private readonly liveEl;
58
+ private readonly queue;
59
+ private current;
60
+ private revealed;
61
+ private timer;
62
+ private phase;
63
+ private readonly corner;
64
+ private readonly sideEl;
65
+ private readonly bodyEl;
66
+ private readonly placeSubs;
67
+ private readonly homeEl;
68
+ private dockHost;
69
+ private lineCps;
70
+ private isSuspended;
71
+ reducedMotion: boolean;
72
+ cps: number;
73
+ constructor(container: HTMLElement, opts?: CaptionOptions);
74
+ /** The region the card is docked in (see `dock`), or null in its corner. */
75
+ get docked(): HTMLElement | null;
76
+ /**
77
+ * Region placement (layout regions, `Layout.dockCaption`): move the card into `host` and let
78
+ * it fill that region instead of floating in a corner. While docked, corners and `onPlace` do
79
+ * not apply; the region never overlaps another. `null` returns it to its corner in the
80
+ * original container. The live region stays put.
81
+ */
82
+ dock(host: HTMLElement | null): void;
83
+ /** True while a line is showing or queued. */
84
+ get busy(): boolean;
85
+ get queued(): number;
86
+ /** Text of the line being shown, or null. */
87
+ get currentText(): string | null;
88
+ /** True while `suspend(true)` holds the card hidden and frozen. */
89
+ get suspended(): boolean;
90
+ /**
91
+ * Called whenever the card is laid out in its corner (a new line, back from suspension or
92
+ * undocked), after its corner is reset to the line's and its inline `max-width` cleared. A
93
+ * game that must keep the card off parts of its scene moves or narrows it here (`overlapArea`
94
+ * and `cornerOrder` help). Returns unsubscribe.
95
+ */
96
+ onPlace(fn: (el: HTMLElement) => void): () => void;
97
+ /** Lay the card out again in its corner and run `onPlace` (e.g. after the scene moved). */
98
+ relayout(): void;
99
+ /**
100
+ * Hide the card and freeze its typing and hold timers (e.g. while a modal panel is open);
101
+ * `suspend(false)` shows it again and picks up where it left off, with a fresh hold. The
102
+ * queue and live region are untouched, and `say()` still queues while suspended.
103
+ */
104
+ suspend(on: boolean): void;
105
+ /** Queue a line; resolves when it's dismissed (held time elapsed, advanced, or cleared). */
106
+ say(text: string, opts?: SayOptions): Promise<void>;
107
+ /** Skip the typewriter if typing, else dismiss the current line. */
108
+ advance(): void;
109
+ /** Drop the queue and hide the card; all pending `say` promises resolve. */
110
+ clear(): void;
111
+ destroy(): void;
112
+ private next;
113
+ /** (Re)start the timer for the current phase, unless suspended. */
114
+ private schedule;
115
+ /** Reset the card to the line's corner and let `onPlace` adjust it. */
116
+ private place;
117
+ private tick;
118
+ private finishReveal;
119
+ private dismiss;
120
+ private render;
121
+ private stopTimer;
122
+ }