@vibecook/ice 0.11.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 (381) 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-VGVDJZSP.js → chunk-DYK6KNLG.js} +13206 -7387
  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 +33 -12
  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-2TNVB2ON.js +0 -1163
  324. package/dist/chunk-2TNVB2ON.js.map +0 -1
  325. package/dist/chunk-OR5FNVUE.js.map +0 -1
  326. package/dist/chunk-Q665T4L7.js +0 -681
  327. package/dist/chunk-Q665T4L7.js.map +0 -1
  328. package/dist/chunk-VGVDJZSP.js.map +0 -1
  329. package/dist/ground.js +0 -1108
  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 -101
  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-contract.d.ts +0 -28
  348. package/dist/types/packages/ground/src/passes/grid-magnet-pass.d.ts +0 -2
  349. package/dist/types/packages/ground/src/passes/grid-magnet.d.ts +0 -31
  350. package/dist/types/packages/ground/src/passes/grid.d.ts +0 -10
  351. package/dist/types/packages/ground/src/passes/guides-collect.d.ts +0 -14
  352. package/dist/types/packages/ground/src/passes/guides.d.ts +0 -3
  353. package/dist/types/packages/ground/src/passes/magnet-collect.d.ts +0 -63
  354. package/dist/types/packages/ground/src/passes/soup-collect.d.ts +0 -35
  355. package/dist/types/packages/ground/src/passes/soup-mesh.d.ts +0 -8
  356. package/dist/types/packages/ground/src/passes/wires-collect.d.ts +0 -35
  357. package/dist/types/packages/ground/src/passes/wires.d.ts +0 -10
  358. package/dist/types/packages/ground/src/poles.d.ts +0 -47
  359. package/dist/types/packages/ground/src/renderer.d.ts +0 -15
  360. package/dist/types/packages/ice/src/ground.d.ts +0 -1
  361. package/dist/types/packages/ice/src/r3f.d.ts +0 -1
  362. package/dist/types/packages/kernel/src/eviction.d.ts +0 -23
  363. package/dist/types/packages/kernel/src/zoom-bands.d.ts +0 -19
  364. package/dist/types/packages/r3f/src/bridge.d.ts +0 -129
  365. package/dist/types/packages/r3f/src/composite-material.d.ts +0 -26
  366. package/dist/types/packages/r3f/src/compositor-pass.d.ts +0 -105
  367. package/dist/types/packages/r3f/src/dev-write-trap.d.ts +0 -30
  368. package/dist/types/packages/r3f/src/gl-root.d.ts +0 -96
  369. package/dist/types/packages/r3f/src/gl-router.d.ts +0 -70
  370. package/dist/types/packages/r3f/src/index.d.ts +0 -17
  371. package/dist/types/packages/r3f/src/island-state.d.ts +0 -112
  372. package/dist/types/packages/r3f/src/island.d.ts +0 -13
  373. package/dist/types/packages/r3f/src/pool.d.ts +0 -56
  374. package/dist/types/packages/r3f/src/preview-capture.d.ts +0 -19
  375. package/dist/types/packages/r3f/src/resource-registry.d.ts +0 -30
  376. package/dist/types/packages/r3f/src/self-sustain.d.ts +0 -39
  377. package/dist/types/packages/r3f/src/use-island-frame.d.ts +0 -39
  378. package/dist/types/packages/react/src/infinite-canvas.d.ts +0 -140
  379. package/dist/types/packages/react/src/preview-snapshots.d.ts +0 -17
  380. package/dist/types/packages/react/src/widget-preview.d.ts +0 -14
  381. package/dist/types/packages/react/src/widget-root.d.ts +0 -33
package/dist/devtools.js CHANGED
@@ -14,8 +14,8 @@ import {
14
14
  WheelPan,
15
15
  WheelZoom,
16
16
  Wire
17
- } from "./chunk-VGVDJZSP.js";
18
- import "./chunk-OR5FNVUE.js";
17
+ } from "./chunk-DYK6KNLG.js";
18
+ import "./chunk-JS6PG6YD.js";
19
19
 
20
20
  // ../devtools/src/attach.ts
