@weasel-js/core 1.15.0 → 1.15.2

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 (838) hide show
  1. package/CHANGELOG.md +199 -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 -2
  7. package/dist/affordances/rotateCursor.js +1 -2
  8. package/dist/affordances/rotationHandle.js +2 -3
  9. package/dist/animation/behaviors/coast.js +1 -2
  10. package/dist/animation/behaviors/coastByWrite.js +2 -3
  11. package/dist/animation/behaviors/coastOnTargets.js +2 -3
  12. package/dist/animation/behaviors/momentum.js +1 -2
  13. package/dist/animation/clipTargets.js +1 -2
  14. package/dist/animation/departures.js +2 -3
  15. package/dist/animation/poseHelpers.js +2 -3
  16. package/dist/animation/poseTarget.js +5 -6
  17. package/dist/animation/poseTarget.js.map +1 -1
  18. package/dist/animation/poseTransition.js +1 -2
  19. package/dist/animation/reflow.js +9 -10
  20. package/dist/animation/reflow.js.map +1 -1
  21. package/dist/animation/rewind.js +1 -2
  22. package/dist/animation/rig/bindRig.js +2 -3
  23. package/dist/animation/rig/rigNode.js +3 -4
  24. package/dist/animation/rig/rigNode.js.map +1 -1
  25. package/dist/animation/rig/rigSeat.js +1 -2
  26. package/dist/animation/rig/skinBinding.js +1 -2
  27. package/dist/animation/rig/useRig.js +2 -3
  28. package/dist/animation/wrappers/animateLifecycle.js +1 -2
  29. package/dist/animation/wrappers/animateOnSetPose.js +1 -2
  30. package/dist/animation/wrappers/instantPose.js +1 -2
  31. package/dist/animation/writtenPoseTarget.js +1 -2
  32. package/dist/barrel/input.js +2 -1
  33. package/dist/barrel/interactions.js +2 -1
  34. package/dist/barrel/paint.js +2 -2
  35. package/dist/barrel/routing.js +2 -2
  36. package/dist/barrel/scene.js +2 -2
  37. package/dist/barrel/viewport.js +3 -3
  38. package/dist/canvas/Canvas.js +5 -6
  39. package/dist/canvas/CanvasView.js +6 -7
  40. package/dist/canvas/CursorCoordsHud.js +2 -3
  41. package/dist/canvas/DrawCanvas.js +3 -4
  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 +18 -66
  53. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
  54. package/dist/canvas/SceneCanvas/SceneCanvasInput.js +4 -5
  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 +1 -2
  58. package/dist/canvas/SceneCanvas/canvasPassThrough.js +1 -2
  59. package/dist/canvas/SceneCanvas/contributionFrameHooks.js +1 -2
  60. package/dist/canvas/SceneCanvas/coordTrace.js +1 -2
  61. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +3 -4
  62. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -2
  63. package/dist/canvas/SceneCanvas/defaultTextEditor.js +4 -5
  64. package/dist/canvas/SceneCanvas/describePresets.js +1 -2
  65. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +1 -2
  66. package/dist/canvas/SceneCanvas/features.js +1 -2
  67. package/dist/canvas/SceneCanvas/insertPreviewCommands.js +1 -2
  68. package/dist/canvas/SceneCanvas/mergeLayers.js +1 -2
  69. package/dist/canvas/SceneCanvas/namedPresets.js +5 -6
  70. package/dist/canvas/SceneCanvas/poseGeometry.js +1 -2
  71. package/dist/canvas/SceneCanvas/poseRegistrars.js +1 -2
  72. package/dist/canvas/SceneCanvas/presets/arrange.js +2 -3
  73. package/dist/canvas/SceneCanvas/presets/baseline.js +1 -2
  74. package/dist/canvas/SceneCanvas/presets/chrome.js +1 -2
  75. package/dist/canvas/SceneCanvas/presets/composites.js +1 -2
  76. package/dist/canvas/SceneCanvas/presets/edit.js +4 -5
  77. package/dist/canvas/SceneCanvas/presets/ingest.js +1 -2
  78. package/dist/canvas/SceneCanvas/presets/paths.js +3 -4
  79. package/dist/canvas/SceneCanvas/presets/select.js +1 -2
  80. package/dist/canvas/SceneCanvas/presets/toolDriven.js +2 -3
  81. package/dist/canvas/SceneCanvas/presets/tools.js +1 -2
  82. package/dist/canvas/SceneCanvas/presets/transform.js +2 -3
  83. package/dist/canvas/SceneCanvas/presets/view.js +2 -3
  84. package/dist/canvas/SceneCanvas/props.js +1 -2
  85. package/dist/canvas/SceneCanvas/scenePointQuery.js +2 -3
  86. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +1 -2
  87. package/dist/canvas/SceneCanvas/toolRegistry.js +2 -3
  88. package/dist/canvas/SceneCanvas/useActionTunings.js +1 -2
  89. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +1 -2
  90. package/dist/canvas/SceneCanvas/useBakedScene.js +2 -3
  91. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +7 -8
  92. package/dist/canvas/SceneCanvas/useBuiltinTools.js +2 -3
  93. package/dist/canvas/SceneCanvas/useCanvasCamera.js +2 -3
  94. package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js +1 -2
  95. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +1 -2
  96. package/dist/canvas/SceneCanvas/useCanvasSelection.js +8 -6
  97. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -1
  98. package/dist/canvas/SceneCanvas/useCanvasTools.js +2 -3
  99. package/dist/canvas/SceneCanvas/useChromeAffordances.js +2 -3
  100. package/dist/canvas/SceneCanvas/useContributionRoles.js +1 -2
  101. package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js +4 -5
  102. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +2 -3
  103. package/dist/canvas/SceneCanvas/useHeldModifiers.js +1 -2
  104. package/dist/canvas/SceneCanvas/useMagnificationCheck.js +41 -0
  105. package/dist/canvas/SceneCanvas/useMagnificationCheck.js.map +1 -0
  106. package/dist/canvas/SceneCanvas/useNodeAtPoint.js +1 -2
  107. package/dist/canvas/SceneCanvas/useNodeKinds.js +2 -3
  108. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +10 -11
  109. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +1 -2
  110. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +6 -7
  111. package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js +1 -2
  112. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +1 -2
  113. package/dist/canvas/SceneCanvas/useSceneChrome.js +5 -6
  114. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +6 -7
  115. package/dist/canvas/SceneCanvas/useScenePicking.js +5 -6
  116. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +1 -2
  117. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +7 -8
  118. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +2 -3
  119. package/dist/canvas/SceneCanvas/useSceneStandardActions.js +26 -18
  120. package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -1
  121. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +2 -3
  122. package/dist/canvas/SceneCanvas/useSurfaceRouting.js +1 -2
  123. package/dist/canvas/SceneCanvas/useSurfaceViewInputs.js +1 -2
  124. package/dist/canvas/SceneCanvas/useToolKeybindings.js +1 -2
  125. package/dist/canvas/SceneCanvas/useViewportActions.js +3 -4
  126. package/dist/canvas/SceneCanvas/worldPointAt.js +1 -2
  127. package/dist/canvas/SceneCanvas.js +18 -17
  128. package/dist/canvas/SceneCanvas.js.map +1 -1
  129. package/dist/canvas/SceneViewCanvas.js +2 -3
  130. package/dist/canvas/SurfaceCanvas.js +1 -2
  131. package/dist/canvas/ViewMarker.js +1 -2
  132. package/dist/canvas/accentColor.js +4 -5
  133. package/dist/canvas/accentColor.js.map +1 -1
  134. package/dist/canvas/adapterDerivedPath.js +2 -3
  135. package/dist/canvas/adapterPickSource.js +1 -2
  136. package/dist/canvas/affordanceAt.js +2 -3
  137. package/dist/canvas/buildSceneLayer.js +4 -5
  138. package/dist/canvas/buildSceneTree.js +4 -5
  139. package/dist/canvas/canvasRenderer.js +1 -2
  140. package/dist/canvas/colorOverrides.js +1 -2
  141. package/dist/canvas/contextAttributes.js +1 -2
  142. package/dist/canvas/copiesAbove.js +1 -2
  143. package/dist/canvas/defaultDrawOne.js +1 -2
  144. package/dist/canvas/deps/areaSelect.js +5 -3
  145. package/dist/canvas/deps/areaSelect.js.map +1 -1
  146. package/dist/canvas/deps/booleans.js +5 -6
  147. package/dist/canvas/deps/changes.js +1 -2
  148. package/dist/canvas/deps/chromeRules.js +1 -2
  149. package/dist/canvas/deps/debug.js +1 -2
  150. package/dist/canvas/deps/dispatchSources.js +1 -2
  151. package/dist/canvas/deps/dispatcher.js +1 -2
  152. package/dist/canvas/deps/editAnchors.js +3 -4
  153. package/dist/canvas/deps/enteredGroup.js +6 -6
  154. package/dist/canvas/deps/enteredGroup.js.map +1 -1
  155. package/dist/canvas/deps/geometryProjection.js +1 -2
  156. package/dist/canvas/deps/hitTestArea.js +4 -5
  157. package/dist/canvas/deps/ingestion.js +1 -2
  158. package/dist/canvas/deps/insert.js +3 -4
  159. package/dist/canvas/deps/insertSite.js +3 -4
  160. package/dist/canvas/deps/kitSettings.js +1 -2
  161. package/dist/canvas/deps/lassoSelect.js +5 -3
  162. package/dist/canvas/deps/lassoSelect.js.map +1 -1
  163. package/dist/canvas/deps/layout.js +1 -2
  164. package/dist/canvas/deps/modeDefaultTool.js +1 -2
  165. package/dist/canvas/deps/nodeAtPoint.js +1 -2
  166. package/dist/canvas/deps/pathEditCommits.js +4 -5
  167. package/dist/canvas/deps/pathLeaf.js +1 -2
  168. package/dist/canvas/deps/pathLeafDeps.js +2 -3
  169. package/dist/canvas/deps/poseDescriptor.js +1 -2
  170. package/dist/canvas/deps/previewPaths.js +1 -2
  171. package/dist/canvas/deps/resizePolicy.js +1 -2
  172. package/dist/canvas/deps/selectionSnapshot.js +8 -4
  173. package/dist/canvas/deps/selectionSnapshot.js.map +1 -1
  174. package/dist/canvas/deps/slice.js +5 -6
  175. package/dist/canvas/deps/snap.js +3 -4
  176. package/dist/canvas/deps/surface.js +1 -2
  177. package/dist/canvas/deps/textEdit.js +1 -2
  178. package/dist/canvas/deps/transformFollowers.js +1 -2
  179. package/dist/canvas/deps/view.js +1 -2
  180. package/dist/canvas/derivedPath.js +6 -7
  181. package/dist/canvas/doubleClickTarget.js +1 -2
  182. package/dist/canvas/drawEnvelope.js +1 -2
  183. package/dist/canvas/drawnBounds.js +4 -5
  184. package/dist/canvas/getNodeAtPoint.js +1 -2
  185. package/dist/canvas/hostAnchor.js +1 -2
  186. package/dist/canvas/hud.module.js +1 -2
  187. package/dist/canvas/inheritedPaints.js +1 -2
  188. package/dist/canvas/insertPreviewExtent.js +1 -2
  189. package/dist/canvas/kitRequirements.js +1 -2
  190. package/dist/canvas/layerHover.js +1 -2
  191. package/dist/canvas/layerOrder.js +1 -2
  192. package/dist/canvas/layerSlots.js +1 -2
  193. package/dist/canvas/mountedCanvases.js +1 -2
  194. package/dist/canvas/nodeShapes/derivedPainter.js +2 -3
  195. package/dist/canvas/nodeShapes/imagePainter.js +1 -2
  196. package/dist/canvas/nodeShapes/measurePainter.js +2 -3
  197. package/dist/canvas/nodeShapes/memo.js +1 -2
  198. package/dist/canvas/nodeShapes/nodePaint.js +1 -2
  199. package/dist/canvas/nodeShapes/pathPainter.js +3 -4
  200. package/dist/canvas/nodeShapes/poseBox.js +1 -2
  201. package/dist/canvas/nodeShapes/rectFallbackPainter.js +1 -2
  202. package/dist/canvas/nodeShapes/shapePainter.js +2 -3
  203. package/dist/canvas/nodeShapes/strokedBounds.js +1 -2
  204. package/dist/canvas/nodeShapes/textPainter.js +1 -2
  205. package/dist/canvas/overChildren.js +1 -2
  206. package/dist/canvas/overlayRoleStrokes.js +1 -2
  207. package/dist/canvas/ownClip.js +1 -2
  208. package/dist/canvas/paintCull.js +1 -2
  209. package/dist/canvas/paintedCursorLayer.js +1 -2
  210. package/dist/canvas/pathOverlay.js +1 -2
  211. package/dist/canvas/pickIndex/nodeBroadBox.js +3 -4
  212. package/dist/canvas/pickIndex/scenePickIndex.js +3 -4
  213. package/dist/canvas/pickReach.js +1 -2
  214. package/dist/canvas/pickWalk.js +2 -3
  215. package/dist/canvas/planeClips.js +1 -2
  216. package/dist/canvas/poseRotation.js +1 -2
  217. package/dist/canvas/publishPreviews.js +1 -2
  218. package/dist/canvas/rasterReadback.js +1 -2
  219. package/dist/canvas/rasterToPng.js +1 -2
  220. package/dist/canvas/renderDebugSnapshot.js +1 -2
  221. package/dist/canvas/renderNeeds.js +1 -2
  222. package/dist/canvas/renderSceneToPixels.js +5 -6
  223. package/dist/canvas/sceneAdapter.js +37 -27
  224. package/dist/canvas/sceneAdapter.js.map +1 -1
  225. package/dist/canvas/sceneClipboard.js +19 -7
  226. package/dist/canvas/sceneClipboard.js.map +1 -1
  227. package/dist/canvas/sceneLayerPaint.js +1 -2
  228. package/dist/canvas/scenePickReads.js +1 -2
  229. package/dist/canvas/scenePickSource.js +5 -6
  230. package/dist/canvas/sceneSlotWiring.js +2 -3
  231. package/dist/canvas/sceneViewRender.js +5 -6
  232. package/dist/canvas/shownNodes.js +1 -2
  233. package/dist/canvas/slopsDebugLayer.js +9 -4
  234. package/dist/canvas/slopsDebugLayer.js.map +1 -1
  235. package/dist/canvas/surfaceContribution.js +1 -2
  236. package/dist/canvas/useCanvasElements.js +1 -2
  237. package/dist/canvas/useCanvasHandle.js +1 -2
  238. package/dist/canvas/useCanvasPaint.js +2 -3
  239. package/dist/canvas/useCanvasRenderer.js +1 -2
  240. package/dist/canvas/useCanvasSurface.js +1 -2
  241. package/dist/canvas/useCanvasView.js +2 -3
  242. package/dist/canvas/useClientToWorld.js +1 -2
  243. package/dist/canvas/useExtraLayers.js +1 -2
  244. package/dist/canvas/useFrameLoop.js +1 -2
  245. package/dist/canvas/useHitObserver.js +1 -2
  246. package/dist/canvas/useHostAnchor.js +1 -2
  247. package/dist/canvas/useInFlightBounds.js +6 -6
  248. package/dist/canvas/useInFlightBounds.js.map +1 -1
  249. package/dist/canvas/useLateContentRedraw.js +1 -2
  250. package/dist/canvas/useLayerStack.js +2 -3
  251. package/dist/canvas/usePaintedCursor.js +1 -2
  252. package/dist/canvas/useRedrawOn.js +1 -2
  253. package/dist/canvas/useSceneAdapter.js +1 -2
  254. package/dist/canvas/useSceneLayerList.js +1 -2
  255. package/dist/canvas/useSurfaceInput.js +1 -2
  256. package/dist/canvas/useSurfaceSize.js +1 -2
  257. package/dist/canvas/useToolCursor.js +1 -2
  258. package/dist/canvas/useViewAim.js +2 -3
  259. package/dist/canvas/useViewHelpers.js +5 -4
  260. package/dist/canvas/useViewHelpers.js.map +1 -1
  261. package/dist/canvas/useViewLayerGate.js +1 -2
  262. package/dist/canvas/useViewNesting.js +1 -2
  263. package/dist/canvas/useViewRegistrySurface.js +7 -5
  264. package/dist/canvas/useViewRegistrySurface.js.map +1 -1
  265. package/dist/canvas/viewInputs.js +1 -2
  266. package/dist/canvas/viewMarkers.js +1 -2
  267. package/dist/canvas/viewRegistry.js +6 -7
  268. package/dist/canvas/viewRegistry.js.map +1 -1
  269. package/dist/canvas/viewSnap.js +1 -2
  270. package/dist/canvas/watchElementMove.js +1 -2
  271. package/dist/canvas/wrapNodeOutput.js +1 -2
  272. package/dist/core/adapters/testing/rootsTree.js +1 -2
  273. package/dist/core/applyOps.js +1 -2
  274. package/dist/core/device/targets.js +1 -2
  275. package/dist/core/device/useDeviceProfile.js +1 -2
  276. package/dist/core/device/useTargetBasePx.js +1 -2
  277. package/dist/core/device/watchDevicePixelRatio.js +1 -2
  278. package/dist/core/geometry/autoPoseDescriptor.js +2 -3
  279. package/dist/core/geometry/booleanOfPaths.js +1 -2
  280. package/dist/core/geometry/inkExtents.js +1 -2
  281. package/dist/core/geometry/pathPoseDescriptor.js +1 -2
  282. package/dist/core/geometry/poseDescriptor.js +1 -2
  283. package/dist/core/geometry/regionHit.js +1 -2
  284. package/dist/core/geometry/targetFrame.js +1 -2
  285. package/dist/core/geometry/unionBounds.js +1 -2
  286. package/dist/core/layers/backgroundFill.js +1 -2
  287. package/dist/core/layers/children.js +1 -2
  288. package/dist/core/layers/gateLayer.js +1 -2
  289. package/dist/core/layers/layerGroup.js +1 -2
  290. package/dist/core/layers/redrawSource.js +1 -2
  291. package/dist/core/layers/render.js +1 -2
  292. package/dist/core/layers/retain.js +1 -2
  293. package/dist/core/ops/arrange.js +1 -2
  294. package/dist/core/ops/create.js +2 -3
  295. package/dist/core/ops/createHistory.js +2 -3
  296. package/dist/core/ops/delete.js +2 -3
  297. package/dist/core/ops/nodeFlags.js +1 -2
  298. package/dist/core/ops/registry.js +1 -2
  299. package/dist/core/ops/reorder/algorithms.js +1 -2
  300. package/dist/core/ops/reorder/index.js +3 -8
  301. package/dist/core/ops/reorder/index.js.map +1 -1
  302. package/dist/core/ops/reorder/setChildOrder.js +1 -2
  303. package/dist/core/ops/reparent.js +1 -2
  304. package/dist/core/ops/select.js +1 -2
  305. package/dist/core/ops/setData.js +1 -2
  306. package/dist/core/ops/setDependsOn.js +1 -2
  307. package/dist/core/ops/setLayer.js +1 -2
  308. package/dist/core/ops/setLayout.js +1 -2
  309. package/dist/core/ops/setPath.js +1 -2
  310. package/dist/core/ops/setText.js +1 -2
  311. package/dist/core/ops/slot.js +1 -2
  312. package/dist/core/ops/transform.js +1 -2
  313. package/dist/core/ops/writtenBy.js +1 -2
  314. package/dist/core/pages/fitViewToPage.js +3 -9
  315. package/dist/core/pages/fitViewToPage.js.map +1 -1
  316. package/dist/core/pages/pageEdits.js +3 -4
  317. package/dist/core/pages/pages.js +4 -11
  318. package/dist/core/pages/pages.js.map +1 -1
  319. package/dist/core/pages/pagesLayer.js +1 -2
  320. package/dist/core/paint/meshKind.js +1 -2
  321. package/dist/core/paint/meshKindLazy.js +18 -23
  322. package/dist/core/paint/meshKindLazy.js.map +1 -1
  323. package/dist/core/paint/paintKindEntry.js +1 -2
  324. package/dist/core/paint/paintKinds.js +1 -2
  325. package/dist/core/paint/registerMesh.js +1 -2
  326. package/dist/core/scene/NodeProperties.js +1 -2
  327. package/dist/core/scene/NodeRouting.js +1 -2
  328. package/dist/core/scene/annotation.js +1 -2
  329. package/dist/core/scene/appliedLog.js +1 -2
  330. package/dist/core/scene/arrivalWindow.js +2 -3
  331. package/dist/core/scene/arrivals.js +1 -2
  332. package/dist/core/scene/booleanGroup.js +1 -2
  333. package/dist/core/scene/booleanOfChildren.js +1 -2
  334. package/dist/core/scene/boundOps.js +1 -2
  335. package/dist/core/scene/carryDescendants.js +2 -3
  336. package/dist/core/scene/clipNothing.js +1 -2
  337. package/dist/core/scene/composeFrame.js +1 -2
  338. package/dist/core/scene/composePose.js +1 -2
  339. package/dist/core/scene/declaredFieldSetters.js +1 -2
  340. package/dist/core/scene/depFrame.js +1 -2
  341. package/dist/core/scene/depMemo.js +1 -2
  342. package/dist/core/scene/dependents.js +1 -2
  343. package/dist/core/scene/derivedParts.js +1 -2
  344. package/dist/core/scene/derivedPath.js +2 -3
  345. package/dist/core/scene/docValues.js +1 -2
  346. package/dist/core/scene/documentOf.js +1 -2
  347. package/dist/core/scene/editMode.js +1 -2
  348. package/dist/core/scene/editPass.js +1 -2
  349. package/dist/core/scene/effectivePose.js +3 -4
  350. package/dist/core/scene/fieldEdits.js +1 -2
  351. package/dist/core/scene/fontReads.js +1 -2
  352. package/dist/core/scene/historyFacade.js +1 -2
  353. package/dist/core/scene/historyForm.js +1 -2
  354. package/dist/core/scene/inheritedPaint.js +1 -2
  355. package/dist/core/scene/kitOps.js +16 -15
  356. package/dist/core/scene/kitOps.js.map +1 -1
  357. package/dist/core/scene/kitRegistry.js +2 -3
  358. package/dist/core/scene/layerOps.js +1 -2
  359. package/dist/core/scene/layerStack.js +1 -2
  360. package/dist/core/scene/layoutPass.js +4 -5
  361. package/dist/core/scene/lockGuard.js +1 -2
  362. package/dist/core/scene/minSize.js +1 -2
  363. package/dist/core/scene/nestedHit.js +1 -2
  364. package/dist/core/scene/nodeAsShown.js +1 -2
  365. package/dist/core/scene/nodeFlags.js +1 -2
  366. package/dist/core/scene/nodeFnFields.js +1 -2
  367. package/dist/core/scene/nodeGates.js +1 -2
  368. package/dist/core/scene/nodeMemo.js +1 -2
  369. package/dist/core/scene/nodeStore.js +2 -3
  370. package/dist/core/scene/notifier.js +1 -2
  371. package/dist/core/scene/opTable.js +1 -2
  372. package/dist/core/scene/outerOps.js +1 -2
  373. package/dist/core/scene/pathEffects/blend.js +3 -4
  374. package/dist/core/scene/pathEffects/blend.js.map +1 -1
  375. package/dist/core/scene/pathEffects/derive.js +2 -3
  376. package/dist/core/scene/pathEffects/effects.js +1 -2
  377. package/dist/core/scene/pathEffects/foundHidden.js +1 -2
  378. package/dist/core/scene/pathEffects/textAlong.js +6 -6
  379. package/dist/core/scene/pathEffects/textAlong.js.map +1 -1
  380. package/dist/core/scene/pathEffects/textAlongBands.js +1 -2
  381. package/dist/core/scene/plyStacks.js +1 -2
  382. package/dist/core/scene/poseFeed.js +1 -2
  383. package/dist/core/scene/poseHold.js +1 -2
  384. package/dist/core/scene/poseOverrides.js +1 -2
  385. package/dist/core/scene/posePlies.js +1 -2
  386. package/dist/core/scene/poseRemovals.js +1 -2
  387. package/dist/core/scene/poseSnapshot.js +1 -2
  388. package/dist/core/scene/poseWrites.js +1 -2
  389. package/dist/core/scene/reconcileSpecs.js +26 -3
  390. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  391. package/dist/core/scene/recorder.js +1 -2
  392. package/dist/core/scene/renderOrder.js +1 -2
  393. package/dist/core/scene/sameValue.js +1 -2
  394. package/dist/core/scene/scene.js +23 -13
  395. package/dist/core/scene/scene.js.map +1 -1
  396. package/dist/core/scene/sceneChanges.js +1 -2
  397. package/dist/core/scene/sceneEdits.js +1 -2
  398. package/dist/core/scene/sceneJournals.js +1 -2
  399. package/dist/core/scene/sceneMutators.js +2 -3
  400. package/dist/core/scene/scenePoseAdapter.js +1 -2
  401. package/dist/core/scene/sceneRecording.js +1 -2
  402. package/dist/core/scene/sceneSelection.js +8 -5
  403. package/dist/core/scene/sceneSelection.js.map +1 -1
  404. package/dist/core/scene/sceneState.js +3 -4
  405. package/dist/core/scene/scrollOffsets.js +1 -2
  406. package/dist/core/scene/serialization.js +2 -3
  407. package/dist/core/scene/staleReplay.js +1 -2
  408. package/dist/core/scene/statedFields.js +1 -2
  409. package/dist/core/scene/strategyView.js +1 -2
  410. package/dist/core/scene/treeEdits.js +2 -3
  411. package/dist/core/scene/treeOrder.js +1 -2
  412. package/dist/core/scene/treeReads.js +1 -2
  413. package/dist/core/scene/treeShape.js +1 -2
  414. package/dist/core/scene/types.js +1 -2
  415. package/dist/core/scene/types.js.map +1 -1
  416. package/dist/core/scene/unionOfChildren.js +1 -2
  417. package/dist/core/scene/unitScopes.js +20 -4
  418. package/dist/core/scene/unitScopes.js.map +1 -1
  419. package/dist/core/scene/useScene.js +2 -3
  420. package/dist/core/scene/worldSave.js +2 -3
  421. package/dist/core/selection/chromeState.js +1 -2
  422. package/dist/core/selection/outermostSelection.js +56 -0
  423. package/dist/core/selection/outermostSelection.js.map +1 -0
  424. package/dist/core/selection/readOnlySelection.js +1 -2
  425. package/dist/core/selection/selectionTarget.js +1 -2
  426. package/dist/core/selection/usePublishSceneSelection.js +1 -2
  427. package/dist/core/selection/useSelection.js +1 -2
  428. package/dist/core/shapeKinds.js +1 -2
  429. package/dist/core/stableStringify.js +1 -2
  430. package/dist/core/stylus/stylus.js +1 -2
  431. package/dist/core/stylus/usePointerStylus.js +1 -2
  432. package/dist/core/usePaintKinds.js +1 -2
  433. package/dist/core/viewport/clampView.js +1 -2
  434. package/dist/core/viewport/clientToWorld.js +8 -3
  435. package/dist/core/viewport/clientToWorld.js.map +1 -1
  436. package/dist/core/viewport/createVelocityTracker.js +1 -2
  437. package/dist/core/viewport/fitToBounds.js +1 -2
  438. package/dist/core/viewport/fitViewToBounds.js +1 -2
  439. package/dist/core/viewport/interpolateView.js +1 -2
  440. package/dist/core/viewport/parallax.js +1 -2
  441. package/dist/core/viewport/sceneNodeClientRect.js +1 -2
  442. package/dist/core/viewport/screenSlop.js +1 -2
  443. package/dist/core/viewport/useAutoCenter.js +1 -2
  444. package/dist/core/viewport/useCanvasSize.js +1 -2
  445. package/dist/core/viewport/useDecayLoop.js +1 -2
  446. package/dist/core/viewport/useNodeOverlayFrame.js +1 -2
  447. package/dist/core/viewport/useVelocityTracker.js +1 -2
  448. package/dist/core/viewport/useViewAnimation.js +3 -4
  449. package/dist/core/viewport/view.js +1 -2
  450. package/dist/core/viewport/viewTransform.js +1 -2
  451. package/dist/core/viewport/viewportWorldRect.js +1 -2
  452. package/dist/core/viewport/wheelHandler.js +1 -2
  453. package/dist/core/viewport/zoomAt.js +7 -8
  454. package/dist/core/viewport/zoomAt.js.map +1 -1
  455. package/dist/core/viewport/zoomBounds.js +1 -2
  456. package/dist/debug/createDebugOverlayLayer.js +1 -2
  457. package/dist/debug/createDebugSink.js +1 -2
  458. package/dist/debug/defaultTheme.js +1 -2
  459. package/dist/debug/features.js +1 -2
  460. package/dist/debug/frameStats.js +1 -2
  461. package/dist/debug/overlayPanels.js +1 -2
  462. package/dist/debug/parseDebugFlags.js +1 -2
  463. package/dist/debug/useDebugSink.js +2 -3
  464. package/dist/{depSchema-ChQPzEkW.d.ts → depSchema-C7a_OMt-.d.ts} +61 -52
  465. package/dist/devtools/handlers.js +1 -2
  466. package/dist/devtools/history.js +1 -2
  467. package/dist/devtools/hook.js +1 -2
  468. package/dist/devtools/label.js +1 -2
  469. package/dist/devtools/notices.js +1 -2
  470. package/dist/devtools/protocol.js +1 -2
  471. package/dist/devtools/registry.js +1 -2
  472. package/dist/devtools/root.js +12 -6
  473. package/dist/devtools/root.js.map +1 -1
  474. package/dist/devtools/serialize.js +1 -2
  475. package/dist/devtools/session.js +2 -3
  476. package/dist/devtools/transport.js +13 -18
  477. package/dist/devtools/transport.js.map +1 -1
  478. package/dist/devtools/useDevtoolsRoot.js +1 -2
  479. package/dist/devtools-protocol.d.ts +1 -12
  480. package/dist/devtools-protocol.js +2 -2
  481. package/dist/devtools.d.ts +1 -1
  482. package/dist/devtools.js +1 -2
  483. package/dist/domains/chrome-caps/buildChromeCtx.js +1 -2
  484. package/dist/domains/chrome-caps/conditions.js +1 -2
  485. package/dist/domains/chrome-caps/defaults.js +1 -2
  486. package/dist/domains/chrome-caps/resolve.js +2 -3
  487. package/dist/domains/chrome-caps/useChromeCaps.js +1 -2
  488. package/dist/domains/chrome-caps/useHoverTracking.js +1 -2
  489. package/dist/domains/ingestion/contentHandlers.js +1 -2
  490. package/dist/domains/ingestion/ghost.js +2 -3
  491. package/dist/domains/ingestion/imageHandler.js +1 -2
  492. package/dist/domains/ingestion/kitHandlers.js +2 -3
  493. package/dist/domains/ingestion/openFilePicker.js +1 -2
  494. package/dist/domains/ingestion/placement.js +1 -2
  495. package/dist/domains/ingestion/svgHandler.js +1 -2
  496. package/dist/domains/ingestion/textHandler.js +1 -2
  497. package/dist/domains/ingestion/useCanvasIngestion.js +1 -2
  498. package/dist/domains/ingestion/weaselJsonHandler.js +2 -3
  499. package/dist/domains/longPress/longPressFeedback.js +1 -2
  500. package/dist/domains/measure/actionIds.js +1 -2
  501. package/dist/domains/measure/measureCommands.js +6 -7
  502. package/dist/domains/measure/measureContribution.js +3 -4
  503. package/dist/domains/measure/measureEdits.js +3 -4
  504. package/dist/domains/measure/measureGestures.js +2 -3
  505. package/dist/domains/measure/measureHit.js +5 -12
  506. package/dist/domains/measure/measureHit.js.map +1 -1
  507. package/dist/domains/measure/measureLayer.js +3 -4
  508. package/dist/domains/measure/measurement.js +1 -2
  509. package/dist/domains/measure/measurements.js +1 -2
  510. package/dist/domains/modes/modeLayers.js +1 -2
  511. package/dist/domains/modes/modeTriggers.js +1 -2
  512. package/dist/domains/pathEffects/effectSources.js +2 -3
  513. package/dist/domains/pathEffects/index.js +1 -2
  514. package/dist/domains/pathEffects/readSource.js +3 -4
  515. package/dist/domains/pathEffects/textItems.js +1 -2
  516. package/dist/domains/pathEffects/useEffectSourcesLayer.js +3 -4
  517. package/dist/domains/paths/anchorData.js +1 -2
  518. package/dist/domains/paths/anchorMarkers.js +6 -13
  519. package/dist/domains/paths/anchorMarkers.js.map +1 -1
  520. package/dist/domains/paths/editablePath.js +3 -4
  521. package/dist/domains/paths/originProjection.js +1 -2
  522. package/dist/domains/paths/pathEditExtension.js +1 -2
  523. package/dist/domains/paths/pathEditState.js +1 -2
  524. package/dist/domains/paths/pathEditingOverlayLayer.js +7 -12
  525. package/dist/domains/paths/pathEditingOverlayLayer.js.map +1 -1
  526. package/dist/domains/paths/pathLayer.js +1 -2
  527. package/dist/domains/paths/pathRepresentation.js +1 -2
  528. package/dist/domains/paths/pathSnap/glyphs.js +1 -2
  529. package/dist/domains/paths/pathSnap/pathSnapSource.js +1 -2
  530. package/dist/domains/paths/pathSnap/sceneIndex.js +1 -2
  531. package/dist/domains/paths/pathSnap/snapGeometry.js +2 -3
  532. package/dist/domains/paths/penPreviewLayer.js +10 -14
  533. package/dist/domains/paths/penPreviewLayer.js.map +1 -1
  534. package/dist/domains/paths/shapeGenerator.js +2 -4
  535. package/dist/domains/paths/shapeGenerator.js.map +1 -1
  536. package/dist/domains/paths/strokeOutline.js +2 -3
  537. package/dist/domains/paths/useAnchorFields.js +1 -2
  538. package/dist/domains/paths/usePathEdit.js +2 -3
  539. package/dist/domains/poseRun/usePoseRun.js +1 -2
  540. package/dist/domains/selection/enteredGroupFrame.js +1 -2
  541. package/dist/domains/selection/enteredGroupScope.js +1 -2
  542. package/dist/domains/selection/enteredOperands.js +1 -2
  543. package/dist/domains/selection/handleCommands.js +2 -3
  544. package/dist/domains/selection/overlay.js +6 -7
  545. package/dist/domains/selection/selectionPose.js +2 -3
  546. package/dist/domains/snap/angle2d.js +3 -3
  547. package/dist/domains/snap/angle2d.js.map +1 -1
  548. package/dist/domains/snap/debugCandidates.js +1 -2
  549. package/dist/domains/snap/gather.js +1 -2
  550. package/dist/domains/snap/inputSubspace.js +2 -3
  551. package/dist/domains/snap/lazySession.js +1 -2
  552. package/dist/domains/snap/marks.js +1 -2
  553. package/dist/domains/snap/outcomeStore.js +6 -10
  554. package/dist/domains/snap/outcomeStore.js.map +1 -1
  555. package/dist/domains/snap/pointSnap.js +1 -2
  556. package/dist/domains/snap/probes2d.js +1 -2
  557. package/dist/domains/snap/readoutDraw.js +1 -2
  558. package/dist/domains/snap/readoutLayer.js +1 -2
  559. package/dist/domains/snap/registry.js +1 -2
  560. package/dist/domains/snap/resizeBox.js +1 -2
  561. package/dist/domains/snap/roles.js +1 -2
  562. package/dist/domains/snap/rotationSource.js +1 -2
  563. package/dist/domains/snap/sceneReads.js +2 -3
  564. package/dist/domains/snap/sceneSession2d.js +2 -3
  565. package/dist/domains/snap/screen.js +2 -3
  566. package/dist/domains/snap/session2d.js +4 -5
  567. package/dist/domains/snap/spanSnap.js +1 -2
  568. package/dist/domains/snap/stepAngles.js +1 -2
  569. package/dist/domains/text/editingDrawOne.js +1 -2
  570. package/dist/domains/text/hostTextEditors.js +1 -2
  571. package/dist/domains/text/sceneTextDrafts.js +1 -2
  572. package/dist/domains/text/textHitAt.js +4 -5
  573. package/dist/domains/text/textLayer.js +12 -2
  574. package/dist/domains/text/textLayer.js.map +1 -1
  575. package/dist/domains/text/useSceneTextEdit.js +13 -9
  576. package/dist/domains/text/useSceneTextEdit.js.map +1 -1
  577. package/dist/domains/viewports/aim.js +6 -12
  578. package/dist/domains/viewports/aim.js.map +1 -1
  579. package/dist/domains/viewports/viewMarker.js +1 -2
  580. package/dist/domains/viewports/viewMarkerDrag.js +1 -2
  581. package/dist/domains/viewports/viewResolver.js +6 -5
  582. package/dist/domains/viewports/viewResolver.js.map +1 -1
  583. package/dist/domains/viewports/viewportLayer.js +1 -2
  584. package/dist/iconRegistry/IconRegistryProvider.js +1 -2
  585. package/dist/iconRegistry/useIconGlyph.js +1 -2
  586. package/dist/iconRegistry/useIconVariant.js +1 -2
  587. package/dist/icons.table.js +1 -2
  588. package/dist/icons2.table.js +1 -2
  589. package/dist/index.d.ts +70 -27
  590. package/dist/index.js +7 -5
  591. package/dist/input/keyState.js +1 -2
  592. package/dist/input/useKeyModifiers.js +1 -2
  593. package/dist/input/useKeyState.js +1 -2
  594. package/dist/input/usePublishPointer.js +59 -0
  595. package/dist/input/usePublishPointer.js.map +1 -0
  596. package/dist/interactions/actions/admitsChild.js +1 -2
  597. package/dist/interactions/actions/align/action.js +6 -7
  598. package/dist/interactions/actions/align/align.js +6 -7
  599. package/dist/interactions/actions/booleans/action.js +1 -2
  600. package/dist/interactions/actions/booleans/booleanGroupAction.js +2 -3
  601. package/dist/interactions/actions/booleans/booleans.js +1 -2
  602. package/dist/interactions/actions/booleans/commit.js +4 -5
  603. package/dist/interactions/actions/booleans/custom.js +2 -3
  604. package/dist/interactions/actions/booleans/keymap.js +1 -2
  605. package/dist/interactions/actions/booleans/operands.js +1 -2
  606. package/dist/interactions/actions/booleans/pieces.js +1 -2
  607. package/dist/interactions/actions/booleans/placement.js +1 -2
  608. package/dist/interactions/actions/booleans/useBooleans.js +1 -2
  609. package/dist/interactions/actions/booleans/useBooleansAdapter.js +1 -2
  610. package/dist/interactions/actions/clipboard/action.js +2 -3
  611. package/dist/interactions/actions/clipboard/clipboardOps.js +2 -3
  612. package/dist/interactions/actions/clipboard/materializePaste.js +1 -2
  613. package/dist/interactions/actions/clipboard/wireFormat.js +1 -2
  614. package/dist/interactions/actions/clone/action.js +7 -8
  615. package/dist/interactions/actions/clone/behaviors.js +4 -5
  616. package/dist/interactions/actions/defaultCommitAdapter.js +2 -3
  617. package/dist/interactions/actions/defaults/anchorEditing.js +3 -4
  618. package/dist/interactions/actions/defaults/anchorFields.js +1 -2
  619. package/dist/interactions/actions/defaults/anchorHandles.js +2 -3
  620. package/dist/interactions/actions/defaults/anchorJoin.js +2 -3
  621. package/dist/interactions/actions/defaults/areaSelect.js +6 -6
  622. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  623. package/dist/interactions/actions/defaults/bendSegment.js +3 -4
  624. package/dist/interactions/actions/defaults/cancelGesture.js +1 -2
  625. package/dist/interactions/actions/defaults/clearSelection.js +1 -2
  626. package/dist/interactions/actions/defaults/containerScroll.js +13 -8
  627. package/dist/interactions/actions/defaults/containerScroll.js.map +1 -1
  628. package/dist/interactions/actions/defaults/contextMenu.js +6 -7
  629. package/dist/interactions/actions/defaults/copySubtree.js +2 -3
  630. package/dist/interactions/actions/defaults/createPaintAction.js +3 -4
  631. package/dist/interactions/actions/defaults/delete.js +2 -3
  632. package/dist/interactions/actions/defaults/duplicate.js +5 -6
  633. package/dist/interactions/actions/defaults/enterGroup.js +5 -6
  634. package/dist/interactions/actions/defaults/enterGroup.js.map +1 -1
  635. package/dist/interactions/actions/defaults/enterPathEdit.js +1 -2
  636. package/dist/interactions/actions/defaults/enterTextEdit.js +1 -2
  637. package/dist/interactions/actions/defaults/escape.js +1 -2
  638. package/dist/interactions/actions/defaults/exitPathEdit.js +1 -2
  639. package/dist/interactions/actions/defaults/group.js +6 -7
  640. package/dist/interactions/actions/defaults/ingest.js +3 -4
  641. package/dist/interactions/actions/defaults/insertPathAnchor.js +2 -3
  642. package/dist/interactions/actions/defaults/nudge.js +3 -4
  643. package/dist/interactions/actions/defaults/nudgeSteps.js +2 -3
  644. package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -1
  645. package/dist/interactions/actions/defaults/pathEditMarks.js +3 -7
  646. package/dist/interactions/actions/defaults/pathEditMarks.js.map +1 -1
  647. package/dist/interactions/actions/defaults/pinchZoom.js +3 -4
  648. package/dist/interactions/actions/defaults/reorder.js +2 -3
  649. package/dist/interactions/actions/defaults/requiresSelection.js +1 -2
  650. package/dist/interactions/actions/defaults/segmentUnder.js +1 -2
  651. package/dist/interactions/actions/defaults/selectAll.js +1 -2
  652. package/dist/interactions/actions/defaults/selectDeep.js +1 -2
  653. package/dist/interactions/actions/defaults/setFill.js +1 -2
  654. package/dist/interactions/actions/defaults/setFillOpacity.js +1 -2
  655. package/dist/interactions/actions/defaults/setStroke.js +1 -2
  656. package/dist/interactions/actions/defaults/setStrokeOpacity.js +1 -2
  657. package/dist/interactions/actions/defaults/slice.js +1 -2
  658. package/dist/interactions/actions/defaults/sliceOps.js +1 -2
  659. package/dist/interactions/actions/defaults/toolActivate.js +1 -2
  660. package/dist/interactions/actions/defaults/toolResetToDefault.js +1 -2
  661. package/dist/interactions/actions/defaults/undoRedo.js +1 -2
  662. package/dist/interactions/actions/defaults/viewportDragPan.js +1 -2
  663. package/dist/interactions/actions/defaults/viewportWheelPan.js +1 -2
  664. package/dist/interactions/actions/defaults/viewportZoom.js +3 -4
  665. package/dist/interactions/actions/distribute/action.js +4 -5
  666. package/dist/interactions/actions/distribute/distribute.js +5 -6
  667. package/dist/interactions/actions/distribute/plan.js +1 -2
  668. package/dist/interactions/actions/drawnBoxes.js +4 -5
  669. package/dist/interactions/actions/dropVerdict.js +1 -2
  670. package/dist/interactions/actions/edit-anchors/action.js +4 -5
  671. package/dist/interactions/actions/edit-anchors/extensionDrags.js +1 -2
  672. package/dist/interactions/actions/edit-anchors/geometry.js +1 -2
  673. package/dist/interactions/actions/edit-anchors/handleDrag.js +5 -9
  674. package/dist/interactions/actions/edit-anchors/handleDrag.js.map +1 -1
  675. package/dist/interactions/actions/edit-anchors/handles.js +1 -2
  676. package/dist/interactions/actions/edit-anchors/params.js +1 -2
  677. package/dist/interactions/actions/edit-anchors/preview.js +1 -2
  678. package/dist/interactions/actions/edit-anchors/symmetry.js +1 -2
  679. package/dist/interactions/actions/flip/action.js +8 -9
  680. package/dist/interactions/actions/flip/helpers.js +1 -2
  681. package/dist/interactions/actions/geometryProjection.js +1 -2
  682. package/dist/interactions/actions/gestureFrames.js +3 -4
  683. package/dist/interactions/actions/gestureLifecycle.js +1 -2
  684. package/dist/interactions/actions/hitSelection.js +7 -3
  685. package/dist/interactions/actions/hitSelection.js.map +1 -1
  686. package/dist/interactions/actions/insert/action.js +6 -7
  687. package/dist/interactions/actions/insert/commit.js +2 -3
  688. package/dist/interactions/actions/insert/extras.js +1 -2
  689. package/dist/interactions/actions/insert/frame.js +1 -2
  690. package/dist/interactions/actions/insert/geometry.js +1 -2
  691. package/dist/interactions/actions/insert/params.js +2 -3
  692. package/dist/interactions/actions/insert/parent.js +1 -2
  693. package/dist/interactions/actions/insert/placeAction.js +5 -6
  694. package/dist/interactions/actions/insert/repositionAction.js +1 -2
  695. package/dist/interactions/actions/insert/rotateAction.js +1 -2
  696. package/dist/interactions/actions/insert/session.js +5 -6
  697. package/dist/interactions/actions/insert/shape.js +2 -3
  698. package/dist/interactions/actions/lasso-select/action.js +9 -9
  699. package/dist/interactions/actions/lasso-select/action.js.map +1 -1
  700. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +2 -3
  701. package/dist/interactions/actions/magnification.js +37 -0
  702. package/dist/interactions/actions/magnification.js.map +1 -0
  703. package/dist/interactions/actions/move/action.js +2 -3
  704. package/dist/interactions/actions/move/behaviors/clampMove.js +42 -0
  705. package/dist/interactions/actions/move/behaviors/clampMove.js.map +1 -0
  706. package/dist/interactions/actions/move/behaviors/layoutDrop.js +2 -3
  707. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +2 -3
  708. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +1 -2
  709. package/dist/interactions/actions/move/behaviors/snapToContainer.js +2 -3
  710. package/dist/interactions/actions/move/capture.js +6 -7
  711. package/dist/interactions/actions/move/commit/index.js +2 -3
  712. package/dist/interactions/actions/move/commit/layoutDrop.js +4 -5
  713. package/dist/interactions/actions/move/commit/layoutRelease.js +7 -8
  714. package/dist/interactions/actions/move/commit/rebase.js +2 -3
  715. package/dist/interactions/actions/move/commit/reparent.js +5 -6
  716. package/dist/interactions/actions/move/delta.js +2 -3
  717. package/dist/interactions/actions/move/frame.js +2 -3
  718. package/dist/interactions/actions/move/gestureAdapter.js +1 -2
  719. package/dist/interactions/actions/move/landedDescendants.js +2 -3
  720. package/dist/interactions/actions/move/layout/container.js +6 -10
  721. package/dist/interactions/actions/move/layout/container.js.map +1 -1
  722. package/dist/interactions/actions/move/layout/dragged.js +2 -3
  723. package/dist/interactions/actions/move/layout/dropPass.js +5 -6
  724. package/dist/interactions/actions/move/layout/exits.js +4 -5
  725. package/dist/interactions/actions/move/layout/exits.js.map +1 -1
  726. package/dist/interactions/actions/move/layout/glide.js +2 -3
  727. package/dist/interactions/actions/move/layout/view.js +1 -2
  728. package/dist/interactions/actions/move/refusal.js +2 -3
  729. package/dist/interactions/actions/move/session.js +4 -5
  730. package/dist/interactions/actions/move/translate.js +2 -3
  731. package/dist/interactions/actions/moveNodes.js +5 -6
  732. package/dist/interactions/actions/notices.js +1 -2
  733. package/dist/interactions/actions/outlines/createOutlines.js +1 -2
  734. package/dist/interactions/actions/outlines/createOutlinesAction.js +2 -3
  735. package/dist/interactions/actions/outlines/outlineStroke.js +2 -3
  736. package/dist/interactions/actions/outlines/outlineStrokeAction.js +2 -3
  737. package/dist/interactions/actions/outlines/replaceWithPaths.js +5 -6
  738. package/dist/interactions/actions/outlines/strokeRegion.js +1 -2
  739. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +1 -2
  740. package/dist/interactions/actions/pathCommands/cutJoin.js +3 -4
  741. package/dist/interactions/actions/pathCommands/livePathEdit.js +3 -4
  742. package/dist/interactions/actions/pathCommands/pathNodes.js +3 -4
  743. package/dist/interactions/actions/pathCommands/simplifyOffset.js +2 -3
  744. package/dist/interactions/actions/pathGestureTags.js +1 -2
  745. package/dist/interactions/actions/planeInput.js +2 -3
  746. package/dist/interactions/actions/pointerState.js +1 -2
  747. package/dist/interactions/actions/poseDescriptorDep.js +1 -2
  748. package/dist/interactions/actions/poseFrame.js +3 -4
  749. package/dist/interactions/actions/resize/action.js +3 -4
  750. package/dist/interactions/actions/resize/aspect.js +1 -2
  751. package/dist/interactions/actions/resize/behaviors/clampMinSize.js +1 -2
  752. package/dist/interactions/actions/resize/boxFrame.js +1 -2
  753. package/dist/interactions/actions/resize/capture.js +7 -8
  754. package/dist/interactions/actions/resize/commit.js +3 -4
  755. package/dist/interactions/actions/resize/cornerHandles.js +1 -2
  756. package/dist/interactions/actions/resize/frame.js +7 -8
  757. package/dist/interactions/actions/resize/held.js +2 -3
  758. package/dist/interactions/actions/resize/minimum.js +1 -2
  759. package/dist/interactions/actions/resize/replay.js +1 -2
  760. package/dist/interactions/actions/resize/ruleBounds.js +1 -2
  761. package/dist/interactions/actions/resize/session.js +9 -10
  762. package/dist/interactions/actions/resolveOverlays.js +1 -2
  763. package/dist/interactions/actions/resolvePreviews.js +3 -4
  764. package/dist/interactions/actions/rotate/action.js +5 -6
  765. package/dist/interactions/actions/rotate/commit.js +2 -3
  766. package/dist/interactions/actions/rotate/frame.js +3 -4
  767. package/dist/interactions/actions/rotate/geometry.js +1 -2
  768. package/dist/interactions/actions/rotate/handle.js +2 -3
  769. package/dist/interactions/actions/rotate/replay.js +2 -3
  770. package/dist/interactions/actions/rotate/session.js +10 -11
  771. package/dist/interactions/actions/selectionSubtree.js +7 -22
  772. package/dist/interactions/actions/selectionSubtree.js.map +1 -1
  773. package/dist/interactions/actions/spatialReference.js +1 -2
  774. package/dist/interactions/actions/testUtils.js +1 -2
  775. package/dist/interactions/actions/transform-again/action.js +5 -6
  776. package/dist/interactions/actions/transform-again/memory.js +3 -4
  777. package/dist/interactions/actions/transform-again/memory.js.map +1 -1
  778. package/dist/interactions/actions/transformFinish.js +1 -2
  779. package/dist/interactions/actions/useActionSet.js +1 -2
  780. package/dist/interactions/actions/useNotices.js +1 -2
  781. package/dist/interactions/actions/useStandardActions.js +1 -2
  782. package/dist/interactions/gestures/dragGesture/dragGesture.js +1 -2
  783. package/dist/interactions/gestures/dragGesture/dragPointOf.js +1 -2
  784. package/dist/interactions/gestures/dragRadial/dragRadial.js +2 -3
  785. package/dist/interactions/gestures/dragRect/dragRect.js +2 -3
  786. package/dist/interactions/gestures/handleDrag/handleDrag.js +1 -2
  787. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +1 -2
  788. package/dist/interactions/gestures/shared/originProjection.js +1 -2
  789. package/dist/interactions/gestures/shared/screenTolerance.js +1 -2
  790. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +1 -2
  791. package/dist/kitSettingsSchema.js +4 -5
  792. package/dist/move.d.ts +18 -3
  793. package/dist/move.js +2 -1
  794. package/dist/test-hook/createTestHook.js +1 -2
  795. package/dist/test-hook/install.js +1 -2
  796. package/dist/test-hook/useTestHook.js +1 -2
  797. package/dist/test-seams.d.ts +4 -4
  798. package/dist/test-seams.js +2 -2
  799. package/dist/tools/builtin/anchors/anchorsTool.js +1 -2
  800. package/dist/tools/builtin/ellipse/useEllipseTool.js +2 -3
  801. package/dist/tools/builtin/eyedropper/useEyedropperTool.js +1 -2
  802. package/dist/tools/builtin/hand/dragPanContribution.js +1 -2
  803. package/dist/tools/builtin/hand/useHandTool.js +1 -2
  804. package/dist/tools/builtin/image/useImageTool.js +1 -2
  805. package/dist/tools/builtin/lasso/useLassoTool.js +1 -2
  806. package/dist/tools/builtin/line/useLineTool.js +2 -3
  807. package/dist/tools/builtin/measure/useMeasureTool.js +2 -3
  808. package/dist/tools/builtin/pen/penHandle.js +1 -2
  809. package/dist/tools/builtin/pen/usePenTool.js +6 -7
  810. package/dist/tools/builtin/pencil/usePencilTool.js +1 -2
  811. package/dist/tools/builtin/pickTopMostHit.js +1 -2
  812. package/dist/tools/builtin/polygon/usePolygonTool.js +3 -4
  813. package/dist/tools/builtin/pressTarget.js +1 -2
  814. package/dist/tools/builtin/rect/useRectTool.js +2 -3
  815. package/dist/tools/builtin/select/adapterPointQuery.js +3 -4
  816. package/dist/tools/builtin/select/collapseDeferred.js +1 -2
  817. package/dist/tools/builtin/select/groupEntry.js +2 -3
  818. package/dist/tools/builtin/select/pressDecision.js +3 -4
  819. package/dist/tools/builtin/select/pressDecision.js.map +1 -1
  820. package/dist/tools/builtin/select/selectionContributions.js +1 -2
  821. package/dist/tools/builtin/select/useSelectTool.js +5 -6
  822. package/dist/tools/builtin/shared/insertToolOptions.js +1 -2
  823. package/dist/tools/builtin/shared/pointerFollower.js +1 -2
  824. package/dist/tools/builtin/slice/useSliceTool.js +5 -6
  825. package/dist/tools/builtin/star/useStarTool.js +3 -4
  826. package/dist/tools/builtin/sticky/stickyNode.js +1 -2
  827. package/dist/tools/builtin/sticky/useStickyTool.js +2 -3
  828. package/dist/tools/builtin/text/useTextTool.js +1 -2
  829. package/dist/tools/index.js +2 -2
  830. package/dist/tools/overlayBinding.js +1 -2
  831. package/dist/tools/toolOptions.js +17 -4
  832. package/dist/tools/toolOptions.js.map +1 -1
  833. package/dist/tools/useKeybindings.js +1 -2
  834. package/dist/{types-DW14eu9B.d.ts → types-BUvUXZe5.d.ts} +3 -3
  835. package/dist/util/color.js +1 -2
  836. package/dist/util/paint.js +1 -2
  837. package/dist/version.js +2 -3
  838. package/package.json +27 -27
