@vibecook/ice 0.10.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/README.md +79 -50
  2. package/dist/chunk-BA7XJC27.js +2429 -0
  3. package/dist/chunk-BA7XJC27.js.map +1 -0
  4. package/dist/chunk-BKV4ZEU3.js +1 -0
  5. package/dist/chunk-BKV4ZEU3.js.map +1 -0
  6. package/dist/{chunk-5FQS7V2C.js → chunk-DYK6KNLG.js} +13303 -7485
  7. package/dist/chunk-DYK6KNLG.js.map +1 -0
  8. package/dist/chunk-ENIFIUEP.js +155 -0
  9. package/dist/chunk-ENIFIUEP.js.map +1 -0
  10. package/dist/chunk-IBWWLA6D.js +634 -0
  11. package/dist/chunk-IBWWLA6D.js.map +1 -0
  12. package/dist/{chunk-OR5FNVUE.js → chunk-JS6PG6YD.js} +398 -167
  13. package/dist/chunk-JS6PG6YD.js.map +1 -0
  14. package/dist/chunk-QXOCF56A.js +148 -0
  15. package/dist/chunk-QXOCF56A.js.map +1 -0
  16. package/dist/chunk-ZPUPBULB.js +7399 -0
  17. package/dist/chunk-ZPUPBULB.js.map +1 -0
  18. package/dist/desk-engine.js +36 -0
  19. package/dist/desk-engine.js.map +1 -0
  20. package/dist/desk-kit.js +244 -0
  21. package/dist/desk-kit.js.map +1 -0
  22. package/dist/desk-objects.js +12728 -0
  23. package/dist/desk-objects.js.map +1 -0
  24. package/dist/desk.js +469 -0
  25. package/dist/desk.js.map +1 -0
  26. package/dist/devtools.js +233 -189
  27. package/dist/devtools.js.map +1 -1
  28. package/dist/dom.js +7 -19
  29. package/dist/index.js +232 -20
  30. package/dist/kernel.js +53 -25
  31. package/dist/react.js +1045 -38
  32. package/dist/react.js.map +1 -1
  33. package/dist/types/packages/core/src/behavior/define-behavior.d.ts +11 -0
  34. package/dist/types/packages/core/src/behavior/runtime.d.ts +4 -0
  35. package/dist/types/packages/core/src/canvas/define-canvas-type.d.ts +86 -0
  36. package/dist/types/packages/core/src/canvas/define-container.d.ts +17 -0
  37. package/dist/types/packages/core/src/canvas/diagnostics.d.ts +27 -0
  38. package/dist/types/packages/core/src/canvas/engine-catalog.d.ts +70 -0
  39. package/dist/types/packages/core/src/canvas/extensions.d.ts +125 -0
  40. package/dist/types/packages/core/src/canvas/frame-behavior-host.d.ts +16 -0
  41. package/dist/types/packages/core/src/canvas/frame-preview.d.ts +79 -0
  42. package/dist/types/packages/core/src/canvas/frame-projection.d.ts +38 -0
  43. package/dist/types/packages/core/src/canvas/frame-view.d.ts +36 -0
  44. package/dist/types/packages/core/src/canvas/migrate.d.ts +14 -0
  45. package/dist/types/packages/core/src/canvas/placement.d.ts +30 -0
  46. package/dist/types/packages/core/src/canvas/presentation-transition.d.ts +100 -0
  47. package/dist/types/packages/core/src/canvas/runtime-extension-host.d.ts +16 -0
  48. package/dist/types/packages/core/src/canvas/session.d.ts +47 -0
  49. package/dist/types/packages/core/src/catalog/camera-derived.d.ts +16 -27
  50. package/dist/types/packages/core/src/catalog/desk.d.ts +326 -0
  51. package/dist/types/packages/core/src/catalog/gesture.d.ts +51 -0
  52. package/dist/types/packages/core/src/catalog/graph.d.ts +2 -2
  53. package/dist/types/packages/core/src/catalog/index.d.ts +2 -0
  54. package/dist/types/packages/core/src/catalog/pointer.d.ts +42 -0
  55. package/dist/types/packages/core/src/catalog/selection-presence.d.ts +7 -0
  56. package/dist/types/packages/core/src/catalog/settings-resources.d.ts +28 -2
  57. package/dist/types/packages/core/src/catalog/surface.d.ts +1 -0
  58. package/dist/types/packages/core/src/doc/doc-commit-sink.d.ts +18 -2
  59. package/dist/types/packages/core/src/doc/doc-kit.d.ts +21 -2
  60. package/dist/types/packages/core/src/doc/envelope.d.ts +5 -2
  61. package/dist/types/packages/core/src/doc/schema-migrate.d.ts +1 -1
  62. package/dist/types/packages/core/src/doc/version-gate.d.ts +21 -3
  63. package/dist/types/packages/core/src/engine/commit-sink.d.ts +10 -1
  64. package/dist/types/packages/core/src/engine/engine.d.ts +6 -0
  65. package/dist/types/packages/core/src/engine/frame-control.d.ts +74 -0
  66. package/dist/types/packages/core/src/engine/guests.d.ts +4 -1
  67. package/dist/types/packages/core/src/engine/world-doors.d.ts +12 -0
  68. package/dist/types/packages/core/src/facade/create-canvas-engine.d.ts +146 -13
  69. package/dist/types/packages/core/src/index.d.ts +34 -13
  70. package/dist/types/packages/core/src/input/queue.d.ts +3 -1
  71. package/dist/types/packages/core/src/interaction/install.d.ts +30 -0
  72. package/dist/types/packages/core/src/interaction/wakes.d.ts +24 -0
  73. package/dist/types/packages/core/src/nav/nav-geometry.d.ts +100 -0
  74. package/dist/types/packages/core/src/nav/nested-canvas.d.ts +47 -4
  75. package/dist/types/packages/core/src/ops/cascade.d.ts +2 -1
  76. package/dist/types/packages/core/src/ops/claims.d.ts +6 -0
  77. package/dist/types/packages/core/src/ops/insert.d.ts +4 -0
  78. package/dist/types/packages/core/src/ops/point-pick.d.ts +4 -1
  79. package/dist/types/packages/core/src/ops/sibling-order.d.ts +14 -4
  80. package/dist/types/packages/core/src/ops/tray.d.ts +48 -0
  81. package/dist/types/packages/core/src/presence/presence-kit.d.ts +5 -0
  82. package/dist/types/packages/core/src/schema/meta.d.ts +10 -0
  83. package/dist/types/packages/core/src/schema/prefab.d.ts +8 -0
  84. package/dist/types/packages/core/src/settings/defaults.d.ts +25 -6
  85. package/dist/types/packages/core/src/surface/gpu-device.d.ts +55 -0
  86. package/dist/types/packages/core/src/systems/camera-sim.d.ts +29 -0
  87. package/dist/types/packages/core/src/systems/chrome.d.ts +15 -23
  88. package/dist/types/packages/core/src/systems/drag-mods.d.ts +34 -0
  89. package/dist/types/packages/core/src/systems/held.d.ts +71 -0
  90. package/dist/types/packages/core/src/systems/insert-ghost.d.ts +2 -0
  91. package/dist/types/packages/core/src/systems/l0-input.d.ts +14 -0
  92. package/dist/types/packages/core/src/systems/l1-pick.d.ts +37 -1
  93. package/dist/types/packages/core/src/systems/l2-arbitrate.d.ts +18 -4
  94. package/dist/types/packages/core/src/systems/l3-behave.d.ts +4 -1
  95. package/dist/types/packages/core/src/systems/l3-claim.d.ts +7 -0
  96. package/dist/types/packages/core/src/systems/l3-connect.d.ts +1 -1
  97. package/dist/types/packages/core/src/systems/l3-drop.d.ts +30 -1
  98. package/dist/types/packages/core/src/systems/l3-marquee.d.ts +2 -1
  99. package/dist/types/packages/core/src/systems/l3-ports.d.ts +1 -1
  100. package/dist/types/packages/core/src/systems/l4-cursor.d.ts +5 -0
  101. package/dist/types/packages/core/src/systems/nav-flight.d.ts +85 -3
  102. package/dist/types/packages/core/src/systems/nav-tap.d.ts +44 -0
  103. package/dist/types/packages/core/src/systems/press-wheel.d.ts +11 -0
  104. package/dist/types/packages/core/src/systems/tray.d.ts +108 -0
  105. package/dist/types/packages/core/src/systems/zoom-through.d.ts +30 -0
  106. package/dist/types/packages/core/src/tools/define-tool.d.ts +10 -0
  107. package/dist/types/packages/core/src/widget/define-widget.d.ts +166 -63
  108. package/dist/types/packages/core/src/widget/equip.d.ts +14 -2
  109. package/dist/types/packages/core/src/widget/held-tools.d.ts +83 -0
  110. package/dist/types/packages/core/src/widget/menu-actions.d.ts +44 -0
  111. package/dist/types/packages/core/src/widget/mount-store.d.ts +21 -46
  112. package/dist/types/packages/core/src/widget/spawn.d.ts +1 -1
  113. package/dist/types/packages/desk/src/assets/blue-noise.gen.d.ts +10 -0
  114. package/dist/types/packages/desk/src/card/card.d.ts +103 -0
  115. package/dist/types/packages/desk/src/compose/ambient.d.ts +59 -0
  116. package/dist/types/packages/desk/src/compose/builder.d.ts +285 -0
  117. package/dist/types/packages/desk/src/compose/children.d.ts +3 -0
  118. package/dist/types/packages/desk/src/compose/index.d.ts +14 -0
  119. package/dist/types/packages/desk/src/compose/marks.d.ts +126 -0
  120. package/dist/types/packages/desk/src/compose/pick.d.ts +5 -0
  121. package/dist/types/packages/desk/src/compose/reflector.d.ts +111 -0
  122. package/dist/types/packages/desk/src/compose/tap.d.ts +5 -0
  123. package/dist/types/packages/desk/src/docs.d.ts +23 -0
  124. package/dist/types/packages/desk/src/engine/budget.d.ts +38 -0
  125. package/dist/types/packages/desk/src/engine/device.d.ts +54 -0
  126. package/dist/types/packages/desk/src/engine/index.d.ts +5 -0
  127. package/dist/types/packages/desk/src/engine/pipeline.d.ts +36 -0
  128. package/dist/types/packages/desk/src/engine/rasters.d.ts +66 -0
  129. package/dist/types/packages/desk/src/engine/records.d.ts +56 -0
  130. package/dist/types/packages/desk/src/engine/shader.d.ts +22 -0
  131. package/dist/types/packages/desk/src/engine/struct.d.ts +39 -0
  132. package/dist/types/packages/desk/src/engine/target.d.ts +26 -0
  133. package/dist/types/packages/desk/src/gpu-ablation.d.ts +61 -0
  134. package/dist/types/packages/desk/src/gpu-memory.d.ts +54 -0
  135. package/dist/types/packages/desk/src/gpu-profiler.d.ts +141 -0
  136. package/dist/types/packages/desk/src/gpu-wrap.d.ts +8 -0
  137. package/dist/types/packages/desk/src/ground.d.ts +388 -0
  138. package/dist/types/packages/desk/src/hold/focus.d.ts +53 -0
  139. package/dist/types/packages/desk/src/hold/pose.d.ts +132 -0
  140. package/dist/types/packages/desk/src/hold/shaders.d.ts +9 -0
  141. package/dist/types/packages/desk/src/host/editor.d.ts +18 -0
  142. package/dist/types/packages/desk/src/host/index.d.ts +9 -0
  143. package/dist/types/packages/desk/src/host/ink.d.ts +18 -0
  144. package/dist/types/packages/desk/src/host/layer.d.ts +430 -0
  145. package/dist/types/packages/desk/src/host/picture.d.ts +2 -0
  146. package/dist/types/packages/desk/src/host/surface.d.ts +5 -0
  147. package/dist/types/packages/desk/src/index.d.ts +13 -0
  148. package/dist/types/packages/desk/src/kind.d.ts +187 -0
  149. package/dist/types/packages/desk/src/kinds/world.d.ts +429 -0
  150. package/dist/types/packages/desk/src/kit/arrays.d.ts +88 -0
  151. package/dist/types/packages/desk/src/kit/blobs.d.ts +40 -0
  152. package/dist/types/packages/desk/src/kit/book.d.ts +2 -0
  153. package/dist/types/packages/desk/src/kit/editor.d.ts +103 -0
  154. package/dist/types/packages/desk/src/kit/eye.d.ts +37 -0
  155. package/dist/types/packages/desk/src/kit/hold.d.ts +1 -0
  156. package/dist/types/packages/desk/src/kit/index.d.ts +26 -0
  157. package/dist/types/packages/desk/src/kit/inside.d.ts +116 -0
  158. package/dist/types/packages/desk/src/kit/layer.d.ts +159 -0
  159. package/dist/types/packages/desk/src/kit/light.d.ts +3 -0
  160. package/dist/types/packages/desk/src/kit/mesh.d.ts +29 -0
  161. package/dist/types/packages/desk/src/kit/mips.d.ts +2 -0
  162. package/dist/types/packages/desk/src/kit/nav.d.ts +2 -0
  163. package/dist/types/packages/desk/src/kit/paper-tex.d.ts +5 -0
  164. package/dist/types/packages/desk/src/kit/physics.d.ts +44 -0
  165. package/dist/types/packages/desk/src/kit/place.d.ts +44 -0
  166. package/dist/types/packages/desk/src/kit/print.d.ts +30 -0
  167. package/dist/types/packages/desk/src/kit/raster.d.ts +34 -0
  168. package/dist/types/packages/desk/src/kit/sdf.d.ts +1 -0
  169. package/dist/types/packages/desk/src/kit/seeds.d.ts +11 -0
  170. package/dist/types/packages/desk/src/kit/services.d.ts +34 -0
  171. package/dist/types/packages/desk/src/kit/springs.d.ts +12 -0
  172. package/dist/types/packages/desk/src/kit/strokes.d.ts +93 -0
  173. package/dist/types/packages/desk/src/kit/text.d.ts +142 -0
  174. package/dist/types/packages/desk/src/kit/uniform.d.ts +8 -0
  175. package/dist/types/packages/desk/src/kit/view.d.ts +39 -0
  176. package/dist/types/packages/desk/src/kit/wgsl.d.ts +15 -0
  177. package/dist/types/packages/desk/src/lattice/line.d.ts +15 -0
  178. package/dist/types/packages/desk/src/lattice/lod.d.ts +52 -0
  179. package/dist/types/packages/desk/src/lattice/ruler.d.ts +88 -0
  180. package/dist/types/packages/desk/src/marks/assemble.d.ts +65 -0
  181. package/dist/types/packages/desk/src/marks/ease.d.ts +4 -0
  182. package/dist/types/packages/desk/src/marks/laser.d.ts +41 -0
  183. package/dist/types/packages/desk/src/marks/layout.d.ts +167 -0
  184. package/dist/types/packages/desk/src/marks/pass.d.ts +59 -0
  185. package/dist/types/packages/desk/src/marks/shaders.d.ts +12 -0
  186. package/dist/types/packages/desk/src/mat/grid.d.ts +50 -0
  187. package/dist/types/packages/desk/src/mat/lamp.d.ts +14 -0
  188. package/dist/types/packages/desk/src/mat/layout.d.ts +144 -0
  189. package/dist/types/packages/desk/src/mat/mat-pass.d.ts +83 -0
  190. package/dist/types/packages/desk/src/mat/night.d.ts +95 -0
  191. package/dist/types/packages/desk/src/mat/projector.d.ts +39 -0
  192. package/dist/types/packages/desk/src/mat/shaders.d.ts +17 -0
  193. package/dist/types/packages/desk/src/mat/tilt.d.ts +14 -0
  194. package/dist/types/packages/desk/src/nav/flight.d.ts +186 -0
  195. package/dist/types/packages/desk/src/nav/portal.d.ts +95 -0
  196. package/dist/types/packages/desk/src/object.d.ts +46 -0
  197. package/dist/types/packages/desk/src/pass-instrument.d.ts +89 -0
  198. package/dist/types/packages/desk/src/shaders.d.ts +12 -0
  199. package/dist/types/packages/desk/src/shaders.gen.d.ts +16 -0
  200. package/dist/types/packages/desk/src/submit-instrument.d.ts +36 -0
  201. package/dist/types/packages/desk/src/theme.d.ts +475 -0
  202. package/dist/types/packages/desk/src/tray/carry.d.ts +99 -0
  203. package/dist/types/packages/desk/src/tray/drawer.d.ts +113 -0
  204. package/dist/types/packages/desk/src/tray/flux.d.ts +46 -0
  205. package/dist/types/packages/desk/src/tray/index.d.ts +4 -0
  206. package/dist/types/packages/desk/src/tray/lattice.d.ts +71 -0
  207. package/dist/types/packages/desk/src/tray/layout.d.ts +7 -0
  208. package/dist/types/packages/desk/src/tray/look.d.ts +29 -0
  209. package/dist/types/packages/desk/src/tray/pass.d.ts +96 -0
  210. package/dist/types/packages/desk/src/tray/shaders.d.ts +10 -0
  211. package/dist/types/packages/desk/src/tray/specimens.d.ts +199 -0
  212. package/dist/types/packages/devtools/src/attach.d.ts +22 -8
  213. package/dist/types/packages/devtools/src/dock.d.ts +18 -14
  214. package/dist/types/packages/devtools/src/gpu-panel.d.ts +105 -0
  215. package/dist/types/packages/devtools/src/index.d.ts +5 -4
  216. package/dist/types/packages/dom/src/desk-host.d.ts +91 -0
  217. package/dist/types/packages/dom/src/host.d.ts +13 -14
  218. package/dist/types/packages/dom/src/index.d.ts +12 -10
  219. package/dist/types/packages/dom/src/loop.d.ts +18 -1
  220. package/dist/types/packages/dom/src/pointer-adapter.d.ts +5 -29
  221. package/dist/types/packages/dom/src/widget-focus.d.ts +17 -13
  222. package/dist/types/packages/ice/src/desk-engine.d.ts +2 -0
  223. package/dist/types/packages/ice/src/desk-kit.d.ts +6 -0
  224. package/dist/types/packages/ice/src/desk-objects.d.ts +5 -0
  225. package/dist/types/packages/ice/src/desk.d.ts +5 -0
  226. package/dist/types/packages/kernel/src/atlas-pack.d.ts +157 -0
  227. package/dist/types/packages/kernel/src/bezier.d.ts +0 -15
  228. package/dist/types/packages/kernel/src/coords.d.ts +0 -39
  229. package/dist/types/packages/kernel/src/index.d.ts +2 -2
  230. package/dist/types/packages/kernel/src/nav-flight.d.ts +6 -0
  231. package/dist/types/packages/kernel/src/tray.d.ts +155 -0
  232. package/dist/types/packages/objects/src/board/board-pass.d.ts +180 -0
  233. package/dist/types/packages/objects/src/board/board-pen.d.ts +36 -0
  234. package/dist/types/packages/objects/src/board/board.d.ts +104 -0
  235. package/dist/types/packages/objects/src/board/data.d.ts +31 -0
  236. package/dist/types/packages/objects/src/board/history.d.ts +33 -0
  237. package/dist/types/packages/objects/src/board/kind.d.ts +208 -0
  238. package/dist/types/packages/objects/src/board/layout.d.ts +102 -0
  239. package/dist/types/packages/objects/src/board/object.d.ts +7 -0
  240. package/dist/types/packages/objects/src/board/pen.d.ts +71 -0
  241. package/dist/types/packages/objects/src/board/shaders.d.ts +36 -0
  242. package/dist/types/packages/objects/src/board/stroke.d.ts +99 -0
  243. package/dist/types/packages/objects/src/board/theme.d.ts +150 -0
  244. package/dist/types/packages/objects/src/calendar/data.d.ts +97 -0
  245. package/dist/types/packages/objects/src/calendar/events.d.ts +58 -0
  246. package/dist/types/packages/objects/src/calendar/hand.d.ts +53 -0
  247. package/dist/types/packages/objects/src/calendar/host/input.d.ts +67 -0
  248. package/dist/types/packages/objects/src/calendar/host/print.d.ts +9 -0
  249. package/dist/types/packages/objects/src/calendar/kind.d.ts +297 -0
  250. package/dist/types/packages/objects/src/calendar/law.d.ts +151 -0
  251. package/dist/types/packages/objects/src/calendar/layout.d.ts +47 -0
  252. package/dist/types/packages/objects/src/calendar/month.d.ts +75 -0
  253. package/dist/types/packages/objects/src/calendar/object.d.ts +45 -0
  254. package/dist/types/packages/objects/src/calendar/pad.d.ts +42 -0
  255. package/dist/types/packages/objects/src/calendar/pass.d.ts +229 -0
  256. package/dist/types/packages/objects/src/calendar/print.d.ts +87 -0
  257. package/dist/types/packages/objects/src/calendar/printing.d.ts +80 -0
  258. package/dist/types/packages/objects/src/calendar/roll.d.ts +45 -0
  259. package/dist/types/packages/objects/src/calendar/shaders.d.ts +12 -0
  260. package/dist/types/packages/objects/src/calendar/sheet.d.ts +43 -0
  261. package/dist/types/packages/objects/src/calendar/tiles.d.ts +67 -0
  262. package/dist/types/packages/objects/src/calendar/turn.d.ts +73 -0
  263. package/dist/types/packages/objects/src/calendar/writing.d.ts +42 -0
  264. package/dist/types/packages/objects/src/index.d.ts +22 -0
  265. package/dist/types/packages/objects/src/kinds.d.ts +24 -0
  266. package/dist/types/packages/objects/src/minimat/inside.d.ts +17 -0
  267. package/dist/types/packages/objects/src/minimat/kind.d.ts +51 -0
  268. package/dist/types/packages/objects/src/minimat/layout.d.ts +83 -0
  269. package/dist/types/packages/objects/src/minimat/minimat.d.ts +179 -0
  270. package/dist/types/packages/objects/src/minimat/object.d.ts +8 -0
  271. package/dist/types/packages/objects/src/minimat/pass.d.ts +61 -0
  272. package/dist/types/packages/objects/src/minimat/shaders.d.ts +10 -0
  273. package/dist/types/packages/objects/src/minimat/theme.d.ts +98 -0
  274. package/dist/types/packages/objects/src/notebook/ink.d.ts +70 -0
  275. package/dist/types/packages/objects/src/notebook/kind.d.ts +236 -0
  276. package/dist/types/packages/objects/src/notebook/law.d.ts +129 -0
  277. package/dist/types/packages/objects/src/notebook/layout.d.ts +46 -0
  278. package/dist/types/packages/objects/src/notebook/leaf.d.ts +44 -0
  279. package/dist/types/packages/objects/src/notebook/mesh.d.ts +20 -0
  280. package/dist/types/packages/objects/src/notebook/motion.d.ts +107 -0
  281. package/dist/types/packages/objects/src/notebook/object.d.ts +8 -0
  282. package/dist/types/packages/objects/src/notebook/pages.d.ts +56 -0
  283. package/dist/types/packages/objects/src/notebook/pass.d.ts +197 -0
  284. package/dist/types/packages/objects/src/notebook/pick.d.ts +30 -0
  285. package/dist/types/packages/objects/src/notebook/raster.d.ts +28 -0
  286. package/dist/types/packages/objects/src/notebook/shaders.d.ts +11 -0
  287. package/dist/types/packages/objects/src/notebook/shape.d.ts +155 -0
  288. package/dist/types/packages/objects/src/notebook/theme.d.ts +76 -0
  289. package/dist/types/packages/objects/src/palette.d.ts +577 -0
  290. package/dist/types/packages/objects/src/paper/host/body.d.ts +30 -0
  291. package/dist/types/packages/objects/src/paper/kind.d.ts +81 -0
  292. package/dist/types/packages/objects/src/paper/layout.d.ts +73 -0
  293. package/dist/types/packages/objects/src/paper/object.d.ts +31 -0
  294. package/dist/types/packages/objects/src/paper/pages.d.ts +43 -0
  295. package/dist/types/packages/objects/src/paper/paper-pass.d.ts +86 -0
  296. package/dist/types/packages/objects/src/paper/paper.d.ts +117 -0
  297. package/dist/types/packages/objects/src/paper/shaders.d.ts +18 -0
  298. package/dist/types/packages/objects/src/paper/theme.d.ts +58 -0
  299. package/dist/types/packages/objects/src/paper/typing.d.ts +51 -0
  300. package/dist/types/packages/objects/src/paper/writing.d.ts +161 -0
  301. package/dist/types/packages/objects/src/photo/carry.d.ts +33 -0
  302. package/dist/types/packages/objects/src/photo/kind.d.ts +136 -0
  303. package/dist/types/packages/objects/src/photo/layout.d.ts +39 -0
  304. package/dist/types/packages/objects/src/photo/object.d.ts +5 -0
  305. package/dist/types/packages/objects/src/photo/photo-pass.d.ts +104 -0
  306. package/dist/types/packages/objects/src/photo/photo.d.ts +262 -0
  307. package/dist/types/packages/objects/src/photo/pictures.d.ts +152 -0
  308. package/dist/types/packages/objects/src/photo/sample.d.ts +9 -0
  309. package/dist/types/packages/objects/src/photo/shaders.d.ts +18 -0
  310. package/dist/types/packages/objects/src/preset.d.ts +44 -0
  311. package/dist/types/packages/objects/src/shaders.d.ts +3 -0
  312. package/dist/types/packages/objects/src/shaders.gen.d.ts +21 -0
  313. package/dist/types/packages/react/src/canvas-hooks.d.ts +12 -0
  314. package/dist/types/packages/react/src/desk.d.ts +56 -0
  315. package/dist/types/packages/react/src/engine-context.d.ts +2 -2
  316. package/dist/types/packages/react/src/frame-preview-boundary.d.ts +19 -0
  317. package/dist/types/packages/react/src/hooks.d.ts +9 -14
  318. package/dist/types/packages/react/src/index.d.ts +16 -9
  319. package/dist/types/packages/react/src/keymap.d.ts +21 -2
  320. package/dist/types/packages/react/src/selection-menu.d.ts +171 -0
  321. package/dist/types/packages/react/src/tray-bar.d.ts +124 -0
  322. package/package.json +64 -31
  323. package/dist/chunk-5FQS7V2C.js.map +0 -1
  324. package/dist/chunk-JWRHAM7L.js +0 -1163
  325. package/dist/chunk-JWRHAM7L.js.map +0 -1
  326. package/dist/chunk-MFTMPJUF.js +0 -681
  327. package/dist/chunk-MFTMPJUF.js.map +0 -1
  328. package/dist/chunk-OR5FNVUE.js.map +0 -1
  329. package/dist/ground.js +0 -1213
  330. package/dist/ground.js.map +0 -1
  331. package/dist/r3f.js +0 -1644
  332. package/dist/r3f.js.map +0 -1
  333. package/dist/types/packages/core/src/input/measure-queue.d.ts +0 -30
  334. package/dist/types/packages/core/src/settings/ground-config.d.ts +0 -103
  335. package/dist/types/packages/core/src/systems/measure-ingest.d.ts +0 -26
  336. package/dist/types/packages/devtools/src/gl-panel.d.ts +0 -69
  337. package/dist/types/packages/dom/src/measure-adapter.d.ts +0 -31
  338. package/dist/types/packages/dom/src/measure-wiring.d.ts +0 -49
  339. package/dist/types/packages/dom/src/planes.d.ts +0 -33
  340. package/dist/types/packages/dom/src/reflectors/chrome.d.ts +0 -33
  341. package/dist/types/packages/dom/src/reflectors/dom-widgets.d.ts +0 -59
  342. package/dist/types/packages/dom/src/reflectors/graybox.d.ts +0 -31
  343. package/dist/types/packages/dom/src/reflectors/plane-transform.d.ts +0 -38
  344. package/dist/types/packages/ground/src/index.d.ts +0 -69
  345. package/dist/types/packages/ground/src/layer.d.ts +0 -40
  346. package/dist/types/packages/ground/src/pass.d.ts +0 -41
  347. package/dist/types/packages/ground/src/passes/grid-classic.d.ts +0 -30
  348. package/dist/types/packages/ground/src/passes/grid-magnet.d.ts +0 -31
  349. package/dist/types/packages/ground/src/passes/grid.d.ts +0 -28
  350. package/dist/types/packages/ground/src/passes/guides-collect.d.ts +0 -14
  351. package/dist/types/packages/ground/src/passes/guides.d.ts +0 -3
  352. package/dist/types/packages/ground/src/passes/magnet-collect.d.ts +0 -63
  353. package/dist/types/packages/ground/src/passes/soup-collect.d.ts +0 -35
  354. package/dist/types/packages/ground/src/passes/soup-mesh.d.ts +0 -8
  355. package/dist/types/packages/ground/src/passes/wires-collect.d.ts +0 -35
  356. package/dist/types/packages/ground/src/passes/wires.d.ts +0 -10
  357. package/dist/types/packages/ground/src/poles.d.ts +0 -47
  358. package/dist/types/packages/ground/src/renderer.d.ts +0 -15
  359. package/dist/types/packages/ice/src/ground.d.ts +0 -1
  360. package/dist/types/packages/ice/src/r3f.d.ts +0 -1
  361. package/dist/types/packages/kernel/src/eviction.d.ts +0 -23
  362. package/dist/types/packages/kernel/src/zoom-bands.d.ts +0 -19
  363. package/dist/types/packages/r3f/src/bridge.d.ts +0 -129
  364. package/dist/types/packages/r3f/src/composite-material.d.ts +0 -26
  365. package/dist/types/packages/r3f/src/compositor-pass.d.ts +0 -105
  366. package/dist/types/packages/r3f/src/dev-write-trap.d.ts +0 -30
  367. package/dist/types/packages/r3f/src/gl-root.d.ts +0 -96
  368. package/dist/types/packages/r3f/src/gl-router.d.ts +0 -70
  369. package/dist/types/packages/r3f/src/index.d.ts +0 -17
  370. package/dist/types/packages/r3f/src/island-state.d.ts +0 -112
  371. package/dist/types/packages/r3f/src/island.d.ts +0 -13
  372. package/dist/types/packages/r3f/src/pool.d.ts +0 -56
  373. package/dist/types/packages/r3f/src/preview-capture.d.ts +0 -19
  374. package/dist/types/packages/r3f/src/resource-registry.d.ts +0 -30
  375. package/dist/types/packages/r3f/src/self-sustain.d.ts +0 -39
  376. package/dist/types/packages/r3f/src/use-island-frame.d.ts +0 -39
  377. package/dist/types/packages/react/src/infinite-canvas.d.ts +0 -140
  378. package/dist/types/packages/react/src/preview-snapshots.d.ts +0 -17
  379. package/dist/types/packages/react/src/widget-preview.d.ts +0 -14
  380. package/dist/types/packages/react/src/widget-root.d.ts +0 -33
