@weasel-js/core 1.14.2 → 1.15.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 (856) hide show
  1. package/CHANGELOG.md +251 -0
  2. package/dist/WeaselProvider.js +4 -5
  3. package/dist/affordances/composeAffordanceLayer.js +1 -2
  4. package/dist/affordances/cornerResize.js +4 -5
  5. package/dist/affordances/hitAffordanceRegions.js +1 -2
  6. package/dist/affordances/pathAnchors.js +1 -3
  7. package/dist/affordances/pathAnchors.js.map +1 -1
  8. package/dist/affordances/rotateCursor.js +1 -2
  9. package/dist/affordances/rotationHandle.js +2 -3
  10. package/dist/animation/behaviors/coast.js +1 -2
  11. package/dist/animation/behaviors/coastByWrite.js +2 -3
  12. package/dist/animation/behaviors/coastOnTargets.js +2 -3
  13. package/dist/animation/behaviors/momentum.js +1 -2
  14. package/dist/animation/clipTargets.js +1 -2
  15. package/dist/animation/departures.js +2 -3
  16. package/dist/animation/poseHelpers.js +2 -3
  17. package/dist/animation/poseTarget.js +2 -3
  18. package/dist/animation/poseTransition.js +1 -2
  19. package/dist/animation/reflow.js +2 -3
  20. package/dist/animation/rewind.js +1 -2
  21. package/dist/animation/rig/bindRig.js +2 -3
  22. package/dist/animation/rig/rigNode.js +1 -2
  23. package/dist/animation/rig/rigSeat.js +1 -2
  24. package/dist/animation/rig/skinBinding.js +1 -2
  25. package/dist/animation/rig/useRig.js +2 -3
  26. package/dist/animation/wrappers/animateLifecycle.js +1 -2
  27. package/dist/animation/wrappers/animateOnSetPose.js +1 -2
  28. package/dist/animation/wrappers/instantPose.js +1 -2
  29. package/dist/animation/writtenPoseTarget.js +1 -2
  30. package/dist/barrel/interactions.js +2 -1
  31. package/dist/barrel/paths.js +1 -1
  32. package/dist/barrel/renderer.js +2 -2
  33. package/dist/barrel/routing.js +6 -4
  34. package/dist/barrel/scene.js +2 -2
  35. package/dist/barrel/text.js +5 -3
  36. package/dist/canvas/Canvas.js +10 -7
  37. package/dist/canvas/Canvas.js.map +1 -1
  38. package/dist/canvas/CanvasView.js +6 -7
  39. package/dist/canvas/CursorCoordsHud.js +2 -3
  40. package/dist/canvas/DrawCanvas.js +8 -5
  41. package/dist/canvas/DrawCanvas.js.map +1 -1
  42. package/dist/canvas/GestureReason.js +1 -2
  43. package/dist/canvas/GestureReason.module.js +1 -2
  44. package/dist/canvas/LeanSceneCanvas.js +2 -3
  45. package/dist/canvas/ModalityHud.js +2 -3
  46. package/dist/canvas/NodeShape.js +3 -4
  47. package/dist/canvas/PickHud.js +2 -3
  48. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +1 -2
  49. package/dist/canvas/SceneCanvas/CanvasKitProviders.js +3 -4
  50. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +1 -2
  51. package/dist/canvas/SceneCanvas/DevHuds.js +1 -2
  52. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +1 -2
  53. package/dist/canvas/SceneCanvas/SceneCanvasInput.js +8 -5
  54. package/dist/canvas/SceneCanvas/SceneCanvasInput.js.map +1 -1
  55. package/dist/canvas/SceneCanvas/SurfaceDeclarations.js +1 -2
  56. package/dist/canvas/SceneCanvas/brushOverlay.js +1 -2
  57. package/dist/canvas/SceneCanvas/builtinToolSets.js +7 -5
  58. package/dist/canvas/SceneCanvas/builtinToolSets.js.map +1 -1
  59. package/dist/canvas/SceneCanvas/canvasPassThrough.js +1 -2
  60. package/dist/canvas/SceneCanvas/contributionFrameHooks.js +1 -2
  61. package/dist/canvas/SceneCanvas/coordTrace.js +1 -2
  62. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +4 -5
  63. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -2
  64. package/dist/canvas/SceneCanvas/defaultTextEditor.js +4 -5
  65. package/dist/canvas/SceneCanvas/describePresets.js +1 -2
  66. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +1 -2
  67. package/dist/canvas/SceneCanvas/features.js +1 -2
  68. package/dist/canvas/SceneCanvas/insertPreviewCommands.js +1 -2
  69. package/dist/canvas/SceneCanvas/mergeLayers.js +1 -2
  70. package/dist/canvas/SceneCanvas/namedPresets.js +5 -6
  71. package/dist/canvas/SceneCanvas/poseGeometry.js +1 -2
  72. package/dist/canvas/SceneCanvas/poseRegistrars.js +1 -2
  73. package/dist/canvas/SceneCanvas/presets/arrange.js +2 -3
  74. package/dist/canvas/SceneCanvas/presets/baseline.js +1 -2
  75. package/dist/canvas/SceneCanvas/presets/chrome.js +1 -2
  76. package/dist/canvas/SceneCanvas/presets/composites.js +1 -2
  77. package/dist/canvas/SceneCanvas/presets/edit.js +4 -5
  78. package/dist/canvas/SceneCanvas/presets/ingest.js +1 -2
  79. package/dist/canvas/SceneCanvas/presets/paths.js +9 -10
  80. package/dist/canvas/SceneCanvas/presets/paths.js.map +1 -1
  81. package/dist/canvas/SceneCanvas/presets/select.js +1 -2
  82. package/dist/canvas/SceneCanvas/presets/toolDriven.js +2 -3
  83. package/dist/canvas/SceneCanvas/presets/tools.js +1 -2
  84. package/dist/canvas/SceneCanvas/presets/transform.js +2 -3
  85. package/dist/canvas/SceneCanvas/presets/view.js +2 -3
  86. package/dist/canvas/SceneCanvas/props.js +1 -2
  87. package/dist/canvas/SceneCanvas/scenePointQuery.js +2 -3
  88. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +2 -3
  89. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -1
  90. package/dist/canvas/SceneCanvas/toolRegistry.js +2 -3
  91. package/dist/canvas/SceneCanvas/useActionTunings.js +1 -2
  92. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +1 -2
  93. package/dist/canvas/SceneCanvas/useBakedScene.js +2 -3
  94. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +7 -8
  95. package/dist/canvas/SceneCanvas/useBuiltinTools.js +3 -2
  96. package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -1
  97. package/dist/canvas/SceneCanvas/useCanvasCamera.js +2 -3
  98. package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js +1 -2
  99. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +1 -2
  100. package/dist/canvas/SceneCanvas/useCanvasSelection.js +8 -6
  101. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -1
  102. package/dist/canvas/SceneCanvas/useCanvasTools.js +2 -3
  103. package/dist/canvas/SceneCanvas/useChromeAffordances.js +2 -3
  104. package/dist/canvas/SceneCanvas/useContributionRoles.js +3 -2
  105. package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -1
  106. package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js +4 -5
  107. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +2 -3
  108. package/dist/canvas/SceneCanvas/useHeldModifiers.js +1 -2
  109. package/dist/canvas/SceneCanvas/useMagnificationCheck.js +41 -0
  110. package/dist/canvas/SceneCanvas/useMagnificationCheck.js.map +1 -0
  111. package/dist/canvas/SceneCanvas/useNodeAtPoint.js +1 -2
  112. package/dist/canvas/SceneCanvas/useNodeKinds.js +2 -3
  113. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +10 -11
  114. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +1 -2
  115. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +6 -7
  116. package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js +1 -2
  117. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +1 -2
  118. package/dist/canvas/SceneCanvas/useSceneChrome.js +22 -11
  119. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -1
  120. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +6 -7
  121. package/dist/canvas/SceneCanvas/useScenePicking.js +5 -6
  122. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +1 -2
  123. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +7 -8
  124. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +2 -3
  125. package/dist/canvas/SceneCanvas/useSceneStandardActions.js +28 -17
  126. package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -1
  127. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +2 -3
  128. package/dist/canvas/SceneCanvas/useSurfaceRouting.js +1 -2
  129. package/dist/canvas/SceneCanvas/useSurfaceViewInputs.js +1 -2
  130. package/dist/canvas/SceneCanvas/useToolKeybindings.js +1 -2
  131. package/dist/canvas/SceneCanvas/useViewportActions.js +3 -4
  132. package/dist/canvas/SceneCanvas/worldPointAt.js +1 -2
  133. package/dist/canvas/SceneCanvas.js +22 -20
  134. package/dist/canvas/SceneCanvas.js.map +1 -1
  135. package/dist/canvas/SceneViewCanvas.js +7 -4
  136. package/dist/canvas/SceneViewCanvas.js.map +1 -1
  137. package/dist/canvas/SurfaceCanvas.js +1 -2
  138. package/dist/canvas/ViewMarker.js +1 -2
  139. package/dist/canvas/accentColor.js +1 -2
  140. package/dist/canvas/adapterDerivedPath.js +2 -3
  141. package/dist/canvas/adapterPickSource.js +1 -2
  142. package/dist/canvas/affordanceAt.js +2 -4
  143. package/dist/canvas/affordanceAt.js.map +1 -1
  144. package/dist/canvas/buildSceneLayer.js +4 -5
  145. package/dist/canvas/buildSceneTree.js +4 -5
  146. package/dist/canvas/canvasRenderer.js +1 -2
  147. package/dist/canvas/colorOverrides.js +1 -2
  148. package/dist/canvas/contextAttributes.js +1 -2
  149. package/dist/canvas/copiesAbove.js +1 -2
  150. package/dist/canvas/defaultDrawOne.js +1 -2
  151. package/dist/canvas/deps/areaSelect.js +5 -3
  152. package/dist/canvas/deps/areaSelect.js.map +1 -1
  153. package/dist/canvas/deps/booleans.js +5 -6
  154. package/dist/canvas/deps/changes.js +1 -2
  155. package/dist/canvas/deps/chromeRules.js +36 -0
  156. package/dist/canvas/deps/chromeRules.js.map +1 -0
  157. package/dist/canvas/deps/debug.js +1 -2
  158. package/dist/canvas/deps/dispatchSources.js +1 -2
  159. package/dist/canvas/deps/dispatcher.js +1 -2
  160. package/dist/canvas/deps/editAnchors.js +3 -10
  161. package/dist/canvas/deps/editAnchors.js.map +1 -1
  162. package/dist/canvas/deps/enteredGroup.js +1 -2
  163. package/dist/canvas/deps/geometryProjection.js +1 -2
  164. package/dist/canvas/deps/hitTestArea.js +6 -5
  165. package/dist/canvas/deps/hitTestArea.js.map +1 -1
  166. package/dist/canvas/deps/ingestion.js +1 -2
  167. package/dist/canvas/deps/insert.js +3 -4
  168. package/dist/canvas/deps/insertSite.js +3 -4
  169. package/dist/canvas/deps/kitSettings.js +1 -2
  170. package/dist/canvas/deps/lassoSelect.js +5 -3
  171. package/dist/canvas/deps/lassoSelect.js.map +1 -1
  172. package/dist/canvas/deps/layout.js +1 -2
  173. package/dist/canvas/deps/modeDefaultTool.js +22 -0
  174. package/dist/canvas/deps/modeDefaultTool.js.map +1 -0
  175. package/dist/canvas/deps/nodeAtPoint.js +1 -2
  176. package/dist/canvas/deps/pathEditCommits.js +3 -4
  177. package/dist/canvas/deps/pathLeaf.js +1 -2
  178. package/dist/canvas/deps/pathLeafDeps.js +2 -3
  179. package/dist/canvas/deps/poseDescriptor.js +1 -2
  180. package/dist/canvas/deps/previewPaths.js +1 -2
  181. package/dist/canvas/deps/resizePolicy.js +1 -2
  182. package/dist/canvas/deps/selectionSnapshot.js +22 -0
  183. package/dist/canvas/deps/selectionSnapshot.js.map +1 -0
  184. package/dist/canvas/deps/slice.js +5 -6
  185. package/dist/canvas/deps/snap.js +4 -4
  186. package/dist/canvas/deps/snap.js.map +1 -1
  187. package/dist/canvas/deps/surface.js +1 -2
  188. package/dist/canvas/deps/textEdit.js +1 -2
  189. package/dist/canvas/deps/transformFollowers.js +1 -2
  190. package/dist/canvas/deps/view.js +1 -2
  191. package/dist/canvas/derivedPath.js +6 -7
  192. package/dist/canvas/doubleClickTarget.js +1 -2
  193. package/dist/canvas/drawEnvelope.js +1 -2
  194. package/dist/canvas/drawnBounds.js +4 -5
  195. package/dist/canvas/getNodeAtPoint.js +1 -2
  196. package/dist/canvas/hostAnchor.js +1 -2
  197. package/dist/canvas/hud.module.js +1 -2
  198. package/dist/canvas/inheritedPaints.js +1 -2
  199. package/dist/canvas/insertPreviewExtent.js +1 -2
  200. package/dist/canvas/kitRequirements.js +1 -2
  201. package/dist/canvas/layerHover.js +1 -2
  202. package/dist/canvas/layerOrder.js +1 -2
  203. package/dist/canvas/layerSlots.js +1 -2
  204. package/dist/canvas/mountedCanvases.js +1 -2
  205. package/dist/canvas/nodeShapes/derivedPainter.js +2 -3
  206. package/dist/canvas/nodeShapes/imagePainter.js +1 -2
  207. package/dist/canvas/nodeShapes/measurePainter.js +2 -3
  208. package/dist/canvas/nodeShapes/memo.js +1 -2
  209. package/dist/canvas/nodeShapes/nodePaint.js +1 -2
  210. package/dist/canvas/nodeShapes/pathPainter.js +3 -4
  211. package/dist/canvas/nodeShapes/poseBox.js +1 -2
  212. package/dist/canvas/nodeShapes/rectFallbackPainter.js +1 -2
  213. package/dist/canvas/nodeShapes/shapePainter.js +2 -3
  214. package/dist/canvas/nodeShapes/strokedBounds.js +1 -2
  215. package/dist/canvas/nodeShapes/textPainter.js +1 -2
  216. package/dist/canvas/overChildren.js +1 -2
  217. package/dist/canvas/overlayRoleStrokes.js +1 -2
  218. package/dist/canvas/ownClip.js +1 -2
  219. package/dist/canvas/paintCull.js +1 -2
  220. package/dist/canvas/paintedCursorLayer.js +1 -2
  221. package/dist/canvas/pathOverlay.js +1 -2
  222. package/dist/canvas/pickIndex/nodeBroadBox.js +3 -4
  223. package/dist/canvas/pickIndex/scenePickIndex.js +3 -4
  224. package/dist/canvas/pickReach.js +13 -10
  225. package/dist/canvas/pickReach.js.map +1 -1
  226. package/dist/canvas/pickWalk.js +9 -8
  227. package/dist/canvas/pickWalk.js.map +1 -1
  228. package/dist/canvas/planeClips.js +1 -2
  229. package/dist/canvas/poseRotation.js +1 -2
  230. package/dist/canvas/publishPreviews.js +1 -2
  231. package/dist/canvas/rasterReadback.js +1 -2
  232. package/dist/canvas/rasterToPng.js +1 -2
  233. package/dist/canvas/renderDebugSnapshot.js +1 -2
  234. package/dist/canvas/renderNeeds.js +1 -2
  235. package/dist/canvas/renderSceneToPixels.js +5 -6
  236. package/dist/canvas/sceneAdapter.js +37 -27
  237. package/dist/canvas/sceneAdapter.js.map +1 -1
  238. package/dist/canvas/sceneClipboard.js +19 -7
  239. package/dist/canvas/sceneClipboard.js.map +1 -1
  240. package/dist/canvas/sceneLayerPaint.js +1 -2
  241. package/dist/canvas/scenePickReads.js +1 -2
  242. package/dist/canvas/scenePickSource.js +7 -8
  243. package/dist/canvas/scenePickSource.js.map +1 -1
  244. package/dist/canvas/sceneSlotWiring.js +2 -3
  245. package/dist/canvas/sceneViewRender.js +5 -6
  246. package/dist/canvas/shownNodes.js +1 -2
  247. package/dist/canvas/slopsDebugLayer.js +1 -2
  248. package/dist/canvas/surfaceContribution.js +1 -2
  249. package/dist/canvas/useCanvasElements.js +1 -2
  250. package/dist/canvas/useCanvasHandle.js +1 -2
  251. package/dist/canvas/useCanvasPaint.js +2 -3
  252. package/dist/canvas/useCanvasRenderer.js +1 -2
  253. package/dist/canvas/useCanvasSurface.js +22 -5
  254. package/dist/canvas/useCanvasSurface.js.map +1 -1
  255. package/dist/canvas/useCanvasView.js +2 -3
  256. package/dist/canvas/useClientToWorld.js +1 -2
  257. package/dist/canvas/useExtraLayers.js +1 -2
  258. package/dist/canvas/useFrameLoop.js +7 -9
  259. package/dist/canvas/useFrameLoop.js.map +1 -1
  260. package/dist/canvas/useHitObserver.js +1 -2
  261. package/dist/canvas/useHostAnchor.js +1 -2
  262. package/dist/canvas/useInFlightBounds.js +6 -6
  263. package/dist/canvas/useInFlightBounds.js.map +1 -1
  264. package/dist/canvas/useLateContentRedraw.js +1 -2
  265. package/dist/canvas/useLayerStack.js +2 -3
  266. package/dist/canvas/usePaintedCursor.js +1 -2
  267. package/dist/canvas/useRedrawOn.js +1 -2
  268. package/dist/canvas/useSceneAdapter.js +1 -2
  269. package/dist/canvas/useSceneLayerList.js +1 -2
  270. package/dist/canvas/useSurfaceInput.js +1 -2
  271. package/dist/canvas/useSurfaceSize.js +5 -5
  272. package/dist/canvas/useSurfaceSize.js.map +1 -1
  273. package/dist/canvas/useToolCursor.js +1 -2
  274. package/dist/canvas/useViewAim.js +2 -3
  275. package/dist/canvas/useViewHelpers.js +5 -4
  276. package/dist/canvas/useViewHelpers.js.map +1 -1
  277. package/dist/canvas/useViewLayerGate.js +1 -2
  278. package/dist/canvas/useViewNesting.js +1 -2
  279. package/dist/canvas/useViewRegistrySurface.js +1 -2
  280. package/dist/canvas/viewInputs.js +1 -2
  281. package/dist/canvas/viewMarkers.js +1 -2
  282. package/dist/canvas/viewRegistry.js +1 -2
  283. package/dist/canvas/viewSnap.js +1 -2
  284. package/dist/canvas/watchElementMove.js +1 -2
  285. package/dist/canvas/wrapNodeOutput.js +1 -2
  286. package/dist/core/adapters/testing/rootsTree.js +1 -2
  287. package/dist/core/applyOps.js +1 -2
  288. package/dist/core/device/targets.js +1 -2
  289. package/dist/core/device/useDeviceProfile.js +1 -2
  290. package/dist/core/device/useTargetBasePx.js +1 -2
  291. package/dist/core/device/watchDevicePixelRatio.js +1 -2
  292. package/dist/core/geometry/autoPoseDescriptor.js +2 -3
  293. package/dist/core/geometry/booleanOfPaths.js +1 -2
  294. package/dist/core/geometry/inkExtents.js +1 -2
  295. package/dist/core/geometry/pathPoseDescriptor.js +1 -2
  296. package/dist/core/geometry/poseDescriptor.js +1 -2
  297. package/dist/core/geometry/regionHit.js +36 -18
  298. package/dist/core/geometry/regionHit.js.map +1 -1
  299. package/dist/core/geometry/targetFrame.js +1 -2
  300. package/dist/core/geometry/unionBounds.js +1 -2
  301. package/dist/core/layers/backgroundFill.js +1 -2
  302. package/dist/core/layers/children.js +1 -2
  303. package/dist/core/layers/gateLayer.js +1 -2
  304. package/dist/core/layers/layerGroup.js +1 -2
  305. package/dist/core/layers/redrawSource.js +1 -2
  306. package/dist/core/layers/render.js +1 -2
  307. package/dist/core/layers/retain.js +1 -2
  308. package/dist/core/ops/arrange.js +1 -2
  309. package/dist/core/ops/create.js +2 -3
  310. package/dist/core/ops/createHistory.js +2 -3
  311. package/dist/core/ops/delete.js +2 -3
  312. package/dist/core/ops/nodeFlags.js +1 -2
  313. package/dist/core/ops/registry.js +1 -2
  314. package/dist/core/ops/reorder/algorithms.js +1 -2
  315. package/dist/core/ops/reorder/index.js +1 -2
  316. package/dist/core/ops/reorder/setChildOrder.js +1 -2
  317. package/dist/core/ops/reparent.js +1 -2
  318. package/dist/core/ops/select.js +1 -2
  319. package/dist/core/ops/setData.js +1 -2
  320. package/dist/core/ops/setDependsOn.js +1 -2
  321. package/dist/core/ops/setLayer.js +1 -2
  322. package/dist/core/ops/setLayout.js +1 -2
  323. package/dist/core/ops/setPath.js +1 -2
  324. package/dist/core/ops/setText.js +1 -2
  325. package/dist/core/ops/slot.js +1 -2
  326. package/dist/core/ops/transform.js +1 -2
  327. package/dist/core/ops/writtenBy.js +1 -2
  328. package/dist/core/pages/fitViewToPage.js +1 -2
  329. package/dist/core/pages/pageEdits.js +3 -4
  330. package/dist/core/pages/pages.js +1 -2
  331. package/dist/core/pages/pages.js.map +1 -1
  332. package/dist/core/pages/pagesLayer.js +1 -2
  333. package/dist/core/paint/meshKind.js +1 -2
  334. package/dist/core/paint/meshKindLazy.js +9 -18
  335. package/dist/core/paint/meshKindLazy.js.map +1 -1
  336. package/dist/core/paint/paintKindEntry.js +1 -2
  337. package/dist/core/paint/paintKinds.js +1 -2
  338. package/dist/core/paint/registerMesh.js +1 -2
  339. package/dist/core/scene/NodeProperties.js +1 -2
  340. package/dist/core/scene/NodeRouting.js +1 -2
  341. package/dist/core/scene/annotation.js +1 -2
  342. package/dist/core/scene/appliedLog.js +1 -2
  343. package/dist/core/scene/arrivalWindow.js +2 -3
  344. package/dist/core/scene/arrivals.js +1 -2
  345. package/dist/core/scene/booleanGroup.js +1 -2
  346. package/dist/core/scene/booleanOfChildren.js +1 -2
  347. package/dist/core/scene/boundOps.js +1 -2
  348. package/dist/core/scene/carryDescendants.js +2 -3
  349. package/dist/core/scene/clipNothing.js +1 -2
  350. package/dist/core/scene/composeFrame.js +1 -2
  351. package/dist/core/scene/composePose.js +1 -2
  352. package/dist/core/scene/declaredFieldSetters.js +1 -2
  353. package/dist/core/scene/depFrame.js +1 -2
  354. package/dist/core/scene/depMemo.js +1 -2
  355. package/dist/core/scene/dependents.js +1 -2
  356. package/dist/core/scene/derivedParts.js +1 -2
  357. package/dist/core/scene/derivedPath.js +2 -3
  358. package/dist/core/scene/docValues.js +1 -2
  359. package/dist/core/scene/documentOf.js +1 -2
  360. package/dist/core/scene/editMode.js +5 -3
  361. package/dist/core/scene/editMode.js.map +1 -1
  362. package/dist/core/scene/editPass.js +1 -2
  363. package/dist/core/scene/effectivePose.js +3 -4
  364. package/dist/core/scene/fieldEdits.js +1 -2
  365. package/dist/core/scene/fontReads.js +1 -2
  366. package/dist/core/scene/historyFacade.js +8 -52
  367. package/dist/core/scene/historyFacade.js.map +1 -1
  368. package/dist/core/scene/historyForm.js +1 -2
  369. package/dist/core/scene/inheritedPaint.js +1 -2
  370. package/dist/core/scene/kitOps.js +16 -15
  371. package/dist/core/scene/kitOps.js.map +1 -1
  372. package/dist/core/scene/kitRegistry.js +2 -3
  373. package/dist/core/scene/layerOps.js +1 -2
  374. package/dist/core/scene/layerStack.js +1 -2
  375. package/dist/core/scene/layoutPass.js +4 -5
  376. package/dist/core/scene/lockGuard.js +1 -2
  377. package/dist/core/scene/minSize.js +1 -2
  378. package/dist/core/scene/nestedHit.js +1 -2
  379. package/dist/core/scene/nodeAsShown.js +1 -2
  380. package/dist/core/scene/nodeFlags.js +1 -2
  381. package/dist/core/scene/nodeFnFields.js +1 -2
  382. package/dist/core/scene/nodeGates.js +3 -4
  383. package/dist/core/scene/nodeGates.js.map +1 -1
  384. package/dist/core/scene/nodeMemo.js +1 -2
  385. package/dist/core/scene/nodeStore.js +2 -3
  386. package/dist/core/scene/notifier.js +1 -2
  387. package/dist/core/scene/opTable.js +9 -10
  388. package/dist/core/scene/opTable.js.map +1 -1
  389. package/dist/core/scene/outerOps.js +3 -4
  390. package/dist/core/scene/outerOps.js.map +1 -1
  391. package/dist/core/scene/pathEffects/blend.js +1 -2
  392. package/dist/core/scene/pathEffects/derive.js +2 -3
  393. package/dist/core/scene/pathEffects/effects.js +1 -2
  394. package/dist/core/scene/pathEffects/foundHidden.js +1 -2
  395. package/dist/core/scene/pathEffects/textAlong.js +1 -2
  396. package/dist/core/scene/pathEffects/textAlongBands.js +1 -2
  397. package/dist/core/scene/plyStacks.js +1 -2
  398. package/dist/core/scene/poseFeed.js +1 -2
  399. package/dist/core/scene/poseHold.js +1 -2
  400. package/dist/core/scene/poseOverrides.js +1 -2
  401. package/dist/core/scene/posePlies.js +1 -2
  402. package/dist/core/scene/poseRemovals.js +1 -2
  403. package/dist/core/scene/poseSnapshot.js +1 -2
  404. package/dist/core/scene/poseWrites.js +17 -17
  405. package/dist/core/scene/poseWrites.js.map +1 -1
  406. package/dist/core/scene/reconcileSpecs.js +26 -3
  407. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  408. package/dist/core/scene/recorder.js +1 -2
  409. package/dist/core/scene/renderOrder.js +1 -2
  410. package/dist/core/scene/sameValue.js +1 -2
  411. package/dist/core/scene/scene.js +11 -12
  412. package/dist/core/scene/scene.js.map +1 -1
  413. package/dist/core/scene/sceneChanges.js +1 -2
  414. package/dist/core/scene/sceneEdits.js +1 -2
  415. package/dist/core/scene/sceneJournals.js +77 -0
  416. package/dist/core/scene/sceneJournals.js.map +1 -0
  417. package/dist/core/scene/sceneMutators.js +2 -3
  418. package/dist/core/scene/scenePoseAdapter.js +1 -2
  419. package/dist/core/scene/sceneRecording.js +4 -4
  420. package/dist/core/scene/sceneRecording.js.map +1 -1
  421. package/dist/core/scene/sceneSelection.js +8 -5
  422. package/dist/core/scene/sceneSelection.js.map +1 -1
  423. package/dist/core/scene/sceneState.js +3 -4
  424. package/dist/core/scene/scrollOffsets.js +1 -2
  425. package/dist/core/scene/serialization.js +2 -3
  426. package/dist/core/scene/staleReplay.js +1 -2
  427. package/dist/core/scene/statedFields.js +1 -2
  428. package/dist/core/scene/strategyView.js +1 -2
  429. package/dist/core/scene/treeEdits.js +2 -3
  430. package/dist/core/scene/treeOrder.js +1 -2
  431. package/dist/core/scene/treeReads.js +1 -2
  432. package/dist/core/scene/treeShape.js +1 -2
  433. package/dist/core/scene/types.js +1 -2
  434. package/dist/core/scene/types.js.map +1 -1
  435. package/dist/core/scene/unionOfChildren.js +1 -2
  436. package/dist/core/scene/unitScopes.js +20 -4
  437. package/dist/core/scene/unitScopes.js.map +1 -1
  438. package/dist/core/scene/useScene.js +2 -3
  439. package/dist/core/scene/worldSave.js +2 -3
  440. package/dist/core/selection/chromeState.js +1 -2
  441. package/dist/core/selection/outermostSelection.js +56 -0
  442. package/dist/core/selection/outermostSelection.js.map +1 -0
  443. package/dist/core/selection/readOnlySelection.js +1 -2
  444. package/dist/core/selection/selectionTarget.js +1 -2
  445. package/dist/core/selection/usePublishSceneSelection.js +1 -2
  446. package/dist/core/selection/useSelection.js +1 -2
  447. package/dist/core/shapeKinds.js +1 -2
  448. package/dist/core/stableStringify.js +1 -2
  449. package/dist/core/stylus/stylus.js +1 -2
  450. package/dist/core/stylus/usePointerStylus.js +1 -2
  451. package/dist/core/usePaintKinds.js +1 -2
  452. package/dist/core/viewport/clampView.js +1 -2
  453. package/dist/core/viewport/clientToWorld.js +1 -2
  454. package/dist/core/viewport/createVelocityTracker.js +1 -2
  455. package/dist/core/viewport/fitToBounds.js +1 -2
  456. package/dist/core/viewport/fitViewToBounds.js +1 -2
  457. package/dist/core/viewport/interpolateView.js +1 -2
  458. package/dist/core/viewport/parallax.js +1 -2
  459. package/dist/core/viewport/sceneNodeClientRect.js +1 -2
  460. package/dist/core/viewport/screenSlop.js +1 -2
  461. package/dist/core/viewport/useAutoCenter.js +1 -2
  462. package/dist/core/viewport/useCanvasSize.js +48 -28
  463. package/dist/core/viewport/useCanvasSize.js.map +1 -1
  464. package/dist/core/viewport/useDecayLoop.js +1 -2
  465. package/dist/core/viewport/useNodeOverlayFrame.js +1 -2
  466. package/dist/core/viewport/useVelocityTracker.js +1 -2
  467. package/dist/core/viewport/useViewAnimation.js +3 -4
  468. package/dist/core/viewport/view.js +1 -2
  469. package/dist/core/viewport/viewTransform.js +1 -2
  470. package/dist/core/viewport/viewportWorldRect.js +1 -2
  471. package/dist/core/viewport/wheelHandler.js +1 -2
  472. package/dist/core/viewport/zoomAt.js +2 -3
  473. package/dist/core/viewport/zoomBounds.js +1 -2
  474. package/dist/debug/createDebugOverlayLayer.js +1 -2
  475. package/dist/debug/createDebugSink.js +1 -2
  476. package/dist/debug/defaultTheme.js +1 -2
  477. package/dist/debug/features.js +1 -2
  478. package/dist/debug/frameStats.js +1 -2
  479. package/dist/debug/overlayPanels.js +1 -2
  480. package/dist/debug/parseDebugFlags.js +1 -2
  481. package/dist/debug/useDebugSink.js +2 -3
  482. package/dist/{depSchema-DD9H89gX.d.ts → depSchema-C7a_OMt-.d.ts} +101 -65
  483. package/dist/devtools/handlers.js +1 -2
  484. package/dist/devtools/history.js +1 -2
  485. package/dist/devtools/hook.js +1 -2
  486. package/dist/devtools/label.js +1 -2
  487. package/dist/devtools/notices.js +1 -2
  488. package/dist/devtools/protocol.js +1 -2
  489. package/dist/devtools/registry.js +1 -2
  490. package/dist/devtools/root.js +1 -2
  491. package/dist/devtools/serialize.js +1 -2
  492. package/dist/devtools/session.js +2 -3
  493. package/dist/devtools/transport.js +1 -2
  494. package/dist/devtools/useDevtoolsRoot.js +1 -2
  495. package/dist/devtools-protocol.d.ts +1 -1
  496. package/dist/devtools-protocol.js +2 -2
  497. package/dist/devtools.d.ts +1 -1
  498. package/dist/devtools.js +1 -2
  499. package/dist/domains/chrome-caps/buildChromeCtx.js +1 -2
  500. package/dist/domains/chrome-caps/conditions.js +1 -2
  501. package/dist/domains/chrome-caps/defaults.js +1 -2
  502. package/dist/domains/chrome-caps/resolve.js +3 -3
  503. package/dist/domains/chrome-caps/resolve.js.map +1 -1
  504. package/dist/domains/chrome-caps/useChromeCaps.js +5 -4
  505. package/dist/domains/chrome-caps/useChromeCaps.js.map +1 -1
  506. package/dist/domains/chrome-caps/useHoverTracking.js +1 -2
  507. package/dist/domains/ingestion/contentHandlers.js +1 -2
  508. package/dist/domains/ingestion/ghost.js +2 -3
  509. package/dist/domains/ingestion/imageHandler.js +1 -2
  510. package/dist/domains/ingestion/kitHandlers.js +2 -3
  511. package/dist/domains/ingestion/openFilePicker.js +1 -2
  512. package/dist/domains/ingestion/placement.js +1 -2
  513. package/dist/domains/ingestion/svgHandler.js +1 -2
  514. package/dist/domains/ingestion/textHandler.js +1 -2
  515. package/dist/domains/ingestion/useCanvasIngestion.js +1 -2
  516. package/dist/domains/ingestion/weaselJsonHandler.js +2 -3
  517. package/dist/domains/longPress/longPressFeedback.js +1 -2
  518. package/dist/domains/measure/actionIds.js +1 -2
  519. package/dist/domains/measure/measureCommands.js +6 -7
  520. package/dist/domains/measure/measureContribution.js +3 -4
  521. package/dist/domains/measure/measureEdits.js +3 -4
  522. package/dist/domains/measure/measureGestures.js +2 -3
  523. package/dist/domains/measure/measureHit.js +3 -4
  524. package/dist/domains/measure/measureLayer.js +3 -4
  525. package/dist/domains/measure/measurement.js +1 -2
  526. package/dist/domains/measure/measurements.js +1 -2
  527. package/dist/domains/modes/modeLayers.js +1 -2
  528. package/dist/domains/modes/modeTriggers.js +1 -2
  529. package/dist/domains/pathEffects/effectSources.js +2 -3
  530. package/dist/domains/pathEffects/index.js +1 -2
  531. package/dist/domains/pathEffects/readSource.js +3 -4
  532. package/dist/domains/pathEffects/textItems.js +1 -2
  533. package/dist/domains/pathEffects/useEffectSourcesLayer.js +3 -4
  534. package/dist/domains/paths/anchorData.js +1 -2
  535. package/dist/domains/paths/anchorMarkers.js +1 -2
  536. package/dist/domains/paths/editablePath.js +3 -4
  537. package/dist/domains/paths/originProjection.js +1 -2
  538. package/dist/domains/paths/pathEditExtension.js +1 -2
  539. package/dist/domains/paths/pathEditState.js +1 -26
  540. package/dist/domains/paths/pathEditState.js.map +1 -1
  541. package/dist/domains/paths/pathEditingOverlayLayer.js +2 -3
  542. package/dist/domains/paths/pathLayer.js +1 -2
  543. package/dist/domains/paths/pathRepresentation.js +1 -2
  544. package/dist/domains/paths/pathSnap/glyphs.js +1 -2
  545. package/dist/domains/paths/pathSnap/pathSnapSource.js +1 -2
  546. package/dist/domains/paths/pathSnap/sceneIndex.js +1 -2
  547. package/dist/domains/paths/pathSnap/snapGeometry.js +2 -3
  548. package/dist/domains/paths/penPreviewLayer.js +1 -2
  549. package/dist/domains/paths/shapeGenerator.js +1 -2
  550. package/dist/domains/paths/strokeOutline.js +2 -3
  551. package/dist/domains/paths/useAnchorFields.js +1 -2
  552. package/dist/domains/paths/usePathEdit.js +2 -3
  553. package/dist/domains/poseRun/usePoseRun.js +1 -2
  554. package/dist/domains/selection/enteredGroupFrame.js +1 -2
  555. package/dist/domains/selection/enteredGroupScope.js +1 -2
  556. package/dist/domains/selection/enteredOperands.js +1 -2
  557. package/dist/domains/selection/handleCommands.js +2 -3
  558. package/dist/domains/selection/overlay.js +6 -7
  559. package/dist/domains/selection/selectionPose.js +2 -3
  560. package/dist/domains/snap/angle2d.js +1 -2
  561. package/dist/domains/snap/debugCandidates.js +1 -2
  562. package/dist/domains/snap/gather.js +1 -2
  563. package/dist/domains/snap/inputSubspace.js +2 -3
  564. package/dist/domains/snap/lazySession.js +1 -2
  565. package/dist/domains/snap/marks.js +1 -2
  566. package/dist/domains/snap/outcomeStore.js +1 -2
  567. package/dist/domains/snap/pointSnap.js +1 -2
  568. package/dist/domains/snap/probes2d.js +6 -2
  569. package/dist/domains/snap/probes2d.js.map +1 -1
  570. package/dist/domains/snap/readoutDraw.js +1 -2
  571. package/dist/domains/snap/readoutLayer.js +1 -2
  572. package/dist/domains/snap/registry.js +1 -2
  573. package/dist/domains/snap/resizeBox.js +1 -2
  574. package/dist/domains/snap/roles.js +1 -2
  575. package/dist/domains/snap/rotationSource.js +1 -2
  576. package/dist/domains/snap/sceneReads.js +13 -4
  577. package/dist/domains/snap/sceneReads.js.map +1 -1
  578. package/dist/domains/snap/sceneSession2d.js +6 -5
  579. package/dist/domains/snap/sceneSession2d.js.map +1 -1
  580. package/dist/domains/snap/screen.js +2 -3
  581. package/dist/domains/snap/session2d.js +4 -5
  582. package/dist/domains/snap/spanSnap.js +1 -2
  583. package/dist/domains/snap/stepAngles.js +1 -2
  584. package/dist/domains/text/editingDrawOne.js +1 -2
  585. package/dist/domains/text/hostTextEditors.js +1 -2
  586. package/dist/domains/text/index.js +2 -2
  587. package/dist/domains/text/sceneTextDrafts.js +1 -2
  588. package/dist/domains/text/textHitAt.js +4 -5
  589. package/dist/domains/text/textLayer.js +12 -2
  590. package/dist/domains/text/textLayer.js.map +1 -1
  591. package/dist/domains/text/useSceneTextEdit.js +4 -5
  592. package/dist/domains/viewports/aim.js +3 -4
  593. package/dist/domains/viewports/viewMarker.js +1 -2
  594. package/dist/domains/viewports/viewMarkerDrag.js +1 -2
  595. package/dist/domains/viewports/viewResolver.js +1 -2
  596. package/dist/domains/viewports/viewportLayer.js +1 -2
  597. package/dist/iconRegistry/IconRegistryProvider.js +1 -2
  598. package/dist/iconRegistry/useIconGlyph.js +1 -2
  599. package/dist/iconRegistry/useIconVariant.js +1 -2
  600. package/dist/icons.table.js +2 -3
  601. package/dist/icons.table.js.map +1 -1
  602. package/dist/icons.table.json +5 -0
  603. package/dist/icons2.table.js +1 -2
  604. package/dist/index.d.ts +160 -64
  605. package/dist/index.js +14 -9
  606. package/dist/input/keyState.js +1 -2
  607. package/dist/input/useKeyModifiers.js +1 -2
  608. package/dist/input/useKeyState.js +1 -2
  609. package/dist/interactions/actions/admitsChild.js +1 -2
  610. package/dist/interactions/actions/align/action.js +6 -7
  611. package/dist/interactions/actions/align/align.js +6 -7
  612. package/dist/interactions/actions/booleans/action.js +5 -4
  613. package/dist/interactions/actions/booleans/action.js.map +1 -1
  614. package/dist/interactions/actions/booleans/booleanGroupAction.js +2 -3
  615. package/dist/interactions/actions/booleans/booleans.js +1 -2
  616. package/dist/interactions/actions/booleans/commit.js +4 -5
  617. package/dist/interactions/actions/booleans/custom.js +2 -3
  618. package/dist/interactions/actions/booleans/keymap.js +1 -2
  619. package/dist/interactions/actions/booleans/operands.js +1 -2
  620. package/dist/interactions/actions/booleans/pieces.js +1 -2
  621. package/dist/interactions/actions/booleans/placement.js +1 -2
  622. package/dist/interactions/actions/booleans/useBooleans.js +1 -2
  623. package/dist/interactions/actions/booleans/useBooleansAdapter.js +1 -2
  624. package/dist/interactions/actions/clipboard/action.js +2 -3
  625. package/dist/interactions/actions/clipboard/clipboardOps.js +2 -3
  626. package/dist/interactions/actions/clipboard/materializePaste.js +1 -2
  627. package/dist/interactions/actions/clipboard/wireFormat.js +1 -2
  628. package/dist/interactions/actions/clone/action.js +7 -8
  629. package/dist/interactions/actions/clone/behaviors.js +4 -5
  630. package/dist/interactions/actions/defaultCommitAdapter.js +2 -3
  631. package/dist/interactions/actions/defaults/anchorEditing.js +6 -10
  632. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
  633. package/dist/interactions/actions/defaults/anchorFields.js +1 -2
  634. package/dist/interactions/actions/defaults/anchorHandles.js +2 -3
  635. package/dist/interactions/actions/defaults/anchorJoin.js +2 -3
  636. package/dist/interactions/actions/defaults/areaSelect.js +6 -6
  637. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  638. package/dist/interactions/actions/defaults/bendSegment.js +4 -6
  639. package/dist/interactions/actions/defaults/bendSegment.js.map +1 -1
  640. package/dist/interactions/actions/defaults/cancelGesture.js +1 -2
  641. package/dist/interactions/actions/defaults/clearSelection.js +1 -2
  642. package/dist/interactions/actions/defaults/containerScroll.js +4 -5
  643. package/dist/interactions/actions/defaults/contextMenu.js +6 -7
  644. package/dist/interactions/actions/defaults/copySubtree.js +2 -3
  645. package/dist/interactions/actions/defaults/createPaintAction.js +3 -4
  646. package/dist/interactions/actions/defaults/delete.js +2 -3
  647. package/dist/interactions/actions/defaults/duplicate.js +5 -6
  648. package/dist/interactions/actions/defaults/enterGroup.js +2 -3
  649. package/dist/interactions/actions/defaults/enterPathEdit.js +1 -2
  650. package/dist/interactions/actions/defaults/enterTextEdit.js +1 -2
  651. package/dist/interactions/actions/defaults/escape.js +1 -2
  652. package/dist/interactions/actions/defaults/exitPathEdit.js +18 -3
  653. package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -1
  654. package/dist/interactions/actions/defaults/group.js +6 -7
  655. package/dist/interactions/actions/defaults/ingest.js +3 -4
  656. package/dist/interactions/actions/defaults/insertPathAnchor.js +2 -3
  657. package/dist/interactions/actions/defaults/nudge.js +3 -4
  658. package/dist/interactions/actions/defaults/nudgeSteps.js +2 -3
  659. package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -1
  660. package/dist/interactions/actions/defaults/pathEditMarks.js +1 -2
  661. package/dist/interactions/actions/defaults/pinchZoom.js +3 -4
  662. package/dist/interactions/actions/defaults/reorder.js +2 -3
  663. package/dist/interactions/actions/defaults/requiresSelection.js +1 -2
  664. package/dist/interactions/actions/defaults/segmentUnder.js +1 -2
  665. package/dist/interactions/actions/defaults/selectAll.js +1 -2
  666. package/dist/interactions/actions/defaults/selectDeep.js +1 -2
  667. package/dist/interactions/actions/defaults/setFill.js +1 -2
  668. package/dist/interactions/actions/defaults/setFillOpacity.js +1 -2
  669. package/dist/interactions/actions/defaults/setStroke.js +1 -2
  670. package/dist/interactions/actions/defaults/setStrokeOpacity.js +1 -2
  671. package/dist/interactions/actions/defaults/slice.js +1 -2
  672. package/dist/interactions/actions/defaults/sliceOps.js +1 -2
  673. package/dist/interactions/actions/defaults/toolActivate.js +1 -2
  674. package/dist/interactions/actions/defaults/toolResetToDefault.js +1 -2
  675. package/dist/interactions/actions/defaults/undoRedo.js +1 -2
  676. package/dist/interactions/actions/defaults/viewportDragPan.js +1 -2
  677. package/dist/interactions/actions/defaults/viewportWheelPan.js +1 -2
  678. package/dist/interactions/actions/defaults/viewportZoom.js +3 -4
  679. package/dist/interactions/actions/distribute/action.js +4 -5
  680. package/dist/interactions/actions/distribute/distribute.js +5 -6
  681. package/dist/interactions/actions/distribute/plan.js +1 -2
  682. package/dist/interactions/actions/drawnBoxes.js +4 -5
  683. package/dist/interactions/actions/dropVerdict.js +1 -2
  684. package/dist/interactions/actions/edit-anchors/action.js +7 -9
  685. package/dist/interactions/actions/edit-anchors/action.js.map +1 -1
  686. package/dist/interactions/actions/edit-anchors/extensionDrags.js +1 -2
  687. package/dist/interactions/actions/edit-anchors/geometry.js +1 -2
  688. package/dist/interactions/actions/edit-anchors/handleDrag.js +1 -2
  689. package/dist/interactions/actions/edit-anchors/handles.js +1 -2
  690. package/dist/interactions/actions/edit-anchors/params.js +1 -2
  691. package/dist/interactions/actions/edit-anchors/preview.js +1 -2
  692. package/dist/interactions/actions/edit-anchors/symmetry.js +1 -2
  693. package/dist/interactions/actions/flip/action.js +8 -9
  694. package/dist/interactions/actions/flip/helpers.js +1 -2
  695. package/dist/interactions/actions/geometryProjection.js +1 -2
  696. package/dist/interactions/actions/gestureFrames.js +3 -4
  697. package/dist/interactions/actions/gestureLifecycle.js +1 -2
  698. package/dist/interactions/actions/hitSelection.js +7 -3
  699. package/dist/interactions/actions/hitSelection.js.map +1 -1
  700. package/dist/interactions/actions/insert/action.js +27 -9
  701. package/dist/interactions/actions/insert/action.js.map +1 -1
  702. package/dist/interactions/actions/insert/commit.js +2 -3
  703. package/dist/interactions/actions/insert/extras.js +1 -2
  704. package/dist/interactions/actions/insert/frame.js +1 -2
  705. package/dist/interactions/actions/insert/geometry.js +1 -2
  706. package/dist/interactions/actions/insert/params.js +42 -0
  707. package/dist/interactions/actions/insert/params.js.map +1 -0
  708. package/dist/interactions/actions/insert/parent.js +1 -2
  709. package/dist/interactions/actions/insert/placeAction.js +5 -6
  710. package/dist/interactions/actions/insert/repositionAction.js +1 -2
  711. package/dist/interactions/actions/insert/rotateAction.js +1 -2
  712. package/dist/interactions/actions/insert/session.js +5 -6
  713. package/dist/interactions/actions/insert/shape.js +2 -3
  714. package/dist/interactions/actions/lasso-select/action.js +9 -9
  715. package/dist/interactions/actions/lasso-select/action.js.map +1 -1
  716. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +2 -3
  717. package/dist/interactions/actions/magnification.js +37 -0
  718. package/dist/interactions/actions/magnification.js.map +1 -0
  719. package/dist/interactions/actions/move/action.js +2 -3
  720. package/dist/interactions/actions/move/behaviors/layoutDrop.js +2 -3
  721. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +2 -3
  722. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +1 -2
  723. package/dist/interactions/actions/move/behaviors/snapToContainer.js +2 -3
  724. package/dist/interactions/actions/move/capture.js +6 -7
  725. package/dist/interactions/actions/move/commit/index.js +2 -3
  726. package/dist/interactions/actions/move/commit/layoutDrop.js +4 -5
  727. package/dist/interactions/actions/move/commit/layoutRelease.js +7 -8
  728. package/dist/interactions/actions/move/commit/rebase.js +2 -3
  729. package/dist/interactions/actions/move/commit/reparent.js +5 -6
  730. package/dist/interactions/actions/move/delta.js +2 -3
  731. package/dist/interactions/actions/move/frame.js +2 -3
  732. package/dist/interactions/actions/move/gestureAdapter.js +1 -2
  733. package/dist/interactions/actions/move/landedDescendants.js +2 -3
  734. package/dist/interactions/actions/move/layout/container.js +3 -4
  735. package/dist/interactions/actions/move/layout/dragged.js +2 -3
  736. package/dist/interactions/actions/move/layout/dropPass.js +5 -6
  737. package/dist/interactions/actions/move/layout/exits.js +2 -3
  738. package/dist/interactions/actions/move/layout/glide.js +2 -3
  739. package/dist/interactions/actions/move/layout/view.js +1 -2
  740. package/dist/interactions/actions/move/refusal.js +2 -3
  741. package/dist/interactions/actions/move/session.js +4 -5
  742. package/dist/interactions/actions/move/translate.js +2 -3
  743. package/dist/interactions/actions/moveNodes.js +5 -6
  744. package/dist/interactions/actions/notices.js +16 -0
  745. package/dist/interactions/actions/notices.js.map +1 -0
  746. package/dist/interactions/actions/outlines/createOutlines.js +9 -8
  747. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
  748. package/dist/interactions/actions/outlines/createOutlinesAction.js +14 -10
  749. package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -1
  750. package/dist/interactions/actions/outlines/outlineStroke.js +2 -3
  751. package/dist/interactions/actions/outlines/outlineStrokeAction.js +5 -5
  752. package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -1
  753. package/dist/interactions/actions/outlines/replaceWithPaths.js +5 -6
  754. package/dist/interactions/actions/outlines/strokeRegion.js +1 -2
  755. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +1 -2
  756. package/dist/interactions/actions/pathCommands/cutJoin.js +3 -4
  757. package/dist/interactions/actions/pathCommands/livePathEdit.js +3 -4
  758. package/dist/interactions/actions/pathCommands/pathNodes.js +2 -3
  759. package/dist/interactions/actions/pathCommands/simplifyOffset.js +2 -3
  760. package/dist/interactions/actions/pathGestureTags.js +1 -2
  761. package/dist/interactions/actions/planeInput.js +2 -3
  762. package/dist/interactions/actions/pointerState.js +1 -2
  763. package/dist/interactions/actions/poseDescriptorDep.js +1 -2
  764. package/dist/interactions/actions/poseFrame.js +3 -4
  765. package/dist/interactions/actions/resize/action.js +3 -4
  766. package/dist/interactions/actions/resize/aspect.js +1 -2
  767. package/dist/interactions/actions/resize/behaviors/clampMinSize.js +1 -2
  768. package/dist/interactions/actions/resize/boxFrame.js +1 -2
  769. package/dist/interactions/actions/resize/capture.js +7 -8
  770. package/dist/interactions/actions/resize/commit.js +3 -4
  771. package/dist/interactions/actions/resize/cornerHandles.js +1 -2
  772. package/dist/interactions/actions/resize/frame.js +7 -8
  773. package/dist/interactions/actions/resize/held.js +2 -3
  774. package/dist/interactions/actions/resize/minimum.js +1 -2
  775. package/dist/interactions/actions/resize/replay.js +1 -2
  776. package/dist/interactions/actions/resize/ruleBounds.js +1 -2
  777. package/dist/interactions/actions/resize/session.js +9 -10
  778. package/dist/interactions/actions/resolveOverlays.js +1 -2
  779. package/dist/interactions/actions/resolvePreviews.js +3 -4
  780. package/dist/interactions/actions/rotate/action.js +5 -6
  781. package/dist/interactions/actions/rotate/commit.js +2 -3
  782. package/dist/interactions/actions/rotate/frame.js +3 -4
  783. package/dist/interactions/actions/rotate/geometry.js +1 -2
  784. package/dist/interactions/actions/rotate/handle.js +2 -3
  785. package/dist/interactions/actions/rotate/replay.js +2 -3
  786. package/dist/interactions/actions/rotate/session.js +10 -11
  787. package/dist/interactions/actions/selectionSubtree.js +7 -22
  788. package/dist/interactions/actions/selectionSubtree.js.map +1 -1
  789. package/dist/interactions/actions/spatialReference.js +1 -2
  790. package/dist/interactions/actions/testUtils.js +1 -9
  791. package/dist/interactions/actions/testUtils.js.map +1 -1
  792. package/dist/interactions/actions/transform-again/action.js +5 -6
  793. package/dist/interactions/actions/transform-again/memory.js +1 -2
  794. package/dist/interactions/actions/transformFinish.js +1 -2
  795. package/dist/interactions/actions/useActionSet.js +1 -2
  796. package/dist/interactions/actions/useNotices.js +12 -0
  797. package/dist/interactions/actions/useNotices.js.map +1 -0
  798. package/dist/interactions/actions/useStandardActions.js +1 -2
  799. package/dist/interactions/gestures/dragGesture/dragGesture.js +1 -2
  800. package/dist/interactions/gestures/dragGesture/dragPointOf.js +1 -2
  801. package/dist/interactions/gestures/dragRadial/dragRadial.js +2 -3
  802. package/dist/interactions/gestures/dragRect/dragRect.js +2 -3
  803. package/dist/interactions/gestures/handleDrag/handleDrag.js +1 -2
  804. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +1 -2
  805. package/dist/interactions/gestures/shared/originProjection.js +1 -2
  806. package/dist/interactions/gestures/shared/screenTolerance.js +1 -2
  807. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +1 -2
  808. package/dist/kitSettingsSchema.js +4 -5
  809. package/dist/test-hook/createTestHook.js +1 -2
  810. package/dist/test-hook/install.js +1 -2
  811. package/dist/test-hook/useTestHook.js +1 -2
  812. package/dist/test-seams.d.ts +7 -14
  813. package/dist/test-seams.js +2 -2
  814. package/dist/tools/builtin/anchors/anchorsTool.js +30 -0
  815. package/dist/tools/builtin/anchors/anchorsTool.js.map +1 -0
  816. package/dist/tools/builtin/ellipse/useEllipseTool.js +2 -3
  817. package/dist/tools/builtin/eyedropper/useEyedropperTool.js +1 -2
  818. package/dist/tools/builtin/hand/dragPanContribution.js +1 -2
  819. package/dist/tools/builtin/hand/useHandTool.js +1 -2
  820. package/dist/tools/builtin/image/useImageTool.js +1 -2
  821. package/dist/tools/builtin/lasso/useLassoTool.js +1 -2
  822. package/dist/tools/builtin/line/useLineTool.js +2 -3
  823. package/dist/tools/builtin/measure/useMeasureTool.js +2 -3
  824. package/dist/tools/builtin/pen/penHandle.js +1 -2
  825. package/dist/tools/builtin/pen/usePenTool.js +6 -7
  826. package/dist/tools/builtin/pencil/usePencilTool.js +1 -2
  827. package/dist/tools/builtin/pickTopMostHit.js +1 -2
  828. package/dist/tools/builtin/polygon/usePolygonTool.js +2 -3
  829. package/dist/tools/builtin/pressTarget.js +1 -2
  830. package/dist/tools/builtin/rect/useRectTool.js +2 -3
  831. package/dist/tools/builtin/select/adapterPointQuery.js +3 -4
  832. package/dist/tools/builtin/select/collapseDeferred.js +1 -2
  833. package/dist/tools/builtin/select/groupEntry.js +2 -3
  834. package/dist/tools/builtin/select/pressDecision.js +3 -4
  835. package/dist/tools/builtin/select/pressDecision.js.map +1 -1
  836. package/dist/tools/builtin/select/selectionContributions.js +1 -2
  837. package/dist/tools/builtin/select/useSelectTool.js +5 -6
  838. package/dist/tools/builtin/shared/insertToolOptions.js +1 -2
  839. package/dist/tools/builtin/shared/pointerFollower.js +1 -2
  840. package/dist/tools/builtin/slice/useSliceTool.js +5 -6
  841. package/dist/tools/builtin/star/useStarTool.js +2 -3
  842. package/dist/tools/builtin/sticky/stickyNode.js +1 -2
  843. package/dist/tools/builtin/sticky/useStickyTool.js +2 -3
  844. package/dist/tools/builtin/text/useTextTool.js +1 -2
  845. package/dist/tools/index.js +4 -2
  846. package/dist/tools/overlayBinding.js +1 -2
  847. package/dist/tools/toolOptions.js +60 -0
  848. package/dist/tools/toolOptions.js.map +1 -0
  849. package/dist/tools/useKeybindings.js +1 -2
  850. package/dist/{types-DW14eu9B.d.ts → types-BUvUXZe5.d.ts} +3 -3
  851. package/dist/util/color.js +1 -2
  852. package/dist/util/paint.js +1 -2
  853. package/dist/version.js +2 -3
  854. package/package.json +27 -27
  855. package/dist/interactions/actions/defaults/pathEditTools.js +0 -60
  856. package/dist/interactions/actions/defaults/pathEditTools.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useCanvasSelection.js","names":[],"sources":["../../../src/canvas/SceneCanvas/useCanvasSelection.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport type { Node, NodeId, Scene } from 'core/scene/types';\nimport { readOnlySelection } from 'core/selection/readOnlySelection';\nimport { usePublishSceneSelection } from 'core/selection/usePublishSceneSelection';\nimport { useSelection, type SelectionApi, type UseSelectionOptions } from 'core/selection/useSelection';\nimport type { SceneCanvasProps } from './props';\n\n/**\n * The canvas's selection, published to any surrounding selection context.\n *\n * A caller-supplied api wins, and the one built here is then unused. The\n * built one is bound to the scene, so the selection an edit was made under\n * rides on the scene's history entries and undo can put it back.\n *\n * Everything the kit writes selection through (the `selection` dep, the\n * adapter's `setSelection`, ops committed through either) reads the returned\n * api, so on an unselectable canvas every write path here is closed. The\n * caller's own api is not wrapped and still writes.\n */\nexport function useCanvasSelection<TData, TLayer extends string, TPose>(args: {\n scene: Scene<TData, TLayer, TPose>;\n props: Pick<SceneCanvasProps<TData, TLayer, TPose>, 'selection' | 'selectionOptions' | 'describeKind'>;\n selectable: boolean;\n /** The canvas's routing kind, published for each node unless `describeKind` is given. */\n kindOf: ((node: { kind: string; data: TData }) => string) | undefined;\n}): SelectionApi {\n const { scene, selectable, kindOf } = args;\n const { selection: supplied, selectionOptions: options, describeKind } = args.props;\n const describe = useMemo(() => describeKind ?? (kindOf && ((node: Node<TData, TLayer, TPose>) => {\n const kind = kindOf(node);\n return kind === 'unknown' ? undefined : kind;\n })), [describeKind, kindOf]);\n const derivedOptions = useMemo<UseSelectionOptions>(\n () => ({ scene, ...(options ?? {}) }),\n [scene, options],\n );\n const internal = useSelection(derivedOptions);\n const base = supplied ?? internal;\n const selection = selectable ? base : readOnlySelection(base);\n usePublishSceneSelection(scene, selection.current as readonly NodeId[], describe);\n return selection;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAmBA,SAAgB,mBAAwD,MAMvD;CACf,MAAM,EAAE,OAAO,YAAY,WAAW;CACtC,MAAM,EAAE,WAAW,UAAU,kBAAkB,SAAS,iBAAiB,KAAK;CAC9E,MAAM,WAAW,cAAc,iBAAiB,YAAY,SAAqC;EAC/F,MAAM,OAAO,OAAO,IAAI;EACxB,OAAO,SAAS,YAAY,SAAY;CAC1C,KAAK,CAAC,cAAc,MAAM,CAAC;CAC3B,MAAM,iBAAiB,eACd;EAAE;EAAO,GAAI,WAAW,CAAC;CAAG,IACnC,CAAC,OAAO,OAAO,CACjB;CACA,MAAM,WAAW,aAAa,cAAc;CAC5C,MAAM,OAAO,YAAY;CACzB,MAAM,YAAY,aAAa,OAAO,kBAAkB,IAAI;CAC5D,yBAAyB,OAAO,UAAU,SAA8B,QAAQ;CAChF,OAAO;AACT"}
1
+ {"version":3,"file":"useCanvasSelection.js","names":[],"sources":["../../../src/canvas/SceneCanvas/useCanvasSelection.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport type { Node, NodeId, Scene } from 'core/scene/types';\nimport { outermostSelection } from 'core/selection/outermostSelection';\nimport { readOnlySelection } from 'core/selection/readOnlySelection';\nimport { usePublishSceneSelection } from 'core/selection/usePublishSceneSelection';\nimport { useSelection, type SelectionApi, type UseSelectionOptions } from 'core/selection/useSelection';\nimport type { SceneCanvasProps } from './props';\n\n/**\n * The canvas's selection, published to any surrounding selection context.\n *\n * A caller-supplied api wins, and the one built here is then unused. The\n * built one is bound to the scene, so the selection an edit was made under\n * rides on the scene's history entries and undo can put it back.\n *\n * Everything the kit writes selection through (the `selection` dep, the\n * adapter's `setSelection`, ops committed through either) reads the returned\n * api, so on an unselectable canvas every write path here is closed, and a\n * caller's api kept off the scene still holds only outermost ids. The caller's\n * own api is not changed and still writes as it did.\n */\nexport function useCanvasSelection<TData, TLayer extends string, TPose>(args: {\n scene: Scene<TData, TLayer, TPose>;\n props: Pick<SceneCanvasProps<TData, TLayer, TPose>, 'selection' | 'selectionOptions' | 'describeKind'>;\n selectable: boolean;\n /** The canvas's routing kind, published for each node unless `describeKind` is given. */\n kindOf: ((node: { kind: string; data: TData }) => string) | undefined;\n}): SelectionApi {\n const { scene, selectable, kindOf } = args;\n const { selection: supplied, selectionOptions: options, describeKind } = args.props;\n const describe = useMemo(() => describeKind ?? (kindOf && ((node: Node<TData, TLayer, TPose>) => {\n const kind = kindOf(node);\n return kind === 'unknown' ? undefined : kind;\n })), [describeKind, kindOf]);\n const derivedOptions = useMemo<UseSelectionOptions>(\n () => ({ scene, ...(options ?? {}) }),\n [scene, options],\n );\n const internal = useSelection(derivedOptions);\n const parentOf = useMemo(() => (id: NodeId) => scene.get(id)?.parent, [scene]);\n const base = supplied ? outermostSelection(supplied, parentOf) : internal;\n const selection = selectable ? base : readOnlySelection(base);\n usePublishSceneSelection(scene, selection.current as readonly NodeId[], describe);\n return selection;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAqBA,SAAgB,mBAAwD,MAMvD;CACf,MAAM,EAAE,OAAO,YAAY,WAAW;CACtC,MAAM,EAAE,WAAW,UAAU,kBAAkB,SAAS,iBAAiB,KAAK;CAC9E,MAAM,WAAW,cAAc,iBAAiB,YAAY,SAAqC;EAC/F,MAAM,OAAO,OAAO,IAAI;EACxB,OAAO,SAAS,YAAY,SAAY;CAC1C,KAAK,CAAC,cAAc,MAAM,CAAC;CAC3B,MAAM,iBAAiB,eACd;EAAE;EAAO,GAAI,WAAW,CAAC;CAAG,IACnC,CAAC,OAAO,OAAO,CACjB;CACA,MAAM,WAAW,aAAa,cAAc;CAC5C,MAAM,WAAW,eAAe,OAAe,MAAM,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;CAC7E,MAAM,OAAO,WAAW,mBAAmB,UAAU,QAAQ,IAAI;CACjE,MAAM,YAAY,aAAa,OAAO,kBAAkB,IAAI;CAC5D,yBAAyB,OAAO,UAAU,SAA8B,QAAQ;CAChF,OAAO;AACT"}
@@ -1,12 +1,12 @@
1
- import { createViewMarkerContribution } from "../../domains/viewports/viewMarkerDrag.js";
2
1
  import { createLongPressFeedbackContribution } from "../../domains/longPress/longPressFeedback.js";
2
+ import { createViewMarkerContribution } from "../../domains/viewports/viewMarkerDrag.js";
3
3
  import { useTools } from "../../tools/overlayBinding.js";
4
4
  import { presetActions, presetAmbient, presetContributions, resolveFeatures } from "./features.js";
5
5
  import { useBuiltinTools } from "./useBuiltinTools.js";
6
6
  import { useEffect, useMemo } from "react";
7
7
  import { useLatest } from "@weasel-js/react";
8
8
 
9
- //#region src/canvas/SceneCanvas/useCanvasTools.ts
9
+ // src/canvas/SceneCanvas/useCanvasTools.ts
10
10
  /** Discriminate the polymorphic `tools` prop: `ToolsApi` has `setActive`
11
11
  * / `active` / `registry`; the patch record shape has none of those. */
12
12
  function isToolsApi(tools) {
@@ -145,6 +145,5 @@ function useFeatureBindings(args) {
145
145
  };
146
146
  }
147
147
 
148
- //#endregion
149
148
  export { useCanvasTools, useEnabledFeatures, useFeatureBindings };
150
149
  //# sourceMappingURL=useCanvasTools.js.map
@@ -1,9 +1,9 @@
1
1
  import { targetSizesPx } from "../../core/device/targets.js";
2
- import { chromeAffordances } from "../affordanceAt.js";
3
2
  import { useTargetBasePx } from "../../core/device/useTargetBasePx.js";
3
+ import { chromeAffordances } from "../affordanceAt.js";
4
4
  import { useMemo } from "react";
5
5
 
6
- //#region src/canvas/SceneCanvas/useChromeAffordances.ts
6
+ // src/canvas/SceneCanvas/useChromeAffordances.ts
7
7
  /** {@link chromeAffordances} sized by the device scale on the `targets` kit settings; an explicit `handleHitRadius` wins. */
8
8
  function useChromeAffordances(opts) {
9
9
  const { targetScale, handleHitRadius, rotationBadge, getAnchorState, edgeHandles } = opts;
@@ -26,6 +26,5 @@ function useChromeAffordances(opts) {
26
26
  ]);
27
27
  }
28
28
 
29
- //#endregion
30
29
  export { useChromeAffordances };
31
30
  //# sourceMappingURL=useChromeAffordances.js.map
@@ -1,10 +1,11 @@
1
+ import { useToolOptionTunings } from "../../tools/toolOptions.js";
1
2
  import { checkRequirements } from "../kitRequirements.js";
2
3
  import { useContributionFrameHooks } from "./contributionFrameHooks.js";
3
4
  import { useEffect, useRef } from "react";
4
5
  import { isDev } from "@weasel-js/react";
5
6
  import { useActionsRegistry, useMenuHost, useOffhandAction, useOptionalDepRegistry } from "@weasel-js/routing/react";
6
7
 
7
- //#region src/canvas/SceneCanvas/useContributionRoles.ts
8
+ // src/canvas/SceneCanvas/useContributionRoles.ts
8
9
  /**
9
10
  * `useContributionRoles` — installs the roles of every entry in the tools
10
11
  * registry that a surface owns rather than the dispatcher: its actions into the
@@ -94,6 +95,7 @@ function useContributionRoles(tools, api, versionCheck = "warn", surface = NO_SU
94
95
  toolRegistry,
95
96
  ambient
96
97
  ]);
98
+ useToolOptionTunings(registry, toolRegistry);
97
99
  const menuHost = useMenuHost();
98
100
  useEffect(() => {
99
101
  if (!menuHost) return;
@@ -136,6 +138,5 @@ function registerDeps(depRegistry, deps) {
136
138
  };
137
139
  }
138
140
 
139
- //#endregion
140
141
  export { contributionEntries, useContributionRoles };
141
142
  //# sourceMappingURL=useContributionRoles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useContributionRoles.js","names":[],"sources":["../../../src/canvas/SceneCanvas/useContributionRoles.ts"],"sourcesContent":["/**\n * `useContributionRoles` — installs the roles of every entry in the tools\n * registry that a surface owns rather than the dispatcher: its actions into the\n * `<ActionsProvider>`, its deps into the dep registry, and its `attach` against\n * the mounted canvas. Views are the fourth such role; `<SceneCanvas>` renders\n * those itself, because a view is a component.\n *\n * Tool hooks run wherever the consumer calls them, which may be outside any\n * registry. Declaring roles on the entry and installing them from in here keeps\n * the tool hook callable from anywhere.\n */\nimport { useEffect, useRef } from 'react';\nimport { useActionsRegistry, useMenuHost, useOffhandAction, useOptionalDepRegistry } from '@weasel-js/routing/react';\nimport type { DepRegistry } from '@weasel-js/routing/react';\nimport type { DepName } from 'interactions/actions/depSchema';\nimport type { ToolsApi } from '../../tools/overlayBinding';\nimport type { CanvasExtensionApi } from '../canvasExtension';\nimport type { SurfaceContribution } from '../surfaceContribution';\nimport { checkRequirements, type RequirementMismatch } from '../kitRequirements';\nimport { useContributionFrameHooks } from './contributionFrameHooks';\nimport { isDev } from '@weasel-js/react';\n\n/** How a surface treats an entry whose `requires` the running kit does not\n * meet: warn in development (the default), throw, or not check. */\nexport type VersionCheck = 'warn' | 'strict' | 'off';\n\nconst NO_DEPS = { get: () => undefined };\nconst warnedRequirements = new WeakSet<object>();\n\nfunction describeMismatch(m: RequirementMismatch): string {\n switch (m.reason) {\n case 'unsatisfied': return `${m.package} ${m.range} (running ${m.running})`;\n case 'invalid-range': return `${m.package} \"${m.range}\", which is not a range this check reads`;\n case 'unknown-package': return `${m.package} ${m.range}, but ${m.package} reports no version`;\n }\n}\n\nfunction checkEntryRequirements(entries: readonly SurfaceContribution[], mode: VersionCheck): void {\n if (mode === 'off') return;\n for (const entry of entries) {\n const requires = entry.requires;\n if (!requires) continue;\n if (mode === 'warn' && warnedRequirements.has(requires)) continue;\n const mismatches = checkRequirements(requires);\n if (mismatches.length === 0) continue;\n const message = `[weasel] contribution \"${entry.id}\" requires ${mismatches.map(describeMismatch).join('; ')}.`;\n if (mode === 'strict') throw new Error(message);\n warnedRequirements.add(requires);\n console.warn(message);\n }\n}\n\n/** Every entry the registry holds, registry and ambient alike. */\nexport function contributionEntries(tools: Pick<ToolsApi, 'registry' | 'ambient'>): SurfaceContribution[] {\n return [...Object.values(tools.registry), ...tools.ambient] as SurfaceContribution[];\n}\n\n/**\n * Keep one installation per key alive: install keys that appeared, tear down\n * keys that went. Keys are role objects the consumer owns, so an entry the\n * host re-wraps every render — `useTools` restates eligibility on a copy —\n * still installs once.\n */\nfunction useKeyedInstall(\n items: ReadonlyMap<object, () => () => void>,\n): void {\n const live = useRef(new Map<object, () => void>());\n useEffect(() => {\n for (const [key, teardown] of live.current) {\n if (items.has(key)) continue;\n teardown();\n live.current.delete(key);\n }\n for (const [key, install] of items) {\n if (live.current.has(key)) continue;\n live.current.set(key, install());\n }\n });\n useEffect(() => () => {\n for (const teardown of live.current.values()) teardown();\n live.current.clear();\n }, []);\n}\n\nconst NO_SURFACE: readonly SurfaceContribution[] = [];\n\n/**\n * `surface` is the canvas's own entries installed beside a takeover, which the\n * takeover's `ToolsApi` does not hold: their deps, `watch`, `attach`, frame\n * hooks and overlay install here, the overlay as a registered layer since no\n * tool set lists it. Their actions are the canvas's standard actions, so they\n * are not registered again.\n */\nexport function useContributionRoles(\n tools: ToolsApi,\n api: CanvasExtensionApi | null,\n versionCheck: VersionCheck = 'warn',\n surface: readonly SurfaceContribution[] = NO_SURFACE,\n): void {\n const registry = useActionsRegistry();\n const depRegistry = useOptionalDepRegistry();\n const { registry: toolRegistry, ambient } = tools;\n\n useEffect(() => {\n if (!registry) return;\n const unregisters: Array<() => void> = [];\n // Ambient entries included: an always-on entry owns actions its own\n // bindings reference exactly as a registry tool does, and leaving them out\n // gives the same silent failure this hook exists to prevent — a binding\n // pointing at an id nothing registered.\n for (const entry of contributionEntries({ registry: toolRegistry, ambient })) {\n for (const action of entry.actions ?? []) {\n unregisters.push(registry.register(action));\n }\n }\n return () => { for (const u of unregisters) u(); };\n }, [registry, toolRegistry, ambient]);\n\n const menuHost = useMenuHost();\n useEffect(() => {\n if (!menuHost) return;\n const releases: Array<() => void> = [];\n for (const [id, entry] of Object.entries(toolRegistry)) {\n for (const def of (entry as SurfaceContribution).menus ?? []) releases.push(menuHost.define(def, id));\n }\n for (const entry of ambient) {\n for (const def of (entry as SurfaceContribution).menus ?? []) releases.push(menuHost.define(def, null));\n }\n return () => { for (const r of releases) r(); };\n }, [menuHost, toolRegistry, ambient]);\n\n const entries = [...contributionEntries(tools), ...surface];\n // Development only for a warning; a strict surface asked to be stopped, so\n // it throws in every build.\n if (versionCheck === 'strict' || (versionCheck === 'warn' && isDev())) {\n checkEntryRequirements(entries, versionCheck);\n }\n\n const reader = depRegistry ?? NO_DEPS;\n const installs = new Map<object, () => () => void>();\n for (const entry of entries) {\n const deps = entry.deps;\n if (deps && depRegistry) installs.set(deps, () => registerDeps(depRegistry, deps));\n const watch = entry.watch;\n if (watch && depRegistry) installs.set(watch, () => watch(() => depRegistry.changed?.()));\n const attach = entry.attach;\n if (attach && api) installs.set(attach, () => attach(api, reader));\n }\n for (const entry of surface) {\n const overlay = entry.overlay;\n if (!overlay || !api) continue;\n for (const layer of Array.isArray(overlay) ? overlay : [overlay]) installs.set(layer, () => api.registerLayer(layer));\n }\n useKeyedInstall(installs);\n useContributionFrameHooks(entries, api, reader);\n\n // Tool assembly runs above the provider too, so its own registration of\n // held-key engagement finds no registry unless the consumer mounted one.\n useOffhandAction(contributionEntries(tools));\n}\n\nfunction registerDeps(\n depRegistry: DepRegistry,\n deps: NonNullable<SurfaceContribution['deps']>,\n): () => void {\n const unregisters = (Object.keys(deps) as DepName[]).map((name) =>\n depRegistry.register(name, deps[name] as never));\n return () => { for (const u of unregisters) u(); };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useContributionRoles.js","names":[],"sources":["../../../src/canvas/SceneCanvas/useContributionRoles.ts"],"sourcesContent":["/**\n * `useContributionRoles` — installs the roles of every entry in the tools\n * registry that a surface owns rather than the dispatcher: its actions into the\n * `<ActionsProvider>`, its deps into the dep registry, and its `attach` against\n * the mounted canvas. Views are the fourth such role; `<SceneCanvas>` renders\n * those itself, because a view is a component.\n *\n * Tool hooks run wherever the consumer calls them, which may be outside any\n * registry. Declaring roles on the entry and installing them from in here keeps\n * the tool hook callable from anywhere.\n */\nimport { useEffect, useRef } from 'react';\nimport { useActionsRegistry, useMenuHost, useOffhandAction, useOptionalDepRegistry } from '@weasel-js/routing/react';\nimport type { DepRegistry } from '@weasel-js/routing/react';\nimport type { DepName } from 'interactions/actions/depSchema';\nimport { useToolOptionTunings } from 'tools/toolOptions';\nimport type { ToolsApi } from '../../tools/overlayBinding';\nimport type { CanvasExtensionApi } from '../canvasExtension';\nimport type { SurfaceContribution } from '../surfaceContribution';\nimport { checkRequirements, type RequirementMismatch } from '../kitRequirements';\nimport { useContributionFrameHooks } from './contributionFrameHooks';\nimport { isDev } from '@weasel-js/react';\n\n/** How a surface treats an entry whose `requires` the running kit does not\n * meet: warn in development (the default), throw, or not check. */\nexport type VersionCheck = 'warn' | 'strict' | 'off';\n\nconst NO_DEPS = { get: () => undefined };\nconst warnedRequirements = new WeakSet<object>();\n\nfunction describeMismatch(m: RequirementMismatch): string {\n switch (m.reason) {\n case 'unsatisfied': return `${m.package} ${m.range} (running ${m.running})`;\n case 'invalid-range': return `${m.package} \"${m.range}\", which is not a range this check reads`;\n case 'unknown-package': return `${m.package} ${m.range}, but ${m.package} reports no version`;\n }\n}\n\nfunction checkEntryRequirements(entries: readonly SurfaceContribution[], mode: VersionCheck): void {\n if (mode === 'off') return;\n for (const entry of entries) {\n const requires = entry.requires;\n if (!requires) continue;\n if (mode === 'warn' && warnedRequirements.has(requires)) continue;\n const mismatches = checkRequirements(requires);\n if (mismatches.length === 0) continue;\n const message = `[weasel] contribution \"${entry.id}\" requires ${mismatches.map(describeMismatch).join('; ')}.`;\n if (mode === 'strict') throw new Error(message);\n warnedRequirements.add(requires);\n console.warn(message);\n }\n}\n\n/** Every entry the registry holds, registry and ambient alike. */\nexport function contributionEntries(tools: Pick<ToolsApi, 'registry' | 'ambient'>): SurfaceContribution[] {\n return [...Object.values(tools.registry), ...tools.ambient] as SurfaceContribution[];\n}\n\n/**\n * Keep one installation per key alive: install keys that appeared, tear down\n * keys that went. Keys are role objects the consumer owns, so an entry the\n * host re-wraps every render — `useTools` restates eligibility on a copy —\n * still installs once.\n */\nfunction useKeyedInstall(\n items: ReadonlyMap<object, () => () => void>,\n): void {\n const live = useRef(new Map<object, () => void>());\n useEffect(() => {\n for (const [key, teardown] of live.current) {\n if (items.has(key)) continue;\n teardown();\n live.current.delete(key);\n }\n for (const [key, install] of items) {\n if (live.current.has(key)) continue;\n live.current.set(key, install());\n }\n });\n useEffect(() => () => {\n for (const teardown of live.current.values()) teardown();\n live.current.clear();\n }, []);\n}\n\nconst NO_SURFACE: readonly SurfaceContribution[] = [];\n\n/**\n * `surface` is the canvas's own entries installed beside a takeover, which the\n * takeover's `ToolsApi` does not hold: their deps, `watch`, `attach`, frame\n * hooks and overlay install here, the overlay as a registered layer since no\n * tool set lists it. Their actions are the canvas's standard actions, so they\n * are not registered again.\n */\nexport function useContributionRoles(\n tools: ToolsApi,\n api: CanvasExtensionApi | null,\n versionCheck: VersionCheck = 'warn',\n surface: readonly SurfaceContribution[] = NO_SURFACE,\n): void {\n const registry = useActionsRegistry();\n const depRegistry = useOptionalDepRegistry();\n const { registry: toolRegistry, ambient } = tools;\n\n useEffect(() => {\n if (!registry) return;\n const unregisters: Array<() => void> = [];\n // Ambient entries included: an always-on entry owns actions its own\n // bindings reference exactly as a registry tool does, and leaving them out\n // gives the same silent failure this hook exists to prevent — a binding\n // pointing at an id nothing registered.\n for (const entry of contributionEntries({ registry: toolRegistry, ambient })) {\n for (const action of entry.actions ?? []) {\n unregisters.push(registry.register(action));\n }\n }\n return () => { for (const u of unregisters) u(); };\n }, [registry, toolRegistry, ambient]);\n useToolOptionTunings(registry, toolRegistry);\n\n const menuHost = useMenuHost();\n useEffect(() => {\n if (!menuHost) return;\n const releases: Array<() => void> = [];\n for (const [id, entry] of Object.entries(toolRegistry)) {\n for (const def of (entry as SurfaceContribution).menus ?? []) releases.push(menuHost.define(def, id));\n }\n for (const entry of ambient) {\n for (const def of (entry as SurfaceContribution).menus ?? []) releases.push(menuHost.define(def, null));\n }\n return () => { for (const r of releases) r(); };\n }, [menuHost, toolRegistry, ambient]);\n\n const entries = [...contributionEntries(tools), ...surface];\n // Development only for a warning; a strict surface asked to be stopped, so\n // it throws in every build.\n if (versionCheck === 'strict' || (versionCheck === 'warn' && isDev())) {\n checkEntryRequirements(entries, versionCheck);\n }\n\n const reader = depRegistry ?? NO_DEPS;\n const installs = new Map<object, () => () => void>();\n for (const entry of entries) {\n const deps = entry.deps;\n if (deps && depRegistry) installs.set(deps, () => registerDeps(depRegistry, deps));\n const watch = entry.watch;\n if (watch && depRegistry) installs.set(watch, () => watch(() => depRegistry.changed?.()));\n const attach = entry.attach;\n if (attach && api) installs.set(attach, () => attach(api, reader));\n }\n for (const entry of surface) {\n const overlay = entry.overlay;\n if (!overlay || !api) continue;\n for (const layer of Array.isArray(overlay) ? overlay : [overlay]) installs.set(layer, () => api.registerLayer(layer));\n }\n useKeyedInstall(installs);\n useContributionFrameHooks(entries, api, reader);\n\n // Tool assembly runs above the provider too, so its own registration of\n // held-key engagement finds no registry unless the consumer mounted one.\n useOffhandAction(contributionEntries(tools));\n}\n\nfunction registerDeps(\n depRegistry: DepRegistry,\n deps: NonNullable<SurfaceContribution['deps']>,\n): () => void {\n const unregisters = (Object.keys(deps) as DepName[]).map((name) =>\n depRegistry.register(name, deps[name] as never));\n return () => { for (const u of unregisters) u(); };\n}\n"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
- import { deriveParallaxView } from "../../core/viewport/parallax.js";
2
1
  import { composeChildFrame, composesFrames } from "../../core/scene/composeFrame.js";
3
- import { definesFrame, effectivePose } from "../../core/scene/effectivePose.js";
4
2
  import { viewPoseAdapter } from "../../core/scene/scrollOffsets.js";
5
- import { wrapWithPoseRotation } from "../poseRotation.js";
3
+ import { definesFrame, effectivePose } from "../../core/scene/effectivePose.js";
4
+ import { deriveParallaxView } from "../../core/viewport/parallax.js";
6
5
  import { isCustomEntry } from "../layerSlots.js";
6
+ import { wrapWithPoseRotation } from "../poseRotation.js";
7
7
  import { useMemo } from "react";
8
8
  import { useLatest } from "@weasel-js/react";
9
9
 
10
- //#region src/canvas/SceneCanvas/useDepartureGhostLayer.ts
10
+ // src/canvas/SceneCanvas/useDepartureGhostLayer.ts
11
11
  /**
12
12
  * The layer `<SceneCanvas poseTransition exit>` draws removed nodes leaving
13
13
  * on: each ghost through the scene slot's `drawOne`, at the pose and opacity
@@ -60,6 +60,5 @@ function useDepartureGhostLayer(args) {
60
60
  ]);
61
61
  }
62
62
 
63
- //#endregion
64
63
  export { useDepartureGhostLayer };
65
64
  //# sourceMappingURL=useDepartureGhostLayer.js.map
@@ -1,15 +1,15 @@
1
1
  import { viewToTransform } from "../../core/viewport/view.js";
2
2
  import { worldToScreen } from "../../core/viewport/viewTransform.js";
3
- import { OVERLAY_ROLE_STROKES } from "../overlayRoleStrokes.js";
4
3
  import { resolveOverlays } from "../../interactions/actions/resolveOverlays.js";
5
4
  import { gestureOverlaysFrom, isVisibleFrom } from "../drawEnvelope.js";
6
5
  import { insertPreviewCommands } from "./insertPreviewCommands.js";
6
+ import { OVERLAY_ROLE_STROKES } from "../overlayRoleStrokes.js";
7
7
  import { brushOverlayCommands } from "./brushOverlay.js";
8
8
  import { polygonFromPoints, polylineFromPoints } from "@weasel-js/geom";
9
9
  import { useEffect, useMemo, useReducer } from "react";
10
10
  import { useLatest } from "@weasel-js/react";
11
11
 
12
- //#region src/canvas/SceneCanvas/useDispatcherOverlayLayer.ts
12
+ // src/canvas/SceneCanvas/useDispatcherOverlayLayer.ts
13
13
  /**
14
14
  * Dispatcher overlay render layer for `<SceneCanvas>`.
15
15
  *
@@ -136,6 +136,5 @@ function useDispatcherOverlayLayer(args) {
136
136
  }), [styleRef]);
137
137
  }
138
138
 
139
- //#endregion
140
139
  export { useDispatcherOverlayLayer };
141
140
  //# sourceMappingURL=useDispatcherOverlayLayer.js.map
@@ -1,7 +1,7 @@
1
1
  import { useKeyState } from "../../input/useKeyState.js";
2
2
  import { useMemo } from "react";
3
3
 
4
- //#region src/canvas/SceneCanvas/useHeldModifiers.ts
4
+ // src/canvas/SceneCanvas/useHeldModifiers.ts
5
5
  /** The modifier keys held, for a surface's rule context. */
6
6
  /** The modifiers held anywhere in the window, a text field included: a rule
7
7
  * is asked about the keyboard, not about where focus is. `subscribe` reports
@@ -22,6 +22,5 @@ function useHeldModifiers() {
22
22
  }), [keys]);
23
23
  }
24
24
 
25
- //#endregion
26
25
  export { useHeldModifiers };
27
26
  //# sourceMappingURL=useHeldModifiers.js.map
@@ -0,0 +1,41 @@
1
+ import { undeclaredMagnifications } from "../../interactions/actions/magnification.js";
2
+ import { isDev } from "@weasel-js/registry";
3
+ import { useEffect } from "react";
4
+
5
+ // src/canvas/SceneCanvas/useMagnificationCheck.ts
6
+ var SETTLE_MS = 250;
7
+ var times = (n) => `${Number(n.toFixed(3))}×`;
8
+ /**
9
+ * In development, warns once per container and size when `scene` draws a
10
+ * container's children at a magnification its unit scopes do not declare in
11
+ * `drawnAt`: what silently turned a 20″ cabinet into 30″ of board. Checks
12
+ * after edits settle rather than on every frame of a drag.
13
+ */
14
+ function useMagnificationCheck(scene) {
15
+ useEffect(() => {
16
+ if (!isDev()) return;
17
+ const warned = /* @__PURE__ */ new Set();
18
+ let timer = null;
19
+ const check = () => {
20
+ timer = null;
21
+ for (const { id, drawn, declared } of undeclaredMagnifications(scene)) {
22
+ const size = drawn.x === drawn.y ? times(drawn.x) : `${times(drawn.x)} by ${times(drawn.y)}`;
23
+ const key = `${id}:${size}:${declared}`;
24
+ if (warned.has(key)) continue;
25
+ warned.add(key);
26
+ console.warn(`weasel: node "${id}" draws its children at ${size}, but its unit scopes declare ${times(declared)}. Set \`units.drawnAt\` on the node whose transform scales them, or correct the transform.`);
27
+ }
28
+ };
29
+ check();
30
+ const unsubscribe = scene.subscribe(() => {
31
+ timer ??= setTimeout(check, SETTLE_MS);
32
+ });
33
+ return () => {
34
+ unsubscribe();
35
+ if (timer !== null) clearTimeout(timer);
36
+ };
37
+ }, [scene]);
38
+ }
39
+
40
+ export { useMagnificationCheck };
41
+ //# sourceMappingURL=useMagnificationCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMagnificationCheck.js","names":[],"sources":["../../../src/canvas/SceneCanvas/useMagnificationCheck.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { isDev } from '@weasel-js/registry';\nimport type { Scene } from 'core/scene/types';\nimport { undeclaredMagnifications } from 'interactions/actions/magnification';\n\nconst SETTLE_MS = 250;\nconst times = (n: number): string => `${Number(n.toFixed(3))}×`;\n\n/**\n * In development, warns once per container and size when `scene` draws a\n * container's children at a magnification its unit scopes do not declare in\n * `drawnAt`: what silently turned a 20″ cabinet into 30″ of board. Checks\n * after edits settle rather than on every frame of a drag.\n */\nexport function useMagnificationCheck(scene: Scene<unknown, string, unknown>): void {\n useEffect(() => {\n if (!isDev()) return;\n const warned = new Set<string>();\n let timer: ReturnType<typeof setTimeout> | null = null;\n const check = (): void => {\n timer = null;\n for (const { id, drawn, declared } of undeclaredMagnifications(scene)) {\n const size = drawn.x === drawn.y ? times(drawn.x) : `${times(drawn.x)} by ${times(drawn.y)}`;\n const key = `${id}:${size}:${declared}`;\n if (warned.has(key)) continue;\n warned.add(key);\n console.warn(\n `weasel: node \"${id}\" draws its children at ${size}, but its unit scopes declare ${times(declared)}. `\n + 'Set `units.drawnAt` on the node whose transform scales them, or correct the transform.',\n );\n }\n };\n check();\n const unsubscribe = scene.subscribe(() => {\n timer ??= setTimeout(check, SETTLE_MS);\n });\n return () => {\n unsubscribe();\n if (timer !== null) clearTimeout(timer);\n };\n }, [scene]);\n}\n"],"mappings":";;;;;AAKA,IAAM,YAAY;AAClB,IAAM,SAAS,MAAsB,GAAG,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE;;;;;;;AAQ7D,SAAgB,sBAAsB,OAA8C;CAClF,gBAAgB;EACd,IAAI,CAAC,MAAM,GAAG;EACd,MAAM,yBAAS,IAAI,IAAY;EAC/B,IAAI,QAA8C;EAClD,MAAM,cAAoB;GACxB,QAAQ;GACR,KAAK,MAAM,EAAE,IAAI,OAAO,cAAc,yBAAyB,KAAK,GAAG;IACrE,MAAM,OAAO,MAAM,MAAM,MAAM,IAAI,MAAM,MAAM,CAAC,IAAI,GAAG,MAAM,MAAM,CAAC,EAAE,MAAM,MAAM,MAAM,CAAC;IACzF,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG;IAC7B,IAAI,OAAO,IAAI,GAAG,GAAG;IACrB,OAAO,IAAI,GAAG;IACd,QAAQ,KACN,iBAAiB,GAAG,0BAA0B,KAAK,gCAAgC,MAAM,QAAQ,EAAE,2FAErG;GACF;EACF;EACA,MAAM;EACN,MAAM,cAAc,MAAM,gBAAgB;GACxC,UAAU,WAAW,OAAO,SAAS;EACvC,CAAC;EACD,aAAa;GACX,YAAY;GACZ,IAAI,UAAU,MAAM,aAAa,KAAK;EACxC;CACF,GAAG,CAAC,KAAK,CAAC;AACZ"}
@@ -1,7 +1,7 @@
1
1
  import { makeGetNodeAtPoint } from "../getNodeAtPoint.js";
2
2
  import { useMemo } from "react";
3
3
 
4
- //#region src/canvas/SceneCanvas/useNodeAtPoint.ts
4
+ // src/canvas/SceneCanvas/useNodeAtPoint.ts
5
5
  /**
6
6
  * The node under a world point with its routing kind, resolved through the
7
7
  * select tool's own single-hit picker, so `onClick`, `onDoubleClick`, hover,
@@ -23,6 +23,5 @@ function useNodeAtPoint(args) {
23
23
  ]);
24
24
  }
25
25
 
26
- //#endregion
27
26
  export { useNodeAtPoint };
28
27
  //# sourceMappingURL=useNodeAtPoint.js.map
@@ -1,8 +1,8 @@
1
- import { inferredNodeRouting } from "./defaultNodeRouting.js";
2
1
  import { createNodeRouting } from "../../core/scene/NodeRouting.js";
2
+ import { inferredNodeRouting } from "./defaultNodeRouting.js";
3
3
  import { useMemo } from "react";
4
4
 
5
- //#region src/canvas/SceneCanvas/useNodeKinds.ts
5
+ // src/canvas/SceneCanvas/useNodeKinds.ts
6
6
  /**
7
7
  * The canvas's routing-trait classifier, by node data and by node id, so
8
8
  * `target: 'kind:text'` on a binding speaks the vocabulary of `Hit.kind`.
@@ -30,6 +30,5 @@ function useNodeKinds(scene, routing) {
30
30
  };
31
31
  }
32
32
 
33
- //#endregion
34
33
  export { useNodeKinds };
35
34
  //# sourceMappingURL=useNodeKinds.js.map
@@ -1,21 +1,21 @@
1
- import { deriveParallaxView } from "../../core/viewport/parallax.js";
2
- import { inheritedPaintOf, inheritsPaint, sceneAncestors } from "../../core/scene/inheritedPaint.js";
3
- import { withShownData } from "../../core/scene/nodeAsShown.js";
4
- import { planeTransform } from "../planeClips.js";
5
- import { wrapWithPoseRotation } from "../poseRotation.js";
6
- import { ownClipOf } from "../ownClip.js";
7
- import { scenePaintedPoseOf } from "../derivedPath.js";
8
- import { scenePlaneOf } from "../scenePickSource.js";
9
- import { copiesAbove } from "../copiesAbove.js";
10
1
  import { isCustomEntry } from "../layerSlots.js";
2
+ import { ownClipOf } from "../ownClip.js";
3
+ import { wrapWithPoseRotation } from "../poseRotation.js";
11
4
  import { previewSourcesFrom } from "../drawEnvelope.js";
12
5
  import { flattenPreviews, resolvePreviews } from "../../interactions/actions/resolvePreviews.js";
6
+ import { scenePlaneOf } from "../scenePickSource.js";
7
+ import { planeTransform } from "../planeClips.js";
8
+ import { deriveParallaxView } from "../../core/viewport/parallax.js";
9
+ import { copiesAbove } from "../copiesAbove.js";
10
+ import { scenePaintedPoseOf } from "../derivedPath.js";
11
+ import { inheritedPaintOf, inheritsPaint, sceneAncestors } from "../../core/scene/inheritedPaint.js";
12
+ import { withShownData } from "../../core/scene/nodeAsShown.js";
13
13
  import "@weasel-js/renderer";
14
14
  import { mat3 as mat3$1 } from "@weasel-js/geom";
15
15
  import { useEffect, useMemo, useReducer } from "react";
16
16
  import { useLatest } from "@weasel-js/react";
17
17
 
18
- //#region src/canvas/SceneCanvas/usePreviewGhostLayer.ts
18
+ // src/canvas/SceneCanvas/usePreviewGhostLayer.ts
19
19
  /**
20
20
  * Preview-ghost render layer for `<SceneCanvas>`. Renders in-flight gesture
21
21
  * poses on top of the committed scene by reusing the scene slot's `drawOne`.
@@ -110,6 +110,5 @@ function usePreviewGhostLayer(args) {
110
110
  }), [sceneRef, sceneSlotRef]);
111
111
  }
112
112
 
113
- //#endregion
114
113
  export { usePreviewGhostLayer };
115
114
  //# sourceMappingURL=usePreviewGhostLayer.js.map
@@ -2,7 +2,7 @@ import { IDENTITY_VIEW, useOptionalViewRegistry } from "../viewRegistry.js";
2
2
  import { useCallback, useState } from "react";
3
3
  import { assignRef } from "@weasel-js/react";
4
4
 
5
- //#region src/canvas/SceneCanvas/useSceneCanvasHandle.ts
5
+ // src/canvas/SceneCanvas/useSceneCanvasHandle.ts
6
6
  /** Views added through the handle rather than declared as props or children. */
7
7
  function useAddedViews() {
8
8
  const surfaceViewRegistry = useOptionalViewRegistry();
@@ -75,6 +75,5 @@ function useSceneCanvasHandle(args) {
75
75
  };
76
76
  }
77
77
 
78
- //#endregion
79
78
  export { useAddedViews, useSceneCanvasHandle };
80
79
  //# sourceMappingURL=useSceneCanvasHandle.js.map
@@ -1,10 +1,8 @@
1
- import { targetSizesPx } from "../../core/device/targets.js";
2
- import { drawnBoundsScene } from "../derivedPath.js";
3
- import { createSnapOutcomeStore } from "../../domains/snap/outcomeStore.js";
4
- import { builtLayersOf, isCustomEntry } from "../layerSlots.js";
5
- import { useTargetBasePx } from "../../core/device/useTargetBasePx.js";
6
1
  import { usePathEditOverlayLayer } from "../../domains/paths/usePathEdit.js";
2
+ import { builtLayersOf, isCustomEntry } from "../layerSlots.js";
7
3
  import { createSlopsDebugLayer } from "../slopsDebugLayer.js";
4
+ import { useTargetBasePx } from "../../core/device/useTargetBasePx.js";
5
+ import { targetSizesPx } from "../../core/device/targets.js";
8
6
  import { layersOverPresets, mergeLayersWithDefaults } from "./mergeLayers.js";
9
7
  import { useDispatcherOverlayLayer } from "./useDispatcherOverlayLayer.js";
10
8
  import { usePreviewGhostLayer } from "./usePreviewGhostLayer.js";
@@ -13,11 +11,13 @@ import { useEffectSourcesLayer } from "../../domains/pathEffects/useEffectSource
13
11
  import { usePoseTransition } from "../../animation/poseTransition.js";
14
12
  import { useSceneSlotLayers } from "./useSceneSlotLayers.js";
15
13
  import { useSelectionOverlayLayer } from "./useSelectionOverlayLayer.js";
14
+ import { drawnBoundsScene } from "../derivedPath.js";
16
15
  import { useEnteredGroupFrameLayer } from "../../domains/selection/enteredGroupFrame.js";
16
+ import { createSnapOutcomeStore } from "../../domains/snap/outcomeStore.js";
17
17
  import { createSnapReadoutLayer } from "../../domains/snap/readoutLayer.js";
18
18
  import { useMemo, useRef, useState } from "react";
19
19
 
20
- //#region src/canvas/SceneCanvas/useSceneCanvasLayers.ts
20
+ // src/canvas/SceneCanvas/useSceneCanvasLayers.ts
21
21
  /**
22
22
  * The layer map `<SceneCanvas>` hands `<Canvas>`: the caller's `layers` over
23
23
  * the kit defaults, with the scene and selection-overlay slots built, and the
@@ -148,6 +148,5 @@ function useSceneCanvasLayers(args) {
148
148
  };
149
149
  }
150
150
 
151
- //#endregion
152
151
  export { useSceneCanvasLayers };
153
152
  //# sourceMappingURL=useSceneCanvasLayers.js.map
@@ -2,7 +2,7 @@ import { isSelectedNode } from "../../domains/paths/pathEditState.js";
2
2
  import { usePathEditState } from "../../domains/paths/usePathEdit.js";
3
3
  import { useMemo } from "react";
4
4
 
5
- //#region src/canvas/SceneCanvas/useSceneCanvasPathEdit.ts
5
+ // src/canvas/SceneCanvas/useSceneCanvasPathEdit.ts
6
6
  /**
7
7
  * The canvas's path-edit state, and the select tool options that defer shift-click to it while
8
8
  * a path is being anchor-edited.
@@ -25,6 +25,5 @@ function useSceneCanvasPathEdit(args) {
25
25
  };
26
26
  }
27
27
 
28
- //#endregion
29
28
  export { useSceneCanvasPathEdit };
30
29
  //# sourceMappingURL=useSceneCanvasPathEdit.js.map
@@ -1,6 +1,6 @@
1
1
  import { useCanvasTools, useFeatureBindings } from "./useCanvasTools.js";
2
2
 
3
- //#region src/canvas/SceneCanvas/useSceneCanvasTools.ts
3
+ // src/canvas/SceneCanvas/useSceneCanvasTools.ts
4
4
  /** The canvas's tools, and the contributions and standard actions its presets bring. */
5
5
  function useSceneCanvasTools(args) {
6
6
  const { props, select, enabled } = args;
@@ -38,6 +38,5 @@ function useSceneCanvasTools(args) {
38
38
  };
39
39
  }
40
40
 
41
- //#endregion
42
41
  export { useSceneCanvasTools };
43
42
  //# sourceMappingURL=useSceneCanvasTools.js.map
@@ -1,14 +1,15 @@
1
- import { useOptionalViewRegistry } from "../viewRegistry.js";
2
- import { worldPointAt } from "./worldPointAt.js";
3
- import { PRESET_OWNED_CHROME } from "./presets/chrome.js";
4
1
  import { never } from "../../domains/chrome-caps/conditions.js";
5
- import { presetChromeRules } from "./features.js";
6
2
  import { useHoverTracking } from "../../domains/chrome-caps/useHoverTracking.js";
7
3
  import { useChromeCaps } from "../../domains/chrome-caps/useChromeCaps.js";
4
+ import { useOptionalViewRegistry } from "../viewRegistry.js";
5
+ import { presetChromeRules } from "./features.js";
6
+ import { PRESET_OWNED_CHROME } from "./presets/chrome.js";
7
+ import { worldPointAt } from "./worldPointAt.js";
8
+ import { useChromeRulesDep } from "../deps/chromeRules.js";
8
9
  import { useCallback, useMemo } from "react";
9
10
  import { useLatest } from "@weasel-js/react";
10
11
 
11
- //#region src/canvas/SceneCanvas/useSceneChrome.ts
12
+ // src/canvas/SceneCanvas/useSceneChrome.ts
12
13
  /**
13
14
  * The node under the pointer, for `RuleCtx.hover`. One lookup, not a
14
15
  * client-to-world thunk beside a picker: the point and the camera its
@@ -66,6 +67,15 @@ function useChromeRules(args) {
66
67
  enabled
67
68
  ]);
68
69
  }
70
+ var hiddenSets = /* @__PURE__ */ new WeakMap();
71
+ /** The chrome the active tool hides (`ToolDef.hides`), or undefined. */
72
+ function hiddenChromeOf(tools) {
73
+ const hides = tools.active ? tools.registry[tools.active]?.hides : void 0;
74
+ if (!hides) return void 0;
75
+ let set = hiddenSets.get(hides);
76
+ if (!set) hiddenSets.set(hides, set = new Set(hides));
77
+ return set;
78
+ }
69
79
  /** The chrome-caps answers for the surface's own view. */
70
80
  function useSurfaceChromeCaps(args) {
71
81
  const { viewRef, dispatcher } = args;
@@ -87,8 +97,8 @@ function useSurfaceChromeCaps(args) {
87
97
  };
88
98
  }
89
99
  /**
90
- * The surface's chrome: hover tracking, the visibility rules, and the chrome-caps answers they
91
- * feed. `source` is the chrome-caps source minus the parts built here.
100
+ * The surface's chrome: hover tracking, the visibility rules with the `chromeRules` dep that sets
101
+ * them at run time, and the chrome-caps answers they feed. `source` is the chrome-caps source minus the parts built here.
92
102
  */
93
103
  function useSceneCanvasChrome(args) {
94
104
  const { rules, viewRef } = args;
@@ -97,10 +107,11 @@ function useSceneCanvasChrome(args) {
97
107
  viewRef,
98
108
  enabled: rules.chromeVisibility !== void 0 || args.hover.onChange !== void 0
99
109
  });
110
+ const chromeRules = useChromeRulesDep(useChromeRules(rules));
100
111
  return {
101
112
  ...useSurfaceChromeCaps({
102
113
  source: {
103
- rules: useChromeRules(rules),
114
+ rules: chromeRules.rules,
104
115
  getHover,
105
116
  ...args.source
106
117
  },
@@ -108,10 +119,10 @@ function useSceneCanvasChrome(args) {
108
119
  viewRef,
109
120
  dispatcher: args.dispatcher
110
121
  }),
111
- trackHoverOn
122
+ trackHoverOn,
123
+ chromeRules: chromeRules.dep
112
124
  };
113
125
  }
114
126
 
115
- //#endregion
116
- export { useChromeRules, useSceneCanvasChrome, useSceneHover, useSurfaceChromeCaps };
127
+ export { hiddenChromeOf, useChromeRules, useSceneCanvasChrome, useSceneHover, useSurfaceChromeCaps };
117
128
  //# sourceMappingURL=useSceneChrome.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSceneChrome.js","names":[],"sources":["../../../src/canvas/SceneCanvas/useSceneChrome.ts"],"sourcesContent":["import { useCallback, useMemo, type RefObject } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type { Dispatcher, RuleCtx } from '@weasel-js/routing';\nimport type { NodeId } from 'core/scene/types';\nimport type { View } from 'core/viewport/view';\nimport { never, useHoverTracking, type HoverTracking, type VisibilityRules } from 'domains/chrome-caps';\nimport {\n useChromeCaps,\n type ChromeCaps,\n type ChromeCapsSource,\n type ViewRuleInputs,\n} from 'domains/chrome-caps/useChromeCaps';\nimport type { CanvasExtensionApi } from '../canvasExtension';\nimport { useOptionalViewRegistry } from '../viewRegistry';\nimport { presetChromeRules, type EnabledPresets } from './features';\nimport { PRESET_OWNED_CHROME } from './presets/chrome';\nimport type { NodeAtPoint } from './useNodeAtPoint';\nimport { worldPointAt } from './worldPointAt';\n\n/**\n * The node under the pointer, for `RuleCtx.hover`. One lookup, not a\n * client-to-world thunk beside a picker: the point and the camera its\n * tolerance converts against have to come from the same view. Hover has no\n * pointer to capture, so whichever view is under the cursor owns the point.\n */\nexport function useSceneHover(args: {\n canvasApiRef: RefObject<Pick<CanvasExtensionApi, 'clientToWorld'> | null>;\n /** The surface's own camera, for a point no declared view claims. */\n viewRef: { readonly current: View };\n nodeAtPointRef: { readonly current: NodeAtPoint | undefined };\n enabled: boolean;\n onChange?: (id: NodeId | null) => void;\n}): HoverTracking {\n const { canvasApiRef, viewRef, nodeAtPointRef, enabled, onChange } = args;\n const surfaceViewRegistry = useOptionalViewRegistry();\n return useHoverTracking({\n nodeAtClientPoint: (clientX, clientY) => {\n const api = canvasApiRef.current;\n if (!api) return null;\n const target = surfaceViewRegistry?.resolver.at(null, clientX, clientY);\n const view = target?.view ?? viewRef.current;\n const [x, y] = worldPointAt(api, target, clientX, clientY);\n // A view judges its own layers; the surface's gate is the picker's default.\n const reg = target?.id != null\n ? surfaceViewRegistry?.list().find((r) => r.id === target.id)\n : undefined;\n const hit = nodeAtPointRef.current?.(\n { x, y }, reg ? { scale: view.scale, layerIsPainted: reg.layerIsPainted } : view,\n );\n return hit ? { id: hit.id as NodeId } : null;\n },\n enabled,\n ...(onChange ? { onChange } : {}),\n });\n}\n\n/**\n * The surface's chrome-visibility rules: the presets' defaults under the\n * consumer's `chromeVisibility`, which wins.\n *\n * An unselectable canvas hides the marquee and lasso by default: every\n * selection write no-ops there, so the select tool's empty-drag binding still\n * claims the gesture, keeping it from falling through to an ambient drag such\n * as insert, but paints nothing.\n */\nexport function useChromeRules(args: {\n enabled: EnabledPresets;\n selectable: boolean;\n chromeVisibility: VisibilityRules | undefined;\n}): VisibilityRules {\n const { enabled, selectable, chromeVisibility } = args;\n return useMemo(() => {\n const defaults = presetChromeRules(enabled, PRESET_OWNED_CHROME);\n if (!selectable) {\n defaults['action.marquee'] = never;\n defaults['action.lasso'] = never;\n }\n return { ...defaults, ...chromeVisibility };\n }, [chromeVisibility, selectable, enabled]);\n}\n\n/** The chrome-caps answers for the surface's own view. */\nexport function useSurfaceChromeCaps(args: {\n source: ChromeCapsSource;\n /** The selection as rendered. `SelectionApi.current` can be a live getter\n * that runs ahead of the commit the painted chrome was built from. */\n selection: readonly NodeId[];\n viewRef: { readonly current: View };\n dispatcher: Pick<Dispatcher, 'getActiveAction'>;\n}): {\n chromeCaps: ChromeCaps;\n getIsVisible: () => (id: string) => boolean;\n getRuleCtx: () => RuleCtx | undefined;\n} {\n const { viewRef, dispatcher } = args;\n const chromeCaps = useChromeCaps(args.source);\n const committedSelectionRef = useLatest(args.selection);\n const currentRuleInputs = useCallback((): ViewRuleInputs => ({\n selection: committedSelectionRef.current,\n view: viewRef.current,\n action: dispatcher.getActiveAction(),\n }), [dispatcher, committedSelectionRef, viewRef]);\n const getIsVisible = useCallback(\n (): ((id: string) => boolean) => chromeCaps.isVisible(currentRuleInputs()),\n [chromeCaps, currentRuleInputs],\n );\n const getRuleCtx = useCallback(\n () => chromeCaps.ruleCtx(currentRuleInputs()),\n [chromeCaps, currentRuleInputs],\n );\n return { chromeCaps, getIsVisible, getRuleCtx };\n}\n\n/**\n * The surface's chrome: hover tracking, the visibility rules, and the chrome-caps answers they\n * feed. `source` is the chrome-caps source minus the parts built here.\n */\nexport function useSceneCanvasChrome(args: {\n source: Omit<ChromeCapsSource, 'rules' | 'getHover'>;\n rules: Parameters<typeof useChromeRules>[0];\n hover: Omit<Parameters<typeof useSceneHover>[0], 'enabled' | 'viewRef'>;\n selection: readonly NodeId[];\n viewRef: { readonly current: View };\n dispatcher: Pick<Dispatcher, 'getActiveAction'>;\n}) {\n const { rules, viewRef } = args;\n const { getHover, canvasRef: trackHoverOn } = useSceneHover({\n ...args.hover, viewRef, enabled: rules.chromeVisibility !== undefined || args.hover.onChange !== undefined,\n });\n const chromeRules = useChromeRules(rules);\n const caps = useSurfaceChromeCaps({\n source: { rules: chromeRules, getHover, ...args.source },\n selection: args.selection,\n viewRef,\n dispatcher: args.dispatcher,\n });\n return { ...caps, trackHoverOn };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAyBA,SAAgB,cAAc,MAOZ;CAChB,MAAM,EAAE,cAAc,SAAS,gBAAgB,SAAS,aAAa;CACrE,MAAM,sBAAsB,wBAAwB;CACpD,OAAO,iBAAiB;EACtB,oBAAoB,SAAS,YAAY;GACvC,MAAM,MAAM,aAAa;GACzB,IAAI,CAAC,KAAK,OAAO;GACjB,MAAM,SAAS,qBAAqB,SAAS,GAAG,MAAM,SAAS,OAAO;GACtE,MAAM,OAAO,QAAQ,QAAQ,QAAQ;GACrC,MAAM,CAAC,GAAG,KAAK,aAAa,KAAK,QAAQ,SAAS,OAAO;GAEzD,MAAM,MAAM,QAAQ,MAAM,OACtB,qBAAqB,KAAK,CAAC,CAAC,MAAM,MAAM,EAAE,OAAO,OAAO,EAAE,IAC1D;GACJ,MAAM,MAAM,eAAe,UACzB;IAAE;IAAG;GAAE,GAAG,MAAM;IAAE,OAAO,KAAK;IAAO,gBAAgB,IAAI;GAAe,IAAI,IAC9E;GACA,OAAO,MAAM,EAAE,IAAI,IAAI,GAAa,IAAI;EAC1C;EACA;EACA,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;CACjC,CAAC;AACH;;;;;;;;;;AAWA,SAAgB,eAAe,MAIX;CAClB,MAAM,EAAE,SAAS,YAAY,qBAAqB;CAClD,OAAO,cAAc;EACnB,MAAM,WAAW,kBAAkB,SAAS,mBAAmB;EAC/D,IAAI,CAAC,YAAY;GACf,SAAS,oBAAoB;GAC7B,SAAS,kBAAkB;EAC7B;EACA,OAAO;GAAE,GAAG;GAAU,GAAG;EAAiB;CAC5C,GAAG;EAAC;EAAkB;EAAY;CAAO,CAAC;AAC5C;;AAGA,SAAgB,qBAAqB,MAWnC;CACA,MAAM,EAAE,SAAS,eAAe;CAChC,MAAM,aAAa,cAAc,KAAK,MAAM;CAC5C,MAAM,wBAAwB,UAAU,KAAK,SAAS;CACtD,MAAM,oBAAoB,mBAAmC;EAC3D,WAAW,sBAAsB;EACjC,MAAM,QAAQ;EACd,QAAQ,WAAW,gBAAgB;CACrC,IAAI;EAAC;EAAY;EAAuB;CAAO,CAAC;CAShD,OAAO;EAAE;EAAY,cARA,kBACc,WAAW,UAAU,kBAAkB,CAAC,GACzE,CAAC,YAAY,iBAAiB,CAMX;EAAc,YAJhB,kBACX,WAAW,QAAQ,kBAAkB,CAAC,GAC5C,CAAC,YAAY,iBAAiB,CAEG;CAAW;AAChD;;;;;AAMA,SAAgB,qBAAqB,MAOlC;CACD,MAAM,EAAE,OAAO,YAAY;CAC3B,MAAM,EAAE,UAAU,WAAW,iBAAiB,cAAc;EAC1D,GAAG,KAAK;EAAO;EAAS,SAAS,MAAM,qBAAqB,UAAa,KAAK,MAAM,aAAa;CACnG,CAAC;CAQD,OAAO;EAAE,GANI,qBAAqB;GAChC,QAAQ;IAAE,OAFQ,eAAe,KAEhB;IAAa;IAAU,GAAG,KAAK;GAAO;GACvD,WAAW,KAAK;GAChB;GACA,YAAY,KAAK;EACnB,CACY;EAAM;CAAa;AACjC"}
1
+ {"version":3,"file":"useSceneChrome.js","names":[],"sources":["../../../src/canvas/SceneCanvas/useSceneChrome.ts"],"sourcesContent":["import { useCallback, useMemo, type RefObject } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type { Dispatcher, RuleCtx } from '@weasel-js/routing';\nimport type { NodeId } from 'core/scene/types';\nimport type { View } from 'core/viewport/view';\nimport { never, useHoverTracking, type HoverTracking, type VisibilityRules } from 'domains/chrome-caps';\nimport {\n useChromeCaps,\n type ChromeCaps,\n type ChromeCapsSource,\n type ViewRuleInputs,\n} from 'domains/chrome-caps/useChromeCaps';\nimport type { CanvasExtensionApi } from '../canvasExtension';\nimport { useOptionalViewRegistry } from '../viewRegistry';\nimport { presetChromeRules, type EnabledPresets } from './features';\nimport { PRESET_OWNED_CHROME } from './presets/chrome';\nimport type { NodeAtPoint } from './useNodeAtPoint';\nimport { worldPointAt } from './worldPointAt';\nimport { useChromeRulesDep } from '../deps/chromeRules';\n\n/**\n * The node under the pointer, for `RuleCtx.hover`. One lookup, not a\n * client-to-world thunk beside a picker: the point and the camera its\n * tolerance converts against have to come from the same view. Hover has no\n * pointer to capture, so whichever view is under the cursor owns the point.\n */\nexport function useSceneHover(args: {\n canvasApiRef: RefObject<Pick<CanvasExtensionApi, 'clientToWorld'> | null>;\n /** The surface's own camera, for a point no declared view claims. */\n viewRef: { readonly current: View };\n nodeAtPointRef: { readonly current: NodeAtPoint | undefined };\n enabled: boolean;\n onChange?: (id: NodeId | null) => void;\n}): HoverTracking {\n const { canvasApiRef, viewRef, nodeAtPointRef, enabled, onChange } = args;\n const surfaceViewRegistry = useOptionalViewRegistry();\n return useHoverTracking({\n nodeAtClientPoint: (clientX, clientY) => {\n const api = canvasApiRef.current;\n if (!api) return null;\n const target = surfaceViewRegistry?.resolver.at(null, clientX, clientY);\n const view = target?.view ?? viewRef.current;\n const [x, y] = worldPointAt(api, target, clientX, clientY);\n // A view judges its own layers; the surface's gate is the picker's default.\n const reg = target?.id != null\n ? surfaceViewRegistry?.list().find((r) => r.id === target.id)\n : undefined;\n const hit = nodeAtPointRef.current?.(\n { x, y }, reg ? { scale: view.scale, layerIsPainted: reg.layerIsPainted } : view,\n );\n return hit ? { id: hit.id as NodeId } : null;\n },\n enabled,\n ...(onChange ? { onChange } : {}),\n });\n}\n\n/**\n * The surface's chrome-visibility rules: the presets' defaults under the\n * consumer's `chromeVisibility`, which wins.\n *\n * An unselectable canvas hides the marquee and lasso by default: every\n * selection write no-ops there, so the select tool's empty-drag binding still\n * claims the gesture, keeping it from falling through to an ambient drag such\n * as insert, but paints nothing.\n */\nexport function useChromeRules(args: {\n enabled: EnabledPresets;\n selectable: boolean;\n chromeVisibility: VisibilityRules | undefined;\n}): VisibilityRules {\n const { enabled, selectable, chromeVisibility } = args;\n return useMemo(() => {\n const defaults = presetChromeRules(enabled, PRESET_OWNED_CHROME);\n if (!selectable) {\n defaults['action.marquee'] = never;\n defaults['action.lasso'] = never;\n }\n return { ...defaults, ...chromeVisibility };\n }, [chromeVisibility, selectable, enabled]);\n}\n\nconst hiddenSets = new WeakMap<readonly string[], ReadonlySet<string>>();\n\n/** The chrome the active tool hides (`ToolDef.hides`), or undefined. */\nexport function hiddenChromeOf(tools: { active: string | null; registry: Readonly<Record<string, { hides?: readonly string[] }>> }): ReadonlySet<string> | undefined {\n const hides = tools.active ? tools.registry[tools.active]?.hides : undefined;\n if (!hides) return undefined;\n let set = hiddenSets.get(hides);\n if (!set) hiddenSets.set(hides, (set = new Set(hides)));\n return set;\n}\n\n/** The chrome-caps answers for the surface's own view. */\nexport function useSurfaceChromeCaps(args: {\n source: ChromeCapsSource;\n /** The selection as rendered. `SelectionApi.current` can be a live getter\n * that runs ahead of the commit the painted chrome was built from. */\n selection: readonly NodeId[];\n viewRef: { readonly current: View };\n dispatcher: Pick<Dispatcher, 'getActiveAction'>;\n}): {\n chromeCaps: ChromeCaps;\n getIsVisible: () => (id: string) => boolean;\n getRuleCtx: () => RuleCtx | undefined;\n} {\n const { viewRef, dispatcher } = args;\n const chromeCaps = useChromeCaps(args.source);\n const committedSelectionRef = useLatest(args.selection);\n const currentRuleInputs = useCallback((): ViewRuleInputs => ({\n selection: committedSelectionRef.current,\n view: viewRef.current,\n action: dispatcher.getActiveAction(),\n }), [dispatcher, committedSelectionRef, viewRef]);\n const getIsVisible = useCallback(\n (): ((id: string) => boolean) => chromeCaps.isVisible(currentRuleInputs()),\n [chromeCaps, currentRuleInputs],\n );\n const getRuleCtx = useCallback(\n () => chromeCaps.ruleCtx(currentRuleInputs()),\n [chromeCaps, currentRuleInputs],\n );\n return { chromeCaps, getIsVisible, getRuleCtx };\n}\n\n/**\n * The surface's chrome: hover tracking, the visibility rules with the `chromeRules` dep that sets\n * them at run time, and the chrome-caps answers they feed. `source` is the chrome-caps source minus the parts built here.\n */\nexport function useSceneCanvasChrome(args: {\n source: Omit<ChromeCapsSource, 'rules' | 'getHover'>;\n rules: Parameters<typeof useChromeRules>[0];\n hover: Omit<Parameters<typeof useSceneHover>[0], 'enabled' | 'viewRef'>;\n selection: readonly NodeId[];\n viewRef: { readonly current: View };\n dispatcher: Pick<Dispatcher, 'getActiveAction'>;\n}) {\n const { rules, viewRef } = args;\n const { getHover, canvasRef: trackHoverOn } = useSceneHover({\n ...args.hover, viewRef, enabled: rules.chromeVisibility !== undefined || args.hover.onChange !== undefined,\n });\n const chromeRules = useChromeRulesDep(useChromeRules(rules));\n const caps = useSurfaceChromeCaps({\n source: { rules: chromeRules.rules, getHover, ...args.source },\n selection: args.selection,\n viewRef,\n dispatcher: args.dispatcher,\n });\n return { ...caps, trackHoverOn, chromeRules: chromeRules.dep };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA0BA,SAAgB,cAAc,MAOZ;CAChB,MAAM,EAAE,cAAc,SAAS,gBAAgB,SAAS,aAAa;CACrE,MAAM,sBAAsB,wBAAwB;CACpD,OAAO,iBAAiB;EACtB,oBAAoB,SAAS,YAAY;GACvC,MAAM,MAAM,aAAa;GACzB,IAAI,CAAC,KAAK,OAAO;GACjB,MAAM,SAAS,qBAAqB,SAAS,GAAG,MAAM,SAAS,OAAO;GACtE,MAAM,OAAO,QAAQ,QAAQ,QAAQ;GACrC,MAAM,CAAC,GAAG,KAAK,aAAa,KAAK,QAAQ,SAAS,OAAO;GAEzD,MAAM,MAAM,QAAQ,MAAM,OACtB,qBAAqB,KAAK,CAAC,CAAC,MAAM,MAAM,EAAE,OAAO,OAAO,EAAE,IAC1D;GACJ,MAAM,MAAM,eAAe,UACzB;IAAE;IAAG;GAAE,GAAG,MAAM;IAAE,OAAO,KAAK;IAAO,gBAAgB,IAAI;GAAe,IAAI,IAC9E;GACA,OAAO,MAAM,EAAE,IAAI,IAAI,GAAa,IAAI;EAC1C;EACA;EACA,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;CACjC,CAAC;AACH;;;;;;;;;;AAWA,SAAgB,eAAe,MAIX;CAClB,MAAM,EAAE,SAAS,YAAY,qBAAqB;CAClD,OAAO,cAAc;EACnB,MAAM,WAAW,kBAAkB,SAAS,mBAAmB;EAC/D,IAAI,CAAC,YAAY;GACf,SAAS,oBAAoB;GAC7B,SAAS,kBAAkB;EAC7B;EACA,OAAO;GAAE,GAAG;GAAU,GAAG;EAAiB;CAC5C,GAAG;EAAC;EAAkB;EAAY;CAAO,CAAC;AAC5C;AAEA,IAAM,6BAAa,IAAI,QAAgD;;AAGvE,SAAgB,eAAe,OAAsI;CACnK,MAAM,QAAQ,MAAM,SAAS,MAAM,SAAS,MAAM,OAAO,EAAE,QAAQ;CACnE,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,MAAM,WAAW,IAAI,KAAK;CAC9B,IAAI,CAAC,KAAK,WAAW,IAAI,OAAQ,MAAM,IAAI,IAAI,KAAK,CAAE;CACtD,OAAO;AACT;;AAGA,SAAgB,qBAAqB,MAWnC;CACA,MAAM,EAAE,SAAS,eAAe;CAChC,MAAM,aAAa,cAAc,KAAK,MAAM;CAC5C,MAAM,wBAAwB,UAAU,KAAK,SAAS;CACtD,MAAM,oBAAoB,mBAAmC;EAC3D,WAAW,sBAAsB;EACjC,MAAM,QAAQ;EACd,QAAQ,WAAW,gBAAgB;CACrC,IAAI;EAAC;EAAY;EAAuB;CAAO,CAAC;CAShD,OAAO;EAAE;EAAY,cARA,kBACc,WAAW,UAAU,kBAAkB,CAAC,GACzE,CAAC,YAAY,iBAAiB,CAMX;EAAc,YAJhB,kBACX,WAAW,QAAQ,kBAAkB,CAAC,GAC5C,CAAC,YAAY,iBAAiB,CAEG;CAAW;AAChD;;;;;AAMA,SAAgB,qBAAqB,MAOlC;CACD,MAAM,EAAE,OAAO,YAAY;CAC3B,MAAM,EAAE,UAAU,WAAW,iBAAiB,cAAc;EAC1D,GAAG,KAAK;EAAO;EAAS,SAAS,MAAM,qBAAqB,UAAa,KAAK,MAAM,aAAa;CACnG,CAAC;CACD,MAAM,cAAc,kBAAkB,eAAe,KAAK,CAAC;CAO3D,OAAO;EAAE,GANI,qBAAqB;GAChC,QAAQ;IAAE,OAAO,YAAY;IAAO;IAAU,GAAG,KAAK;GAAO;GAC7D,WAAW,KAAK;GAChB;GACA,YAAY,KAAK;EACnB,CACY;EAAM;EAAc,aAAa,YAAY;CAAI;AAC/D"}
@@ -1,19 +1,19 @@
1
1
  import { EMPTY_CHROME_STATE } from "../../core/selection/chromeState.js";
2
- import { anchorStateFrom, buildAffordanceAt, buildClassifyTarget, layerAffordance } from "../affordanceAt.js";
3
- import { useOptionalViewRegistry } from "../viewRegistry.js";
4
2
  import { useDispatchDepSources } from "../deps/dispatchSources.js";
5
- import { pathFromPlane } from "../planeClips.js";
6
- import { VIEW_MARKER_ENTRY_ID } from "../../domains/viewports/viewMarkerDrag.js";
7
- import { useKitSettingsDepSource } from "../deps/kitSettings.js";
3
+ import { anchorStateFrom, buildAffordanceAt, buildClassifyTarget, layerAffordance } from "../affordanceAt.js";
8
4
  import { useChromeAffordances } from "./useChromeAffordances.js";
5
+ import { useKitSettingsDepSource } from "../deps/kitSettings.js";
6
+ import { pathFromPlane } from "../planeClips.js";
7
+ import { useOptionalViewRegistry } from "../viewRegistry.js";
9
8
  import { useSurfaceRouting } from "./useSurfaceRouting.js";
10
9
  import { traceConversion } from "./coordTrace.js";
10
+ import { VIEW_MARKER_ENTRY_ID } from "../../domains/viewports/viewMarkerDrag.js";
11
11
  import { useCallback, useEffect, useInsertionEffect, useMemo, useState } from "react";
12
12
  import { useLatest } from "@weasel-js/react";
13
13
  import { createLongPressStore } from "@weasel-js/routing";
14
14
  import { useActionsRegistry, useDepRegistry, useGestureDispatcher } from "@weasel-js/routing/react";
15
15
 
16
- //#region src/canvas/SceneCanvas/useSceneGestureDispatcher.ts
16
+ // src/canvas/SceneCanvas/useSceneGestureDispatcher.ts
17
17
  /** What a press on the canvas grabs: a registered layer's widget, else a piece of the
18
18
  * selection chrome. */
19
19
  function useAffordanceAt(inputs, depRegistry, viewRegistry) {
@@ -175,6 +175,5 @@ function useSceneGestureDispatcher(inputs) {
175
175
  useKitSettingsDepSource();
176
176
  }
177
177
 
178
- //#endregion
179
178
  export { useSceneGestureDispatcher };
180
179
  //# sourceMappingURL=useSceneGestureDispatcher.js.map
@@ -1,18 +1,18 @@
1
- import { useOptionalViewRegistry } from "../viewRegistry.js";
2
1
  import { asNodeId } from "../../core/scene/types.js";
3
- import { useEnteredGroup } from "../deps/enteredGroup.js";
4
- import { useViewLayerGate } from "../useViewLayerGate.js";
5
- import { composeAlphaFor } from "../sceneSlotWiring.js";
6
2
  import { doubleClickTarget } from "../doubleClickTarget.js";
3
+ import { useEnteredGroup } from "../deps/enteredGroup.js";
7
4
  import { createEnteredGroupScope } from "../../domains/selection/enteredGroupScope.js";
5
+ import { composeAlphaFor } from "../sceneSlotWiring.js";
8
6
  import { useSceneAdapter } from "../useSceneAdapter.js";
9
7
  import { useNodeAtPoint } from "./useNodeAtPoint.js";
10
8
  import { useSceneSelectTool } from "./useSceneSelectTool.js";
9
+ import { useOptionalViewRegistry } from "../viewRegistry.js";
10
+ import { useViewLayerGate } from "../useViewLayerGate.js";
11
11
  import { useCallback, useMemo } from "react";
12
12
  import { useLatest } from "@weasel-js/react";
13
13
  import { useOptionalDepRegistry } from "@weasel-js/routing/react";
14
14
 
15
- //#region src/canvas/SceneCanvas/useScenePicking.ts
15
+ // src/canvas/SceneCanvas/useScenePicking.ts
16
16
  /**
17
17
  * The canvas's adapter and everything that answers "what is under this point": the select
18
18
  * tool's pickers and bounds, the node kinds, and the paint gates picking shares with the painter.
@@ -85,6 +85,5 @@ function useScenePicking(args) {
85
85
  };
86
86
  }
87
87
 
88
- //#endregion
89
88
  export { useScenePicking };
90
89
  //# sourceMappingURL=useScenePicking.js.map
@@ -1,6 +1,6 @@
1
1
  import { useMemo } from "react";
2
2
 
3
- //#region src/canvas/SceneCanvas/useSceneRedrawSources.ts
3
+ // src/canvas/SceneCanvas/useSceneRedrawSources.ts
4
4
  /**
5
5
  * What repaints a `<SceneCanvas>` besides its own render: the caller's
6
6
  * sources, then the canvas's. Neither a scene write nor an override write
@@ -30,6 +30,5 @@ function useSceneRedrawSources(args) {
30
30
  ]);
31
31
  }
32
32
 
33
- //#endregion
34
33
  export { useSceneRedrawSources };
35
34
  //# sourceMappingURL=useSceneRedrawSources.js.map