@@ -1,12 +1,12 @@
1
- import { pathOperationTags } from "../pathGestureTags.js";
2
1
  import { editingLayer, inPlane } from "../planeInput.js";
3
- import { representationOf } from "../../../domains/paths/pathRepresentation.js";
4
2
  import { pathEditPreview } from "../edit-anchors/preview.js";
5
3
  import { segmentUnder } from "./segmentUnder.js";
4
+ import { representationOf } from "../../../domains/paths/pathRepresentation.js";
5
+ import { pathOperationTags } from "../pathGestureTags.js";
6
6
  import { bendSegment, editAnchorSetTracked } from "@weasel-js/geom";
7
7
  import { ActionDisabledReason, isSegment } from "@weasel-js/routing";
8
8
 
9
- //#region src/interactions/actions/defaults/bendSegment.ts
9
+ // src/interactions/actions/defaults/bendSegment.ts
10
10
  var BEND_CURSOR = "grab";
11
11
  /** The segment press of the representation the path in edit is drawn
12
12
  * through, when it takes them. */
@@ -79,6 +79,5 @@ var bendSegmentAction = inPlane({
79
79
  }
80
80
  }, editingLayer);
81
81
 
82
- //#endregion
83
82
  export { bendSegmentAction };
84
83
  //# sourceMappingURL=bendSegment.js.map