@@ -0,0 +1,56 @@
1
+ /**
2
+ * `<Desk>` — the one-line desk mount (design-015 §3, D5b): `@ice/dom`'s `createDeskHost` under
3
+ * React. This component owns the container element and the keymap; the host owns the layer, the
4
+ * adapters, the reflectors, the loop and the viewport sync. `<InfiniteCanvas>` became this BY
5
+ * DELETION (plan D-D0.6): no planes, no profile gate, no DOM widget portals, no chrome plane (the
6
+ * desk draws its own marks, design-015 §7), no measurement, no GL route, no `grid` prop (the
7
+ * desk's handle has `configureFadeIn`/`configureMat`).
8
+ *
9
+ * The desk arrives as an OPAQUE layer factory — `layer={deskLayer({ … })}` from `@vibecook/ice/desk`
10
+ * — typed structurally by `@ice/dom`; this package imports neither `@ice/desk` nor its handle.
11
+ * Memoize the factory in the caller: a new identity re-boots the mount.
12
+ *
13
+ * Lifecycle: the engine is NOT owned here (the app disposes it). Unmount disposes the host.
14
+ * Children render inside the container, above the canvas: the screen-space chrome (the selection
15
+ * menu, a dev panel) and nothing that moves with the camera (design-015 §2 law 2).
16
+ */
17
+ import type { CanvasEngine } from "../../core/src/index";
18
+ import { type CanvasHost, type LayerFactory, type LayerHandle, type WidgetFocusHandle } from "../../dom/src/index";
19
+ import { type CSSProperties, type ReactElement, type ReactNode } from "react";
20
+ import { type KeymapEntry } from "./keymap";
21
+ /** Handed to {@link DeskProps.onReady} once the host is live (app-side devtools, the desk's handle). */
22
+ export interface DeskHandle {
23
+ readonly engine: CanvasEngine;
24
+ readonly host: CanvasHost;
25
+ /** The mounted layer's handle, as the factory returned it (the desk's `DeskLayerHandle` under `deskLayer`). */
26
+ readonly layer: LayerHandle;
27
+ /**
28
+ * Programmatic focus release (design-007 §2.3): `blurFocus()`. Focus is VIEW state
29
+ * (design-007 §2.6) — it rides this handle, not `engine.ops` (a headless engine has none).
30
+ */
31
+ readonly focus: WidgetFocusHandle;
32
+ }
33
+ export interface DeskProps {
34
+ /** A constructed engine (`createCanvasEngine(...)`); NOT disposed on unmount. */
35
+ readonly engine: CanvasEngine;
36
+ /** The desk's layer factory (`deskLayer({ … })`), received opaquely. Memoize in the caller. */
37
+ readonly layer: LayerFactory;
38
+ /**
39
+ * Called once per mount after the host, the reflectors and the loop are live. What it starts that outlives the call — a
40
+ * listener, a wait, a join — it undoes in the cleanup it may return, which runs when the mount ends, before the host goes.
41
+ * An effect's contract: StrictMode's development double mount runs it for the mount it discards (K9).
42
+ */
43
+ readonly onReady?: (handle: DeskHandle) => void | (() => void);
44
+ /**
45
+ * Keymap overrides plumbed to {@link attachKeymap} (design-007 §5 M-d). An entry replaces a
46
+ * default by its `key|mod|shift` signature; conditional behaviour belongs INSIDE `run`. BOUND
47
+ * ONCE at mount, like the adapters: entries read live engine state at run time, never
48
+ * render-time values.
49
+ */
50
+ readonly keymapOverrides?: readonly KeymapEntry[];
51
+ readonly className?: string;
52
+ readonly style?: CSSProperties;
53
+ /** Screen-space chrome inside the viewport (the selection menu, a HUD) — rendered under the EngineProvider. */
54
+ readonly children?: ReactNode;
55
+ }
56
+ export declare function Desk({ engine, layer, onReady, keymapOverrides, className, style, children }: DeskProps): ReactElement;
@@ -7,7 +7,7 @@
7
7
  * ops + docs). Widgets never hand-roll store plumbing again: {@link useOps}
