@weasel-js/core 1.13.0 → 1.14.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 (741) hide show
  1. package/CHANGELOG.md +326 -0
  2. package/README.md +8 -12
  3. package/dist/affordances/hitAffordanceRegions.js +1 -1
  4. package/dist/affordances/hitAffordanceRegions.js.map +1 -1
  5. package/dist/affordances/pathAnchors.js.map +1 -1
  6. package/dist/animation/clipTargets.js +1 -1
  7. package/dist/animation/clipTargets.js.map +1 -1
  8. package/dist/animation/poseTarget.js +5 -32
  9. package/dist/animation/poseTarget.js.map +1 -1
  10. package/dist/{autoPoseDescriptor-CZ1eXbzY.d.ts → autoPoseDescriptor-C25QVb0W.d.ts} +1 -1
  11. package/dist/barrel/canvas.js +8 -8
  12. package/dist/barrel/chrome.js +9 -9
  13. package/dist/barrel/input.js +1 -1
  14. package/dist/barrel/interactions.js +3 -3
  15. package/dist/barrel/paint.js +2 -2
  16. package/dist/barrel/paths.js +19 -17
  17. package/dist/barrel/renderer.js +11 -7
  18. package/dist/barrel/routing.js +4 -1
  19. package/dist/barrel/scene.js +16 -12
  20. package/dist/barrel/text.js +5 -5
  21. package/dist/barrel/viewport.js +8 -8
  22. package/dist/canvas/Canvas.js +2 -2
  23. package/dist/canvas/Canvas.js.map +1 -1
  24. package/dist/canvas/CanvasView.js +20 -14
  25. package/dist/canvas/CanvasView.js.map +1 -1
  26. package/dist/canvas/GestureReason.js +64 -0
  27. package/dist/canvas/GestureReason.js.map +1 -0
  28. package/dist/canvas/GestureReason.module.js +7 -0
  29. package/dist/canvas/GestureReason.module.js.map +1 -0
  30. package/dist/canvas/LeanSceneCanvas.js +3 -1
  31. package/dist/canvas/LeanSceneCanvas.js.map +1 -1
  32. package/dist/canvas/NodeShape.js +2 -0
  33. package/dist/canvas/NodeShape.js.map +1 -1
  34. package/dist/canvas/PickHud.js +7 -3
  35. package/dist/canvas/PickHud.js.map +1 -1
  36. package/dist/canvas/SceneCanvas/CanvasKitProviders.js +1 -1
  37. package/dist/canvas/SceneCanvas/CanvasKitProviders.js.map +1 -1
  38. package/dist/canvas/SceneCanvas/DevHuds.js +2 -2
  39. package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -1
  40. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +4 -2
  41. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
  42. package/dist/canvas/SceneCanvas/SceneCanvasInput.js +3 -1
  43. package/dist/canvas/SceneCanvas/SceneCanvasInput.js.map +1 -1
  44. package/dist/canvas/SceneCanvas/brushOverlay.js.map +1 -1
  45. package/dist/canvas/SceneCanvas/builtinToolSets.js +17 -9
  46. package/dist/canvas/SceneCanvas/builtinToolSets.js.map +1 -1
  47. package/dist/canvas/SceneCanvas/canvasPassThrough.js +2 -1
  48. package/dist/canvas/SceneCanvas/canvasPassThrough.js.map +1 -1
  49. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +75 -19
  50. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  51. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +7 -1
  52. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
  53. package/dist/canvas/SceneCanvas/defaultTextEditor.js +108 -0
  54. package/dist/canvas/SceneCanvas/defaultTextEditor.js.map +1 -0
  55. package/dist/canvas/SceneCanvas/describePresets.js +47 -0
  56. package/dist/canvas/SceneCanvas/describePresets.js.map +1 -0
  57. package/dist/canvas/SceneCanvas/features.js +57 -16
  58. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  59. package/dist/canvas/SceneCanvas/mergeLayers.js +10 -1
  60. package/dist/canvas/SceneCanvas/mergeLayers.js.map +1 -1
  61. package/dist/canvas/SceneCanvas/namedPresets.js +52 -24
  62. package/dist/canvas/SceneCanvas/namedPresets.js.map +1 -1
  63. package/dist/canvas/SceneCanvas/presets/arrange.js +35 -10
  64. package/dist/canvas/SceneCanvas/presets/arrange.js.map +1 -1
  65. package/dist/canvas/SceneCanvas/presets/baseline.js +9 -0
  66. package/dist/canvas/SceneCanvas/presets/baseline.js.map +1 -0
  67. package/dist/canvas/SceneCanvas/presets/chrome.js.map +1 -1
  68. package/dist/canvas/SceneCanvas/presets/composites.js +43 -0
  69. package/dist/canvas/SceneCanvas/presets/composites.js.map +1 -0
  70. package/dist/canvas/SceneCanvas/presets/edit.js +79 -26
  71. package/dist/canvas/SceneCanvas/presets/edit.js.map +1 -1
  72. package/dist/canvas/SceneCanvas/presets/ingest.js +1 -0
  73. package/dist/canvas/SceneCanvas/presets/ingest.js.map +1 -1
  74. package/dist/canvas/SceneCanvas/presets/paths.js +58 -16
  75. package/dist/canvas/SceneCanvas/presets/paths.js.map +1 -1
  76. package/dist/canvas/SceneCanvas/presets/select.js +4 -2
  77. package/dist/canvas/SceneCanvas/presets/select.js.map +1 -1
  78. package/dist/canvas/SceneCanvas/presets/tools.js +24 -0
  79. package/dist/canvas/SceneCanvas/presets/tools.js.map +1 -0
  80. package/dist/canvas/SceneCanvas/presets/transform.js +4 -0
  81. package/dist/canvas/SceneCanvas/presets/transform.js.map +1 -1
  82. package/dist/canvas/SceneCanvas/presets/view.js +3 -1
  83. package/dist/canvas/SceneCanvas/presets/view.js.map +1 -1
  84. package/dist/canvas/SceneCanvas/props.js.map +1 -1
  85. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +1 -1
  86. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -1
  87. package/dist/canvas/SceneCanvas/toolRegistry.js +5 -4
  88. package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -1
  89. package/dist/canvas/SceneCanvas/useCanvasTools.js +26 -10
  90. package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -1
  91. package/dist/canvas/SceneCanvas/useContributionRoles.js +15 -2
  92. package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -1
  93. package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js +5 -4
  94. package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js.map +1 -1
  95. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +1 -1
  96. package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -1
  97. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +9 -8
  98. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -1
  99. package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js +2 -2
  100. package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js.map +1 -1
  101. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +4 -1
  102. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js.map +1 -1
  103. package/dist/canvas/SceneCanvas/useSceneChrome.js +7 -4
  104. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -1
  105. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +9 -9
  106. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js.map +1 -1
  107. package/dist/canvas/SceneCanvas/useScenePicking.js +4 -7
  108. package/dist/canvas/SceneCanvas/useScenePicking.js.map +1 -1
  109. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +2 -1
  110. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -1
  111. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +6 -6
  112. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  113. package/dist/canvas/SceneCanvas/useSceneStandardActions.js +2 -2
  114. package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -1
  115. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +1 -1
  116. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -1
  117. package/dist/canvas/SceneCanvas/useSurfaceViewInputs.js.map +1 -1
  118. package/dist/canvas/SceneCanvas/useToolKeybindings.js +2 -2
  119. package/dist/canvas/SceneCanvas/useToolKeybindings.js.map +1 -1
  120. package/dist/canvas/SceneCanvas/useViewportActions.js +5 -2
  121. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
  122. package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -1
  123. package/dist/canvas/SceneCanvas.js +22 -11
  124. package/dist/canvas/SceneCanvas.js.map +1 -1
  125. package/dist/canvas/SceneViewCanvas.js +1 -0
  126. package/dist/canvas/SceneViewCanvas.js.map +1 -1
  127. package/dist/canvas/ViewMarker.js.map +1 -1
  128. package/dist/canvas/accentColor.js +14 -1
  129. package/dist/canvas/accentColor.js.map +1 -1
  130. package/dist/canvas/affordanceAt.js +2 -2
  131. package/dist/canvas/affordanceAt.js.map +1 -1
  132. package/dist/canvas/buildSceneTree.js +5 -3
  133. package/dist/canvas/buildSceneTree.js.map +1 -1
  134. package/dist/canvas/deps/editAnchors.js +4 -4
  135. package/dist/canvas/deps/editAnchors.js.map +1 -1
  136. package/dist/canvas/deps/enteredGroup.js +14 -5
  137. package/dist/canvas/deps/enteredGroup.js.map +1 -1
  138. package/dist/canvas/deps/ingestion.js +5 -1
  139. package/dist/canvas/deps/ingestion.js.map +1 -1
  140. package/dist/canvas/deps/insert.js.map +1 -1
  141. package/dist/canvas/deps/insertSite.js +5 -3
  142. package/dist/canvas/deps/insertSite.js.map +1 -1
  143. package/dist/canvas/deps/nodeAtPoint.js +1 -12
  144. package/dist/canvas/deps/nodeAtPoint.js.map +1 -1
  145. package/dist/canvas/deps/pathEditCommits.js +3 -3
  146. package/dist/canvas/deps/pathEditCommits.js.map +1 -1
  147. package/dist/canvas/deps/slice.js +16 -2
  148. package/dist/canvas/deps/slice.js.map +1 -1
  149. package/dist/canvas/deps/snap.js +5 -5
  150. package/dist/canvas/deps/snap.js.map +1 -1
  151. package/dist/canvas/deps/textEdit.js +5 -6
  152. package/dist/canvas/deps/textEdit.js.map +1 -1
  153. package/dist/canvas/derivedPath.js +8 -3
  154. package/dist/canvas/derivedPath.js.map +1 -1
  155. package/dist/canvas/getNodeAtPoint.js +2 -2
  156. package/dist/canvas/getNodeAtPoint.js.map +1 -1
  157. package/dist/canvas/insertPreviewExtent.js.map +1 -1
  158. package/dist/canvas/layerSlots.js.map +1 -1
  159. package/dist/canvas/nodeShapes/measurePainter.js +1 -1
  160. package/dist/canvas/nodeShapes/measurePainter.js.map +1 -1
  161. package/dist/canvas/nodeShapes/strokedBounds.js +5 -3
  162. package/dist/canvas/nodeShapes/strokedBounds.js.map +1 -1
  163. package/dist/canvas/overlayRoleStrokes.js +6 -0
  164. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  165. package/dist/canvas/pickIndex/scenePickIndex.js +10 -12
  166. package/dist/canvas/pickIndex/scenePickIndex.js.map +1 -1
  167. package/dist/canvas/sceneAdapter.js +10 -19
  168. package/dist/canvas/sceneAdapter.js.map +1 -1
  169. package/dist/canvas/sceneClipboard.js +17 -4
  170. package/dist/canvas/sceneClipboard.js.map +1 -1
  171. package/dist/canvas/sceneViewRender.js +3 -2
  172. package/dist/canvas/sceneViewRender.js.map +1 -1
  173. package/dist/canvas/surfaceContribution.js.map +1 -1
  174. package/dist/canvas/useCanvasPaint.js +10 -4
  175. package/dist/canvas/useCanvasPaint.js.map +1 -1
  176. package/dist/canvas/useHitObserver.js +1 -1
  177. package/dist/canvas/useHitObserver.js.map +1 -1
  178. package/dist/canvas/useViewAim.js +1 -1
  179. package/dist/canvas/useViewAim.js.map +1 -1
  180. package/dist/canvas/useViewHelpers.js +8 -5
  181. package/dist/canvas/useViewHelpers.js.map +1 -1
  182. package/dist/canvas/useViewNesting.js +39 -12
  183. package/dist/canvas/useViewNesting.js.map +1 -1
  184. package/dist/canvas/viewInputs.js.map +1 -1
  185. package/dist/canvas/viewMarkers.js +2 -2
  186. package/dist/canvas/viewMarkers.js.map +1 -1
  187. package/dist/canvas/viewRegistry.js +2 -2
  188. package/dist/canvas/viewRegistry.js.map +1 -1
  189. package/dist/canvas/viewSnap.js +67 -0
  190. package/dist/canvas/viewSnap.js.map +1 -0
  191. package/dist/clipboard.d.ts +6 -12
  192. package/dist/{clone-qb2e1F5p.d.ts → clone-Bz4iqGfE.d.ts} +10 -5
  193. package/dist/clone.d.ts +5 -5
  194. package/dist/core/geometry/booleanOfPaths.js +23 -0
  195. package/dist/core/geometry/booleanOfPaths.js.map +1 -0
  196. package/dist/core/geometry/pathPoseDescriptor.js +12 -9
  197. package/dist/core/geometry/pathPoseDescriptor.js.map +1 -1
  198. package/dist/core/geometry/poseDescriptor.js +12 -3
  199. package/dist/core/geometry/poseDescriptor.js.map +1 -1
  200. package/dist/core/geometry/targetFrame.js +2 -13
  201. package/dist/core/geometry/targetFrame.js.map +1 -1
  202. package/dist/core/layers/render.js +2 -1
  203. package/dist/core/layers/render.js.map +1 -1
  204. package/dist/core/layers/retain.js +5 -3
  205. package/dist/core/layers/retain.js.map +1 -1
  206. package/dist/core/ops/setPath.js +3 -0
  207. package/dist/core/ops/setPath.js.map +1 -1
  208. package/dist/core/paint/meshKindLazy.js.map +1 -1
  209. package/dist/core/paint/paintKindEntry.js.map +1 -1
  210. package/dist/core/paint/paintKinds.js +8 -1
  211. package/dist/core/paint/paintKinds.js.map +1 -1
  212. package/dist/core/scene/NodeProperties.js.map +1 -1
  213. package/dist/core/scene/NodeRouting.js.map +1 -1
  214. package/dist/core/scene/booleanGroup.js +33 -0
  215. package/dist/core/scene/booleanGroup.js.map +1 -0
  216. package/dist/core/scene/booleanOfChildren.js +53 -0
  217. package/dist/core/scene/booleanOfChildren.js.map +1 -0
  218. package/dist/core/scene/carryDescendants.js +18 -6
  219. package/dist/core/scene/carryDescendants.js.map +1 -1
  220. package/dist/core/scene/composeFrame.js +42 -5
  221. package/dist/core/scene/composeFrame.js.map +1 -1
  222. package/dist/core/scene/composePose.js +35 -16
  223. package/dist/core/scene/composePose.js.map +1 -1
  224. package/dist/core/scene/depMemo.js +36 -18
  225. package/dist/core/scene/depMemo.js.map +1 -1
  226. package/dist/core/scene/derivedParts.js +2 -23
  227. package/dist/core/scene/derivedParts.js.map +1 -1
  228. package/dist/core/scene/effectivePose.js +10 -0
  229. package/dist/core/scene/effectivePose.js.map +1 -1
  230. package/dist/core/scene/historyForm.js +5 -4
  231. package/dist/core/scene/historyForm.js.map +1 -1
  232. package/dist/core/scene/kitOps.js +5 -71
  233. package/dist/core/scene/kitOps.js.map +1 -1
  234. package/dist/core/scene/kitRegistry.js +5 -0
  235. package/dist/core/scene/kitRegistry.js.map +1 -1
  236. package/dist/core/scene/layerOps.js +82 -0
  237. package/dist/core/scene/layerOps.js.map +1 -0
  238. package/dist/core/scene/layoutPass.js +14 -12
  239. package/dist/core/scene/layoutPass.js.map +1 -1
  240. package/dist/core/scene/lockGuard.js +9 -3
  241. package/dist/core/scene/lockGuard.js.map +1 -1
  242. package/dist/core/scene/nestedHit.js +5 -5
  243. package/dist/core/scene/nestedHit.js.map +1 -1
  244. package/dist/core/scene/nodeFlags.js +8 -2
  245. package/dist/core/scene/nodeFlags.js.map +1 -1
  246. package/dist/core/scene/nodeGates.js +31 -2
  247. package/dist/core/scene/nodeGates.js.map +1 -1
  248. package/dist/core/scene/pathEffects/effects.js +22 -3
  249. package/dist/core/scene/pathEffects/effects.js.map +1 -1
  250. package/dist/core/scene/pathEffects/textAlong.js +16 -3
  251. package/dist/core/scene/pathEffects/textAlong.js.map +1 -1
  252. package/dist/core/scene/pathEffects/textAlongBands.js +65 -0
  253. package/dist/core/scene/pathEffects/textAlongBands.js.map +1 -0
  254. package/dist/core/scene/reconcileSpecs.js +1 -1
  255. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  256. package/dist/core/scene/scene.js +11 -5
  257. package/dist/core/scene/scene.js.map +1 -1
  258. package/dist/core/scene/sceneEdits.js +5 -2
  259. package/dist/core/scene/sceneEdits.js.map +1 -1
  260. package/dist/core/scene/scenePoseAdapter.js +10 -1
  261. package/dist/core/scene/scenePoseAdapter.js.map +1 -1
  262. package/dist/core/scene/scrollOffsets.js +93 -0
  263. package/dist/core/scene/scrollOffsets.js.map +1 -0
  264. package/dist/core/scene/serialization.js +15 -5
  265. package/dist/core/scene/serialization.js.map +1 -1
  266. package/dist/core/scene/statedFields.js +2 -1
  267. package/dist/core/scene/statedFields.js.map +1 -1
  268. package/dist/core/scene/strategyView.js +35 -0
  269. package/dist/core/scene/strategyView.js.map +1 -0
  270. package/dist/core/scene/types.js.map +1 -1
  271. package/dist/core/scene/useScene.js +2 -0
  272. package/dist/core/scene/useScene.js.map +1 -1
  273. package/dist/core/scene/worldSave.js +87 -0
  274. package/dist/core/scene/worldSave.js.map +1 -0
  275. package/dist/core/selection/selectionTarget.js +1 -1
  276. package/dist/core/selection/selectionTarget.js.map +1 -1
  277. package/dist/{cornerHandles-CNCb7aTY.d.ts → cornerHandles-DpmQM_z5.d.ts} +1 -1
  278. package/dist/{depSchema-CpIQzKWQ.d.ts → depSchema-C3BwxitB.d.ts} +119 -99
  279. package/dist/devtools-protocol.d.ts +2 -2
  280. package/dist/devtools.d.ts +2 -2
  281. package/dist/{features → domains}/chrome-caps/buildChromeCtx.js +1 -1
  282. package/dist/domains/chrome-caps/buildChromeCtx.js.map +1 -0
  283. package/dist/{features → domains}/chrome-caps/conditions.js +1 -1
  284. package/dist/domains/chrome-caps/conditions.js.map +1 -0
  285. package/dist/{features → domains}/chrome-caps/defaults.js +1 -1
  286. package/dist/domains/chrome-caps/defaults.js.map +1 -0
  287. package/dist/{features → domains}/chrome-caps/resolve.js +1 -1
  288. package/dist/domains/chrome-caps/resolve.js.map +1 -0
  289. package/dist/{features → domains}/chrome-caps/useChromeCaps.js +1 -1
  290. package/dist/domains/chrome-caps/useChromeCaps.js.map +1 -0
  291. package/dist/{features → domains}/chrome-caps/useHoverTracking.js +1 -1
  292. package/dist/domains/chrome-caps/useHoverTracking.js.map +1 -0
  293. package/dist/{features → domains}/ingestion/contentHandlers.js +20 -3
  294. package/dist/domains/ingestion/contentHandlers.js.map +1 -0
  295. package/dist/domains/ingestion/ghost.js +56 -0
  296. package/dist/domains/ingestion/ghost.js.map +1 -0
  297. package/dist/{features → domains}/ingestion/imageHandler.js +1 -1
  298. package/dist/domains/ingestion/imageHandler.js.map +1 -0
  299. package/dist/domains/ingestion/kitHandlers.js +22 -0
  300. package/dist/domains/ingestion/kitHandlers.js.map +1 -0
  301. package/dist/{features → domains}/ingestion/openFilePicker.js +1 -1
  302. package/dist/domains/ingestion/openFilePicker.js.map +1 -0
  303. package/dist/{features → domains}/ingestion/placement.js +1 -1
  304. package/dist/domains/ingestion/placement.js.map +1 -0
  305. package/dist/{features → domains}/ingestion/svgHandler.js +1 -1
  306. package/dist/domains/ingestion/svgHandler.js.map +1 -0
  307. package/dist/{features → domains}/ingestion/textHandler.js +9 -7
  308. package/dist/domains/ingestion/textHandler.js.map +1 -0
  309. package/dist/{features → domains}/ingestion/useCanvasIngestion.js +13 -15
  310. package/dist/domains/ingestion/useCanvasIngestion.js.map +1 -0
  311. package/dist/{features → domains}/ingestion/weaselJsonHandler.js +1 -1
  312. package/dist/domains/ingestion/weaselJsonHandler.js.map +1 -0
  313. package/dist/{features → domains}/longPress/longPressFeedback.js +1 -1
  314. package/dist/domains/longPress/longPressFeedback.js.map +1 -0
  315. package/dist/{features → domains}/measure/actionIds.js +1 -1
  316. package/dist/domains/measure/actionIds.js.map +1 -0
  317. package/dist/{features → domains}/measure/measureCommands.js +1 -1
  318. package/dist/domains/measure/measureCommands.js.map +1 -0
  319. package/dist/{features → domains}/measure/measureContribution.js +1 -1
  320. package/dist/domains/measure/measureContribution.js.map +1 -0
  321. package/dist/{features → domains}/measure/measureEdits.js +1 -1
  322. package/dist/domains/measure/measureEdits.js.map +1 -0
  323. package/dist/{features → domains}/measure/measureGestures.js +4 -7
  324. package/dist/domains/measure/measureGestures.js.map +1 -0
  325. package/dist/{features → domains}/measure/measureHit.js +1 -1
  326. package/dist/domains/measure/measureHit.js.map +1 -0
  327. package/dist/{features → domains}/measure/measureLayer.js +1 -1
  328. package/dist/domains/measure/measureLayer.js.map +1 -0
  329. package/dist/{features → domains}/measure/measurement.js +1 -1
  330. package/dist/domains/measure/measurement.js.map +1 -0
  331. package/dist/{features → domains}/measure/measurements.js +2 -2
  332. package/dist/domains/measure/measurements.js.map +1 -0
  333. package/dist/{features → domains}/modes/modeLayers.js +1 -1
  334. package/dist/domains/modes/modeLayers.js.map +1 -0
  335. package/dist/{features → domains}/modes/modeTriggers.js +3 -6
  336. package/dist/domains/modes/modeTriggers.js.map +1 -0
  337. package/dist/{features → domains}/pathEffects/effectSources.js +1 -1
  338. package/dist/domains/pathEffects/effectSources.js.map +1 -0
  339. package/dist/{features → domains}/pathEffects/index.js +1 -1
  340. package/dist/domains/pathEffects/index.js.map +1 -0
  341. package/dist/{features → domains}/pathEffects/readSource.js +1 -1
  342. package/dist/domains/pathEffects/readSource.js.map +1 -0
  343. package/dist/{features → domains}/pathEffects/textItems.js +11 -2
  344. package/dist/domains/pathEffects/textItems.js.map +1 -0
  345. package/dist/{features → domains}/pathEffects/useEffectSourcesLayer.js +1 -1
  346. package/dist/domains/pathEffects/useEffectSourcesLayer.js.map +1 -0
  347. package/dist/{features → domains}/paths/anchorData.js +1 -1
  348. package/dist/domains/paths/anchorData.js.map +1 -0
  349. package/dist/{features → domains}/paths/anchorMarkers.js +9 -7
  350. package/dist/domains/paths/anchorMarkers.js.map +1 -0
  351. package/dist/{features → domains}/paths/editablePath.js +1 -1
  352. package/dist/domains/paths/editablePath.js.map +1 -0
  353. package/dist/{features → domains}/paths/index.js +3 -3
  354. package/dist/{features → domains}/paths/originProjection.js +1 -1
  355. package/dist/domains/paths/originProjection.js.map +1 -0
  356. package/dist/{features → domains}/paths/pathEditExtension.js +1 -1
  357. package/dist/domains/paths/pathEditExtension.js.map +1 -0
  358. package/dist/{features → domains}/paths/pathEditState.js +1 -1
  359. package/dist/domains/paths/pathEditState.js.map +1 -0
  360. package/dist/{features → domains}/paths/pathEditingOverlayLayer.js +1 -1
  361. package/dist/domains/paths/pathEditingOverlayLayer.js.map +1 -0
  362. package/dist/{features → domains}/paths/pathLayer.js +1 -1
  363. package/dist/domains/paths/pathLayer.js.map +1 -0
  364. package/dist/{features → domains}/paths/pathRepresentation.js +1 -1
  365. package/dist/domains/paths/pathRepresentation.js.map +1 -0
  366. package/dist/{features → domains}/paths/pathSnap/glyphs.js +1 -1
  367. package/dist/domains/paths/pathSnap/glyphs.js.map +1 -0
  368. package/dist/{features → domains}/paths/pathSnap/pathSnapSource.js +1 -1
  369. package/dist/domains/paths/pathSnap/pathSnapSource.js.map +1 -0
  370. package/dist/{features → domains}/paths/pathSnap/sceneIndex.js +1 -1
  371. package/dist/domains/paths/pathSnap/sceneIndex.js.map +1 -0
  372. package/dist/{features → domains}/paths/pathSnap/snapGeometry.js +3 -2
  373. package/dist/domains/paths/pathSnap/snapGeometry.js.map +1 -0
  374. package/dist/{features → domains}/paths/penPreviewLayer.js +1 -1
  375. package/dist/domains/paths/penPreviewLayer.js.map +1 -0
  376. package/dist/{features → domains}/paths/shapeGenerator.js +6 -4
  377. package/dist/domains/paths/shapeGenerator.js.map +1 -0
  378. package/dist/{features → domains}/paths/strokeOutline.js +1 -1
  379. package/dist/domains/paths/strokeOutline.js.map +1 -0
  380. package/dist/{features → domains}/paths/useAnchorFields.js +1 -1
  381. package/dist/domains/paths/useAnchorFields.js.map +1 -0
  382. package/dist/{features → domains}/paths/usePathEdit.js +1 -1
  383. package/dist/domains/paths/usePathEdit.js.map +1 -0
  384. package/dist/{features → domains}/poseRun/usePoseRun.js +1 -1
  385. package/dist/domains/poseRun/usePoseRun.js.map +1 -0
  386. package/dist/{features → domains}/selection/enteredGroupFrame.js +49 -10
  387. package/dist/domains/selection/enteredGroupFrame.js.map +1 -0
  388. package/dist/{features → domains}/selection/enteredGroupScope.js +1 -1
  389. package/dist/domains/selection/enteredGroupScope.js.map +1 -0
  390. package/dist/domains/selection/enteredOperands.js +29 -0
  391. package/dist/domains/selection/enteredOperands.js.map +1 -0
  392. package/dist/{features → domains}/selection/handleCommands.js +1 -1
  393. package/dist/domains/selection/handleCommands.js.map +1 -0
  394. package/dist/{features → domains}/selection/overlay.js +1 -1
  395. package/dist/domains/selection/overlay.js.map +1 -0
  396. package/dist/{features → domains}/selection/selectionPose.js +1 -1
  397. package/dist/domains/selection/selectionPose.js.map +1 -0
  398. package/dist/{features → domains}/snap/angle2d.js +1 -1
  399. package/dist/domains/snap/angle2d.js.map +1 -0
  400. package/dist/{features → domains}/snap/debugCandidates.js +1 -1
  401. package/dist/domains/snap/debugCandidates.js.map +1 -0
  402. package/dist/{features → domains}/snap/gather.js +1 -1
  403. package/dist/domains/snap/gather.js.map +1 -0
  404. package/dist/{features → domains}/snap/inputSubspace.js +1 -1
  405. package/dist/domains/snap/inputSubspace.js.map +1 -0
  406. package/dist/{features → domains}/snap/lazySession.js +1 -1
  407. package/dist/domains/snap/lazySession.js.map +1 -0
  408. package/dist/{features → domains}/snap/marks.js +1 -1
  409. package/dist/domains/snap/marks.js.map +1 -0
  410. package/dist/{features → domains}/snap/outcomeStore.js +1 -1
  411. package/dist/domains/snap/outcomeStore.js.map +1 -0
  412. package/dist/{features → domains}/snap/pointSnap.js +1 -1
  413. package/dist/domains/snap/pointSnap.js.map +1 -0
  414. package/dist/{features → domains}/snap/probes2d.js +1 -1
  415. package/dist/domains/snap/probes2d.js.map +1 -0
  416. package/dist/{features → domains}/snap/readoutDraw.js +1 -1
  417. package/dist/domains/snap/readoutDraw.js.map +1 -0
  418. package/dist/{features → domains}/snap/readoutLayer.js +1 -1
  419. package/dist/domains/snap/readoutLayer.js.map +1 -0
  420. package/dist/{features → domains}/snap/registry.js +1 -1
  421. package/dist/domains/snap/registry.js.map +1 -0
  422. package/dist/{features → domains}/snap/resizeBox.js +1 -1
  423. package/dist/domains/snap/resizeBox.js.map +1 -0
  424. package/dist/{features → domains}/snap/roles.js +1 -1
  425. package/dist/domains/snap/roles.js.map +1 -0
  426. package/dist/{features → domains}/snap/rotationSource.js +1 -1
  427. package/dist/domains/snap/rotationSource.js.map +1 -0
  428. package/dist/{features → domains}/snap/sceneReads.js +24 -3
  429. package/dist/domains/snap/sceneReads.js.map +1 -0
  430. package/dist/{features → domains}/snap/sceneSession2d.js +3 -2
  431. package/dist/domains/snap/sceneSession2d.js.map +1 -0
  432. package/dist/{features → domains}/snap/screen.js +1 -1
  433. package/dist/domains/snap/screen.js.map +1 -0
  434. package/dist/{features → domains}/snap/session2d.js +3 -2
  435. package/dist/domains/snap/session2d.js.map +1 -0
  436. package/dist/{features → domains}/snap/spanSnap.js +1 -1
  437. package/dist/domains/snap/spanSnap.js.map +1 -0
  438. package/dist/{features → domains}/snap/stepAngles.js +1 -1
  439. package/dist/domains/snap/stepAngles.js.map +1 -0
  440. package/dist/{features → domains}/text/editingDrawOne.js +4 -4
  441. package/dist/domains/text/editingDrawOne.js.map +1 -0
  442. package/dist/domains/text/hostTextEditors.js +24 -0
  443. package/dist/domains/text/hostTextEditors.js.map +1 -0
  444. package/dist/{features → domains}/text/index.js +1 -1
  445. package/dist/{features → domains}/text/sceneTextDrafts.js +1 -1
  446. package/dist/domains/text/sceneTextDrafts.js.map +1 -0
  447. package/dist/{features → domains}/text/textHitAt.js +18 -2
  448. package/dist/domains/text/textHitAt.js.map +1 -0
  449. package/dist/{features → domains}/text/textLayer.js +1 -1
  450. package/dist/domains/text/textLayer.js.map +1 -0
  451. package/dist/{features → domains}/text/useSceneTextEdit.js +11 -3
  452. package/dist/domains/text/useSceneTextEdit.js.map +1 -0
  453. package/dist/{features → domains}/viewports/aim.js +1 -1
  454. package/dist/domains/viewports/aim.js.map +1 -0
  455. package/dist/{features → domains}/viewports/viewMarker.js +23 -5
  456. package/dist/domains/viewports/viewMarker.js.map +1 -0
  457. package/dist/{features → domains}/viewports/viewMarkerDrag.js +3 -3
  458. package/dist/domains/viewports/viewMarkerDrag.js.map +1 -0
  459. package/dist/{features → domains}/viewports/viewResolver.js +1 -1
  460. package/dist/domains/viewports/viewResolver.js.map +1 -0
  461. package/dist/{features → domains}/viewports/viewportLayer.js +1 -1
  462. package/dist/domains/viewports/viewportLayer.js.map +1 -0
  463. package/dist/icons.table.js +1 -1
  464. package/dist/icons.table.js.map +1 -1
  465. package/dist/icons.table.json +106 -6
  466. package/dist/index.d.ts +1441 -1050
  467. package/dist/index.js +90 -77
  468. package/dist/interactions/actions/admitsChild.js +6 -2
  469. package/dist/interactions/actions/admitsChild.js.map +1 -1
  470. package/dist/interactions/actions/align/align.js +1 -4
  471. package/dist/interactions/actions/align/align.js.map +1 -1
  472. package/dist/interactions/actions/booleans/booleanGroupAction.js +66 -0
  473. package/dist/interactions/actions/booleans/booleanGroupAction.js.map +1 -0
  474. package/dist/interactions/actions/booleans/keymap.js +52 -0
  475. package/dist/interactions/actions/booleans/keymap.js.map +1 -0
  476. package/dist/interactions/actions/booleans/operands.js +1 -1
  477. package/dist/interactions/actions/booleans/pieces.js +4 -11
  478. package/dist/interactions/actions/booleans/pieces.js.map +1 -1
  479. package/dist/interactions/actions/clipboard/action.js +3 -7
  480. package/dist/interactions/actions/clipboard/action.js.map +1 -1
  481. package/dist/interactions/actions/clipboard/clipboardOps.js +1 -1
  482. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
  483. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
  484. package/dist/interactions/actions/defaults/anchorEditing.js +6 -6
  485. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
  486. package/dist/interactions/actions/defaults/bendSegment.js +1 -1
  487. package/dist/interactions/actions/defaults/bendSegment.js.map +1 -1
  488. package/dist/interactions/actions/defaults/containerScroll.js +170 -0
  489. package/dist/interactions/actions/defaults/containerScroll.js.map +1 -0
  490. package/dist/interactions/actions/defaults/contextMenu.js +2 -5
  491. package/dist/interactions/actions/defaults/contextMenu.js.map +1 -1
  492. package/dist/interactions/actions/defaults/delete.js +1 -1
  493. package/dist/interactions/actions/defaults/delete.js.map +1 -1
  494. package/dist/interactions/actions/defaults/duplicate.js +1 -3
  495. package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
  496. package/dist/interactions/actions/defaults/enterGroup.js +7 -12
  497. package/dist/interactions/actions/defaults/enterGroup.js.map +1 -1
  498. package/dist/interactions/actions/defaults/enterPathEdit.js +4 -8
  499. package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
  500. package/dist/interactions/actions/defaults/group.js +12 -24
  501. package/dist/interactions/actions/defaults/group.js.map +1 -1
  502. package/dist/interactions/actions/defaults/ingest.js +18 -10
  503. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  504. package/dist/interactions/actions/defaults/insertPathAnchor.js +3 -3
  505. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
  506. package/dist/interactions/actions/defaults/nudgeSteps.js +3 -21
  507. package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -1
  508. package/dist/interactions/actions/defaults/pathEditMarks.js.map +1 -1
  509. package/dist/interactions/actions/defaults/selectDeep.js +2 -2
  510. package/dist/interactions/actions/defaults/selectDeep.js.map +1 -1
  511. package/dist/interactions/actions/distribute/distribute.js.map +1 -1
  512. package/dist/interactions/actions/dropVerdict.js +9 -0
  513. package/dist/interactions/actions/dropVerdict.js.map +1 -0
  514. package/dist/interactions/actions/edit-anchors/action.js +2 -2
  515. package/dist/interactions/actions/edit-anchors/action.js.map +1 -1
  516. package/dist/interactions/actions/edit-anchors/extensionDrags.js.map +1 -1
  517. package/dist/interactions/actions/edit-anchors/geometry.js +8 -6
  518. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
  519. package/dist/interactions/actions/edit-anchors/handleDrag.js.map +1 -1
  520. package/dist/interactions/actions/edit-anchors/preview.js +1 -1
  521. package/dist/interactions/actions/edit-anchors/preview.js.map +1 -1
  522. package/dist/interactions/actions/flip/action.js +3 -2
  523. package/dist/interactions/actions/flip/action.js.map +1 -1
  524. package/dist/interactions/actions/geometryProjection.js +8 -3
  525. package/dist/interactions/actions/geometryProjection.js.map +1 -1
  526. package/dist/interactions/actions/gestureFrames.js +1 -0
  527. package/dist/interactions/actions/gestureFrames.js.map +1 -1
  528. package/dist/interactions/actions/insert/action.js +6 -2
  529. package/dist/interactions/actions/insert/action.js.map +1 -1
  530. package/dist/interactions/actions/insert/frame.js +1 -1
  531. package/dist/interactions/actions/insert/frame.js.map +1 -1
  532. package/dist/interactions/actions/insert/placeAction.js +6 -8
  533. package/dist/interactions/actions/insert/placeAction.js.map +1 -1
  534. package/dist/interactions/actions/insert/session.js +2 -2
  535. package/dist/interactions/actions/insert/session.js.map +1 -1
  536. package/dist/interactions/actions/move/action.js +6 -15
  537. package/dist/interactions/actions/move/action.js.map +1 -1
  538. package/dist/interactions/actions/move/behaviors/layoutDrop.js +12 -2
  539. package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -1
  540. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +29 -10
  541. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -1
  542. package/dist/interactions/actions/move/behaviors/snapToContainer.js +42 -6
  543. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
  544. package/dist/interactions/actions/move/capture.js +4 -8
  545. package/dist/interactions/actions/move/capture.js.map +1 -1
  546. package/dist/interactions/actions/move/commit/index.js.map +1 -1
  547. package/dist/interactions/actions/move/commit/layoutDrop.js +4 -3
  548. package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -1
  549. package/dist/interactions/actions/move/commit/layoutRelease.js +15 -9
  550. package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -1
  551. package/dist/interactions/actions/move/commit/reparent.js +19 -13
  552. package/dist/interactions/actions/move/commit/reparent.js.map +1 -1
  553. package/dist/interactions/actions/move/delta.js +51 -5
  554. package/dist/interactions/actions/move/delta.js.map +1 -1
  555. package/dist/interactions/actions/move/frame.js +8 -4
  556. package/dist/interactions/actions/move/frame.js.map +1 -1
  557. package/dist/interactions/actions/move/layout/container.js +19 -9
  558. package/dist/interactions/actions/move/layout/container.js.map +1 -1
  559. package/dist/interactions/actions/move/layout/dragged.js +2 -2
  560. package/dist/interactions/actions/move/layout/dragged.js.map +1 -1
  561. package/dist/interactions/actions/move/layout/dropPass.js +36 -18
  562. package/dist/interactions/actions/move/layout/dropPass.js.map +1 -1
  563. package/dist/interactions/actions/move/layout/exits.js +2 -2
  564. package/dist/interactions/actions/move/layout/exits.js.map +1 -1
  565. package/dist/interactions/actions/move/layout/glide.js +5 -5
  566. package/dist/interactions/actions/move/layout/glide.js.map +1 -1
  567. package/dist/interactions/actions/move/layout/view.js +55 -0
  568. package/dist/interactions/actions/move/layout/view.js.map +1 -0
  569. package/dist/interactions/actions/move/refusal.js +52 -0
  570. package/dist/interactions/actions/move/refusal.js.map +1 -0
  571. package/dist/interactions/actions/move/session.js +9 -8
  572. package/dist/interactions/actions/move/session.js.map +1 -1
  573. package/dist/interactions/actions/move/translate.js +10 -4
  574. package/dist/interactions/actions/move/translate.js.map +1 -1
  575. package/dist/interactions/actions/moveNodes.js +21 -5
  576. package/dist/interactions/actions/moveNodes.js.map +1 -1
  577. package/dist/interactions/actions/pathCommands/pathNodes.js +3 -3
  578. package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -1
  579. package/dist/interactions/actions/planeInput.js +14 -13
  580. package/dist/interactions/actions/planeInput.js.map +1 -1
  581. package/dist/interactions/actions/poseFrame.js +21 -8
  582. package/dist/interactions/actions/poseFrame.js.map +1 -1
  583. package/dist/interactions/actions/resize/action.js +1 -1
  584. package/dist/interactions/actions/resize/action.js.map +1 -1
  585. package/dist/interactions/actions/resize/aspect.js +1 -1
  586. package/dist/interactions/actions/resize/aspect.js.map +1 -1
  587. package/dist/interactions/actions/resize/commit.js +10 -1
  588. package/dist/interactions/actions/resize/commit.js.map +1 -1
  589. package/dist/interactions/actions/resize/frame.js +3 -2
  590. package/dist/interactions/actions/resize/frame.js.map +1 -1
  591. package/dist/interactions/actions/resize/held.js +44 -0
  592. package/dist/interactions/actions/resize/held.js.map +1 -0
  593. package/dist/interactions/actions/resize/session.js +3 -1
  594. package/dist/interactions/actions/resize/session.js.map +1 -1
  595. package/dist/interactions/actions/resolveOverlays.js +9 -0
  596. package/dist/interactions/actions/resolveOverlays.js.map +1 -1
  597. package/dist/interactions/actions/resolvePreviews.js +23 -7
  598. package/dist/interactions/actions/resolvePreviews.js.map +1 -1
  599. package/dist/interactions/actions/rotate/action.js +1 -1
  600. package/dist/interactions/actions/rotate/action.js.map +1 -1
  601. package/dist/interactions/actions/rotate/frame.js +1 -1
  602. package/dist/interactions/actions/rotate/frame.js.map +1 -1
  603. package/dist/interactions/actions/rotate/session.js +2 -2
  604. package/dist/interactions/actions/rotate/session.js.map +1 -1
  605. package/dist/interactions/actions/selectionSubtree.js +2 -4
  606. package/dist/interactions/actions/selectionSubtree.js.map +1 -1
  607. package/dist/interactions/actions/spatialReference.js +4 -9
  608. package/dist/interactions/actions/spatialReference.js.map +1 -1
  609. package/dist/interactions/gestures/dragRadial/dragRadial.js.map +1 -1
  610. package/dist/interactions/gestures/dragRect/dragRect.js.map +1 -1
  611. package/dist/kitSettingsSchema.js +2 -2
  612. package/dist/kitSettingsSchema.js.map +1 -1
  613. package/dist/{math-C_elShP_.d.ts → math-B_unOnF4.d.ts} +2 -2
  614. package/dist/math.d.ts +3 -3
  615. package/dist/move.d.ts +6 -6
  616. package/dist/{options-ClEm3SEl.d.ts → options-DAjkhbcs.d.ts} +5 -5
  617. package/dist/{poseDescriptor-DN2yfnq_.d.ts → poseDescriptor-CvSxVhCd.d.ts} +17 -4
  618. package/dist/resize.d.ts +6 -6
  619. package/dist/style.css +14 -0
  620. package/dist/test-seams.d.ts +11 -15
  621. package/dist/test-seams.js +1 -1
  622. package/dist/tools/builtin/eyedropper/useEyedropperTool.js +3 -6
  623. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
  624. package/dist/tools/builtin/line/useLineTool.js.map +1 -1
  625. package/dist/tools/builtin/measure/useMeasureTool.js +2 -2
  626. package/dist/tools/builtin/measure/useMeasureTool.js.map +1 -1
  627. package/dist/tools/builtin/pen/penHandle.js +2 -2
  628. package/dist/tools/builtin/pen/penHandle.js.map +1 -1
  629. package/dist/tools/builtin/pen/usePenTool.js +13 -19
  630. package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
  631. package/dist/tools/builtin/polygon/usePolygonTool.js +1 -1
  632. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
  633. package/dist/tools/builtin/select/groupEntry.js +1 -1
  634. package/dist/tools/builtin/select/groupEntry.js.map +1 -1
  635. package/dist/tools/builtin/select/selectionContributions.js +1 -1
  636. package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
  637. package/dist/tools/builtin/select/useSelectTool.js +7 -7
  638. package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
  639. package/dist/tools/builtin/slice/useSliceTool.js +5 -8
  640. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
  641. package/dist/tools/builtin/star/useStarTool.js +1 -1
  642. package/dist/tools/builtin/star/useStarTool.js.map +1 -1
  643. package/dist/tools/index.js +2 -1
  644. package/dist/{types-49uYJN3j.d.ts → types-A_sNJYRd.d.ts} +8 -0
  645. package/dist/{types-BEdRIhNc.d.ts → types-DW14eu9B.d.ts} +131 -36
  646. package/dist/{types-p2alu-R1.d.ts → types-VCtfchp-.d.ts} +4 -6
  647. package/dist/util/color.js +12 -14
  648. package/dist/util/color.js.map +1 -1
  649. package/dist/version.js +1 -1
  650. package/package.json +25 -24
  651. package/dist/canvas/poseCascade.js +0 -65
  652. package/dist/canvas/poseCascade.js.map +0 -1
  653. package/dist/features/chrome-caps/buildChromeCtx.js.map +0 -1
  654. package/dist/features/chrome-caps/conditions.js.map +0 -1
  655. package/dist/features/chrome-caps/defaults.js.map +0 -1
  656. package/dist/features/chrome-caps/resolve.js.map +0 -1
  657. package/dist/features/chrome-caps/useChromeCaps.js.map +0 -1
  658. package/dist/features/chrome-caps/useHoverTracking.js.map +0 -1
  659. package/dist/features/ingestion/contentHandlers.js.map +0 -1
  660. package/dist/features/ingestion/imageHandler.js.map +0 -1
  661. package/dist/features/ingestion/openFilePicker.js.map +0 -1
  662. package/dist/features/ingestion/placement.js.map +0 -1
  663. package/dist/features/ingestion/registerKitHandlers.js +0 -43
  664. package/dist/features/ingestion/registerKitHandlers.js.map +0 -1
  665. package/dist/features/ingestion/svgHandler.js.map +0 -1
  666. package/dist/features/ingestion/textHandler.js.map +0 -1
  667. package/dist/features/ingestion/useCanvasIngestion.js.map +0 -1
  668. package/dist/features/ingestion/weaselJsonHandler.js.map +0 -1
  669. package/dist/features/longPress/longPressFeedback.js.map +0 -1
  670. package/dist/features/measure/actionIds.js.map +0 -1
  671. package/dist/features/measure/measureCommands.js.map +0 -1
  672. package/dist/features/measure/measureContribution.js.map +0 -1
  673. package/dist/features/measure/measureEdits.js.map +0 -1
  674. package/dist/features/measure/measureGestures.js.map +0 -1
  675. package/dist/features/measure/measureHit.js.map +0 -1
  676. package/dist/features/measure/measureLayer.js.map +0 -1
  677. package/dist/features/measure/measurement.js.map +0 -1
  678. package/dist/features/measure/measurements.js.map +0 -1
  679. package/dist/features/modes/modeLayers.js.map +0 -1
  680. package/dist/features/modes/modeTriggers.js.map +0 -1
  681. package/dist/features/pathEffects/effectSources.js.map +0 -1
  682. package/dist/features/pathEffects/index.js.map +0 -1
  683. package/dist/features/pathEffects/readSource.js.map +0 -1
  684. package/dist/features/pathEffects/textItems.js.map +0 -1
  685. package/dist/features/pathEffects/useEffectSourcesLayer.js.map +0 -1
  686. package/dist/features/paths/anchorData.js.map +0 -1
  687. package/dist/features/paths/anchorMarkers.js.map +0 -1
  688. package/dist/features/paths/editablePath.js.map +0 -1
  689. package/dist/features/paths/originProjection.js.map +0 -1
  690. package/dist/features/paths/pathEditExtension.js.map +0 -1
  691. package/dist/features/paths/pathEditState.js.map +0 -1
  692. package/dist/features/paths/pathEditingOverlayLayer.js.map +0 -1
  693. package/dist/features/paths/pathLayer.js.map +0 -1
  694. package/dist/features/paths/pathRepresentation.js.map +0 -1
  695. package/dist/features/paths/pathSnap/glyphs.js.map +0 -1
  696. package/dist/features/paths/pathSnap/pathSnapSource.js.map +0 -1
  697. package/dist/features/paths/pathSnap/sceneIndex.js.map +0 -1
  698. package/dist/features/paths/pathSnap/snapGeometry.js.map +0 -1
  699. package/dist/features/paths/penPreviewLayer.js.map +0 -1
  700. package/dist/features/paths/shapeGenerator.js.map +0 -1
  701. package/dist/features/paths/strokeOutline.js.map +0 -1
  702. package/dist/features/paths/useAnchorFields.js.map +0 -1
  703. package/dist/features/paths/usePathEdit.js.map +0 -1
  704. package/dist/features/poseRun/usePoseRun.js.map +0 -1
  705. package/dist/features/selection/enteredGroupFrame.js.map +0 -1
  706. package/dist/features/selection/enteredGroupScope.js.map +0 -1
  707. package/dist/features/selection/handleCommands.js.map +0 -1
  708. package/dist/features/selection/overlay.js.map +0 -1
  709. package/dist/features/selection/selectionPose.js.map +0 -1
  710. package/dist/features/snap/angle2d.js.map +0 -1
  711. package/dist/features/snap/debugCandidates.js.map +0 -1
  712. package/dist/features/snap/gather.js.map +0 -1
  713. package/dist/features/snap/inputSubspace.js.map +0 -1
  714. package/dist/features/snap/lazySession.js.map +0 -1
  715. package/dist/features/snap/marks.js.map +0 -1
  716. package/dist/features/snap/outcomeStore.js.map +0 -1
  717. package/dist/features/snap/pointSnap.js.map +0 -1
  718. package/dist/features/snap/probes2d.js.map +0 -1
  719. package/dist/features/snap/readoutDraw.js.map +0 -1
  720. package/dist/features/snap/readoutLayer.js.map +0 -1
  721. package/dist/features/snap/registry.js.map +0 -1
  722. package/dist/features/snap/resizeBox.js.map +0 -1
  723. package/dist/features/snap/roles.js.map +0 -1
  724. package/dist/features/snap/rotationSource.js.map +0 -1
  725. package/dist/features/snap/sceneReads.js.map +0 -1
  726. package/dist/features/snap/sceneSession2d.js.map +0 -1
  727. package/dist/features/snap/screen.js.map +0 -1
  728. package/dist/features/snap/session2d.js.map +0 -1
  729. package/dist/features/snap/spanSnap.js.map +0 -1
  730. package/dist/features/snap/stepAngles.js.map +0 -1
  731. package/dist/features/text/editingDrawOne.js.map +0 -1
  732. package/dist/features/text/sceneTextDrafts.js.map +0 -1
  733. package/dist/features/text/textHitAt.js.map +0 -1
  734. package/dist/features/text/textLayer.js.map +0 -1
  735. package/dist/features/text/useSceneTextEdit.js.map +0 -1
  736. package/dist/features/viewports/aim.js.map +0 -1
  737. package/dist/features/viewports/viewMarker.js.map +0 -1
  738. package/dist/features/viewports/viewMarkerDrag.js.map +0 -1
  739. package/dist/features/viewports/viewResolver.js.map +0 -1
  740. package/dist/features/viewports/viewportLayer.js.map +0 -1
  741. /package/dist/{features → domains}/chrome-caps/index.js +0 -0