@@ -1,4 +1,4 @@
1
- //#region src/interactions/actions/defaults/cancelGesture.ts
1
+ // src/interactions/actions/defaults/cancelGesture.ts
2
2
  /**
3
3
  * Escape mid-drag tells the dispatcher to abort every in-flight handle
4
4
  * (`onEnd('cancel')` on each, no scene mutation).
@@ -29,6 +29,5 @@ var cancelGestureAction = {
29
29
  }
30
30
  };
31
31
 
32
- //#endregion
33
32
  export { cancelGestureAction };
34
33
  //# sourceMappingURL=cancelGesture.js.map
@@ -1,6 +1,6 @@
1
1
  import { ActionDisabledReason } from "@weasel-js/routing";
2
2
 
3
- //#region src/interactions/actions/defaults/clearSelection.ts
3
+ // src/interactions/actions/defaults/clearSelection.ts
4
4
  /**
5
5
  * Clears the selection on a click on empty canvas. It has no ambient
6
6
  * `defaultBinding`: it fires only through `useSelectTool`'s bindings.
@@ -29,6 +29,5 @@ var clearSelectionAction = {
29
29
  }
30
30
  };
31
31
 
32
- //#endregion
33
32
  export { clearSelectionAction };
34
33
  //# sourceMappingURL=clearSelection.js.map
@@ -1,12 +1,19 @@
1
- import { composeWorldPose } from "../../../core/scene/composeFrame.js";
2
1
  import { poseDescriptorForNode } from "../../../core/geometry/poseDescriptor.js";
3
- import { scenePoseAdapter, sceneViewPoseAdapter } from "../../../core/scene/scenePoseAdapter.js";
4
- import { wheelPan } from "../../../core/viewport/wheelHandler.js";
5
2
  import { targetTransformOf, worldToLocal } from "../../../core/geometry/targetFrame.js";
3
+ import { composeWorldPose } from "../../../core/scene/composeFrame.js";
6
4
  import { nodeGates } from "../../../core/scene/nodeGates.js";
5
+ import { scenePoseAdapter, sceneViewPoseAdapter } from "../../../core/scene/scenePoseAdapter.js";
6
+ import { wheelPan } from "../../../core/viewport/wheelHandler.js";
7
7
  import { poseDescriptorOf } from "../poseDescriptorDep.js";
8
+ import { clamp } from "@weasel-js/geom";
8
9
 
9
- //#region src/interactions/actions/defaults/containerScroll.ts
10
+ // src/interactions/actions/defaults/containerScroll.ts
11
+ /**
12
+ * Wheel scrolling of a layout container whose content runs past its bounds,
13
+ * such as `tileGrid({ overflow: 'scroll' })`. The strategy's `contentExtent`
14
+ * says how far; the offset goes to `scene.scroll`, which moves what the view
15
+ * shows and leaves the document where it is.
16
+ */
10
17
  /**
11
18
  * How far `id`'s content can scroll: the span its layout's `contentExtent`
12
19
  * reaches past its bounds, read through the document fold the layout pass
@@ -88,7 +95,6 @@ function scrollablesAt(scene, at, descriptor) {
88
95
  function scrollableAt(scene, at, descriptor) {
89
96
  return scrollablesAt(scene, at, descriptor)[0] ?? null;
90
97
  }
91
- var clamp = (v, [lo, hi]) => Math.min(hi, Math.max(lo, v));
92
98
  function sceneOf(deps) {
93
99
  return deps?.scene;
94
100
  }
@@ -153,8 +159,8 @@ var containerScrollAction = {
153
159
  y: 0
154
160
  };
155
161
  const to = {
156
- x: clamp(from.x + by.x, hit.range.x),
157
- y: clamp(from.y + by.y, hit.range.y)
162
+ x: clamp(from.x + by.x, ...hit.range.x),
163
+ y: clamp(from.y + by.y, ...hit.range.y)
158
164
  };
159
165
  if (to.x === from.x && to.y === from.y) continue;
160
166
  scene.scroll.set(hit.id, to);
@@ -165,6 +171,5 @@ var containerScrollAction = {
165
171
  }
166
172
  };
167
173
 
168
- //#endregion
169
174
  export { containerScrollAction, scrollRange, scrollableAt };
170
175
  //# sourceMappingURL=containerScroll.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"containerScroll.js","names":[],"sources":["../../../../src/interactions/actions/defaults/containerScroll.ts"],"sourcesContent":["/**\n * Wheel scrolling of a layout container whose content runs past its bounds,\n * such as `tileGrid({ overflow: 'scroll' })`. The strategy's `contentExtent`\n * says how far; the offset goes to `scene.scroll`, which moves what the view\n * shows and leaves the document where it is.\n */\nimport type { Action, ActionDeps } from '@weasel-js/routing';\nimport { poseDescriptorForNode, type PoseDescriptor } from 'core/geometry/poseDescriptor';\nimport { targetTransformOf, worldToLocal } from 'core/geometry/targetFrame';\nimport { composeWorldPose } from 'core/scene/composePose';\nimport { nodeGates } from 'core/scene/nodeGates';\nimport { scenePoseAdapter, sceneViewPoseAdapter } from 'core/scene/scenePoseAdapter';\nimport type { NodeId, Scene } from 'core/scene/types';\nimport { wheelPan } from 'core/viewport/wheelHandler';\nimport { poseDescriptorOf } from '../poseDescriptorDep';\nimport type { ImmediateParams } from '@weasel-js/routing';\n\ntype AnyScene = Scene<unknown, string, unknown>;\n\n/** How far a container's content can scroll on each axis, in its own units:\n * `[min, max]`, zero included, so an unscrolled container is in range. */\nexport interface ScrollRange {\n x: readonly [number, number];\n y: readonly [number, number];\n}\n\n/**\n * How far `id`'s content can scroll: the span its layout's `contentExtent`\n * reaches past its bounds, read through the document fold the layout pass\n * arranges it in. Measured in the container's own frame, the axes a scroll\n * offset runs along, so a turned container scrolls by its own length rather\n * than its box's. `null` for a node whose layout reports no extent, one whose\n * pose is not a frame, and under a composition that cannot scroll.\n */\nexport function scrollRange(scene: AnyScene, id: NodeId, descriptor: PoseDescriptor<unknown>): ScrollRange | null {\n const layout = scene.layoutOf(id);\n const node = scene.get(id);\n const { compose, decompose, scroll } = scene.composition;\n if (!layout?.contentExtent || !node || !scroll) return null;\n const doc = scenePoseAdapter(scene);\n if (doc.definesFrame?.(id) === false) return null;\n const world = composeWorldPose(doc, id, compose);\n const b = poseDescriptorForNode(descriptor, node).getBounds(decompose(world, world));\n const children = scene.childrenOf(id).map((cid) => ({\n id: cid as string,\n pose: decompose(world, composeWorldPose(doc, cid, compose)),\n }));\n const e = layout.contentExtent({ id: id as string, bounds: b }, children);\n return {\n x: [Math.min(0, e.x - b.x), Math.max(0, e.x + e.width - (b.x + b.width))],\n y: [Math.min(0, e.y - b.y), Math.max(0, e.y + e.height - (b.y + b.height))],\n };\n}\n\nconst canScroll = (r: ScrollRange): boolean => r.x[0] < r.x[1] || r.y[0] < r.y[1];\n\ninterface BoxLike { x: number; y: number; width: number; height: number }\nconst isBox = (p: unknown): p is BoxLike => {\n const b = p as Partial<BoxLike> | null;\n return typeof b?.x === 'number' && typeof b.y === 'number' && typeof b.width === 'number' && typeof b.height === 'number';\n};\n\n/** Whether the world point `at` falls on a container shown at `pose`, tested\n * in its own unturned box, so a turned container takes only its own area. */\nfunction shownAt(pose: unknown, at: { x: number; y: number }, bounds: () => BoxLike): boolean {\n const b = isBox(pose) ? pose : bounds();\n const p = isBox(pose) ? worldToLocal(targetTransformOf(pose), at.x, at.y) : at;\n return p !== null && p.x >= b.x && p.x <= b.x + b.width && p.y >= b.y && p.y <= b.y + b.height;\n}\n\ninterface Scrollable { id: NodeId; range: ScrollRange }\n\n/** The shown containers under the world point `at` whose content can scroll,\n * innermost first: the innermost one and each that holds it. */\nfunction scrollablesAt(scene: AnyScene, at: { x: number; y: number }, descriptor: PoseDescriptor<unknown>): Scrollable[] {\n const gates = nodeGates(scene);\n const view = sceneViewPoseAdapter(scene);\n const { compose } = scene.composition;\n const hits = new Map<NodeId, ScrollRange>();\n let innermost: NodeId | null = null;\n const visit = (ids: readonly NodeId[]): void => {\n for (const id of ids) {\n const node = scene.get(id);\n if (!node || gates.hidden(id)) continue;\n const range = scrollRange(scene, id, descriptor);\n if (range && canScroll(range)) {\n const pose = composeWorldPose(view, id, compose);\n if (shownAt(pose, at, () => poseDescriptorForNode(descriptor, node).getBounds(pose))) {\n hits.set(id, range);\n innermost = id;\n }\n }\n visit(scene.childrenOf(id));\n }\n };\n visit(scene.roots);\n const out: Scrollable[] = [];\n for (let id: NodeId | null = innermost; id !== null; id = scene.get(id)?.parent ?? null) {\n const range = hits.get(id);\n if (range) out.push({ id, range });\n }\n return out;\n}\n\n/** The innermost shown container under the world point `at` whose content\n * can scroll, with its range. */\nexport function scrollableAt(\n scene: AnyScene,\n at: { x: number; y: number },\n descriptor: PoseDescriptor<unknown>,\n): Scrollable | null {\n return scrollablesAt(scene, at, descriptor)[0] ?? null;\n}\n\nconst clamp = (v: number, [lo, hi]: readonly [number, number]): number => Math.min(hi, Math.max(lo, v));\n\nfunction sceneOf(deps: ActionDeps | undefined): AnyScene | undefined {\n return (deps as { scene?: AnyScene } | undefined)?.scene;\n}\n\n/**\n * Wheel over a container whose content runs past its bounds scrolls that\n * content along the container's own axes, clamped to the strategy's\n * `contentExtent`; Shift+wheel scrolls it across. A container already at the\n * end of its range in the wheel's direction hands the wheel to the scrollable\n * container holding it, and past the outermost one the action passes, so the\n * wheel pans the viewport. Anywhere else it declines.\n */\nexport const containerScrollAction: Action & { requires: string[] } = {\n id: 'container.scroll',\n label: 'Scroll container (wheel)',\n group: 'viewport',\n defaultBinding: [\n { spec: { kind: 'wheel' }, opts: { id: 'container.scroll.wheel', yields: true } },\n {\n spec: { kind: 'wheel', mods: { shift: true } },\n opts: { id: 'container.scroll.swapAxis', yields: true, params: { swapAxis: true } },\n },\n ],\n requires: ['scene', 'view', 'poseDescriptor'],\n enabled: (deps, at) => {\n const scene = sceneOf(deps);\n if (!scene || !at) return 'not-applicable';\n return scrollableAt(scene, at, poseDescriptorOf(deps?.poseDescriptor)) ? true : 'not-applicable';\n },\n invoker: {\n timing: 'immediate',\n run(deps, params) {\n const scene = sceneOf(deps);\n const view = deps.view?.get();\n const world = (params as ImmediateParams | undefined)?.world;\n if (!scene || !view || !world) return 'pass';\n const delta = { deltaX: (params?.deltaX as number | undefined) ?? 0, deltaY: (params?.deltaY as number | undefined) ?? 0 };\n // The pan's own conversion, from a view at the origin: how far the wheel moves in world units.\n const by = wheelPan({ x: 0, y: 0, scale: view.scale }, delta, { swapAxis: params?.swapAxis === true });\n for (const hit of scrollablesAt(scene, world, poseDescriptorOf(deps.poseDescriptor))) {\n const from = scene.scroll.get(hit.id) ?? { x: 0, y: 0 };\n const to = { x: clamp(from.x + by.x, hit.range.x), y: clamp(from.y + by.y, hit.range.y) };\n if (to.x === from.x && to.y === from.y) continue;\n scene.scroll.set(hit.id, to);\n return undefined;\n }\n return 'pass';\n },\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"containerScroll.js","names":[],"sources":["../../../../src/interactions/actions/defaults/containerScroll.ts"],"sourcesContent":["/**\n * Wheel scrolling of a layout container whose content runs past its bounds,\n * such as `tileGrid({ overflow: 'scroll' })`. The strategy's `contentExtent`\n * says how far; the offset goes to `scene.scroll`, which moves what the view\n * shows and leaves the document where it is.\n */\nimport { clamp } from '@weasel-js/geom';\nimport type { Action, ActionDeps } from '@weasel-js/routing';\nimport { poseDescriptorForNode, type PoseDescriptor } from 'core/geometry/poseDescriptor';\nimport { targetTransformOf, worldToLocal } from 'core/geometry/targetFrame';\nimport { composeWorldPose } from 'core/scene/composePose';\nimport { nodeGates } from 'core/scene/nodeGates';\nimport { scenePoseAdapter, sceneViewPoseAdapter } from 'core/scene/scenePoseAdapter';\nimport type { NodeId, Scene } from 'core/scene/types';\nimport { wheelPan } from 'core/viewport/wheelHandler';\nimport { poseDescriptorOf } from '../poseDescriptorDep';\nimport type { ImmediateParams } from '@weasel-js/routing';\n\ntype AnyScene = Scene<unknown, string, unknown>;\n\n/** How far a container's content can scroll on each axis, in its own units:\n * `[min, max]`, zero included, so an unscrolled container is in range. */\nexport interface ScrollRange {\n x: readonly [number, number];\n y: readonly [number, number];\n}\n\n/**\n * How far `id`'s content can scroll: the span its layout's `contentExtent`\n * reaches past its bounds, read through the document fold the layout pass\n * arranges it in. Measured in the container's own frame, the axes a scroll\n * offset runs along, so a turned container scrolls by its own length rather\n * than its box's. `null` for a node whose layout reports no extent, one whose\n * pose is not a frame, and under a composition that cannot scroll.\n */\nexport function scrollRange(scene: AnyScene, id: NodeId, descriptor: PoseDescriptor<unknown>): ScrollRange | null {\n const layout = scene.layoutOf(id);\n const node = scene.get(id);\n const { compose, decompose, scroll } = scene.composition;\n if (!layout?.contentExtent || !node || !scroll) return null;\n const doc = scenePoseAdapter(scene);\n if (doc.definesFrame?.(id) === false) return null;\n const world = composeWorldPose(doc, id, compose);\n const b = poseDescriptorForNode(descriptor, node).getBounds(decompose(world, world));\n const children = scene.childrenOf(id).map((cid) => ({\n id: cid as string,\n pose: decompose(world, composeWorldPose(doc, cid, compose)),\n }));\n const e = layout.contentExtent({ id: id as string, bounds: b }, children);\n return {\n x: [Math.min(0, e.x - b.x), Math.max(0, e.x + e.width - (b.x + b.width))],\n y: [Math.min(0, e.y - b.y), Math.max(0, e.y + e.height - (b.y + b.height))],\n };\n}\n\nconst canScroll = (r: ScrollRange): boolean => r.x[0] < r.x[1] || r.y[0] < r.y[1];\n\ninterface BoxLike { x: number; y: number; width: number; height: number }\nconst isBox = (p: unknown): p is BoxLike => {\n const b = p as Partial<BoxLike> | null;\n return typeof b?.x === 'number' && typeof b.y === 'number' && typeof b.width === 'number' && typeof b.height === 'number';\n};\n\n/** Whether the world point `at` falls on a container shown at `pose`, tested\n * in its own unturned box, so a turned container takes only its own area. */\nfunction shownAt(pose: unknown, at: { x: number; y: number }, bounds: () => BoxLike): boolean {\n const b = isBox(pose) ? pose : bounds();\n const p = isBox(pose) ? worldToLocal(targetTransformOf(pose), at.x, at.y) : at;\n return p !== null && p.x >= b.x && p.x <= b.x + b.width && p.y >= b.y && p.y <= b.y + b.height;\n}\n\ninterface Scrollable { id: NodeId; range: ScrollRange }\n\n/** The shown containers under the world point `at` whose content can scroll,\n * innermost first: the innermost one and each that holds it. */\nfunction scrollablesAt(scene: AnyScene, at: { x: number; y: number }, descriptor: PoseDescriptor<unknown>): Scrollable[] {\n const gates = nodeGates(scene);\n const view = sceneViewPoseAdapter(scene);\n const { compose } = scene.composition;\n const hits = new Map<NodeId, ScrollRange>();\n let innermost: NodeId | null = null;\n const visit = (ids: readonly NodeId[]): void => {\n for (const id of ids) {\n const node = scene.get(id);\n if (!node || gates.hidden(id)) continue;\n const range = scrollRange(scene, id, descriptor);\n if (range && canScroll(range)) {\n const pose = composeWorldPose(view, id, compose);\n if (shownAt(pose, at, () => poseDescriptorForNode(descriptor, node).getBounds(pose))) {\n hits.set(id, range);\n innermost = id;\n }\n }\n visit(scene.childrenOf(id));\n }\n };\n visit(scene.roots);\n const out: Scrollable[] = [];\n for (let id: NodeId | null = innermost; id !== null; id = scene.get(id)?.parent ?? null) {\n const range = hits.get(id);\n if (range) out.push({ id, range });\n }\n return out;\n}\n\n/** The innermost shown container under the world point `at` whose content\n * can scroll, with its range. */\nexport function scrollableAt(\n scene: AnyScene,\n at: { x: number; y: number },\n descriptor: PoseDescriptor<unknown>,\n): Scrollable | null {\n return scrollablesAt(scene, at, descriptor)[0] ?? null;\n}\n\nfunction sceneOf(deps: ActionDeps | undefined): AnyScene | undefined {\n return (deps as { scene?: AnyScene } | undefined)?.scene;\n}\n\n/**\n * Wheel over a container whose content runs past its bounds scrolls that\n * content along the container's own axes, clamped to the strategy's\n * `contentExtent`; Shift+wheel scrolls it across. A container already at the\n * end of its range in the wheel's direction hands the wheel to the scrollable\n * container holding it, and past the outermost one the action passes, so the\n * wheel pans the viewport. Anywhere else it declines.\n */\nexport const containerScrollAction: Action & { requires: string[] } = {\n id: 'container.scroll',\n label: 'Scroll container (wheel)',\n group: 'viewport',\n defaultBinding: [\n { spec: { kind: 'wheel' }, opts: { id: 'container.scroll.wheel', yields: true } },\n {\n spec: { kind: 'wheel', mods: { shift: true } },\n opts: { id: 'container.scroll.swapAxis', yields: true, params: { swapAxis: true } },\n },\n ],\n requires: ['scene', 'view', 'poseDescriptor'],\n enabled: (deps, at) => {\n const scene = sceneOf(deps);\n if (!scene || !at) return 'not-applicable';\n return scrollableAt(scene, at, poseDescriptorOf(deps?.poseDescriptor)) ? true : 'not-applicable';\n },\n invoker: {\n timing: 'immediate',\n run(deps, params) {\n const scene = sceneOf(deps);\n const view = deps.view?.get();\n const world = (params as ImmediateParams | undefined)?.world;\n if (!scene || !view || !world) return 'pass';\n const delta = { deltaX: (params?.deltaX as number | undefined) ?? 0, deltaY: (params?.deltaY as number | undefined) ?? 0 };\n // The pan's own conversion, from a view at the origin: how far the wheel moves in world units.\n const by = wheelPan({ x: 0, y: 0, scale: view.scale }, delta, { swapAxis: params?.swapAxis === true });\n for (const hit of scrollablesAt(scene, world, poseDescriptorOf(deps.poseDescriptor))) {\n const from = scene.scroll.get(hit.id) ?? { x: 0, y: 0 };\n const to = { x: clamp(from.x + by.x, ...hit.range.x), y: clamp(from.y + by.y, ...hit.range.y) };\n if (to.x === from.x && to.y === from.y) continue;\n scene.scroll.set(hit.id, to);\n return undefined;\n }\n return 'pass';\n },\n },\n};\n"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
- import { viewToTransform } from "../../../core/viewport/view.js";
2
- import { screenToWorld } from "../../../core/viewport/viewTransform.js";
3
- import { unionAABB } from "../../../core/geometry/unionBounds.js";
4
- import { visualBoundsViaDescriptor } from "../../../core/geometry/poseDescriptor.js";
5
- import { asNodeId } from "../../../core/scene/types.js";
6
1
  import { scenePoseFrame } from "../poseFrame.js";
7
2
  import { nodeDescriptors, poseDescriptorOf } from "../poseDescriptorDep.js";
3
+ import { visualBoundsViaDescriptor } from "../../../core/geometry/poseDescriptor.js";
4
+ import { unionAABB } from "../../../core/geometry/unionBounds.js";
5
+ import { screenToWorld } from "../../../core/viewport/viewTransform.js";
6
+ import { viewToTransform } from "../../../core/viewport/view.js";
7
+ import { asNodeId } from "../../../core/scene/types.js";
8
8
  import { pressTarget } from "../../../tools/builtin/pressTarget.js";
9
9
  import { ActionDisabledReason } from "@weasel-js/routing";
10
10
 
11
- //#region src/interactions/actions/defaults/contextMenu.ts
11
+ // src/interactions/actions/defaults/contextMenu.ts
12
12
  /** World center of the selection's bounds, else of the visible canvas. */
13
13
  function keyboardAnchor(deps) {
14
14
  const ids = deps.selection?.get() ?? [];
@@ -163,6 +163,5 @@ var contextMenuAction = {
163
163
  }
164
164
  };
165
165
 
166
- //#endregion
167
166
  export { contextMenuAction, keyboardAnchor, menuHitFor, openContextMenu };
168
167
  //# sourceMappingURL=contextMenu.js.map
@@ -1,7 +1,7 @@
1
- import { selectedRoots } from "../selectionSubtree.js";
2
1
  import { createInsertOp } from "../../../core/ops/create.js";
2
+ import { selectedRoots } from "../selectionSubtree.js";
3
3
 
4
- //#region src/interactions/actions/defaults/copySubtree.ts
4
+ // src/interactions/actions/defaults/copySubtree.ts
5
5
  function copySubtree(scene, id, parent, isRoot, poseOf, label, ops, copyOf) {
6
6
  const node = scene.get(id);
7
7
  if (!node) return null;
@@ -49,6 +49,5 @@ function copySelection(scene, ids, poseOf, label) {
49
49
  };
50
50
  }
51
51
 
52
- //#endregion
53
52
  export { copySelection };
54
53
  //# sourceMappingURL=copySubtree.js.map
@@ -1,9 +1,9 @@
1
- import { paintInheritors } from "../../../core/scene/inheritedPaint.js";
2
- import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
3
1
  import { createSetDataOp } from "../../../core/ops/setData.js";
2
+ import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
3
+ import { paintInheritors } from "../../../core/scene/inheritedPaint.js";
4
4
  import { ActionDisabledReason } from "@weasel-js/routing";
5
5
 
6
- //#region src/interactions/actions/defaults/createPaintAction.ts
6
+ // src/interactions/actions/defaults/createPaintAction.ts
7
7
  /**
8
8
  * The ongoing-action body the paint actions share: it previews without
9
9
  * touching the scene, and commits one batch (one undo entry) through the
@@ -108,6 +108,5 @@ function createPaintAction(spec) {
108
108
  };
109
109
  }
110
110
 
111
- //#endregion
112
111
  export { createPaintAction };
113
112
  //# sourceMappingURL=createPaintAction.js.map
@@ -1,9 +1,9 @@
1
+ import { createDeleteOp } from "../../../core/ops/delete.js";
1
2
  import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
2
3
  import { requiresSelection } from "./requiresSelection.js";
3
- import { createDeleteOp } from "../../../core/ops/delete.js";
4
4
  import { hiddenSourcesTakenWith } from "../../../domains/pathEffects/effectSources.js";
5
5
 
6
- //#region src/interactions/actions/defaults/delete.ts
6
+ // src/interactions/actions/defaults/delete.ts
7
7
  /** `id`'s slot among the scene roots or its parent's children, or `-1`. */
8
8
  function hostIndex(scene, id) {
9
9
  const node = scene.get(id);
@@ -107,6 +107,5 @@ function createDeleteAction(opts = {}) {
107
107
  */
108
108
  var deleteAction = createDeleteAction();
109
109
 
110
- //#endregion
111
110
  export { buildDeleteOps, commitDeleteToScene, createDeleteAction, deleteAction, hiddenSourceDeleteOps };
112
111
  //# sourceMappingURL=delete.js.map
@@ -1,13 +1,13 @@
1
+ import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
2
+ import { copySelection } from "./copySubtree.js";
3
+ import { requiresSelection } from "./requiresSelection.js";
4
+ import { nodeDescriptors, poseDescriptorOf } from "../poseDescriptorDep.js";
1
5
  import { translatePoseViaDescriptor } from "../../../core/geometry/poseDescriptor.js";
2
6
  import { scenePoseFrame } from "../poseFrame.js";
3
- import { nodeDescriptors, poseDescriptorOf } from "../poseDescriptorDep.js";
4
- import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
5
7
  import { storedDelta } from "../selectionSubtree.js";
6
8
  import { recordTransform } from "../transform-again/memory.js";
7
- import { requiresSelection } from "./requiresSelection.js";
8
- import { copySelection } from "./copySubtree.js";
9
9
 
10
- //#region src/interactions/actions/defaults/duplicate.ts
10
+ // src/interactions/actions/defaults/duplicate.ts
11
11
  /** Same nudge `sceneToAdapter.getPasteOffset` gives a paste, so duplicate and
12
12
  * paste land in the same place rather than disagreeing by a few units. */
13
13
  var DUPLICATE_OFFSET = 12;
@@ -82,6 +82,5 @@ var duplicateAction = {
82
82
  enabled: requiresSelection
83
83
  };
84
84
 
85
- //#endregion
86
85
  export { DUPLICATE_OFFSET, duplicateAction, duplicateSelection };
87
86
  //# sourceMappingURL=duplicate.js.map
@@ -1,9 +1,9 @@
1
- import { pressTarget } from "../../../tools/builtin/pressTarget.js";
2
1
  import { isEnterable } from "../../../canvas/deps/enteredGroup.js";
2
+ import { pressTarget } from "../../../tools/builtin/pressTarget.js";
3
+ import { rectContainsPoint } from "@weasel-js/geom";
3
4
  import { ActionDisabledReason } from "@weasel-js/routing";
4
5
 
5
- //#region src/interactions/actions/defaults/enterGroup.ts
6
- var inside = (b, p) => p.x >= b.x && p.x <= b.x + b.width && p.y >= b.y && p.y <= b.y + b.height;
6
+ // src/interactions/actions/defaults/enterGroup.ts
7
7
  /**
8
8
  * Leaves every entered group whose box does not hold `p`, innermost first. A press that lands
9
9
  * inside the entered group's box stays in it, and so does one on a group with no box to read.
@@ -11,7 +11,7 @@ var inside = (b, p) => p.x >= b.x && p.x <= b.x + b.width && p.y >= b.y && p.y <
11
11
  function leaveGroupsOutside(entered, boxOf, p) {
12
12
  for (let id = entered.get(); id !== null; id = entered.get()) {
13
13
  const box = boxOf(id);
14
- if (box === null || inside(box, p)) return;
14
+ if (box === null || rectContainsPoint(box, p.x, p.y)) return;
15
15
  entered.leave();
16
16
  if (entered.get() === id) return;
17
17
  }
@@ -63,7 +63,7 @@ function createLeaveGroupAction(opts) {
63
63
  if (here === null || deps?.editAnchors?.editingId) return ActionDisabledReason.NotApplicable;
64
64
  if (!at) return true;
65
65
  const box = opts.boxOf(here);
66
- return box !== null && !inside(box, at) ? true : ActionDisabledReason.NotApplicable;
66
+ return box !== null && !rectContainsPoint(box, at.x, at.y) ? true : ActionDisabledReason.NotApplicable;
67
67
  },
68
68
  invoker: {
69
69
  timing: "immediate",
@@ -78,6 +78,5 @@ function createLeaveGroupAction(opts) {
78
78
  };
79
79
  }
80
80
 
81
- //#endregion
82
81
  export { createEnterGroupAction, createLeaveGroupAction, leaveGroupsOutside };
83
82
  //# sourceMappingURL=enterGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enterGroup.js","names":[],"sources":["../../../../src/interactions/actions/defaults/enterGroup.ts"],"sourcesContent":["import type { Action, ActionDeps, WorldPoint } from '@weasel-js/routing';\nimport { ActionDisabledReason } from '@weasel-js/routing';\nimport { isEnterable, type EnteredGroupApi } from 'canvas/deps/enteredGroup';\nimport type { NodeId } from 'core/scene/types';\nimport { pressTarget, type PressTargetTree } from '../../../tools/builtin/pressTarget';\nimport type { ImmediateParams } from '@weasel-js/routing';\n\ntype Box = { x: number; y: number; width: number; height: number };\n\n/** What `group.enter` reads: the node under a point and the tree above it. */\nexport interface EnterGroupOptions {\n /** The node under the point, before any group above it is considered. */\n pickHit: (world: WorldPoint) => string | null;\n tree: PressTargetTree;\n}\n\n/** What `group.leave` reads: where a group's box is. */\nexport interface LeaveGroupOptions {\n boxOf: (id: string) => Box | null;\n}\n\nconst inside = (b: Box, p: WorldPoint) =>\n p.x >= b.x && p.x <= b.x + b.width && p.y >= b.y && p.y <= b.y + b.height;\n\n/**\n * Leaves every entered group whose box does not hold `p`, innermost first. A press that lands\n * inside the entered group's box stays in it, and so does one on a group with no box to read.\n */\nexport function leaveGroupsOutside(\n entered: EnteredGroupApi,\n boxOf: LeaveGroupOptions['boxOf'],\n p: WorldPoint,\n): void {\n for (let id = entered.get(); id !== null; id = entered.get()) {\n const box = boxOf(id);\n if (box === null || inside(box, p)) return;\n entered.leave();\n if (entered.get() === id) return;\n }\n}\n\n/**\n * `group.enter` — enters the group a press at the point would select. Bound to a double-click\n * on a body by `useSelectTool`. It declines where that is not a group, so the double-click\n * falls through to text editing, path editing and the mode triggers.\n */\nexport function createEnterGroupAction(opts: EnterGroupOptions): Action {\n const targetAt = (deps: ActionDeps | undefined, p: WorldPoint | undefined): string | null => {\n const entered = deps?.enteredGroup;\n if (!entered || !p) return null;\n const hit = opts.pickHit(p);\n if (hit === null) return null;\n const target = pressTarget(opts.tree, hit, entered.get());\n return isEnterable(opts.tree.getNode(target) as Parameters<typeof isEnterable>[0]) ? target : null;\n };\n return {\n id: 'group.enter',\n label: 'Enter group',\n eligible: { capability: 'creates-selection' },\n requires: ['enteredGroup'],\n enabled: (deps, at) => (targetAt(deps, at) !== null ? true : ActionDisabledReason.NotApplicable),\n invoker: {\n timing: 'immediate' as const,\n run: (deps, params) => {\n const world = (params as ImmediateParams | undefined)?.world;\n const target = world ? targetAt(deps, world) : null;\n if (target !== null) deps.enteredGroup?.enter(target as NodeId);\n },\n },\n };\n}\n\n/**\n * `group.leave` — Escape leaves the entered group for the one above it; a press outside the\n * entered group's box leaves every group that box does not hold. With nothing entered it\n * declines, so Escape clears the selection as before, and it declines while path anchors are\n * being edited, so that Escape exits the edit first.\n */\nexport function createLeaveGroupAction(opts: LeaveGroupOptions): Action {\n return {\n id: 'group.leave',\n label: 'Leave group',\n eligible: { capability: 'creates-selection' },\n requires: ['enteredGroup', 'editAnchors'],\n enabled: (deps, at) => {\n const here = deps?.enteredGroup?.get() ?? null;\n if (here === null || deps?.editAnchors?.editingId) return ActionDisabledReason.NotApplicable;\n if (!at) return true;\n const box = opts.boxOf(here);\n return box !== null && !inside(box, at) ? true : ActionDisabledReason.NotApplicable;\n },\n invoker: {\n timing: 'immediate' as const,\n run: (deps, params) => {\n const entered = deps.enteredGroup;\n if (!entered) return;\n const world = (params as ImmediateParams | undefined)?.world;\n if (world) leaveGroupsOutside(entered, opts.boxOf, world);\n else entered.leave();\n },\n },\n };\n}\n"],"mappings":";;;;;AAqBA,IAAM,UAAU,GAAQ,MACtB,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;;;;;AAMrE,SAAgB,mBACd,SACA,OACA,GACM;CACN,KAAK,IAAI,KAAK,QAAQ,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,GAAG;EAC5D,MAAM,MAAM,MAAM,EAAE;EACpB,IAAI,QAAQ,QAAQ,OAAO,KAAK,CAAC,GAAG;EACpC,QAAQ,MAAM;EACd,IAAI,QAAQ,IAAI,MAAM,IAAI;CAC5B;AACF;;;;;;AAOA,SAAgB,uBAAuB,MAAiC;CACtE,MAAM,YAAY,MAA8B,MAA6C;EAC3F,MAAM,UAAU,MAAM;EACtB,IAAI,CAAC,WAAW,CAAC,GAAG,OAAO;EAC3B,MAAM,MAAM,KAAK,QAAQ,CAAC;EAC1B,IAAI,QAAQ,MAAM,OAAO;EACzB,MAAM,SAAS,YAAY,KAAK,MAAM,KAAK,QAAQ,IAAI,CAAC;EACxD,OAAO,YAAY,KAAK,KAAK,QAAQ,MAAM,CAAsC,IAAI,SAAS;CAChG;CACA,OAAO;EACL,IAAI;EACJ,OAAO;EACP,UAAU,EAAE,YAAY,oBAAoB;EAC5C,UAAU,CAAC,cAAc;EACzB,UAAU,MAAM,OAAQ,SAAS,MAAM,EAAE,MAAM,OAAO,OAAO,qBAAqB;EAClF,SAAS;GACP,QAAQ;GACR,MAAM,MAAM,WAAW;IACrB,MAAM,QAAS,QAAwC;IACvD,MAAM,SAAS,QAAQ,SAAS,MAAM,KAAK,IAAI;IAC/C,IAAI,WAAW,MAAM,KAAK,cAAc,MAAM,MAAgB;GAChE;EACF;CACF;AACF;;;;;;;AAQA,SAAgB,uBAAuB,MAAiC;CACtE,OAAO;EACL,IAAI;EACJ,OAAO;EACP,UAAU,EAAE,YAAY,oBAAoB;EAC5C,UAAU,CAAC,gBAAgB,aAAa;EACxC,UAAU,MAAM,OAAO;GACrB,MAAM,OAAO,MAAM,cAAc,IAAI,KAAK;GAC1C,IAAI,SAAS,QAAQ,MAAM,aAAa,WAAW,OAAO,qBAAqB;GAC/E,IAAI,CAAC,IAAI,OAAO;GAChB,MAAM,MAAM,KAAK,MAAM,IAAI;GAC3B,OAAO,QAAQ,QAAQ,CAAC,OAAO,KAAK,EAAE,IAAI,OAAO,qBAAqB;EACxE;EACA,SAAS;GACP,QAAQ;GACR,MAAM,MAAM,WAAW;IACrB,MAAM,UAAU,KAAK;IACrB,IAAI,CAAC,SAAS;IACd,MAAM,QAAS,QAAwC;IACvD,IAAI,OAAO,mBAAmB,SAAS,KAAK,OAAO,KAAK;SACnD,QAAQ,MAAM;GACrB;EACF;CACF;AACF"}
1
+ {"version":3,"file":"enterGroup.js","names":[],"sources":["../../../../src/interactions/actions/defaults/enterGroup.ts"],"sourcesContent":["import { rectContainsPoint } from '@weasel-js/geom';\nimport type { Action, ActionDeps, WorldPoint } from '@weasel-js/routing';\nimport { ActionDisabledReason } from '@weasel-js/routing';\nimport { isEnterable, type EnteredGroupApi } from 'canvas/deps/enteredGroup';\nimport type { NodeId } from 'core/scene/types';\nimport { pressTarget, type PressTargetTree } from '../../../tools/builtin/pressTarget';\nimport type { ImmediateParams } from '@weasel-js/routing';\n\ntype Box = { x: number; y: number; width: number; height: number };\n\n/** What `group.enter` reads: the node under a point and the tree above it. */\nexport interface EnterGroupOptions {\n /** The node under the point, before any group above it is considered. */\n pickHit: (world: WorldPoint) => string | null;\n tree: PressTargetTree;\n}\n\n/** What `group.leave` reads: where a group's box is. */\nexport interface LeaveGroupOptions {\n boxOf: (id: string) => Box | null;\n}\n\n/**\n * Leaves every entered group whose box does not hold `p`, innermost first. A press that lands\n * inside the entered group's box stays in it, and so does one on a group with no box to read.\n */\nexport function leaveGroupsOutside(\n entered: EnteredGroupApi,\n boxOf: LeaveGroupOptions['boxOf'],\n p: WorldPoint,\n): void {\n for (let id = entered.get(); id !== null; id = entered.get()) {\n const box = boxOf(id);\n if (box === null || rectContainsPoint(box, p.x, p.y)) return;\n entered.leave();\n if (entered.get() === id) return;\n }\n}\n\n/**\n * `group.enter` — enters the group a press at the point would select. Bound to a double-click\n * on a body by `useSelectTool`. It declines where that is not a group, so the double-click\n * falls through to text editing, path editing and the mode triggers.\n */\nexport function createEnterGroupAction(opts: EnterGroupOptions): Action {\n const targetAt = (deps: ActionDeps | undefined, p: WorldPoint | undefined): string | null => {\n const entered = deps?.enteredGroup;\n if (!entered || !p) return null;\n const hit = opts.pickHit(p);\n if (hit === null) return null;\n const target = pressTarget(opts.tree, hit, entered.get());\n return isEnterable(opts.tree.getNode(target) as Parameters<typeof isEnterable>[0]) ? target : null;\n };\n return {\n id: 'group.enter',\n label: 'Enter group',\n eligible: { capability: 'creates-selection' },\n requires: ['enteredGroup'],\n enabled: (deps, at) => (targetAt(deps, at) !== null ? true : ActionDisabledReason.NotApplicable),\n invoker: {\n timing: 'immediate' as const,\n run: (deps, params) => {\n const world = (params as ImmediateParams | undefined)?.world;\n const target = world ? targetAt(deps, world) : null;\n if (target !== null) deps.enteredGroup?.enter(target as NodeId);\n },\n },\n };\n}\n\n/**\n * `group.leave` — Escape leaves the entered group for the one above it; a press outside the\n * entered group's box leaves every group that box does not hold. With nothing entered it\n * declines, so Escape clears the selection as before, and it declines while path anchors are\n * being edited, so that Escape exits the edit first.\n */\nexport function createLeaveGroupAction(opts: LeaveGroupOptions): Action {\n return {\n id: 'group.leave',\n label: 'Leave group',\n eligible: { capability: 'creates-selection' },\n requires: ['enteredGroup', 'editAnchors'],\n enabled: (deps, at) => {\n const here = deps?.enteredGroup?.get() ?? null;\n if (here === null || deps?.editAnchors?.editingId) return ActionDisabledReason.NotApplicable;\n if (!at) return true;\n const box = opts.boxOf(here);\n return box !== null && !rectContainsPoint(box, at.x, at.y) ? true : ActionDisabledReason.NotApplicable;\n },\n invoker: {\n timing: 'immediate' as const,\n run: (deps, params) => {\n const entered = deps.enteredGroup;\n if (!entered) return;\n const world = (params as ImmediateParams | undefined)?.world;\n if (world) leaveGroupsOutside(entered, opts.boxOf, world);\n else entered.leave();\n },\n },\n };\n}\n"],"mappings":";;;;;;;;;;AA0BA,SAAgB,mBACd,SACA,OACA,GACM;CACN,KAAK,IAAI,KAAK,QAAQ,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,IAAI,GAAG;EAC5D,MAAM,MAAM,MAAM,EAAE;EACpB,IAAI,QAAQ,QAAQ,kBAAkB,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG;EACtD,QAAQ,MAAM;EACd,IAAI,QAAQ,IAAI,MAAM,IAAI;CAC5B;AACF;;;;;;AAOA,SAAgB,uBAAuB,MAAiC;CACtE,MAAM,YAAY,MAA8B,MAA6C;EAC3F,MAAM,UAAU,MAAM;EACtB,IAAI,CAAC,WAAW,CAAC,GAAG,OAAO;EAC3B,MAAM,MAAM,KAAK,QAAQ,CAAC;EAC1B,IAAI,QAAQ,MAAM,OAAO;EACzB,MAAM,SAAS,YAAY,KAAK,MAAM,KAAK,QAAQ,IAAI,CAAC;EACxD,OAAO,YAAY,KAAK,KAAK,QAAQ,MAAM,CAAsC,IAAI,SAAS;CAChG;CACA,OAAO;EACL,IAAI;EACJ,OAAO;EACP,UAAU,EAAE,YAAY,oBAAoB;EAC5C,UAAU,CAAC,cAAc;EACzB,UAAU,MAAM,OAAQ,SAAS,MAAM,EAAE,MAAM,OAAO,OAAO,qBAAqB;EAClF,SAAS;GACP,QAAQ;GACR,MAAM,MAAM,WAAW;IACrB,MAAM,QAAS,QAAwC;IACvD,MAAM,SAAS,QAAQ,SAAS,MAAM,KAAK,IAAI;IAC/C,IAAI,WAAW,MAAM,KAAK,cAAc,MAAM,MAAgB;GAChE;EACF;CACF;AACF;;;;;;;AAQA,SAAgB,uBAAuB,MAAiC;CACtE,OAAO;EACL,IAAI;EACJ,OAAO;EACP,UAAU,EAAE,YAAY,oBAAoB;EAC5C,UAAU,CAAC,gBAAgB,aAAa;EACxC,UAAU,MAAM,OAAO;GACrB,MAAM,OAAO,MAAM,cAAc,IAAI,KAAK;GAC1C,IAAI,SAAS,QAAQ,MAAM,aAAa,WAAW,OAAO,qBAAqB;GAC/E,IAAI,CAAC,IAAI,OAAO;GAChB,MAAM,MAAM,KAAK,MAAM,IAAI;GAC3B,OAAO,QAAQ,QAAQ,CAAC,kBAAkB,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,OAAO,qBAAqB;EAC3F;EACA,SAAS;GACP,QAAQ;GACR,MAAM,MAAM,WAAW;IACrB,MAAM,UAAU,KAAK;IACrB,IAAI,CAAC,SAAS;IACd,MAAM,QAAS,QAAwC;IACvD,IAAI,OAAO,mBAAmB,SAAS,KAAK,OAAO,KAAK;SACnD,QAAQ,MAAM;GACrB;EACF;CACF;AACF"}
@@ -1,7 +1,7 @@
1
1
  import { effectSourceFor } from "../../../domains/pathEffects/effectSources.js";
2
2
  import { ActionDisabledReason, isBody } from "@weasel-js/routing";
3
3
 
4
- //#region src/interactions/actions/defaults/enterPathEdit.ts
4
+ // src/interactions/actions/defaults/enterPathEdit.ts
5
5
  var enterPathEditAction = {
6
6
  id: "enterPathEdit",
7
7
  label: "Edit path anchors",
@@ -46,6 +46,5 @@ var enterPathEditAction = {
46
46
  enabled: (deps, at) => at && deps?.hitAt?.(at)?.doubleClick ? ActionDisabledReason.NotApplicable : true
47
47
  };
48
48
 
49
- //#endregion
50
49
  export { enterPathEditAction };
51
50
  //# sourceMappingURL=enterPathEdit.js.map
@@ -1,4 +1,4 @@
1
- //#region src/interactions/actions/defaults/enterTextEdit.ts
1
+ // src/interactions/actions/defaults/enterTextEdit.ts
2
2
  /**
3
3
  * Starts in-place text editing on the single selected node. It has no
4
4
  * `defaultBinding`: it fires only via `Tool.bindings`.
@@ -27,6 +27,5 @@ var enterTextEditAction = {
27
27
  }
28
28
  };
29
29
 
30
- //#endregion
31
30
  export { enterTextEditAction };
32
31
  //# sourceMappingURL=enterTextEdit.js.map
@@ -1,6 +1,6 @@
1
1
  import { ActionDisabledReason } from "@weasel-js/routing";
2
2
 
3
- //#region src/interactions/actions/defaults/escape.ts
3
+ // src/interactions/actions/defaults/escape.ts
4
4
  /**
5
5
  * Static descriptor for the `escape` Action. Clears selection.
6
6
  */
@@ -33,6 +33,5 @@ var escapeAction = {
33
33
  }
34
34
  };
35
35
 
36
- //#endregion
37
36
  export { escapeAction };
38
37
  //# sourceMappingURL=escape.js.map
@@ -1,6 +1,6 @@
1
1
  import { returnToModeDefault } from "@weasel-js/routing";
2
2
 
3
- //#region src/interactions/actions/defaults/exitPathEdit.ts
3
+ // src/interactions/actions/defaults/exitPathEdit.ts
4
4
  /**
5
5
  * `exitPathEditAction` — immediate Action that exits path-anchor edit
6
6
  * mode. Bound to Escape by default; companion to `enterPathEditAction`.
@@ -36,6 +36,5 @@ var exitPathEditAction = {
36
36
  enabled: () => true
37
37
  };
38
38
 
39
- //#endregion
40
39
  export { exitPathEditAction };
41
40
  //# sourceMappingURL=exitPathEdit.js.map
@@ -1,15 +1,15 @@
1
+ import { createInsertOp } from "../../../core/ops/create.js";
2
+ import { createReparentOp } from "../../../core/ops/reparent.js";
1
3
  import { unionBounds } from "../../../core/geometry/unionBounds.js";
2
- import { visualBoundsViaDescriptor } from "../../../core/geometry/poseDescriptor.js";
3
- import { scenePoseFrame } from "../poseFrame.js";
4
4
  import { poseDescriptorOf } from "../poseDescriptorDep.js";
5
- import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
5
+ import { visualBoundsViaDescriptor } from "../../../core/geometry/poseDescriptor.js";
6
6
  import { createTransformOp } from "../../../core/ops/transform.js";
7
- import { createReparentOp } from "../../../core/ops/reparent.js";
8
7
  import { requiresSelection } from "./requiresSelection.js";
9
- import { createInsertOp } from "../../../core/ops/create.js";
8
+ import { scenePoseFrame } from "../poseFrame.js";
9
+ import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
10
10
  import { ActionDisabledReason } from "@weasel-js/routing";
11
11
 
12
- //#region src/interactions/actions/defaults/group.ts
12
+ // src/interactions/actions/defaults/group.ts
13
13
  /**
14
14
  * Creates a structural `GroupNode` and reparents the current selection
15
15
  * under it as a single undoable batch.
@@ -159,6 +159,5 @@ var ungroupAction = {
159
159
  }
160
160
  };
161
161
 
162
- //#endregion
163
162
  export { groupAction, ungroupAction };
164
163
  //# sourceMappingURL=group.js.map
@@ -1,10 +1,10 @@
1
- import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
2
- import { MOVE_NODES_REQUIRES } from "../moveNodes.js";
3
1
  import { couldClaim, handlersFor, runIngest } from "../../../domains/ingestion/contentHandlers.js";
4
2
  import { previewIngest } from "../../../domains/ingestion/ghost.js";
3
+ import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
4
+ import { MOVE_NODES_REQUIRES } from "../moveNodes.js";
5
5
  import { ActionDisabledReason } from "@weasel-js/routing";
6
6
 
7
- //#region src/interactions/actions/defaults/ingest.ts
7
+ // src/interactions/actions/defaults/ingest.ts
8
8
  var ANY_INGEST_MODS = {
9
9
  alt: "optional",
10
10
  ctrl: "optional",
@@ -92,6 +92,5 @@ var ingestAction = {
92
92
  enabled: (deps, _at, carried) => claimable(carried, canvasHandlers(deps))
93
93
  };
94
94
 
95
- //#endregion
96
95
  export { ANY_INGEST_MODS, INGEST_REQUIRES, canvasHandlers, claimable, ingestAction, ingestFromEvent };
97
96
  //# sourceMappingURL=ingest.js.map
@@ -1,10 +1,10 @@
1
- import { pathOperationTags } from "../pathGestureTags.js";
2
1
  import { editingLayer, inPlane } from "../planeInput.js";
3
2
  import { segmentUnder } from "./segmentUnder.js";
3
+ import { pathOperationTags } from "../pathGestureTags.js";
4
4
  import { editAnchorSetTracked, insertAnchorOnSegment } from "@weasel-js/geom";
5
5
  import { ActionDisabledReason } from "@weasel-js/routing";
6
6
 
7
- //#region src/interactions/actions/defaults/insertPathAnchor.ts
7
+ // src/interactions/actions/defaults/insertPathAnchor.ts
8
8
  var INSERT_CURSOR = {
9
9
  glyph: "penPlus",
10
10
  fallback: "crosshair"
@@ -53,6 +53,5 @@ var insertPathAnchorAction = inPlane({
53
53
  }
54
54
  }, editingLayer);
55
55
 
56
- //#endregion
57
56
  export { insertPathAnchorAction };
58
57
  //# sourceMappingURL=insertPathAnchor.js.map
@@ -1,12 +1,12 @@
1
1
  import { poseDescriptorOf } from "../poseDescriptorDep.js";
2
2
  import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
3
3
  import { transformApplyOps } from "../transformFinish.js";
4
- import { moveNodesOps } from "../moveNodes.js";
5
- import { recordTransform } from "../transform-again/memory.js";
6
4
  import { requiresSelection } from "./requiresSelection.js";
5
+ import { moveNodesOps } from "../moveNodes.js";
7
6
  import { NUDGE_KEY, NUDGE_LABEL, nudgeDelta } from "./nudgeSteps.js";
7
+ import { recordTransform } from "../transform-again/memory.js";
8
8
 
9
- //#region src/interactions/actions/defaults/nudge.ts
9
+ // src/interactions/actions/defaults/nudge.ts
10
10
  /**
11
11
  * Apply a world translation of (dx, dy) to the selected nodes and the
12
12
  * descendants that do not ride on one of them, as one undo entry labeled
@@ -89,6 +89,5 @@ var nudgeDownAction = makeNudgeAction("down");
89
89
  var nudgeLeftAction = makeNudgeAction("left");
90
90
  var nudgeRightAction = makeNudgeAction("right");
91
91
 
92
- //#endregion
93
92
  export { nudgeDownAction, nudgeLeftAction, nudgeRightAction, nudgeUpAction, translateSelection };
94
93
  //# sourceMappingURL=nudge.js.map
@@ -1,6 +1,6 @@
1
- import { arrowMove } from "@weasel-js/headless";
1
+ import { arrowMove } from "@weasel-js/ui-logic";
2
2
 
3
- //#region src/interactions/actions/defaults/nudgeSteps.ts
3
+ // src/interactions/actions/defaults/nudgeSteps.ts
4
4
  var NUDGE_KEY = {
5
5
  up: "ArrowUp",
6
6
  down: "ArrowDown",
@@ -19,6 +19,5 @@ function nudgeDelta(dir, magnitude) {
19
19
  return arrowMove(NUDGE_KEY[dir], magnitude === "big");
20
20
  }
21
21
 
22
- //#endregion
23
22
  export { NUDGE_KEY, NUDGE_LABEL, nudgeDelta };
24
23
  //# sourceMappingURL=nudgeSteps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nudgeSteps.js","names":[],"sources":["../../../../src/interactions/actions/defaults/nudgeSteps.ts"],"sourcesContent":["import { arrowMove } from '@weasel-js/headless';\n\n/** The arrow-key nudge shared by nodes and path anchors: one direction per\n * key, a small step bare and a big one with Shift. */\nexport type NudgeDirection = 'up' | 'down' | 'left' | 'right';\n\nexport const NUDGE_KEY: Record<NudgeDirection, string> = {\n up: 'ArrowUp', down: 'ArrowDown', left: 'ArrowLeft', right: 'ArrowRight',\n};\n\nexport const NUDGE_LABEL: Record<NudgeDirection, string> = {\n up: 'Up', down: 'Down', left: 'Left', right: 'Right',\n};\n\n/** The world delta of one nudge. `magnitude` is the binding param: `'big'`\n * for the Shift step, anything else for the small one. */\nexport function nudgeDelta(dir: NudgeDirection, magnitude: unknown): { dx: number; dy: number } {\n return arrowMove(NUDGE_KEY[dir], magnitude === 'big')!;\n}\n"],"mappings":";;;AAMA,IAAa,YAA4C;CACvD,IAAI;CAAW,MAAM;CAAa,MAAM;CAAa,OAAO;AAC9D;AAEA,IAAa,cAA8C;CACzD,IAAI;CAAM,MAAM;CAAQ,MAAM;CAAQ,OAAO;AAC/C;;;AAIA,SAAgB,WAAW,KAAqB,WAAgD;CAC9F,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK;AACtD"}
1
+ {"version":3,"file":"nudgeSteps.js","names":[],"sources":["../../../../src/interactions/actions/defaults/nudgeSteps.ts"],"sourcesContent":["import { arrowMove } from '@weasel-js/ui-logic';\n\n/** The arrow-key nudge shared by nodes and path anchors: one direction per\n * key, a small step bare and a big one with Shift. */\nexport type NudgeDirection = 'up' | 'down' | 'left' | 'right';\n\nexport const NUDGE_KEY: Record<NudgeDirection, string> = {\n up: 'ArrowUp', down: 'ArrowDown', left: 'ArrowLeft', right: 'ArrowRight',\n};\n\nexport const NUDGE_LABEL: Record<NudgeDirection, string> = {\n up: 'Up', down: 'Down', left: 'Left', right: 'Right',\n};\n\n/** The world delta of one nudge. `magnitude` is the binding param: `'big'`\n * for the Shift step, anything else for the small one. */\nexport function nudgeDelta(dir: NudgeDirection, magnitude: unknown): { dx: number; dy: number } {\n return arrowMove(NUDGE_KEY[dir], magnitude === 'big')!;\n}\n"],"mappings":";;;AAMA,IAAa,YAA4C;CACvD,IAAI;CAAW,MAAM;CAAa,MAAM;CAAa,OAAO;AAC9D;AAEA,IAAa,cAA8C;CACzD,IAAI;CAAM,MAAM;CAAQ,MAAM;CAAQ,OAAO;AAC/C;;;AAIA,SAAgB,WAAW,KAAqB,WAAgD;CAC9F,OAAO,UAAU,UAAU,MAAM,cAAc,KAAK;AACtD"}
@@ -1,6 +1,6 @@
1
- import { pathToAnchors } from "@weasel-js/geom";
1
+ import { pathToAnchors, viewWorldToScreen } from "@weasel-js/geom";
2
2
 
3
- //#region src/interactions/actions/defaults/pathEditMarks.ts
3
+ // src/interactions/actions/defaults/pathEditMarks.ts
4
4
  /** The open path as extensions read it, or null with none open. */
5
5
  function editTargetOf(dep) {
6
6
  const node = dep.editingId ? dep.getNodeShape(dep.editingId) : null;
@@ -26,10 +26,7 @@ function markUnder(dep, deps, wx, wy) {
26
26
  y: 1
27
27
  }
28
28
  };
29
- const toScreen = (p) => ({
30
- x: (p.x - view.x) * view.scale.x,
31
- y: (p.y - view.y) * view.scale.y
32
- });
29
+ const toScreen = (p) => viewWorldToScreen(view, p);
33
30
  const screen = toScreen({
34
31
  x: wx,
35
32
  y: wy
@@ -55,6 +52,5 @@ function deleteSelectedMark(dep) {
55
52
  return true;
56
53
  }
57
54
 
58
- //#endregion
59
55
  export { deleteSelectedMark, editTargetOf, markUnder };
60
56
  //# sourceMappingURL=pathEditMarks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pathEditMarks.js","names":[],"sources":["../../../../src/interactions/actions/defaults/pathEditMarks.ts"],"sourcesContent":["/** Path edit's side of the marks its extensions draw: finding the one a click\n * lands on, and deleting the selected one. */\n\nimport type { ActionDeps } from '@weasel-js/routing';\nimport { pathToAnchors, type AnchorSet, type PolygonPath } from '@weasel-js/geom';\nimport type { PathEditMark, PathEditTarget } from 'domains/paths/pathEditExtension';\nimport type { EditAnchorsDep } from '../depSchema';\n\n/** The open path as extensions read it, or null with none open. */\nexport function editTargetOf(dep: EditAnchorsDep): PathEditTarget | null {\n const node = dep.editingId ? dep.getNodeShape(dep.editingId) : null;\n const path = node ? (dep.getEditablePath(dep.editingId) as PolygonPath | null | undefined) : null;\n if (!node || path?.kind !== 'polygon') return null;\n return { id: dep.editingId, node, path, anchors: pathToAnchors(path) as AnchorSet };\n}\n\n/** The extension mark under the world point `(wx, wy)`, or null. */\nexport function markUnder(dep: EditAnchorsDep, deps: ActionDeps | undefined, wx: number, wy: number): PathEditMark | null {\n const extensions = dep.extensions?.filter((e) => e.markAt) ?? [];\n const target = extensions.length > 0 ? editTargetOf(dep) : null;\n if (!target) return null;\n const view = deps?.view?.get() ?? { x: 0, y: 0, scale: { x: 1, y: 1 } };\n const toScreen = (p: { x: number; y: number }) => ({ x: (p.x - view.x) * view.scale.x, y: (p.y - view.y) * view.scale.y });\n const screen = toScreen({ x: wx, y: wy });\n for (const ext of [...extensions].reverse()) {\n const index = ext.markAt!(target, toScreen, screen);\n if (index !== -1) return { owner: ext.id, index };\n }\n return null;\n}\n\n/** Delete the selected extension mark. False when none is selected, or its\n * owner cannot delete it. */\nexport function deleteSelectedMark(dep: EditAnchorsDep): boolean {\n const mark = dep.selectedMark;\n const owner = mark ? dep.extensions?.find((e) => e.id === mark.owner) : undefined;\n const target = owner?.deleteMark && dep.store ? editTargetOf(dep) : null;\n if (!mark || !target) return false;\n owner!.deleteMark!(target, mark.index, dep.store!);\n dep.setSelectedMark?.(null);\n return true;\n}\n"],"mappings":";;;;AASA,SAAgB,aAAa,KAA4C;CACvE,MAAM,OAAO,IAAI,YAAY,IAAI,aAAa,IAAI,SAAS,IAAI;CAC/D,MAAM,OAAO,OAAQ,IAAI,gBAAgB,IAAI,SAAS,IAAuC;CAC7F,IAAI,CAAC,QAAQ,MAAM,SAAS,WAAW,OAAO;CAC9C,OAAO;EAAE,IAAI,IAAI;EAAW;EAAM;EAAM,SAAS,cAAc,IAAI;CAAe;AACpF;;AAGA,SAAgB,UAAU,KAAqB,MAA8B,IAAY,IAAiC;CACxH,MAAM,aAAa,IAAI,YAAY,QAAQ,MAAM,EAAE,MAAM,KAAK,CAAC;CAC/D,MAAM,SAAS,WAAW,SAAS,IAAI,aAAa,GAAG,IAAI;CAC3D,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,OAAO,MAAM,MAAM,IAAI,KAAK;EAAE,GAAG;EAAG,GAAG;EAAG,OAAO;GAAE,GAAG;GAAG,GAAG;EAAE;CAAE;CACtE,MAAM,YAAY,OAAiC;EAAE,IAAI,EAAE,IAAI,KAAK,KAAK,KAAK,MAAM;EAAG,IAAI,EAAE,IAAI,KAAK,KAAK,KAAK,MAAM;CAAE;CACxH,MAAM,SAAS,SAAS;EAAE,GAAG;EAAI,GAAG;CAAG,CAAC;CACxC,KAAK,MAAM,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,QAAQ,GAAG;EAC3C,MAAM,QAAQ,IAAI,OAAQ,QAAQ,UAAU,MAAM;EAClD,IAAI,UAAU,IAAI,OAAO;GAAE,OAAO,IAAI;GAAI;EAAM;CAClD;CACA,OAAO;AACT;;;AAIA,SAAgB,mBAAmB,KAA8B;CAC/D,MAAM,OAAO,IAAI;CACjB,MAAM,QAAQ,OAAO,IAAI,YAAY,MAAM,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI;CACxE,MAAM,SAAS,OAAO,cAAc,IAAI,QAAQ,aAAa,GAAG,IAAI;CACpE,IAAI,CAAC,QAAQ,CAAC,QAAQ,OAAO;CAC7B,MAAO,WAAY,QAAQ,KAAK,OAAO,IAAI,KAAM;CACjD,IAAI,kBAAkB,IAAI;CAC1B,OAAO;AACT"}
1
+ {"version":3,"file":"pathEditMarks.js","names":[],"sources":["../../../../src/interactions/actions/defaults/pathEditMarks.ts"],"sourcesContent":["/** Path edit's side of the marks its extensions draw: finding the one a click\n * lands on, and deleting the selected one. */\n\nimport type { ActionDeps } from '@weasel-js/routing';\nimport { pathToAnchors, viewWorldToScreen, type AnchorSet, type PolygonPath } from '@weasel-js/geom';\nimport type { PathEditMark, PathEditTarget } from 'domains/paths/pathEditExtension';\nimport type { EditAnchorsDep } from '../depSchema';\n\n/** The open path as extensions read it, or null with none open. */\nexport function editTargetOf(dep: EditAnchorsDep): PathEditTarget | null {\n const node = dep.editingId ? dep.getNodeShape(dep.editingId) : null;\n const path = node ? (dep.getEditablePath(dep.editingId) as PolygonPath | null | undefined) : null;\n if (!node || path?.kind !== 'polygon') return null;\n return { id: dep.editingId, node, path, anchors: pathToAnchors(path) as AnchorSet };\n}\n\n/** The extension mark under the world point `(wx, wy)`, or null. */\nexport function markUnder(dep: EditAnchorsDep, deps: ActionDeps | undefined, wx: number, wy: number): PathEditMark | null {\n const extensions = dep.extensions?.filter((e) => e.markAt) ?? [];\n const target = extensions.length > 0 ? editTargetOf(dep) : null;\n if (!target) return null;\n const view = deps?.view?.get() ?? { x: 0, y: 0, scale: { x: 1, y: 1 } };\n const toScreen = (p: { x: number; y: number }) => viewWorldToScreen(view, p);\n const screen = toScreen({ x: wx, y: wy });\n for (const ext of [...extensions].reverse()) {\n const index = ext.markAt!(target, toScreen, screen);\n if (index !== -1) return { owner: ext.id, index };\n }\n return null;\n}\n\n/** Delete the selected extension mark. False when none is selected, or its\n * owner cannot delete it. */\nexport function deleteSelectedMark(dep: EditAnchorsDep): boolean {\n const mark = dep.selectedMark;\n const owner = mark ? dep.extensions?.find((e) => e.id === mark.owner) : undefined;\n const target = owner?.deleteMark && dep.store ? editTargetOf(dep) : null;\n if (!mark || !target) return false;\n owner!.deleteMark!(target, mark.index, dep.store!);\n dep.setSelectedMark?.(null);\n return true;\n}\n"],"mappings":";;;;AASA,SAAgB,aAAa,KAA4C;CACvE,MAAM,OAAO,IAAI,YAAY,IAAI,aAAa,IAAI,SAAS,IAAI;CAC/D,MAAM,OAAO,OAAQ,IAAI,gBAAgB,IAAI,SAAS,IAAuC;CAC7F,IAAI,CAAC,QAAQ,MAAM,SAAS,WAAW,OAAO;CAC9C,OAAO;EAAE,IAAI,IAAI;EAAW;EAAM;EAAM,SAAS,cAAc,IAAI;CAAe;AACpF;;AAGA,SAAgB,UAAU,KAAqB,MAA8B,IAAY,IAAiC;CACxH,MAAM,aAAa,IAAI,YAAY,QAAQ,MAAM,EAAE,MAAM,KAAK,CAAC;CAC/D,MAAM,SAAS,WAAW,SAAS,IAAI,aAAa,GAAG,IAAI;CAC3D,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,OAAO,MAAM,MAAM,IAAI,KAAK;EAAE,GAAG;EAAG,GAAG;EAAG,OAAO;GAAE,GAAG;GAAG,GAAG;EAAE;CAAE;CACtE,MAAM,YAAY,MAAgC,kBAAkB,MAAM,CAAC;CAC3E,MAAM,SAAS,SAAS;EAAE,GAAG;EAAI,GAAG;CAAG,CAAC;CACxC,KAAK,MAAM,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,QAAQ,GAAG;EAC3C,MAAM,QAAQ,IAAI,OAAQ,QAAQ,UAAU,MAAM;EAClD,IAAI,UAAU,IAAI,OAAO;GAAE,OAAO,IAAI;GAAI;EAAM;CAClD;CACA,OAAO;AACT;;;AAIA,SAAgB,mBAAmB,KAA8B;CAC/D,MAAM,OAAO,IAAI;CACjB,MAAM,QAAQ,OAAO,IAAI,YAAY,MAAM,MAAM,EAAE,OAAO,KAAK,KAAK,IAAI;CACxE,MAAM,SAAS,OAAO,cAAc,IAAI,QAAQ,aAAa,GAAG,IAAI;CACpE,IAAI,CAAC,QAAQ,CAAC,QAAQ,OAAO;CAC7B,MAAO,WAAY,QAAQ,KAAK,OAAO,IAAI,KAAM;CACjD,IAAI,kBAAkB,IAAI;CAC1B,OAAO;AACT"}
@@ -1,9 +1,9 @@
1
- import { DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM } from "../../../core/viewport/zoomBounds.js";
1
+ import { axisZoomFactor, zoomAt } from "../../../core/viewport/zoomAt.js";
2
2
  import { viewToTransform } from "../../../core/viewport/view.js";
3
3
  import { screenToWorld } from "../../../core/viewport/viewTransform.js";
4
- import { axisZoomFactor, zoomAt } from "../../../core/viewport/zoomAt.js";
4
+ import { DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM } from "../../../core/viewport/zoomBounds.js";
5
5
 
6
- //#region src/interactions/actions/defaults/pinchZoom.ts
6
+ // src/interactions/actions/defaults/pinchZoom.ts
7
7
  /**
8
8
  * Build a `viewport.pinchZoom` Action descriptor with a configurable scale
9
9
  * clamp. The same two-finger gesture zooms and pans, applied each frame.
@@ -77,6 +77,5 @@ function makePinchZoomAction(opts = {}) {
77
77
  */
78
78
  var pinchZoomAction = makePinchZoomAction();
79
79
 
80
- //#endregion
81
80
  export { makePinchZoomAction, pinchZoomAction };
82
81
  //# sourceMappingURL=pinchZoom.js.map
@@ -1,8 +1,8 @@
1
+ import { createReorderOp } from "../../../core/ops/reorder/index.js";
1
2
  import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
2
3
  import { requiresSelection } from "./requiresSelection.js";
3
- import { createReorderOp } from "../../../core/ops/reorder/index.js";
4
4
 
5
- //#region src/interactions/actions/defaults/reorder.ts
5
+ // src/interactions/actions/defaults/reorder.ts
6
6
  /**
7
7
  * Execute a directional reorder on the current selection. Translates
8
8
  * `direction` + `distance` into the four-way `ReorderDirection` understood by
@@ -189,6 +189,5 @@ var reorderBackwardAction = {
189
189
  enabled: requiresSelection
190
190
  };
191
191
 
192
- //#endregion
193
192
  export { reorderBackwardAction, reorderForwardAction };
194
193
  //# sourceMappingURL=reorder.js.map
@@ -1,6 +1,6 @@
1
1
  import { ActionDisabledReason } from "@weasel-js/routing";
2
2
 
3
- //#region src/interactions/actions/defaults/requiresSelection.ts
3
+ // src/interactions/actions/defaults/requiresSelection.ts
4
4
  /**
5
5
  * Shared `enabled` predicate for selection-gated actions: `true` when the
6
6
  * selection is non-empty, otherwise `SelectionRequired`. Called without deps
@@ -12,6 +12,5 @@ function requiresSelection(deps) {
12
12
  return true;
13
13
  }
14
14
 
15
- //#endregion
16
15
  export { requiresSelection };
17
16
  //# sourceMappingURL=requiresSelection.js.map