@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
@@ -0,0 +1,55 @@
1
+ /**
2
+ * THE ENGINE'S DEVICE (design-012 §4 "Device"; kept as the device door at design-015 D5b, slimmed at D7): ONE device
3
+ * per engine. An app that wants the device before the desk mounts — to read its uncaptured errors, to share it with
4
+ * work of its own — acquires it here and passes it to `createCanvasEngine({ compositorDevice })`; the desk's layer then
5
+ * DRAWS WITH IT (`createDeskHost` hands it through the layer context) instead of acquiring a device of its own, so
6
+ * `errors()` sees the desk's uncaptured GPU errors. Absent — the common case, and every headless engine — the desk
7
+ * acquires its own. The engine never destroys it: the app that acquired it owns its end of life.
8
+ *
9
+ * The error log subscribes with `addEventListener('uncapturederror')`, never the `onuncapturederror` property, so no
10
+ * other holder of the device can disconnect it; it is armed HERE, before any consumer exists, so no error goes unseen.
11
+ * (The three.js creation rules this module carried for the GL islands — no compatibility adapter, every advertised
12
+ * feature — left with three at D7; `hasCoreFeatures`, three's compatibility-mode signal, with them.) ONE feature is asked
13
+ * for whenever the adapter has it (design-016 §4, K2): `timestamp-query`, the GPU profiler's clock — a feature cannot be
14
+ * added to a device once it is made, and one left unused costs nothing, so every engine's device can be profiled.
15
+ *
16
+ * Headless-safe: WebGPU is not DOM (it exists in workers), so naming it here does not breach core's wall. The only
17
+ * environmental touch is reading `navigator.gpu`, and its absence is a clean typed failure, never a throw from deep
18
+ * inside a layer. TYPES: `@webgpu/types` is the ONE entry in `tsconfig.base.json`'s `types` array, and a runtime-free
19
+ * dependency of `@vibecook/ice`, so the published `.d.ts` resolves for consumers.
20
+ */
21
+ export interface GpuUncapturedError {
22
+ /** `performance.now()` at capture, or 0 where the clock is unavailable. */
23
+ readonly at: number;
24
+ readonly type: string;
25
+ readonly message: string;
26
+ }
27
+ /** The engine's GPU facts. Reached as `engine.compositorDevice` — undefined unless the app passed one (the desk then acquires its own). */
28
+ export interface EngineGpu {
29
+ readonly adapter: GPUAdapter;
30
+ readonly device: GPUDevice;
31
+ /** Features actually enabled on the device (not merely adapter-advertised). */
32
+ readonly enabled: readonly string[];
33
+ /** `timestamp-query` is on the device — asked for whenever the adapter has it (the GPU profiler's clock, design-016 §4). */
34
+ readonly hasTimestampQuery: boolean;
35
+ /** Uncaptured GPU errors since acquisition, newest last. */
36
+ errors(): readonly GpuUncapturedError[];
37
+ /** Release the device. The ENGINE NEVER CALLS THIS — nor does the desk's layer that drew with it: the app that acquired it owns its end of life. */
38
+ destroy(): void;
39
+ }
40
+ export interface AcquireDeviceOpts {
41
+ /** Defaults to "high-performance" — the desk is the frame's fill cost. */
42
+ readonly powerPreference?: GPUPowerPreference;
43
+ /** Features to enable where the adapter has them, beside `timestamp-query` (always asked for where the adapter has it; the desk's drawing needs none). */
44
+ readonly requiredFeatures?: readonly GPUFeatureName[];
45
+ /** Cap the retained error log (defaults to 64). */
46
+ readonly maxErrors?: number;
47
+ }
48
+ export declare class GpuUnavailableError extends Error {
49
+ constructor(message: string);
50
+ }
51
+ /**
52
+ * Acquire the engine's device. Called by the APP before `createCanvasEngine({ compositorDevice })`; the desk's layer
53
+ * receives it from there. Throws {@link GpuUnavailableError} rather than returning a half-state.
54
+ */
55
+ export declare function acquireCompositorDevice(opts?: AcquireDeviceOpts): Promise<EngineGpu>;
@@ -11,6 +11,35 @@ export declare const CameraInertia: import("@vibecook/strata-ecs").Resource<impo
11
11
  readonly vx: import("@vibecook/strata-ecs").FieldSpec<"f32", true>;
12
12
  readonly vy: import("@vibecook/strata-ecs").FieldSpec<"f32", true>;
13
13
  }>;
