@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.
- package/CHANGELOG.md +390 -0
- package/LICENSE +21 -0
- package/README.md +333 -2
- package/dist/analytics/analytics.d.ts +80 -0
- package/dist/analytics/analytics.js +129 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.js +1 -0
- package/dist/anim/aim.d.ts +43 -0
- package/dist/anim/aim.js +157 -0
- package/dist/anim/clip.d.ts +98 -0
- package/dist/anim/clip.js +282 -0
- package/dist/anim/compress.d.ts +65 -0
- package/dist/anim/compress.js +339 -0
- package/dist/anim/foot-ik.d.ts +74 -0
- package/dist/anim/foot-ik.js +241 -0
- package/dist/anim/graph.d.ts +153 -0
- package/dist/anim/graph.js +532 -0
- package/dist/anim/ik.d.ts +105 -0
- package/dist/anim/ik.js +435 -0
- package/dist/anim/index.d.ts +36 -0
- package/dist/anim/index.js +21 -0
- package/dist/anim/match.d.ts +66 -0
- package/dist/anim/match.js +153 -0
- package/dist/anim/mixer.d.ts +113 -0
- package/dist/anim/mixer.js +314 -0
- package/dist/anim/morph.d.ts +41 -0
- package/dist/anim/morph.js +94 -0
- package/dist/anim/pose.d.ts +74 -0
- package/dist/anim/pose.js +254 -0
- package/dist/anim/quat.d.ts +44 -0
- package/dist/anim/quat.js +187 -0
- package/dist/anim/retarget.d.ts +97 -0
- package/dist/anim/retarget.js +366 -0
- package/dist/anim/root-motion.d.ts +44 -0
- package/dist/anim/root-motion.js +224 -0
- package/dist/anim/skin-pose.d.ts +39 -0
- package/dist/anim/skin-pose.js +53 -0
- package/dist/anim/socket.d.ts +47 -0
- package/dist/anim/socket.js +84 -0
- package/dist/anim/spring-chain.d.ts +73 -0
- package/dist/anim/spring-chain.js +294 -0
- package/dist/assets/atlas.d.ts +90 -0
- package/dist/assets/atlas.js +212 -0
- package/dist/assets/baked.d.ts +33 -0
- package/dist/assets/baked.js +38 -0
- package/dist/assets/bundle.d.ts +88 -0
- package/dist/assets/bundle.js +464 -0
- package/dist/assets/cache.d.ts +56 -0
- package/dist/assets/cache.js +123 -0
- package/dist/assets/gltf-load.d.ts +252 -0
- package/dist/assets/gltf-load.js +661 -0
- package/dist/assets/gltf-skin.d.ts +36 -0
- package/dist/assets/gltf-skin.js +109 -0
- package/dist/assets/gltf.d.ts +706 -0
- package/dist/assets/gltf.js +1376 -0
- package/dist/assets/index.d.ts +20 -0
- package/dist/assets/index.js +10 -0
- package/dist/assets/ktx2.d.ts +71 -0
- package/dist/assets/ktx2.js +213 -0
- package/dist/assets/manifest.d.ts +79 -0
- package/dist/assets/manifest.js +7 -0
- package/dist/assets/meshopt.d.ts +23 -0
- package/dist/assets/meshopt.js +403 -0
- package/dist/audio/audio.d.ts +733 -0
- package/dist/audio/audio.js +2013 -0
- package/dist/audio/dsp.d.ts +61 -0
- package/dist/audio/dsp.js +159 -0
- package/dist/audio/duck.d.ts +44 -0
- package/dist/audio/duck.js +101 -0
- package/dist/audio/envelope.d.ts +53 -0
- package/dist/audio/envelope.js +106 -0
- package/dist/audio/index.d.ts +13 -0
- package/dist/audio/index.js +14 -0
- package/dist/audio/music.d.ts +113 -0
- package/dist/audio/music.js +548 -0
- package/dist/audio/occlusion.d.ts +55 -0
- package/dist/audio/occlusion.js +61 -0
- package/dist/audio/persist.d.ts +23 -0
- package/dist/audio/persist.js +27 -0
- package/dist/audio/recipes.d.ts +55 -0
- package/dist/audio/recipes.js +227 -0
- package/dist/audio/send.d.ts +41 -0
- package/dist/audio/send.js +118 -0
- package/dist/audio/sprites.d.ts +59 -0
- package/dist/audio/sprites.js +43 -0
- package/dist/audio/synth.d.ts +103 -0
- package/dist/audio/synth.js +197 -0
- package/dist/audio/variations.d.ts +25 -0
- package/dist/audio/variations.js +55 -0
- package/dist/audio/zones.d.ts +100 -0
- package/dist/audio/zones.js +167 -0
- package/dist/core/detached-surface.d.ts +44 -0
- package/dist/core/detached-surface.js +104 -0
- package/dist/core/events.d.ts +24 -0
- package/dist/core/events.js +43 -0
- package/dist/core/game.d.ts +409 -0
- package/dist/core/game.js +530 -0
- package/dist/core/hash.d.ts +24 -0
- package/dist/core/hash.js +49 -0
- package/dist/core/index.d.ts +17 -0
- package/dist/core/index.js +9 -0
- package/dist/core/loop.d.ts +113 -0
- package/dist/core/loop.js +185 -0
- package/dist/core/math.d.ts +58 -0
- package/dist/core/math.js +210 -0
- package/dist/core/noise.d.ts +40 -0
- package/dist/core/noise.js +247 -0
- package/dist/core/pool.d.ts +42 -0
- package/dist/core/pool.js +85 -0
- package/dist/core/random.d.ts +61 -0
- package/dist/core/random.js +199 -0
- package/dist/core/scene.d.ts +79 -0
- package/dist/core/scene.js +195 -0
- package/dist/core/timer.d.ts +66 -0
- package/dist/core/timer.js +286 -0
- package/dist/fx/billboard-wgsl.d.ts +29 -0
- package/dist/fx/billboard-wgsl.js +158 -0
- package/dist/fx/billboard.d.ts +249 -0
- package/dist/fx/billboard.js +702 -0
- package/dist/fx/debug-draw.d.ts +127 -0
- package/dist/fx/debug-draw.js +523 -0
- package/dist/fx/debug-wgsl.d.ts +7 -0
- package/dist/fx/debug-wgsl.js +32 -0
- package/dist/fx/decals-wgsl.d.ts +15 -0
- package/dist/fx/decals-wgsl.js +173 -0
- package/dist/fx/decals.d.ts +216 -0
- package/dist/fx/decals.js +607 -0
- package/dist/fx/effect.d.ts +129 -0
- package/dist/fx/effect.js +349 -0
- package/dist/fx/effects/hit-spark.json +48 -0
- package/dist/fx/effects/index.d.ts +8 -0
- package/dist/fx/effects/index.js +9 -0
- package/dist/fx/effects/magic-aura.json +47 -0
- package/dist/fx/effects/smoke-puff.json +34 -0
- package/dist/fx/emit-surface.d.ts +40 -0
- package/dist/fx/emit-surface.js +124 -0
- package/dist/fx/flicker.d.ts +30 -0
- package/dist/fx/flicker.js +42 -0
- package/dist/fx/index.d.ts +31 -0
- package/dist/fx/index.js +20 -0
- package/dist/fx/particles-wgsl.d.ts +57 -0
- package/dist/fx/particles-wgsl.js +828 -0
- package/dist/fx/particles.d.ts +566 -0
- package/dist/fx/particles.js +1533 -0
- package/dist/fx/random.d.ts +15 -0
- package/dist/fx/random.js +20 -0
- package/dist/fx/sky-wgsl.d.ts +23 -0
- package/dist/fx/sky-wgsl.js +127 -0
- package/dist/fx/sky.d.ts +96 -0
- package/dist/fx/sky.js +175 -0
- package/dist/fx/text-atlas.d.ts +143 -0
- package/dist/fx/text-atlas.js +327 -0
- package/dist/fx/trail-wgsl.d.ts +11 -0
- package/dist/fx/trail-wgsl.js +42 -0
- package/dist/fx/trail.d.ts +194 -0
- package/dist/fx/trail.js +555 -0
- package/dist/fx/water-wgsl.d.ts +34 -0
- package/dist/fx/water-wgsl.js +197 -0
- package/dist/fx/water.d.ts +176 -0
- package/dist/fx/water.js +371 -0
- package/dist/geom/collide/bvh.d.ts +151 -0
- package/dist/geom/collide/bvh.js +493 -0
- package/dist/geom/collide/debug.d.ts +14 -0
- package/dist/geom/collide/debug.js +74 -0
- package/dist/geom/collide/grid.d.ts +26 -0
- package/dist/geom/collide/grid.js +91 -0
- package/dist/geom/collide/index.d.ts +8 -0
- package/dist/geom/collide/index.js +8 -0
- package/dist/geom/collide/queries.d.ts +70 -0
- package/dist/geom/collide/queries.js +583 -0
- package/dist/geom/collide/serialize.d.ts +14 -0
- package/dist/geom/collide/serialize.js +145 -0
- package/dist/geom/collide/shapes.d.ts +161 -0
- package/dist/geom/collide/shapes.js +686 -0
- package/dist/geom/collide/slide.d.ts +66 -0
- package/dist/geom/collide/slide.js +375 -0
- package/dist/geom/collide/tile-slide.d.ts +88 -0
- package/dist/geom/collide/tile-slide.js +255 -0
- package/dist/geom/geometry.d.ts +95 -0
- package/dist/geom/geometry.js +322 -0
- package/dist/geom/heightfield.d.ts +72 -0
- package/dist/geom/heightfield.js +295 -0
- package/dist/geom/hull.d.ts +27 -0
- package/dist/geom/hull.js +279 -0
- package/dist/geom/index.d.ts +35 -0
- package/dist/geom/index.js +23 -0
- package/dist/geom/iso.d.ts +74 -0
- package/dist/geom/iso.js +89 -0
- package/dist/geom/lod.d.ts +29 -0
- package/dist/geom/lod.js +27 -0
- package/dist/geom/ops.d.ts +47 -0
- package/dist/geom/ops.js +285 -0
- package/dist/geom/primitives.d.ts +97 -0
- package/dist/geom/primitives.js +359 -0
- package/dist/geom/shapes.d.ts +43 -0
- package/dist/geom/shapes.js +88 -0
- package/dist/geom/simplify.d.ts +38 -0
- package/dist/geom/simplify.js +519 -0
- package/dist/geom/split.d.ts +37 -0
- package/dist/geom/split.js +413 -0
- package/dist/geom/sweep.d.ts +83 -0
- package/dist/geom/sweep.js +534 -0
- package/dist/geom/tangents.d.ts +16 -0
- package/dist/geom/tangents.js +124 -0
- package/dist/geom/triangulate.d.ts +19 -0
- package/dist/geom/triangulate.js +147 -0
- package/dist/host/default.d.ts +10 -0
- package/dist/host/default.js +10 -0
- package/dist/host/index.d.ts +4 -0
- package/dist/host/index.js +3 -0
- package/dist/host/types.d.ts +144 -0
- package/dist/host/types.js +1 -0
- package/dist/host/web-links.d.ts +38 -0
- package/dist/host/web-links.js +110 -0
- package/dist/host/web.d.ts +30 -0
- package/dist/host/web.js +216 -0
- package/dist/host/xr.d.ts +24 -0
- package/dist/host/xr.js +59 -0
- package/dist/i18n/i18n.d.ts +59 -0
- package/dist/i18n/i18n.js +241 -0
- package/dist/i18n/index.d.ts +3 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/message.d.ts +72 -0
- package/dist/i18n/message.js +369 -0
- package/dist/i18n/negotiate.d.ts +17 -0
- package/dist/i18n/negotiate.js +58 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +1 -0
- package/dist/input/bindings.d.ts +31 -0
- package/dist/input/bindings.js +141 -0
- package/dist/input/clock.d.ts +44 -0
- package/dist/input/clock.js +49 -0
- package/dist/input/follow.d.ts +133 -0
- package/dist/input/follow.js +218 -0
- package/dist/input/gestures.d.ts +281 -0
- package/dist/input/gestures.js +662 -0
- package/dist/input/glyphs.d.ts +35 -0
- package/dist/input/glyphs.js +216 -0
- package/dist/input/gyro.d.ts +85 -0
- package/dist/input/gyro.js +140 -0
- package/dist/input/index.d.ts +19 -0
- package/dist/input/index.js +16 -0
- package/dist/input/input.d.ts +543 -0
- package/dist/input/input.js +1492 -0
- package/dist/input/look.d.ts +327 -0
- package/dist/input/look.js +681 -0
- package/dist/input/magnify.d.ts +177 -0
- package/dist/input/magnify.js +131 -0
- package/dist/input/pointer-dispatch.d.ts +138 -0
- package/dist/input/pointer-dispatch.js +180 -0
- package/dist/input/pointer-router.d.ts +204 -0
- package/dist/input/pointer-router.js +533 -0
- package/dist/input/pointer-sources.d.ts +164 -0
- package/dist/input/pointer-sources.js +306 -0
- package/dist/input/rays.d.ts +138 -0
- package/dist/input/rays.js +615 -0
- package/dist/input/record.d.ts +209 -0
- package/dist/input/record.js +601 -0
- package/dist/input/touch-zones.d.ts +147 -0
- package/dist/input/touch-zones.js +300 -0
- package/dist/input/types.d.ts +158 -0
- package/dist/input/types.js +1 -0
- package/dist/input/xr-source.d.ts +53 -0
- package/dist/input/xr-source.js +164 -0
- package/dist/nav/astar.d.ts +45 -0
- package/dist/nav/astar.js +182 -0
- package/dist/nav/corridor.d.ts +40 -0
- package/dist/nav/corridor.js +95 -0
- package/dist/nav/crowd.d.ts +94 -0
- package/dist/nav/crowd.js +624 -0
- package/dist/nav/flow.d.ts +61 -0
- package/dist/nav/flow.js +193 -0
- package/dist/nav/grid.d.ts +108 -0
- package/dist/nav/grid.js +210 -0
- package/dist/nav/heap.d.ts +22 -0
- package/dist/nav/heap.js +92 -0
- package/dist/nav/index.d.ts +37 -0
- package/dist/nav/index.js +19 -0
- package/dist/nav/mesh/areas.d.ts +44 -0
- package/dist/nav/mesh/areas.js +98 -0
- package/dist/nav/mesh/bake-options.d.ts +33 -0
- package/dist/nav/mesh/bake-options.js +76 -0
- package/dist/nav/mesh/contour.d.ts +22 -0
- package/dist/nav/mesh/contour.js +323 -0
- package/dist/nav/mesh/flow3.d.ts +35 -0
- package/dist/nav/mesh/flow3.js +229 -0
- package/dist/nav/mesh/links.d.ts +38 -0
- package/dist/nav/mesh/links.js +72 -0
- package/dist/nav/mesh/mesh-path.d.ts +152 -0
- package/dist/nav/mesh/mesh-path.js +643 -0
- package/dist/nav/mesh/mesh-reach.d.ts +78 -0
- package/dist/nav/mesh/mesh-reach.js +450 -0
- package/dist/nav/mesh/navmesh.d.ts +117 -0
- package/dist/nav/mesh/navmesh.js +647 -0
- package/dist/nav/mesh/polymesh.d.ts +24 -0
- package/dist/nav/mesh/polymesh.js +384 -0
- package/dist/nav/mesh/regions.d.ts +12 -0
- package/dist/nav/mesh/regions.js +367 -0
- package/dist/nav/mesh/serialize.d.ts +13 -0
- package/dist/nav/mesh/serialize.js +197 -0
- package/dist/nav/mesh/voxelize.d.ts +111 -0
- package/dist/nav/mesh/voxelize.js +552 -0
- package/dist/nav/obstacles.d.ts +75 -0
- package/dist/nav/obstacles.js +294 -0
- package/dist/nav/path.d.ts +59 -0
- package/dist/nav/path.js +177 -0
- package/dist/nav/query-queue.d.ts +46 -0
- package/dist/nav/query-queue.js +308 -0
- package/dist/nav/reach.d.ts +53 -0
- package/dist/nav/reach.js +148 -0
- package/dist/nav/steer.d.ts +36 -0
- package/dist/nav/steer.js +78 -0
- package/dist/platform/boot.d.ts +28 -0
- package/dist/platform/boot.js +43 -0
- package/dist/platform/device-mode.d.ts +40 -0
- package/dist/platform/device-mode.js +104 -0
- package/dist/platform/device.d.ts +31 -0
- package/dist/platform/device.js +91 -0
- package/dist/platform/environment.d.ts +42 -0
- package/dist/platform/environment.js +82 -0
- package/dist/platform/gpu.d.ts +40 -0
- package/dist/platform/gpu.js +57 -0
- package/dist/platform/index.d.ts +18 -0
- package/dist/platform/index.js +10 -0
- package/dist/platform/letterbox.d.ts +43 -0
- package/dist/platform/letterbox.js +57 -0
- package/dist/platform/links.d.ts +20 -0
- package/dist/platform/links.js +43 -0
- package/dist/platform/screens.d.ts +36 -0
- package/dist/platform/screens.js +138 -0
- package/dist/platform/surface.d.ts +72 -0
- package/dist/platform/surface.js +157 -0
- package/dist/platform/xr-fake.d.ts +168 -0
- package/dist/platform/xr-fake.js +434 -0
- package/dist/platform/xr-surface.d.ts +120 -0
- package/dist/platform/xr-surface.js +214 -0
- package/dist/platform/xr-types.d.ts +262 -0
- package/dist/post/ao.d.ts +12 -0
- package/dist/post/ao.js +136 -0
- package/dist/post/blend.d.ts +27 -0
- package/dist/post/blend.js +129 -0
- package/dist/post/depth-pass.d.ts +43 -0
- package/dist/post/depth-pass.js +118 -0
- package/dist/post/dof.d.ts +1 -0
- package/dist/post/dof.js +66 -0
- package/dist/post/exposure.d.ts +80 -0
- package/dist/post/exposure.js +322 -0
- package/dist/post/index.d.ts +12 -0
- package/dist/post/index.js +11 -0
- package/dist/post/lens-dirt.d.ts +13 -0
- package/dist/post/lens-dirt.js +91 -0
- package/dist/post/lut.d.ts +19 -0
- package/dist/post/lut.js +50 -0
- package/dist/post/motion-blur.d.ts +9 -0
- package/dist/post/motion-blur.js +78 -0
- package/dist/post/post-stack.d.ts +302 -0
- package/dist/post/post-stack.js +1137 -0
- package/dist/post/settings.d.ts +485 -0
- package/dist/post/settings.js +416 -0
- package/dist/post/shaders.d.ts +25 -0
- package/dist/post/shaders.js +410 -0
- package/dist/post/ssr.d.ts +16 -0
- package/dist/post/ssr.js +155 -0
- package/dist/post/taa.d.ts +74 -0
- package/dist/post/taa.js +235 -0
- package/dist/post/white-balance.d.ts +25 -0
- package/dist/post/white-balance.js +98 -0
- package/dist/render/bindings.d.ts +98 -0
- package/dist/render/bindings.js +281 -0
- package/dist/render/blend.d.ts +13 -0
- package/dist/render/blend.js +26 -0
- package/dist/render/camera-2d.d.ts +72 -0
- package/dist/render/camera-2d.js +92 -0
- package/dist/render/camera.d.ts +302 -0
- package/dist/render/camera.js +671 -0
- package/dist/render/color.d.ts +16 -0
- package/dist/render/color.js +41 -0
- package/dist/render/compressed.d.ts +104 -0
- package/dist/render/compressed.js +248 -0
- package/dist/render/diagnostics.d.ts +15 -0
- package/dist/render/diagnostics.js +43 -0
- package/dist/render/dynamic-resolution.d.ts +70 -0
- package/dist/render/dynamic-resolution.js +126 -0
- package/dist/render/fake-gpu.d.ts +204 -0
- package/dist/render/fake-gpu.js +426 -0
- package/dist/render/flipbook.d.ts +56 -0
- package/dist/render/flipbook.js +87 -0
- package/dist/render/frame.d.ts +278 -0
- package/dist/render/frame.js +174 -0
- package/dist/render/fullscreen.d.ts +54 -0
- package/dist/render/fullscreen.js +91 -0
- package/dist/render/gpu-timer.d.ts +73 -0
- package/dist/render/gpu-timer.js +186 -0
- package/dist/render/index.d.ts +53 -0
- package/dist/render/index.js +29 -0
- package/dist/render/instance-list.d.ts +185 -0
- package/dist/render/instance-list.js +547 -0
- package/dist/render/lights.d.ts +181 -0
- package/dist/render/lights.js +233 -0
- package/dist/render/lod.d.ts +54 -0
- package/dist/render/lod.js +52 -0
- package/dist/render/material.d.ts +165 -0
- package/dist/render/material.js +292 -0
- package/dist/render/mesh.d.ts +284 -0
- package/dist/render/mesh.js +472 -0
- package/dist/render/mipmap.d.ts +16 -0
- package/dist/render/mipmap.js +121 -0
- package/dist/render/parallax.d.ts +50 -0
- package/dist/render/parallax.js +47 -0
- package/dist/render/pbr-wgsl.d.ts +31 -0
- package/dist/render/pbr-wgsl.js +119 -0
- package/dist/render/ping-pong.d.ts +42 -0
- package/dist/render/ping-pong.js +74 -0
- package/dist/render/renderer.d.ts +741 -0
- package/dist/render/renderer.js +2486 -0
- package/dist/render/scene-pipelines.d.ts +44 -0
- package/dist/render/scene-pipelines.js +92 -0
- package/dist/render/scene-target.d.ts +170 -0
- package/dist/render/scene-target.js +450 -0
- package/dist/render/shadow.d.ts +74 -0
- package/dist/render/shadow.js +208 -0
- package/dist/render/skin.d.ts +112 -0
- package/dist/render/skin.js +240 -0
- package/dist/render/snapshot.d.ts +36 -0
- package/dist/render/snapshot.js +34 -0
- package/dist/render/standard.d.ts +162 -0
- package/dist/render/standard.js +263 -0
- package/dist/render/texture.d.ts +142 -0
- package/dist/render/texture.js +228 -0
- package/dist/render/tile-layer.d.ts +110 -0
- package/dist/render/tile-layer.js +304 -0
- package/dist/render/transform.d.ts +115 -0
- package/dist/render/transform.js +318 -0
- package/dist/render/wgsl.d.ts +131 -0
- package/dist/render/wgsl.js +528 -0
- package/dist/save/codec.d.ts +49 -0
- package/dist/save/codec.js +169 -0
- package/dist/save/index.d.ts +8 -0
- package/dist/save/index.js +8 -0
- package/dist/save/journal.d.ts +24 -0
- package/dist/save/journal.js +102 -0
- package/dist/save/migrate.d.ts +15 -0
- package/dist/save/migrate.js +37 -0
- package/dist/save/schema.d.ts +72 -0
- package/dist/save/schema.js +154 -0
- package/dist/save/settings.d.ts +28 -0
- package/dist/save/settings.js +59 -0
- package/dist/save/slots.d.ts +56 -0
- package/dist/save/slots.js +200 -0
- package/dist/save/storage.d.ts +35 -0
- package/dist/save/storage.js +62 -0
- package/dist/save/store.d.ts +114 -0
- package/dist/save/store.js +269 -0
- package/dist/testing/fake-host.d.ts +103 -0
- package/dist/testing/fake-host.js +163 -0
- package/dist/testing/fixed-clock.d.ts +25 -0
- package/dist/testing/fixed-clock.js +30 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/test-game.d.ts +76 -0
- package/dist/testing/test-game.js +92 -0
- package/dist/tween/ease.d.ts +77 -0
- package/dist/tween/ease.js +192 -0
- package/dist/tween/index.d.ts +8 -0
- package/dist/tween/index.js +7 -0
- package/dist/tween/timeline.d.ts +78 -0
- package/dist/tween/timeline.js +269 -0
- package/dist/tween/tween.d.ts +168 -0
- package/dist/tween/tween.js +320 -0
- package/dist/ui/anchor.d.ts +206 -0
- package/dist/ui/anchor.js +307 -0
- package/dist/ui/caption.d.ts +122 -0
- package/dist/ui/caption.js +286 -0
- package/dist/ui/cursor.d.ts +105 -0
- package/dist/ui/cursor.js +261 -0
- package/dist/ui/dom.d.ts +30 -0
- package/dist/ui/dom.js +92 -0
- package/dist/ui/floats.d.ts +86 -0
- package/dist/ui/floats.js +260 -0
- package/dist/ui/hud.d.ts +198 -0
- package/dist/ui/hud.js +431 -0
- package/dist/ui/index.d.ts +37 -0
- package/dist/ui/index.js +34 -0
- package/dist/ui/inventory-card.d.ts +52 -0
- package/dist/ui/inventory-card.js +173 -0
- package/dist/ui/inventory-context.d.ts +29 -0
- package/dist/ui/inventory-context.js +125 -0
- package/dist/ui/inventory-drag.d.ts +63 -0
- package/dist/ui/inventory-drag.js +394 -0
- package/dist/ui/inventory-grid.d.ts +66 -0
- package/dist/ui/inventory-grid.js +625 -0
- package/dist/ui/inventory-radial.d.ts +39 -0
- package/dist/ui/inventory-radial.js +168 -0
- package/dist/ui/inventory.d.ts +128 -0
- package/dist/ui/inventory.js +154 -0
- package/dist/ui/layout.d.ts +356 -0
- package/dist/ui/layout.js +856 -0
- package/dist/ui/link.d.ts +64 -0
- package/dist/ui/link.js +155 -0
- package/dist/ui/loading.d.ts +40 -0
- package/dist/ui/loading.js +157 -0
- package/dist/ui/loupe.d.ts +74 -0
- package/dist/ui/loupe.js +164 -0
- package/dist/ui/menu-nav.d.ts +33 -0
- package/dist/ui/menu-nav.js +28 -0
- package/dist/ui/minimap-canvas.d.ts +145 -0
- package/dist/ui/minimap-canvas.js +460 -0
- package/dist/ui/notify.d.ts +40 -0
- package/dist/ui/notify.js +141 -0
- package/dist/ui/orb.d.ts +53 -0
- package/dist/ui/orb.js +304 -0
- package/dist/ui/overlay.d.ts +213 -0
- package/dist/ui/overlay.js +394 -0
- package/dist/ui/padnav.d.ts +53 -0
- package/dist/ui/padnav.js +146 -0
- package/dist/ui/perf.d.ts +130 -0
- package/dist/ui/perf.js +329 -0
- package/dist/ui/rotate-card.d.ts +54 -0
- package/dist/ui/rotate-card.js +97 -0
- package/dist/ui/stack.d.ts +128 -0
- package/dist/ui/stack.js +312 -0
- package/dist/ui/styles.d.ts +13 -0
- package/dist/ui/styles.js +200 -0
- package/dist/ui/text-scale.d.ts +67 -0
- package/dist/ui/text-scale.js +102 -0
- package/dist/ui/theme.d.ts +70 -0
- package/dist/ui/theme.js +98 -0
- package/dist/ui/toast.d.ts +23 -0
- package/dist/ui/toast.js +46 -0
- package/dist/ui/tooltip.d.ts +89 -0
- package/dist/ui/tooltip.js +333 -0
- package/dist/ui/widgets-2.d.ts +134 -0
- package/dist/ui/widgets-2.js +399 -0
- package/dist/ui/widgets-3.d.ts +91 -0
- package/dist/ui/widgets-3.js +212 -0
- package/dist/ui/widgets.d.ts +34 -0
- package/dist/ui/widgets.js +50 -0
- package/dist/ui/world-panel/index.d.ts +5 -0
- package/dist/ui/world-panel/index.js +5 -0
- package/dist/ui/world-panel/layout.d.ts +38 -0
- package/dist/ui/world-panel/layout.js +68 -0
- package/dist/ui/world-panel/paint.d.ts +96 -0
- package/dist/ui/world-panel/paint.js +136 -0
- package/dist/ui/world-panel/panel.d.ts +235 -0
- package/dist/ui/world-panel/panel.js +762 -0
- package/dist/ui/world-panel/wgsl.d.ts +10 -0
- package/dist/ui/world-panel/wgsl.js +52 -0
- package/dist/ui/world-panel/widgets.d.ts +207 -0
- package/dist/ui/world-panel/widgets.js +569 -0
- package/dist/voxel/chunks.d.ts +77 -0
- package/dist/voxel/chunks.js +149 -0
- package/dist/voxel/grid.d.ts +84 -0
- package/dist/voxel/grid.js +223 -0
- package/dist/voxel/index.d.ts +22 -0
- package/dist/voxel/index.js +7 -0
- package/dist/voxel/mesher-worker.d.ts +14 -0
- package/dist/voxel/mesher-worker.js +47 -0
- package/dist/voxel/mesher.d.ts +73 -0
- package/dist/voxel/mesher.js +306 -0
- package/dist/voxel/ray.d.ts +32 -0
- package/dist/voxel/ray.js +73 -0
- package/dist/voxel/wgsl.d.ts +16 -0
- package/dist/voxel/wgsl.js +28 -0
- package/dist/voxel/worker-client.d.ts +79 -0
- package/dist/voxel/worker-client.js +122 -0
- 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 {};
|