@vibecook/ice 0.10.0 → 0.14.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 (380) hide show
  1. package/README.md +79 -50
  2. package/dist/chunk-BA7XJC27.js +2429 -0
  3. package/dist/chunk-BA7XJC27.js.map +1 -0
  4. package/dist/chunk-BKV4ZEU3.js +1 -0
  5. package/dist/chunk-BKV4ZEU3.js.map +1 -0
  6. package/dist/{chunk-5FQS7V2C.js → chunk-DYK6KNLG.js} +13303 -7485
  7. package/dist/chunk-DYK6KNLG.js.map +1 -0
  8. package/dist/chunk-ENIFIUEP.js +155 -0
  9. package/dist/chunk-ENIFIUEP.js.map +1 -0
  10. package/dist/chunk-IBWWLA6D.js +634 -0
  11. package/dist/chunk-IBWWLA6D.js.map +1 -0
  12. package/dist/{chunk-OR5FNVUE.js → chunk-JS6PG6YD.js} +398 -167
  13. package/dist/chunk-JS6PG6YD.js.map +1 -0
  14. package/dist/chunk-QXOCF56A.js +148 -0
  15. package/dist/chunk-QXOCF56A.js.map +1 -0
  16. package/dist/chunk-ZPUPBULB.js +7399 -0
  17. package/dist/chunk-ZPUPBULB.js.map +1 -0
  18. package/dist/desk-engine.js +36 -0
  19. package/dist/desk-engine.js.map +1 -0
  20. package/dist/desk-kit.js +244 -0
  21. package/dist/desk-kit.js.map +1 -0
  22. package/dist/desk-objects.js +12728 -0
  23. package/dist/desk-objects.js.map +1 -0
  24. package/dist/desk.js +469 -0
  25. package/dist/desk.js.map +1 -0
  26. package/dist/devtools.js +233 -189
  27. package/dist/devtools.js.map +1 -1
  28. package/dist/dom.js +7 -19
  29. package/dist/index.js +232 -20
  30. package/dist/kernel.js +53 -25
  31. package/dist/react.js +1045 -38
  32. package/dist/react.js.map +1 -1
  33. package/dist/types/packages/core/src/behavior/define-behavior.d.ts +11 -0
  34. package/dist/types/packages/core/src/behavior/runtime.d.ts +4 -0
  35. package/dist/types/packages/core/src/canvas/define-canvas-type.d.ts +86 -0
  36. package/dist/types/packages/core/src/canvas/define-container.d.ts +17 -0
  37. package/dist/types/packages/core/src/canvas/diagnostics.d.ts +27 -0
  38. package/dist/types/packages/core/src/canvas/engine-catalog.d.ts +70 -0
  39. package/dist/types/packages/core/src/canvas/extensions.d.ts +125 -0
  40. package/dist/types/packages/core/src/canvas/frame-behavior-host.d.ts +16 -0
  41. package/dist/types/packages/core/src/canvas/frame-preview.d.ts +79 -0
  42. package/dist/types/packages/core/src/canvas/frame-projection.d.ts +38 -0
  43. package/dist/types/packages/core/src/canvas/frame-view.d.ts +36 -0
  44. package/dist/types/packages/core/src/canvas/migrate.d.ts +14 -0
  45. package/dist/types/packages/core/src/canvas/placement.d.ts +30 -0
  46. package/dist/types/packages/core/src/canvas/presentation-transition.d.ts +100 -0
  47. package/dist/types/packages/core/src/canvas/runtime-extension-host.d.ts +16 -0
  48. package/dist/types/packages/core/src/canvas/session.d.ts +47 -0
  49. package/dist/types/packages/core/src/catalog/camera-derived.d.ts +16 -27
  50. package/dist/types/packages/core/src/catalog/desk.d.ts +326 -0
  51. package/dist/types/packages/core/src/catalog/gesture.d.ts +51 -0
  52. package/dist/types/packages/core/src/catalog/graph.d.ts +2 -2
  53. package/dist/types/packages/core/src/catalog/index.d.ts +2 -0
  54. package/dist/types/packages/core/src/catalog/pointer.d.ts +42 -0
  55. package/dist/types/packages/core/src/catalog/selection-presence.d.ts +7 -0
  56. package/dist/types/packages/core/src/catalog/settings-resources.d.ts +28 -2
  57. package/dist/types/packages/core/src/catalog/surface.d.ts +1 -0
  58. package/dist/types/packages/core/src/doc/doc-commit-sink.d.ts +18 -2
  59. package/dist/types/packages/core/src/doc/doc-kit.d.ts +21 -2
  60. package/dist/types/packages/core/src/doc/envelope.d.ts +5 -2
  61. package/dist/types/packages/core/src/doc/schema-migrate.d.ts +1 -1
  62. package/dist/types/packages/core/src/doc/version-gate.d.ts +21 -3
  63. package/dist/types/packages/core/src/engine/commit-sink.d.ts +10 -1
  64. package/dist/types/packages/core/src/engine/engine.d.ts +6 -0
  65. package/dist/types/packages/core/src/engine/frame-control.d.ts +74 -0
  66. package/dist/types/packages/core/src/engine/guests.d.ts +4 -1
  67. package/dist/types/packages/core/src/engine/world-doors.d.ts +12 -0
  68. package/dist/types/packages/core/src/facade/create-canvas-engine.d.ts +146 -13
  69. package/dist/types/packages/core/src/index.d.ts +34 -13
  70. package/dist/types/packages/core/src/input/queue.d.ts +3 -1
  71. package/dist/types/packages/core/src/interaction/install.d.ts +30 -0
  72. package/dist/types/packages/core/src/interaction/wakes.d.ts +24 -0
  73. package/dist/types/packages/core/src/nav/nav-geometry.d.ts +100 -0
  74. package/dist/types/packages/core/src/nav/nested-canvas.d.ts +47 -4
  75. package/dist/types/packages/core/src/ops/cascade.d.ts +2 -1
  76. package/dist/types/packages/core/src/ops/claims.d.ts +6 -0
  77. package/dist/types/packages/core/src/ops/insert.d.ts +4 -0
  78. package/dist/types/packages/core/src/ops/point-pick.d.ts +4 -1
  79. package/dist/types/packages/core/src/ops/sibling-order.d.ts +14 -4
  80. package/dist/types/packages/core/src/ops/tray.d.ts +48 -0
  81. package/dist/types/packages/core/src/presence/presence-kit.d.ts +5 -0
  82. package/dist/types/packages/core/src/schema/meta.d.ts +10 -0
  83. package/dist/types/packages/core/src/schema/prefab.d.ts +8 -0
  84. package/dist/types/packages/core/src/settings/defaults.d.ts +25 -6
  85. package/dist/types/packages/core/src/surface/gpu-device.d.ts +55 -0
  86. package/dist/types/packages/core/src/systems/camera-sim.d.ts +29 -0
  87. package/dist/types/packages/core/src/systems/chrome.d.ts +15 -23
  88. package/dist/types/packages/core/src/systems/drag-mods.d.ts +34 -0
  89. package/dist/types/packages/core/src/systems/held.d.ts +71 -0
  90. package/dist/types/packages/core/src/systems/insert-ghost.d.ts +2 -0
  91. package/dist/types/packages/core/src/systems/l0-input.d.ts +14 -0
  92. package/dist/types/packages/core/src/systems/l1-pick.d.ts +37 -1
  93. package/dist/types/packages/core/src/systems/l2-arbitrate.d.ts +18 -4
  94. package/dist/types/packages/core/src/systems/l3-behave.d.ts +4 -1
  95. package/dist/types/packages/core/src/systems/l3-claim.d.ts +7 -0
  96. package/dist/types/packages/core/src/systems/l3-connect.d.ts +1 -1
  97. package/dist/types/packages/core/src/systems/l3-drop.d.ts +30 -1
  98. package/dist/types/packages/core/src/systems/l3-marquee.d.ts +2 -1
  99. package/dist/types/packages/core/src/systems/l3-ports.d.ts +1 -1
  100. package/dist/types/packages/core/src/systems/l4-cursor.d.ts +5 -0
  101. package/dist/types/packages/core/src/systems/nav-flight.d.ts +85 -3
  102. package/dist/types/packages/core/src/systems/nav-tap.d.ts +44 -0
  103. package/dist/types/packages/core/src/systems/press-wheel.d.ts +11 -0
  104. package/dist/types/packages/core/src/systems/tray.d.ts +108 -0
  105. package/dist/types/packages/core/src/systems/zoom-through.d.ts +30 -0
  106. package/dist/types/packages/core/src/tools/define-tool.d.ts +10 -0
  107. package/dist/types/packages/core/src/widget/define-widget.d.ts +166 -63
  108. package/dist/types/packages/core/src/widget/equip.d.ts +14 -2
  109. package/dist/types/packages/core/src/widget/held-tools.d.ts +83 -0
  110. package/dist/types/packages/core/src/widget/menu-actions.d.ts +44 -0
  111. package/dist/types/packages/core/src/widget/mount-store.d.ts +21 -46
  112. package/dist/types/packages/core/src/widget/spawn.d.ts +1 -1
  113. package/dist/types/packages/desk/src/assets/blue-noise.gen.d.ts +10 -0
  114. package/dist/types/packages/desk/src/card/card.d.ts +103 -0
  115. package/dist/types/packages/desk/src/compose/ambient.d.ts +59 -0
  116. package/dist/types/packages/desk/src/compose/builder.d.ts +285 -0
  117. package/dist/types/packages/desk/src/compose/children.d.ts +3 -0
  118. package/dist/types/packages/desk/src/compose/index.d.ts +14 -0
  119. package/dist/types/packages/desk/src/compose/marks.d.ts +126 -0
  120. package/dist/types/packages/desk/src/compose/pick.d.ts +5 -0
  121. package/dist/types/packages/desk/src/compose/reflector.d.ts +111 -0
  122. package/dist/types/packages/desk/src/compose/tap.d.ts +5 -0
  123. package/dist/types/packages/desk/src/docs.d.ts +23 -0
  124. package/dist/types/packages/desk/src/engine/budget.d.ts +38 -0
  125. package/dist/types/packages/desk/src/engine/device.d.ts +54 -0
  126. package/dist/types/packages/desk/src/engine/index.d.ts +5 -0
  127. package/dist/types/packages/desk/src/engine/pipeline.d.ts +36 -0
  128. package/dist/types/packages/desk/src/engine/rasters.d.ts +66 -0
  129. package/dist/types/packages/desk/src/engine/records.d.ts +56 -0
  130. package/dist/types/packages/desk/src/engine/shader.d.ts +22 -0
  131. package/dist/types/packages/desk/src/engine/struct.d.ts +39 -0
  132. package/dist/types/packages/desk/src/engine/target.d.ts +26 -0
  133. package/dist/types/packages/desk/src/gpu-ablation.d.ts +61 -0
  134. package/dist/types/packages/desk/src/gpu-memory.d.ts +54 -0
  135. package/dist/types/packages/desk/src/gpu-profiler.d.ts +141 -0
  136. package/dist/types/packages/desk/src/gpu-wrap.d.ts +8 -0
  137. package/dist/types/packages/desk/src/ground.d.ts +388 -0
  138. package/dist/types/packages/desk/src/hold/focus.d.ts +53 -0
  139. package/dist/types/packages/desk/src/hold/pose.d.ts +132 -0
  140. package/dist/types/packages/desk/src/hold/shaders.d.ts +9 -0
  141. package/dist/types/packages/desk/src/host/editor.d.ts +18 -0
  142. package/dist/types/packages/desk/src/host/index.d.ts +9 -0
  143. package/dist/types/packages/desk/src/host/ink.d.ts +18 -0
  144. package/dist/types/packages/desk/src/host/layer.d.ts +430 -0
  145. package/dist/types/packages/desk/src/host/picture.d.ts +2 -0
  146. package/dist/types/packages/desk/src/host/surface.d.ts +5 -0
  147. package/dist/types/packages/desk/src/index.d.ts +13 -0
  148. package/dist/types/packages/desk/src/kind.d.ts +187 -0
  149. package/dist/types/packages/desk/src/kinds/world.d.ts +429 -0
  150. package/dist/types/packages/desk/src/kit/arrays.d.ts +88 -0
  151. package/dist/types/packages/desk/src/kit/blobs.d.ts +40 -0
  152. package/dist/types/packages/desk/src/kit/book.d.ts +2 -0
  153. package/dist/types/packages/desk/src/kit/editor.d.ts +103 -0
  154. package/dist/types/packages/desk/src/kit/eye.d.ts +37 -0
  155. package/dist/types/packages/desk/src/kit/hold.d.ts +1 -0
  156. package/dist/types/packages/desk/src/kit/index.d.ts +26 -0
  157. package/dist/types/packages/desk/src/kit/inside.d.ts +116 -0
  158. package/dist/types/packages/desk/src/kit/layer.d.ts +159 -0
  159. package/dist/types/packages/desk/src/kit/light.d.ts +3 -0
  160. package/dist/types/packages/desk/src/kit/mesh.d.ts +29 -0
  161. package/dist/types/packages/desk/src/kit/mips.d.ts +2 -0
  162. package/dist/types/packages/desk/src/kit/nav.d.ts +2 -0
  163. package/dist/types/packages/desk/src/kit/paper-tex.d.ts +5 -0
  164. package/dist/types/packages/desk/src/kit/physics.d.ts +44 -0
  165. package/dist/types/packages/desk/src/kit/place.d.ts +44 -0
  166. package/dist/types/packages/desk/src/kit/print.d.ts +30 -0
  167. package/dist/types/packages/desk/src/kit/raster.d.ts +34 -0
  168. package/dist/types/packages/desk/src/kit/sdf.d.ts +1 -0
  169. package/dist/types/packages/desk/src/kit/seeds.d.ts +11 -0
  170. package/dist/types/packages/desk/src/kit/services.d.ts +34 -0
  171. package/dist/types/packages/desk/src/kit/springs.d.ts +12 -0
  172. package/dist/types/packages/desk/src/kit/strokes.d.ts +93 -0
  173. package/dist/types/packages/desk/src/kit/text.d.ts +142 -0
  174. package/dist/types/packages/desk/src/kit/uniform.d.ts +8 -0
  175. package/dist/types/packages/desk/src/kit/view.d.ts +39 -0
  176. package/dist/types/packages/desk/src/kit/wgsl.d.ts +15 -0
  177. package/dist/types/packages/desk/src/lattice/line.d.ts +15 -0
  178. package/dist/types/packages/desk/src/lattice/lod.d.ts +52 -0
  179. package/dist/types/packages/desk/src/lattice/ruler.d.ts +88 -0
  180. package/dist/types/packages/desk/src/marks/assemble.d.ts +65 -0
  181. package/dist/types/packages/desk/src/marks/ease.d.ts +4 -0
  182. package/dist/types/packages/desk/src/marks/laser.d.ts +41 -0
  183. package/dist/types/packages/desk/src/marks/layout.d.ts +167 -0
  184. package/dist/types/packages/desk/src/marks/pass.d.ts +59 -0
  185. package/dist/types/packages/desk/src/marks/shaders.d.ts +12 -0
  186. package/dist/types/packages/desk/src/mat/grid.d.ts +50 -0
  187. package/dist/types/packages/desk/src/mat/lamp.d.ts +14 -0
  188. package/dist/types/packages/desk/src/mat/layout.d.ts +144 -0
  189. package/dist/types/packages/desk/src/mat/mat-pass.d.ts +83 -0
  190. package/dist/types/packages/desk/src/mat/night.d.ts +95 -0
  191. package/dist/types/packages/desk/src/mat/projector.d.ts +39 -0
  192. package/dist/types/packages/desk/src/mat/shaders.d.ts +17 -0
  193. package/dist/types/packages/desk/src/mat/tilt.d.ts +14 -0
  194. package/dist/types/packages/desk/src/nav/flight.d.ts +186 -0
  195. package/dist/types/packages/desk/src/nav/portal.d.ts +95 -0
  196. package/dist/types/packages/desk/src/object.d.ts +46 -0
  197. package/dist/types/packages/desk/src/pass-instrument.d.ts +89 -0
  198. package/dist/types/packages/desk/src/shaders.d.ts +12 -0
  199. package/dist/types/packages/desk/src/shaders.gen.d.ts +16 -0
  200. package/dist/types/packages/desk/src/submit-instrument.d.ts +36 -0
  201. package/dist/types/packages/desk/src/theme.d.ts +475 -0
  202. package/dist/types/packages/desk/src/tray/carry.d.ts +99 -0
  203. package/dist/types/packages/desk/src/tray/drawer.d.ts +113 -0
  204. package/dist/types/packages/desk/src/tray/flux.d.ts +46 -0
  205. package/dist/types/packages/desk/src/tray/index.d.ts +4 -0
  206. package/dist/types/packages/desk/src/tray/lattice.d.ts +71 -0
  207. package/dist/types/packages/desk/src/tray/layout.d.ts +7 -0
  208. package/dist/types/packages/desk/src/tray/look.d.ts +29 -0
  209. package/dist/types/packages/desk/src/tray/pass.d.ts +96 -0
  210. package/dist/types/packages/desk/src/tray/shaders.d.ts +10 -0
  211. package/dist/types/packages/desk/src/tray/specimens.d.ts +199 -0
  212. package/dist/types/packages/devtools/src/attach.d.ts +22 -8
  213. package/dist/types/packages/devtools/src/dock.d.ts +18 -14
  214. package/dist/types/packages/devtools/src/gpu-panel.d.ts +105 -0
  215. package/dist/types/packages/devtools/src/index.d.ts +5 -4
  216. package/dist/types/packages/dom/src/desk-host.d.ts +91 -0
  217. package/dist/types/packages/dom/src/host.d.ts +13 -14
  218. package/dist/types/packages/dom/src/index.d.ts +12 -10
  219. package/dist/types/packages/dom/src/loop.d.ts +18 -1
  220. package/dist/types/packages/dom/src/pointer-adapter.d.ts +5 -29
  221. package/dist/types/packages/dom/src/widget-focus.d.ts +17 -13
  222. package/dist/types/packages/ice/src/desk-engine.d.ts +2 -0
  223. package/dist/types/packages/ice/src/desk-kit.d.ts +6 -0
  224. package/dist/types/packages/ice/src/desk-objects.d.ts +5 -0
  225. package/dist/types/packages/ice/src/desk.d.ts +5 -0
  226. package/dist/types/packages/kernel/src/atlas-pack.d.ts +157 -0
  227. package/dist/types/packages/kernel/src/bezier.d.ts +0 -15
  228. package/dist/types/packages/kernel/src/coords.d.ts +0 -39
  229. package/dist/types/packages/kernel/src/index.d.ts +2 -2
  230. package/dist/types/packages/kernel/src/nav-flight.d.ts +6 -0
  231. package/dist/types/packages/kernel/src/tray.d.ts +155 -0
  232. package/dist/types/packages/objects/src/board/board-pass.d.ts +180 -0
  233. package/dist/types/packages/objects/src/board/board-pen.d.ts +36 -0
  234. package/dist/types/packages/objects/src/board/board.d.ts +104 -0
  235. package/dist/types/packages/objects/src/board/data.d.ts +31 -0
  236. package/dist/types/packages/objects/src/board/history.d.ts +33 -0
  237. package/dist/types/packages/objects/src/board/kind.d.ts +208 -0
  238. package/dist/types/packages/objects/src/board/layout.d.ts +102 -0
  239. package/dist/types/packages/objects/src/board/object.d.ts +7 -0
  240. package/dist/types/packages/objects/src/board/pen.d.ts +71 -0
  241. package/dist/types/packages/objects/src/board/shaders.d.ts +36 -0
  242. package/dist/types/packages/objects/src/board/stroke.d.ts +99 -0
  243. package/dist/types/packages/objects/src/board/theme.d.ts +150 -0
  244. package/dist/types/packages/objects/src/calendar/data.d.ts +97 -0
  245. package/dist/types/packages/objects/src/calendar/events.d.ts +58 -0
  246. package/dist/types/packages/objects/src/calendar/hand.d.ts +53 -0
  247. package/dist/types/packages/objects/src/calendar/host/input.d.ts +67 -0
  248. package/dist/types/packages/objects/src/calendar/host/print.d.ts +9 -0
  249. package/dist/types/packages/objects/src/calendar/kind.d.ts +297 -0
  250. package/dist/types/packages/objects/src/calendar/law.d.ts +151 -0
  251. package/dist/types/packages/objects/src/calendar/layout.d.ts +47 -0
  252. package/dist/types/packages/objects/src/calendar/month.d.ts +75 -0
  253. package/dist/types/packages/objects/src/calendar/object.d.ts +45 -0
  254. package/dist/types/packages/objects/src/calendar/pad.d.ts +42 -0
  255. package/dist/types/packages/objects/src/calendar/pass.d.ts +229 -0
  256. package/dist/types/packages/objects/src/calendar/print.d.ts +87 -0
  257. package/dist/types/packages/objects/src/calendar/printing.d.ts +80 -0
  258. package/dist/types/packages/objects/src/calendar/roll.d.ts +45 -0
  259. package/dist/types/packages/objects/src/calendar/shaders.d.ts +12 -0
  260. package/dist/types/packages/objects/src/calendar/sheet.d.ts +43 -0
  261. package/dist/types/packages/objects/src/calendar/tiles.d.ts +67 -0
  262. package/dist/types/packages/objects/src/calendar/turn.d.ts +73 -0
  263. package/dist/types/packages/objects/src/calendar/writing.d.ts +42 -0
  264. package/dist/types/packages/objects/src/index.d.ts +22 -0
  265. package/dist/types/packages/objects/src/kinds.d.ts +24 -0
  266. package/dist/types/packages/objects/src/minimat/inside.d.ts +17 -0
  267. package/dist/types/packages/objects/src/minimat/kind.d.ts +51 -0
  268. package/dist/types/packages/objects/src/minimat/layout.d.ts +83 -0
  269. package/dist/types/packages/objects/src/minimat/minimat.d.ts +179 -0
  270. package/dist/types/packages/objects/src/minimat/object.d.ts +8 -0
  271. package/dist/types/packages/objects/src/minimat/pass.d.ts +61 -0
  272. package/dist/types/packages/objects/src/minimat/shaders.d.ts +10 -0
  273. package/dist/types/packages/objects/src/minimat/theme.d.ts +98 -0
  274. package/dist/types/packages/objects/src/notebook/ink.d.ts +70 -0
  275. package/dist/types/packages/objects/src/notebook/kind.d.ts +236 -0
  276. package/dist/types/packages/objects/src/notebook/law.d.ts +129 -0
  277. package/dist/types/packages/objects/src/notebook/layout.d.ts +46 -0
  278. package/dist/types/packages/objects/src/notebook/leaf.d.ts +44 -0
  279. package/dist/types/packages/objects/src/notebook/mesh.d.ts +20 -0
  280. package/dist/types/packages/objects/src/notebook/motion.d.ts +107 -0
  281. package/dist/types/packages/objects/src/notebook/object.d.ts +8 -0
  282. package/dist/types/packages/objects/src/notebook/pages.d.ts +56 -0
  283. package/dist/types/packages/objects/src/notebook/pass.d.ts +197 -0
  284. package/dist/types/packages/objects/src/notebook/pick.d.ts +30 -0
  285. package/dist/types/packages/objects/src/notebook/raster.d.ts +28 -0
  286. package/dist/types/packages/objects/src/notebook/shaders.d.ts +11 -0
  287. package/dist/types/packages/objects/src/notebook/shape.d.ts +155 -0
  288. package/dist/types/packages/objects/src/notebook/theme.d.ts +76 -0
  289. package/dist/types/packages/objects/src/palette.d.ts +577 -0
  290. package/dist/types/packages/objects/src/paper/host/body.d.ts +30 -0
  291. package/dist/types/packages/objects/src/paper/kind.d.ts +81 -0
  292. package/dist/types/packages/objects/src/paper/layout.d.ts +73 -0
  293. package/dist/types/packages/objects/src/paper/object.d.ts +31 -0
  294. package/dist/types/packages/objects/src/paper/pages.d.ts +43 -0
  295. package/dist/types/packages/objects/src/paper/paper-pass.d.ts +86 -0
  296. package/dist/types/packages/objects/src/paper/paper.d.ts +117 -0
  297. package/dist/types/packages/objects/src/paper/shaders.d.ts +18 -0
  298. package/dist/types/packages/objects/src/paper/theme.d.ts +58 -0
  299. package/dist/types/packages/objects/src/paper/typing.d.ts +51 -0
  300. package/dist/types/packages/objects/src/paper/writing.d.ts +161 -0
  301. package/dist/types/packages/objects/src/photo/carry.d.ts +33 -0
  302. package/dist/types/packages/objects/src/photo/kind.d.ts +136 -0
  303. package/dist/types/packages/objects/src/photo/layout.d.ts +39 -0
  304. package/dist/types/packages/objects/src/photo/object.d.ts +5 -0
  305. package/dist/types/packages/objects/src/photo/photo-pass.d.ts +104 -0
  306. package/dist/types/packages/objects/src/photo/photo.d.ts +262 -0
  307. package/dist/types/packages/objects/src/photo/pictures.d.ts +152 -0
  308. package/dist/types/packages/objects/src/photo/sample.d.ts +9 -0
  309. package/dist/types/packages/objects/src/photo/shaders.d.ts +18 -0
  310. package/dist/types/packages/objects/src/preset.d.ts +44 -0
  311. package/dist/types/packages/objects/src/shaders.d.ts +3 -0
  312. package/dist/types/packages/objects/src/shaders.gen.d.ts +21 -0
  313. package/dist/types/packages/react/src/canvas-hooks.d.ts +12 -0
  314. package/dist/types/packages/react/src/desk.d.ts +56 -0
  315. package/dist/types/packages/react/src/engine-context.d.ts +2 -2
  316. package/dist/types/packages/react/src/frame-preview-boundary.d.ts +19 -0
  317. package/dist/types/packages/react/src/hooks.d.ts +9 -14
  318. package/dist/types/packages/react/src/index.d.ts +16 -9
  319. package/dist/types/packages/react/src/keymap.d.ts +21 -2
  320. package/dist/types/packages/react/src/selection-menu.d.ts +171 -0
  321. package/dist/types/packages/react/src/tray-bar.d.ts +124 -0
  322. package/package.json +64 -31
  323. package/dist/chunk-5FQS7V2C.js.map +0 -1
  324. package/dist/chunk-JWRHAM7L.js +0 -1163
  325. package/dist/chunk-JWRHAM7L.js.map +0 -1
  326. package/dist/chunk-MFTMPJUF.js +0 -681
  327. package/dist/chunk-MFTMPJUF.js.map +0 -1
  328. package/dist/chunk-OR5FNVUE.js.map +0 -1
  329. package/dist/ground.js +0 -1213
  330. package/dist/ground.js.map +0 -1
  331. package/dist/r3f.js +0 -1644
  332. package/dist/r3f.js.map +0 -1
  333. package/dist/types/packages/core/src/input/measure-queue.d.ts +0 -30
  334. package/dist/types/packages/core/src/settings/ground-config.d.ts +0 -103
  335. package/dist/types/packages/core/src/systems/measure-ingest.d.ts +0 -26
  336. package/dist/types/packages/devtools/src/gl-panel.d.ts +0 -69
  337. package/dist/types/packages/dom/src/measure-adapter.d.ts +0 -31
  338. package/dist/types/packages/dom/src/measure-wiring.d.ts +0 -49
  339. package/dist/types/packages/dom/src/planes.d.ts +0 -33
  340. package/dist/types/packages/dom/src/reflectors/chrome.d.ts +0 -33
  341. package/dist/types/packages/dom/src/reflectors/dom-widgets.d.ts +0 -59
  342. package/dist/types/packages/dom/src/reflectors/graybox.d.ts +0 -31
  343. package/dist/types/packages/dom/src/reflectors/plane-transform.d.ts +0 -38
  344. package/dist/types/packages/ground/src/index.d.ts +0 -69
  345. package/dist/types/packages/ground/src/layer.d.ts +0 -40
  346. package/dist/types/packages/ground/src/pass.d.ts +0 -41
  347. package/dist/types/packages/ground/src/passes/grid-classic.d.ts +0 -30
  348. package/dist/types/packages/ground/src/passes/grid-magnet.d.ts +0 -31
  349. package/dist/types/packages/ground/src/passes/grid.d.ts +0 -28
  350. package/dist/types/packages/ground/src/passes/guides-collect.d.ts +0 -14
  351. package/dist/types/packages/ground/src/passes/guides.d.ts +0 -3
  352. package/dist/types/packages/ground/src/passes/magnet-collect.d.ts +0 -63
  353. package/dist/types/packages/ground/src/passes/soup-collect.d.ts +0 -35
  354. package/dist/types/packages/ground/src/passes/soup-mesh.d.ts +0 -8
  355. package/dist/types/packages/ground/src/passes/wires-collect.d.ts +0 -35
  356. package/dist/types/packages/ground/src/passes/wires.d.ts +0 -10
  357. package/dist/types/packages/ground/src/poles.d.ts +0 -47
  358. package/dist/types/packages/ground/src/renderer.d.ts +0 -15
  359. package/dist/types/packages/ice/src/ground.d.ts +0 -1
  360. package/dist/types/packages/ice/src/r3f.d.ts +0 -1
  361. package/dist/types/packages/kernel/src/eviction.d.ts +0 -23
  362. package/dist/types/packages/kernel/src/zoom-bands.d.ts +0 -19
  363. package/dist/types/packages/r3f/src/bridge.d.ts +0 -129
  364. package/dist/types/packages/r3f/src/composite-material.d.ts +0 -26
  365. package/dist/types/packages/r3f/src/compositor-pass.d.ts +0 -105
  366. package/dist/types/packages/r3f/src/dev-write-trap.d.ts +0 -30
  367. package/dist/types/packages/r3f/src/gl-root.d.ts +0 -96
  368. package/dist/types/packages/r3f/src/gl-router.d.ts +0 -70
  369. package/dist/types/packages/r3f/src/index.d.ts +0 -17
  370. package/dist/types/packages/r3f/src/island-state.d.ts +0 -112
  371. package/dist/types/packages/r3f/src/island.d.ts +0 -13
  372. package/dist/types/packages/r3f/src/pool.d.ts +0 -56
  373. package/dist/types/packages/r3f/src/preview-capture.d.ts +0 -19
  374. package/dist/types/packages/r3f/src/resource-registry.d.ts +0 -30
  375. package/dist/types/packages/r3f/src/self-sustain.d.ts +0 -39
  376. package/dist/types/packages/r3f/src/use-island-frame.d.ts +0 -39
  377. package/dist/types/packages/react/src/infinite-canvas.d.ts +0 -140
  378. package/dist/types/packages/react/src/preview-snapshots.d.ts +0 -17
  379. package/dist/types/packages/react/src/widget-preview.d.ts +0 -14
  380. package/dist/types/packages/react/src/widget-root.d.ts +0 -33