8
8
  * gives the engine-owned write paths, {@link useCommit} (its own module) the
9
9
  * sanctioned durable commit seam, and {@link useWorld} the read/observe escape
10
- * hatch. `<InfiniteCanvas>` provides this automatically; apps that mount
10
+ * hatch. `<Desk>` provides this automatically; apps that mount
11
11
  * WidgetRoot themselves wrap it in `<EngineProvider>`.
12
12
  */
13
13
  import { type CanvasEngine, type CanvasOps, type World } from "../../core/src/index";
@@ -27,7 +27,7 @@ export declare function useOps(): CanvasOps;
27
27
  * overlay-lifecycle sugar — the disposer releases on deactivate AND unmount,
28
28
  * so a crashed/unmounted overlay can never wedge the canvas backgrounded.
29
29
  * `engine` is an explicit param (not context): overlays typically render as
30
- * SIBLINGS of <InfiniteCanvas>, outside the provider.
30
+ * SIBLINGS of <Desk>, outside the provider.
31
31
  */
32
32
  export declare function useStageHold(engine: CanvasEngine, active: boolean, name: string): void;
33
33
  /**
@@ -0,0 +1,19 @@
1
+ import { Component, type ErrorInfo, type ReactElement, type ReactNode } from "react";
2
+ export interface FramePreviewBoundaryProps {
3
+ readonly children: ReactNode;
4
+ readonly fallback?: ReactNode;
5
+ readonly onError?: (error: unknown, info: ErrorInfo) => void;
6
+ }
7
+ /** Isolates one author-owned instance preview from the rest of the canvas. */
8
+ export declare class FramePreviewBoundary extends Component<FramePreviewBoundaryProps, {
9
+ readonly failed: boolean;
10
+ }> {
11
+ state: {
12
+ failed: boolean;
13
+ };
14
+ static getDerivedStateFromError(): {
15
+ failed: boolean;
16
+ };
17
+ componentDidCatch(error: unknown, info: ErrorInfo): void;
18
+ render(): ReactElement | ReactNode;
19
+ }
@@ -1,6 +1,5 @@
1
1
  /**
2
- * React hooks over the engine's Tier-3 reactivity (design-005 §2 hooks;
3
- * design-004 §2 frozen-hidden rule).
2
+ * React hooks over the engine's Tier-3 reactivity (design-005 §2 hooks).
4
3
  *
5
4
  * Implemented directly on `world.reactive.observeValue` + `useSyncExternalStore`
6
5
  * rather than strata's own react module: core is react-free by law, so
@@ -8,14 +7,14 @@
8
7
  * lines. Value semantics are strata Tier-3: equality-suppressed, fired at
9
8
  * notify(), never during the tick.
10
9
  *
11
- * FROZEN-HIDDEN: a widget inside a hidden (culled-but-kept-mounted) host must
12
- * not re-render on doc edits — `useWidgetProps` reads {@link WidgetHiddenContext}
13
- * (provided per-portal by WidgetRoot) and suspends its subscription while
14
- * hidden, serving the last snapshot; on show it resubscribes and refreshes.
10
+ * These are the hooks of SCREEN-SPACE chrome (design-015 §2 law 2): a panel
11
+ * that shows the selected object's props, a bar that reads its behaviour
12
+ * state. Until design-015 D5b they also served the React faces of DOM widgets
13
+ * and carried the frozen-hidden rule (a culled-but-kept-mounted portal must
14
+ * not re-render) through `WidgetHiddenContext` and the mount store's freeze;
15
+ * both left with the portals. `ChromeOwnerContext` left with the profiles.
15
16
  */