21
21
  import {
@@ -29,7 +29,7 @@ var LS_KEY = "ice-dock:layout";
29
29
  var STYLE_ID = "ice-dock-style";
30
30
  var MARGIN = 8;
31
31
  var KEEP = 90;
32
- var SLOT_ORDER = ["profiler", "gl", "observer"];
32
+ var SLOT_ORDER = ["profiler", "gpu", "observer"];
33
33
  function loadLayout() {
34
34
  try {
35
35
  return JSON.parse(localStorage.getItem(LS_KEY) ?? "{}");
@@ -64,12 +64,13 @@ var CSS = `
64
64
  .ice-dock-slot:empty { display: none; }
65
65
 
66
66
  /* De-window the hosted tools \u2014 the dock is the window now. */
67
- .ice-dock .strata-obs, .ice-dock .strata-prof, .ice-dock .ice-gl {
67
+ .ice-dock .strata-obs, .ice-dock .strata-prof {
68
68
  position: static !important; width: auto !important; min-width: 0 !important;
69
69
  border: none !important; border-radius: 0 !important; box-shadow: none !important; }
70
70
  .ice-dock .strata-obs { resize: vertical !important; }
71
71
  .ice-dock .strata-obs-head { cursor: default; }
72
- .ice-dock .strata-prof-body, .ice-dock .ice-gl-body { min-width: 0; }
72
+ .ice-dock .strata-prof-body { min-width: 0; }
73
+ .ice-dock .ice-gpu { border: none; border-radius: 0; box-shadow: none; }
73
74
  `;
74
75
  function injectStyle(doc) {
75
76
  if (doc.getElementById(STYLE_ID) !== null) return;
@@ -193,46 +194,37 @@ function createDock(opts = {}) {
193
194
  };
194
195
  }
195
196
 
196
- // ../devtools/src/gl-panel.ts
197
- var STYLE_ID2 = "ice-gl-style";
197
+ // ../devtools/src/gpu-panel.ts
198
+ var STYLE_ID2 = "ice-gpu-style";
198
199
  var CSS2 = `
199
- .ice-gl { position: fixed; z-index: 99998; background: rgba(13,17,23,.96);
200
- border: 1px solid #30363d; border-radius: 10px; color: #e6edf3;
201
- font: 11px/1.5 ui-monospace, SFMono-Regular, Menlo, monospace;
202
- box-shadow: 0 6px 22px rgba(0,0,0,.45); user-select: none; }
203
- .ice-gl * { box-sizing: border-box; }
204
- .ice-gl.tl { top: 10px; left: 10px; } .ice-gl.tr { top: 10px; right: 10px; }
205
- .ice-gl.bl { bottom: 10px; left: 10px; } .ice-gl.br { bottom: 10px; right: 10px; }
206
- .ice-gl-head { display: flex; align-items: center; gap: 8px; padding: 6px 9px; cursor: pointer; }
207
- .ice-gl-name { font-weight: 700; color: #56d4dd; }
208
- .ice-gl-fps { font-weight: 700; color: #a371f7; min-width: 46px; }
209
- .ice-gl-gpu { color: #8b949e; min-width: 74px; }
210
- .ice-gl-caret { color: #8b949e; margin-left: auto; }
211
- .ice-gl-body { display: none; border-top: 1px solid #21262d; padding: 7px 9px 8px; min-width: 300px; }
212
- .ice-gl.open .ice-gl-body { display: block; }
213
- .ice-gl-sect { color: #8b949e; font-weight: 700; padding: 5px 0 2px; }
214
- .ice-gl-row { display: flex; align-items: center; gap: 7px; padding: 1px 0; white-space: nowrap; }
215
- .ice-gl-name2 { min-width: 64px; color: #8b949e; }
216
- .ice-gl-bar { flex: 1; height: 5px; border-radius: 3px; background: #21262d; overflow: hidden; }
217
- .ice-gl-bar > i { display: block; height: 100%; background: #58a6ff; border-radius: 3px; }
218
- .ice-gl-stat { color: #e6edf3; margin-left: auto; }
219
- .ice-gl-dim { color: #8b949e; }
220
- .ice-gl-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 3px 10px; padding: 2px 0; }
221
- .ice-gl-cell b { display: block; color: #e6edf3; font-weight: 700; }
222
- .ice-gl-cell span { color: #8b949e; }
223
- .ice-gl-seg { display: flex; height: 7px; border-radius: 3px; overflow: hidden; background: #21262d; margin: 3px 0 2px; }
224
- .ice-gl-seg > i { display: block; height: 100%; }
225
- .ice-gl-legend { color: #8b949e; padding-bottom: 2px; }
200
+ .ice-gpu { background: rgba(13,17,23,.96); color: #e6edf3; font: 11px/1.5 ui-monospace, SFMono-Regular, Menlo, monospace; user-select: none; }
201
+ .ice-gpu * { box-sizing: border-box; }
202
+ .ice-gpu-head { display: flex; align-items: center; gap: 8px; padding: 6px 9px; cursor: pointer; }
203
+ .ice-gpu-name { font-weight: 700; color: #56d4dd; }
204
+ .ice-gpu-span { font-weight: 700; color: #a371f7; min-width: 64px; }
205
+ .ice-gpu-tail { color: #8b949e; min-width: 118px; }
206
+ .ice-gpu-caret { color: #8b949e; margin-left: auto; }
207
+ .ice-gpu-body { display: none; border-top: 1px solid #21262d; padding: 5px 9px 8px; }
208
+ .ice-gpu.open .ice-gpu-body { display: block; }
209
+ .ice-gpu-warn { display: none; color: #ffa657; padding: 4px 0 2px; white-space: normal; }
210
+ .ice-gpu-warn.on { display: block; }
211
+ .ice-gpu-sect { color: #8b949e; font-weight: 700; padding: 5px 0 2px; }
212
+ .ice-gpu-row { display: flex; align-items: center; gap: 7px; padding: 1px 0; white-space: nowrap; }
213
+ .ice-gpu-label { min-width: 84px; max-width: 120px; overflow: hidden; text-overflow: ellipsis; color: #8b949e; }
214
+ .ice-gpu-bar { position: relative; flex: 1; height: 5px; border-radius: 3px; background: #21262d; overflow: hidden; }
215
+ .ice-gpu-bar > i { position: absolute; top: 0; bottom: 0; left: 0; display: block; background: #58a6ff; border-radius: 3px; }
216
+ .ice-gpu-stat { color: #e6edf3; margin-left: auto; min-width: 64px; text-align: right; }
217
+ .ice-gpu-dim { color: #8b949e; }
218
+ .ice-gpu-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 3px 10px; padding: 2px 0; }
219
+ .ice-gpu-cell b { display: block; color: #e6edf3; font-weight: 700; }
220
+ .ice-gpu-cell span { color: #8b949e; }
221
+ .ice-gpu-foot { display: flex; align-items: center; gap: 8px; padding-top: 6px; color: #8b949e; }
222
+ .ice-gpu-btn { background: #21262d; border: 1px solid #30363d; border-radius: 6px; color: #e6edf3; cursor: pointer; font: inherit; padding: 2px 8px; }
223
+ .ice-gpu-btn:hover { border-color: #58a6ff; }
224
+ .ice-gpu-btn:disabled { color: #8b949e; cursor: default; }
226
225
  `;
227
- var PHASE_COLORS = {
228
- hot: "#ff7b72",
229
- waking: "#58a6ff",
230
- warm: "#3fb950",
231
- cold: "#8b949e",
232
- dormant: "#484f58"
233
- };
234
- var SPARK_W = 132;
235
- var SPARK_H = 26;
226
+ var SPARK_W = 120;
227
+ var SPARK_H = 22;
236
228
  var SPARK_SAMPLES = SPARK_W / 2;
237
229
  function injectStyle2(doc) {
238
230
  if (doc.getElementById(STYLE_ID2) !== null) return;
@@ -241,114 +233,132 @@ function injectStyle2(doc) {
241
233
  el.textContent = CSS2;
242
234
  doc.head.appendChild(el);
243
235
  }
244
- var fmtInt = (n) => n.toLocaleString();
245
- var fmtK = (n) => n >= 1e6 ? `${(n / 1e6).toFixed(2)}M` : n >= 1e3 ? `${(n / 1e3).toFixed(1)}k` : String(n);
246
- var fmtMs = (ms) => `${ms.toFixed(2)}ms`;
247
- var fmtMB = (b) => `${(b / 1048576).toFixed(0)}MB`;
248
- function createGlPanel(opts = {}) {
236
+ var fmtMs = (ms) => ms === null || ms === void 0 ? "\u2013" : ms >= 10 ? `${ms.toFixed(1)} ms` : `${ms.toFixed(2)} ms`;
237
+ var fmtBytes = (b) => b >= 1048576 ? `${(b / 1048576).toFixed(1)} MB` : b >= 1024 ? `${(b / 1024).toFixed(1)} KB` : `${b} B`;
238
+ var fmtK = (n) => n >= 1e6 ? `${(n / 1e6).toFixed(2)}M` : n >= 1e4 ? `${(n / 1e3).toFixed(1)}k` : String(n);
239
+ function createGpuPanel(opts = {}) {
249
240
  const container = opts.container ?? document.body;
250
241
  const doc = container.ownerDocument;
251
242
  const budgetMs = opts.budgetMs ?? 16.7;
252
243
  injectStyle2(doc);
253
244
  const root = doc.createElement("div");
254
- root.className = `ice-gl ${opts.corner ?? "bl"}${opts.expanded === true ? " open" : ""}`;
255
- const head = doc.createElement("div");
256
- head.className = "ice-gl-head";
257
- const name = doc.createElement("span");
258
- name.className = "ice-gl-name";
259
- name.textContent = "ice gl";
260
- const fpsEl = doc.createElement("span");
261
- fpsEl.className = "ice-gl-fps";
262
- const gpuEl = doc.createElement("span");
263
- gpuEl.className = "ice-gl-gpu";
245
+ root.className = `ice-gpu${opts.expanded === false ? "" : " open"}`;
246
+ const make = (tag, cls, text) => {
247
+ const el = doc.createElement(tag);
248
+ el.className = cls;
249
+ if (text !== void 0) el.textContent = text;
250
+ return el;
251
+ };
252
+ const head = make("div", "ice-gpu-head");
253
+ const spanEl = make("span", "ice-gpu-span", "\u2013");
254
+ const tailEl = make("span", "ice-gpu-tail", "no frame yet");
264
255
  const spark = doc.createElement("canvas");
265
256
  spark.width = SPARK_W;
266
257
  spark.height = SPARK_H;
267
258
  spark.style.display = "block";
268
- const caret = doc.createElement("span");
269
- caret.className = "ice-gl-caret";
270
- caret.textContent = "\u25BE";
271
- head.append(name, fpsEl, gpuEl, spark, caret);
259
+ head.append(make("span", "ice-gpu-name", "gpu"), spanEl, tailEl, spark, make("span", "ice-gpu-caret", "\u25BE"));
272
260
  head.addEventListener("click", () => root.classList.toggle("open"));
273
- const body = doc.createElement("div");
274
- body.className = "ice-gl-body";
275
- root.append(head, body);
276
- container.appendChild(root);
261
+ const body = make("div", "ice-gpu-body");
262
+ const hint = make("div", "ice-gpu-row ice-gpu-dim", "waiting for a frame \u2014 at rest the desk draws nothing (idle-zero); move the camera");
263
+ const warn = make("div", "ice-gpu-warn");
264
+ body.append(hint, warn);
277
265
  const sect = (label) => {
278
- const s = doc.createElement("div");
279
- s.className = "ice-gl-sect";
280
- s.textContent = label;
266
+ const s = make("div", "ice-gpu-sect", label);
281
267
  body.appendChild(s);
268
+ return s;
282
269
  };
283
- const bar = (label) => {
284
- const row = doc.createElement("div");
285
- row.className = "ice-gl-row";
286
- const n = doc.createElement("span");
287
- n.className = "ice-gl-name2";
288
- n.textContent = label;
289
- const b = doc.createElement("div");
290
- b.className = "ice-gl-bar";
270
+ const bar = (label, into = body) => {
271
+ const row = make("div", "ice-gpu-row");
272
+ const l = make("span", "ice-gpu-label", label);
273
+ const b = make("div", "ice-gpu-bar");
291
274
  const fill = doc.createElement("i");
292
275
  b.appendChild(fill);
293
- const stat = doc.createElement("span");
294
- stat.className = "ice-gl-stat";
295
- row.append(n, b, stat);
296
- body.appendChild(row);
297
- return { fill, stat };
276
+ const stat = make("span", "ice-gpu-stat");
277
+ row.append(l, b, stat);
278
+ into.appendChild(row);
279
+ return { fill, stat, label: l };
298
280
  };
299
- const textRow = () => {
300
- const row = doc.createElement("div");
301
- row.className = "ice-gl-row";
302
- body.appendChild(row);
303
- return row;
281
+ const list = () => {
282
+ const el = doc.createElement("div");
283
+ body.appendChild(el);
284
+ return el;
304
285
  };
305
286
  sect("frame");
306
- const cpuBar = bar("cpu");
307
- const gpuBar = bar("gpu");
308
- sect("render");
309
- const grid = doc.createElement("div");
310
- grid.className = "ice-gl-grid";
287
+ const spanBar = bar("gpu span");
288
+ const busyBar = bar("gpu busy");
289
+ const encodeBar = bar("encode");
290
+ const flushBar = bar("desk flush");
291
+ const passesHead = sect("passes");
292
+ const passesEl = list();
293
+ sect("calls");
294
+ const grid = make("div", "ice-gpu-grid");
311
295
  body.appendChild(grid);
312
296
  const cell = (label) => {
313
- const c = doc.createElement("div");
314
- c.className = "ice-gl-cell";
297
+ const c = make("div", "ice-gpu-cell");
315
298
  const v = doc.createElement("b");
316
- const l = doc.createElement("span");
317
- l.textContent = label;
318
- c.append(v, l);
299
+ c.append(v, make("span", "", label));
319
300
  grid.appendChild(c);
320
301
  return v;
321
302
  };
322
- const callsEl = cell("calls");
323
- const trisEl = cell("triangles");
324
- const ptsEl = cell("pts+lines");
325
- const progsEl = cell("programs");
326
- const geosEl = cell("geometries");
327
- const texsEl = cell("textures");
328
- sect("virtual textures");
329
- const rtRow = textRow();
330
- const fboBar = bar("fbo mem");
331
- const seg = doc.createElement("div");
332
- seg.className = "ice-gl-seg";
333
- body.appendChild(seg);
334
- const legend = doc.createElement("div");
335
- legend.className = "ice-gl-legend";
336
- body.appendChild(legend);
337
- const paintRow = textRow();
338
- sect("lod");
339
- const lodRow = textRow();
340
- const bandsRow = textRow();
341
- sect("widgets");
342
- const cullBar = bar("visible");
303
+ const cells = {
304
+ draws: cell("draws"),
305
+ instances: cell("instances"),
306
+ pipelines: cell("pipelines"),
307
+ bindGroups: cell("bind groups"),
308
+ passes: cell("passes"),
309
+ submits: cell("submits"),
310
+ writes: cell("writes"),
311
+ uploadBytes: cell("uploaded")
312
+ };
313
+ sect("by kind");
314
+ const kindsEl = list();
315
+ sect("uploads");
316
+ const uploadsEl = list();
317
+ const memoryHead = sect("memory");
318
+ const memoryEl = list();
319
+ const foot = make("div", "ice-gpu-foot");
320
+ const footText = make("span", "ice-gpu-dim");
321
+ foot.appendChild(footText);
322
+ body.appendChild(foot);
323
+ if (opts.capture !== void 0) {
324
+ const n = opts.captureFrames ?? 120;
325
+ const capture = opts.capture;
326
+ const btn = make("button", "ice-gpu-btn", `capture ${n} frames`);
327
+ btn.type = "button";
328
+ btn.addEventListener("click", () => {
329
+ btn.disabled = true;
330
+ btn.textContent = "capturing\u2026";
331
+ capture(n).then(
332
+ (trace) => {
333
+ save(doc, trace);
334
+ btn.textContent = `saved \u2014 capture ${n} frames`;
335
+ },
336
+ (e) => {
337
+ btn.textContent = `capture failed: ${e instanceof Error ? e.message : String(e)}`;
338
+ }
339
+ ).finally(() => {
340
+ btn.disabled = false;
341
+ });
342
+ });
343
+ foot.prepend(btn);
344
+ }
345
+ root.append(head, body);
346
+ container.appendChild(root);
343
347
  const samples = [];
344
348
  let latest;
345
- let maxCpu = 0;
346
- let maxGpu = 0;
347
- let evictedTotal = 0;
348
- let lastRender = 0;
349
+ let timed;
350
+ let stats;
351
+ let lastRender = Number.NEGATIVE_INFINITY;
352
+ let trailing;
349
353
  let disposed = false;
354
+ const setBar = (b, ms, text, over = budgetMs) => {
355
+ b.fill.style.width = `${ms === null || ms === void 0 ? 0 : Math.min(100, ms / budgetMs * 100)}%`;
356
+ b.fill.style.background = ms !== null && ms !== void 0 && ms > over ? "#ff7b72" : "#58a6ff";
357
+ b.stat.textContent = text;
358
+ };
359
+ const rolling = (r) => r === null || r === void 0 ? "\u2013" : `${fmtMs(r.p50)} \xB7 p95 ${fmtMs(r.p95)} \xB7 max ${fmtMs(r.max)}`;
350
360
  const drawSpark = () => {
351
- const ctx = spark.getContext("2d");
361
+ const ctx = spark.getContext?.("2d") ?? null;
352
362
  if (ctx === null) return;
353
363
  ctx.clearRect(0, 0, SPARK_W, SPARK_H);
354
364
  const top = budgetMs * 2;
@@ -361,78 +371,108 @@ function createGlPanel(opts = {}) {
361
371
  ctx.fillStyle = "rgba(139,148,158,.55)";
362
372
  ctx.fillRect(0, SPARK_H / 2, SPARK_W, 1);
363
373
  };
374
+ const rows = (into, items) => {
375
+ into.textContent = "";
376
+ for (const [label, text, share] of items) {
377
+ const b = bar(label, into);
378
+ b.fill.style.width = `${Math.max(0, Math.min(100, share * 100))}%`;
379
+ b.stat.textContent = text;
380
+ b.label.title = label;
381
+ }
382
+ if (items.length === 0) into.appendChild(make("div", "ice-gpu-row ice-gpu-dim", "none"));
383
+ };
364
384
  const render = () => {
365
- const s = latest;
366
- if (s === void 0) return;
367
- fpsEl.textContent = s.fps > 0 ? `${Math.round(s.fps)} fps` : "\u2013 fps";
368
- gpuEl.textContent = s.gpuMs > 0 ? `gpu ${fmtMs(s.gpuMs)}` : "gpu \u2013";
385
+ const f = latest;
386
+ if (f === void 0) return;
387
+ hint.remove();
388
+ const st = stats;
389
+ spanEl.textContent = st?.span ? fmtMs(st.span.p50) : fmtMs(f.span);
390
+ tailEl.textContent = st?.span ? `p95 ${fmtMs(st.span.p95)} \xB7 max ${fmtMs(st.span.max)}` : f.span === null ? "untimed" : "";
369
391
  drawSpark();
392
+ const q = st?.quantised ?? f.quantised;
393
+ warn.classList.toggle("on", q === true);
394
+ warn.textContent = q === true ? `\u26A0 timestamps quantised to 100 \xB5s \u2014 launch Chrome with ${st?.unquantise ?? "--disable-dawn-features=timestamp_quantization"}` : "";
370
395
  if (!root.classList.contains("open")) return;
371
- cpuBar.fill.style.width = `${Math.min(100, s.cpuMs / budgetMs * 100)}%`;
372
- cpuBar.stat.textContent = `${fmtMs(s.cpuMs)} \xB7 max ${fmtMs(maxCpu)}`;
373
- gpuBar.fill.style.width = `${Math.min(100, s.gpuMs / budgetMs * 100)}%`;
374
- gpuBar.fill.style.background = s.gpuMs > budgetMs ? "#ff7b72" : "#58a6ff";
375
- gpuBar.stat.textContent = `${fmtMs(s.gpuMs)} \xB7 max ${fmtMs(maxGpu)}`;
376
- callsEl.textContent = fmtInt(s.drawCalls);
377
- trisEl.textContent = fmtK(s.triangles);
378
- ptsEl.textContent = fmtK(s.points + s.lines);
379
- progsEl.textContent = fmtInt(s.programs);
380
- geosEl.textContent = fmtInt(s.geometries);
381
- texsEl.textContent = fmtInt(s.textures);
382
- rtRow.textContent = `${s.renderTargets} targets \xB7 ${s.renderMegaPixels.toFixed(1)} MP total`;
383
- fboBar.fill.style.width = `${Math.min(100, s.fboBytes / s.fboBudgetBytes * 100)}%`;
384
- fboBar.fill.style.background = s.fboBytes > s.fboBudgetBytes * 0.85 ? "#ffa657" : "#58a6ff";
385
- fboBar.stat.textContent = `${fmtMB(s.fboBytes)} / ${fmtMB(s.fboBudgetBytes)}`;
386
- seg.textContent = "";
387
- const phases = [
388
- ["hot", s.islands.hot],
389
- ["waking", s.islands.waking],
390
- ["warm", s.islands.warm],
391
- ["cold", s.islands.cold],
392
- ["dormant", s.islands.dormant]
393
- ];
394
- const denom = Math.max(1, s.islands.total);
395
- const legendParts = [];
396
- for (const [phase, count] of phases) {
397
- if (count === 0) continue;
398
- const i = doc.createElement("i");
399
- i.style.width = `${count / denom * 100}%`;
400
- i.style.background = PHASE_COLORS[phase] ?? "#8b949e";
401
- seg.appendChild(i);
402
- legendParts.push(`${count} ${phase}`);
396
+ setBar(spanBar, st?.span?.p50 ?? f.span, rolling(st?.span));
397
+ setBar(busyBar, st?.busy?.p50 ?? f.busy, rolling(st?.busy));
398
+ setBar(encodeBar, st?.encode?.p50 ?? f.cpu.encode, rolling(st?.encode));
399
+ setBar(flushBar, st?.flush?.p50 ?? f.cpu.flush, rolling(st?.flush));
400
+ const t = timed;
401
+ const span = t?.span ?? null;
402
+ passesHead.textContent = t === void 0 || span === null ? "passes \u2014 untimed (no timestamp-query, or the readback ring was full)" : `passes \xB7 frame ${t.frame} \xB7 span ${fmtMs(span)} \xB7 busy ${fmtMs(t.busy)} \xB7 sum ${fmtMs(t.sum)}`;
403
+ passesEl.textContent = "";
404
+ if (t !== void 0 && span !== null && span > 0) {
405
+ for (const p of t.passes) {
406
+ const b = bar(p.label, passesEl);
407
+ b.fill.style.left = `${p.begin / span * 100}%`;
408
+ b.fill.style.width = `${Math.max(0.5, (p.end - p.begin) / span * 100)}%`;
409
+ b.stat.textContent = fmtMs(p.end - p.begin);
410
+ b.label.title = `${p.label}: ${p.begin.toFixed(3)} \u2192 ${p.end.toFixed(3)} ms`;
411
+ }
403
412
  }
404
- legend.textContent = legendParts.length > 0 ? legendParts.join(" \xB7 ") : "no islands";
405
- paintRow.textContent = `repainted ${s.repainted}/frame \xB7 pending ${s.pendingPaints} \xB7 evicted \u03A3${evictedTotal}`;
406
- lodRow.textContent = `zoom ${(s.zoom * 100).toFixed(0)}% \u2192 band \xD7${s.band} \u2192 paint dpr ${s.effectiveDpr.toFixed(2)}`;
407
- const bands = Object.entries(s.bandHistogram).sort((a, b) => a[0].localeCompare(b[0]));
408
- bandsRow.textContent = bands.length > 0 ? `targets by band: ${bands.map(([k, v]) => `${k}: ${v}`).join(" \xB7 ")}` : "no live targets";
409
- const pop = Math.max(1, s.visibleWidgets + s.culledWidgets);
410
- cullBar.fill.style.width = `${s.visibleWidgets / pop * 100}%`;
411
- cullBar.fill.style.background = "#3fb950";
412
- cullBar.stat.textContent = `${s.visibleWidgets} visible \xB7 ${s.culledWidgets} culled`;
413
+ const c = f.counts;
414
+ cells.draws.textContent = fmtK(c.draws);
415
+ cells.instances.textContent = fmtK(c.instances);
416
+ cells.pipelines.textContent = fmtK(c.pipelines);
417
+ cells.bindGroups.textContent = fmtK(c.bindGroups);
418
+ cells.passes.textContent = fmtK(c.passes);
419
+ cells.submits.textContent = fmtK(c.submits);
420
+ cells.writes.textContent = fmtK(c.writes);
421
+ cells.uploadBytes.textContent = fmtBytes(c.uploadBytes);
422
+ const kinds = Object.entries(f.byKind).sort((a, b) => b[1].draws - a[1].draws);
423
+ const most = Math.max(1, ...kinds.map(([, k]) => k.draws));
424
+ rows(kindsEl, kinds.map(([name, k]) => [name, `${k.draws} draw${k.draws === 1 ? "" : "s"} \xB7 ${fmtK(k.instances)} inst`, k.draws / most]));
425
+ const ups = Object.entries(f.uploads).sort((a, b) => b[1].bytes - a[1].bytes).slice(0, 6);
426
+ const upTotal = Math.max(1, c.uploadBytes);
427
+ rows(uploadsEl, ups.map(([name, u]) => [name, `${fmtBytes(u.bytes)} \xB7 ${u.writes}\xD7`, u.bytes / upTotal]));
428
+ const m = f.memory;
429
+ memoryHead.textContent = m === null ? "memory \u2014 no ledger (the host keeps none)" : `memory \xB7 ${fmtBytes(m.total)} live \xB7 textures ${fmtBytes(m.textures)} \xB7 buffers ${fmtBytes(m.buffers)}`;
430
+ rows(memoryEl, m === null ? [] : Object.entries(m.byLabel).sort((a, b) => b[1].bytes - a[1].bytes).slice(0, 8).map(([name, r]) => [name, fmtBytes(r.bytes), r.bytes / Math.max(1, m.total)]));
431
+ footText.textContent = `${st?.frames ?? 1} frames in the window${st !== void 0 && st.dropped > 0 ? ` \xB7 ${st.dropped} dropped (the readback ring was full)` : ""}`;
413
432
  };
414
433
  return {
415
- push(s) {
434
+ el: root,
435
+ push(frame, s) {
416
436
  if (disposed) return;
417
- latest = s;
418
- maxCpu = Math.max(maxCpu, s.cpuMs);
419
- maxGpu = Math.max(maxGpu, s.gpuMs);
420
- evictedTotal += s.evicted;
421
- samples.push(s.gpuMs > 0 ? s.gpuMs : s.cpuMs);
422
- if (samples.length > SPARK_SAMPLES) samples.splice(0, samples.length - SPARK_SAMPLES);
437
+ latest = frame;
438
+ if (frame.span !== null) {
439
+ timed = frame;
440
+ samples.push(frame.span);
441
+ if (samples.length > SPARK_SAMPLES) samples.splice(0, samples.length - SPARK_SAMPLES);
442
+ }
443
+ if (s !== void 0) stats = s;
423
444
  const now = performance.now();
424
445
  if (now - lastRender >= 120) {
425
446
  lastRender = now;
426
447
  render();
448
+ } else if (trailing === void 0) {
449
+ trailing = setTimeout(() => {
450
+ trailing = void 0;
451
+ lastRender = performance.now();
452
+ if (!disposed) render();
453
+ }, 120 - (now - lastRender));
427
454
  }
428
455
  },
429
456
  dispose() {
430
457
  if (disposed) return;
431
458
  disposed = true;
459
+ if (trailing !== void 0) clearTimeout(trailing);
432
460
  root.remove();
433
461
  }
434
462
  };
435
463
  }
464
+ function save(doc, trace) {
465
+ const view = doc.defaultView;
466
+ if (view === null || typeof view.URL?.createObjectURL !== "function") return;
467
+ const url = view.URL.createObjectURL(new view.Blob([JSON.stringify(trace)], { type: "application/json" }));
468
+ const a = doc.createElement("a");
469
+ a.href = url;
470
+ a.download = `desk-gpu-${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}.json`;
471
+ doc.body.appendChild(a);
472
+ a.click();
473
+ a.remove();
474
+ view.setTimeout(() => view.URL.revokeObjectURL(url), 1e3);
475
+ }
436
476
 
437
477
  // ../devtools/src/attach.ts
438
478
  var COLOR = {
@@ -512,23 +552,25 @@ function attachDevtools(engine, opts = {}) {
512
552
  }
513
553
  });
514
554
  }
515
- let glPanel = null;
516
555
  let detached = false;
556
+ let gpu = null;
557
+ const mountGpu = () => {
558
+ gpu ??= createGpuPanel({ ...typeof opts.gpu === "object" ? opts.gpu : {}, ...mountIn("gpu") });
559
+ return gpu;
560
+ };
561
+ if (typeof opts.gpu === "object") mountGpu();
517
562
  return {
518
563
  observer,
519
564
  profiler,
520
565
  lane(name, ms) {
521
566
  profiler?.lane(name, ms);
522
567
  },
523
- glStats(stats) {
524
- if (detached || opts.glPanel === false) return;
525
- if (glPanel === null) {
526
- glPanel = createGlPanel({
527
- ...typeof opts.glPanel === "object" ? opts.glPanel : {},
528
- ...mountIn("gl")
529
- });
530
- }
531
- glPanel.push(stats);
568
+ gpuFrame(frame, stats) {
569
+ if (detached || opts.gpu === false) return;
570
+ mountGpu().push(frame, stats);
571
+ if (frame.cpu.flush !== null) profiler?.lane("desk flush", frame.cpu.flush);
572
+ profiler?.lane("encode", frame.cpu.encode);
573
+ if (frame.span !== null) profiler?.lane("gpu", frame.span);
532
574
  },
533
575
  detach() {
534
576
  if (detached) return;
@@ -536,8 +578,8 @@ function attachDevtools(engine, opts = {}) {
536
578
  removePublish?.();
537
579
  observer?.dispose();
538
580
  profiler?.dispose();
539
- glPanel?.dispose();
540
- glPanel = null;
581
+ gpu?.dispose();
582
+ gpu = null;
541
583
  dock?.dispose();
542
584
  dock = null;
543
585
  }
@@ -550,7 +592,9 @@ export {
550
592
  DEVTOOLS_VERSION,
551
593
  attachDevtools,
552
594
  createDock,
553
- createGlPanel,
554
- engineDescribe
595
+ createGpuPanel,
596
+ engineDescribe,
597
+ fmtBytes,
598
+ fmtMs
555
599
  };
556
600
  //# sourceMappingURL=devtools.js.map