@@ -1,6 +1,6 @@
1
1
  import * as _weasel_js_history from '@weasel-js/history';
2
2
  import { Op, SerializedHistory, History } from '@weasel-js/history';
3
- import { P as ParallaxOpts, C as ContainerBounds, L as LayoutStrategy } from './types-49uYJN3j.js';
3
+ import { P as ParallaxOpts, C as ContainerBounds, L as LayoutStrategy } from './types-A_sNJYRd.js';
4
4
  import { UnitScope } from '@weasel-js/quantity';
5
5
  import { NodeId } from '@weasel-js/routing';
6
6
  import { Path, PoseLinear, Affine } from '@weasel-js/geom';
@@ -61,10 +61,11 @@ interface SceneBatchOptions {
61
61
  }
62
62
 
63
63
  /** The form a scene's undo entries are recorded in. A serialized history
64
- * carries it, and one carrying another is not restored. Form 3 names
65
- * nodes `mark` and `group`; form 2 held the scene's own ops for every edit,
66
- * and before it an `applyBatch` entry held the ops it was given. */
67
- declare const SCENE_HISTORY_FORM = 3;
64
+ * carries it, and one carrying another is not restored. Form 4 records a
65
+ * child's pose in its container's frame; form 3 named nodes `mark` and
66
+ * `group`; form 2 held the scene's own ops for every edit, and before it an
67
+ * `applyBatch` entry held the ops it was given. */
68
+ declare const SCENE_HISTORY_FORM = 4;
68
69
  /** What `Scene.serializeHistory` answers with. */
