@vibecook/ice 0.11.0 → 0.15.0-desk.1

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 (389) hide show
  1. package/README.md +79 -50
  2. package/dist/chunk-AMMFQP2C.js +2444 -0
  3. package/dist/chunk-AMMFQP2C.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-ENIFIUEP.js +155 -0
  7. package/dist/chunk-ENIFIUEP.js.map +1 -0
  8. package/dist/chunk-H3SKYJLK.js +8269 -0
  9. package/dist/chunk-H3SKYJLK.js.map +1 -0
  10. package/dist/{chunk-OR5FNVUE.js → chunk-JS6PG6YD.js} +398 -167
  11. package/dist/chunk-JS6PG6YD.js.map +1 -0
  12. package/dist/{chunk-VGVDJZSP.js → chunk-PFJN3XN2.js} +13232 -7388
  13. package/dist/chunk-PFJN3XN2.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-U4YMA4TJ.js +635 -0
  17. package/dist/chunk-U4YMA4TJ.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 +12734 -0
  23. package/dist/desk-objects.js.map +1 -0
  24. package/dist/desk.js +497 -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 +1047 -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 +36 -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 +73 -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 +53 -1
  93. package/dist/types/packages/core/src/systems/l2-arbitrate.d.ts +18 -4
  94. package/dist/types/packages/core/src/systems/l2-recognize.d.ts +3 -1
  95. package/dist/types/packages/core/src/systems/l3-behave.d.ts +4 -1
  96. package/dist/types/packages/core/src/systems/l3-claim.d.ts +7 -0
  97. package/dist/types/packages/core/src/systems/l3-connect.d.ts +1 -1
  98. package/dist/types/packages/core/src/systems/l3-drop.d.ts +30 -1
  99. package/dist/types/packages/core/src/systems/l3-marquee.d.ts +2 -1
  100. package/dist/types/packages/core/src/systems/l3-ports.d.ts +1 -1
  101. package/dist/types/packages/core/src/systems/l4-cursor.d.ts +5 -0
  102. package/dist/types/packages/core/src/systems/nav-flight.d.ts +85 -3
  103. package/dist/types/packages/core/src/systems/nav-tap.d.ts +44 -0
  104. package/dist/types/packages/core/src/systems/press-button.d.ts +25 -0
  105. package/dist/types/packages/core/src/systems/press-wheel.d.ts +11 -0
  106. package/dist/types/packages/core/src/systems/tray.d.ts +111 -0
  107. package/dist/types/packages/core/src/systems/zoom-through.d.ts +30 -0
  108. package/dist/types/packages/core/src/tools/define-tool.d.ts +10 -0
  109. package/dist/types/packages/core/src/widget/define-widget.d.ts +166 -63
  110. package/dist/types/packages/core/src/widget/equip.d.ts +14 -2
  111. package/dist/types/packages/core/src/widget/held-tools.d.ts +83 -0
  112. package/dist/types/packages/core/src/widget/menu-actions.d.ts +44 -0
  113. package/dist/types/packages/core/src/widget/mount-store.d.ts +21 -46
  114. package/dist/types/packages/core/src/widget/spawn.d.ts +1 -1
  115. package/dist/types/packages/desk/src/assets/blue-noise.gen.d.ts +10 -0
  116. package/dist/types/packages/desk/src/card/card.d.ts +103 -0
  117. package/dist/types/packages/desk/src/compose/ambient.d.ts +59 -0
  118. package/dist/types/packages/desk/src/compose/builder.d.ts +306 -0
  119. package/dist/types/packages/desk/src/compose/children.d.ts +3 -0
  120. package/dist/types/packages/desk/src/compose/index.d.ts +14 -0
  121. package/dist/types/packages/desk/src/compose/marks.d.ts +133 -0
  122. package/dist/types/packages/desk/src/compose/pick.d.ts +5 -0
  123. package/dist/types/packages/desk/src/compose/reflector.d.ts +120 -0
  124. package/dist/types/packages/desk/src/compose/tap.d.ts +5 -0
  125. package/dist/types/packages/desk/src/docs.d.ts +23 -0
  126. package/dist/types/packages/desk/src/engine/budget.d.ts +43 -0
  127. package/dist/types/packages/desk/src/engine/device.d.ts +54 -0
  128. package/dist/types/packages/desk/src/engine/index.d.ts +5 -0
  129. package/dist/types/packages/desk/src/engine/pipeline.d.ts +36 -0
  130. package/dist/types/packages/desk/src/engine/rasters.d.ts +66 -0
  131. package/dist/types/packages/desk/src/engine/records.d.ts +56 -0
  132. package/dist/types/packages/desk/src/engine/shader.d.ts +22 -0
  133. package/dist/types/packages/desk/src/engine/struct.d.ts +39 -0
  134. package/dist/types/packages/desk/src/engine/target.d.ts +26 -0
  135. package/dist/types/packages/desk/src/faults.d.ts +38 -0
  136. package/dist/types/packages/desk/src/gpu-ablation.d.ts +61 -0
  137. package/dist/types/packages/desk/src/gpu-memory.d.ts +54 -0
  138. package/dist/types/packages/desk/src/gpu-profiler.d.ts +141 -0
  139. package/dist/types/packages/desk/src/gpu-wrap.d.ts +8 -0
  140. package/dist/types/packages/desk/src/ground.d.ts +537 -0
  141. package/dist/types/packages/desk/src/hold/focus.d.ts +53 -0
  142. package/dist/types/packages/desk/src/hold/pose.d.ts +152 -0
  143. package/dist/types/packages/desk/src/hold/shaders.d.ts +9 -0
  144. package/dist/types/packages/desk/src/host/editor.d.ts +18 -0
  145. package/dist/types/packages/desk/src/host/index.d.ts +9 -0
  146. package/dist/types/packages/desk/src/host/ink.d.ts +18 -0
  147. package/dist/types/packages/desk/src/host/layer.d.ts +536 -0
  148. package/dist/types/packages/desk/src/host/picture.d.ts +2 -0
  149. package/dist/types/packages/desk/src/host/surface.d.ts +5 -0
  150. package/dist/types/packages/desk/src/index.d.ts +16 -0
  151. package/dist/types/packages/desk/src/kind.d.ts +189 -0
  152. package/dist/types/packages/desk/src/kinds/world.d.ts +447 -0
  153. package/dist/types/packages/desk/src/kit/arrays.d.ts +88 -0
  154. package/dist/types/packages/desk/src/kit/blobs.d.ts +40 -0
  155. package/dist/types/packages/desk/src/kit/book.d.ts +2 -0
  156. package/dist/types/packages/desk/src/kit/editor.d.ts +105 -0
  157. package/dist/types/packages/desk/src/kit/eye.d.ts +37 -0
  158. package/dist/types/packages/desk/src/kit/hold.d.ts +1 -0
  159. package/dist/types/packages/desk/src/kit/index.d.ts +26 -0
  160. package/dist/types/packages/desk/src/kit/inside.d.ts +116 -0
  161. package/dist/types/packages/desk/src/kit/layer.d.ts +159 -0
  162. package/dist/types/packages/desk/src/kit/light.d.ts +3 -0
  163. package/dist/types/packages/desk/src/kit/mesh.d.ts +29 -0
  164. package/dist/types/packages/desk/src/kit/mips.d.ts +2 -0
  165. package/dist/types/packages/desk/src/kit/nav.d.ts +2 -0
  166. package/dist/types/packages/desk/src/kit/paper-tex.d.ts +5 -0
  167. package/dist/types/packages/desk/src/kit/physics.d.ts +44 -0
  168. package/dist/types/packages/desk/src/kit/place.d.ts +44 -0
  169. package/dist/types/packages/desk/src/kit/print.d.ts +30 -0
  170. package/dist/types/packages/desk/src/kit/raster.d.ts +34 -0
  171. package/dist/types/packages/desk/src/kit/sdf.d.ts +1 -0
  172. package/dist/types/packages/desk/src/kit/seeds.d.ts +11 -0
  173. package/dist/types/packages/desk/src/kit/services.d.ts +34 -0
  174. package/dist/types/packages/desk/src/kit/springs.d.ts +12 -0
  175. package/dist/types/packages/desk/src/kit/strokes.d.ts +93 -0
  176. package/dist/types/packages/desk/src/kit/text.d.ts +142 -0
  177. package/dist/types/packages/desk/src/kit/uniform.d.ts +8 -0
  178. package/dist/types/packages/desk/src/kit/view.d.ts +39 -0
  179. package/dist/types/packages/desk/src/kit/wgsl.d.ts +15 -0
  180. package/dist/types/packages/desk/src/lattice/line.d.ts +15 -0
  181. package/dist/types/packages/desk/src/lattice/lod.d.ts +52 -0
  182. package/dist/types/packages/desk/src/lattice/ruler.d.ts +88 -0
  183. package/dist/types/packages/desk/src/marks/assemble.d.ts +65 -0
  184. package/dist/types/packages/desk/src/marks/ease.d.ts +4 -0
  185. package/dist/types/packages/desk/src/marks/laser.d.ts +41 -0
  186. package/dist/types/packages/desk/src/marks/layout.d.ts +167 -0
  187. package/dist/types/packages/desk/src/marks/pass.d.ts +59 -0
  188. package/dist/types/packages/desk/src/marks/shaders.d.ts +12 -0
  189. package/dist/types/packages/desk/src/mat/grid.d.ts +50 -0
  190. package/dist/types/packages/desk/src/mat/lamp.d.ts +14 -0
  191. package/dist/types/packages/desk/src/mat/layout.d.ts +144 -0
  192. package/dist/types/packages/desk/src/mat/mat-pass.d.ts +83 -0
  193. package/dist/types/packages/desk/src/mat/night.d.ts +95 -0
  194. package/dist/types/packages/desk/src/mat/projector.d.ts +39 -0
  195. package/dist/types/packages/desk/src/mat/shaders.d.ts +17 -0
  196. package/dist/types/packages/desk/src/mat/tilt.d.ts +14 -0
  197. package/dist/types/packages/desk/src/missing/layout.d.ts +27 -0
  198. package/dist/types/packages/desk/src/missing/object.d.ts +6 -0
  199. package/dist/types/packages/desk/src/missing/pass.d.ts +39 -0
  200. package/dist/types/packages/desk/src/missing/shaders.d.ts +7 -0
  201. package/dist/types/packages/desk/src/missing/slots.d.ts +8 -0
  202. package/dist/types/packages/desk/src/nav/flight.d.ts +186 -0
  203. package/dist/types/packages/desk/src/nav/portal.d.ts +95 -0
  204. package/dist/types/packages/desk/src/object.d.ts +46 -0
  205. package/dist/types/packages/desk/src/pass-instrument.d.ts +89 -0
  206. package/dist/types/packages/desk/src/shaders.d.ts +12 -0
  207. package/dist/types/packages/desk/src/shaders.gen.d.ts +17 -0
  208. package/dist/types/packages/desk/src/submit-instrument.d.ts +36 -0
  209. package/dist/types/packages/desk/src/theme.d.ts +497 -0
  210. package/dist/types/packages/desk/src/tray/carry.d.ts +99 -0
  211. package/dist/types/packages/desk/src/tray/drawer.d.ts +124 -0
  212. package/dist/types/packages/desk/src/tray/flux.d.ts +49 -0
  213. package/dist/types/packages/desk/src/tray/index.d.ts +4 -0
  214. package/dist/types/packages/desk/src/tray/lattice.d.ts +71 -0
  215. package/dist/types/packages/desk/src/tray/layout.d.ts +7 -0
  216. package/dist/types/packages/desk/src/tray/look.d.ts +29 -0
  217. package/dist/types/packages/desk/src/tray/pass.d.ts +101 -0
  218. package/dist/types/packages/desk/src/tray/shaders.d.ts +10 -0
  219. package/dist/types/packages/desk/src/tray/specimens.d.ts +214 -0
  220. package/dist/types/packages/devtools/src/attach.d.ts +22 -8
  221. package/dist/types/packages/devtools/src/dock.d.ts +18 -14
  222. package/dist/types/packages/devtools/src/gpu-panel.d.ts +105 -0
  223. package/dist/types/packages/devtools/src/index.d.ts +5 -4
  224. package/dist/types/packages/dom/src/desk-host.d.ts +104 -0
  225. package/dist/types/packages/dom/src/host.d.ts +13 -14
  226. package/dist/types/packages/dom/src/index.d.ts +12 -10
  227. package/dist/types/packages/dom/src/loop.d.ts +18 -1
  228. package/dist/types/packages/dom/src/pointer-adapter.d.ts +11 -29
  229. package/dist/types/packages/dom/src/widget-focus.d.ts +17 -13
  230. package/dist/types/packages/ice/src/desk-engine.d.ts +2 -0
  231. package/dist/types/packages/ice/src/desk-kit.d.ts +6 -0
  232. package/dist/types/packages/ice/src/desk-objects.d.ts +5 -0
  233. package/dist/types/packages/ice/src/desk.d.ts +5 -0
  234. package/dist/types/packages/kernel/src/atlas-pack.d.ts +157 -0
  235. package/dist/types/packages/kernel/src/bezier.d.ts +0 -15
  236. package/dist/types/packages/kernel/src/coords.d.ts +0 -39
  237. package/dist/types/packages/kernel/src/index.d.ts +2 -2
  238. package/dist/types/packages/kernel/src/nav-flight.d.ts +6 -0
  239. package/dist/types/packages/kernel/src/tray.d.ts +155 -0
  240. package/dist/types/packages/objects/src/board/board-pass.d.ts +180 -0
  241. package/dist/types/packages/objects/src/board/board-pen.d.ts +36 -0
  242. package/dist/types/packages/objects/src/board/board.d.ts +104 -0
  243. package/dist/types/packages/objects/src/board/data.d.ts +31 -0
  244. package/dist/types/packages/objects/src/board/history.d.ts +33 -0
  245. package/dist/types/packages/objects/src/board/kind.d.ts +208 -0
  246. package/dist/types/packages/objects/src/board/layout.d.ts +102 -0
  247. package/dist/types/packages/objects/src/board/object.d.ts +7 -0
  248. package/dist/types/packages/objects/src/board/pen.d.ts +71 -0
  249. package/dist/types/packages/objects/src/board/shaders.d.ts +36 -0
  250. package/dist/types/packages/objects/src/board/stroke.d.ts +99 -0
  251. package/dist/types/packages/objects/src/board/theme.d.ts +150 -0
  252. package/dist/types/packages/objects/src/calendar/data.d.ts +97 -0
  253. package/dist/types/packages/objects/src/calendar/events.d.ts +58 -0
  254. package/dist/types/packages/objects/src/calendar/hand.d.ts +53 -0
  255. package/dist/types/packages/objects/src/calendar/host/input.d.ts +67 -0
  256. package/dist/types/packages/objects/src/calendar/host/print.d.ts +9 -0
  257. package/dist/types/packages/objects/src/calendar/kind.d.ts +297 -0
  258. package/dist/types/packages/objects/src/calendar/law.d.ts +151 -0
  259. package/dist/types/packages/objects/src/calendar/layout.d.ts +47 -0
  260. package/dist/types/packages/objects/src/calendar/month.d.ts +75 -0
  261. package/dist/types/packages/objects/src/calendar/object.d.ts +45 -0
  262. package/dist/types/packages/objects/src/calendar/pad.d.ts +42 -0
  263. package/dist/types/packages/objects/src/calendar/pass.d.ts +229 -0
  264. package/dist/types/packages/objects/src/calendar/print.d.ts +87 -0
  265. package/dist/types/packages/objects/src/calendar/printing.d.ts +80 -0
  266. package/dist/types/packages/objects/src/calendar/roll.d.ts +45 -0
  267. package/dist/types/packages/objects/src/calendar/shaders.d.ts +12 -0
  268. package/dist/types/packages/objects/src/calendar/sheet.d.ts +43 -0
  269. package/dist/types/packages/objects/src/calendar/tiles.d.ts +67 -0
  270. package/dist/types/packages/objects/src/calendar/turn.d.ts +73 -0
  271. package/dist/types/packages/objects/src/calendar/writing.d.ts +42 -0
  272. package/dist/types/packages/objects/src/index.d.ts +22 -0
  273. package/dist/types/packages/objects/src/kinds.d.ts +24 -0
  274. package/dist/types/packages/objects/src/minimat/inside.d.ts +17 -0
  275. package/dist/types/packages/objects/src/minimat/kind.d.ts +51 -0
  276. package/dist/types/packages/objects/src/minimat/layout.d.ts +83 -0
  277. package/dist/types/packages/objects/src/minimat/minimat.d.ts +179 -0
  278. package/dist/types/packages/objects/src/minimat/object.d.ts +8 -0
  279. package/dist/types/packages/objects/src/minimat/pass.d.ts +61 -0
  280. package/dist/types/packages/objects/src/minimat/shaders.d.ts +10 -0
  281. package/dist/types/packages/objects/src/minimat/theme.d.ts +98 -0
  282. package/dist/types/packages/objects/src/notebook/ink.d.ts +70 -0
  283. package/dist/types/packages/objects/src/notebook/kind.d.ts +236 -0
  284. package/dist/types/packages/objects/src/notebook/law.d.ts +129 -0
  285. package/dist/types/packages/objects/src/notebook/layout.d.ts +46 -0
  286. package/dist/types/packages/objects/src/notebook/leaf.d.ts +44 -0
  287. package/dist/types/packages/objects/src/notebook/mesh.d.ts +20 -0
  288. package/dist/types/packages/objects/src/notebook/motion.d.ts +107 -0
  289. package/dist/types/packages/objects/src/notebook/object.d.ts +8 -0
  290. package/dist/types/packages/objects/src/notebook/pages.d.ts +56 -0
  291. package/dist/types/packages/objects/src/notebook/pass.d.ts +197 -0
  292. package/dist/types/packages/objects/src/notebook/pick.d.ts +30 -0
  293. package/dist/types/packages/objects/src/notebook/raster.d.ts +28 -0
  294. package/dist/types/packages/objects/src/notebook/shaders.d.ts +11 -0
  295. package/dist/types/packages/objects/src/notebook/shape.d.ts +155 -0
  296. package/dist/types/packages/objects/src/notebook/theme.d.ts +76 -0
  297. package/dist/types/packages/objects/src/palette.d.ts +577 -0
  298. package/dist/types/packages/objects/src/paper/host/body.d.ts +30 -0
  299. package/dist/types/packages/objects/src/paper/kind.d.ts +81 -0
  300. package/dist/types/packages/objects/src/paper/layout.d.ts +73 -0
  301. package/dist/types/packages/objects/src/paper/object.d.ts +31 -0
  302. package/dist/types/packages/objects/src/paper/pages.d.ts +43 -0
  303. package/dist/types/packages/objects/src/paper/paper-pass.d.ts +86 -0
  304. package/dist/types/packages/objects/src/paper/paper.d.ts +117 -0
  305. package/dist/types/packages/objects/src/paper/shaders.d.ts +18 -0
  306. package/dist/types/packages/objects/src/paper/theme.d.ts +58 -0
  307. package/dist/types/packages/objects/src/paper/typing.d.ts +51 -0
  308. package/dist/types/packages/objects/src/paper/writing.d.ts +161 -0
  309. package/dist/types/packages/objects/src/photo/carry.d.ts +33 -0
  310. package/dist/types/packages/objects/src/photo/kind.d.ts +136 -0
  311. package/dist/types/packages/objects/src/photo/layout.d.ts +39 -0
  312. package/dist/types/packages/objects/src/photo/object.d.ts +5 -0
  313. package/dist/types/packages/objects/src/photo/photo-pass.d.ts +104 -0
  314. package/dist/types/packages/objects/src/photo/photo.d.ts +262 -0
  315. package/dist/types/packages/objects/src/photo/pictures.d.ts +152 -0
  316. package/dist/types/packages/objects/src/photo/sample.d.ts +9 -0
  317. package/dist/types/packages/objects/src/photo/shaders.d.ts +18 -0
  318. package/dist/types/packages/objects/src/preset.d.ts +44 -0
  319. package/dist/types/packages/objects/src/shaders.d.ts +3 -0
  320. package/dist/types/packages/objects/src/shaders.gen.d.ts +21 -0
  321. package/dist/types/packages/react/src/canvas-hooks.d.ts +12 -0
  322. package/dist/types/packages/react/src/desk.d.ts +56 -0
  323. package/dist/types/packages/react/src/engine-context.d.ts +2 -2
  324. package/dist/types/packages/react/src/frame-preview-boundary.d.ts +19 -0
  325. package/dist/types/packages/react/src/hooks.d.ts +9 -14
  326. package/dist/types/packages/react/src/index.d.ts +16 -9
  327. package/dist/types/packages/react/src/keymap.d.ts +21 -2
  328. package/dist/types/packages/react/src/selection-menu.d.ts +174 -0
  329. package/dist/types/packages/react/src/tray-bar.d.ts +124 -0
  330. package/package.json +64 -31
  331. package/dist/chunk-2TNVB2ON.js +0 -1163
  332. package/dist/chunk-2TNVB2ON.js.map +0 -1
  333. package/dist/chunk-OR5FNVUE.js.map +0 -1
  334. package/dist/chunk-Q665T4L7.js +0 -681
  335. package/dist/chunk-Q665T4L7.js.map +0 -1
  336. package/dist/chunk-VGVDJZSP.js.map +0 -1
  337. package/dist/ground.js +0 -1108
  338. package/dist/ground.js.map +0 -1
  339. package/dist/r3f.js +0 -1644
  340. package/dist/r3f.js.map +0 -1
  341. package/dist/types/packages/core/src/input/measure-queue.d.ts +0 -30
  342. package/dist/types/packages/core/src/settings/ground-config.d.ts +0 -101
  343. package/dist/types/packages/core/src/systems/measure-ingest.d.ts +0 -26
  344. package/dist/types/packages/devtools/src/gl-panel.d.ts +0 -69
  345. package/dist/types/packages/dom/src/measure-adapter.d.ts +0 -31
  346. package/dist/types/packages/dom/src/measure-wiring.d.ts +0 -49
  347. package/dist/types/packages/dom/src/planes.d.ts +0 -33
  348. package/dist/types/packages/dom/src/reflectors/chrome.d.ts +0 -33
  349. package/dist/types/packages/dom/src/reflectors/dom-widgets.d.ts +0 -59
  350. package/dist/types/packages/dom/src/reflectors/graybox.d.ts +0 -31
  351. package/dist/types/packages/dom/src/reflectors/plane-transform.d.ts +0 -38
  352. package/dist/types/packages/ground/src/index.d.ts +0 -69
  353. package/dist/types/packages/ground/src/layer.d.ts +0 -40
  354. package/dist/types/packages/ground/src/pass.d.ts +0 -41
  355. package/dist/types/packages/ground/src/passes/grid-contract.d.ts +0 -28
  356. package/dist/types/packages/ground/src/passes/grid-magnet-pass.d.ts +0 -2
  357. package/dist/types/packages/ground/src/passes/grid-magnet.d.ts +0 -31
  358. package/dist/types/packages/ground/src/passes/grid.d.ts +0 -10
  359. package/dist/types/packages/ground/src/passes/guides-collect.d.ts +0 -14
  360. package/dist/types/packages/ground/src/passes/guides.d.ts +0 -3
  361. package/dist/types/packages/ground/src/passes/magnet-collect.d.ts +0 -63
  362. package/dist/types/packages/ground/src/passes/soup-collect.d.ts +0 -35
  363. package/dist/types/packages/ground/src/passes/soup-mesh.d.ts +0 -8
  364. package/dist/types/packages/ground/src/passes/wires-collect.d.ts +0 -35
  365. package/dist/types/packages/ground/src/passes/wires.d.ts +0 -10
  366. package/dist/types/packages/ground/src/poles.d.ts +0 -47
  367. package/dist/types/packages/ground/src/renderer.d.ts +0 -15
  368. package/dist/types/packages/ice/src/ground.d.ts +0 -1
  369. package/dist/types/packages/ice/src/r3f.d.ts +0 -1
  370. package/dist/types/packages/kernel/src/eviction.d.ts +0 -23
  371. package/dist/types/packages/kernel/src/zoom-bands.d.ts +0 -19
  372. package/dist/types/packages/r3f/src/bridge.d.ts +0 -129
  373. package/dist/types/packages/r3f/src/composite-material.d.ts +0 -26
  374. package/dist/types/packages/r3f/src/compositor-pass.d.ts +0 -105
  375. package/dist/types/packages/r3f/src/dev-write-trap.d.ts +0 -30
  376. package/dist/types/packages/r3f/src/gl-root.d.ts +0 -96
  377. package/dist/types/packages/r3f/src/gl-router.d.ts +0 -70
  378. package/dist/types/packages/r3f/src/index.d.ts +0 -17
  379. package/dist/types/packages/r3f/src/island-state.d.ts +0 -112
  380. package/dist/types/packages/r3f/src/island.d.ts +0 -13
  381. package/dist/types/packages/r3f/src/pool.d.ts +0 -56
  382. package/dist/types/packages/r3f/src/preview-capture.d.ts +0 -19
  383. package/dist/types/packages/r3f/src/resource-registry.d.ts +0 -30
  384. package/dist/types/packages/r3f/src/self-sustain.d.ts +0 -39
  385. package/dist/types/packages/r3f/src/use-island-frame.d.ts +0 -39
  386. package/dist/types/packages/react/src/infinite-canvas.d.ts +0 -140
  387. package/dist/types/packages/react/src/preview-snapshots.d.ts +0 -17
  388. package/dist/types/packages/react/src/widget-preview.d.ts +0 -14
  389. 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,73 @@
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
+ * - every route above is the PRIMARY button's (petition I28, press-button.ts): a secondary press — and a middle one with nothing
31
+ * to pan — is a point in the hand as on the desk: it keeps no `HeldPress`, so it puts nothing down, works no part, lays no stroke.
32
+ * The ways back are OPS (`ops.putDown`, structural) and a system may not run them mid-tick: it writes
33
+ * the one-tick `HeldIntent` and the facade applies it after the step (D2b's `NavIntent`, same shape).
34
+ * Nothing here reads a kind: the seam gives a frame and (D3t-a) the part under a point; the tool in
35
+ * hand is core's `HeldTool`.
36
+ */
37
+ import type { Entity, System, World } from "@vibecook/strata-ecs";
38
+ /** 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). */
39
+ export interface HeldScreenFrame {
40
+ readonly cx: number;
41
+ readonly cy: number;
42
+ readonly hx: number;
43
+ readonly hy: number;
44
+ readonly s: number;
45
+ readonly settled: boolean;
46
+ }
47
+ /**
48
+ * The pose seam: the renderer's word on where the held object is — `undefined` before its first frame — and (D3t-a) which of
49
+ * 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
50
+ * `content`, its `frame`), null over nothing; absent = no parts ("content" inside the frame).
51
+ */
52
+ export interface HeldPoseSource {
53
+ frame(entity: Entity): HeldScreenFrame | undefined;
54
+ part?(entity: Entity, x: number, y: number): string | null;
55
+ }
56
+ /** The stack's slot for the pose source — a mutable box, so the renderer can arrive after install (as `framePick`). */
57
+ export interface HeldPoseSlot {
58
+ current: HeldPoseSource | null;
59
+ }
60
+ /** 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. */
61
+ export declare const HOLD_INPUT: {
62
+ readonly zoomMin: 0.72;
63
+ readonly zoomMax: 3;
64
+ readonly wheelRate: 0.0105;
65
+ readonly muteMs: 400;
66
+ readonly muteMoreMs: 250;
67
+ readonly slopPx: 3;
68
+ };
69
+ /** The held object, or undefined. */
70
+ export declare function heldEntity(world: World): Entity | undefined;
71
+ export declare function createHeldInput(world: World, opts: {
72
+ readonly pose: HeldPoseSlot;
73
+ }): 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";
@@ -42,17 +42,69 @@
42
42
  * pickTopAt, so pick can never diverge from paint), then the CanvasSurface