14
+ /**
15
+ * This frame's WHEEL zoom (design-015 §9, D2a-core): the one-tick fact a system
16
+ * that runs after `cameraControl` reads to know "this frame zoomed in / out
17
+ * about this anchor" — D2b's zoom-through is the first. `cameraControl` is its
18
+ * one writer, change-only: it writes a step on each frame whose wheel zoom (a
19
+ * plain wheel in `"zoom"` mode, or a pinch-wheel in either mode) moved the
20
+ * zoom, and resets `ratio` to 1 on the first frame after that has none; idle
21
+ * frames write nothing.
22
+ * - `ratio`: zoom after ÷ zoom before, over this frame's wheel zooms — `> 1`
23
+ * zoomed in, `< 1` out, `1` no step (a clamped zoom is no step).
24
+ * - `anchorX/Y`: the screen point (CSS px) of the frame's last wheel zoom.
25
+ * - `tick`: the `FrameInfo.tick` it happened on, for a reader that runs BEFORE
26
+ * `cameraControl` and must tell last frame's step from this one's.
27
+ * Not recorded: pans, flights, ops (`zoomTo`, fits) and the TOUCH pinch — whose
28
+ * zoom is absolute from its own start (`startZoom · spread/startDist`), so a
29
+ * consumer that re-bases the camera mid-pinch would have to re-base the pinch
30
+ * too; that is the consumer's call to make, not a fact to hand it silently.
31
+ */
32
+ export declare const WheelZoomStep: import("@vibecook/strata-ecs").Resource<import("@vibecook/strata-ecs").ValueOf<{
33
+ readonly ratio: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
34
+ readonly anchorX: import("@vibecook/strata-ecs").FieldSpec<"f32", true>;
35
+ readonly anchorY: import("@vibecook/strata-ecs").FieldSpec<"f32", true>;
36
+ readonly tick: import("@vibecook/strata-ecs").FieldSpec<"u32", true>;
37
+ }>, {
38
+ readonly ratio: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
39
+ readonly anchorX: import("@vibecook/strata-ecs").FieldSpec<"f32", true>;
40
+ readonly anchorY: import("@vibecook/strata-ecs").FieldSpec<"f32", true>;
41
+ readonly tick: import("@vibecook/strata-ecs").FieldSpec<"u32", true>;
42
+ }>;
14
43
  export interface CameraSystems {
15
44
  cameraControl: TickSystem;
16
45
  cameraInertia: TickSystem;
@@ -3,14 +3,11 @@
3
3
  *
4
4
  * Two systems, both derive-scheduled, both write change-only:
5
5
  *
6
- * `selectionChrome` — maintains POOLED chrome entities mirroring the current
7
- * `Selected` set: ONE selection-box entity + 8 resize-handle entities. The box
8
- * entity carries ONLY the `SelectionBox` value (x,y,w,h = the union bbox); the
9
- * handles carry Position + Size + `HandleSpec{anchor}` + `VisualOf → box`.
10
- * Box policy (amended 2026-07-17): all-resizable selections get box + grips
11
- * (v1 parity); a MULTI-selection gets the box (group bbox) even when
12
- * non-resizable; a single non-resizable widget gets no engine chrome (the
13
- * app owns its selection look).
6
+ * `selectionChrome` — maintains the POOLED resize-handle entities mirroring the
7
+ * current `Selected` set: 8 handles carrying Position + Size + `HandleSpec{anchor}`,
8
+ * placed about the selection's union bbox. They exist only when EVERY selected
9
+ * entity is Resizable and none is taped (Locked) — v1 parity; any other
10
+ * selection gets no engine chrome (the desk's marks draw its look).
14
11
  *
15
12
  * HANDLE PICKING (the point of the design): handles carry a world AABB, so the
16
13
  * `react`-phase `spatialSync` indexes them automatically and `picking` resolves
@@ -21,26 +18,21 @@
21
18
  * so its on-screen hit target stays ~constant across zoom. The tradeoff: the
22
19
  * handles must be recomputed whenever the camera zoom changes, so this system
23
20
  * runs every frame a selection exists and rewrites the 8 handles' Position/Size
24
- * change-only (a zoom change restamps 8 entities — small, bounded N; §5's
25
- * "screen-space, recomputed on camera dirt, small N").
21
+ * change-only (a zoom change restamps 8 entities — small, bounded N).
26
22
  *
27
- * THE BOX IS DELIBERATELY NOT PICKABLE. It stores its rect in the `SelectionBox`
28
- * value, NOT in Position/Size, so `spatialSync` (which indexes [Position,Size])
29
- * never sees it. design-003 §3's pick priority lists ONLY HandleSpec chrome as
30
- * pickable; indexing the box would make it a widget-class pick (it has Position)
31
- * and let a center-of-selection click be grabbed by `moveClaim`. (This diverges
32
- * from a literal reading of the M6 brief's "Position+Size+SelectionBox" — the
33
- * box's geometry lives on the `SelectionBox` value instead; the chrome reflector
34
- * reads it from there.)
23
+ * THE SELECTION BOX LEFT AT design-015 D7: the pooled box entity carried the
24
+ * union bbox in a `SelectionBox` value (with a `VisualOf` edge from each handle)
25
+ * for the P4 DOM chrome that drew it; that chrome was deleted at D5b, nothing read
26
+ * the box, and it was rewritten every frame the union moved (every drag frame).
27
+ * Only what picking reads stays.
35
28
  *
36
- * POOL LIFECYCLE: entities spawn once via `ctx` (runtime prefab class) when a
37
- * selection appears and are reaped via `ctx.destroy` when it empties. On the
38
- * spawn frame the handles are still identity-only (placement defers to the
29
+ * POOL LIFECYCLE: the handles spawn once via `ctx` (runtime prefab class) when a
30
+ * resizable selection appears and are reaped via `ctx.destroy` when it empties.
31
+ * On the spawn frame they are still identity-only (placement defers to the
39
32
  * phase boundary), so their initial geometry rides the `ctx.spawn` payload and
40
33
  * the change-only `edit().set` updates begin the next frame.
41
34
  *
42
- * `breakpoint` — `WidgetBreakpoint{tier,w,h}` from a widget's EFFECTIVE size
43
- * (`MeasuredSize` where auto-sized and >0, else `Size`), width-thresholded into
35
+ * `breakpoint` — `WidgetBreakpoint{tier,w,h}` from a widget's `Size`, width-thresholded into
44
36
  * 5 tiers with ±10% boundary hysteresis. Added lazily (on `WidgetEquipped`
45
37
  * widgets, once measured) and thereafter written ONLY when the tier changes —
46
38
  * the LOD signal must be stable within a tier so the measure→tier→content→
@@ -0,0 +1,34 @@
1
+ /**
2
+ * The desk's drag modifiers (design-015 §7, *Marks on the Mat*'s keys; D4a) — read off the recognizer's
3
+ * WATCHED pointer, whose `PointerMods` is the pointer's latched sample (design-003 §4.5; the keyboard
4
+ * carries only key events), so a modifier pressed or let go mid-drag takes effect on the next frame:
5
+ *
6
+ * - ⇧ locks the drag to ONE axis — its dominant one, recomputed from the total each frame (the page's
7
+ * `if (|dx| > |dy|) dy = 0 else dx = 0`); the snap then corrects only along the free axis.
8
+ * - ⌘ (or Ctrl) held holds the snap off.
9
+ * - ⌥ as the drag STARTS leaves a copy behind (moveClaim latches it as `LeavesCopy` on the recognizer;
10
+ * the release commits the copies with the move — one gesture, one undo step).
11
+ *
12
+ * Shared by the snap system and the move behavior, so the delta the snap aligns is the delta the move
13
+ * writes. Pure over the ctx: no writes.
14
+ */
15
+ import type { Entity, SystemCtx } from "@vibecook/strata-ecs";
16
+ export interface DragMods {
17
+ readonly shift: boolean;
18
+ readonly alt: boolean;
19
+ readonly meta: boolean;
20
+ readonly ctrl: boolean;
21
+ }
22
+ /** The recognizer's watched pointer's modifiers now (none when it watches no pointer). */
23
+ export declare function watchedMods(ctx: Pick<SystemCtx, "getRelations" | "get">, rec: Entity): DragMods;
24
+ /** ⌘ or Ctrl held: the snap stands down for this frame. */
25
+ export declare const snapHeldOff: (mods: DragMods) => boolean;
26
+ /**
27
+ * A move drag's WORLD delta: the screen total over the zoom at its claim, locked to its dominant axis while ⇧ is
28
+ * held. `lock` names the axis it runs along (`x` = horizontally, its y held), null when free.
29
+ */
30
+ export declare function moveDelta(ctx: Pick<SystemCtx, "read" | "getRelations" | "get">, rec: Entity): {
31
+ readonly x: number;
32
+ readonly y: number;
33
+ readonly lock: "x" | "y" | null;
34
+ };
@@ -0,0 +1,71 @@
1
+ /**
2
+ * HELD INPUT (design-015 §8; D4b) — while an object is in the hand, every pointer is the held
3
+ * object's and the desk behind it is inert. The HEAD of the `react` phase: the ingest's one-tick
4
+ * tags are flushed by then (a press is visible), and what this stamps flushes before `ctl`.
5
+ *
6
+ * The desk goes inert with the vocabulary the stack already honours: every local pointer gets the
7
+ * one-tick `HandledByWidget` (picking and the recognizers skip it — no hit, no tap, no drag, no
8
+ * selection change) and `WheelHandled` (both wheel consumers skip it — the camera never moves), the
9
+ * cleanup phase clears them, this system stamps them again next tick. So "no camera move" is not a
10
+ * rule the camera keeps; it is a fact the camera never hears about.
11
+ *
12
+ * What the pointer does instead is mapped through the SAME pose the renderer drew — the seam
13
+ * `HeldPoseSlot` beside `framePick`: the renderer publishes the held object's screen frame each
14
+ * frame (`HeldPoseSource.frame`), and a pointer's point becomes `HeldPointer` — the object's own
15
+ * units, centred — and an inside/outside verdict. The routes (desk.js `heldDown`/`heldMove`/
16
+ * `heldUp`/`heldZoomAt`/`heldPanBy`, number for number):
17
+ * - a ⌘/ctrl-wheel or a pinch brings the object closer ABOUT THE POINTER (`HeldView.zoom`, up to 3×,
18
+ * the pan following so the point under the pointer stays), never the mat; in past 0.72× it is put
19
+ * down — and the rest of that gesture is MUTED (`HeldMute`: 400 ms, +250 per swallowed event), so
20
+ * the wheel's tail never zooms the desk (the v2 lesson);
21
+ * - once brought close (zoom > 1) a plain wheel moves the object under the eye, clamped so it never
22
+ * leaves the middle of the view; a middle-button or Space drag pans the same way, as does a drag
23
+ * that starts on the soft desk;
24
+ * - a click on the soft desk — pressed and released outside the object, unmoved — puts it down; two
25
+ * instant taps on the object do too (the notebook's case rule, generalised) — unless they land on its
26
+ * drawing surface with a mode in hand (D3t-a): that press is the TOOL's (`HeldPress` `tool` — the
27
+ * board's stroke; a double-click there is two dots, never a way back) — or on one of the kind's named
28
+ * PARTS (D3t-b: any part but `content` and `frame`, the object itself): that press is the KIND's
29
+ * (`HeldPress` `part`, with the part it began on — a notebook's turn: two clicks there turn two pages).
30
+ * The ways back are OPS (`ops.putDown`, structural) and a system may not run them mid-tick: it writes
31
+ * the one-tick `HeldIntent` and the facade applies it after the step (D2b's `NavIntent`, same shape).
32
+ * Nothing here reads a kind: the seam gives a frame and (D3t-a) the part under a point; the tool in
33
+ * hand is core's `HeldTool`.
34
+ */
35
+ import type { Entity, System, World } from "@vibecook/strata-ecs";
36
+ /** The held object's frame ON SCREEN as the renderer drew it this frame (CSS px): its centre, half extents, its scale (CSS px per object unit), and whether the pickup has settled (the wheel waits for it). */
37
+ export interface HeldScreenFrame {
38
+ readonly cx: number;
39
+ readonly cy: number;
40
+ readonly hx: number;
41
+ readonly hy: number;
42
+ readonly s: number;
43
+ readonly settled: boolean;
44
+ }
45
+ /**
46
+ * The pose seam: the renderer's word on where the held object is — `undefined` before its first frame — and (D3t-a) which of
47
+ * its kind's parts is under a point of the object's own frame (its `hit` on the geometry it drew: the board's melamine
48
+ * `content`, its `frame`), null over nothing; absent = no parts ("content" inside the frame).
49
+ */
50
+ export interface HeldPoseSource {
51
+ frame(entity: Entity): HeldScreenFrame | undefined;
52
+ part?(entity: Entity, x: number, y: number): string | null;
53
+ }
54
+ /** The stack's slot for the pose source — a mutable box, so the renderer can arrive after install (as `framePick`). */
55
+ export interface HeldPoseSlot {
56
+ current: HeldPoseSource | null;
57
+ }
58
+ /** The hand's numbers (desk.js `HOLD` and its wheel handler): the zoom's floor (put down below it) and ceiling, the wheel's rate, the mute, the press slop. */
59
+ export declare const HOLD_INPUT: {
60
+ readonly zoomMin: 0.72;
61
+ readonly zoomMax: 3;
62
+ readonly wheelRate: 0.0105;
63
+ readonly muteMs: 400;
64
+ readonly muteMoreMs: 250;
65
+ readonly slopPx: 3;
66
+ };
67
+ /** The held object, or undefined. */
68
+ export declare function heldEntity(world: World): Entity | undefined;
69
+ export declare function createHeldInput(world: World, opts: {
70
+ readonly pose: HeldPoseSlot;
71
+ }): System;
@@ -12,6 +12,8 @@
12
12
  * out-of-ECS hand-off (`drainCreatedSelections`); they are drained on the
13
13
  * commit tick and applied HERE one tick later, when the projection is
14
14
  * alive — the select-on-grab the ghost held transfers to the real widget.
15
+ * Not to a twin created INSIDE a container: it is no member of this frame
16
+ * (`Selected ⇒ Active`, nested-canvas.ts), so the drop selects nothing.
15
17
  *
16
18
  * - RETIRING (`GhostRetiring`, cancel / rejected drop): despawned when the
17
19
  * fly-back `TransformTween` lands (camera-sim removes it on arrival).
@@ -20,6 +20,20 @@
20
20
  * cannot take `edit().set`). Facts are always true: `surfaceHandled` events
21
21
  * still land, but carry the one-tick `HandledByWidget` tag L1/L2 read (the
22
22
  * pinned widget-event contract, design-002 §8).
23
+ *
24
+ * THE CUT (2026-09-26): a pointer's fold ENDS at its transition (down / up /
25
+ * cancel), so a tick that carries `WentDown`/`WentUp` carries the pointer AT
26
+ * the press or the release — picking hits what was pressed, recognizers judge
27
+ * the release where it happened. The first event past a closed fold ends the
28
+ * tick's drain: it and everything behind it (every pointer, every key — the
29
+ * processed events stay a PREFIX of arrival order) are the next tick's facts.
30
+ * Before the cut, a click whose release coalesced with a far move into one
31
+ * frame published `WentUp` at the MOVE's point: the tap failed its slop, the
32
+ * drag measured its dead zone to a point reached after the release and went
33
+ * Active on the clicked object — which then followed the cursor (a ghost
34
+ * drag; found under CDP input in apps/desk, reachable by a quick tap and
35
+ * flick). Between transitions moves and wheel deltas still fold: every
36
+ * consumer reads the latest position or the tick's accumulated deltas.
23
37
  */