69
70
  interface SerializedSceneHistory extends SerializedHistory {
70
71
  form: typeof SCENE_HISTORY_FORM;
@@ -151,6 +152,19 @@ interface PoseAdapter<TPose> {
151
152
  * means every node is one. A container whose pose derives from its children
152
153
  * is not: its children share its frame, so the fold passes over it. */
153
154
  definesFrame?(id: string): boolean;
155
+ /** The frame `id` gives its children, from `world`, the frame its own pose
156
+ * folds to. Absent means `world` itself. A view that scrolls a container's
157
+ * content answers the frame moved by that offset (`scrolledFrames`); the
158
+ * document's own readers and writers never carry it. */
159
+ childFrame?(id: string, world: TPose): TPose;
160
+ }
161
+ /** How far a container's content is scrolled, in the container's own axes:
162
+ * its children are shown at their stored poses moved by minus this. `z` is
163
+ * for a pose with a third axis, and a 2D composition ignores it. */
164
+ interface ScrollOffset {
165
+ readonly x: number;
166
+ readonly y: number;
167
+ readonly z?: number;
154
168
  }
155
169
  /**
156
170
  * What a container's pose does to its children under a `compose`: nothing,
@@ -161,17 +175,24 @@ interface PoseAdapter<TPose> {
161
175
  type PoseClosure = 'identity' | 'translation' | 'rigid';
162
176
  /** Consumer's pose-composition strategy for hierarchical scenes. `compose`
163
177
  * folds a child's pose (in parent's frame) up to the next frame; `decompose`
164
- * is its inverse. Default is IDENTITY — an absolute-pose scene where every
165
- * node already stores world coords (parent is grouping-only, no transform). */
178
+ * is its inverse. A scene's default is `RIGID_POSE_COMPOSITION`. */
166
179
  interface PoseComposition<TPose> {
167
180
  compose(parent: TPose, child: TPose): TPose;
168
181
  decompose(parent: TPose, world: TPose): TPose;
169
182
  closure: PoseClosure;
183
+ /** `frame` with its content scrolled by `offset`: the frame a child composed
184
+ * under it lands where `compose(frame, child)` would put the child moved by
185
+ * minus `offset` in `frame`'s own axes. Absent, a container's content cannot
186
+ * be scrolled under this composition. */
187
+ scroll?(frame: TPose, offset: ScrollOffset): TPose;
170
188
  }
171
- /** Default pose-composition strategy: IDENTITY, an absolute-pose scene. */
172
- declare const IDENTITY_POSE_COMPOSITION: PoseComposition<unknown>;
189
+ /** The absolute-pose strategy: every node stores its world pose, and a
190
+ * container groups its children without carrying them — moving it moves
191
+ * nothing else. For a scene whose poses have no frame to fold, such as one
192
+ * whose readers take every stored pose as world. */
193
+ declare const IDENTITY_POSE_COMPOSITION: PoseComposition<never>;
173
194
  /** Whether `composition` makes a container's pose a frame, so a stored pose
174
- * is local to it. False for the absolute-pose model. */
195
+ * is local to it. False for `IDENTITY_POSE_COMPOSITION`. */
175
196
  declare function composesFrames(composition: {
176
197
  closure: PoseClosure;
177
198
  }): boolean;
@@ -183,6 +204,12 @@ declare function composesFrames(composition: {
183
204
  * local frame* and returns the equivalent pose in the next frame up.
184
205
  */
185
206
  declare function composeWorldPose<TPose>(adapter: PoseAdapter<TPose>, id: string, compose: (parent: TPose, child: TPose) => TPose): TPose;
207
+ /** World pose of the frame `id`'s children are expressed in: its own world
208
+ * pose, through the adapter's `childFrame` when it has one and `id` is a
209
+ * frame. */
210
+ declare function composeChildFrame<TPose>(adapter: PoseAdapter<TPose>, id: string, compose: (parent: TPose, child: TPose) => TPose): TPose;
211
+ /** The frame `id` gives its children when its own pose folds to `world`. */
212
+ declare function childFrameAt<TPose>(adapter: PoseAdapter<TPose>, id: string, world: TPose): TPose;
186
213
  /**
187
214
  * Convert `worldPose` into a local pose expressed under `newParentId`'s
188
215
  * frame, so a reparented child keeps its visual world position.
@@ -394,7 +421,8 @@ interface SerializedLayer<TLayer extends string> extends SystemLayerSpec<TLayer>
394
421
  * (e.g., `clipFromPose`) appear as string keys (`clipFromPoseKey`) and
395
422
  * are resolved through `SceneRegistry` at load time. */
396
423
  interface SerializedScene<TData, TLayer extends string, TPose> {
397
- version: 2;
424
+ /** 3 stores a child's pose in its container's frame. */
425
+ version: 3;
398
426
  /** The whole layer stack, system and user alike — the name predates user
399
427
  * layers and is kept so existing snapshots still parse. */
400
428
  systemLayers: readonly SerializedLayer<TLayer>[];
@@ -437,16 +465,24 @@ interface SerializedNode<TData, TLayer extends string, TPose> {
437
465
  units?: UnitScope;
438
466
  /** Mirrors `SceneNode.clip`. Omitted when the node declares none. */
439
467
  clip?: NodeClip;
468
+ /** Mirrors `SceneNode.consumesChildren`. Omitted when the node draws its children. */
469
+ consumesChildren?: boolean;
440
470
  }
441
471
  /** A node as version 1 saves wrote it: the kinds were `leaf` and `container`. */
442
472
  interface SerializedNodeV1<TData, TLayer extends string, TPose> extends Omit<SerializedNode<TData, TLayer, TPose>, 'kind'> {
443
473
  kind: 'leaf' | 'container';
444
474
  }
445
- /** A version 1 save, still read and never written. */
475
+ /** A version 1 save, still read and never written: every pose in it is world. */
446
476
  interface SerializedSceneV1<TData, TLayer extends string, TPose> extends Omit<SerializedScene<TData, TLayer, TPose>, 'version' | 'nodes'> {
447
477
  version: 1;
448
478
  nodes: readonly SerializedNodeV1<TData, TLayer, TPose>[];
449
479
  }
480
+ /** A version 2 save, still read and never written: every pose in it is world. */
481
+ interface SerializedSceneV2<TData, TLayer extends string, TPose> extends Omit<SerializedScene<TData, TLayer, TPose>, 'version'> {
482
+ version: 2;
483
+ }
484
+ /** Any save a scene reads: the current version or an older one. */
485
+ type SavedScene<TData, TLayer extends string, TPose> = SerializedScene<TData, TLayer, TPose> | SerializedSceneV2<TData, TLayer, TPose> | SerializedSceneV1<TData, TLayer, TPose>;
450
486
 
451
487
  /**
452
488
  * A scene's document values. Keys are namespaced by their owner
@@ -481,6 +517,48 @@ interface SceneDeclaredFieldSetters {
481
517
  setClip(id: NodeId, clip: NodeClip | null): void;
482
518
  }
483
519
 
520
+ /** The scene's scroll offsets, one per scrolled container. */
521
+ interface ScrollOffsets {
522
+ /** How far `id`'s content is scrolled, or `undefined` when it is not. */
523
+ get(id: NodeId): ScrollOffset | undefined;
524
+ /** Scroll `id`'s content to `offset`. `null`, or an offset of zero on every
525
+ * axis, unscrolls it. */
526
+ set(id: NodeId, offset: ScrollOffset | null): void;
527
+ /** The scrolled containers. */
528
+ ids(): IterableIterator<NodeId>;
529
+ /** Unscroll everything. */
530
+ clearAll(): void;
531
+ subscribe(listener: () => void): () => void;
532
+ /** Bumped by every change, for a cache keyed on what the view shows. */
533
+ getGeneration(): number;
534
+ }
535
+ /** The scroll store a `Scene` carries. */
536
+ interface SceneScroll {
537
+ /** How far each container's content is scrolled. Like the selection, view
538
+ * state shared by every view over the scene: never document content, never
539
+ * recorded or serialized, and it does not bump the scene's version. */
540
+ readonly scroll: ScrollOffsets;
541
+ }
542
+ /** Build an empty {@link ScrollOffsets}. */
543
+ declare function createScrollOffsets(): ScrollOffsets;
544
+ /** What `scrolledFrames` reads of a scene. Partial stand-ins without a
545
+ * `scroll` store read as unscrolled. */
546
+ interface ScrollSource<TPose> {
547
+ readonly overrides?: unknown;
548
+ readonly scroll?: ScrollOffsets;
549
+ readonly composition?: PoseComposition<TPose>;
550
+ }
551
+ /**
552
+ * The view-side fold's `PoseAdapter.childFrame` over `scene`: each scrolled
553
+ * container's frame moved by its offset. `undefined` when the scene has no
554
+ * scroll store, its composition cannot scroll, or it is a `documentOf` view,
555
+ * which reads as the document holds it, so a reader skips the step.
556
+ */
557
+ declare function scrolledFrames<TPose>(scene: ScrollSource<TPose>): ((id: string, world: TPose) => TPose) | undefined;
558
+ /** `adapter` read as the view shows it: with `scene`'s scrolled frames as its
559
+ * `childFrame`. The same adapter when nothing can scroll. */
560
+ declare function viewPoseAdapter<TPose, A extends PoseAdapter<TPose>>(scene: ScrollSource<TPose>, adapter: A): A;
561
+
484
562
  /**
485
563
  * Decides what one edit's changes to containers do to their children.
486
564
  * `arrivals` maps each container to the ids that joined it — by an `add`
@@ -522,6 +600,8 @@ interface RegisteredOp<P> {
522
600
  * two readers that turn one back into layer records and node specs.
523
601
  */
524
602
 
603
+ /** Whether `value` is a snapshot `specsFromSerialized` reads, as against a live scene. */
604
+ declare function isSerializedScene<TData, TLayer extends string, TPose>(value: unknown): value is SavedScene<TData, TLayer, TPose>;
525
605
  /** Decides what a version 1 `container` becomes; `leaf` is always a mark. */
526
606
  type V1Classifier<TData, TLayer extends string, TPose> = (node: SerializedNodeV1<TData, TLayer, TPose>) => 'mark' | 'group';
527
607
  /** Options for {@link specsFromSerialized}. */
@@ -534,6 +614,9 @@ interface SpecsFromSerializedOptions<TData, TLayer extends string, TPose> {
534
614
  unknownKeys?: 'throw' | 'skip';
535
615
  /** Hears each key `unknownKeys: 'skip'` leaves out, as it is left out. */
536
616
  onSkip?: (skipped: SkippedKey) => void;
617
+ /** How a version 1 or 2 save's world poses are made local to their
618
+ * containers' frames. Default `RIGID_POSE_COMPOSITION`; a scene passes its own. */
619
+ composition?: PoseComposition<TPose>;
537
620
  }
538
621
  /** A registry key a load left out: the node, the function field it named,
539
622
  * and the key. */
@@ -547,8 +630,8 @@ interface SkippedKey {
547
630
  * resolves every `NODE_FN_FIELDS` key → function via the registry;
548
631
  * throws on an unsupported version, and on an unknown registry key unless
549
632
  * `opts.unknownKeys` is `'skip'`. */
550
- declare function specsFromSerialized<TData, TLayer extends string, TPose>(json: SerializedScene<TData, TLayer, TPose> | SerializedSceneV1<TData, TLayer, TPose>, registry: SceneRegistry<TPose, TData, TLayer>, opts?: SpecsFromSerializedOptions<TData, TLayer, TPose>): AddNodeSpec<TData, TLayer, TPose>[];
551
- /** The kind a saved node loads as: its own on version 2; on version 1 a `leaf` is a
633
+ declare function specsFromSerialized<TData, TLayer extends string, TPose>(json: SavedScene<TData, TLayer, TPose>, registry: SceneRegistry<TPose, TData, TLayer>, opts?: SpecsFromSerializedOptions<TData, TLayer, TPose>): AddNodeSpec<TData, TLayer, TPose>[];
634
+ /** The kind a saved node loads as: its own from version 2; on version 1 a `leaf` is a
552
635
  * mark and a `container` goes to `classify`, or is a group without one. */
553
636
  declare function nodeKindOf<TData, TLayer extends string, TPose>(version: 1 | 2, n: SerializedNode<TData, TLayer, TPose> | SerializedNodeV1<TData, TLayer, TPose>, classify?: V1Classifier<TData, TLayer, TPose>): 'mark' | 'group';
554
637
 
@@ -646,6 +729,10 @@ interface DerivedDep<TPose, TData = unknown, TLayer extends string = string> {
646
729
  * `undefined` when it inherits nothing. A dependency built by hand rather
647
730
  * than by the scene may leave it out, and then inherits nothing. */
648
731
  readonly inherited?: InheritedPaint;
732
+ /** Its children, as dependencies in the frame its own pose is in: what a
733
+ * derivation reading through a group to its contents walks. Resolved on
734
+ * each read; absent where the lookup cannot list them. */
735
+ readonly children?: readonly (DerivedDep<TPose, TData, TLayer> | undefined)[];
649
736
  }
650
737
  /** `F` with its parameters checked bivariantly, as a method's are, so that a
651
738
  * `Scene<D, L, MyPose>` is a `Scene<unknown, string, unknown>`. A callback for
@@ -668,6 +755,22 @@ type ClipFromPoseFn<TPose> = Bivariant<(pose: TPose) => Path | null>;
668
755
  * carries the children, as drawn, to one copy. */
669
756
  type CopiesFromPoseFn<TPose, TData = unknown, TLayer extends string = string> = Bivariant<(pose: TPose, node: Node<TData, TLayer, TPose>) => readonly Affine[] | null>;
670
757
 
758
+ /** Per-scene registry mapping string keys to live function references.
759
+ * Passed to `createScene({ ..., registry })` and `sceneFromJSON(json, { registry })`.
760
+ * Each function-field type has its own keyed map. */
761
+ interface SceneRegistry<TPose, TData = unknown, TLayer extends string = string> {
762
+ /** Maps registry keys to `clipFromPose` factory functions for nodes. */
763
+ clipFromPose?: Readonly<Record<string, ClipFromPoseFn<TPose>>>;
764
+ /** Maps registry keys to `copiesFromPose` functions for nodes. */
765
+ copiesFromPose?: Readonly<Record<string, CopiesFromPoseFn<TPose, TData, TLayer>>>;
766
+ /** Maps registry keys to `derivePath` functions for nodes with `dependsOn`. */
767
+ derivePath?: Readonly<Record<string, DerivePathFn<TPose, TData, TLayer>>>;
768
+ /** Maps registry keys to `derivePose` functions for nodes with `dependsOn`. */
769
+ derivePose?: Readonly<Record<string, DerivePoseFn<TPose, TData, TLayer>>>;
770
+ /** Maps registry keys to layout strategies. */
771
+ layout?: Readonly<Record<string, LayoutStrategy<TPose>>>;
772
+ }
773
+
671
774
  /** Brand a string as a NodeId. */
672
775
  declare const asNodeId: (s: string) => NodeId;
673
776
 
@@ -745,6 +848,12 @@ interface NodeBase<TData, TLayer extends string, TPose> {
745
848
  * A copy is a copy of the clipped content — the clip travels with it.
746
849
  * Re-evaluated each render; `null` or `[]` draws no copies. */
747
850
  copiesFromPose?: CopiesFromPoseFn<TPose, TData, TLayer>;
851
+ /** Its children are the operands of its own geometry, drawn only through
852
+ * it: the render walk paints none of them, and a press, a region select
853
+ * or select-all reaches one only while this node, or a group inside it, is
854
+ * entered. A node that consumes its children is entered as a group is.
855
+ * The boolean group (`booleanGroupFields`) is the kit's one. */
856
+ consumesChildren?: boolean;
748
857
  /** How this node arranges its children. Whenever the node's
749
858
  * child set or order changes, its bounds change size, or a child's pose is
750
859
  * written, the scene hands the change to the strategy — `depart` for children that left it,
@@ -791,6 +900,8 @@ interface AddNodeSpec<TData, TLayer extends string, TPose = RectPose> {
791
900
  clipFromPose?: ClipFromPoseFn<TPose>;
792
901
  /** Mirrors `SceneNode.clip`. */
793
902
  clip?: NodeClip;
903
+ /** Mirrors `SceneNode.consumesChildren`. */
904
+ consumesChildren?: boolean;
794
905
  /** Mirrors `SceneNode.copiesFromPose`. */
795
906
  copiesFromPose?: CopiesFromPoseFn<TPose, TData, TLayer>;
796
907
  /** Mirrors `SceneNode.dependsOn`. */
@@ -805,21 +916,6 @@ interface AddNodeSpec<TData, TLayer extends string, TPose = RectPose> {
805
916
  /** Mirrors `SceneNode.units`. */
806
917
  units?: UnitScope;
807
918
  }
808
- /** Per-scene registry mapping string keys to live function references.
809
- * Passed to `createScene({ ..., registry })` and `sceneFromJSON(json, { registry })`.
810
- * Each function-field type has its own keyed map. */
811
- interface SceneRegistry<TPose, TData = unknown, TLayer extends string = string> {
812
- /** Maps registry keys to `clipFromPose` factory functions for nodes. */
813
- clipFromPose?: Readonly<Record<string, ClipFromPoseFn<TPose>>>;
814
- /** Maps registry keys to `copiesFromPose` functions for nodes. */
815
- copiesFromPose?: Readonly<Record<string, CopiesFromPoseFn<TPose, TData, TLayer>>>;
816
- /** Maps registry keys to `derivePath` functions for nodes with `dependsOn`. */
817
- derivePath?: Readonly<Record<string, DerivePathFn<TPose, TData, TLayer>>>;
818
- /** Maps registry keys to `derivePose` functions for nodes with `dependsOn`. */
819
- derivePose?: Readonly<Record<string, DerivePoseFn<TPose, TData, TLayer>>>;
820
- /** Maps registry keys to layout strategies. */
821
- layout?: Readonly<Record<string, LayoutStrategy<TPose>>>;
822
- }
823
919
  /**
824
920
  * The kit-owned scene tree: nodes, layers, and the undo history over both.
825
921
  *
@@ -832,14 +928,13 @@ interface SceneRegistry<TPose, TData = unknown, TLayer extends string = string>
832
928
  * which the kit never inspects; `TPose` is the transform shape, `RectPose` by
833
929
  * default; `TLayer` is the union of layer names.
834
930
  */
835
- interface Scene<TData, TLayer extends string, TPose = RectPose> extends ScenePoseReports<TPose, Node<TData, TLayer, TPose>>, SceneChanges, SceneDocValues, SceneEditPasses, SceneDeclaredFieldSetters {
931
+ interface Scene<TData, TLayer extends string, TPose = RectPose> extends ScenePoseReports<TPose, Node<TData, TLayer, TPose>>, SceneChanges, SceneDocValues, SceneEditPasses, SceneDeclaredFieldSetters, SceneScroll {
836
932
  readonly nodes: ReadonlyMap<NodeId, Node<TData, TLayer, TPose>>;
837
933
  readonly roots: readonly NodeId[];
838
934
  readonly layers: readonly LayerRecord<TLayer>[];
839
- /** The registry this scene resolves node functions against — the consumer's
840
- * entries over the kit's. */
935
+ /** The registry this scene resolves node functions against — the consumer's entries over the kit's. */
841
936
  readonly registry: SceneRegistry<TPose, TData, TLayer>;
842
- /** See {@link UseSceneOptions.composition}. */
937
+ /** See {@link SceneOptions.composition}. */
843
938
  readonly composition: PoseComposition<TPose>;
844
939
  get(id: NodeId): Node<TData, TLayer, TPose> | undefined;
845
940
  /** A token for the node `id` names right now, for telling one node from a
@@ -1105,8 +1200,8 @@ interface Scene<TData, TLayer extends string, TPose = RectPose> extends ScenePos
1105
1200
  * undo — which would revert to a state this replaces. Throws on an unsupported version or unknown registry/layer ids; on a
1106
1201
  * malformed snapshot the scene is left empty or partially populated (callers should treat a
1107
1202
  * `loadState` throw as fatal and reload). Snapshots from `toJSON()` are
1108
- * always well-formed. `opts` reads the snapshot as `specsFromSerialized` does. */
1109
- loadState(json: SerializedScene<TData, TLayer, TPose> | SerializedSceneV1<TData, TLayer, TPose>, opts?: SpecsFromSerializedOptions<TData, TLayer, TPose>): void;
1203
+ * always well-formed. `opts` reads it as `specsFromSerialized` does, under the scene's composition. */
1204
+ loadState(json: SavedScene<TData, TLayer, TPose>, opts?: Omit<SpecsFromSerializedOptions<TData, TLayer, TPose>, 'composition'>): void;
1110
1205
  }
1111
1206
 
1112
- export { type V1Classifier as $, type AddNodeSpec as A, type Bivariant as B, type ClipFromPoseFn as C, type DerivePoseFn as D, type SceneBatchOptions as E, type SceneDeclaredFieldSetters as F, type GroupNode as G, type SceneDoc as H, type InheritedPaint as I, type SceneDocValues as J, type SceneEditPass as K, type LayoutFrame as L, type MarkNode as M, type Node as N, type SceneEditPassOptions as O, type PoseComposition as P, type SceneEditSummary as Q, type RectPose as R, type Scene as S, type SerializedDoc as T, type SerializedLayer as U, type SerializedNode as V, type SerializedNodeV1 as W, type SerializedSceneHistory as X, type SkippedKey as Y, type SystemLayerRecord as Z, type UserLayerRecord as _, type SystemLayerSpec as a, asNodeId as a0, composeWorldPose as a1, composesFrames as a2, inheritedPaintIn as a3, inheritedPaintOf as a4, inheritsPaint as a5, nodeKindOf as a6, rebaseLocalPose as a7, specsFromSerialized as a8, withInheritedPaint as a9, type RegisteredOp as b, type SceneRegistry as c, type PoseAdapter as d, type PoseRemoval as e, type PoseWrite as f, type ScenePoseReports as g, type PoseOverrides as h, type SerializedScene as i, type SerializedSceneV1 as j, type SpecsFromSerializedOptions as k, type NodeClip as l, type DerivePathFn as m, type DerivedDep as n, type AddLayerSpec as o, type CopiesFromPoseFn as p, IDENTITY_POSE_COMPOSITION as q, type LayerRecord as r, type LayoutMove as s, type PoseClosure as t, type PoseHold as u, type PoseOverride as v, type PoseWriteOrigin as w, type RemovedNode as x, SCENE_HISTORY_FORM as y, type SceneArrivalHandler as z };
1207
+ export { type SerializedSceneHistory as $, type AddNodeSpec as A, type Bivariant as B, type ClipFromPoseFn as C, type DerivePoseFn as D, type SceneArrivalHandler as E, type SceneBatchOptions as F, type GroupNode as G, type SceneDeclaredFieldSetters as H, type InheritedPaint as I, type SceneDoc as J, type SceneDocValues as K, type LayoutFrame as L, type MarkNode as M, type Node as N, type SceneEditPass as O, type PoseComposition as P, type SceneEditPassOptions as Q, type RectPose as R, type Scene as S, type SceneEditSummary as T, type SceneScroll as U, type ScrollOffsets as V, type ScrollSource as W, type SerializedDoc as X, type SerializedLayer as Y, type SerializedNode as Z, type SerializedNodeV1 as _, type SystemLayerSpec as a, type SerializedSceneV1 as a0, type SerializedSceneV2 as a1, type SkippedKey as a2, type SystemLayerRecord as a3, type UserLayerRecord as a4, type V1Classifier as a5, asNodeId as a6, childFrameAt as a7, composeChildFrame as a8, composeWorldPose as a9, composesFrames as aa, createScrollOffsets as ab, inheritedPaintIn as ac, inheritedPaintOf as ad, inheritsPaint as ae, isSerializedScene as af, nodeKindOf as ag, rebaseLocalPose as ah, scrolledFrames as ai, specsFromSerialized as aj, viewPoseAdapter as ak, withInheritedPaint as al, type RegisteredOp as b, type SceneRegistry as c, type ScrollOffset as d, type PoseAdapter as e, type PoseRemoval as f, type PoseWrite as g, type ScenePoseReports as h, type PoseOverrides as i, type SerializedScene as j, type SavedScene as k, type SpecsFromSerializedOptions as l, type NodeClip as m, type DerivePathFn as n, type DerivedDep as o, type AddLayerSpec as p, type CopiesFromPoseFn as q, IDENTITY_POSE_COMPOSITION as r, type LayerRecord as s, type LayoutMove as t, type PoseClosure as u, type PoseHold as v, type PoseOverride as w, type PoseWriteOrigin as x, type RemovedNode as y, SCENE_HISTORY_FORM as z };
@@ -1,8 +1,9 @@
1
- import { L as LayoutStrategy, P as ParallaxOpts } from './types-49uYJN3j.js';
1
+ import { L as LayoutStrategy, P as ParallaxOpts } from './types-A_sNJYRd.js';
2
2
  import { Op } from '@weasel-js/history';
3
3
  import { View } from '@weasel-js/geom';
4
- import { P as PoseDescriptor } from './poseDescriptor-DN2yfnq_.js';
4
+ import { P as PoseDescriptor } from './poseDescriptor-CvSxVhCd.js';
5
5
  import { Target } from '@weasel-js/animator';
6
+ import { WorldPoint } from '@weasel-js/routing';
6
7
 
7
8
  /**
8
9
  * Opaque clipboard payload: the kit never inspects entries. The adapter both
@@ -29,10 +30,7 @@ interface PasteOmission {
29
30
  }
30
31
  /** What `commitPaste` is told beyond the snapshot and the offset. */
31
32
  interface PasteCtx {
32
- dropPoint?: {
33
- worldX: number;
34
- worldY: number;
35
- };
33
+ dropPoint?: WorldPoint;
36
34
  /** Called once per copied node the paste leaves out. */
37
35
  onOmit?: (omission: PasteOmission) => void;
38
36
  }
@@ -1,28 +1,23 @@
1
+ import { tryNormalizeHex } from "@weasel-js/paint";
2
+
1
3
  //#region src/util/color.ts
2
4
  /** Color hex8 helpers. All stored colors are `#rrggbbaa`. `<input type="color">`
3
5
  * only round-trips the 6-char form, so call-sites pad the saved alpha back on
4
6
  * when the user picks via the native widget. */
5
7
  /** Expand `#rgb` / `#rgba` / `#rrggbb` to `#rrggbbaa`. Pads `ff` when no alpha
6
- * channel is present. Non-hex inputs (named colors, `rgba(...)`) are
7
- * returned unchanged — the kit's renderer accepts arbitrary CSS, and
8
- * we only normalize the hex shapes we actually persist. */
8
+ * channel is present. Anything else — named colors, `rgba(...)`, a malformed
9
+ * `#` value — is returned unchanged: the kit's renderer accepts arbitrary CSS,
10
+ * and we only normalize the hex shapes we actually persist. */
9
11
  function toHex8(color) {
10
12
  if (!color.startsWith("#")) return color;
11
- const hex = color.slice(1);
12
- if (hex.length === 3 || hex.length === 4) {
13
- const [r, g, b, a = "f"] = hex.toLowerCase();
14
- return `#${r}${r}${g}${g}${b}${b}${a}${a}`;
15
- }
16
- if (hex.length === 6) return `#${hex}ff`;
17
- if (hex.length === 8) return color.toLowerCase();
18
- return color;
13
+ return tryNormalizeHex(color, "rgba") ?? color;
19
14
  }
20
15
  /** Return the alpha channel of `color` as 0..1. Defaults to 1 when the
21
16
  * color is not in 8-char hex form. */
22
17
  function getAlpha01(color) {
23
18
  if (!color.startsWith("#") || color.length !== 9) return 1;
24
- const a = parseInt(color.slice(7, 9), 16);
25
- return Number.isFinite(a) ? a / 255 : 1;
19
+ const hex = tryNormalizeHex(color);
20
+ return hex ? Number.parseInt(hex.slice(7), 16) / 255 : 1;
26
21
  }
27
22
  /** Replace the alpha channel of `color` with `alpha01` (clamped to 0..1).
28
23
  * Expands shorter hex forms first. Pass-through for non-hex inputs. */
@@ -38,7 +33,10 @@ function withAlpha01(color, alpha01) {
38
33
  * `prev` is adopted, which handles the common case where `<input type="color">`
39
34
  * strips the alpha channel and returns a bare 6-char hex. */
40
35
  function mergeAlphaFromPrev(picked, prev) {
41
- if (picked.length === 9 && picked.startsWith("#")) return picked.toLowerCase();
36
+ if (picked.length === 9 && picked.startsWith("#")) {
37
+ const hex = tryNormalizeHex(picked);
38
+ if (hex) return hex;
39
+ }
42
40
  return withAlpha01(picked, getAlpha01(prev));
43
41
  }
44
42
 
@@ -1 +1 @@
1
- {"version":3,"file":"color.js","names":[],"sources":["../../src/util/color.ts"],"sourcesContent":["/** Color hex8 helpers. All stored colors are `#rrggbbaa`. `<input type=\"color\">`\n * only round-trips the 6-char form, so call-sites pad the saved alpha back on\n * when the user picks via the native widget. */\n\n/** Expand `#rgb` / `#rgba` / `#rrggbb` to `#rrggbbaa`. Pads `ff` when no alpha\n * channel is present. Non-hex inputs (named colors, `rgba(...)`) are\n * returned unchanged — the kit's renderer accepts arbitrary CSS, and\n * we only normalize the hex shapes we actually persist. */\nexport function toHex8(color: string): string {\n if (!color.startsWith('#')) return color;\n const hex = color.slice(1);\n if (hex.length === 3 || hex.length === 4) {\n const [r, g, b, a = 'f'] = hex.toLowerCase();\n return `#${r}${r}${g}${g}${b}${b}${a}${a}`;\n }\n if (hex.length === 6) return `#${hex}ff`;\n if (hex.length === 8) return color.toLowerCase();\n return color;\n}\n\n/** Return the alpha channel of `color` as 0..1. Defaults to 1 when the\n * color is not in 8-char hex form. */\nexport function getAlpha01(color: string): number {\n if (!color.startsWith('#') || color.length !== 9) return 1;\n const a = parseInt(color.slice(7, 9), 16);\n return Number.isFinite(a) ? a / 255 : 1;\n}\n\n/** Replace the alpha channel of `color` with `alpha01` (clamped to 0..1).\n * Expands shorter hex forms first. Pass-through for non-hex inputs. */\nexport function withAlpha01(color: string, alpha01: number): string {\n const a = Math.max(0, Math.min(1, alpha01));\n const aa = Math.round(a * 255).toString(16).padStart(2, '0');\n const eight = toHex8(color);\n if (!eight.startsWith('#') || eight.length !== 9) return color;\n return `${eight.slice(0, 7)}${aa}`;\n}\n\n/** Merge a freshly-picked color with the previous color's alpha channel.\n * If `picked` is already in 8-char hex form (`#rrggbbaa`, length 9), it is\n * used as-is — its explicit alpha is preserved. Otherwise the alpha from\n * `prev` is adopted, which handles the common case where `<input type=\"color\">`\n * strips the alpha channel and returns a bare 6-char hex. */\nexport function mergeAlphaFromPrev(picked: string, prev: string): string {\n if (picked.length === 9 && picked.startsWith('#')) return picked.toLowerCase();\n return withAlpha01(picked, getAlpha01(prev));\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,OAAO,OAAuB;CAC5C,IAAI,CAAC,MAAM,WAAW,GAAG,GAAG,OAAO;CACnC,MAAM,MAAM,MAAM,MAAM,CAAC;CACzB,IAAI,IAAI,WAAW,KAAK,IAAI,WAAW,GAAG;EACxC,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,OAAO,IAAI,YAAY;EAC3C,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;CACzC;CACA,IAAI,IAAI,WAAW,GAAG,OAAO,IAAI,IAAI;CACrC,IAAI,IAAI,WAAW,GAAG,OAAO,MAAM,YAAY;CAC/C,OAAO;AACT;;;AAIA,SAAgB,WAAW,OAAuB;CAChD,IAAI,CAAC,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,GAAG,OAAO;CACzD,MAAM,IAAI,SAAS,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;CACxC,OAAO,OAAO,SAAS,CAAC,IAAI,IAAI,MAAM;AACxC;;;AAIA,SAAgB,YAAY,OAAe,SAAyB;CAElE,MAAM,KAAK,KAAK,MADN,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,OAAO,CACnB,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG;CAC3D,MAAM,QAAQ,OAAO,KAAK;CAC1B,IAAI,CAAC,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,GAAG,OAAO;CACzD,OAAO,GAAG,MAAM,MAAM,GAAG,CAAC,IAAI;AAChC;;;;;;AAOA,SAAgB,mBAAmB,QAAgB,MAAsB;CACvE,IAAI,OAAO,WAAW,KAAK,OAAO,WAAW,GAAG,GAAG,OAAO,OAAO,YAAY;CAC7E,OAAO,YAAY,QAAQ,WAAW,IAAI,CAAC;AAC7C"}
1
+ {"version":3,"file":"color.js","names":[],"sources":["../../src/util/color.ts"],"sourcesContent":["import { tryNormalizeHex } from '@weasel-js/paint';\n\n/** Color hex8 helpers. All stored colors are `#rrggbbaa`. `<input type=\"color\">`\n * only round-trips the 6-char form, so call-sites pad the saved alpha back on\n * when the user picks via the native widget. */\n\n/** Expand `#rgb` / `#rgba` / `#rrggbb` to `#rrggbbaa`. Pads `ff` when no alpha\n * channel is present. Anything else — named colors, `rgba(...)`, a malformed\n * `#` value — is returned unchanged: the kit's renderer accepts arbitrary CSS,\n * and we only normalize the hex shapes we actually persist. */\nexport function toHex8(color: string): string {\n if (!color.startsWith('#')) return color;\n return tryNormalizeHex(color, 'rgba') ?? color;\n}\n\n/** Return the alpha channel of `color` as 0..1. Defaults to 1 when the\n * color is not in 8-char hex form. */\nexport function getAlpha01(color: string): number {\n if (!color.startsWith('#') || color.length !== 9) return 1;\n const hex = tryNormalizeHex(color);\n return hex ? Number.parseInt(hex.slice(7), 16) / 255 : 1;\n}\n\n/** Replace the alpha channel of `color` with `alpha01` (clamped to 0..1).\n * Expands shorter hex forms first. Pass-through for non-hex inputs. */\nexport function withAlpha01(color: string, alpha01: number): string {\n const a = Math.max(0, Math.min(1, alpha01));\n const aa = Math.round(a * 255).toString(16).padStart(2, '0');\n const eight = toHex8(color);\n if (!eight.startsWith('#') || eight.length !== 9) return color;\n return `${eight.slice(0, 7)}${aa}`;\n}\n\n/** Merge a freshly-picked color with the previous color's alpha channel.\n * If `picked` is already in 8-char hex form (`#rrggbbaa`, length 9), it is\n * used as-is — its explicit alpha is preserved. Otherwise the alpha from\n * `prev` is adopted, which handles the common case where `<input type=\"color\">`\n * strips the alpha channel and returns a bare 6-char hex. */\nexport function mergeAlphaFromPrev(picked: string, prev: string): string {\n if (picked.length === 9 && picked.startsWith('#')) {\n const hex = tryNormalizeHex(picked);\n if (hex) return hex;\n }\n return withAlpha01(picked, getAlpha01(prev));\n}\n"],"mappings":";;;;;;;;;;AAUA,SAAgB,OAAO,OAAuB;CAC5C,IAAI,CAAC,MAAM,WAAW,GAAG,GAAG,OAAO;CACnC,OAAO,gBAAgB,OAAO,MAAM,KAAK;AAC3C;;;AAIA,SAAgB,WAAW,OAAuB;CAChD,IAAI,CAAC,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,GAAG,OAAO;CACzD,MAAM,MAAM,gBAAgB,KAAK;CACjC,OAAO,MAAM,OAAO,SAAS,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,MAAM;AACzD;;;AAIA,SAAgB,YAAY,OAAe,SAAyB;CAElE,MAAM,KAAK,KAAK,MADN,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,OAAO,CACnB,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,GAAG,GAAG;CAC3D,MAAM,QAAQ,OAAO,KAAK;CAC1B,IAAI,CAAC,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,GAAG,OAAO;CACzD,OAAO,GAAG,MAAM,MAAM,GAAG,CAAC,IAAI;AAChC;;;;;;AAOA,SAAgB,mBAAmB,QAAgB,MAAsB;CACvE,IAAI,OAAO,WAAW,KAAK,OAAO,WAAW,GAAG,GAAG;EACjD,MAAM,MAAM,gBAAgB,MAAM;EAClC,IAAI,KAAK,OAAO;CAClB;CACA,OAAO,YAAY,QAAQ,WAAW,IAAI,CAAC;AAC7C"}
package/dist/version.js CHANGED
@@ -7,7 +7,7 @@
7
7
  * throwing, since nothing about version reporting should be able to break a
8
8
  * consumer's build.
9
9
  */
10
- var VERSION = "1.13.0";
10
+ var VERSION = "1.14.1";
11
11
 
12
12
  //#endregion
13
13
  export { VERSION };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weasel-js/core",
3
- "version": "1.13.0",
3
+ "version": "1.14.1",
4
4
  "description": "A 2D scene-graph engine for React, rendered on WebGL2: the scene tree, viewport math, pointer and keyboard input, layered rendering, and op-based undo.",
5
5
  "weasel": {
6
6
  "needs": ["webgl2"]
@@ -110,30 +110,31 @@
110
110
  "typecheck": "tsc --noEmit -p tsconfig.json"
111
111
  },
112
112
  "peerDependencies": {
113
- "@weasel-js/font": "1.13.0",
113
+ "@weasel-js/font": "1.14.1",
114
114
  "react": ">=18"
115
115
  },
116
116
  "dependencies": {
117
117
  "@msb235/blits": "0.12.0",
118
- "@weasel-js/animator": "1.13.0",
119
- "@weasel-js/cursor": "1.13.0",
120
- "@weasel-js/geom": "1.13.0",
121
- "@weasel-js/gestures": "1.13.0",
122
- "@weasel-js/history": "1.13.0",
123
- "@weasel-js/icons": "1.13.0",
124
- "@weasel-js/modes": "1.13.0",
125
- "@weasel-js/paint": "1.13.0",
126
- "@weasel-js/prefs": "1.13.0",
127
- "@weasel-js/quantity": "1.13.0",
128
- "@weasel-js/react": "1.13.0",
129
- "@weasel-js/registry": "1.13.0",
130
- "@weasel-js/renderer": "1.13.0",
131
- "@weasel-js/routing": "1.13.0",
132
- "@weasel-js/select": "1.13.0",
133
- "@weasel-js/simulation": "1.13.0",
134
- "@weasel-js/stroke": "1.13.0",
135
- "@weasel-js/text": "1.13.0",
136
- "@weasel-js/text-dom": "1.13.0",
118
+ "@weasel-js/animator": "1.14.1",
119
+ "@weasel-js/cursor": "1.14.1",
120
+ "@weasel-js/geom": "1.14.1",
121
+ "@weasel-js/gestures": "1.14.1",
122
+ "@weasel-js/headless": "1.14.1",
123
+ "@weasel-js/history": "1.14.1",
124
+ "@weasel-js/icons": "1.14.1",
125
+ "@weasel-js/modes": "1.14.1",
126
+ "@weasel-js/paint": "1.14.1",
127
+ "@weasel-js/prefs": "1.14.1",
128
+ "@weasel-js/quantity": "1.14.1",
129
+ "@weasel-js/react": "1.14.1",
130
+ "@weasel-js/registry": "1.14.1",
131
+ "@weasel-js/renderer": "1.14.1",
132
+ "@weasel-js/routing": "1.14.1",
133
+ "@weasel-js/select": "1.14.1",
134
+ "@weasel-js/simulation": "1.14.1",
135
+ "@weasel-js/stroke": "1.14.1",
136
+ "@weasel-js/text": "1.14.1",
137
+ "@weasel-js/text-dom": "1.14.1",
137
138
  "earcut": "3.2.3",
138
139
  "polygon-clipping": "^0.15.7"
139
140
  },
@@ -151,8 +152,8 @@
151
152
  "2d"
152
153
  ],
153
154
  "devDependencies": {
154
- "@weasel-js/icons-plugin": "1.13.0",
155
- "@weasel-js/modes": "1.13.0",
156
- "@weasel-js/theme": "1.13.0"
155
+ "@weasel-js/icons-plugin": "1.14.1",
156
+ "@weasel-js/modes": "1.14.1",
157
+ "@weasel-js/theme": "1.14.1"
157
158
  }
158
159
  }
@@ -1,65 +0,0 @@
1
- import { poseDescriptorForNode, translatePoseViaDescriptor } from "../core/geometry/poseDescriptor.js";
2
-
3
- //#region src/canvas/poseCascade.ts
4
- /** Every node under `id`, each after its parent. */
5
- function descendantsOf(scene, id) {
6
- const out = [];
7
- const collect = (root) => {
8
- for (const child of scene.childrenOf(root)) {
9
- out.push(child);
10
- collect(child);
11
- }
12
- };
13
- collect(id);
14
- return out;
15
- }
16
- /**
17
- * How container `id`'s pose target carries its descendants where each holds a pose of its own
18
- * in the same space: `write` commits a pose and moves them, and while the container shows
19
- * somewhere else each is shown moved by as much.
20
- */
21
- function containerCascade(scene, id, d, write) {
22
- return {
23
- write,
24
- *beside(pose) {
25
- const node = scene.get(id);
26
- if (!node) return;
27
- const g = poseDescriptorForNode(d, node);
28
- const from = g.getBounds(node.pose);
29
- const to = g.getBounds(pose);
30
- for (const child of descendantsOf(scene, id)) {
31
- const n = scene.get(child);
32
- if (!n) continue;
33
- yield [child, translatePoseViaDescriptor(n.pose, to.x - from.x, to.y - from.y, poseDescriptorForNode(d, n))];
34
- }
35
- }
36
- };
37
- }
38
- /**
39
- * `setPose` for a scene of absolute poses: posing a container moves every
40
- * descendant by as much, in one undo step.
41
- */
42
- function cascadingSetPose(scene, d) {
43
- return (id, pose) => {
44
- const node = scene.get(id);
45
- if (!node || node.kind !== "group") return scene.setPose(id, pose);
46
- const g = poseDescriptorForNode(d, node);
47
- const from = g.getBounds(node.pose);
48
- const to = g.getBounds(pose);
49
- const dx = to.x - from.x;
50
- const dy = to.y - from.y;
51
- if (dx === 0 && dy === 0) return scene.setPose(id, pose);
52
- scene.batch("move container", () => {
53
- scene.setPose(id, pose);
54
- for (const child of descendantsOf(scene, id)) {
55
- const n = scene.get(child);
56
- if (!n) continue;
57
- scene.setPose(child, translatePoseViaDescriptor(n.pose, dx, dy, poseDescriptorForNode(d, n)));
58
- }
59
- });
60
- };
61
- }
62
-
63
- //#endregion
64
- export { cascadingSetPose, containerCascade, descendantsOf };
65
- //# sourceMappingURL=poseCascade.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"poseCascade.js","names":[],"sources":["../../src/canvas/poseCascade.ts"],"sourcesContent":["import { poseDescriptorForNode, translatePoseViaDescriptor, type PoseDescriptor } from 'core/geometry/poseDescriptor';\nimport type { NodeId } from 'core/scene/types';\nimport type { PoseCascade } from '../animation/poseTarget';\n\n/** The part of a scene a container's cascade reads. */\ninterface CascadeScene<TPose> {\n get(id: NodeId): { pose: TPose; kind?: 'mark' | 'group' } | undefined;\n childrenOf(id: NodeId): readonly NodeId[];\n}\n\n/** The part of a scene a cascading `setPose` writes. */\ninterface CascadeTarget<TPose> extends CascadeScene<TPose> {\n setPose(id: NodeId, pose: TPose): void;\n batch<T>(label: string, fn: () => T): T;\n}\n\n/** Every node under `id`, each after its parent. */\nexport function descendantsOf(scene: Pick<CascadeScene<unknown>, 'childrenOf'>, id: NodeId): NodeId[] {\n const out: NodeId[] = [];\n const collect = (root: NodeId): void => {\n for (const child of scene.childrenOf(root)) {\n out.push(child);\n collect(child);\n }\n };\n collect(id);\n return out;\n}\n\n/**\n * How container `id`'s pose target carries its descendants where each holds a pose of its own\n * in the same space: `write` commits a pose and moves them, and while the container shows\n * somewhere else each is shown moved by as much.\n */\nexport function containerCascade<TPose>(\n scene: CascadeScene<TPose>,\n id: NodeId,\n d: PoseDescriptor<TPose>,\n write: (pose: TPose) => void,\n): PoseCascade<TPose> {\n return {\n write,\n *beside(pose) {\n const node = scene.get(id);\n if (!node) return;\n const g = poseDescriptorForNode(d, node);\n const from = g.getBounds(node.pose);\n const to = g.getBounds(pose);\n for (const child of descendantsOf(scene, id)) {\n const n = scene.get(child);\n if (!n) continue;\n yield [child, translatePoseViaDescriptor(n.pose, to.x - from.x, to.y - from.y, poseDescriptorForNode(d, n))];\n }\n },\n };\n}\n\n/**\n * `setPose` for a scene of absolute poses: posing a container moves every\n * descendant by as much, in one undo step.\n */\nexport function cascadingSetPose<TPose>(\n scene: CascadeTarget<TPose>,\n d: PoseDescriptor<TPose>,\n): (id: NodeId, pose: TPose) => void {\n return (id, pose) => {\n const node = scene.get(id);\n if (!node || node.kind !== 'group') return scene.setPose(id, pose);\n const g = poseDescriptorForNode(d, node);\n const from = g.getBounds(node.pose);\n const to = g.getBounds(pose);\n const dx = to.x - from.x;\n const dy = to.y - from.y;\n if (dx === 0 && dy === 0) return scene.setPose(id, pose);\n scene.batch('move container', () => {\n scene.setPose(id, pose);\n for (const child of descendantsOf(scene, id)) {\n const n = scene.get(child);\n if (!n) continue;\n scene.setPose(child, translatePoseViaDescriptor(n.pose, dx, dy, poseDescriptorForNode(d, n)));\n }\n });\n };\n}\n"],"mappings":";;;;AAiBA,SAAgB,cAAc,OAAkD,IAAsB;CACpG,MAAM,MAAgB,CAAC;CACvB,MAAM,WAAW,SAAuB;EACtC,KAAK,MAAM,SAAS,MAAM,WAAW,IAAI,GAAG;GAC1C,IAAI,KAAK,KAAK;GACd,QAAQ,KAAK;EACf;CACF;CACA,QAAQ,EAAE;CACV,OAAO;AACT;;;;;;AAOA,SAAgB,iBACd,OACA,IACA,GACA,OACoB;CACpB,OAAO;EACL;EACA,CAAC,OAAO,MAAM;GACZ,MAAM,OAAO,MAAM,IAAI,EAAE;GACzB,IAAI,CAAC,MAAM;GACX,MAAM,IAAI,sBAAsB,GAAG,IAAI;GACvC,MAAM,OAAO,EAAE,UAAU,KAAK,IAAI;GAClC,MAAM,KAAK,EAAE,UAAU,IAAI;GAC3B,KAAK,MAAM,SAAS,cAAc,OAAO,EAAE,GAAG;IAC5C,MAAM,IAAI,MAAM,IAAI,KAAK;IACzB,IAAI,CAAC,GAAG;IACR,MAAM,CAAC,OAAO,2BAA2B,EAAE,MAAM,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,sBAAsB,GAAG,CAAC,CAAC,CAAC;GAC7G;EACF;CACF;AACF;;;;;AAMA,SAAgB,iBACd,OACA,GACmC;CACnC,QAAQ,IAAI,SAAS;EACnB,MAAM,OAAO,MAAM,IAAI,EAAE;EACzB,IAAI,CAAC,QAAQ,KAAK,SAAS,SAAS,OAAO,MAAM,QAAQ,IAAI,IAAI;EACjE,MAAM,IAAI,sBAAsB,GAAG,IAAI;EACvC,MAAM,OAAO,EAAE,UAAU,KAAK,IAAI;EAClC,MAAM,KAAK,EAAE,UAAU,IAAI;EAC3B,MAAM,KAAK,GAAG,IAAI,KAAK;EACvB,MAAM,KAAK,GAAG,IAAI,KAAK;EACvB,IAAI,OAAO,KAAK,OAAO,GAAG,OAAO,MAAM,QAAQ,IAAI,IAAI;EACvD,MAAM,MAAM,wBAAwB;GAClC,MAAM,QAAQ,IAAI,IAAI;GACtB,KAAK,MAAM,SAAS,cAAc,OAAO,EAAE,GAAG;IAC5C,MAAM,IAAI,MAAM,IAAI,KAAK;IACzB,IAAI,CAAC,GAAG;IACR,MAAM,QAAQ,OAAO,2BAA2B,EAAE,MAAM,IAAI,IAAI,sBAAsB,GAAG,CAAC,CAAC,CAAC;GAC9F;EACF,CAAC;CACH;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"buildChromeCtx.js","names":[],"sources":["../../../src/features/chrome-caps/buildChromeCtx.ts"],"sourcesContent":["/**\n * Pure assembler for {@link ChromeCtx}. Sources are passed as plain values\n * rather than the live objects they come from, which keeps `chrome-caps`\n * from depending on React or the dispatcher's concrete type.\n */\n\nimport type { NodeId } from '../../core/scene/types';\nimport type { ModifierState } from '../../interactions/gestures/types';\nimport type { View } from '../../core/viewport/view';\nimport type { ChromeCtx } from './types';\n\n/** The pieces of live canvas state a `ChromeCtx` is assembled from. */\nexport interface BuildChromeCtxArgs {\n focused: boolean;\n selection: readonly NodeId[];\n multiActive: boolean;\n modifiers: ModifierState;\n action: { kind: string | null; id: string | null };\n hover: NodeId | null;\n view: View;\n}\n\n/** Gather the current canvas state into the context that chrome-visibility\n * rules are evaluated against. Rebuilt per frame. */\nexport function buildChromeCtx(args: BuildChromeCtxArgs): ChromeCtx {\n return {\n focused: args.focused,\n selection: args.selection,\n multiActive: args.multiActive,\n modifiers: args.modifiers,\n action: args.action,\n hover: args.hover,\n view: args.view,\n };\n}\n"],"mappings":";;;AAwBA,SAAgB,eAAe,MAAqC;CAClE,OAAO;EACL,SAAS,KAAK;EACd,WAAW,KAAK;EAChB,aAAa,KAAK;EAClB,WAAW,KAAK;EAChB,QAAQ,KAAK;EACb,OAAO,KAAK;EACZ,MAAM,KAAK;CACb;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"conditions.js","names":[],"sources":["../../../src/features/chrome-caps/conditions.ts"],"sourcesContent":["import type { Condition } from './types';\nimport type { Rule } from '@weasel-js/routing';\nimport type { RuleCtx } from '@weasel-js/routing';\nimport { evaluate, ALWAYS, NEVER } from '@weasel-js/routing';\nimport type { ModifierState } from '../../interactions/gestures/types';\n\n/**\n * Promote a Rule tree to a fluent Condition.\n *\n * **Chain semantics: strict left-to-right.** No boolean precedence.\n * `focused.or(hovering).and(selectionIs(1))` evaluates\n * `((focused || hovering) && selectionIs(1))`. For grouped disjunction, use\n * the top-level `or` / `and` / `not` helpers or name intermediates.\n *\n * Combinators flatten same-kind nesting on construction so `a.and(b).and(c)`\n * produces `{ all: [a, b, c] }`.\n */\nexport function cond(rule: Rule): Condition {\n const fn = (ctx: RuleCtx) => evaluate(rule, ctx);\n const condition = fn as Condition;\n (condition as { rule: Rule }).rule = rule;\n condition.and = (other) => cond(combineAll(rule, asRule(other)));\n condition.or = (other) => cond(combineAny(rule, asRule(other)));\n condition.andNot = (other) => cond(combineAll(rule, { not: asRule(other) }));\n condition.orNot = (other) => cond(combineAny(rule, { not: asRule(other) }));\n return condition;\n}\n\nfunction asRule(value: Condition | Rule): Rule {\n return typeof value === 'function' ? (value as Condition).rule : value;\n}\n\nfunction combineAll(a: Rule, b: Rule): Rule {\n const left = 'all' in a ? a.all : [a];\n const right = 'all' in b ? b.all : [b];\n return { all: [...left, ...right] };\n}\n\nfunction combineAny(a: Rule, b: Rule): Rule {\n const left = 'any' in a ? a.any : [a];\n const right = 'any' in b ? b.any : [b];\n return { any: [...left, ...right] };\n}\n\n/** Inline-lambda escape hatch. Wraps the closure as a `when` rule node. */\nexport function when(fn: (ctx: RuleCtx) => boolean): Condition {\n return cond({ when: fn });\n}\n\n// ─── Variadic helpers (for grouped expressions) ─────────────────────\n\n/** `(a && b && c && ...)` — useful when chain mixing makes left-to-right\n * semantics ambiguous. */\nexport function and(...cs: (Condition | Rule)[]): Condition {\n return cond({ all: cs.map(asRule) });\n}\n\n/** `(a || b || c || ...)` — preferred over `.or` chains when mixed with\n * `.and` to make grouping explicit. */\nexport function or(...cs: (Condition | Rule)[]): Condition {\n return cond({ any: cs.map(asRule) });\n}\n\n/** `!c` — top-level negation. Most rules use `.andNot()` / `.orNot()`\n * instead; this is for the lead-with-negation case. */\nexport function not(c: Condition | Rule): Condition {\n return cond({ not: asRule(c) });\n}\n\n// ─── Constant atoms ─────────────────────────────────────────────────\n\n/** Always true. The fallback for any chrome id without a registered rule. */\nexport const always: Condition = cond(ALWAYS);\n\n/** Always false. Useful for \"turn this chrome off entirely\":\n * `chromeVisibility={{ 'snap.guides': never }}`. */\nexport const never: Condition = cond(NEVER);\n\n// ─── Focus / action atoms ───────────────────────────────────────────\n\n/** Canvas surface currently focused. */\nexport const focused: Condition = cond({ focused: true });\n\n/** Any action currently in flight (read: user is gesturing). */\nexport const gesturing: Condition = cond({ gesturing: true });\n\n/** A path is currently in anchor-edit mode. */\nexport const editingAnchors: Condition = cond({ editingAnchors: true });\n\n/** Current selection is resizable (every selected node passes the consumer's\n * `selectTool.resize.resizable` predicate). Absent predicate → resizable. */\nexport const resizable: Condition = cond({ resizable: true });\n\n/** Active action's kind matches `kind` (e.g. `actionIs('move')`). */\nexport const actionIs = (kind: string): Condition => cond({ actionIs: kind });\n\n// ─── Selection atoms ────────────────────────────────────────────────\n\n/** Nothing selected. */\nexport const selectionEmpty: Condition = cond({ selection: { empty: true } });\n\n/** Exactly `n` items selected. */\nexport const selectionIs = (n: number): Condition => cond({ selection: { is: n } });\n\n/** At least `n` items selected. `selectionAtLeast(1)` is the common\n * \"something is selected\" check. */\nexport const selectionAtLeast = (n: number): Condition => cond({ selection: { atLeast: n } });\n\n/** Multi-mode handle behavior active (single shared union-bounds\n * handle vs per-item handles). */\nexport const multiActive: Condition = cond({ when: (c) => c.multiActive });\n\n// ─── Hover atoms ────────────────────────────────────────────────────\n\n/** Pointer is hovering some node. */\nexport const hovering: Condition = cond({ hovering: true });\n\n/** Pointer is hovering a node that is currently selected. */\nexport const hoveringSelected: Condition = cond({ hoveringSelected: true });\n\n// ─── Modifier atoms ─────────────────────────────────────────────────\n\n/** Named modifier key currently held. */\nexport const modifierHeld = (m: keyof ModifierState): Condition => cond({ modifierHeld: m });\n\n// ─── View atoms ─────────────────────────────────────────────────────\n\n/** View scale (uniform or geometric mean for non-uniform) is at least\n * `z`. Useful for \"hide hairline chrome at low zoom\" rules. */\nexport const zoomAtLeast = (z: number): Condition => cond({ zoomAtLeast: z });\n\n// ─── Mode + capability atoms ───────────────────────────────────────\n\n/** Active mode equals `m`. */\nexport const modeIs = (m: string): Condition => cond({ mode: m });\n\n/** Active mode is one of `modes`. */\nexport const modeIn = (modes: readonly string[]): Condition => cond({ mode: { in: modes } });\n\n/** Active mode is NOT `m`. */\nexport const modeNot = (m: string): Condition => cond({ mode: { not: m } });\n\n/** Active mode's `allows` includes capability `cap`. */\nexport const capabilityIs = (cap: string): Condition => cond({ capability: cap });\n\n/** Active mode's `allows` includes ANY of `caps` (OR). */\nexport const capabilityIn = (caps: readonly string[]): Condition => cond({ capability: { in: caps } });\n\n/** Active mode's `allows` includes ALL of `caps` (AND). */\nexport const capabilityAll = (caps: readonly string[]): Condition => cond({ capability: [...caps] });\n\n/** Active mode's `allows` does NOT include capability `cap`. */\nexport const capabilityNot = (cap: string): Condition => cond({ capability: { not: cap } });\n\n// ─── Device atoms ───────────────────────────────────────────────────\n\n/** Primary pointer is imprecise (touch, most styluses). Absent device\n * profile → false. */\nexport const coarsePointer: Condition = cond({ coarsePointer: true });\n\n/** Primary pointer can hover. Absent device profile → true. */\nexport const canHover: Condition = cond({ canHover: true });\n"],"mappings":";;;;;;;;;;;;;;AAiBA,SAAgB,KAAK,MAAuB;CAC1C,MAAM,MAAM,QAAiB,SAAS,MAAM,GAAG;CAC/C,MAAM,YAAY;CAClB,UAA8B,OAAO;CACrC,UAAU,OAAU,UAAU,KAAK,WAAW,MAAM,OAAO,KAAK,CAAC,CAAC;CAClE,UAAU,MAAU,UAAU,KAAK,WAAW,MAAM,OAAO,KAAK,CAAC,CAAC;CAClE,UAAU,UAAU,UAAU,KAAK,WAAW,MAAM,EAAE,KAAK,OAAO,KAAK,EAAE,CAAC,CAAC;CAC3E,UAAU,SAAU,UAAU,KAAK,WAAW,MAAM,EAAE,KAAK,OAAO,KAAK,EAAE,CAAC,CAAC;CAC3E,OAAO;AACT;AAEA,SAAS,OAAO,OAA+B;CAC7C,OAAO,OAAO,UAAU,aAAc,MAAoB,OAAO;AACnE;AAEA,SAAS,WAAW,GAAS,GAAe;CAC1C,MAAM,OAAO,SAAS,IAAI,EAAE,MAAM,CAAC,CAAC;CACpC,MAAM,QAAQ,SAAS,IAAI,EAAE,MAAM,CAAC,CAAC;CACrC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,EAAE;AACpC;AAEA,SAAS,WAAW,GAAS,GAAe;CAC1C,MAAM,OAAO,SAAS,IAAI,EAAE,MAAM,CAAC,CAAC;CACpC,MAAM,QAAQ,SAAS,IAAI,EAAE,MAAM,CAAC,CAAC;CACrC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,GAAG,KAAK,EAAE;AACpC;;AAGA,SAAgB,KAAK,IAA0C;CAC7D,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC;AAC1B;;;AAMA,SAAgB,IAAI,GAAG,IAAqC;CAC1D,OAAO,KAAK,EAAE,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;AACrC;;;AAIA,SAAgB,GAAG,GAAG,IAAqC;CACzD,OAAO,KAAK,EAAE,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;AACrC;;;AAIA,SAAgB,IAAI,GAAgC;CAClD,OAAO,KAAK,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;AAChC;;AAKA,IAAa,SAAoB,KAAK,MAAM;;;AAI5C,IAAa,QAAmB,KAAK,KAAK;;AAK1C,IAAa,UAAqB,KAAK,EAAE,SAAS,KAAK,CAAC;;AAGxD,IAAa,YAAuB,KAAK,EAAE,WAAW,KAAK,CAAC;;AAG5D,IAAa,iBAA4B,KAAK,EAAE,gBAAgB,KAAK,CAAC;;;AAItE,IAAa,YAAuB,KAAK,EAAE,WAAW,KAAK,CAAC;;AAG5D,IAAa,YAAY,SAA4B,KAAK,EAAE,UAAU,KAAK,CAAC;;AAK5E,IAAa,iBAA4B,KAAK,EAAE,WAAW,EAAE,OAAO,KAAK,EAAE,CAAC;;AAG5E,IAAa,eAAe,MAAyB,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;;;AAIlF,IAAa,oBAAoB,MAAyB,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC;;;AAI5F,IAAa,cAAyB,KAAK,EAAE,OAAO,MAAM,EAAE,YAAY,CAAC;;AAKzE,IAAa,WAAsB,KAAK,EAAE,UAAU,KAAK,CAAC;;AAG1D,IAAa,mBAA8B,KAAK,EAAE,kBAAkB,KAAK,CAAC;;AAK1E,IAAa,gBAAgB,MAAsC,KAAK,EAAE,cAAc,EAAE,CAAC;;;AAM3F,IAAa,eAAe,MAAyB,KAAK,EAAE,aAAa,EAAE,CAAC;;AAK5E,IAAa,UAAU,MAAyB,KAAK,EAAE,MAAM,EAAE,CAAC;;AAGhE,IAAa,UAAU,UAAwC,KAAK,EAAE,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;;AAG3F,IAAa,WAAW,MAAyB,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;;AAG1E,IAAa,gBAAgB,QAA2B,KAAK,EAAE,YAAY,IAAI,CAAC;;AAGhF,IAAa,gBAAgB,SAAuC,KAAK,EAAE,YAAY,EAAE,IAAI,KAAK,EAAE,CAAC;;AAGrG,IAAa,iBAAiB,SAAuC,KAAK,EAAE,YAAY,CAAC,GAAG,IAAI,EAAE,CAAC;;AAGnG,IAAa,iBAAiB,QAA2B,KAAK,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;;;AAM1F,IAAa,gBAA2B,KAAK,EAAE,eAAe,KAAK,CAAC;;AAGpE,IAAa,WAAsB,KAAK,EAAE,UAAU,KAAK,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"defaults.js","names":[],"sources":["../../../src/features/chrome-caps/defaults.ts"],"sourcesContent":["import type { VisibilityRules } from './types';\nimport type { Rule } from '@weasel-js/routing';\n\n/**\n * Kit-shipped defaults. Merged with the consumer's `chromeVisibility` map\n * at resolve time; consumer entries take precedence per id.\n *\n * Gating is written in terms of **capabilities, not mode ids**. A\n * capability rule keeps holding when a new mode is added that permits the\n * same thing; a mode rule has to be found and edited every time.\n */\nexport const defaultVisibilityRules: VisibilityRules = {\n // Off whenever an anchor-editing overlay has taken over the visuals.\n 'selection.outline': {\n all: [\n { selection: { atLeast: 1 } },\n { capability: { not: 'edits-anchors' } },\n ],\n } as Rule,\n\n // Handles hide during an action so the moving / resizing object isn't\n // visually crowded; they reappear on commit.\n 'selection.resize-handles': {\n all: [\n { selection: { atLeast: 1 } },\n { not: { gesturing: true } },\n { capability: 'transforms-selection' },\n { resizable: true },\n ],\n } as Rule,\n\n 'selection.rotation-handle': {\n all: [\n { selection: { atLeast: 1 } },\n { focused: true },\n { not: { gesturing: true } },\n { capability: 'transforms-selection' },\n ],\n } as Rule,\n\n // Transient action chrome — only shown during the matching action.\n 'action.marquee': { actionIs: 'marquee' } as Rule,\n 'action.lasso': { actionIs: 'lasso' } as Rule,\n 'action.move-ghosts': { actionIs: 'move' } as Rule,\n\n // Path-edit chrome — gated on there actually being an edited path, not on\n // `{ mode: 'path-edit' }`: consumers with no mode registry report mode\n // `'normal'`, and one defining its own anchor-editing mode uses another id.\n // A state selector rather than a `capability:` one on purpose: the\n // capability says the user *may* edit anchors, which is not the same as\n // a path *being* edited.\n 'path-edit.anchors': { editingAnchors: true } as Rule,\n 'path-edit.overlay': { editingAnchors: true } as Rule,\n\n // Snap system — guides during any action; targets consumer-driven for now.\n 'snap.guides': { gesturing: true } as Rule,\n // 'snap.targets' — no default; consumer-driven for now.\n\n // 'grid' / 'debug.*' — no default; visibility is driven by dedicated\n // boolean props on <SceneCanvas>.\n};\n"],"mappings":";;;;;;;;;AAWA,IAAa,yBAA0C;CAErD,qBAAqB,EACnB,KAAK,CACH,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,GAC5B,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,CACzC,EACF;CAIA,4BAA4B,EAC1B,KAAK;EACH,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;EAC5B,EAAE,KAAK,EAAE,WAAW,KAAK,EAAE;EAC3B,EAAE,YAAY,uBAAuB;EACrC,EAAE,WAAW,KAAK;CACpB,EACF;CAEA,6BAA6B,EAC3B,KAAK;EACH,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;EAC5B,EAAE,SAAS,KAAK;EAChB,EAAE,KAAK,EAAE,WAAW,KAAK,EAAE;EAC3B,EAAE,YAAY,uBAAuB;CACvC,EACF;CAGA,kBAAsB,EAAE,UAAU,UAAU;CAC5C,gBAAsB,EAAE,UAAU,QAAQ;CAC1C,sBAAsB,EAAE,UAAU,OAAO;CAQzC,qBAAqB,EAAE,gBAAgB,KAAK;CAC5C,qBAAqB,EAAE,gBAAgB,KAAK;CAG5C,eAAe,EAAE,WAAW,KAAK;AAKnC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.js","names":[],"sources":["../../../src/features/chrome-caps/resolve.ts"],"sourcesContent":["import type { ChromeCtx, ChromeId, VisibilityRules } from './types';\nimport type { RuleCtx } from '@weasel-js/routing';\nimport { DEFAULT_ALLOWED_CAPABILITIES } from '@weasel-js/routing';\nimport { evaluate } from '@weasel-js/routing';\nimport { defaultVisibilityRules } from './defaults';\nimport { viewZoom } from 'core/viewport/view';\n\n/**\n * Build the per-frame visibility check: consumer rules merged on top of\n * the kit defaults, evaluated against `ctx`.\n *\n * `ChromeCtx` is the legacy shape; surfaces still on it get `mode='normal'`\n * and `DEFAULT_ALLOWED_CAPABILITIES` filled in here, so a caller that never\n * opted into modality behaves exactly like one sitting in normal mode.\n */\nexport function resolveVisibility(\n consumer: VisibilityRules | undefined,\n ctx: ChromeCtx | RuleCtx,\n): (id: ChromeId) => boolean {\n const merged: VisibilityRules = consumer\n ? { ...defaultVisibilityRules, ...consumer }\n : defaultVisibilityRules;\n const ruleCtx: RuleCtx = 'mode' in ctx\n ? ctx\n : {\n ...ctx,\n zoom: viewZoom(ctx.view),\n mode: 'normal',\n allowedCapabilities: DEFAULT_ALLOWED_CAPABILITIES,\n };\n return (id) => {\n const entry = merged[id];\n if (entry === undefined) return true;\n if (typeof entry === 'function') return entry(ruleCtx);\n return evaluate(entry, ruleCtx);\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAeA,SAAgB,kBACd,UACA,KAC2B;CAC3B,MAAM,SAA0B,WAC5B;EAAE,GAAG;EAAwB,GAAG;CAAS,IACzC;CACJ,MAAM,UAAmB,UAAU,MAC/B,MACA;EACA,GAAG;EACH,MAAM,SAAS,IAAI,IAAI;EACvB,MAAM;EACN,qBAAqB;CACvB;CACF,QAAQ,OAAO;EACb,MAAM,QAAQ,OAAO;EACrB,IAAI,UAAU,QAAW,OAAO;EAChC,IAAI,OAAO,UAAU,YAAY,OAAO,MAAM,OAAO;EACrD,OAAO,SAAS,OAAO,OAAO;CAChC;AACF"}