16
17
  import { type AnyBehaviorDef, type Component, type Entity, type World } from "../../core/src/index";
17
- /** Per-portal hidden flag (WidgetRoot provides it; defaults to live). */
18
- export declare const WidgetHiddenContext: import("react").Context<boolean>;
19
18
  /**
20
19
  * Tier-3 component value subscription (equality-suppressed). Snapshot
21
20
  * STABILITY is load-bearing: strata's `get()` materializes a fresh object per
@@ -36,16 +35,12 @@ export declare function useWidgetProps<T extends Record<string, unknown>>(world:
36
35
  * `undefined` when the behavior is not attached, which is a legitimate render
37
36
  * state and not an error.
38
37
  *
39
- * READ-ONLY by construction. A face renders behavior state; it never writes it
38
+ * READ-ONLY by construction. Chrome renders behavior state; it never writes it
40
39
  * (Law 10) — writes go through `ctx` inside the behavior's own hooks, or
41
40
  * through `engine.behaviors.attach` / a transaction from an app handler.
42
41
  */
43
42
  export declare function useBehavior<T extends Record<string, unknown>>(world: World, entity: Entity, behavior: AnyBehaviorDef): T | undefined;
44
- /**
45
- * Selection membership (Tier-1 wake on Selected churn; O(1) snapshot).
46
- * Frozen-hidden like every widget hook: a selection change must not re-render
47
- * 256 hidden trees (review finding — design-004 §2 applies to ALL hooks).
48
- */
43
+ /** Selection membership (Tier-1 wake on Selected churn; O(1) snapshot). */
49
44
  export declare function useSelected(world: World, entity: Entity): boolean;