@@ -0,0 +1,54 @@
1
+ export interface GpuOptions {
2
+ /** `navigator.gpu` in a browser; Dawn's `create([])` in Node. */
3
+ readonly gpu: GPU;
4
+ readonly label?: string;
5
+ readonly powerPreference?: GPUPowerPreference;
6
+ /** Features to enable where the adapter has them, beside `timestamp-query` — asked for whenever the adapter has it (the GPU profiler's clock, design-016 §4: a feature cannot be added to a device later, and one unused costs nothing). */
7
+ readonly requiredFeatures?: readonly GPUFeatureName[];
8
+ /** Device loss and uncaptured errors — the layer degrades, it does not throw. */
9
+ readonly onLost?: (info: GPUDeviceLostInfo) => void;
10
+ readonly onError?: (error: GPUError) => void;
11
+ }
12
+ export interface Gpu {
13
+ readonly adapter: GPUAdapter;
14
+ readonly device: GPUDevice;
15
+ readonly info: {
16
+ readonly vendor: string;
17
+ readonly architecture: string;
18
+ readonly description: string;
19
+ };
20
+ }
21
+ export declare function acquire(opts: GpuOptions): Promise<Gpu>;
22
+ /**
23
+ * The one limit the desk asks above WebGPU's floor (K9 R1): the adapter's own `maxTextureArrayLayers` — a device asked for
24
+ * nothing gets the floor, 256, whatever the hardware holds (Apple 2048), and the kinds' shared thumbnail arrays (kit/arrays.ts
25
+ * `LayerArray`) stop there: the 257th picture has no layer, the 257th whiteboard no far-LOD thumbnail. On an adapter AT the floor
26
+ * this asks for 256 and changes nothing — the arrays' own reclaim and the boards' bare draw carry that cap honestly.
27
+ */
28
+ export declare function arrayLayerLimit(adapter: Pick<GPUAdapter, "limits">): Record<string, number> | undefined;
29
+ /**
30
+ * A device the host already HAS — the engine's (design-015 D7: ONE device per engine) — wired as `acquire` wires one it
31
+ * made: its loss and its uncaptured errors reach the handlers. The caller does not own it, so it never destroys it.
32
+ */
33
+ export declare function adopt(adapter: GPUAdapter, device: GPUDevice, opts?: Pick<GpuOptions, "onLost" | "onError">): Gpu;
34
+ /** A swap chain as the ground draws into it — made by `host/surface.ts` (a canvas) or a test's fake. */
35
+ export interface Surface {
36
+ readonly context: GPUCanvasContext;
37
+ readonly format: GPUTextureFormat;
38
+ /** Size the drawing buffer to the CSS box × dpr (clamped). True when it changed. */
39
+ fit(maxDpr?: number): {
40
+ changed: boolean;
41
+ width: number;
42
+ height: number;
43
+ cssWidth: number;
44
+ cssHeight: number;
45
+ dpr: number;
46
+ };
47
+ /** The swap-chain texture view for this frame. */
48
+ view(): GPUTextureView;
49
+ /** The drawing buffer's size in device px — whatever sized the canvas, `fit()` or the host. */
50
+ size(): {
51
+ readonly w: number;
52
+ readonly h: number;
53
+ };
54
+ }
@@ -0,0 +1,5 @@
1
+ export { defineStruct, type StructDef, type StructBuffer, type FieldSlot, type FieldType, type FieldValue, type StructValues } from "./struct";
2
+ export { compose, compile, type ComposedShader, type ComposeOptions, type ShaderPart } from "./shader";
3
+ export { acquire, adopt, type Gpu, type GpuOptions, type Surface } from "./device";
4
+ export { bindLayout, bindGroup, renderPipeline, uniformBuffer, storageBuffer, BLEND_OVER, type BindEntry, type BindKind, type RenderPipelineOptions, type Visibility, } from "./pipeline";
5
+ export { Target, beginPass, readback, type Clear, type TargetOptions } from "./target";
@@ -0,0 +1,36 @@
1
+ export type Visibility = "vertex" | "fragment" | "compute";
2
+ export type BindEntry = {
3
+ readonly binding: number;
4
+ readonly stages: readonly Visibility[];
5
+ readonly buffer: GPUBufferBindingType;
6
+ } | {
7
+ readonly binding: number;
8
+ readonly stages: readonly Visibility[];
9
+ readonly texture: GPUTextureSampleType;
10
+ readonly dimension?: GPUTextureViewDimension;
11
+ } | {
12
+ readonly binding: number;
13
+ readonly stages: readonly Visibility[];
14
+ readonly sampler: GPUSamplerBindingType;
15
+ };
16
+ /** A binding's layout without its number — what a card material declares (K7b), the card deals the numbers. */
17
+ export type BindKind = BindEntry extends infer E ? (E extends BindEntry ? Omit<E, "binding"> : never) : never;
18
+ export declare function bindLayout(device: GPUDevice, entries: readonly BindEntry[], label?: string): GPUBindGroupLayout;
19
+ export declare function bindGroup(device: GPUDevice, layout: GPUBindGroupLayout, resources: ReadonlyArray<GPUBuffer | GPUTextureView | GPUSampler>, label?: string): GPUBindGroup;
20
+ /** Straight-alpha "source over": colour by src-alpha, alpha accumulates. */
21
+ export declare const BLEND_OVER: GPUBlendState;
22
+ export interface RenderPipelineOptions {
23
+ readonly label?: string;
24
+ readonly layout: GPUPipelineLayout;
25
+ readonly module: GPUShaderModule;
26
+ readonly vertex?: string;
27
+ readonly fragment?: string;
28
+ readonly format: GPUTextureFormat;
29
+ readonly blend?: GPUBlendState;
30
+ /** WGSL `override` values, fixed at creation — how one file becomes N specialised pipelines. */
31
+ readonly constants?: Record<string, number>;
32
+ readonly topology?: GPUPrimitiveTopology;
33
+ }
34
+ export declare function renderPipeline(device: GPUDevice, o: RenderPipelineOptions): Promise<GPURenderPipeline>;
35
+ export declare function uniformBuffer(device: GPUDevice, size: number, label?: string): GPUBuffer;
36
+ export declare function storageBuffer(device: GPUDevice, size: number, label?: string): GPUBuffer;
@@ -0,0 +1,66 @@
1
+ import type { Entity } from "../../../core/src/index";
2
+ /** What a run says: `done` — the raster is laid (or no longer owed); `wait` — no room for it now: held until its owner `wake`s. */
3
+ export type RasterRun = () => "done" | "wait";
4
+ export interface RasterQueueStats {
5
+ /** The frame's budget, ms. */
6
+ readonly budgetMs: number;
7
+ /** Asks waiting for their turn, and those held for room. */
8
+ readonly waiting: number;
9
+ readonly held: number;
10
+ /** Runs since the queue was made, the turns that ran any, and their ms. */
11
+ readonly ran: number;
12
+ readonly turns: number;
13
+ readonly ms: number;
14
+ /** Asks let go unrun: their object was not drawn when their turn came. */
15
+ readonly dropped: number;
16
+ /** The most runs one turn made, the most ms one turn spent, and the most one run took — a turn overshoots its budget by at most its last run. */
17
+ readonly peakRuns: number;
18
+ readonly peakMs: number;
19
+ readonly dearest: number;
20
+ }
21
+ export interface RasterQueue {
22
+ /** The frame's budget, ms (the turn's first run excepted). */
23
+ readonly budgetMs: number;
24
+ /**
25
+ * Ask for `owner`'s raster of `key` (a kind and its object): `priority` orders the turn (lower first — a kind puts what shows
26
+ * nothing before what shows a stand-in, and the nearest the view's centre first); `run` lays it when its turn comes. A second ask
27
+ * for the same key replaces the first — its priority and its run, and a held ask is waiting again.
28
+ */
29
+ ask(owner: string, key: Entity, priority: number, run: RasterRun): void;
30
+ /** The ask is withdrawn: the object's need went away before its turn (the zoom came back to the band it holds), or it left. */
31
+ drop(owner: string, key: Entity): void;
32
+ has(owner: string, key: Entity): boolean;
33
+ /** Room may have been made — `owner` let a raster go, or (no owner) the host drew a frame: the held asks wait for their turn again. */
34
+ wake(owner?: string): void;
35
+ /** Every ask of `owner` withdrawn (its state reset), or every ask. */
36
+ clear(owner?: string): void;
37
+ /** The host's turn, once a tick before the build: the runs, lowest priority first, while the budget lasts. Returns how many ran. */
38
+ drain(): number;
39
+ /** Asks waiting for their turn — the host keeps the desk awake while there are any (held asks are not counted). */
40
+ readonly size: number;
41
+ stats(): RasterQueueStats;
42
+ }
43
+ export interface RasterQueueOptions {
44
+ /** The frame's budget, ms (default `RASTER_BUDGET_MS`). */
45
+ readonly budgetMs?: number;
46
+ /** The clock the budget is kept on (default `performance.now`). */
47
+ readonly clock?: () => number;
48
+ /** Was the object drawn in the last build (the builder's word, `DeskBuilder.shows`)? Absent: every ask is run. */
49
+ readonly shows?: (key: Entity) => boolean;
50
+ }
51
+ /**
52
+ * The frame's raster budget, ms: a zoom's frame keeps its other work (≈ 1 ms of JS on the stress desk) inside design-016 §6's
53
+ * 8 ms with a raster's worth to spare — a note's ink at band 2 costs ≈ 2 ms on this Mac, and the turn's first always runs.
54
+ */
55
+ export declare const RASTER_BUDGET_MS = 4;
56
+ /**
57
+ * What an object shows while its raster waits its turn (K6b): NOTHING (a blank sheet, a bare board), its old raster MAGNIFIED (a
58
+ * band or a density short of the screen's — soft), or its old raster MINIFIED (past it — only the pages' room is at stake).
59
+ */
60
+ export type RasterWait = "nothing" | "magnified" | "minified";
61
+ /**
62
+ * The priority every kind asks with, so one turn orders them all alike (K6b): what shows nothing first, then a stand-in magnified,
63
+ * then one minified — the nearest the view's centre (`px`, screen px) first within each.
64
+ */
65
+ export declare function rasterPriority(shows: RasterWait, px: number): number;
66
+ export declare function createRasterQueue(opts?: RasterQueueOptions): RasterQueue;
@@ -0,0 +1,56 @@
1
+ import type { StructBuffer, StructDef } from "./struct";
2
+ /** How the pass packs one record into its slot; `blocks` (when the store has them) and `blockBase` name the slot's block. Returns the block records used (0 without blocks). */
3
+ export type RecordPacker<R, F extends string, B extends string> = (record: R, aux: number, into: StructBuffer<F>, slot: number, blocks: StructBuffer<B> | null, blockBase: number) => number;
4
+ export interface RecordStoreOptions<R, F extends string, B extends string = never> {
5
+ readonly device: GPUDevice;
6
+ readonly def: StructDef<F>;
7
+ /** Slots at the start; grown by doubling up to `max` (65,536). */
8
+ readonly capacity: number;
9
+ readonly max?: number;
10
+ /** The records buffer's label (`paper/notes`); the draw list is `<label> order`, the blocks `blocks.label`. */
11
+ readonly label: string;
12
+ readonly pack: RecordPacker<R, F, B>;
13
+ /** A fixed block of `per` sub-records of `def` a slot (the mini mat's chips). */
14
+ readonly blocks?: {
15
+ readonly def: StructDef<B>;
16
+ readonly per: number;
17
+ readonly label: string;
18
+ };
19
+ }
20
+ export interface RecordStoreStats {
21
+ /** Records packed and uploaded since the store was made. */
22
+ readonly written: number;
23
+ /** Bytes those uploads carried (records and blocks). */
24
+ readonly bytes: number;
25
+ /** Draw-list uploads. */
26
+ readonly orderWrites: number;
27
+ /** Slots in use, the capacity, how many times the buffers were remade. */
28
+ readonly slots: number;
29
+ readonly capacity: number;
30
+ readonly grown: number;
31
+ }
32
+ export interface RecordStore<R> {
33
+ /** The records buffer, the draw list and (with blocks) the blocks buffer — bind them; their identity moves on growth, `version` says when. */
34
+ readonly records: GPUBuffer;
35
+ readonly order: GPUBuffer;
36
+ readonly blocks: GPUBuffer | null;
37
+ readonly version: number;
38
+ /**
39
+ * One frame's records in paint order. `keys`: one per record, stable across frames (absent = transient: slots dealt from 0,
40
+ * everything packed). `aux(i)`: a number per record folded into the change test and handed to the pack. Returns the count
41
+ * that will draw — `order[0 … count)` names each paint index's slot.
42
+ */
43
+ prepare(records: readonly R[], keys: readonly number[] | undefined, aux?: (index: number) => number): number;
44
+ /** The slot drawn at paint index `i` this frame. */
45
+ slotAt(i: number): number;
46
+ /** What the pack folded in at paint index `i`: its aux and the block records it used. */
47
+ entryAt(i: number): {
48
+ readonly aux: number;
49
+ readonly blockN: number;
50
+ };
51
+ /** Every live record repacked at the next `prepare` (a law changed under them). */
52
+ invalidate(): void;
53
+ stats(): RecordStoreStats;
54
+ dispose(): void;
55
+ }
56
+ export declare function createRecordStore<R, F extends string, B extends string = never>(opts: RecordStoreOptions<R, F, B>): RecordStore<R>;
@@ -0,0 +1,22 @@
1
+ import type { StructDef } from "./struct";
2
+ export interface ShaderPart {
3
+ readonly label: string;
4
+ readonly text: string;
5
+ }
6
+ export interface ComposeOptions {
7
+ /** Structs whose WGSL text is prepended, in order. */
8
+ readonly structs?: ReadonlyArray<StructDef<string>>;
9
+ /** Pure modules, in dependency order. */
10
+ readonly modules?: ReadonlyArray<ShaderPart>;
11
+ /** The entry: bindings + @vertex/@fragment/@compute. */
12
+ readonly entry: ShaderPart;
13
+ }
14
+ export interface ComposedShader {
15
+ readonly code: string;
16
+ readonly label: string;
17
+ /** Map a line of the composed code back to `<part>:<line>`. */
18
+ locate(line: number): string;
19
+ }
20
+ export declare function compose(opts: ComposeOptions): ComposedShader;
21
+ /** Create the module and surface compilation errors with mapped locations. */
22
+ export declare function compile(device: GPUDevice, shader: ComposedShader): Promise<GPUShaderModule>;
@@ -0,0 +1,39 @@
1
+ /** The scalar and vector types, and a fixed array of vec4f (`array<vec4f, N>`: stride 16, legal in a uniform block) — the portal chain's. */
2
+ export type FieldType = "f32" | "i32" | "u32" | "vec2f" | "vec3f" | "vec4f" | "mat4x4f" | `array<vec4f, ${number}>`;
3
+ interface TypeInfo {
4
+ readonly align: number;
5
+ readonly size: number;
6
+ readonly n: number;
7
+ readonly scalar: "f" | "i" | "u";
8
+ }
9
+ /** A field type's layout: the table's, or a vec4f array's — N × 16 bytes, 4N floats, written as one flat list. */
10
+ export declare function typeInfo(type: FieldType): TypeInfo | undefined;
11
+ export interface FieldSlot {
12
+ readonly byte: number;
13
+ readonly type: FieldType;
14
+ readonly n: number;
15
+ }
16
+ export type FieldValue = number | boolean | ArrayLike<number>;
17
+ export type StructValues<F extends string> = Partial<Record<F, FieldValue>>;
18
+ export interface StructDef<F extends string> {
19
+ readonly name: string;
20
+ readonly fields: ReadonlyArray<readonly [F, FieldType]>;
21
+ /** Padded size in bytes; also the array stride. */
22
+ readonly size: number;
23
+ readonly slots: Readonly<Record<F, FieldSlot>>;
24
+ /** `struct <name> { ... }` — prepend to any shader that binds this. */
25
+ readonly wgsl: string;
26
+ /** Backing storage for `count` elements. */
27
+ alloc(count?: number): StructBuffer<F>;
28
+ }
29
+ export interface StructBuffer<F extends string> {
30
+ readonly def: StructDef<F>;
31
+ readonly count: number;
32
+ readonly bytes: ArrayBuffer;
33
+ /** Write fields by name into element `index`. Unknown names and wrong arity throw. */
34
+ set(values: StructValues<F>, index?: number): void;
35
+ /** The byte view to upload; `elements` trims to a prefix of the array. */
36
+ view(elements?: number): Uint8Array<ArrayBuffer>;
37
+ }
38
+ export declare function defineStruct<F extends string>(name: string, fields: ReadonlyArray<readonly [F, FieldType]>): StructDef<F>;
39
+ export {};
@@ -0,0 +1,26 @@
1
+ export interface TargetOptions {
2
+ readonly format: GPUTextureFormat;
3
+ readonly label?: string;
4
+ /** Add COPY_SRC when a host wants to read the pixels back (the oracle does). */
5
+ readonly readable?: boolean;
6
+ }
7
+ export declare class Target {
8
+ texture: GPUTexture;
9
+ view: GPUTextureView;
10
+ width: number;
11
+ height: number;
12
+ readonly format: GPUTextureFormat;
13
+ private readonly usage;
14
+ private readonly device;
15
+ private readonly opts;
16
+ constructor(device: GPUDevice, opts: TargetOptions, width?: number, height?: number);
17
+ private make;
18
+ /** True when the texture was recreated (and therefore holds nothing). */
19
+ resize(w0: number, h0: number): boolean;
20
+ dispose(): void;
21
+ }
22
+ export type Clear = readonly [number, number, number, number];
23
+ /** Begin a colour-only render pass; `clear` omitted loads the existing contents. */
24
+ export declare function beginPass(encoder: GPUCommandEncoder, view: GPUTextureView, clear?: Clear, label?: string): GPURenderPassEncoder;
25
+ /** Read a texture back as raw bytes with row padding removed (oracle / tests). */
26
+ export declare function readback(device: GPUDevice, texture: GPUTexture, bytesPerTexel: number): Promise<Uint8Array>;
@@ -0,0 +1,61 @@
1
+ import type { GroundFrameInputs } from "./ground";
2
+ export interface KindCostOptions {
3
+ /** Rounds (7). */
4
+ readonly rounds?: number;
5
+ /** The batch's target GPU time, ms (25). */
6
+ readonly targetMs?: number;
7
+ /** The probe's frames (4). */
8
+ readonly probeFrames?: number;
9
+ /** The batch's bounds (3 … 300 frames). */
10
+ readonly minFrames?: number;
11
+ readonly maxFrames?: number;
12
+ /** The kinds to leave out (default: every kind with an object in the frame). */
13
+ readonly kinds?: readonly string[];
14
+ }
15
+ export interface Sampled {
16
+ readonly median: number;
17
+ readonly min: number;
18
+ }
19
+ export interface KindCost {
20
+ /** ms per frame the frame loses without the kind: the median of the paired base − without-k over rounds. */
21
+ readonly ms: number;
22
+ /** …as a share of the base frame. */
23
+ readonly share: number;
24
+ /** The frame without the kind, ms per frame. */
25
+ readonly without: Sampled;
26
+ /** The kind's objects in the frame (every slot's). */
27
+ readonly objects: number;
28
+ /** The cost clears the noise floor. */
29
+ readonly clears: boolean;
30
+ }
31
+ export interface KindCostReport {
32
+ /** Frames a batch, rounds, and every round's batches in the order drawn. */
33
+ readonly frames: number;
34
+ readonly rounds: number;
35
+ /** The frame as it is, ms per frame. */
36
+ readonly base: Sampled;
37
+ /** The A/A control: the same frame as a variant of its own. */
38
+ readonly control: Sampled;
39
+ /** median(control) − median(base): the A/A offset. */
40
+ readonly aa: number;
41
+ /** The noise floor: the median over rounds of |control − base| within a round. */
42
+ readonly noise: number;
43
+ readonly kinds: Readonly<Record<string, KindCost>>;
44
+ /** Every batch, ms per frame, by variant (`base`, `control`, each kind), in round order — round r drew variant i at position (i − r) mod n. */
45
+ readonly samples: Readonly<Record<string, readonly number[]>>;
46
+ }
47
+ export interface Ablation {
48
+ /** The frame to measure (the last one drawn). */
49
+ readonly inputs: GroundFrameInputs;
50
+ /** Draw one frame of these inputs, synchronously (`Ground.render`). */
51
+ render(inputs: GroundFrameInputs): void;
52
+ /** Resolve once the GPU finished everything submitted (`queue.onSubmittedWorkDone`). */
53
+ drain(): Promise<unknown>;
54
+ now(): number;
55
+ }
56
+ /** Every kind with an object in the frame, and how many — the root's, the insides', the departed desk's. */
57
+ export declare function kindsIn(inputs: GroundFrameInputs): Record<string, number>;
58
+ /** The frame with `kind`'s objects left out of every slot (its insides with them); `null` kind: the frame as it is. The held object is always left out (the rest frame). */
59
+ export declare function withoutKind(inputs: GroundFrameInputs, kind: string | null): GroundFrameInputs;
60
+ /** Measure what each kind costs the frame (the header's method). */
61
+ export declare function ablateKinds(a: Ablation, opts?: KindCostOptions): Promise<KindCostReport>;
@@ -0,0 +1,54 @@
1
+ /** A format's block: its footprint in texels and its bytes. `guessed` — a format this table does not know, weighed as 4 bytes a texel. */
2
+ export interface FormatBlock {
3
+ readonly w: number;
4
+ readonly h: number;
5
+ readonly bytes: number;
6
+ readonly guessed?: boolean;
7
+ }
8
+ export declare function formatBlock(format: string): FormatBlock;
9
+ /** An extent's width, height and depth-or-layers — the list form (`[w, h?, d?]`) or the dictionary form. */
10
+ export declare function extentOf(size: GPUExtent3DStrict): [number, number, number];
11
+ /** The bytes of `size` texels of `format` in one mip (a copy's weight): ⌈w / bw⌉ × ⌈h / bh⌉ × blockBytes × depth. */
12
+ export declare function regionBytes(format: string, size: GPUExtent3DStrict): number;
13
+ /** A texture's logical bytes by the formula above. */
14
+ export declare function textureBytes(d: {
15
+ readonly size: GPUExtent3DStrict;
16
+ readonly format: string;
17
+ readonly mipLevelCount?: number;
18
+ readonly sampleCount?: number;
19
+ readonly dimension?: GPUTextureDimension;
20
+ }): number;
21
+ /** One ledger row: the live bytes, and how many textures and buffers make them. */
22
+ export interface GpuMemoryRow {
23
+ readonly bytes: number;
24
+ readonly textures: number;
25
+ readonly buffers: number;
26
+ }
27
+ /** The ledger's reading: live bytes by label prefix (the kind), textures and buffers apart, the total; and its turnover. */
28
+ export interface GpuMemory {
29
+ /** Live bytes by the resource's label prefix — `paper`, `board`, `photo` …; `?` for an unlabelled one. */
30
+ readonly byLabel: Readonly<Record<string, GpuMemoryRow>>;
31
+ readonly textures: number;
32
+ readonly buffers: number;
33
+ readonly total: number;
34
+ /** Resources made since the install (a make every frame is a finding), destroyed, and taken by the collector undestroyed. */
35
+ readonly made: number;
36
+ readonly destroyed: number;
37
+ readonly collected: number;
38
+ /** Textures whose format the byte table does not know (weighed as 4 bytes a texel). */
39
+ readonly guessed: number;
40
+ }
41
+ export interface MemoryLedger {
42
+ /** The ledger as of now (a fresh copy). */
43
+ read(): GpuMemory;
44
+ /** The `n` heaviest live labels, full label (`board/ink 12` — every board's raster its own row), heaviest first. */
45
+ top(n?: number): readonly {
46
+ readonly label: string;
47
+ readonly bytes: number;
48
+ readonly count: number;
49
+ }[];
50
+ /** Restore the device's own `createTexture` / `createBuffer`. What it made meanwhile still reports its `destroy` to nobody. Idempotent. */
51
+ detach(): void;
52
+ }
53
+ /** Keep a ledger of `device`'s live textures and buffers from now on. One per device: asking twice returns the one. */
54
+ export declare function instrumentMemory(device: GPUDevice): MemoryLedger;
@@ -0,0 +1,141 @@
1
+ import type { GpuMemory, MemoryLedger } from "./gpu-memory";
2
+ import { type KindDraws, type PassCounts, type PassTime, type PassTiming } from "./pass-instrument";
3
+ import type { SubmitInstrument, UploadTally } from "./submit-instrument";
4
+ export interface GpuFrameCounts extends PassCounts {
5
+ /** `queue.submit` calls in the frame. */
6
+ readonly submits: number;
7
+ /** Uploads (`writeBuffer` + `writeTexture` + `copyExternalImageToTexture`) and their bytes. */
8
+ readonly writes: number;
9
+ readonly uploadBytes: number;
10
+ /** The `copyExternalImageToTexture` uploads alone (a picture, a calendar tile). */
11
+ readonly externals: number;
12
+ }
13
+ export interface GpuFrameReport {
14
+ /** The profiler's frame number (monotonic across arms). */
15
+ readonly frame: number;
16
+ /** "frame": one the desk drew; "loose": GPU work the host's boundary closed with no frame in it — reported, never in the window. */
17
+ readonly kind: "frame" | "loose";
18
+ /** `performance.now()` at the frame's first command encoder. */
19
+ readonly at: number;
20
+ /** THE HEADLINE: GPU ms from the first timed pass's begin to the last one's end; null when untimed. */
21
+ readonly span: number | null;
22
+ /** The passes' own durations summed — NOT the frame's time: overlapping passes count twice, the GPU's waits between them not at all. */
23
+ readonly sum: number | null;
24
+ /** The GPU BUSY in the frame: the union of its passes' intervals — overlaps once, waits not at all; `span − busy` is what it waited (the drawable). */
25
+ readonly busy: number | null;
26
+ /** The timed passes, ms from the frame's earliest timestamp. */
27
+ readonly passes: readonly PassTime[];
28
+ readonly counts: GpuFrameCounts;
29
+ /** Draws and instances by the kind that drew (the pipeline's label prefix). */
30
+ readonly byKind: Readonly<Record<string, KindDraws>>;
31
+ /** The frame's uploads by the written resource's label prefix. */
32
+ readonly uploads: Readonly<Record<string, UploadTally>>;
33
+ /** CPU ms: `encode` — the frame's first command encoder to its close; `flush` — the host's flush that held it (null: none, a tool's frame). */
34
+ readonly cpu: {
35
+ readonly encode: number;
36
+ readonly flush: number | null;
37
+ };
38
+ /** The ledger's live GPU memory as the frame completed; null when the host keeps no ledger. */
39
+ readonly memory: GpuMemory | null;
40
+ readonly timing: PassTiming;
41
+ /** Every timestamp delta a whole multiple of 100 µs — Dawn's quantisation (`UNQUANTISED_TIMESTAMPS_FLAG` turns it off); null untimed. */
42
+ readonly quantised: boolean | null;
43
+ }
44
+ /** Rolling percentiles over the window: nearest rank. */
45
+ export interface Rolling {
46
+ readonly n: number;
47
+ readonly p50: number;
48
+ readonly p95: number;
49
+ readonly max: number;
50
+ }
51
+ export interface GpuProfileStats {
52
+ readonly armed: boolean;
53
+ /** Drawn frames in the window (loose work never enters it). */
54
+ readonly frames: number;
55
+ /** The GPU span; null while no frame in the window was timed. */
56
+ readonly span: Rolling | null;
57
+ /** The GPU busy (the span less the waits). */
58
+ readonly busy: Rolling | null;
59
+ readonly encode: Rolling | null;
60
+ readonly flush: Rolling | null;
61
+ readonly draws: Rolling | null;
62
+ readonly instances: Rolling | null;
63
+ readonly pipelines: Rolling | null;
64
+ readonly bindGroups: Rolling | null;
65
+ readonly passes: Rolling | null;
66
+ readonly submits: Rolling | null;
67
+ readonly uploadBytes: Rolling | null;
68
+ /** Most timed frames in the window read quantised → true (a real delta lands on a 100 µs multiple now and then, by chance — one frame is not the clock); else false; nothing timed → null. */
69
+ readonly quantised: boolean | null;
70
+ /** The switch that unquantises timestamps — what the dock says when `quantised`. */
71
+ readonly unquantise: string;
72
+ /** Samples dropped for a full readback ring, and readbacks in flight (this arming). */
73
+ readonly dropped: number;
74
+ readonly inFlight: number;
75
+ }
76
+ export interface TraceEvent {
77
+ readonly name: string;
78
+ readonly ph: "X" | "C" | "M";
79
+ readonly ts: number;
80
+ readonly dur?: number;
81
+ readonly pid: number;
82
+ readonly tid: number;
83
+ readonly cat?: string;
84
+ readonly args?: Readonly<Record<string, unknown>>;
85
+ }
86
+ /** A Chrome trace-event file (the JSON object format): Perfetto's and chrome://tracing's. */
87
+ export interface TraceJson {
88
+ readonly traceEvents: readonly TraceEvent[];
89
+ readonly displayTimeUnit: "ms";
90
+ readonly metadata: Readonly<Record<string, unknown>>;
91
+ }
92
+ export interface GpuProfiler {
93
+ /** The device has timestamp-query: frames are timed. */
94
+ readonly supported: boolean;
95
+ armed(): boolean;
96
+ /** Arm — refcounted: the first arm installs the instruments; returns this arm's release (the last release takes them all off). */
97
+ arm(): () => void;
98
+ /** The frames completed since the last take (drained, oldest first) — a rig's reading. */
99
+ take(): GpuFrameReport[];
100
+ /** The last frame completed. */
101
+ last(): GpuFrameReport | null;
102
+ /** Rolling p50 / p95 / max over the window's drawn frames. */
103
+ stats(): GpuProfileStats;
104
+ /** Called with every frame completed while armed; returns the unsubscribe. */
105
+ subscribe(listener: (report: GpuFrameReport) => void): () => void;
106
+ /** The host's boundary — its flush ended after `ms`: work with no frame is closed as loose, and the frames it held are given its ms. */
107
+ flushed(ms: number): void;
108
+ /** The next `n` frames as a trace-event JSON (arming for as long as it takes); at `timeoutMs` (10 s) it answers with what came. */
109
+ capture(n: number, opts?: {
110
+ readonly timeoutMs?: number;
111
+ readonly measure?: boolean;
112
+ }): Promise<TraceJson>;
113
+ /** Disarm whatever holds it and stop. */
114
+ dispose(): void;
115
+ }
116
+ export interface GpuProfilerOptions {
117
+ readonly device: GPUDevice;
118
+ /** The submit instrument, held while armed and released after — the host's (the layer's `submits()` may hold it for good). */
119
+ readonly submits: {
120
+ hold(): SubmitInstrument;
121
+ release(): void;
122
+ };
123
+ /** The host's memory ledger, if it keeps one. */
124
+ readonly ledger?: () => MemoryLedger | undefined;
125
+ /** Drawn frames in the rolling window (120). */
126
+ readonly window?: number;
127
+ /** The encoders whose submit closes a frame (the pass instrument's default: `ground`, `hold`). */
128
+ readonly frameEncoders?: readonly string[];
129
+ }
130
+ /** Nearest-rank percentiles of `values`; null when empty. */
131
+ export declare function rolling(values: readonly number[]): Rolling | null;
132
+ /** The GPU's busy time in `passes`: the union of their intervals — overlapping passes counted once, the gaps between them not at all. */
133
+ export declare function busyOf(passes: readonly PassTime[]): number | null;
134
+ /** The span of `passes`: first begin → last end; null when there are none. */
135
+ export declare function spanOf(passes: readonly PassTime[]): number | null;
136
+ export declare function createGpuProfiler(opts: GpuProfilerOptions): GpuProfiler;
137
+ /** Frames → a trace-event JSON: CPU spans on the main thread, each GPU pass on a track of its own, the span, counters. µs throughout. */
138
+ export declare function traceOf(frames: readonly GpuFrameReport[], where: ReadonlyMap<number, {
139
+ readonly flushAt: number | null;
140
+ readonly firstSubmit: number;
141
+ }>, meta?: Readonly<Record<string, unknown>>): TraceJson;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Replace `obj[key]` with `value`; the undo puts back exactly what was there — the own property it had, or no own property at all
3
+ * (the prototype's method shows through again, so "the wrappers are gone" is literal). Wrapped over since, the undo leaves
4
+ * ours beneath theirs: the caller's wrapper must then pass through.
5
+ */
6
+ export declare function swapMethod<T extends object, K extends keyof T>(obj: T, key: K, value: T[K]): () => void;
7
+ /** A resource's label prefix — its kind: `paper/notes` → `paper`; no label → `?`. */
8
+ export declare const prefixOf: (label: string | undefined) => string;