@weasel-js/core 1.15.0 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (794) hide show
  1. package/CHANGELOG.md +84 -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 +2 -3
  17. package/dist/animation/poseTransition.js +1 -2
  18. package/dist/animation/reflow.js +2 -3
  19. package/dist/animation/rewind.js +1 -2
  20. package/dist/animation/rig/bindRig.js +2 -3
  21. package/dist/animation/rig/rigNode.js +1 -2
  22. package/dist/animation/rig/rigSeat.js +1 -2
  23. package/dist/animation/rig/skinBinding.js +1 -2
  24. package/dist/animation/rig/useRig.js +2 -3
  25. package/dist/animation/wrappers/animateLifecycle.js +1 -2
  26. package/dist/animation/wrappers/animateOnSetPose.js +1 -2
  27. package/dist/animation/wrappers/instantPose.js +1 -2
  28. package/dist/animation/writtenPoseTarget.js +1 -2
  29. package/dist/barrel/interactions.js +2 -1
  30. package/dist/barrel/routing.js +2 -2
  31. package/dist/barrel/scene.js +2 -2
  32. package/dist/canvas/Canvas.js +5 -6
  33. package/dist/canvas/CanvasView.js +6 -7
  34. package/dist/canvas/CursorCoordsHud.js +2 -3
  35. package/dist/canvas/DrawCanvas.js +3 -4
  36. package/dist/canvas/GestureReason.js +1 -2
  37. package/dist/canvas/GestureReason.module.js +1 -2
  38. package/dist/canvas/LeanSceneCanvas.js +2 -3
  39. package/dist/canvas/ModalityHud.js +2 -3
  40. package/dist/canvas/NodeShape.js +3 -4
  41. package/dist/canvas/PickHud.js +2 -3
  42. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +1 -2
  43. package/dist/canvas/SceneCanvas/CanvasKitProviders.js +3 -4
  44. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +1 -2
  45. package/dist/canvas/SceneCanvas/DevHuds.js +1 -2
  46. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +1 -2
  47. package/dist/canvas/SceneCanvas/SceneCanvasInput.js +4 -5
  48. package/dist/canvas/SceneCanvas/SurfaceDeclarations.js +1 -2
  49. package/dist/canvas/SceneCanvas/brushOverlay.js +1 -2
  50. package/dist/canvas/SceneCanvas/builtinToolSets.js +1 -2
  51. package/dist/canvas/SceneCanvas/canvasPassThrough.js +1 -2
  52. package/dist/canvas/SceneCanvas/contributionFrameHooks.js +1 -2
  53. package/dist/canvas/SceneCanvas/coordTrace.js +1 -2
  54. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +3 -4
  55. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -2
  56. package/dist/canvas/SceneCanvas/defaultTextEditor.js +4 -5
  57. package/dist/canvas/SceneCanvas/describePresets.js +1 -2
  58. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +1 -2
  59. package/dist/canvas/SceneCanvas/features.js +1 -2
  60. package/dist/canvas/SceneCanvas/insertPreviewCommands.js +1 -2
  61. package/dist/canvas/SceneCanvas/mergeLayers.js +1 -2
  62. package/dist/canvas/SceneCanvas/namedPresets.js +5 -6
  63. package/dist/canvas/SceneCanvas/poseGeometry.js +1 -2
  64. package/dist/canvas/SceneCanvas/poseRegistrars.js +1 -2
  65. package/dist/canvas/SceneCanvas/presets/arrange.js +2 -3
  66. package/dist/canvas/SceneCanvas/presets/baseline.js +1 -2
  67. package/dist/canvas/SceneCanvas/presets/chrome.js +1 -2
  68. package/dist/canvas/SceneCanvas/presets/composites.js +1 -2
  69. package/dist/canvas/SceneCanvas/presets/edit.js +4 -5
  70. package/dist/canvas/SceneCanvas/presets/ingest.js +1 -2
  71. package/dist/canvas/SceneCanvas/presets/paths.js +3 -4
  72. package/dist/canvas/SceneCanvas/presets/select.js +1 -2
  73. package/dist/canvas/SceneCanvas/presets/toolDriven.js +2 -3
  74. package/dist/canvas/SceneCanvas/presets/tools.js +1 -2
  75. package/dist/canvas/SceneCanvas/presets/transform.js +2 -3
  76. package/dist/canvas/SceneCanvas/presets/view.js +2 -3
  77. package/dist/canvas/SceneCanvas/props.js +1 -2
  78. package/dist/canvas/SceneCanvas/scenePointQuery.js +2 -3
  79. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +1 -2
  80. package/dist/canvas/SceneCanvas/toolRegistry.js +2 -3
  81. package/dist/canvas/SceneCanvas/useActionTunings.js +1 -2
  82. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +1 -2
  83. package/dist/canvas/SceneCanvas/useBakedScene.js +2 -3
  84. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +7 -8
  85. package/dist/canvas/SceneCanvas/useBuiltinTools.js +2 -3
  86. package/dist/canvas/SceneCanvas/useCanvasCamera.js +2 -3
  87. package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js +1 -2
  88. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +1 -2
  89. package/dist/canvas/SceneCanvas/useCanvasSelection.js +8 -6
  90. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -1
  91. package/dist/canvas/SceneCanvas/useCanvasTools.js +2 -3
  92. package/dist/canvas/SceneCanvas/useChromeAffordances.js +2 -3
  93. package/dist/canvas/SceneCanvas/useContributionRoles.js +1 -2
  94. package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js +4 -5
  95. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +2 -3
  96. package/dist/canvas/SceneCanvas/useHeldModifiers.js +1 -2
  97. package/dist/canvas/SceneCanvas/useMagnificationCheck.js +41 -0
  98. package/dist/canvas/SceneCanvas/useMagnificationCheck.js.map +1 -0
  99. package/dist/canvas/SceneCanvas/useNodeAtPoint.js +1 -2
  100. package/dist/canvas/SceneCanvas/useNodeKinds.js +2 -3
  101. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +10 -11
  102. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +1 -2
  103. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +6 -7
  104. package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js +1 -2
  105. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +1 -2
  106. package/dist/canvas/SceneCanvas/useSceneChrome.js +5 -6
  107. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +6 -7
  108. package/dist/canvas/SceneCanvas/useScenePicking.js +5 -6
  109. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +1 -2
  110. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +7 -8
  111. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +2 -3
  112. package/dist/canvas/SceneCanvas/useSceneStandardActions.js +26 -18
  113. package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -1
  114. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +2 -3
  115. package/dist/canvas/SceneCanvas/useSurfaceRouting.js +1 -2
  116. package/dist/canvas/SceneCanvas/useSurfaceViewInputs.js +1 -2
  117. package/dist/canvas/SceneCanvas/useToolKeybindings.js +1 -2
  118. package/dist/canvas/SceneCanvas/useViewportActions.js +3 -4
  119. package/dist/canvas/SceneCanvas/worldPointAt.js +1 -2
  120. package/dist/canvas/SceneCanvas.js +18 -17
  121. package/dist/canvas/SceneCanvas.js.map +1 -1
  122. package/dist/canvas/SceneViewCanvas.js +2 -3
  123. package/dist/canvas/SurfaceCanvas.js +1 -2
  124. package/dist/canvas/ViewMarker.js +1 -2
  125. package/dist/canvas/accentColor.js +1 -2
  126. package/dist/canvas/adapterDerivedPath.js +2 -3
  127. package/dist/canvas/adapterPickSource.js +1 -2
  128. package/dist/canvas/affordanceAt.js +2 -3
  129. package/dist/canvas/buildSceneLayer.js +4 -5
  130. package/dist/canvas/buildSceneTree.js +4 -5
  131. package/dist/canvas/canvasRenderer.js +1 -2
  132. package/dist/canvas/colorOverrides.js +1 -2
  133. package/dist/canvas/contextAttributes.js +1 -2
  134. package/dist/canvas/copiesAbove.js +1 -2
  135. package/dist/canvas/defaultDrawOne.js +1 -2
  136. package/dist/canvas/deps/areaSelect.js +5 -3
  137. package/dist/canvas/deps/areaSelect.js.map +1 -1
  138. package/dist/canvas/deps/booleans.js +5 -6
  139. package/dist/canvas/deps/changes.js +1 -2
  140. package/dist/canvas/deps/chromeRules.js +1 -2
  141. package/dist/canvas/deps/debug.js +1 -2
  142. package/dist/canvas/deps/dispatchSources.js +1 -2
  143. package/dist/canvas/deps/dispatcher.js +1 -2
  144. package/dist/canvas/deps/editAnchors.js +3 -4
  145. package/dist/canvas/deps/enteredGroup.js +1 -2
  146. package/dist/canvas/deps/geometryProjection.js +1 -2
  147. package/dist/canvas/deps/hitTestArea.js +4 -5
  148. package/dist/canvas/deps/ingestion.js +1 -2
  149. package/dist/canvas/deps/insert.js +3 -4
  150. package/dist/canvas/deps/insertSite.js +3 -4
  151. package/dist/canvas/deps/kitSettings.js +1 -2
  152. package/dist/canvas/deps/lassoSelect.js +5 -3
  153. package/dist/canvas/deps/lassoSelect.js.map +1 -1
  154. package/dist/canvas/deps/layout.js +1 -2
  155. package/dist/canvas/deps/modeDefaultTool.js +1 -2
  156. package/dist/canvas/deps/nodeAtPoint.js +1 -2
  157. package/dist/canvas/deps/pathEditCommits.js +4 -5
  158. package/dist/canvas/deps/pathLeaf.js +1 -2
  159. package/dist/canvas/deps/pathLeafDeps.js +2 -3
  160. package/dist/canvas/deps/poseDescriptor.js +1 -2
  161. package/dist/canvas/deps/previewPaths.js +1 -2
  162. package/dist/canvas/deps/resizePolicy.js +1 -2
  163. package/dist/canvas/deps/selectionSnapshot.js +1 -2
  164. package/dist/canvas/deps/slice.js +5 -6
  165. package/dist/canvas/deps/snap.js +3 -4
  166. package/dist/canvas/deps/surface.js +1 -2
  167. package/dist/canvas/deps/textEdit.js +1 -2
  168. package/dist/canvas/deps/transformFollowers.js +1 -2
  169. package/dist/canvas/deps/view.js +1 -2
  170. package/dist/canvas/derivedPath.js +6 -7
  171. package/dist/canvas/doubleClickTarget.js +1 -2
  172. package/dist/canvas/drawEnvelope.js +1 -2
  173. package/dist/canvas/drawnBounds.js +4 -5
  174. package/dist/canvas/getNodeAtPoint.js +1 -2
  175. package/dist/canvas/hostAnchor.js +1 -2
  176. package/dist/canvas/hud.module.js +1 -2
  177. package/dist/canvas/inheritedPaints.js +1 -2
  178. package/dist/canvas/insertPreviewExtent.js +1 -2
  179. package/dist/canvas/kitRequirements.js +1 -2
  180. package/dist/canvas/layerHover.js +1 -2
  181. package/dist/canvas/layerOrder.js +1 -2
  182. package/dist/canvas/layerSlots.js +1 -2
  183. package/dist/canvas/mountedCanvases.js +1 -2
  184. package/dist/canvas/nodeShapes/derivedPainter.js +2 -3
  185. package/dist/canvas/nodeShapes/imagePainter.js +1 -2
  186. package/dist/canvas/nodeShapes/measurePainter.js +2 -3
  187. package/dist/canvas/nodeShapes/memo.js +1 -2
  188. package/dist/canvas/nodeShapes/nodePaint.js +1 -2
  189. package/dist/canvas/nodeShapes/pathPainter.js +3 -4
  190. package/dist/canvas/nodeShapes/poseBox.js +1 -2
  191. package/dist/canvas/nodeShapes/rectFallbackPainter.js +1 -2
  192. package/dist/canvas/nodeShapes/shapePainter.js +2 -3
  193. package/dist/canvas/nodeShapes/strokedBounds.js +1 -2
  194. package/dist/canvas/nodeShapes/textPainter.js +1 -2
  195. package/dist/canvas/overChildren.js +1 -2
  196. package/dist/canvas/overlayRoleStrokes.js +1 -2
  197. package/dist/canvas/ownClip.js +1 -2
  198. package/dist/canvas/paintCull.js +1 -2
  199. package/dist/canvas/paintedCursorLayer.js +1 -2
  200. package/dist/canvas/pathOverlay.js +1 -2
  201. package/dist/canvas/pickIndex/nodeBroadBox.js +3 -4
  202. package/dist/canvas/pickIndex/scenePickIndex.js +3 -4
  203. package/dist/canvas/pickReach.js +1 -2
  204. package/dist/canvas/pickWalk.js +2 -3
  205. package/dist/canvas/planeClips.js +1 -2
  206. package/dist/canvas/poseRotation.js +1 -2
  207. package/dist/canvas/publishPreviews.js +1 -2
  208. package/dist/canvas/rasterReadback.js +1 -2
  209. package/dist/canvas/rasterToPng.js +1 -2
  210. package/dist/canvas/renderDebugSnapshot.js +1 -2
  211. package/dist/canvas/renderNeeds.js +1 -2
  212. package/dist/canvas/renderSceneToPixels.js +5 -6
  213. package/dist/canvas/sceneAdapter.js +37 -27
  214. package/dist/canvas/sceneAdapter.js.map +1 -1
  215. package/dist/canvas/sceneClipboard.js +19 -7
  216. package/dist/canvas/sceneClipboard.js.map +1 -1
  217. package/dist/canvas/sceneLayerPaint.js +1 -2
  218. package/dist/canvas/scenePickReads.js +1 -2
  219. package/dist/canvas/scenePickSource.js +5 -6
  220. package/dist/canvas/sceneSlotWiring.js +2 -3
  221. package/dist/canvas/sceneViewRender.js +5 -6
  222. package/dist/canvas/shownNodes.js +1 -2
  223. package/dist/canvas/slopsDebugLayer.js +1 -2
  224. package/dist/canvas/surfaceContribution.js +1 -2
  225. package/dist/canvas/useCanvasElements.js +1 -2
  226. package/dist/canvas/useCanvasHandle.js +1 -2
  227. package/dist/canvas/useCanvasPaint.js +2 -3
  228. package/dist/canvas/useCanvasRenderer.js +1 -2
  229. package/dist/canvas/useCanvasSurface.js +1 -2
  230. package/dist/canvas/useCanvasView.js +2 -3
  231. package/dist/canvas/useClientToWorld.js +1 -2
  232. package/dist/canvas/useExtraLayers.js +1 -2
  233. package/dist/canvas/useFrameLoop.js +1 -2
  234. package/dist/canvas/useHitObserver.js +1 -2
  235. package/dist/canvas/useHostAnchor.js +1 -2
  236. package/dist/canvas/useInFlightBounds.js +6 -6
  237. package/dist/canvas/useInFlightBounds.js.map +1 -1
  238. package/dist/canvas/useLateContentRedraw.js +1 -2
  239. package/dist/canvas/useLayerStack.js +2 -3
  240. package/dist/canvas/usePaintedCursor.js +1 -2
  241. package/dist/canvas/useRedrawOn.js +1 -2
  242. package/dist/canvas/useSceneAdapter.js +1 -2
  243. package/dist/canvas/useSceneLayerList.js +1 -2
  244. package/dist/canvas/useSurfaceInput.js +1 -2
  245. package/dist/canvas/useSurfaceSize.js +1 -2
  246. package/dist/canvas/useToolCursor.js +1 -2
  247. package/dist/canvas/useViewAim.js +2 -3
  248. package/dist/canvas/useViewHelpers.js +5 -4
  249. package/dist/canvas/useViewHelpers.js.map +1 -1
  250. package/dist/canvas/useViewLayerGate.js +1 -2
  251. package/dist/canvas/useViewNesting.js +1 -2
  252. package/dist/canvas/useViewRegistrySurface.js +1 -2
  253. package/dist/canvas/viewInputs.js +1 -2
  254. package/dist/canvas/viewMarkers.js +1 -2
  255. package/dist/canvas/viewRegistry.js +1 -2
  256. package/dist/canvas/viewSnap.js +1 -2
  257. package/dist/canvas/watchElementMove.js +1 -2
  258. package/dist/canvas/wrapNodeOutput.js +1 -2
  259. package/dist/core/adapters/testing/rootsTree.js +1 -2
  260. package/dist/core/applyOps.js +1 -2
  261. package/dist/core/device/targets.js +1 -2
  262. package/dist/core/device/useDeviceProfile.js +1 -2
  263. package/dist/core/device/useTargetBasePx.js +1 -2
  264. package/dist/core/device/watchDevicePixelRatio.js +1 -2
  265. package/dist/core/geometry/autoPoseDescriptor.js +2 -3
  266. package/dist/core/geometry/booleanOfPaths.js +1 -2
  267. package/dist/core/geometry/inkExtents.js +1 -2
  268. package/dist/core/geometry/pathPoseDescriptor.js +1 -2
  269. package/dist/core/geometry/poseDescriptor.js +1 -2
  270. package/dist/core/geometry/regionHit.js +1 -2
  271. package/dist/core/geometry/targetFrame.js +1 -2
  272. package/dist/core/geometry/unionBounds.js +1 -2
  273. package/dist/core/layers/backgroundFill.js +1 -2
  274. package/dist/core/layers/children.js +1 -2
  275. package/dist/core/layers/gateLayer.js +1 -2
  276. package/dist/core/layers/layerGroup.js +1 -2
  277. package/dist/core/layers/redrawSource.js +1 -2
  278. package/dist/core/layers/render.js +1 -2
  279. package/dist/core/layers/retain.js +1 -2
  280. package/dist/core/ops/arrange.js +1 -2
  281. package/dist/core/ops/create.js +2 -3
  282. package/dist/core/ops/createHistory.js +2 -3
  283. package/dist/core/ops/delete.js +2 -3
  284. package/dist/core/ops/nodeFlags.js +1 -2
  285. package/dist/core/ops/registry.js +1 -2
  286. package/dist/core/ops/reorder/algorithms.js +1 -2
  287. package/dist/core/ops/reorder/index.js +1 -2
  288. package/dist/core/ops/reorder/setChildOrder.js +1 -2
  289. package/dist/core/ops/reparent.js +1 -2
  290. package/dist/core/ops/select.js +1 -2
  291. package/dist/core/ops/setData.js +1 -2
  292. package/dist/core/ops/setDependsOn.js +1 -2
  293. package/dist/core/ops/setLayer.js +1 -2
  294. package/dist/core/ops/setLayout.js +1 -2
  295. package/dist/core/ops/setPath.js +1 -2
  296. package/dist/core/ops/setText.js +1 -2
  297. package/dist/core/ops/slot.js +1 -2
  298. package/dist/core/ops/transform.js +1 -2
  299. package/dist/core/ops/writtenBy.js +1 -2
  300. package/dist/core/pages/fitViewToPage.js +1 -2
  301. package/dist/core/pages/pageEdits.js +3 -4
  302. package/dist/core/pages/pages.js +1 -2
  303. package/dist/core/pages/pages.js.map +1 -1
  304. package/dist/core/pages/pagesLayer.js +1 -2
  305. package/dist/core/paint/meshKind.js +1 -2
  306. package/dist/core/paint/meshKindLazy.js +9 -18
  307. package/dist/core/paint/meshKindLazy.js.map +1 -1
  308. package/dist/core/paint/paintKindEntry.js +1 -2
  309. package/dist/core/paint/paintKinds.js +1 -2
  310. package/dist/core/paint/registerMesh.js +1 -2
  311. package/dist/core/scene/NodeProperties.js +1 -2
  312. package/dist/core/scene/NodeRouting.js +1 -2
  313. package/dist/core/scene/annotation.js +1 -2
  314. package/dist/core/scene/appliedLog.js +1 -2
  315. package/dist/core/scene/arrivalWindow.js +2 -3
  316. package/dist/core/scene/arrivals.js +1 -2
  317. package/dist/core/scene/booleanGroup.js +1 -2
  318. package/dist/core/scene/booleanOfChildren.js +1 -2
  319. package/dist/core/scene/boundOps.js +1 -2
  320. package/dist/core/scene/carryDescendants.js +2 -3
  321. package/dist/core/scene/clipNothing.js +1 -2
  322. package/dist/core/scene/composeFrame.js +1 -2
  323. package/dist/core/scene/composePose.js +1 -2
  324. package/dist/core/scene/declaredFieldSetters.js +1 -2
  325. package/dist/core/scene/depFrame.js +1 -2
  326. package/dist/core/scene/depMemo.js +1 -2
  327. package/dist/core/scene/dependents.js +1 -2
  328. package/dist/core/scene/derivedParts.js +1 -2
  329. package/dist/core/scene/derivedPath.js +2 -3
  330. package/dist/core/scene/docValues.js +1 -2
  331. package/dist/core/scene/documentOf.js +1 -2
  332. package/dist/core/scene/editMode.js +1 -2
  333. package/dist/core/scene/editPass.js +1 -2
  334. package/dist/core/scene/effectivePose.js +3 -4
  335. package/dist/core/scene/fieldEdits.js +1 -2
  336. package/dist/core/scene/fontReads.js +1 -2
  337. package/dist/core/scene/historyFacade.js +1 -2
  338. package/dist/core/scene/historyForm.js +1 -2
  339. package/dist/core/scene/inheritedPaint.js +1 -2
  340. package/dist/core/scene/kitOps.js +16 -15
  341. package/dist/core/scene/kitOps.js.map +1 -1
  342. package/dist/core/scene/kitRegistry.js +2 -3
  343. package/dist/core/scene/layerOps.js +1 -2
  344. package/dist/core/scene/layerStack.js +1 -2
  345. package/dist/core/scene/layoutPass.js +4 -5
  346. package/dist/core/scene/lockGuard.js +1 -2
  347. package/dist/core/scene/minSize.js +1 -2
  348. package/dist/core/scene/nestedHit.js +1 -2
  349. package/dist/core/scene/nodeAsShown.js +1 -2
  350. package/dist/core/scene/nodeFlags.js +1 -2
  351. package/dist/core/scene/nodeFnFields.js +1 -2
  352. package/dist/core/scene/nodeGates.js +1 -2
  353. package/dist/core/scene/nodeMemo.js +1 -2
  354. package/dist/core/scene/nodeStore.js +2 -3
  355. package/dist/core/scene/notifier.js +1 -2
  356. package/dist/core/scene/opTable.js +1 -2
  357. package/dist/core/scene/outerOps.js +1 -2
  358. package/dist/core/scene/pathEffects/blend.js +1 -2
  359. package/dist/core/scene/pathEffects/derive.js +2 -3
  360. package/dist/core/scene/pathEffects/effects.js +1 -2
  361. package/dist/core/scene/pathEffects/foundHidden.js +1 -2
  362. package/dist/core/scene/pathEffects/textAlong.js +1 -2
  363. package/dist/core/scene/pathEffects/textAlongBands.js +1 -2
  364. package/dist/core/scene/plyStacks.js +1 -2
  365. package/dist/core/scene/poseFeed.js +1 -2
  366. package/dist/core/scene/poseHold.js +1 -2
  367. package/dist/core/scene/poseOverrides.js +1 -2
  368. package/dist/core/scene/posePlies.js +1 -2
  369. package/dist/core/scene/poseRemovals.js +1 -2
  370. package/dist/core/scene/poseSnapshot.js +1 -2
  371. package/dist/core/scene/poseWrites.js +1 -2
  372. package/dist/core/scene/reconcileSpecs.js +26 -3
  373. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  374. package/dist/core/scene/recorder.js +1 -2
  375. package/dist/core/scene/renderOrder.js +1 -2
  376. package/dist/core/scene/sameValue.js +1 -2
  377. package/dist/core/scene/scene.js +11 -12
  378. package/dist/core/scene/scene.js.map +1 -1
  379. package/dist/core/scene/sceneChanges.js +1 -2
  380. package/dist/core/scene/sceneEdits.js +1 -2
  381. package/dist/core/scene/sceneJournals.js +1 -2
  382. package/dist/core/scene/sceneMutators.js +2 -3
  383. package/dist/core/scene/scenePoseAdapter.js +1 -2
  384. package/dist/core/scene/sceneRecording.js +1 -2
  385. package/dist/core/scene/sceneSelection.js +8 -5
  386. package/dist/core/scene/sceneSelection.js.map +1 -1
  387. package/dist/core/scene/sceneState.js +3 -4
  388. package/dist/core/scene/scrollOffsets.js +1 -2
  389. package/dist/core/scene/serialization.js +2 -3
  390. package/dist/core/scene/staleReplay.js +1 -2
  391. package/dist/core/scene/statedFields.js +1 -2
  392. package/dist/core/scene/strategyView.js +1 -2
  393. package/dist/core/scene/treeEdits.js +2 -3
  394. package/dist/core/scene/treeOrder.js +1 -2
  395. package/dist/core/scene/treeReads.js +1 -2
  396. package/dist/core/scene/treeShape.js +1 -2
  397. package/dist/core/scene/types.js +1 -2
  398. package/dist/core/scene/types.js.map +1 -1
  399. package/dist/core/scene/unionOfChildren.js +1 -2
  400. package/dist/core/scene/unitScopes.js +20 -4
  401. package/dist/core/scene/unitScopes.js.map +1 -1
  402. package/dist/core/scene/useScene.js +2 -3
  403. package/dist/core/scene/worldSave.js +2 -3
  404. package/dist/core/selection/chromeState.js +1 -2
  405. package/dist/core/selection/outermostSelection.js +56 -0
  406. package/dist/core/selection/outermostSelection.js.map +1 -0
  407. package/dist/core/selection/readOnlySelection.js +1 -2
  408. package/dist/core/selection/selectionTarget.js +1 -2
  409. package/dist/core/selection/usePublishSceneSelection.js +1 -2
  410. package/dist/core/selection/useSelection.js +1 -2
  411. package/dist/core/shapeKinds.js +1 -2
  412. package/dist/core/stableStringify.js +1 -2
  413. package/dist/core/stylus/stylus.js +1 -2
  414. package/dist/core/stylus/usePointerStylus.js +1 -2
  415. package/dist/core/usePaintKinds.js +1 -2
  416. package/dist/core/viewport/clampView.js +1 -2
  417. package/dist/core/viewport/clientToWorld.js +1 -2
  418. package/dist/core/viewport/createVelocityTracker.js +1 -2
  419. package/dist/core/viewport/fitToBounds.js +1 -2
  420. package/dist/core/viewport/fitViewToBounds.js +1 -2
  421. package/dist/core/viewport/interpolateView.js +1 -2
  422. package/dist/core/viewport/parallax.js +1 -2
  423. package/dist/core/viewport/sceneNodeClientRect.js +1 -2
  424. package/dist/core/viewport/screenSlop.js +1 -2
  425. package/dist/core/viewport/useAutoCenter.js +1 -2
  426. package/dist/core/viewport/useCanvasSize.js +1 -2
  427. package/dist/core/viewport/useDecayLoop.js +1 -2
  428. package/dist/core/viewport/useNodeOverlayFrame.js +1 -2
  429. package/dist/core/viewport/useVelocityTracker.js +1 -2
  430. package/dist/core/viewport/useViewAnimation.js +3 -4
  431. package/dist/core/viewport/view.js +1 -2
  432. package/dist/core/viewport/viewTransform.js +1 -2
  433. package/dist/core/viewport/viewportWorldRect.js +1 -2
  434. package/dist/core/viewport/wheelHandler.js +1 -2
  435. package/dist/core/viewport/zoomAt.js +2 -3
  436. package/dist/core/viewport/zoomBounds.js +1 -2
  437. package/dist/debug/createDebugOverlayLayer.js +1 -2
  438. package/dist/debug/createDebugSink.js +1 -2
  439. package/dist/debug/defaultTheme.js +1 -2
  440. package/dist/debug/features.js +1 -2
  441. package/dist/debug/frameStats.js +1 -2
  442. package/dist/debug/overlayPanels.js +1 -2
  443. package/dist/debug/parseDebugFlags.js +1 -2
  444. package/dist/debug/useDebugSink.js +2 -3
  445. package/dist/{depSchema-ChQPzEkW.d.ts → depSchema-C7a_OMt-.d.ts} +61 -52
  446. package/dist/devtools/handlers.js +1 -2
  447. package/dist/devtools/history.js +1 -2
  448. package/dist/devtools/hook.js +1 -2
  449. package/dist/devtools/label.js +1 -2
  450. package/dist/devtools/notices.js +1 -2
  451. package/dist/devtools/protocol.js +1 -2
  452. package/dist/devtools/registry.js +1 -2
  453. package/dist/devtools/root.js +1 -2
  454. package/dist/devtools/serialize.js +1 -2
  455. package/dist/devtools/session.js +2 -3
  456. package/dist/devtools/transport.js +1 -2
  457. package/dist/devtools/useDevtoolsRoot.js +1 -2
  458. package/dist/devtools-protocol.d.ts +1 -1
  459. package/dist/devtools-protocol.js +2 -2
  460. package/dist/devtools.d.ts +1 -1
  461. package/dist/devtools.js +1 -2
  462. package/dist/domains/chrome-caps/buildChromeCtx.js +1 -2
  463. package/dist/domains/chrome-caps/conditions.js +1 -2
  464. package/dist/domains/chrome-caps/defaults.js +1 -2
  465. package/dist/domains/chrome-caps/resolve.js +2 -3
  466. package/dist/domains/chrome-caps/useChromeCaps.js +1 -2
  467. package/dist/domains/chrome-caps/useHoverTracking.js +1 -2
  468. package/dist/domains/ingestion/contentHandlers.js +1 -2
  469. package/dist/domains/ingestion/ghost.js +2 -3
  470. package/dist/domains/ingestion/imageHandler.js +1 -2
  471. package/dist/domains/ingestion/kitHandlers.js +2 -3
  472. package/dist/domains/ingestion/openFilePicker.js +1 -2
  473. package/dist/domains/ingestion/placement.js +1 -2
  474. package/dist/domains/ingestion/svgHandler.js +1 -2
  475. package/dist/domains/ingestion/textHandler.js +1 -2
  476. package/dist/domains/ingestion/useCanvasIngestion.js +1 -2
  477. package/dist/domains/ingestion/weaselJsonHandler.js +2 -3
  478. package/dist/domains/longPress/longPressFeedback.js +1 -2
  479. package/dist/domains/measure/actionIds.js +1 -2
  480. package/dist/domains/measure/measureCommands.js +6 -7
  481. package/dist/domains/measure/measureContribution.js +3 -4
  482. package/dist/domains/measure/measureEdits.js +3 -4
  483. package/dist/domains/measure/measureGestures.js +2 -3
  484. package/dist/domains/measure/measureHit.js +3 -4
  485. package/dist/domains/measure/measureLayer.js +3 -4
  486. package/dist/domains/measure/measurement.js +1 -2
  487. package/dist/domains/measure/measurements.js +1 -2
  488. package/dist/domains/modes/modeLayers.js +1 -2
  489. package/dist/domains/modes/modeTriggers.js +1 -2
  490. package/dist/domains/pathEffects/effectSources.js +2 -3
  491. package/dist/domains/pathEffects/index.js +1 -2
  492. package/dist/domains/pathEffects/readSource.js +3 -4
  493. package/dist/domains/pathEffects/textItems.js +1 -2
  494. package/dist/domains/pathEffects/useEffectSourcesLayer.js +3 -4
  495. package/dist/domains/paths/anchorData.js +1 -2
  496. package/dist/domains/paths/anchorMarkers.js +1 -2
  497. package/dist/domains/paths/editablePath.js +3 -4
  498. package/dist/domains/paths/originProjection.js +1 -2
  499. package/dist/domains/paths/pathEditExtension.js +1 -2
  500. package/dist/domains/paths/pathEditState.js +1 -2
  501. package/dist/domains/paths/pathEditingOverlayLayer.js +2 -3
  502. package/dist/domains/paths/pathLayer.js +1 -2
  503. package/dist/domains/paths/pathRepresentation.js +1 -2
  504. package/dist/domains/paths/pathSnap/glyphs.js +1 -2
  505. package/dist/domains/paths/pathSnap/pathSnapSource.js +1 -2
  506. package/dist/domains/paths/pathSnap/sceneIndex.js +1 -2
  507. package/dist/domains/paths/pathSnap/snapGeometry.js +2 -3
  508. package/dist/domains/paths/penPreviewLayer.js +1 -2
  509. package/dist/domains/paths/shapeGenerator.js +1 -2
  510. package/dist/domains/paths/strokeOutline.js +2 -3
  511. package/dist/domains/paths/useAnchorFields.js +1 -2
  512. package/dist/domains/paths/usePathEdit.js +2 -3
  513. package/dist/domains/poseRun/usePoseRun.js +1 -2
  514. package/dist/domains/selection/enteredGroupFrame.js +1 -2
  515. package/dist/domains/selection/enteredGroupScope.js +1 -2
  516. package/dist/domains/selection/enteredOperands.js +1 -2
  517. package/dist/domains/selection/handleCommands.js +2 -3
  518. package/dist/domains/selection/overlay.js +6 -7
  519. package/dist/domains/selection/selectionPose.js +2 -3
  520. package/dist/domains/snap/angle2d.js +1 -2
  521. package/dist/domains/snap/debugCandidates.js +1 -2
  522. package/dist/domains/snap/gather.js +1 -2
  523. package/dist/domains/snap/inputSubspace.js +2 -3
  524. package/dist/domains/snap/lazySession.js +1 -2
  525. package/dist/domains/snap/marks.js +1 -2
  526. package/dist/domains/snap/outcomeStore.js +1 -2
  527. package/dist/domains/snap/pointSnap.js +1 -2
  528. package/dist/domains/snap/probes2d.js +1 -2
  529. package/dist/domains/snap/readoutDraw.js +1 -2
  530. package/dist/domains/snap/readoutLayer.js +1 -2
  531. package/dist/domains/snap/registry.js +1 -2
  532. package/dist/domains/snap/resizeBox.js +1 -2
  533. package/dist/domains/snap/roles.js +1 -2
  534. package/dist/domains/snap/rotationSource.js +1 -2
  535. package/dist/domains/snap/sceneReads.js +2 -3
  536. package/dist/domains/snap/sceneSession2d.js +2 -3
  537. package/dist/domains/snap/screen.js +2 -3
  538. package/dist/domains/snap/session2d.js +4 -5
  539. package/dist/domains/snap/spanSnap.js +1 -2
  540. package/dist/domains/snap/stepAngles.js +1 -2
  541. package/dist/domains/text/editingDrawOne.js +1 -2
  542. package/dist/domains/text/hostTextEditors.js +1 -2
  543. package/dist/domains/text/sceneTextDrafts.js +1 -2
  544. package/dist/domains/text/textHitAt.js +4 -5
  545. package/dist/domains/text/textLayer.js +12 -2
  546. package/dist/domains/text/textLayer.js.map +1 -1
  547. package/dist/domains/text/useSceneTextEdit.js +4 -5
  548. package/dist/domains/viewports/aim.js +3 -4
  549. package/dist/domains/viewports/viewMarker.js +1 -2
  550. package/dist/domains/viewports/viewMarkerDrag.js +1 -2
  551. package/dist/domains/viewports/viewResolver.js +1 -2
  552. package/dist/domains/viewports/viewportLayer.js +1 -2
  553. package/dist/iconRegistry/IconRegistryProvider.js +1 -2
  554. package/dist/iconRegistry/useIconGlyph.js +1 -2
  555. package/dist/iconRegistry/useIconVariant.js +1 -2
  556. package/dist/icons.table.js +1 -2
  557. package/dist/icons2.table.js +1 -2
  558. package/dist/index.d.ts +51 -7
  559. package/dist/index.js +3 -2
  560. package/dist/input/keyState.js +1 -2
  561. package/dist/input/useKeyModifiers.js +1 -2
  562. package/dist/input/useKeyState.js +1 -2
  563. package/dist/interactions/actions/admitsChild.js +1 -2
  564. package/dist/interactions/actions/align/action.js +6 -7
  565. package/dist/interactions/actions/align/align.js +6 -7
  566. package/dist/interactions/actions/booleans/action.js +1 -2
  567. package/dist/interactions/actions/booleans/booleanGroupAction.js +2 -3
  568. package/dist/interactions/actions/booleans/booleans.js +1 -2
  569. package/dist/interactions/actions/booleans/commit.js +4 -5
  570. package/dist/interactions/actions/booleans/custom.js +2 -3
  571. package/dist/interactions/actions/booleans/keymap.js +1 -2
  572. package/dist/interactions/actions/booleans/operands.js +1 -2
  573. package/dist/interactions/actions/booleans/pieces.js +1 -2
  574. package/dist/interactions/actions/booleans/placement.js +1 -2
  575. package/dist/interactions/actions/booleans/useBooleans.js +1 -2
  576. package/dist/interactions/actions/booleans/useBooleansAdapter.js +1 -2
  577. package/dist/interactions/actions/clipboard/action.js +2 -3
  578. package/dist/interactions/actions/clipboard/clipboardOps.js +2 -3
  579. package/dist/interactions/actions/clipboard/materializePaste.js +1 -2
  580. package/dist/interactions/actions/clipboard/wireFormat.js +1 -2
  581. package/dist/interactions/actions/clone/action.js +7 -8
  582. package/dist/interactions/actions/clone/behaviors.js +4 -5
  583. package/dist/interactions/actions/defaultCommitAdapter.js +2 -3
  584. package/dist/interactions/actions/defaults/anchorEditing.js +3 -4
  585. package/dist/interactions/actions/defaults/anchorFields.js +1 -2
  586. package/dist/interactions/actions/defaults/anchorHandles.js +2 -3
  587. package/dist/interactions/actions/defaults/anchorJoin.js +2 -3
  588. package/dist/interactions/actions/defaults/areaSelect.js +6 -6
  589. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  590. package/dist/interactions/actions/defaults/bendSegment.js +3 -4
  591. package/dist/interactions/actions/defaults/cancelGesture.js +1 -2
  592. package/dist/interactions/actions/defaults/clearSelection.js +1 -2
  593. package/dist/interactions/actions/defaults/containerScroll.js +4 -5
  594. package/dist/interactions/actions/defaults/contextMenu.js +6 -7
  595. package/dist/interactions/actions/defaults/copySubtree.js +2 -3
  596. package/dist/interactions/actions/defaults/createPaintAction.js +3 -4
  597. package/dist/interactions/actions/defaults/delete.js +2 -3
  598. package/dist/interactions/actions/defaults/duplicate.js +5 -6
  599. package/dist/interactions/actions/defaults/enterGroup.js +2 -3
  600. package/dist/interactions/actions/defaults/enterPathEdit.js +1 -2
  601. package/dist/interactions/actions/defaults/enterTextEdit.js +1 -2
  602. package/dist/interactions/actions/defaults/escape.js +1 -2
  603. package/dist/interactions/actions/defaults/exitPathEdit.js +1 -2
  604. package/dist/interactions/actions/defaults/group.js +6 -7
  605. package/dist/interactions/actions/defaults/ingest.js +3 -4
  606. package/dist/interactions/actions/defaults/insertPathAnchor.js +2 -3
  607. package/dist/interactions/actions/defaults/nudge.js +3 -4
  608. package/dist/interactions/actions/defaults/nudgeSteps.js +2 -3
  609. package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -1
  610. package/dist/interactions/actions/defaults/pathEditMarks.js +1 -2
  611. package/dist/interactions/actions/defaults/pinchZoom.js +3 -4
  612. package/dist/interactions/actions/defaults/reorder.js +2 -3
  613. package/dist/interactions/actions/defaults/requiresSelection.js +1 -2
  614. package/dist/interactions/actions/defaults/segmentUnder.js +1 -2
  615. package/dist/interactions/actions/defaults/selectAll.js +1 -2
  616. package/dist/interactions/actions/defaults/selectDeep.js +1 -2
  617. package/dist/interactions/actions/defaults/setFill.js +1 -2
  618. package/dist/interactions/actions/defaults/setFillOpacity.js +1 -2
  619. package/dist/interactions/actions/defaults/setStroke.js +1 -2
  620. package/dist/interactions/actions/defaults/setStrokeOpacity.js +1 -2
  621. package/dist/interactions/actions/defaults/slice.js +1 -2
  622. package/dist/interactions/actions/defaults/sliceOps.js +1 -2
  623. package/dist/interactions/actions/defaults/toolActivate.js +1 -2
  624. package/dist/interactions/actions/defaults/toolResetToDefault.js +1 -2
  625. package/dist/interactions/actions/defaults/undoRedo.js +1 -2
  626. package/dist/interactions/actions/defaults/viewportDragPan.js +1 -2
  627. package/dist/interactions/actions/defaults/viewportWheelPan.js +1 -2
  628. package/dist/interactions/actions/defaults/viewportZoom.js +3 -4
  629. package/dist/interactions/actions/distribute/action.js +4 -5
  630. package/dist/interactions/actions/distribute/distribute.js +5 -6
  631. package/dist/interactions/actions/distribute/plan.js +1 -2
  632. package/dist/interactions/actions/drawnBoxes.js +4 -5
  633. package/dist/interactions/actions/dropVerdict.js +1 -2
  634. package/dist/interactions/actions/edit-anchors/action.js +4 -5
  635. package/dist/interactions/actions/edit-anchors/extensionDrags.js +1 -2
  636. package/dist/interactions/actions/edit-anchors/geometry.js +1 -2
  637. package/dist/interactions/actions/edit-anchors/handleDrag.js +1 -2
  638. package/dist/interactions/actions/edit-anchors/handles.js +1 -2
  639. package/dist/interactions/actions/edit-anchors/params.js +1 -2
  640. package/dist/interactions/actions/edit-anchors/preview.js +1 -2
  641. package/dist/interactions/actions/edit-anchors/symmetry.js +1 -2
  642. package/dist/interactions/actions/flip/action.js +8 -9
  643. package/dist/interactions/actions/flip/helpers.js +1 -2
  644. package/dist/interactions/actions/geometryProjection.js +1 -2
  645. package/dist/interactions/actions/gestureFrames.js +3 -4
  646. package/dist/interactions/actions/gestureLifecycle.js +1 -2
  647. package/dist/interactions/actions/hitSelection.js +7 -3
  648. package/dist/interactions/actions/hitSelection.js.map +1 -1
  649. package/dist/interactions/actions/insert/action.js +6 -7
  650. package/dist/interactions/actions/insert/commit.js +2 -3
  651. package/dist/interactions/actions/insert/extras.js +1 -2
  652. package/dist/interactions/actions/insert/frame.js +1 -2
  653. package/dist/interactions/actions/insert/geometry.js +1 -2
  654. package/dist/interactions/actions/insert/params.js +2 -3
  655. package/dist/interactions/actions/insert/parent.js +1 -2
  656. package/dist/interactions/actions/insert/placeAction.js +5 -6
  657. package/dist/interactions/actions/insert/repositionAction.js +1 -2
  658. package/dist/interactions/actions/insert/rotateAction.js +1 -2
  659. package/dist/interactions/actions/insert/session.js +5 -6
  660. package/dist/interactions/actions/insert/shape.js +2 -3
  661. package/dist/interactions/actions/lasso-select/action.js +9 -9
  662. package/dist/interactions/actions/lasso-select/action.js.map +1 -1
  663. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +2 -3
  664. package/dist/interactions/actions/magnification.js +37 -0
  665. package/dist/interactions/actions/magnification.js.map +1 -0
  666. package/dist/interactions/actions/move/action.js +2 -3
  667. package/dist/interactions/actions/move/behaviors/layoutDrop.js +2 -3
  668. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +2 -3
  669. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +1 -2
  670. package/dist/interactions/actions/move/behaviors/snapToContainer.js +2 -3
  671. package/dist/interactions/actions/move/capture.js +6 -7
  672. package/dist/interactions/actions/move/commit/index.js +2 -3
  673. package/dist/interactions/actions/move/commit/layoutDrop.js +4 -5
  674. package/dist/interactions/actions/move/commit/layoutRelease.js +7 -8
  675. package/dist/interactions/actions/move/commit/rebase.js +2 -3
  676. package/dist/interactions/actions/move/commit/reparent.js +5 -6
  677. package/dist/interactions/actions/move/delta.js +2 -3
  678. package/dist/interactions/actions/move/frame.js +2 -3
  679. package/dist/interactions/actions/move/gestureAdapter.js +1 -2
  680. package/dist/interactions/actions/move/landedDescendants.js +2 -3
  681. package/dist/interactions/actions/move/layout/container.js +3 -4
  682. package/dist/interactions/actions/move/layout/dragged.js +2 -3
  683. package/dist/interactions/actions/move/layout/dropPass.js +5 -6
  684. package/dist/interactions/actions/move/layout/exits.js +2 -3
  685. package/dist/interactions/actions/move/layout/glide.js +2 -3
  686. package/dist/interactions/actions/move/layout/view.js +1 -2
  687. package/dist/interactions/actions/move/refusal.js +2 -3
  688. package/dist/interactions/actions/move/session.js +4 -5
  689. package/dist/interactions/actions/move/translate.js +2 -3
  690. package/dist/interactions/actions/moveNodes.js +5 -6
  691. package/dist/interactions/actions/notices.js +1 -2
  692. package/dist/interactions/actions/outlines/createOutlines.js +1 -2
  693. package/dist/interactions/actions/outlines/createOutlinesAction.js +2 -3
  694. package/dist/interactions/actions/outlines/outlineStroke.js +2 -3
  695. package/dist/interactions/actions/outlines/outlineStrokeAction.js +2 -3
  696. package/dist/interactions/actions/outlines/replaceWithPaths.js +5 -6
  697. package/dist/interactions/actions/outlines/strokeRegion.js +1 -2
  698. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +1 -2
  699. package/dist/interactions/actions/pathCommands/cutJoin.js +3 -4
  700. package/dist/interactions/actions/pathCommands/livePathEdit.js +3 -4
  701. package/dist/interactions/actions/pathCommands/pathNodes.js +3 -4
  702. package/dist/interactions/actions/pathCommands/simplifyOffset.js +2 -3
  703. package/dist/interactions/actions/pathGestureTags.js +1 -2
  704. package/dist/interactions/actions/planeInput.js +2 -3
  705. package/dist/interactions/actions/pointerState.js +1 -2
  706. package/dist/interactions/actions/poseDescriptorDep.js +1 -2
  707. package/dist/interactions/actions/poseFrame.js +3 -4
  708. package/dist/interactions/actions/resize/action.js +3 -4
  709. package/dist/interactions/actions/resize/aspect.js +1 -2
  710. package/dist/interactions/actions/resize/behaviors/clampMinSize.js +1 -2
  711. package/dist/interactions/actions/resize/boxFrame.js +1 -2
  712. package/dist/interactions/actions/resize/capture.js +7 -8
  713. package/dist/interactions/actions/resize/commit.js +3 -4
  714. package/dist/interactions/actions/resize/cornerHandles.js +1 -2
  715. package/dist/interactions/actions/resize/frame.js +7 -8
  716. package/dist/interactions/actions/resize/held.js +2 -3
  717. package/dist/interactions/actions/resize/minimum.js +1 -2
  718. package/dist/interactions/actions/resize/replay.js +1 -2
  719. package/dist/interactions/actions/resize/ruleBounds.js +1 -2
  720. package/dist/interactions/actions/resize/session.js +9 -10
  721. package/dist/interactions/actions/resolveOverlays.js +1 -2
  722. package/dist/interactions/actions/resolvePreviews.js +3 -4
  723. package/dist/interactions/actions/rotate/action.js +5 -6
  724. package/dist/interactions/actions/rotate/commit.js +2 -3
  725. package/dist/interactions/actions/rotate/frame.js +3 -4
  726. package/dist/interactions/actions/rotate/geometry.js +1 -2
  727. package/dist/interactions/actions/rotate/handle.js +2 -3
  728. package/dist/interactions/actions/rotate/replay.js +2 -3
  729. package/dist/interactions/actions/rotate/session.js +10 -11
  730. package/dist/interactions/actions/selectionSubtree.js +7 -22
  731. package/dist/interactions/actions/selectionSubtree.js.map +1 -1
  732. package/dist/interactions/actions/spatialReference.js +1 -2
  733. package/dist/interactions/actions/testUtils.js +1 -2
  734. package/dist/interactions/actions/transform-again/action.js +5 -6
  735. package/dist/interactions/actions/transform-again/memory.js +1 -2
  736. package/dist/interactions/actions/transformFinish.js +1 -2
  737. package/dist/interactions/actions/useActionSet.js +1 -2
  738. package/dist/interactions/actions/useNotices.js +1 -2
  739. package/dist/interactions/actions/useStandardActions.js +1 -2
  740. package/dist/interactions/gestures/dragGesture/dragGesture.js +1 -2
  741. package/dist/interactions/gestures/dragGesture/dragPointOf.js +1 -2
  742. package/dist/interactions/gestures/dragRadial/dragRadial.js +2 -3
  743. package/dist/interactions/gestures/dragRect/dragRect.js +2 -3
  744. package/dist/interactions/gestures/handleDrag/handleDrag.js +1 -2
  745. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +1 -2
  746. package/dist/interactions/gestures/shared/originProjection.js +1 -2
  747. package/dist/interactions/gestures/shared/screenTolerance.js +1 -2
  748. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +1 -2
  749. package/dist/kitSettingsSchema.js +4 -5
  750. package/dist/test-hook/createTestHook.js +1 -2
  751. package/dist/test-hook/install.js +1 -2
  752. package/dist/test-hook/useTestHook.js +1 -2
  753. package/dist/test-seams.d.ts +4 -4
  754. package/dist/test-seams.js +2 -2
  755. package/dist/tools/builtin/anchors/anchorsTool.js +1 -2
  756. package/dist/tools/builtin/ellipse/useEllipseTool.js +2 -3
  757. package/dist/tools/builtin/eyedropper/useEyedropperTool.js +1 -2
  758. package/dist/tools/builtin/hand/dragPanContribution.js +1 -2
  759. package/dist/tools/builtin/hand/useHandTool.js +1 -2
  760. package/dist/tools/builtin/image/useImageTool.js +1 -2
  761. package/dist/tools/builtin/lasso/useLassoTool.js +1 -2
  762. package/dist/tools/builtin/line/useLineTool.js +2 -3
  763. package/dist/tools/builtin/measure/useMeasureTool.js +2 -3
  764. package/dist/tools/builtin/pen/penHandle.js +1 -2
  765. package/dist/tools/builtin/pen/usePenTool.js +6 -7
  766. package/dist/tools/builtin/pencil/usePencilTool.js +1 -2
  767. package/dist/tools/builtin/pickTopMostHit.js +1 -2
  768. package/dist/tools/builtin/polygon/usePolygonTool.js +3 -4
  769. package/dist/tools/builtin/pressTarget.js +1 -2
  770. package/dist/tools/builtin/rect/useRectTool.js +2 -3
  771. package/dist/tools/builtin/select/adapterPointQuery.js +3 -4
  772. package/dist/tools/builtin/select/collapseDeferred.js +1 -2
  773. package/dist/tools/builtin/select/groupEntry.js +2 -3
  774. package/dist/tools/builtin/select/pressDecision.js +3 -4
  775. package/dist/tools/builtin/select/pressDecision.js.map +1 -1
  776. package/dist/tools/builtin/select/selectionContributions.js +1 -2
  777. package/dist/tools/builtin/select/useSelectTool.js +5 -6
  778. package/dist/tools/builtin/shared/insertToolOptions.js +1 -2
  779. package/dist/tools/builtin/shared/pointerFollower.js +1 -2
  780. package/dist/tools/builtin/slice/useSliceTool.js +5 -6
  781. package/dist/tools/builtin/star/useStarTool.js +3 -4
  782. package/dist/tools/builtin/sticky/stickyNode.js +1 -2
  783. package/dist/tools/builtin/sticky/useStickyTool.js +2 -3
  784. package/dist/tools/builtin/text/useTextTool.js +1 -2
  785. package/dist/tools/index.js +2 -2
  786. package/dist/tools/overlayBinding.js +1 -2
  787. package/dist/tools/toolOptions.js +17 -4
  788. package/dist/tools/toolOptions.js.map +1 -1
  789. package/dist/tools/useKeybindings.js +1 -2
  790. package/dist/{types-DW14eu9B.d.ts → types-BUvUXZe5.d.ts} +3 -3
  791. package/dist/util/color.js +1 -2
  792. package/dist/util/paint.js +1 -2
  793. package/dist/version.js +2 -3
  794. package/package.json +27 -27