50
45
  /** LOD tier (design-004 §8); "normal" until the breakpoint system stamps one. */
51
46
  export declare function useBreakpoint(world: World, entity: Entity): string;
@@ -1,16 +1,23 @@
1
1
  /**
2
- * @ice/react — widget content layer: portals from one root + Tier-3 hooks.
3
- * Import wall: @ice/dom → @ice/core down only — never three/@react-three
4
- * (enforced). react/react-dom are peers.
2
+ * @ice/react — the React face of the desk (design-015 §3): `<Desk>` (wraps `@ice/dom`'s
3
+ * `createDeskHost`), EngineProvider + the Tier-3 hooks, the keymap, the screen-space selection
4
+ * menu and held bar, the tray's bar (design-018). Renderer-free: the desk arrives as an opaque layer factory.
5
+ * Import wall: @ice/dom → @ice/core down only — never three/desk (enforced). react/react-dom are peers.
6
+ *
7
+ * GONE at D5b (design-015 §1): `<InfiniteCanvas>` (→ `<Desk>`), `WidgetRoot` and the portals,
8
+ * `WidgetPreview` + the preview snapshots, the surface content seam, the two presentation
9
+ * profiles, `ChromeOwnerContext` and `WidgetHiddenContext`. One presentation (DK-D8).
5
10
  */
6
11
  export declare const REACT_VERSION = "0.0.0";
