@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,356 @@
1
+ /**
2
+ * Layout regions (D-041 Phase 2): a `LayoutSpec` names regions per form factor, the engine lays
3
+ * them out with one CSS grid inside the safe area of a CSS-px overlay, and widgets register once
4
+ * with a region per form factor. The layout moves them when the form factor changes (a phone
5
+ * turned upright) and reports `freeRect`, the space the UI leaves, for the scene's camera.
6
+ *
7
+ * Everything is in CSS px relative to the overlay root. The geometry is pure (`resolveLayout`)
8
+ * and the DOM grid uses the same resolved track sizes, so the rects the layout reports are the
9
+ * rects the browser draws.
10
+ */
11
+ import type { CaptionCard } from './caption.js';
12
+ import type { Rect } from './overlay.js';
13
+ export type FormFactor = 'phone-landscape' | 'phone-portrait' | 'tablet' | 'desktop';
14
+ export declare const FORM_FACTORS: readonly FormFactor[];
15
+ /**
16
+ * - `top`, `bottom`, `left`, `right`: chrome bars and rails.
17
+ * - `cardLane`: a lane for transient cards (beside the world on wide screens, under it upright).
18
+ * - `captionLane`: where a docked caption card sits; it never overlaps another region.
19
+ * - `fill`: what is left. `freeRect` is this region; widgets put here sit over the world.
20
+ * - `modal`: the dialog plane (the safe area less a margin). Panels open inside it; it overlaps
21
+ * the grid by design and is the one region that may.
22
+ */
23
+ export type RegionName = 'top' | 'left' | 'right' | 'bottom' | 'cardLane' | 'captionLane' | 'modal' | 'fill';
24
+ export declare const REGIONS: readonly RegionName[];
25
+ export interface Insets {
26
+ top: number;
27
+ right: number;
28
+ bottom: number;
29
+ left: number;
30
+ }
31
+ export declare const NO_INSETS: Readonly<Insets>;
32
+ /**
33
+ * A grid track: a fixed CSS px size, `'fill'` (shares what the other tracks leave), or a
34
+ * fraction of the safe area's length on that axis clamped to `[min, max]`. When the tracks do
35
+ * not fit, fractional tracks shrink toward their `min` before `fill` gives up space.
36
+ */
37
+ export type Track = number | 'fill' | {
38
+ frac: number;
39
+ min?: number;
40
+ max?: number;
41
+ };
42
+ /**
43
+ * How the base UI is sized in a form factor (see `Overlay.units`): `frame` = design px scaled
44
+ * with the canvas frame, `css` = CSS px.
45
+ */
46
+ export type Units = 'frame' | 'css';
47
+ /**
48
+ * The chrome bars and side rails whose size can follow their content (`BarSize`): `top` and
49
+ * `bottom` by height (ws/ui-8), `left` and `right` by width (ws/ui-9).
50
+ */
51
+ export type BarName = 'top' | 'bottom' | 'left' | 'right';
52
+ /**
53
+ * How a bar or rail is sized. `'fixed'` (the default) keeps the form's track. `'content'` grows
54
+ * the outer track to the bar's tallest widget (`top`, `bottom`; ws/ui-8) or the rail's widest
55
+ * widget at its `max-content` width (`left`, `right`; ws/ui-9, ws/ui-10) plus the form's `pad` each side, never below the form's track
56
+ * and never above `max`; the layout re-flows (the world's `fill`, so `freeRect`, gives up the
57
+ * space). A widget larger than `max` allows still reports through `overflows()`.
58
+ *
59
+ * Corner rule (ws/ui-9): where a content bar and a content rail meet (the cell on the bar's outer
60
+ * row and the rail's outer column, held by one of them in `areas`), the cell goes to the one whose
61
+ * content wants the larger track (widget plus pad, clamped by `max`). A tie keeps the form's
62
+ * `areas`, and so does a swap that would leave either region not a rectangle.
63
+ */
64
+ export interface BarSize {
65
+ size: 'fixed' | 'content';
66
+ /** Largest track for `content`, CSS px. Default no limit. */
67
+ max?: number;
68
+ }
69
+ export interface FormSpec {
70
+ /** One entry per column of `areas`. */
71
+ columns: Track[];
72
+ /** One entry per row of `areas`. */
73
+ rows: Track[];
74
+ /**
75
+ * `grid-template-areas`, one string per row, region names separated by spaces (`.` for an
76
+ * empty cell). Each region must be one rectangle. `modal` is not a grid area.
77
+ */
78
+ areas: string[];
79
+ /** Smallest hit area for base widgets, CSS px (`--tc-tap-min`). */
80
+ tapMin: number;
81
+ /** Smallest text, CSS px (`--tc-text-min`). 0 = no floor. */
82
+ textMin: number;
83
+ /** Padding inside each region and gap between its widgets, CSS px (`--tc-region-pad`). */
84
+ pad: number;
85
+ /** Margin between the safe area and the modal region, CSS px. */
86
+ modalMargin: number;
87
+ /**
88
+ * The base UI's units in this form (`Overlay.units`): `frame` scales the theme, panels and
89
+ * toasts with the canvas frame; `css` keeps them at CSS px over the whole overlay.
90
+ */
91
+ units: Units;
92
+ /**
93
+ * How the `top` and `bottom` bars (ws/ui-8) and the `left` and `right` rails (ws/ui-9) are
94
+ * sized. Default fixed (the form's track). Merged over `LayoutSpec.bars` bar by bar.
95
+ */
96
+ bars?: Partial<Record<BarName, BarSize>>;
97
+ }
98
+ export interface ClassifyInput {
99
+ /** Overlay size, CSS px. */
100
+ width: number;
101
+ height: number;
102
+ /** The primary pointer is coarse (a finger). */
103
+ coarsePointer: boolean;
104
+ /** The screen's shorter side, CSS px (0 if unknown). */
105
+ shortSide: number;
106
+ }
107
+ export interface LayoutSpec {
108
+ /** Per-form-factor overrides, merged over `defaultForms` field by field. */
109
+ forms?: Partial<Record<FormFactor, Partial<FormSpec>>>;
110
+ /** Pick the form factor. Default `classifyFormFactor`. */
111
+ classify?: (input: ClassifyInput) => FormFactor;
112
+ /**
113
+ * Safe-area insets of the viewport, CSS px. Default: read from `env(safe-area-inset-*)`
114
+ * (overridable per document with `--tc-safe-top/right/bottom/left`, for emulation).
115
+ */
116
+ safeArea?: Insets;
117
+ /** Collapse tracks whose regions hold no registered widget. Default true. */
118
+ collapseEmpty?: boolean;
119
+ /**
120
+ * Bar and rail sizing for every form factor (ws/ui-8, ws/ui-9), e.g.
121
+ * `{ bottom: { size: 'content', max: 200 } }`. A form's own `bars` wins bar by bar.
122
+ */
123
+ bars?: Partial<Record<BarName, BarSize>>;
124
+ }
125
+ /** A rect in overlay CSS px, for the `'free'` escape hatch. */
126
+ export interface FreePlacement {
127
+ region: 'free';
128
+ /** CSS px relative to the overlay root, or computed from the current layout. */
129
+ rect: Rect | ((layout: LayoutState) => Rect);
130
+ /** Why no region fits. Logged once per registration (see `Layout.freeUses`). */
131
+ reason: string;
132
+ }
133
+ /** Where a widget goes in one form factor. `hidden` takes it out of the layout. */
134
+ export type Placement = RegionName | 'hidden' | FreePlacement;
135
+ export interface WidgetOptions {
136
+ /** Placement per form factor; `default` covers the ones not named. Unnamed = hidden. */
137
+ place: Partial<Record<FormFactor | 'default', Placement>>;
138
+ /** Order inside its region (CSS `order`). Default 0, then registration order. */
139
+ order?: number;
140
+ /** Name for logs and `freeUses`. Default the element's id or `widget-N`. */
141
+ id?: string;
142
+ /**
143
+ * Called on every re-layout with the form factor, before the layout measures its widgets
144
+ * (ws/ui-10), so a widget sized per form factor (`ui.meter({ size: { phone: 56, default: 96 } })`)
145
+ * is already that size when a content bar or rail measures it. Keep it cheap: write only what
146
+ * changed.
147
+ */
148
+ onForm?: (ff: FormFactor) => void;
149
+ /**
150
+ * Called after a re-layout that moved the widget's element (ws/ui-11): into another region,
151
+ * to another place among its region's widgets, into `free` or out of `hidden`, with where it is
152
+ * now. It runs once the layout has measured, before `onChange`. Moving a node cancels its CSS
153
+ * transitions, so a widget that animates with them restarts them here. A re-layout that leaves
154
+ * a widget where it was does not move its element (its transitions and focus are kept).
155
+ */
156
+ onMove?: (region: RegionName | 'free' | 'hidden') => void;
157
+ }
158
+ /**
159
+ * A length per form factor (ws/ui-10): `default` covers the forms not named, and `phone` covers
160
+ * both `phone-landscape` and `phone-portrait` (a form's own name wins over it).
161
+ */
162
+ export type FormSizes = {
163
+ default: number;
164
+ } & Partial<Record<FormFactor | 'phone', number>>;
165
+ /** A length, or one per form factor (`FormSizes`). */
166
+ export type FormSize = number | FormSizes;
167
+ /** `size` in `ff`: the number itself, else the form's entry, `phone` on a phone, `default`. Pure. */
168
+ export declare function formSize(size: FormSize, ff: FormFactor): number;
169
+ export interface WidgetHandle {
170
+ readonly element: HTMLElement;
171
+ /** Where it is now: a region, `free` or `hidden`. */
172
+ readonly region: RegionName | 'free' | 'hidden';
173
+ /** Change the placement; the layout re-applies at once. */
174
+ setPlace(place: WidgetOptions['place']): void;
175
+ /**
176
+ * Take it out of the layout. An element that had a parent when it was added goes back there
177
+ * (before the sibling it had, if that is still there); one added detached is removed.
178
+ */
179
+ remove(): void;
180
+ }
181
+ /**
182
+ * A widget whose measured box is larger than its region's inner box (the region less its `pad`
183
+ * on each side) in the current form factor (`Layout.overflows`). CSS px.
184
+ */
185
+ export interface LayoutOverflow {
186
+ /** The widget's id (`WidgetOptions.id`). */
187
+ id: string;
188
+ region: RegionName;
189
+ /** The widget's measured box. */
190
+ w: number;
191
+ h: number;
192
+ /** The region's inner box. */
193
+ rw: number;
194
+ rh: number;
195
+ }
196
+ /** The pure result of laying out one form factor at one size. */
197
+ export interface LayoutState {
198
+ formFactor: FormFactor;
199
+ /** The form's `units`. */
200
+ units: Units;
201
+ /** Overlay size, CSS px. */
202
+ width: number;
203
+ height: number;
204
+ /** The effective insets inside the overlay (the viewport insets the overlay rect touches). */
205
+ safeArea: Insets;
206
+ /** Resolved track sizes, CSS px. */
207
+ columns: number[];
208
+ rows: number[];
209
+ /** Region rects in overlay CSS px; `null` when the form has no such area. Collapsed = 0 size. */
210
+ regions: Record<RegionName, Rect | null>;
211
+ /** The `fill` region: the space the UI leaves for the world. */
212
+ freeRect: Rect;
213
+ }
214
+ /** Largest short side (CSS px) a phone has; tablets start around 744. */
215
+ export declare const PHONE_MAX_SHORT_SIDE = 600;
216
+ /** A window whose short side is under this is phone-sized, whatever the pointer. */
217
+ export declare const PHONE_MAX_VIEW_SHORT = 480;
218
+ /**
219
+ * Default form-factor choice. A phone is a coarse-pointer screen whose short side is at most
220
+ * `PHONE_MAX_SHORT_SIDE` (the `deviceTraits().handheld` rule), or any window whose short side is
221
+ * under `PHONE_MAX_VIEW_SHORT` (a tiny desktop window gets phone chrome rather than clipped
222
+ * desktop chrome). Phones split by orientation. Other coarse pointers are tablets; the rest are
223
+ * desktops.
224
+ */
225
+ export declare function classifyFormFactor(i: ClassifyInput): FormFactor;
226
+ /**
227
+ * The default regions. They are deliberately sparse: empty tracks collapse, so a phone shows
228
+ * only the chrome a scene registers, and the world gets the rest.
229
+ *
230
+ * - **desktop / tablet**: full-width top and bottom bars; left and right rails; a card lane
231
+ * beside the world on the right; the caption lane under the world.
232
+ * - **phone-landscape**: height is the scarce axis, so left and right are full-height rails
233
+ * (56 px: a 44 px tap target plus padding) and top/bottom sit between them; the card lane is
234
+ * beside the world; the caption lane is a short strip under it.
235
+ * - **phone-portrait**: width is scarce, so the rails are slim and the card lane and caption lane
236
+ * are full-width strips stacked under the world, above the bottom bar.
237
+ */
238
+ export declare const defaultForms: Readonly<Record<FormFactor, FormSpec>>;
239
+ /** The spec for `ff` with `spec.forms[ff]` merged over the default. */
240
+ export declare function formSpec(ff: FormFactor, spec?: LayoutSpec): FormSpec;
241
+ /** Parses `areas` into a cell grid; throws on ragged rows, unknown names or non-rectangles. */
242
+ export declare function parseAreas(areas: readonly string[]): string[][];
243
+ /**
244
+ * Resolves track sizes on one axis. `collapsed[i]` forces track i to 0. Fixed and fractional
245
+ * tracks take their size; when they overflow, fractional tracks shrink toward `min`, then the
246
+ * fill tracks get what is left (at least 0), shared equally.
247
+ */
248
+ export declare function resolveTracks(tracks: readonly Track[], length: number, collapsed?: readonly boolean[]): number[];
249
+ /** The insets a rect at `rect` inside a `viewport` of the given size actually touches. */
250
+ export declare function effectiveInsets(rect: Rect, viewport: {
251
+ width: number;
252
+ height: number;
253
+ }, insets: Insets): Insets;
254
+ /** The tallest widget per bar and the widest per rail, CSS px (`resolveLayout`'s `content`). */
255
+ type BarContent = Readonly<Partial<Record<BarName, number>>>;
256
+ /**
257
+ * Lays out one form at one size. `occupied` names the grid regions that hold widgets; with
258
+ * `collapseEmpty`, a track collapses when every region in it is empty or also spans another
259
+ * track on that axis (so a full-width bar never holds a side rail open). `fill` is never empty.
260
+ * `content` is the tallest widget per bar (`top`, `bottom`) and the widest per rail (`left`,
261
+ * `right`), CSS px, for the form's `content` bars and rails (`BarSize`, with its corner rule).
262
+ * Pure.
263
+ */
264
+ export declare function resolveLayout(formFactor: FormFactor, form: FormSpec, width: number, height: number, safeArea?: Insets, occupied?: ReadonlySet<RegionName> | null, content?: BarContent | null): LayoutState;
265
+ /** Where `place` puts a widget in `ff`. Pure. */
266
+ export declare function placementFor(place: WidgetOptions['place'], ff: FormFactor): Placement;
267
+ /** What `followSafeArea` reads: `Host.safeArea` (`HostSafeArea`), or anything with its shape. */
268
+ export interface SafeAreaSource {
269
+ insets(): Readonly<Insets>;
270
+ watch(fn: (insets: Readonly<Insets>) => void): () => void;
271
+ }
272
+ /**
273
+ * Pads the layout's regions by a host's safe-area insets (ws/host-mobile): sets
274
+ * `layout.setSafeArea(source.insets())` now and again whenever `source` reports a change, so the
275
+ * `top` region starts below the notch and the `bottom` region ends above the home indicator.
276
+ * `createGame` calls it with `host.safeArea` when the host has one; without it the layout reads
277
+ * `env(safe-area-inset-*)` itself. Returns unsubscribe, which also hands the page's own insets
278
+ * back to the layout.
279
+ */
280
+ export declare function followSafeArea(layout: Pick<Layout, 'setSafeArea'>, source: SafeAreaSource): () => void;
281
+ /** CSS px safe-area insets of `doc`'s viewport (`env(safe-area-inset-*)`, or the `--tc-safe-*` overrides). */
282
+ export declare function readSafeArea(doc?: Document): Insets;
283
+ export interface Layout {
284
+ /** `.tc-layout`, the grid (in the overlay's `layout` layer). */
285
+ readonly element: HTMLElement;
286
+ readonly formFactor: FormFactor;
287
+ /** The latest resolved layout. */
288
+ readonly state: Readonly<LayoutState>;
289
+ /** The space the UI leaves (the `fill` region), overlay CSS px. Hand it to the scene's camera. */
290
+ readonly freeRect: Readonly<Rect>;
291
+ /** Effective safe-area insets inside the overlay, CSS px. */
292
+ readonly safeArea: Readonly<Insets>;
293
+ /** Every widget currently placed with `region: 'free'`: its id and reason. */
294
+ readonly freeUses: readonly {
295
+ id: string;
296
+ reason: string;
297
+ }[];
298
+ /** The element of a region (for styling; register widgets with `add`). */
299
+ region(name: RegionName): HTMLElement;
300
+ /**
301
+ * The widgets in a region whose measured box is larger than the region's inner box, as of the
302
+ * last re-layout (ws/ui-7). Measured on each re-layout (`add`, `setPlace`, a resize,
303
+ * `refresh`), never per frame; a widget whose content grows later is caught at the next one.
304
+ */
305
+ overflows(): readonly LayoutOverflow[];
306
+ /**
307
+ * Register a widget. It is moved into its region now and on every form-factor change. When
308
+ * its measured box is larger than its region's inner box, it warns once (`[layout] … overflows`,
309
+ * naming the widget, the region and both sizes; again after `setPlace`) and is listed in
310
+ * `overflows()`.
311
+ */
312
+ add(element: HTMLElement, opts: WidgetOptions): WidgetHandle;
313
+ /**
314
+ * Dock a caption card (`overlay.caption` by default) in a region, `captionLane` unless
315
+ * `place` says otherwise. Docked, it fills its region; `hidden` or `free` placements undock
316
+ * it to its corner on the frame. Returns the handle.
317
+ */
318
+ dockCaption(caption?: {
319
+ element: HTMLElement;
320
+ dock(host: HTMLElement | null): void;
321
+ }, place?: WidgetOptions['place']): WidgetHandle;
322
+ /** Override the safe-area insets (`null` = read them from the page again). */
323
+ setSafeArea(insets: Insets | null): void;
324
+ /**
325
+ * A scene's own tracks over the spec's, per form factor, field by field (`null` = the spec's
326
+ * again). For a scene whose regions follow its content (a board sized first, a column taking
327
+ * what is left): set on enter and on every resize that changes them, clear on exit.
328
+ * Re-lays out now.
329
+ */
330
+ setForms(forms: LayoutSpec['forms'] | null): void;
331
+ /** Recompute now (the layout already follows `overlay.setFrame`). */
332
+ refresh(): void;
333
+ /** Called after every re-layout with the new state. Returns unsubscribe. */
334
+ onChange(fn: (state: LayoutState) => void): () => void;
335
+ destroy(): void;
336
+ }
337
+ /** What the layout needs from its overlay (`createOverlay` builds the one layout). */
338
+ export interface LayoutHost {
339
+ readonly root: HTMLElement;
340
+ readonly layers: {
341
+ readonly layout: HTMLElement;
342
+ };
343
+ readonly caption: Pick<CaptionCard, 'element' | 'dock'>;
344
+ /** The overlay's box, CSS px. */
345
+ readonly rect: Readonly<Rect>;
346
+ onResize(fn: () => void): () => void;
347
+ }
348
+ /**
349
+ * Lays out regions over the overlay (`createOverlay` calls it; read it as `overlay.layout`).
350
+ *
351
+ * The density tokens `--tc-tap-min` and `--tc-text-min` (from the form spec), `data-form-factor`
352
+ * and the form's `units` go on the overlay root, so the base widgets in the panels layer follow
353
+ * them too.
354
+ */
355
+ export declare function createLayout(overlay: LayoutHost, spec?: LayoutSpec): Layout;
356
+ export {};