@@ -1,7 +1,7 @@
1
1
  import { handleAlongItsAngle, handleAtItsLength } from "@weasel-js/geom";
2
2
  import { roleReader } from "@weasel-js/routing";
3
3
 
4
- //#region src/interactions/actions/edit-anchors/handleDrag.ts
4
+ // src/interactions/actions/edit-anchors/handleDrag.ts
5
5
  /**
6
6
  * The locks on a control-handle drag — its angle, its length, or both — and
7
7
  * the guide that shows which one is holding.
@@ -96,6 +96,5 @@ function dist(a, b) {
96
96
  return Math.hypot(b.x - a.x, b.y - a.y);
97
97
  }
98
98
 
99
- //#endregion
100
99
  export { HANDLE_LOCK_ROLES, lockHandle, locksInForce };
101
100
  //# sourceMappingURL=handleDrag.js.map
@@ -1,6 +1,6 @@
1
1
  import { enumerateAnchors } from "./geometry.js";
2
2
 
3
- //#region src/interactions/actions/edit-anchors/handles.ts
3
+ // src/interactions/actions/edit-anchors/handles.ts
4
4
  /** Hit-test anchors and control handles. Controls win over anchors when both
5
5
  * are within `threshold` (controls are smaller and rendered on top). */
6
6
  function hitAnchor(path, worldX, worldY, threshold) {
@@ -52,6 +52,5 @@ function hitAnchor(path, worldX, worldY, threshold) {
52
52
  return null;
53
53
  }
54
54
 
55
- //#endregion
56
55
  export { hitAnchor };
57
56
  //# sourceMappingURL=handles.js.map
@@ -1,4 +1,4 @@
1
- //#region src/interactions/actions/edit-anchors/params.ts
1
+ // src/interactions/actions/edit-anchors/params.ts
2
2
  /** The locks a single {@link HandleLock}, or none, holds. */
3
3
  function locksOf(lock) {
4
4
  return {
@@ -7,6 +7,5 @@ function locksOf(lock) {
7
7
  };
8
8
  }
9
9
 
10
- //#endregion
11
10
  export { locksOf };
12
11
  //# sourceMappingURL=params.js.map
@@ -1,6 +1,6 @@
1
1
  import { storeEditablePath } from "../../../domains/paths/editablePath.js";
2
2
 
3
- //#region src/interactions/actions/edit-anchors/preview.ts
3
+ // src/interactions/actions/edit-anchors/preview.ts
4
4
  /** `path`, a frame of an edit of `id`, finished by the dep's `finishEdit` as
5
5
  * committing it would be: its path and the other nodes' that move with it.
6
6
  * Null when an extension cannot finish it. */
@@ -96,6 +96,5 @@ function pathEditPreview(dep, id, current, finished) {
96
96
  };
97
97
  }
98
98
 
99
- //#endregion
100
99
  export { finishPathEditFrame, pathEditPreview };
101
100
  //# sourceMappingURL=preview.js.map
@@ -1,6 +1,6 @@
1
1
  import { anchorSymmetries } from "@weasel-js/geom";
2
2
 
3
- //#region src/interactions/actions/edit-anchors/symmetry.ts
3
+ // src/interactions/actions/edit-anchors/symmetry.ts
4
4
  /** World-unit slack for "this anchor is the image of that one": enough to
5
5
  * absorb a path's float32 coordinates, far under anything drawn by hand. */
6
6
  var SYMMETRY_TOLERANCE = .001;
@@ -11,6 +11,5 @@ function editedPathSymmetries(dep, id, set) {
11
11
  return transforms.length === 0 ? [] : anchorSymmetries(set, transforms, SYMMETRY_TOLERANCE);
12
12
  }
13
13
 
14
- //#endregion
15
14
  export { editedPathSymmetries };
16
15
  //# sourceMappingURL=symmetry.js.map
@@ -1,19 +1,19 @@
1
+ import { shapeSources } from "../selectionSubtree.js";
2
+ import { createTransformOp } from "../../../core/ops/transform.js";
3
+ import { poseDescriptorOf } from "../poseDescriptorDep.js";
4
+ import { flipPoseAboutBounds, flipPoseViaDescriptor } from "./helpers.js";
1
5
  import { unionAABB } from "../../../core/geometry/unionBounds.js";
6
+ import { drawnBoxes } from "../drawnBoxes.js";
2
7
  import { isNoInkExtents } from "../../../core/geometry/inkExtents.js";
3
8
  import { scenePoseFrame } from "../poseFrame.js";
4
- import { poseDescriptorOf } from "../poseDescriptorDep.js";
9
+ import { actionReferenceSources, resolveSpatialReference } from "../spatialReference.js";
5
10
  import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
6
11
  import { transformApplyOps } from "../transformFinish.js";
7
- import { createTransformOp } from "../../../core/ops/transform.js";
8
- import { shapeSources } from "../selectionSubtree.js";
9
- import { geometryDataOp } from "../geometryProjection.js";
10
- import { drawnBoxes } from "../drawnBoxes.js";
11
- import { flipPoseAboutBounds, flipPoseViaDescriptor } from "./helpers.js";
12
- import { actionReferenceSources, resolveSpatialReference } from "../spatialReference.js";
13
12
  import { requiresSelection } from "../defaults/requiresSelection.js";
13
+ import { geometryDataOp } from "../geometryProjection.js";
14
14
  import { multiply, rotate, translate } from "@weasel-js/geom";
15
15
 
16
- //#region src/interactions/actions/flip/action.ts
16
+ // src/interactions/actions/flip/action.ts
17
17
  /**
18
18
  * The world mirror about `axis` through the center of `pivotWorld`, written in
19
19
  * the frame `id` stores its data in. `geometryProjection.transform` is given
@@ -186,6 +186,5 @@ var flipAction = {
186
186
  enabled: requiresSelection
187
187
  };
188
188
 
189
- //#endregion
190
189
  export { flipAction };
191
190
  //# sourceMappingURL=action.js.map
@@ -1,6 +1,6 @@
1
1
  import { poseLinearOf } from "@weasel-js/geom";
2
2
 
3
- //#region src/interactions/actions/flip/helpers.ts
3
+ // src/interactions/actions/flip/helpers.ts
4
4
  /** Reflect `pose` across the centerline of `pivotBounds` along `axis`, using
5
5
  * `geometry` to read bounds and remap. The pose's own AABB is read once to
6
6
  * compute the reflected destination rect; coords inside the pose are then
@@ -76,6 +76,5 @@ function mirrorLinear(pose) {
76
76
  };
77
77
  }
78
78
 
79
- //#endregion
80
79
  export { flipPoseAboutBounds, flipPoseViaDescriptor };
81
80
  //# sourceMappingURL=helpers.js.map
@@ -1,7 +1,7 @@
1
1
  import { createSetDataOp } from "../../core/ops/setData.js";
2
2
  import "@weasel-js/geom";
3
3
 
4
- //#region src/interactions/actions/geometryProjection.ts
4
+ // src/interactions/actions/geometryProjection.ts
5
5
  /** Build the `setData` op for a node when a geometryProjection is wired and
6
6
  * returns non-null. Returns `undefined` (no op) otherwise — keeping the data
7
7
  * op strictly opt-in so adapters without `setData` are never invoked. `to` is
@@ -23,6 +23,5 @@ function geometryDataOp(projection, node, m, to, label) {
23
23
  });
24
24
  }
25
25
 
26
- //#endregion
27
26
  export { geometryDataOp };
28
27
  //# sourceMappingURL=geometryProjection.js.map
@@ -1,8 +1,8 @@
1
- import { scenePoseFrame } from "./poseFrame.js";
2
- import { planeOf } from "./planeInput.js";
3
1
  import { drawnBoxes } from "./drawnBoxes.js";
2
+ import { planeOf } from "./planeInput.js";
3
+ import { scenePoseFrame } from "./poseFrame.js";
4
4
 
5
- //#region src/interactions/actions/gestureFrames.ts
5
+ // src/interactions/actions/gestureFrames.ts
6
6
  /** A scene-backed gesture's {@link GestureFrames}, read through the action's deps. */
7
7
  function sceneGestureFrames(scene, deps, frame = scenePoseFrame(scene)) {
8
8
  const view = deps.view;
@@ -23,6 +23,5 @@ function sceneGestureFrames(scene, deps, frame = scenePoseFrame(scene)) {
23
23
  };
24
24
  }
25
25
 
26
- //#endregion
27
26
  export { sceneGestureFrames };
28
27
  //# sourceMappingURL=gestureFrames.js.map
@@ -1,6 +1,6 @@
1
1
  import { SceneArrivalRefused } from "../../core/scene/arrivals.js";
2
2
 
3
- //#region src/interactions/actions/gestureLifecycle.ts
3
+ // src/interactions/actions/gestureLifecycle.ts
4
4
  /** The params entries for {@link GestureLifecycleOptions}, with the unset
5
5
  * keys left out. */
6
6
  function gestureLifecycleParams(o) {
@@ -114,6 +114,5 @@ function closeGesture(gesture, committed) {
114
114
  runEvery([() => runBehaviorSettled(gesture.behaviors, gesture.ctx, committed), () => gesture.lifecycle.end(committed)], (step) => step());
115
115
  }
116
116
 
117
- //#endregion
118
117
  export { closeGesture, commitGestureOps, gestureLifecycleParams, readGestureLifecycle, reduceBehaviorEnd, runBehaviorCancel, runBehaviorSettled };
119
118
  //# sourceMappingURL=gestureLifecycle.js.map
@@ -1,10 +1,14 @@
1
- //#region src/interactions/actions/hitSelection.ts
1
+ // src/interactions/actions/hitSelection.ts
2
+ /** What selecting `hits` selects: each hit's `targetOf`, first answer kept,
3
+ * or the hits themselves when there is no `targetOf`. */
4
+ function hitTargets(hits, targetOf) {
5
+ return targetOf ? [...new Set(hits.map(targetOf))] : [...hits];
6
+ }
2
7
  /** The selection a hit list leaves behind: the hits alone, or, when the
3
8
  * gesture extends the selection, the current ids with the new hits after them. */
4
9
  function selectionFromHits(current, hits, extend) {
5
10
  return [...new Set(extend ? [...current, ...hits] : hits)];
6
11
  }
7
12
 
8
- //#endregion
9
- export { selectionFromHits };
13
+ export { hitTargets, selectionFromHits };
10
14
  //# sourceMappingURL=hitSelection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hitSelection.js","names":[],"sources":["../../../src/interactions/actions/hitSelection.ts"],"sourcesContent":["/** The selection a hit list leaves behind: the hits alone, or, when the\n * gesture extends the selection, the current ids with the new hits after them. */\nexport function selectionFromHits<T extends string>(\n current: readonly T[],\n hits: readonly T[],\n extend: boolean,\n): T[] {\n return [...new Set(extend ? [...current, ...hits] : hits)];\n}\n"],"mappings":";;;AAEA,SAAgB,kBACd,SACA,MACA,QACK;CACL,OAAO,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC;AAC3D"}
1
+ {"version":3,"file":"hitSelection.js","names":[],"sources":["../../../src/interactions/actions/hitSelection.ts"],"sourcesContent":["/** What selecting `hits` selects: each hit's `targetOf`, first answer kept,\n * or the hits themselves when there is no `targetOf`. */\nexport function hitTargets<T extends string>(hits: readonly T[], targetOf?: (id: T) => T): T[] {\n return targetOf ? [...new Set(hits.map(targetOf))] : [...hits];\n}\n\n/** The selection a hit list leaves behind: the hits alone, or, when the\n * gesture extends the selection, the current ids with the new hits after them. */\nexport function selectionFromHits<T extends string>(\n current: readonly T[],\n hits: readonly T[],\n extend: boolean,\n): T[] {\n return [...new Set(extend ? [...current, ...hits] : hits)];\n}\n"],"mappings":";;;AAEA,SAAgB,WAA6B,MAAoB,UAA8B;CAC7F,OAAO,WAAW,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;AAC/D;;;AAIA,SAAgB,kBACd,SACA,MACA,QACK;CACL,OAAO,CAAC,GAAG,IAAI,IAAI,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC;AAC3D"}
@@ -1,17 +1,17 @@
1
- import { scenePaintedPoseOf } from "../../../canvas/derivedPath.js";
1
+ import { shapeKindInfo } from "../../../core/shapeKinds.js";
2
+ import { SNAP_ROLES } from "../../../domains/snap/roles.js";
2
3
  import { runBehaviorSettled } from "../gestureLifecycle.js";
3
4
  import { inPlane, insertLayer } from "../planeInput.js";
4
- import { SNAP_ROLES } from "../../../domains/snap/roles.js";
5
- import { shapeKindInfo } from "../../../core/shapeKinds.js";
6
5
  import { copiesWithin } from "../../../canvas/copiesAbove.js";
7
- import { insertKind, insertShape } from "./shape.js";
6
+ import { scenePaintedPoseOf } from "../../../canvas/derivedPath.js";
8
7
  import { cancelInsert, commitInsert } from "./commit.js";
9
- import { beginInsert } from "./session.js";
10
8
  import { carryStart, nextFrame } from "./frame.js";
11
9
  import { insertParams } from "./params.js";
10
+ import { beginInsert } from "./session.js";
11
+ import { insertKind, insertShape } from "./shape.js";
12
12
  import { resolveParams } from "@weasel-js/routing";
13
13
 
14
- //#region src/interactions/actions/insert/action.ts
14
+ // src/interactions/actions/insert/action.ts
15
15
  /** How far, in CSS pixels, a drag travels before it draws a shape: past the wobble of a click, so a
16
16
  * press that drifts a few pixels draws nothing rather than a shape a few pixels wide. */
17
17
  var INSERT_DRAG_THRESHOLD_PX = 8;
@@ -126,6 +126,5 @@ var insertAction = inPlane({
126
126
  enabled: () => true
127
127
  }, insertLayer);
128
128
 
129
- //#endregion
130
129
  export { INSERT_DRAG_THRESHOLD_PX, insertAction };
131
130
  //# sourceMappingURL=action.js.map
@@ -1,10 +1,10 @@
1
1
  import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
2
2
  import { commitGestureOps, readGestureLifecycle, reduceBehaviorEnd, runBehaviorCancel } from "../gestureLifecycle.js";
3
- import { shapeKindInfo } from "../../../core/shapeKinds.js";
4
3
  import { insertShape, isCommittableExtent } from "./shape.js";
4
+ import { shapeKindInfo } from "../../../core/shapeKinds.js";
5
5
  import { resolveParams } from "@weasel-js/routing";
6
6
 
7
- //#region src/interactions/actions/insert/commit.ts
7
+ // src/interactions/actions/insert/commit.ts
8
8
  /**
9
9
  * A freshly inserted text box is empty, so it draws nothing and the tool's own
10
10
  * `click on selected body → enterTextEdit` binding has nothing visible to
@@ -45,6 +45,5 @@ function commitInsert(session, frame, points, userRotation) {
45
45
  return id !== null;
46
46
  }
47
47
 
48
- //#endregion
49
48
  export { cancelInsert, commitInsert, enterInsertedText };
50
49
  //# sourceMappingURL=commit.js.map
@@ -1,4 +1,4 @@
1
- //#region src/interactions/actions/insert/extras.ts
1
+ // src/interactions/actions/insert/extras.ts
2
2
  /** Build a typed `InsertExtras` from the static params + gesture context.
3
3
  * Kit-built-in kinds (line / polygon / star / pencil) read kind-specific
4
4
  * fields; unknown kinds pass the raw params through as `{ kind, ... }`. */
@@ -82,6 +82,5 @@ function applyUserRotation(extras, userRotation) {
82
82
  if (extras.kind === "star" || extras.kind === "polygon") extras.rotation += userRotation;
83
83
  }
84
84
 
85
- //#endregion
86
85
  export { applyUserRotation, buildExtras };
87
86
  //# sourceMappingURL=extras.js.map
@@ -4,7 +4,7 @@ import { computeBounds, effectiveOriginMode } from "./geometry.js";
4
4
  import { GESTURE_KEY } from "./session.js";
5
5
  import { resolveParams } from "@weasel-js/routing";
6
6
 
7
- //#region src/interactions/actions/insert/frame.ts
7
+ // src/interactions/actions/insert/frame.ts
8
8
  /**
9
9
  * Shape the raw pointer into the drag's endpoints: the snap session (with
10
10
  * the line kind's Shift step as its input subspace, about the snapped
@@ -69,6 +69,5 @@ function nextFrame(session, readers, prev, moveCtx) {
69
69
  };
70
70
  }
71
71
 
72
- //#endregion
73
72
  export { carryStart, nextFrame };
74
73
  //# sourceMappingURL=frame.js.map
@@ -1,4 +1,4 @@
1
- //#region src/interactions/actions/insert/geometry.ts
1
+ // src/interactions/actions/insert/geometry.ts
2
2
  /** Resolve the effective origin mode from the binding's nominal opt
3
3
  * and live Alt state. Alt inverts: `corner` ⇄ `center`. Applies to
4
4
  * every shape kind — radial shapes (polygon/star) included; the
@@ -34,6 +34,5 @@ function computeBounds(startX, startY, currentX, currentY, originMode) {
34
34
  };
35
35
  }
36
36
 
37
- //#endregion
38
37
  export { computeBounds, effectiveOriginMode };
39
38
  //# sourceMappingURL=geometry.js.map
@@ -1,8 +1,8 @@
1
- import { insertKind } from "./shape.js";
2
1
  import { SHAPE_COUNT_RANGE, STAR_RATIO_RANGE } from "../../../domains/paths/shapeGenerator.js";
2
+ import { insertKind } from "./shape.js";
3
3
  import { pref } from "@weasel-js/prefs";
4
4
 
5
- //#region src/interactions/actions/insert/params.ts
5
+ // src/interactions/actions/insert/params.ts
6
6
  /** A polygon insert's params as a form, for the last-operation panel. */
7
7
  var POLYGON_INSERT_PARAMS = pref.group("Polygon", { sides: pref.number("Sides", 6, {
8
8
  min: SHAPE_COUNT_RANGE.min,
@@ -38,6 +38,5 @@ function insertParams(params) {
38
38
  return kind === "polygon" ? POLYGON_INSERT_PARAMS : kind === "star" ? STAR_INSERT_PARAMS : null;
39
39
  }
40
40
 
41
- //#endregion
42
41
  export { POLYGON_INSERT_PARAMS, STAR_INSERT_PARAMS, insertParams };
43
42
  //# sourceMappingURL=params.js.map
@@ -1,6 +1,6 @@
1
1
  import { admitsChild } from "../admitsChild.js";
2
2
 
3
- //#region src/interactions/actions/insert/parent.ts
3
+ // src/interactions/actions/insert/parent.ts
4
4
  /** The node an insert lands in: the one the `insertInto` dep's `into` names when
5
5
  * it exists and admits the insert, or null, the top of the tree. */
6
6
  function insertParent(scene, into, canDropInto) {
@@ -8,6 +8,5 @@ function insertParent(scene, into, canDropInto) {
8
8
  return admitsChild(scene, into, [], canDropInto) ? into : null;
9
9
  }
10
10
 
11
- //#endregion
12
11
  export { insertParent };
13
12
  //# sourceMappingURL=parent.js.map
@@ -1,11 +1,11 @@
1
- import { insertParent } from "./parent.js";
2
- import { inPlane, insertLayer } from "../planeInput.js";
3
1
  import { SNAP_ROLES, snapMods } from "../../../domains/snap/roles.js";
4
- import { minSizeOf } from "../../../core/scene/minSize.js";
5
- import { insertKind } from "./shape.js";
2
+ import { inPlane, insertLayer } from "../planeInput.js";
6
3
  import { enterInsertedText } from "./commit.js";
4
+ import { insertParent } from "./parent.js";
5
+ import { insertKind } from "./shape.js";
6
+ import { minSizeOf } from "../../../core/scene/minSize.js";
7
7
 
8
- //#region src/interactions/actions/insert/placeAction.ts
8
+ // src/interactions/actions/insert/placeAction.ts
9
9
  /** What the dispatcher lays under an immediate action's params for a click. */
10
10
  var CLICK_FIELDS = [
11
11
  "world",
@@ -107,6 +107,5 @@ var placeAction = inPlane({
107
107
  enabled: () => true
108
108
  }, insertLayer);
109
109
 
110
- //#endregion
111
110
  export { placeAction };
112
111
  //# sourceMappingURL=placeAction.js.map
@@ -1,6 +1,6 @@
1
1
  import { heldKeySpec } from "@weasel-js/routing";
2
2
 
3
- //#region src/interactions/actions/insert/repositionAction.ts
3
+ // src/interactions/actions/insert/repositionAction.ts
4
4
  /**
5
5
  * Companion to `insertAction`: while its key is held, dragging moves the
6
6
  * shape being drawn instead of resizing it; letting go resumes resizing from
@@ -42,6 +42,5 @@ var INSERT_REPOSITION_BINDING = {
42
42
  opts: { id: "insert.reposition.held" }
43
43
  };
44
44
 
45
- //#endregion
46
45
  export { INSERT_REPOSITION_BINDING, insertRepositionAction };
47
46
  //# sourceMappingURL=repositionAction.js.map
@@ -1,4 +1,4 @@
1
- //#region src/interactions/actions/insert/rotateAction.ts
1
+ // src/interactions/actions/insert/rotateAction.ts
2
2
  /** Radians per unit of wheel deltaY. Tuned so a typical mouse-wheel click
3
3
  * (deltaY ≈ 100) yields ~25°, while a trackpad event (deltaY ≈ 1–10)
4
4
  * yields a smooth 0.25–2.5° increment. */
@@ -27,6 +27,5 @@ var insertRotateAction = {
27
27
  requires: ["insertLive"]
28
28
  };
29
29
 
30
- //#endregion
31
30
  export { insertRotateAction };
32
31
  //# sourceMappingURL=rotateAction.js.map
@@ -1,12 +1,12 @@
1
- import { insertParent } from "./parent.js";
2
- import { gestureReaders } from "../../gestures/shared/screenTolerance.js";
3
- import { pointerStateOf } from "../pointerState.js";
4
1
  import { SNAP_ANGLE_STEP, snapMods } from "../../../domains/snap/roles.js";
5
- import { insertKind } from "./shape.js";
6
2
  import { spanSnap } from "../../../domains/snap/spanSnap.js";
3
+ import { pointerStateOf } from "../pointerState.js";
4
+ import { gestureReaders } from "../../gestures/shared/screenTolerance.js";
5
+ import { insertParent } from "./parent.js";
6
+ import { insertKind } from "./shape.js";
7
7
  import { resolveParams } from "@weasel-js/routing";
8
8
 
9
- //#region src/interactions/actions/insert/session.ts
9
+ // src/interactions/actions/insert/session.ts
10
10
  /** The key an insert's single gesture point rides under in the behaviors'
11
11
  * `draggedIds` / `origin` / `current` — insert has no node id yet. */
12
12
  var GESTURE_KEY = "gesture";
@@ -74,6 +74,5 @@ function beginInsert(ctx, opts) {
74
74
  };
75
75
  }
76
76
 
77
- //#endregion
78
77
  export { GESTURE_KEY, beginInsert };
79
78
  //# sourceMappingURL=session.js.map
@@ -1,8 +1,8 @@
1
- import { minSizeOf } from "../../../core/scene/minSize.js";
2
1
  import { applyUserRotation, buildExtras } from "./extras.js";
3
2
  import { computeBounds, effectiveOriginMode } from "./geometry.js";
3
+ import { minSizeOf } from "../../../core/scene/minSize.js";
4
4
 
5
- //#region src/interactions/actions/insert/shape.ts
5
+ // src/interactions/actions/insert/shape.ts
6
6
  /** The node kind a binding's resolved params ask for. */
7
7
  function insertKind(resolved) {
8
8
  return resolved?.["kind"] ?? "rect";
@@ -87,6 +87,5 @@ function isCommittableExtent(bounds, kind) {
87
87
  return bounds.width !== 0 && bounds.height !== 0;
88
88
  }
89
89
 
90
- //#endregion
91
90
  export { insertKind, insertShape, isCommittableExtent };
92
91
  //# sourceMappingURL=shape.js.map
@@ -1,12 +1,12 @@
1
- import { applyOpsTo } from "../../../core/applyOps.js";
2
- import { reduceBehaviorEnd, runBehaviorCancel, runBehaviorSettled } from "../gestureLifecycle.js";
3
1
  import { gestureViewReader } from "../../gestures/shared/screenTolerance.js";
4
2
  import { pointerStateOf } from "../pointerState.js";
5
- import { selectionFromHits } from "../hitSelection.js";
3
+ import { applyOpsTo } from "../../../core/applyOps.js";
6
4
  import { LASSO_VERTICES } from "./behaviors/selectFromLasso.js";
5
+ import { reduceBehaviorEnd, runBehaviorCancel, runBehaviorSettled } from "../gestureLifecycle.js";
6
+ import { hitTargets, selectionFromHits } from "../hitSelection.js";
7
7
  import { resolveParams, setScratch } from "@weasel-js/routing";
8
8
 
9
- //#region src/interactions/actions/lasso-select/action.ts
9
+ // src/interactions/actions/lasso-select/action.ts
10
10
  /**
11
11
  * `lassoSelectAction` — ongoing Action descriptor for polygon lasso selection.
12
12
  *
@@ -43,11 +43,12 @@ function polygonAABB(pts) {
43
43
  };
44
44
  }
45
45
  /** The dep's polygon test, or its rect test over the polygon's AABB when it
46
- * has none. What both the default commit and a behavior's adapter ask. */
46
+ * has none, each hit taken at the depth a click selects. What both the
47
+ * default commit and a behavior's adapter ask. */
47
48
  function hitTestPolygon(dep, vertices, mode, view) {
48
- if (dep.hitTestLasso) return dep.hitTestLasso(vertices, mode, view);
49
+ if (dep.hitTestLasso) return hitTargets(dep.hitTestLasso(vertices, mode, view), dep.targetOf);
49
50
  const aabb = polygonAABB(vertices);
50
- return aabb ? dep.hitTestArea(aabb, view) : [];
51
+ return aabb ? hitTargets(dep.hitTestArea(aabb, view), dep.targetOf) : [];
51
52
  }
52
53
  /** The adapter a behavior sees: selection and hit-testing from the dep,
53
54
  * scoped to the view the lasso started in. */
@@ -55,7 +56,7 @@ function behaviorAdapter(dep, view) {
55
56
  const adapter = {
56
57
  getSelection: () => dep.getSelection(),
57
58
  setSelection: (ids) => dep.setSelection(ids),
58
- hitTestArea: (rect) => dep.hitTestArea(rect, view),
59
+ hitTestArea: (rect) => hitTargets(dep.hitTestArea(rect, view), dep.targetOf),
59
60
  hitTestLasso: (polygon, mode) => hitTestPolygon(dep, polygon, mode, view),
60
61
  applyOps: (ops) => applyOpsTo(adapter, ops)
61
62
  };
@@ -198,6 +199,5 @@ function endLasso(scratch, reason) {
198
199
  return true;
199
200
  }
200
201
 
201
- //#endregion
202
202
  export { lassoSelectAction };
203
203
  //# sourceMappingURL=action.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"action.js","names":[],"sources":["../../../../src/interactions/actions/lasso-select/action.ts"],"sourcesContent":["/**\n * `lassoSelectAction` — ongoing Action descriptor for polygon lasso selection.\n *\n * A move adds a vertex unless it is closer than the binding's\n * `params.minVertexSpacing` (default 2 world-px) to the last one. The commit\n * hit-tests the polygon with `dep.hitTestLasso(polygon, mode)` — `mode` from\n * the binding's `params.mode`, default `'intersect'` — falling back to the\n * polygon's AABB via `dep.hitTestArea(bounds)`. Shift extends the selection.\n * Always transient: no undo entry.\n *\n * `opts.behaviors` (`LassoSelectBehavior[]`) run over a `GestureContext`\n * whose `origin.get('gesture')` is the start pose, whose scratch holds the\n * vertices under `LASSO_VERTICES`, and whose adapter answers selection and\n * hit-testing from the `lassoSelect` dep. `onEnd` is first-non-undefined-wins:\n * `Op[]` is applied in place of the default selection, `null` aborts, and\n * all-`undefined` falls through to it. A behavior's ops are applied\n * transiently too.\n */\n\nimport { gestureViewReader } from '../../gestures/shared/screenTolerance';\nimport { resolveParams, setScratch, type Action } from '@weasel-js/routing';\nimport type { InvocationCtx, OngoingHandle, OngoingOverlay, Point2 } from '@weasel-js/routing';\nimport { pointerStateOf } from '../pointerState';\nimport type { LassoSelectDep, ViewApi } from '../depSchema';\nimport type { LassoHitMode, LassoSelectAdapter } from 'core/adapters/types';\nimport type { Op } from 'core/ops/types';\nimport { applyOpsTo } from 'core/applyOps';\nimport type { GestureContext, LassoSelectBehavior, LassoSelectPose } from '../../gestures/types';\nimport { LASSO_VERTICES } from './behaviors/selectFromLasso';\nimport { reduceBehaviorEnd, runBehaviorCancel, runBehaviorSettled } from '../gestureLifecycle';\nimport { selectionFromHits } from '../hitSelection';\n\n/** Compute AABB of a polygon (for fallback hit-test when hitTestLasso is absent). */\nfunction polygonAABB(\n pts: Point2[],\n): { x: number; y: number; width: number; height: number } | null {\n if (pts.length === 0) return null;\n let minX = pts[0].x, minY = pts[0].y, maxX = pts[0].x, maxY = pts[0].y;\n for (const p of pts) {\n if (p.x < minX) minX = p.x;\n if (p.y < minY) minY = p.y;\n if (p.x > maxX) maxX = p.x;\n if (p.y > maxY) maxY = p.y;\n }\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n\n/** The dep's polygon test, or its rect test over the polygon's AABB when it\n * has none. What both the default commit and a behavior's adapter ask. */\nfunction hitTestPolygon(\n dep: LassoSelectDep,\n vertices: ReadonlyArray<Point2>,\n mode: LassoHitMode,\n view: ViewApi | undefined,\n): string[] {\n if (dep.hitTestLasso) return dep.hitTestLasso(vertices, mode, view);\n const aabb = polygonAABB(vertices as Point2[]);\n return aabb ? dep.hitTestArea(aabb, view) : [];\n}\n\n/** The adapter a behavior sees: selection and hit-testing from the dep,\n * scoped to the view the lasso started in. */\nfunction behaviorAdapter(dep: LassoSelectDep, view: ViewApi | undefined): LassoSelectAdapter {\n const adapter: LassoSelectAdapter = {\n getSelection: () => dep.getSelection(),\n setSelection: (ids) => dep.setSelection(ids),\n hitTestArea: (rect) => dep.hitTestArea(rect, view),\n hitTestLasso: (polygon, mode) => hitTestPolygon(dep, polygon, mode, view),\n applyOps: (ops: Op[]) => applyOpsTo(adapter, ops),\n };\n return adapter;\n}\n\nconst DEFAULT_MIN_VERTEX_SPACING = 2; // world-px\n\ninterface LassoScratch {\n dep: LassoSelectDep;\n mode: LassoHitMode;\n minVertexSpacing: number;\n /** The view the lasso started in: what it does not paint is not taken. */\n view: ViewApi | undefined;\n vertices: Point2[];\n shiftHeld: boolean;\n /** Current pointer position — paint the live \"close-line\" from the last\n * vertex back to the start while the gesture is open. Tracked separately\n * from `vertices` because we throttle vertex insertion. */\n currentX: number;\n currentY: number;\n /** Cleared by `onEnd` so post-commit `overlay()` returns null. */\n open: boolean;\n behaviors: LassoSelectBehavior[];\n /** Built only when there are behaviors to hand it to. */\n gesture: GestureContext<LassoSelectPose> | null;\n}\n\n/**\n * Static descriptor for the `lassoSelect` Action.\n */\nexport const lassoSelectAction: Action & { requires: string[] } = {\n id: 'lassoSelect',\n label: 'Lasso Select',\n eligible: { capability: 'creates-selection' },\n requires: ['lassoSelect', 'view'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts): OngoingHandle {\n const dep = ctx.deps.lassoSelect;\n if (!dep) return {};\n\n const params = resolveParams(opts?.params) as\n { mode?: LassoHitMode; minVertexSpacing?: number } | undefined;\n const view = ctx.deps.view;\n const vertices: Point2[] = [{ x: ctx.world.x, y: ctx.world.y }];\n const behaviors = (opts?.behaviors ?? []) as LassoSelectBehavior[];\n let gesture: GestureContext<LassoSelectPose> | null = null;\n const readView = gestureViewReader(ctx.deps);\n if (behaviors.length > 0) {\n const pose: LassoSelectPose = {\n worldX: ctx.world.x, worldY: ctx.world.y, shiftHeld: ctx.modifiers.shift,\n };\n gesture = {\n draggedIds: ['gesture'],\n origin: new Map([['gesture', pose]]),\n current: new Map([['gesture', { ...pose }]]),\n snap: null,\n modifiers: { ...ctx.modifiers },\n pointer: pointerStateOf(ctx.world, ctx),\n view: readView(),\n adapter: behaviorAdapter(dep, view) as unknown as GestureContext<LassoSelectPose>['adapter'],\n scratch: {},\n };\n // The live array, so a behavior reads every vertex added since.\n setScratch(gesture.scratch, LASSO_VERTICES, vertices);\n for (const b of behaviors) b.onStart?.(gesture);\n }\n const scratch: LassoScratch = {\n dep,\n mode: params?.mode ?? 'intersect',\n minVertexSpacing: params?.minVertexSpacing ?? DEFAULT_MIN_VERTEX_SPACING,\n view,\n vertices,\n shiftHeld: ctx.modifiers.shift,\n currentX: ctx.world.x,\n currentY: ctx.world.y,\n open: true,\n behaviors,\n gesture,\n };\n\n return {\n kind: 'lasso',\n onMove(moveCtx: InvocationCtx): void {\n const { x, y } = moveCtx.world;\n scratch.currentX = x;\n scratch.currentY = y;\n const last = scratch.vertices[scratch.vertices.length - 1];\n const dx = x - last.x;\n const dy = y - last.y;\n const min = scratch.minVertexSpacing;\n if (dx * dx + dy * dy >= min * min) {\n scratch.vertices.push({ x, y });\n }\n const g = scratch.gesture;\n if (g) {\n g.modifiers = { ...moveCtx.modifiers };\n g.pointer = pointerStateOf(moveCtx.world, moveCtx);\n g.view = readView();\n g.current.set('gesture', { worldX: x, worldY: y, shiftHeld: scratch.shiftHeld });\n const proposed = { vertices: scratch.vertices, shiftHeld: scratch.shiftHeld };\n for (const b of scratch.behaviors) b.onMove?.(g, proposed);\n }\n },\n overlay(): OngoingOverlay | null {\n if (!scratch.open) return null;\n return {\n kind: 'lasso',\n vertices: scratch.vertices,\n current: { x: scratch.currentX, y: scratch.currentY },\n shiftHeld: scratch.shiftHeld,\n };\n },\n onEnd(_endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n let committed = false;\n try {\n committed = endLasso(scratch, reason);\n } finally {\n if (scratch.gesture) runBehaviorSettled(scratch.behaviors, scratch.gesture, committed);\n }\n },\n };\n },\n },\n enabled: () => true,\n};\n\n/** Close the lasso. Returns whether it committed: a behavior's ops were\n * applied, or the lasso set the selection. */\nfunction endLasso(scratch: LassoScratch, reason: 'commit' | 'cancel'): boolean {\n scratch.open = false;\n if (reason === 'cancel') {\n if (scratch.gesture) runBehaviorCancel(scratch.behaviors, scratch.gesture);\n return false;\n }\n\n const { dep: d, mode, view, vertices, shiftHeld, gesture: g } = scratch;\n\n if (g) {\n const r = reduceBehaviorEnd(scratch.behaviors, g);\n if (r !== undefined) {\n if (r !== null) (g.adapter as unknown as LassoSelectAdapter).applyOps!(r);\n return r !== null;\n }\n }\n\n // Need at least 3 vertices for a meaningful polygon; otherwise no-op.\n if (vertices.length < 3) {\n if (!shiftHeld) d.setSelection([]);\n return !shiftHeld;\n }\n\n const hits = hitTestPolygon(d, vertices, mode, view);\n\n d.setSelection(selectionFromHits(d.getSelection(), hits, shiftHeld));\n return true;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"action.js","names":[],"sources":["../../../../src/interactions/actions/lasso-select/action.ts"],"sourcesContent":["/**\n * `lassoSelectAction` — ongoing Action descriptor for polygon lasso selection.\n *\n * A move adds a vertex unless it is closer than the binding's\n * `params.minVertexSpacing` (default 2 world-px) to the last one. The commit\n * hit-tests the polygon with `dep.hitTestLasso(polygon, mode)` — `mode` from\n * the binding's `params.mode`, default `'intersect'` — falling back to the\n * polygon's AABB via `dep.hitTestArea(bounds)`. Shift extends the selection.\n * Always transient: no undo entry.\n *\n * `opts.behaviors` (`LassoSelectBehavior[]`) run over a `GestureContext`\n * whose `origin.get('gesture')` is the start pose, whose scratch holds the\n * vertices under `LASSO_VERTICES`, and whose adapter answers selection and\n * hit-testing from the `lassoSelect` dep. `onEnd` is first-non-undefined-wins:\n * `Op[]` is applied in place of the default selection, `null` aborts, and\n * all-`undefined` falls through to it. A behavior's ops are applied\n * transiently too.\n */\n\nimport { gestureViewReader } from '../../gestures/shared/screenTolerance';\nimport { resolveParams, setScratch, type Action } from '@weasel-js/routing';\nimport type { InvocationCtx, OngoingHandle, OngoingOverlay, Point2 } from '@weasel-js/routing';\nimport { pointerStateOf } from '../pointerState';\nimport type { LassoSelectDep, ViewApi } from '../depSchema';\nimport type { LassoHitMode, LassoSelectAdapter } from 'core/adapters/types';\nimport type { Op } from 'core/ops/types';\nimport { applyOpsTo } from 'core/applyOps';\nimport type { GestureContext, LassoSelectBehavior, LassoSelectPose } from '../../gestures/types';\nimport { LASSO_VERTICES } from './behaviors/selectFromLasso';\nimport { reduceBehaviorEnd, runBehaviorCancel, runBehaviorSettled } from '../gestureLifecycle';\nimport { hitTargets, selectionFromHits } from '../hitSelection';\n\n/** Compute AABB of a polygon (for fallback hit-test when hitTestLasso is absent). */\nfunction polygonAABB(\n pts: Point2[],\n): { x: number; y: number; width: number; height: number } | null {\n if (pts.length === 0) return null;\n let minX = pts[0].x, minY = pts[0].y, maxX = pts[0].x, maxY = pts[0].y;\n for (const p of pts) {\n if (p.x < minX) minX = p.x;\n if (p.y < minY) minY = p.y;\n if (p.x > maxX) maxX = p.x;\n if (p.y > maxY) maxY = p.y;\n }\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n\n/** The dep's polygon test, or its rect test over the polygon's AABB when it\n * has none, each hit taken at the depth a click selects. What both the\n * default commit and a behavior's adapter ask. */\nfunction hitTestPolygon(\n dep: LassoSelectDep,\n vertices: ReadonlyArray<Point2>,\n mode: LassoHitMode,\n view: ViewApi | undefined,\n): string[] {\n if (dep.hitTestLasso) return hitTargets(dep.hitTestLasso(vertices, mode, view), dep.targetOf);\n const aabb = polygonAABB(vertices as Point2[]);\n return aabb ? hitTargets(dep.hitTestArea(aabb, view), dep.targetOf) : [];\n}\n\n/** The adapter a behavior sees: selection and hit-testing from the dep,\n * scoped to the view the lasso started in. */\nfunction behaviorAdapter(dep: LassoSelectDep, view: ViewApi | undefined): LassoSelectAdapter {\n const adapter: LassoSelectAdapter = {\n getSelection: () => dep.getSelection(),\n setSelection: (ids) => dep.setSelection(ids),\n hitTestArea: (rect) => hitTargets(dep.hitTestArea(rect, view), dep.targetOf),\n hitTestLasso: (polygon, mode) => hitTestPolygon(dep, polygon, mode, view),\n applyOps: (ops: Op[]) => applyOpsTo(adapter, ops),\n };\n return adapter;\n}\n\nconst DEFAULT_MIN_VERTEX_SPACING = 2; // world-px\n\ninterface LassoScratch {\n dep: LassoSelectDep;\n mode: LassoHitMode;\n minVertexSpacing: number;\n /** The view the lasso started in: what it does not paint is not taken. */\n view: ViewApi | undefined;\n vertices: Point2[];\n shiftHeld: boolean;\n /** Current pointer position — paint the live \"close-line\" from the last\n * vertex back to the start while the gesture is open. Tracked separately\n * from `vertices` because we throttle vertex insertion. */\n currentX: number;\n currentY: number;\n /** Cleared by `onEnd` so post-commit `overlay()` returns null. */\n open: boolean;\n behaviors: LassoSelectBehavior[];\n /** Built only when there are behaviors to hand it to. */\n gesture: GestureContext<LassoSelectPose> | null;\n}\n\n/**\n * Static descriptor for the `lassoSelect` Action.\n */\nexport const lassoSelectAction: Action & { requires: string[] } = {\n id: 'lassoSelect',\n label: 'Lasso Select',\n eligible: { capability: 'creates-selection' },\n requires: ['lassoSelect', 'view'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts): OngoingHandle {\n const dep = ctx.deps.lassoSelect;\n if (!dep) return {};\n\n const params = resolveParams(opts?.params) as\n { mode?: LassoHitMode; minVertexSpacing?: number } | undefined;\n const view = ctx.deps.view;\n const vertices: Point2[] = [{ x: ctx.world.x, y: ctx.world.y }];\n const behaviors = (opts?.behaviors ?? []) as LassoSelectBehavior[];\n let gesture: GestureContext<LassoSelectPose> | null = null;\n const readView = gestureViewReader(ctx.deps);\n if (behaviors.length > 0) {\n const pose: LassoSelectPose = {\n worldX: ctx.world.x, worldY: ctx.world.y, shiftHeld: ctx.modifiers.shift,\n };\n gesture = {\n draggedIds: ['gesture'],\n origin: new Map([['gesture', pose]]),\n current: new Map([['gesture', { ...pose }]]),\n snap: null,\n modifiers: { ...ctx.modifiers },\n pointer: pointerStateOf(ctx.world, ctx),\n view: readView(),\n adapter: behaviorAdapter(dep, view) as unknown as GestureContext<LassoSelectPose>['adapter'],\n scratch: {},\n };\n // The live array, so a behavior reads every vertex added since.\n setScratch(gesture.scratch, LASSO_VERTICES, vertices);\n for (const b of behaviors) b.onStart?.(gesture);\n }\n const scratch: LassoScratch = {\n dep,\n mode: params?.mode ?? 'intersect',\n minVertexSpacing: params?.minVertexSpacing ?? DEFAULT_MIN_VERTEX_SPACING,\n view,\n vertices,\n shiftHeld: ctx.modifiers.shift,\n currentX: ctx.world.x,\n currentY: ctx.world.y,\n open: true,\n behaviors,\n gesture,\n };\n\n return {\n kind: 'lasso',\n onMove(moveCtx: InvocationCtx): void {\n const { x, y } = moveCtx.world;\n scratch.currentX = x;\n scratch.currentY = y;\n const last = scratch.vertices[scratch.vertices.length - 1];\n const dx = x - last.x;\n const dy = y - last.y;\n const min = scratch.minVertexSpacing;\n if (dx * dx + dy * dy >= min * min) {\n scratch.vertices.push({ x, y });\n }\n const g = scratch.gesture;\n if (g) {\n g.modifiers = { ...moveCtx.modifiers };\n g.pointer = pointerStateOf(moveCtx.world, moveCtx);\n g.view = readView();\n g.current.set('gesture', { worldX: x, worldY: y, shiftHeld: scratch.shiftHeld });\n const proposed = { vertices: scratch.vertices, shiftHeld: scratch.shiftHeld };\n for (const b of scratch.behaviors) b.onMove?.(g, proposed);\n }\n },\n overlay(): OngoingOverlay | null {\n if (!scratch.open) return null;\n return {\n kind: 'lasso',\n vertices: scratch.vertices,\n current: { x: scratch.currentX, y: scratch.currentY },\n shiftHeld: scratch.shiftHeld,\n };\n },\n onEnd(_endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n let committed = false;\n try {\n committed = endLasso(scratch, reason);\n } finally {\n if (scratch.gesture) runBehaviorSettled(scratch.behaviors, scratch.gesture, committed);\n }\n },\n };\n },\n },\n enabled: () => true,\n};\n\n/** Close the lasso. Returns whether it committed: a behavior's ops were\n * applied, or the lasso set the selection. */\nfunction endLasso(scratch: LassoScratch, reason: 'commit' | 'cancel'): boolean {\n scratch.open = false;\n if (reason === 'cancel') {\n if (scratch.gesture) runBehaviorCancel(scratch.behaviors, scratch.gesture);\n return false;\n }\n\n const { dep: d, mode, view, vertices, shiftHeld, gesture: g } = scratch;\n\n if (g) {\n const r = reduceBehaviorEnd(scratch.behaviors, g);\n if (r !== undefined) {\n if (r !== null) (g.adapter as unknown as LassoSelectAdapter).applyOps!(r);\n return r !== null;\n }\n }\n\n // Need at least 3 vertices for a meaningful polygon; otherwise no-op.\n if (vertices.length < 3) {\n if (!shiftHeld) d.setSelection([]);\n return !shiftHeld;\n }\n\n const hits = hitTestPolygon(d, vertices, mode, view);\n\n d.setSelection(selectionFromHits(d.getSelection(), hits, shiftHeld));\n return true;\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { selectionFromHits } from "../../hitSelection.js";
2
1
  import { createSetSelectionOp } from "../../../../core/ops/select.js";
2
+ import { selectionFromHits } from "../../hitSelection.js";
3
3
  import { getScratch, scratchKey } from "@weasel-js/routing";
4
4
 
5
- //#region src/interactions/actions/lasso-select/behaviors/selectFromLasso.ts
5
+ // src/interactions/actions/lasso-select/behaviors/selectFromLasso.ts
6
6
  /** Typed scratch slot the lasso tool's gesture writes into for this behavior
7
7
  * to consume. Shared identity: tools producing the polygon for a lasso
8
8
  * selection write under this same key. */
@@ -49,6 +49,5 @@ function polygonAabbArea(vertices) {
49
49
  return (maxX - minX) * (maxY - minY);
50
50
  }
51
51
 
52
- //#endregion
53
52
  export { LASSO_VERTICES, selectFromLasso };
54
53
  //# sourceMappingURL=selectFromLasso.js.map
@@ -0,0 +1,37 @@
1
+ import { sceneDeclaredScopes } from "../../core/scene/unitScopes.js";
2
+ import { sceneBoxFrames } from "./poseFrame.js";
3
+ import { magnificationOf } from "@weasel-js/quantity";
4
+
5
+ // src/interactions/actions/magnification.ts
6
+ var differs = (a, b, tolerance) => Math.abs(a / b - 1) > tolerance;
7
+ /**
8
+ * Every container in `scene` whose children are drawn magnified, by a scale
9
+ * `transform` on it or above it, by more or less than the `drawnAt` of the unit
10
+ * scopes it sits in and declares. Only containers under some declared scope
11
+ * are read: a scene stating no units says nothing about what size it draws at.
12
+ */
13
+ function undeclaredMagnifications(scene, tolerance = 1e-6) {
14
+ const frames = sceneBoxFrames(scene);
15
+ const out = [];
16
+ for (const id of scene.nodes.keys()) {
17
+ if (scene.childrenOf(id).length === 0) continue;
18
+ const scopes = sceneDeclaredScopes(scene, id, { inclusive: true });
19
+ if (scopes.length === 0) continue;
20
+ const f = frames(id);
21
+ if (f === null) continue;
22
+ const drawn = {
23
+ x: Math.hypot(f[0], f[1]),
24
+ y: Math.hypot(f[2], f[3])
25
+ };
26
+ const declared = magnificationOf(scopes);
27
+ if (differs(drawn.x, declared, tolerance) || differs(drawn.y, declared, tolerance)) out.push({
28
+ id,
29
+ drawn,
30
+ declared
31
+ });
32
+ }
33
+ return out;
34
+ }
35
+
36
+ export { undeclaredMagnifications };
37
+ //# sourceMappingURL=magnification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magnification.js","names":[],"sources":["../../../src/interactions/actions/magnification.ts"],"sourcesContent":["import { magnificationOf } from '@weasel-js/quantity';\nimport { sceneDeclaredScopes } from 'core/scene/unitScopes';\nimport type { NodeId, Scene } from 'core/scene/types';\nimport { sceneBoxFrames } from './poseFrame';\n\n/** A container whose children are drawn at a size its unit scopes do not declare. */\nexport interface UndeclaredMagnification {\n id: NodeId;\n /** How large its children's frame is drawn in world, on each of its axes. */\n drawn: { x: number; y: number };\n /** The magnification its scope chain declares: every `drawnAt`, multiplied. */\n declared: number;\n}\n\nconst differs = (a: number, b: number, tolerance: number): boolean => Math.abs(a / b - 1) > tolerance;\n\n/**\n * Every container in `scene` whose children are drawn magnified, by a scale\n * `transform` on it or above it, by more or less than the `drawnAt` of the unit\n * scopes it sits in and declares. Only containers under some declared scope\n * are read: a scene stating no units says nothing about what size it draws at.\n */\nexport function undeclaredMagnifications(\n scene: Scene<unknown, string, unknown>,\n tolerance = 1e-6,\n): UndeclaredMagnification[] {\n const frames = sceneBoxFrames(scene);\n const out: UndeclaredMagnification[] = [];\n for (const id of scene.nodes.keys()) {\n if (scene.childrenOf(id).length === 0) continue;\n const scopes = sceneDeclaredScopes(scene, id, { inclusive: true });\n if (scopes.length === 0) continue;\n const f = frames(id);\n if (f === null) continue;\n const drawn = { x: Math.hypot(f[0], f[1]), y: Math.hypot(f[2], f[3]) };\n const declared = magnificationOf(scopes);\n if (differs(drawn.x, declared, tolerance) || differs(drawn.y, declared, tolerance)) out.push({ id, drawn, declared });\n }\n return out;\n}\n"],"mappings":";;;;;AAcA,IAAM,WAAW,GAAW,GAAW,cAA+B,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI;;;;;;;AAQ5F,SAAgB,yBACd,OACA,YAAY,MACe;CAC3B,MAAM,SAAS,eAAe,KAAK;CACnC,MAAM,MAAiC,CAAC;CACxC,KAAK,MAAM,MAAM,MAAM,MAAM,KAAK,GAAG;EACnC,IAAI,MAAM,WAAW,EAAE,CAAC,CAAC,WAAW,GAAG;EACvC,MAAM,SAAS,oBAAoB,OAAO,IAAI,EAAE,WAAW,KAAK,CAAC;EACjE,IAAI,OAAO,WAAW,GAAG;EACzB,MAAM,IAAI,OAAO,EAAE;EACnB,IAAI,MAAM,MAAM;EAChB,MAAM,QAAQ;GAAE,GAAG,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE;GAAG,GAAG,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE;EAAE;EACrE,MAAM,WAAW,gBAAgB,MAAM;EACvC,IAAI,QAAQ,MAAM,GAAG,UAAU,SAAS,KAAK,QAAQ,MAAM,GAAG,UAAU,SAAS,GAAG,IAAI,KAAK;GAAE;GAAI;GAAO;EAAS,CAAC;CACtH;CACA,OAAO;AACT"}