7
- export { WidgetHiddenContext, useBreakpoint, useSelected, useBehavior, useWidgetProps, useWorldComponent, } from "./hooks";
8
- export { WidgetRoot, type WidgetComponentProps, type WidgetHosts, type WidgetRootProps } from "./widget-root";
12
+ export { useBreakpoint, useSelected, useBehavior, useWidgetProps, useWorldComponent } from "./hooks";
9
13
  export { EngineProvider, useCanvasEngine, useFrameFreeze, useOps, useStageHold, useWorld, type EngineProviderProps, } from "./engine-context";
10
14
  export { useCommit, useUndoStatus, type Commit, type UndoStatus } from "./use-commit";
11
- export { WidgetPreview, type WidgetPreviewProps } from "./widget-preview";
12
- export { getPreviewSnapshot, hasPreviewSnapshot, setPreviewSnapshot, subscribePreviewSnapshots, type PreviewImage, } from "./preview-snapshots";
13
15
  export { useTool, useToolState } from "./use-tool";
16
+ export { useCanvasCatalog, useCanvasDiagnostics, useCanvasTools, useCurrentCanvas, useFramePreview, } from "./canvas-hooks";
17
+ export { FramePreviewBoundary, type FramePreviewBoundaryProps, } from "./frame-preview-boundary";
14
18
  export { usePresencePeers, type PresencePeerView } from "./use-presence";
15
- export { attachKeymap, type KeymapEntry } from "./keymap";
16
- export { InfiniteCanvas, type GroundLayerFactory, type GroundLayerHandle, type InfiniteCanvasHandle, type InfiniteCanvasProps, } from "./infinite-canvas";
19
+ export { attachKeymap, type KeymapEntry, nudgeSelection, toggleTape, unlessInert } from "./keymap";
20
+ export { defaultSelectionActions, placeSelectionMenu, SELECTION_GLYPHS, SELECTION_MENU, type SelectionAction, SelectionMenu, type SelectionMenuAnchor, type SelectionMenuBox, type SelectionMenuProps, type SelectionMenuSource, type SelectionGlyph, type SelectionMenuAct, type SelectionMenuTool, type SelectionState, selectionTaped, } from "./selection-menu";
21
+ export { DESK_TAPE, placeTrayBar, TRAY_BAR, TRAY_BAR_GLYPHS, TrayBar, type TrayBarAnchor, type TrayBarCategory, type TrayBarPlace, type TrayBarProps, type TrayBarSource, } from "./tray-bar";
22
+ export { Desk, type DeskHandle, type DeskProps } from "./desk";
23
+ export type { LayerContext, LayerFactory, LayerHandle } from "../../dom/src/index";
@@ -8,9 +8,14 @@
8
8
  * ⇧⌘Z / ⇧Ctrl-Z → docs.redo
9
9
  * ⌘D → ops.duplicateSelection
10
10
  * ⌘A → ops.selectAll