43
43
  * entity as the guaranteed fallback (design-001 §4). Relations are written
44
44
  * change-only (design-002 §4 hygiene). Wires/ports are M8 — skipped.
45
+ *
46
+ * `pickAt` is the exact pick OUT of the tick (petition I27 — the desk's
47
+ * `handle.pick`, a host's right-click): the `TouchesExact` body above run on
48
+ * the world as the last tick left it, read-only — one body, so a host's pick
49
+ * and a press can never disagree.
45
50
  */
46
51
  import type { Entity, System, TickSystem, World } from "@vibecook/strata-ecs";
47
52
  import { SpatialIndex } from "../../../kernel/src/index";
48
53
  import { type WirePickSource } from "../ops/point-pick";
54
+ /**
55
+ * The FRAME pick source (design-014, B3b): the ground's answer to "what is
56
+ * under this world point on card `e`" — `content`, `frame` (the chrome band
57
+ * outside the content rect), `outside`, or a PART the registered card program
58
+ * names (`close`, `lock` …) — or `undefined`: the source has NO GEOMETRY for the card
59
+ * (the ground's pipelines are still compiling, the card has not been drawn yet, or
60
+ * creation failed), and the box tier's answer stands. `undefined` is not `outside`: a
61
+ * card the ground cannot see is still a card (B9 review blocker 1 — a source that
62
+ * answered `outside` there made every card unclickable until the first build, and for
63
+ * good when `Ground.create` rejected). `pad()` is how far the chrome reaches past the
64
+ * content rect, world units: the spatial index holds content rects, so
65
+ * `picking` widens its search by it and asks the source about candidates the
66
+ * boxes missed. Set on the interaction stack by the ground layer at mount;
67
+ * `null` = every hit is the box's (the stratified profile).
68
+ */
69
+ export interface FramePickSource {
70
+ pad(): number;
71
+ hit(e: Entity, wx: number, wy: number): string | undefined;
72
+ /**
73
+ * The source's geometry is MOVING under a still pointer (a reveal growing a control, a lift): `picking` runs
74
+ * every frame this answers true, so the part under a motionless pointer is the part that is there now. Absent
75
+ * = never; the pointer and the spatial index are then the only wakes (B9 review).
76
+ */
77
+ live?(): boolean;
78
+ /**
79
+ * The widgets the source draws LIFTED this frame — above the frame's own order and away from their facts (design-015 §6's
80
+ * print in a hand, flicked or gliding; D3t-a): the spatial index still holds their fact rects, so the frame tier asks
81
+ * these FIRST, wherever they are drawn, and the topmost that answers is the hit — a press catches a gliding print where
82
+ * it is, and its old rect no longer does (its geometry says `outside` there). Absent = none.
83
+ */
84
+ lifted?(): Iterable<Entity>;
85
+ }
86
+ /** The stack's slot for the frame pick source — a mutable box, so the ground can arrive after install. */
87
+ export interface FramePickSlot {
88
+ current: FramePickSource | null;
89
+ }
90
+ /** What a press at a point would touch (`TouchesExact`): the entity, and the PART under it (`""` the thing itself — design-014). */
91
+ export interface PointPick {
92
+ readonly entity: Entity;
93
+ readonly part: string;
94
+ }
49
95
  export interface PickingSystems {
50
96
  spatialSync: TickSystem;
51
97
  picking: System;
52
98
  /** The shared spatial index — snap/drop/marquee consume the SAME instance. */
53
99
  index: SpatialIndex<Entity>;
100
+ /**
101
+ * The exact pick OUT of the tick (petition I27): what a press at a SCREEN point (CSS px of the view) would touch now — the
102
+ * `TouchesExact` body `picking` runs, on the world as the last tick left it and the camera as it stands; `undefined` over the bare
103
+ * canvas, and everywhere while the pegboard drawer is out (the desk inert, design-017 §4). Read-only: no relation, no tag, no stamp.
104
+ */
105
+ pickAt(sx: number, sy: number): PointPick | undefined;
54
106
  /** Nav-op seam (design-004 §7): forget every last-known AABB so the next
55
107
  * spatialSync pass repopulates the cleared index from the new Active set. */
56
108
  clearCaches(): void;
57
109
  }
58
- export declare function createPickingSystems(world: World, index?: SpatialIndex<Entity>, wires?: WirePickSource): PickingSystems;
110
+ 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. */
@@ -3,7 +3,9 @@
3
3
  *
4
4
  * `ctl:spawn` — cancelSweep (consumes the one-tick CancelRequest) →
5
5
  * recognizerSpawn (tool profiles; pinch on 2nd touch suspends
6
- * singles; wheel recognizers are `Simultaneous`) →
6
+ * singles; wheel recognizers are `Simultaneous`; a primary
7
+ * press only — a secondary one is a point, a middle one its
8
+ * pan's drag: petition I28, press-button.ts) →
7
9
  * recognizerIntegrity (requiredWatches counts, capture death,
8
10
  * suspension lift). Newborns are identity-only until the
9
11
  * ctl:spawn flush, so integrity naturally skips them until the
@@ -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)