24
38
  import type { System, TickSystem, World } from "@vibecook/strata-ecs";
25
39
  import type { InputQueue } from "../input/queue";
@@ -46,6 +46,42 @@
46
46
  import type { Entity, System, TickSystem, World } from "@vibecook/strata-ecs";
47
47
  import { SpatialIndex } from "../../../kernel/src/index";
48
48
  import { type WirePickSource } from "../ops/point-pick";
49
+ /**
50
+ * The FRAME pick source (design-014, B3b): the ground's answer to "what is
51
+ * under this world point on card `e`" — `content`, `frame` (the chrome band
52
+ * outside the content rect), `outside`, or a PART the registered card program
53
+ * names (`close`, `lock` …) — or `undefined`: the source has NO GEOMETRY for the card
54
+ * (the ground's pipelines are still compiling, the card has not been drawn yet, or
55
+ * creation failed), and the box tier's answer stands. `undefined` is not `outside`: a
56
+ * card the ground cannot see is still a card (B9 review blocker 1 — a source that
57
+ * answered `outside` there made every card unclickable until the first build, and for
58
+ * good when `Ground.create` rejected). `pad()` is how far the chrome reaches past the
59
+ * content rect, world units: the spatial index holds content rects, so
60
+ * `picking` widens its search by it and asks the source about candidates the
61
+ * boxes missed. Set on the interaction stack by the ground layer at mount;
62
+ * `null` = every hit is the box's (the stratified profile).
63
+ */
64
+ export interface FramePickSource {
65
+ pad(): number;
66
+ hit(e: Entity, wx: number, wy: number): string | undefined;
67
+ /**
68
+ * The source's geometry is MOVING under a still pointer (a reveal growing a control, a lift): `picking` runs
69
+ * every frame this answers true, so the part under a motionless pointer is the part that is there now. Absent
70
+ * = never; the pointer and the spatial index are then the only wakes (B9 review).
71
+ */
72
+ live?(): boolean;
73
+ /**
74
+ * The widgets the source draws LIFTED this frame — above the frame's own order and away from their facts (design-015 §6's
75
+ * print in a hand, flicked or gliding; D3t-a): the spatial index still holds their fact rects, so the frame tier asks
76
+ * these FIRST, wherever they are drawn, and the topmost that answers is the hit — a press catches a gliding print where
77
+ * it is, and its old rect no longer does (its geometry says `outside` there). Absent = none.
78
+ */
79
+ lifted?(): Iterable<Entity>;
80
+ }
81
+ /** The stack's slot for the frame pick source — a mutable box, so the ground can arrive after install. */
82
+ export interface FramePickSlot {
83
+ current: FramePickSource | null;
84
+ }
49
85
  export interface PickingSystems {
50
86
  spatialSync: TickSystem;
51
87
  picking: System;
@@ -55,4 +91,4 @@ export interface PickingSystems {
55
91
  * spatialSync pass repopulates the cleared index from the new Active set. */
56
92
  clearCaches(): void;
57
93
  }
58
- export declare function createPickingSystems(world: World, index?: SpatialIndex<Entity>, wires?: WirePickSource): PickingSystems;
94
+ export declare function createPickingSystems(world: World, index?: SpatialIndex<Entity>, wires?: WirePickSource, frames?: FramePickSlot): PickingSystems;
@@ -10,12 +10,26 @@
10
10
  * one ClaimedBy write per pointer per pass (`setRelation` is silent last-wins —
11
11
  * a mis-ordered arbitration would otherwise be undetectable).
12
12
  *
13
+ * ONE PASS PER TICK (2026-09-26): a strata system body runs once per matching
14
+ * CHUNK, and the recognizer kinds live in different archetypes — so while
15
+ * arbitration was a chunk system, the tie rule compared claimants only within
16
+ * one batch. The first batch's claimant won and failed the rest; a later batch,
17
+ * reading `ClaimedBy` before the flush, claimed as well and failed back (a
18
+ * pointer could end claimed by a Failed recognizer, both claimants dead). It is
19
+ * a tick system now: it collects EVERY claimant of the tick, then decides once
20
+ * per pointer. A claimant that lost this tick's tie fails even from a terminal
21
+ * phase — a Tap's `Recognized` — so a pointer gets one outcome, never a drag
22
+ * AND the tap it beat (as when the drag claims first: tap-then-drag fails the
23
+ * pending tap).
24
+ *
13
25
  * `dragRoute` — the ONE pan/marquee/move decision, latched at Drag activation
14
- * via route tags; the route never changes mid-gesture (design-003 §4.4).
26
+ * via route tags; the route never changes mid-gesture (design-003 §4.4). A
27
+ * canvas drag reads the pointer's latched shift to choose between the tool's
28
+ * `canvasDrag` and `canvasDragShift` (design-015 §9, D2a-core).
15
29
  */
16
- import type { System } from "@vibecook/strata-ecs";
17
- export declare function createArbitrationSystems(): {
18
- arbitration: System;
30
+ import type { System, TickSystem, World } from "@vibecook/strata-ecs";
31
+ export declare function createArbitrationSystems(world?: World): {
32
+ arbitration: TickSystem;
19
33
  dragRoute: System;
20
34
  };
21
35
  /** Wheel recognizers never claim; exported so tests can assert the invariant set. */
@@ -20,7 +20,10 @@
20
20
  */
21
21
  import type { System, World } from "@vibecook/strata-ecs";
22
22
  import type { CommitSink } from "../engine/commit-sink";
23
- export declare function createSelectMoveBehaviors(world: World, sink: CommitSink): {
23
+ import type { NavGeometrySlot } from "../nav/nav-geometry";
24
+ export declare function createSelectMoveBehaviors(world: World, sink: CommitSink, opts?: {
25
+ readonly navGeometry?: NavGeometrySlot;
26
+ }): {
24
27
  selectBehavior: System;
25
28
  moveBehavior: System;
26
29
  };
@@ -22,6 +22,13 @@
22
22
  * Same-widget double-grab guard: a widget already in another recognizer's
23
23
  * `Drags` set is skipped (first gesture owns it) — two `ctx.addComponent(Grab)`
24
24
  * for one widget in one frame would hit strata's flush-time duplicate policy.
25
+ *
26
+ * The tape (design-015 §5.1, D2a-core): a `Locked` widget gets no rider from
27
+ * either claim — never moved, never resized by a gesture — and nothing else
28
+ * changes: select-on-grab still selects it, the pointer is still claimed, and
29
+ * the untaped members of the same selection move without it. A claim whose set
30
+ * is all tape moves nothing and commits nothing (the release paths commit only
31
+ * what carries a `Grab`).
25
32
  */
26
33
  import type { System, World } from "@vibecook/strata-ecs";
27
34
  export declare function createClaimSystems(world: World): {
@@ -54,4 +54,4 @@ export interface ConnectSystems {
54
54
  * one-frame `Targets` staleness on snapping — the router's pattern).
55
55
  * @param _wires reserved (the wire narrow-phase source; connect reads `Targets`).
56
56
  */
57
- export declare function createConnectSystems(_world: World, sink: CommitSink, _index: SpatialIndex<Entity>, _wires: WirePickSource): ConnectSystems;
57
+ export declare function createConnectSystems(world: World, sink: CommitSink, _index: SpatialIndex<Entity>, _wires: WirePickSource): ConnectSystems;
@@ -17,7 +17,36 @@
17
17
  * relation version, and any churn wakes every row-filtered observer world-wide
18
18
  * (design-002 §4). Both clear when no container is under the bounds; the move
19
19
  * behavior clears them on every terminal path.
20
+ *
21
+ * THIRD SIGNAL (2026-09-06, design-013 §5 rev 6 / GLOW.md §3): `DragBounds` on
22
+ * the recognizer — the same post-move union this system computes for its
23
+ * spatial query, published instead of discarded. The overlap glow is cast light
24
+ * from the lifted set's own SDF, so the compose reflector needs its rect; there
25
+ * is no second computation and no new walk. Change-only over all four fields,
26
+ * for the same reason the other two are: a value write stamps, and a still
27
+ * frame must cost nothing.
20
28
  */
21
29
  import type { Entity, System, World } from "@vibecook/strata-ecs";
22
30
  import type { SpatialIndex } from "../../../kernel/src/index";
23
- export declare function createDropSystem(world: World, index: SpatialIndex<Entity>): System;
31
+ import type { CanvasRect } from "../canvas/frame-view";
32
+ import { type NavGeometrySlot } from "../nav/nav-geometry";
33
+ import type { PortalAffine } from "../../../kernel/src/index";
34
+ /** Is every one of these a GPU OBJECT (an `object` kind binding, design-015 §5.2)? The desk's drop rules apply to an all-object set. */
35
+ export declare function objectsOnly(world: World, entities: readonly Entity[]): boolean;
36
+ /**
37
+ * A container's FACE and its inside's embedding for a drop (design-015 §9): the renderer's word
38
+ * through the nav geometry seam under the current camera (the face as drawn), else core's static
39
+ * portal rect and default framing. `undefined` = the container has no face (no area).
40
+ */
41
+ export declare function dropFaceOf(world: World, container: Entity, slot: NavGeometrySlot | undefined): {
42
+ readonly face: CanvasRect;
43
+ readonly affine: PortalAffine;
44
+ } | undefined;
45
+ /** Is the world point inside the rect (edges included)? */
46
+ export declare const insideRect: (r: CanvasRect, x: number, y: number) => boolean;
47
+ export interface DropPlacementPolicy {
48
+ canIngress(widgetTypeId: string, targetContainer: Entity): boolean;
49
+ /** K9: may an object of this type be made in this frame at all — the root's CanvasType placement (inside a container, `canIngress`). */
50
+ canPlace?(widgetTypeId: string, targetFrame: Entity): boolean;
51
+ }
52
+ export declare function createDropSystem(world: World, index: SpatialIndex<Entity>, placement?: DropPlacementPolicy, navGeometry?: NavGeometrySlot): System;
@@ -13,7 +13,8 @@
13
13
  * global tag version, design-003 §5.7). Selection commits ONCE at terminal
14
14
  * (`JustEnded`): replace with the hits, or union when the watched pointer holds
15
15
  * shift; `SelectionVersion` bumps once (the v1 marquee lesson). No `access.write`
16
- * — reads + the buffer + ctx selection tags only.
16
+ * — reads + the buffer + ctx selection tags only. A `Locked` widget is never a
17
+ * hit (design-015 §5.1, Q-g: the tape keeps it out of the vellum).
17
18
  *
18
19
  * Camera staleness: both corners convert with the CURRENT camera, so a mid-
19
20
  * marquee camera move re-projects the rect (accepted — design-002 §2).
@@ -7,7 +7,7 @@
7
7
  * Three triggers materialize a widget's declared ports (registry decl → kernel
8
8
  * `portAnchor`; a port carries Port + PortAnchor + PortOf → widget, and NO
9
9
  * Position/Size — `spatialSync` must never see it; design-004 §6, the
10
- * SelectionBox precedent). Because ports carry no Position/Size, this system
10
+ * precedent of the retired selection box). Because ports carry no Position/Size, this system
11
11
  * gives them their OWN tiny world AABB in the shared spatial index so they are
12
12
  * pickable (design-003 §3 port tier):
13
13
  * (a) connect tool → widgets in viewport+overscan (`200/zoom`); materialize at
@@ -8,6 +8,11 @@
8
8
  * (2) `ActiveTool` override — pan tool → "grab"; (3) else the mouse pointer's
9
9
  * `Targets` kind — a `HandleSpec` → directional resize, an entity with
10
10
  * `Position` (widget) → "default", `CanvasSurface`/none → "default".
11
+ * The pegboard tray (design-017 §4, K3): a specimen on its board a thing to take, "grab", its copy lifted "grabbing" (K9), over
12
+ * everything but the hand's. (design-018 §5: the lip's "pointer" retired with its handle — the drawer's handle is the app's DOM bar.)
13
+ * Above all of them (design-015 §8, D3t-a): with an object IN HAND, the mode in hand's own
14
+ * `cursor` (its `HeldToolDef.cursor` — "none" where the tool draws itself: the board's marker) while
15
+ * the mouse is over the object's drawing surface (`HeldPointer.part` "content") or presses the tool.
11
16
  *
12
17
  * Scheduled on the `CanvasSurface` anchor query (exactly one such entity,
13
18
  * guaranteed by install — the same idiom `pointerIngest` uses in l0-input.ts)
@@ -24,7 +24,7 @@
24
24
  * `frozen` ride the resource for T2's departing-plane reflector; T1's camera
25
25
  * math only needs c0/c1.
26
26
  */
27
- import type { TickSystem, World } from "@vibecook/strata-ecs";
27
+ import type { Entity, TickSystem, World } from "@vibecook/strata-ecs";
28
28
  import type { CameraState, PortalAffine } from "../../../kernel/src/index";
29
29
  /** The one in-flight nav transition (design-006 §3.1). Inactive = at rest. */
30
30
  export declare const NavTransition: import("@vibecook/strata-ecs").Resource<import("@vibecook/strata-ecs").ValueOf<{
@@ -37,8 +37,29 @@ export declare const NavTransition: import("@vibecook/strata-ecs").Resource<impo
37
37
  readonly frozen: import("@vibecook/strata-ecs").FieldSpec<"bool", true>;
38
38
  /** Bumps on every flight start; T2 distinguishes retarget from resume. */
39
39
  readonly epoch: import("@vibecook/strata-ecs").FieldSpec<"u32", true>;
40
+ /** CanvasSession/document identity captured at the authority cut. */
41
+ readonly documentEpoch: import("@vibecook/strata-ecs").FieldSpec<"u32", true>;
42
+ readonly fromFrame: import("@vibecook/strata-ecs").FieldSpec<"eid", true>;
43
+ readonly toFrame: import("@vibecook/strata-ecs").FieldSpec<"eid", true>;
44
+ readonly fromTypeId: import("@vibecook/strata-ecs").FieldSpec<"string", true>;
45
+ readonly toTypeId: import("@vibecook/strata-ecs").FieldSpec<"string", true>;
40
46
  /** Response multiplier from octave distance (locked at start; §4). */
41
47
  readonly durMul: import("@vibecook/strata-ecs").FieldSpec<"f32", true>;
48
+ /**
49
+ * The DEPARTED frame's camera at the cut (design-013 §8 B7, D-B7.1): what it renders under
50
+ * at p = 0 — bit for bit, never through the affine and back — and throughout a frozen
51
+ * flight. `departedCameraOf` is the one reader.
52
+ */
53
+ readonly fromX: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
54
+ readonly fromY: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
55
+ readonly fromZ: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
56
+ /**
57
+ * Ticks the spring has stepped. The FIRST tick after the cut holds at p = 0 (B7): one frame
58
+ * is drawn with the camera at the exact `c0` — the arriving frame IS the portal's last frame,
59
+ * the departed frame IS its pre-cut frame — so the cut changes no pixel and the motion begins
60
+ * from a frame that exists. The oracle's `p = 0` still is a product frame, not a fiction.
61
+ */
62
+ readonly ticks: import("@vibecook/strata-ecs").FieldSpec<"u32", true>;
42
63
  readonly c0x: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
43
64
  readonly c0y: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
44
65
  readonly c0z: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
@@ -59,8 +80,29 @@ export declare const NavTransition: import("@vibecook/strata-ecs").Resource<impo
59
80
  readonly frozen: import("@vibecook/strata-ecs").FieldSpec<"bool", true>;
60
81
  /** Bumps on every flight start; T2 distinguishes retarget from resume. */
61
82
  readonly epoch: import("@vibecook/strata-ecs").FieldSpec<"u32", true>;
83
+ /** CanvasSession/document identity captured at the authority cut. */
84
+ readonly documentEpoch: import("@vibecook/strata-ecs").FieldSpec<"u32", true>;
85
+ readonly fromFrame: import("@vibecook/strata-ecs").FieldSpec<"eid", true>;
86
+ readonly toFrame: import("@vibecook/strata-ecs").FieldSpec<"eid", true>;
87
+ readonly fromTypeId: import("@vibecook/strata-ecs").FieldSpec<"string", true>;
88
+ readonly toTypeId: import("@vibecook/strata-ecs").FieldSpec<"string", true>;
62
89
  /** Response multiplier from octave distance (locked at start; §4). */
63
90
  readonly durMul: import("@vibecook/strata-ecs").FieldSpec<"f32", true>;
91
+ /**
92
+ * The DEPARTED frame's camera at the cut (design-013 §8 B7, D-B7.1): what it renders under
93
+ * at p = 0 — bit for bit, never through the affine and back — and throughout a frozen
94
+ * flight. `departedCameraOf` is the one reader.
95
+ */
96
+ readonly fromX: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
97
+ readonly fromY: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
98
+ readonly fromZ: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
99
+ /**
100
+ * Ticks the spring has stepped. The FIRST tick after the cut holds at p = 0 (B7): one frame
101
+ * is drawn with the camera at the exact `c0` — the arriving frame IS the portal's last frame,
102
+ * the departed frame IS its pre-cut frame — so the cut changes no pixel and the motion begins
103
+ * from a frame that exists. The oracle's `p = 0` still is a product frame, not a fiction.
104
+ */
105
+ readonly ticks: import("@vibecook/strata-ecs").FieldSpec<"u32", true>;
64
106
  readonly c0x: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
65
107
  readonly c0y: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
66
108
  readonly c0z: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
@@ -72,14 +114,54 @@ export declare const NavTransition: import("@vibecook/strata-ecs").Resource<impo
72
114
  readonly aox: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
73
115
  readonly aoy: import("@vibecook/strata-ecs").FieldSpec<"f64", true>;
74
116
  }>;
117
+ export interface NavTransitionIdentity {
118
+ readonly documentEpoch: number;
119
+ readonly fromFrame: Entity;
120
+ readonly toFrame: Entity;
121
+ readonly fromTypeId: string;
122
+ readonly toTypeId: string;
123
+ }
124
+ /** The one in-flight transition's field values, as `departedCameraOf` reads them. */
125
+ export interface DepartedCameraInputs {
126
+ readonly frozen: boolean;
127
+ readonly c0x: number;
128
+ readonly c0y: number;
129
+ readonly c0z: number;
130
+ readonly fromX: number;
131
+ readonly fromY: number;
132
+ readonly fromZ: number;
133
+ readonly as: number;
134
+ readonly aox: number;
135
+ readonly aoy: number;
136
+ }
137
+ /**
138
+ * The camera the DEPARTED frame renders under this frame (design-013 §8 B7, D-B7.1; the
139
+ * ground's `departedCamera`, moved onto the resource). Riding the flight through the affine
140
+ * (`outgoingCamera`) — except at the cut itself, where it is the pre-cut camera bit for bit
141
+ * (the affine and its inverse round-trip to within an ulp, and at zoom 1 an ulp is the other
142
+ * side of a decade), and throughout a FROZEN flight, where the departed frame stays at its
143
+ * pre-cut appearance and fades (design-006 §5: the cap broke the geometry, so the story is a
144
+ * dissolve, not a portal). Every presenter of the departed frame — the ground's second slot,
145
+ * the DOM's departing plane — reads this one rule, so they agree to the bit.
146
+ */
147
+ export declare function departedCameraOf(t: DepartedCameraInputs, cam: CameraState): CameraState;
75
148
  /**
76
149
  * Arm a flight from the already-cut world: continuity-solve was done by the
77
- * caller (`exact` = c0 in destination-frame coords), the arrival `c1` is
150
+ * caller (`exact` = c0 in destination-frame coords — from a LIVE PORTAL the
151
+ * camera the inside was already rendering under, `outgoingCamera(M, camPre)`,
152
+ * so the cut changes no pixel; D-B7.1), the arrival `c1` is
78
153
  * already clamped. Applies the depth cap (§5), snaps the camera to c0, and
79
154
  * activates the resource. Callers guarantee a live Viewport — headless/no-
80
155
  * viewport paths snap to the arrival instead and never reach here.
81
156
  */
82
- export declare function startNavFlight(world: World, kind: "enter" | "exit", A: PortalAffine, exact: CameraState, c1: CameraState): void;
157
+ export declare function startNavFlight(world: World, kind: "enter" | "exit", A: PortalAffine, exact: CameraState, c1: CameraState, identity?: NavTransitionIdentity): void;
158
+ /**
159
+ * Publish an epoch-bound logical switch even when geometry is deliberately cut. A cut that
160
+ * lands mid-flight ENDS that flight: its departed set is released here, because the tick that
161
+ * owns the release never runs for an inactive resource (B9 review blocker 4 — `Retained` leaked
162
+ * for the session, and Residency never evicted those keys).
163
+ */
164
+ export declare function publishNavCut(world: World, kind: "enter" | "exit", from: CameraState, to: CameraState, identity?: NavTransitionIdentity, A?: PortalAffine): void;
83
165
  /** Deactivate without touching the camera (integrity pops, gesture yields). */
84
166
  export declare function abortNavFlight(world: World): void;
85
167
  /**