11
- * Esc → ops.cancelActiveGestures
12
- * Arrows → nudge the selection ±1px (⇧ = ±10px) — ONE tx per press
11
+ * Esc → closes the pegboard tray first (design-017 §4), else ops.cancelActiveGestures
12
+ * Arrows → nudge the selection ±1px (⇧ = ±10px) — ONE tx per press; a TAPED widget
13
+ * never moves (design-015 §5.1 — `Locked`, D4a), its untaped companions do
14
+ * ⇧⌘L / ⇧Ctrl-L → tape the selection down, or lift the tape when all of it is taped
15
+ * (*Marks on the Mat*'s keys, D4a) — `ops.setLocked`, one transaction
13
16
  * tool shortcuts → ops.setTool (v/h/c + any registered tool's shortcut)
17
+ * in hand → the held object's own tools first (design-015 §8, D3t-a): its type's
18
+ * `heldTools` keys → ops.useHeldTool — and only while it is held
14
19
  *
15
20
  * Space-hold pan is ALREADY owned by the pointer adapter (design-003 §2) — it is
16
21
  * NOT rebound here. `mod` = ⌘ on macOS, Ctrl elsewhere (metaKey || ctrlKey).
@@ -41,6 +46,12 @@
41
46
  * design-003 §4.4) and preventDefaults it before gate 1 can let it through.
42
47
  */
43
48
  import { type CanvasEngine } from "../../core/src/index";
49
+ /**
50
+ * The desk's keys go quiet while it is inert — an object in hand (D4b) or the pegboard tray open (design-017 §4): what would delete,
51
+ * copy, nudge or gather on the inert desk does nothing. Exported for an app's OWN keys (K9 S3: the desk app's `w`, `m`, Tab and its
52
+ * ⇧ arrows — which replace the entries here — made, walked and nudged objects under the open drawer and moved a notebook in hand).
53
+ */
54
+ export declare const unlessInert: (run: (engine: CanvasEngine) => void) => (engine: CanvasEngine) => void;
44
55
  export interface KeymapEntry {
45
56
  /** `event.key` to match (case-insensitive; e.g. "z", "Backspace", "ArrowUp"). */
46
57
  readonly key: string;
@@ -52,6 +63,14 @@ export interface KeymapEntry {
52
63
  run(engine: CanvasEngine): void;
53
64
  }
54
65
  type KeyTarget = Pick<Window, "addEventListener" | "removeEventListener">;
66
+ /**
67
+ * One nudge = one gesture-equivalent transaction (absolute Position writes). A taped widget (`Locked`) is passed
68
+ * over — the tape holds it as it holds against a drag (design-015 §5.1, D4a). Exported so an app can bind its own
69
+ * step (the desk's ⇧ nudge is one lattice cell, 20).
70
+ */
71
+ export declare function nudgeSelection(engine: CanvasEngine, dx: number, dy: number): void;
72
+ /** ⇧⌘L: tape the selection down — or, when every selected widget is taped, lift the tape (one transaction). */
73
+ export declare function toggleTape(engine: CanvasEngine): void;
55
74
  /**
56
75
  * Attach the default keymap (plus `overrides`) to `target` (default: `window`).
57
76
  * Returns a detach function. No-op (returns a no-op detach) when there is no
@@ -0,0 +1,171 @@
1
+ /**
2
+ * `<SelectionMenu>` — the desk's selection menu (design-015 §7, *Marks on the Mat*'s "ink bar"; D4a):
3
+ * the ONE piece of DOM beside the focused editor that the desk keeps (design-015 §2's law), in SCREEN
4
+ * space — one element tree, one plain transform, never a camera's. It is placed from the anchor the
5
+ * desk publishes (`source`, structurally the desk handle's `selection`: the marks' box around the
6
+ * selection as DRAWN — the brackets 6 px out, the union 10 px out), 10 px above it, centred; it flips
7
+ * below when it would cross the top ruler's band (or the view's top) and keeps 16 px from the sides.
8
+ * It steps aside for any gesture (a drag, a vellum, a pan, a pinch) — and while a note is being written
9
+ * (the one focused editor has the keys) — in 90 ms, and comes back 200 ms after (180 ms in). Its acts are an app-extensible list: ICE ships Duplicate (gone
10
+ * when the selection is all tape — "a copy of a taped thing is not taped"), Tape it down / Lift the tape,
11
+ * More (every act with its key), and Delete alone past a rule, colourless until the pointer arms it red;
12
+ * an app adds its own (VibeField: Send to agent, first). The glyphs are DESIGN.md §13's drawings and the
13
+ * page's six, inline SVG, currentColor. The ink is the whiteboard tray's (94 % ink, cream glyphs, brass
14
+ * hairlines, the lamp's shadow falling lower left) — CSS custom properties an app may re-point.
15
+ *
16
+ * `@ice/react` never imports the desk: the source is read structurally, as the ground layer is.
17
+ */
18
+ import { type CanvasEngine } from "../../core/src/index";
19
+ import { type ReactElement, type ReactNode } from "react";
20
+ /** A screen rect, CSS px. */
21
+ export interface SelectionMenuBox {
22
+ readonly x0: number;
23
+ readonly y0: number;
24
+ readonly x1: number;
25
+ readonly y1: number;
26
+ }
27
+ /** What the menu is placed from — the desk handle's `selection.anchor()`, mirrored structurally. */
28
+ export interface SelectionMenuAnchor {
29
+ /** The marks' box around the selection on screen (null: nothing selected, or none of it drawn). */
30
+ readonly box: SelectionMenuBox | null;
31
+ readonly count: number;
32
+ /** Every selected object is taped. */
33
+ readonly locked: boolean;
34
+ /** A gesture is on: the menu steps aside. */
35
+ readonly gesturing: boolean;
36
+ /** A note is being written (the one focused editor): the menu steps aside as for a gesture. */
37
+ readonly editing?: boolean;
38
+ readonly view: {
39
+ readonly width: number;
40
+ readonly height: number;
41
+ };
42
+ /** The rulers printed along the top and left (their margin and band, CSS px), or null. */
43
+ readonly rulers: {
44
+ readonly margin: number;
45
+ readonly band: number;
46
+ } | null;
47
+ /**
48
+ * An object is IN HAND (design-015 §8, D4b): the menu travels to the foot of the view and changes role (M1) — one element,
49
+ * not a second toolbar — Send stays first, the kind's tools take the middle, Done ends the bar. `landing`: the object is
50
+ * flying home — the bar steps aside and comes back above the object 200 ms after it lands. `active` (D3t-a): the mode in
51
+ * hand — core's `HeldTool` — the one slot marked.
52
+ */
53
+ readonly held?: {
54
+ readonly tools: readonly SelectionMenuTool[];
55
+ readonly active?: string;
56
+ readonly landing: boolean;
57
+ readonly settled: boolean;
58
+ };
59
+ /**
60
+ * The selection's KIND ACTS (design-016 K8a — the desk's `MenuSlot`s, mirrored structurally): what every selected object's type
61
+ * declares (`defineObject({ menu })`); the menu shows them first among its acts and runs one through `ops.runMenuAction`.
62
+ */
63
+ readonly menu?: readonly SelectionMenuAct[];
64
+ }
65
+ /** A kind's act as the desk publishes it (its `MenuSlot`, mirrored structurally — K8a): plain data; the op stays on the widget type. */
66
+ export interface SelectionMenuAct {
67
+ readonly id: string;
68
+ readonly label: string;
69
+ readonly glyph?: SelectionGlyph;
70
+ readonly keys?: string;
71
+ }
72
+ /**
73
+ * A glyph the bar draws (K8a — core's `HeldGlyph`, mirrored structurally): a NAME of its set (`SELECTION_GLYPHS`), or a tool's OWN
74
+ * drawing — SVG path data in the 24-unit box, stroked 2 units in the bar's ink (`currentColor`) as the set's are, or filled.
75
+ */
76
+ export type SelectionGlyph = string | {
77
+ readonly path: string;
78
+ readonly fill?: boolean;
79
+ };
80
+ /**
81
+ * A slot of the held bar as the desk publishes it (its `HeldSlot`, mirrored structurally — D3t-a): a `mode` (pressed, it
82
+ * becomes the tool in hand) or an `action` (pressed, it runs its op), both through `ops.useHeldTool`; no `kind` = declared
83
+ * only, shown dim and inert. `swatch`: a colour shown instead of the glyph (a marker's ink). `glyph` (K8a): a name of the bar's
84
+ * set or the tool's own drawing — a plugin kind's tool draws its own; a name the bar does not draw is MARKED missing (its label's
85
+ * initial, `data-glyph-missing`, one console error), never drawn as another glyph.
86
+ */
87
+ export interface SelectionMenuTool {
88
+ readonly id: string;
89
+ readonly label: string;
90
+ readonly kind?: "mode" | "action";
91
+ readonly hint?: string;
92
+ readonly glyph?: SelectionGlyph;
93
+ readonly swatch?: string;
94
+ }
95
+ /** The anchor's source — the desk handle's `selection` (anchor + a subscription that fires when it moves). */
96
+ export interface SelectionMenuSource {
97
+ anchor(): SelectionMenuAnchor;
98
+ subscribe(listener: () => void): () => void;
99
+ }
100
+ /** What an act is told about the selection. */
101
+ export interface SelectionState {
102
+ readonly count: number;
103
+ readonly locked: boolean;
104
+ }
105
+ export interface SelectionAction {
106
+ readonly id: string;
107
+ /** Its name — the button's accessible label and its tip; may read the selection ("Lift the tape"). */
108
+ readonly label: string | ((s: SelectionState) => string);
109
+ /** A glyph from `SELECTION_GLYPHS` by name, or any node — or one read off the selection (the lock opens when it is taped). */
110
+ readonly glyph: string | ReactNode | ((s: SelectionState) => string | ReactNode);
111
+ /** The key that does the same, shown in the tip and in More (e.g. "⌘D"). */
112
+ readonly keys?: string;
113
+ /** `lead` sits first (the app's own act — Send), `main` in the middle, `end` alone past a rule (Delete). */
114
+ readonly place?: "lead" | "main" | "end";
115
+ /** `danger`: colourless until the pointer arms it red. */
116
+ readonly tone?: "danger";
117
+ /** A text button (the lead act's label beside its glyph). */
118
+ readonly text?: boolean;
119
+ /** Shown for this selection (default: always). */
120
+ readonly when?: (s: SelectionState) => boolean;
121
+ /** Pressed-looking (the lock turns solid cream while the selection is taped). */
122
+ readonly on?: (s: SelectionState) => boolean;
123
+ run(engine: CanvasEngine, s: SelectionState): void;
124
+ }
125
+ /**
126
+ * The menu's numbers (*Marks on the Mat* §14): 40 tall, 10 above the marks, 16 from the sides, 8 from the view's top and foot;
127
+ * away 90 ms, back 200 ms after, in 180 ms. The held bar (§8, D4b): centred in the 72 px band at the foot, the travel 340 ms.
128
+ */
129
+ export declare const SELECTION_MENU: {
130
+ readonly height: 40;
131
+ readonly gap: 10;
132
+ readonly margin: 16;
133
+ readonly edge: 8;
134
+ readonly awayMs: 90;
135
+ readonly backMs: 200;
136
+ readonly inMs: 180;
137
+ readonly outMs: 120;
138
+ readonly foot: 72;
139
+ readonly travelMs: 340;
140
+ };
141
+ /**
142
+ * Where the menu goes (desk.js `positionMenu`, number for number): centred on the anchor, `gap` above it; below it when
143
+ * there is no room above (under the top ruler's band) and more below; `margin` from the sides, `edge` from the top and foot.
144
+ * `sheet` = the height of an open sheet that must fit too. Null when there is nothing to anchor to. With an object IN HAND
145
+ * (D4b) the bar sits centred in the band at the foot of the view, whatever the selection's box.
146
+ */
147
+ export declare function placeSelectionMenu(anchor: SelectionMenuAnchor, size: {
148
+ readonly w: number;
149
+ readonly h: number;
150
+ }, sheet?: number): {
151
+ readonly x: number;
152
+ readonly y: number;
153
+ readonly below: boolean;
154
+ } | null;
155
+ /** DESIGN.md §13's drawings the bar uses and the six *Marks on the Mat* adds — 24-unit boxes, one 2-unit stroke, currentColor. */
156
+ export declare const SELECTION_GLYPHS: Readonly<Record<string, ReactNode>>;
157
+ /** ICE's own acts, in the bar's order: Duplicate (not for tape), Tape it down / Lift the tape, More, and Delete past a rule. */
158
+ export declare function defaultSelectionActions(): SelectionAction[];
159
+ /** The desk's INK as CSS custom properties — the menu's and, since design-018 §5, the tray bar's (`<TrayBar>`): one set of values; an app re-points them on either island. */
160
+ export declare const DESK_INK = "--ice-menu-ink:rgb(16 9 4 / .94);--ice-menu-ink-solid:rgb(16 9 4);--ice-menu-cream:rgb(255 237 215);--ice-menu-cream-rgb:255 237 215;--ice-menu-brass:rgb(196 165 116);--ice-menu-hair:rgb(196 165 116 / .24);--ice-menu-rule:rgb(196 165 116 / .34);--ice-menu-danger:rgb(255 69 58);--ice-menu-danger-bg:rgb(255 69 58 / .16);--ice-menu-shadow:-1px 2px 3px rgb(14 26 10 / .25),-8px 14px 32px rgb(14 26 10 / .38)";
161
+ export interface SelectionMenuProps {
162
+ /** Where to go — the desk handle's `selection`. */
163
+ readonly source: SelectionMenuSource;
164
+ /** The acts, in the bar's order within their places (default: `defaultSelectionActions()`); an app prepends its own. */
165
+ readonly actions?: readonly SelectionAction[];
166
+ /** The engine the acts run on (default: the `EngineProvider`'s — the one `<Desk>` is mounted under). */
167
+ readonly engine?: CanvasEngine;
168
+ }
169
+ export declare function SelectionMenu({ source, actions, engine: given }: SelectionMenuProps): ReactElement | null;
170
+ /** Is every selected widget taped? (for an app's own acts) */
171
+ export declare function selectionTaped(engine: CanvasEngine): boolean;
@@ -0,0 +1,124 @@
1
+ /**
2
+ * `<TrayBar>` — the pegboard drawer's HANDLE and its FILTERS (design-018 §5–§6, R4; ICE M22): DOM in screen space, the selection menu's
3
+ * sibling (design-015 §2 law 2 — never under the camera). The drawer stays the renderer's (design-017 §1); its handle and its filters
4
+ * are chrome, two islands under one root.
5
+ *
6
+ * THE PILL, in the desk's ink (`DESK_INK`, the same custom properties an app re-points): closed, a 40 px pill centred 16 px above the
7
+ * view's foot — the pegboard glyph (three staggered stadium holes) and the word Objects, titled "Objects (A)", `aria-expanded`; open, the
8
+ * same pill rides the drawer's top edge, its bottom 10 px above the board — `min(vh − 16, drawer.y − 10)`, written as the desk publishes
9
+ * each frame of the slide, so it follows the drawer exactly — its glyph a close ×.
10
+ *
11
+ * THE CHIPS (R4 — James: "design the filters nicely at that empty safe top space"): LABEL TAPE stuck on the board in the drawer's clear
12
+ * HEADER (the anchor's `drawer.header`, where nothing of the board's content shows), centred on the drawer's centre line and in the
13
+ * header, following the drawer every frame of its slide and fading in over its last part — All, then the frame's categories in the
14
+ * lay's order, in the specimens' own tag language (`DESK_TAPE`: the embosser's near-black tape and its raised pale capitals, the desk's
15
+ * `MARKS.label`), the chosen one CREAM tape with ink letters (the desk's "chosen is cream" — the menu's `data-on`), `aria-pressed`, in a
16
+ * `role="toolbar"`; past the header's width they scroll inside it, each end fading where more tape lies beyond. By night the tape steps
17
+ * back as the tags do (`night`, the anchor's).
18
+ * Both step aside while an object is IN HAND (the held bar has the view's foot then) and while the drawer has nothing to offer.
19
+ *
20
+ * Its pointer is chrome's: `data-canvas-interactive` flags the downs on the pill and on the chips, so the tray's input never takes one (a
21
+ * chip never closes the drawer as a click on the dimmed desk would) and the desk's tap never lends the object under it the editor — the
22
+ * header's bare board beside the chips stays the drawer's. Its keys: Enter and Space act on a focused button and ←/→ (Home/End) walk
23
+ * the chips, before the page's own listeners — the keymap keeps `a` and Esc; a pointer's click leaves no focus behind, so Space still
24
+ * pans and ⏎ is still the desk's. No rAF of its own: it moves only when the desk drew a frame that moved the drawer (idle-zero).
25
+ *
26
+ * `@ice/react` never imports the desk: the source is the desk handle's `tray` door, read structurally.
27
+ */
28
+ import { type ReactElement } from "react";
29
+ /** A category chip as the door lists it (core's `TrayCategory`, mirrored structurally): its id, its label, how many entries it holds. */
30
+ export interface TrayBarCategory {
31
+ readonly id: string;
32
+ readonly label: string;
33
+ readonly count: number;
34
+ }
35
+ /** What the bar is placed from — the desk handle's `tray.anchor()` (`TrayAnchor`), mirrored structurally. */
36
+ export interface TrayBarAnchor {
37
+ /** The drawer is out (the fact — its slide may still be on its way). */
38
+ readonly open: boolean;
39
+ /**
40
+ * The drawer's outline as drawn this frame (CSS px) and its slide — null before its first frame, or hidden — and its HEADER: the clear
41
+ * band under its edge (from `y`, `h` high) where nothing of the board's content shows, the chips' place.
42
+ */
43
+ readonly drawer: {
44
+ readonly x: number;
45
+ readonly y: number;
46
+ readonly w: number;
47
+ readonly p: number;
48
+ readonly header: {
49
+ readonly y: number;
50
+ readonly h: number;
51
+ };
52
+ } | null;
53
+ readonly view: {
54
+ readonly width: number;
55
+ readonly height: number;
56
+ };
57
+ /** The theme's night, 0 day … 1 the Moon: the tape steps back by it as the specimens' tags do. */
58
+ readonly night: number;
59
+ /** An object is in hand: the held bar has the view's foot — the bar steps aside. */
60
+ readonly held: boolean;
61
+ /** How many entries the drawer's frame hangs (0: nothing to offer — the bar steps aside). */
62
+ readonly entries: number;
63
+ /** The category shown ("" all) and the frame's categories in the lay's order. */
64
+ readonly category: string;
65
+ readonly categories: readonly TrayBarCategory[];
66
+ }
67
+ /** The bar's source — the desk handle's `tray` door: the anchor, a subscription that fires after each frame that moved it, and the acts. */
68
+ export interface TrayBarSource {
69
+ anchor(): TrayBarAnchor;
70
+ subscribe(listener: () => void): () => void;
71
+ toggle(): boolean;
72
+ category(id?: string): string;
73
+ }
74
+ /**
75
+ * The bar's numbers (design-018 §5, R4): the pill 40 tall, 16 above the view's foot closed, 10 above the board open, 16 from the view's
76
+ * sides; away 90 ms, back in 180. The header's chips keep 12 in from the drawer's sides and fade in over the slide's last part — from
77
+ * `p` 0.6 to 1, a smoothstep (D-R4.6).
78
+ */
79
+ export declare const TRAY_BAR: {
80
+ readonly height: 40;
81
+ readonly foot: 16;
82
+ readonly ride: 10;
83
+ readonly margin: 16;
84
+ readonly awayMs: 90;
85
+ readonly inMs: 180;
86
+ readonly headInset: 12;
87
+ readonly headFrom: 0.6;
88
+ };
89
+ /** Where the bar goes: the pill's top edge (CSS px), and the HEADER strip the chips lie centred in — with its opacity (null: no drawer drawn). */
90
+ export interface TrayBarPlace {
91
+ readonly y: number;
92
+ readonly head: {
93
+ readonly x: number;
94
+ readonly y: number;
95
+ readonly w: number;
96
+ readonly h: number;
97
+ readonly opacity: number;
98
+ } | null;
99
+ }
100
+ /**
101
+ * Where the bar goes. The pill: its bottom `min(vh − foot, drawer.y − ride)`, so it waits at the foot while the drawer's edge is below it
102
+ * and rides the edge from there, one continuous motion. The chips: the drawer's header as drawn, `headInset` in from its sides, at the
103
+ * slide's `smoothstep(headFrom, 1, p)` — one motion with the board, arriving as it does.
104
+ */
105
+ export declare function placeTrayBar(a: TrayBarAnchor, height?: number): TrayBarPlace;
106
+ /** The bar's two drawings (24-unit boxes, currentColor): the PEGBOARD — three staggered stadium holes, a board's punched slots — and the close ×. */
107
+ export declare const TRAY_BAR_GLYPHS: {
108
+ readonly pegboard: import("react").JSX.Element;
109
+ readonly close: import("react").JSX.Element;
110
+ };
111
+ /**
112
+ * The LABEL TAPE (design-018 R4) as custom properties an app re-points, as it does the ink's: the specimens' own tags — the embosser's
113
+ * near-black tape and the pale plastic of its raised capitals (the desk's `MARKS.label`, the marks pass's `tagMarks`) — the CHOSEN tape,
114
+ * cream with ink letters, and the capitals' face (the page's mono stack, `--vf-font-mono`, as the tags' glyph atlas draws them).
115
+ */
116
+ export declare const DESK_TAPE = "--ice-tape:#17181b;--ice-tape-letters-rgb:236 235 228;--ice-tape-chosen:#efe9da;--ice-tape-chosen-ink:rgb(16 9 4);--ice-tape-font:var(--vf-font-mono,ui-monospace,\"SF Mono\",Menlo,monospace)";
117
+ export interface TrayBarProps {
118
+ /** The drawer's door — the desk handle's `tray`. */
119
+ readonly source: TrayBarSource;
120
+ /** The button's word (default "Objects") and the key named in its tip (default "A" — the app's toggle). */
121
+ readonly label?: string;
122
+ readonly keys?: string;
123
+ }
124
+ export declare function TrayBar({ source, label, keys }: TrayBarProps): ReactElement;