@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,20 +1,20 @@
1
- import { documentPose, effectivePose } from "../core/scene/effectivePose.js";
2
1
  import { RECT_POSE_DESCRIPTOR } from "../core/geometry/poseDescriptor.js";
2
+ import { documentPose, effectivePose } from "../core/scene/effectivePose.js";
3
3
  import { liveAxes } from "./poseTarget.js";
4
4
  import { useEffect, useMemo } from "react";
5
5
  import { useLatest } from "@weasel-js/react";
6
6
  import { createTarget } from "@weasel-js/animator";
7
7
 
8
- //#region src/animation/reflow.ts
8
+ // src/animation/reflow.ts
9
9
  /** The animator's cancel-key for one node's glide. */
10
10
  var keyFor = (id) => `reflow:${id}`;
11
- function samePose(a, b) {
11
+ function samePoseDeep(a, b) {
12
12
  if (Object.is(a, b)) return true;
13
13
  if (typeof a !== "object" || typeof b !== "object" || a === null || b === null) return false;
14
14
  if (Array.isArray(a) !== Array.isArray(b)) return false;
15
15
  const ka = Object.keys(a);
16
16
  if (ka.length !== Object.keys(b).length) return false;
17
- for (const k of ka) if (!samePose(a[k], b[k])) return false;
17
+ for (const k of ka) if (!samePoseDeep(a[k], b[k])) return false;
18
18
  return true;
19
19
  }
20
20
  function makeReflow(scene, animator, read) {
@@ -55,7 +55,7 @@ function makeGlides(scene, animator, read) {
55
55
  const run = (id, g, to, settling) => {
56
56
  const from = g.entry.pose;
57
57
  g.settling = settling;
58
- if (samePose(from, to)) {
58
+ if (samePoseDeep(from, to)) {
59
59
  animator.cancelKey(keyFor(id));
60
60
  g.slot = to;
61
61
  g.entry.pose = to;
@@ -64,7 +64,7 @@ function makeGlides(scene, animator, read) {
64
64
  unsubscribeIfIdle();
65
65
  return;
66
66
  }
67
- if (g.target?.active && samePose(g.slot, to)) return;
67
+ if (g.target?.active && samePoseDeep(g.slot, to)) return;
68
68
  const o = read();
69
69
  const lerp = o.geometry?.lerp;
70
70
  const onDone = () => {
@@ -124,7 +124,7 @@ function makeGlides(scene, animator, read) {
124
124
  }
125
125
  scene.overrides.commit();
126
126
  };
127
- const onCourse = (id, g) => animator.isActive(keyFor(id)) || samePose(g.entry.pose, g.slot);
127
+ const onCourse = (id, g) => animator.isActive(keyFor(id)) || samePoseDeep(g.entry.pose, g.slot);
128
128
  const stop = (id) => {
129
129
  const g = glides.get(id);
130
130
  if (!g) return;
@@ -173,7 +173,7 @@ function makeGlides(scene, animator, read) {
173
173
  if (!node) return;
174
174
  const from = opts?.from;
175
175
  const g = glides.get(id);
176
- if (g && from === void 0 && !g.settling && samePose(g.slot, pose) && onCourse(id, g)) return;
176
+ if (g && from === void 0 && !g.settling && samePoseDeep(g.slot, pose) && onCourse(id, g)) return;
177
177
  run(id, claim(id, node, g, from), pose, false);
178
178
  },
179
179
  settle(id, opts) {
@@ -187,7 +187,7 @@ function makeGlides(scene, animator, read) {
187
187
  }
188
188
  const home = documentPose(scene, node);
189
189
  if (g && from === void 0) {
190
- if (g.settling && samePose(g.slot, home) && onCourse(id, g)) return;
190
+ if (g.settling && samePoseDeep(g.slot, home) && onCourse(id, g)) return;
191
191
  run(id, g, home, true);
192
192
  return;
193
193
  }
@@ -231,6 +231,5 @@ function useAnimatedReflow(scene, animator, opts) {
231
231
  return reflow;
232
232
  }
233
233
 
234
- //#endregion
235
234
  export { createReflowTransition, useAnimatedReflow };
236
235
  //# sourceMappingURL=reflow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reflow.js","names":[],"sources":["../../src/animation/reflow.ts"],"sourcesContent":["import { useEffect, useMemo } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { RECT_POSE_DESCRIPTOR, type PoseDescriptor } from '../core/geometry/poseDescriptor';\nimport { documentPose, effectivePose, type PosedNode, type PoseSource } from '../core/scene/effectivePose';\nimport type { NodeId, PoseOverride, PoseOverrides } from '../core/scene/types';\nimport type { ReflowTransition } from '../layout/types';\nimport { liveAxes } from './poseTarget';\nimport { createTarget, type Target } from '@weasel-js/animator';\nimport type { Animator, EasingSpec, SpringPresetName } from '@weasel-js/animator';\n\n/** How a reflowed sibling travels: a duration and easing, or a spring. */\nexport interface ReflowTransitionOptions<TPose> {\n /** Default 200. Ignored under `spring`. */\n ms?: number;\n easing?: EasingSpec;\n /** Travel on a spring instead of a duration. A retarget starts a new spring\n * from the pose on screen at the speed the node was moving. */\n spring?: {\n preset?: SpringPresetName;\n stiffness?: number;\n damping?: number;\n mass?: number;\n };\n /** Supplies the pose's axes, and its `lerp` is the path a timed glide\n * follows. Default `RECT_POSE_DESCRIPTOR`, each axis in a straight line.\n * A pose with no axes glides by `lerp` alone, and a retarget restarts it. */\n geometry?: PoseDescriptor<TPose>;\n /** Names each glide in `animator.watch` and `live()`. Default `'reflow'`. */\n label?: string;\n}\n\n/** A {@link ReflowTransition} the animator drives. `dispose` drops every\n * override it holds; the transition stays usable afterward. */\nexport interface AnimatedReflow<TPose = unknown> extends ReflowTransition<TPose> {\n dispose(): void;\n /** The same transition over another scene: its animator, timing and label,\n * for poses `geometry` describes given this one's descriptor. Option\n * changes reach it as they reach this one. */\n over<TOther>(\n scene: ReflowScene<TOther>,\n geometry: (mine: PoseDescriptor<TPose>) => PoseDescriptor<TOther>,\n ): AnimatedReflow<TOther>;\n}\n\n/** The part of a scene a reflow transition reads and overrides. */\nexport interface ReflowScene<TPose> extends PoseSource<TPose> {\n readonly overrides: PoseOverrides<TPose>;\n}\n\ninterface Glide<TPose> {\n entry: PoseOverride<TPose>;\n /** Where the layout wants the node shown: what its target commits. */\n slot: TPose;\n settling: boolean;\n /** Null for a pose with no axes, which glides by `lerp`. */\n target: Target<TPose> | null;\n}\n\n/** The animator's cancel-key for one node's glide. */\nconst keyFor = (id: string): string => `reflow:${id}`;\n\nfunction samePose(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) return false;\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n const ka = Object.keys(a);\n if (ka.length !== Object.keys(b).length) return false;\n for (const k of ka) {\n if (!samePose((a as Record<string, unknown>)[k], (b as Record<string, unknown>)[k])) return false;\n }\n return true;\n}\n\nfunction makeReflow<TPose>(\n scene: ReflowScene<TPose>,\n animator: Animator,\n read: () => ReflowTransitionOptions<TPose>,\n): AnimatedReflow<TPose> {\n return {\n ...makeGlides(scene, animator, read),\n over: (other, geometry) => makeReflow(other, animator, () => {\n const { geometry: own, ...timing } = read();\n return { ...timing, geometry: geometry(own ?? (RECT_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>)) };\n }),\n };\n}\n\nfunction makeGlides<TPose>(\n scene: ReflowScene<TPose>,\n animator: Animator,\n read: () => ReflowTransitionOptions<TPose>,\n): Omit<AnimatedReflow<TPose>, 'over'> {\n const glides = new Map<string, Glide<TPose>>();\n let dirty = false;\n let unsubscribe: (() => void) | null = null;\n\n // Ticks only mark the frame dirty; one commit per animator frame publishes\n // every glide at once.\n const subscribe = (): void => {\n if (unsubscribe) return;\n unsubscribe = animator.onTick(() => {\n if (!dirty) return;\n dirty = false;\n scene.overrides.commit();\n });\n };\n const unsubscribeIfIdle = (): void => {\n if (glides.size > 0 || !unsubscribe) return;\n unsubscribe();\n unsubscribe = null;\n };\n\n const release = (id: string, g: Glide<TPose>): void => {\n if (glides.get(id) === g) glides.delete(id);\n const nid = id as NodeId;\n scene.overrides.clear(nid, g.entry);\n dirty = true;\n };\n\n const run = (id: string, g: Glide<TPose>, to: TPose, settling: boolean): void => {\n const from = g.entry.pose as TPose;\n g.settling = settling;\n if (samePose(from, to)) {\n animator.cancelKey(keyFor(id));\n g.slot = to;\n g.entry.pose = to;\n if (settling) release(id, g);\n scene.overrides.commit();\n unsubscribeIfIdle();\n return;\n }\n // Already on its way there: whatever is moving it finishes the job.\n if (g.target?.active && samePose(g.slot, to)) return;\n const o = read();\n const lerp = o.geometry?.lerp;\n const onDone = (): void => {\n if (g.target?.active || !g.settling) return;\n release(id, g);\n unsubscribeIfIdle();\n };\n const cancelKey = keyFor(id);\n const label = o.label ?? 'reflow';\n subscribe();\n if (g.target) {\n // A spring interrupts what is moving the node and takes its velocity; a timed glide adds to it.\n if (o.spring) animator.spring<TPose>({ target: g.target, to, ...o.spring, cancelKey, label, onDone });\n else {\n animator.tween<TPose>({\n target: g.target, to, ms: o.ms ?? 200, easing: o.easing, cancelKey, interrupt: false, label, onDone,\n interpolate: lerp && ((a, b, t) => lerp(a, b, t)),\n });\n }\n } else {\n if (!lerp) throw new Error('useAnimatedReflow: this pose has no axes; supply geometry: { ..., lerp }');\n g.slot = to;\n const onTick = (p: number): void => {\n g.entry.pose = lerp(from, to, p);\n dirty = true;\n };\n // The shared key is what retargets: the new animation interrupts the old.\n if (o.spring) animator.spring<number>({ from: 0, to: 1, ...o.spring, cancelKey, label, onTick, onDone });\n else animator.tween<number>({ from: 0, to: 1, ms: o.ms ?? 200, easing: o.easing, cancelKey, label, onTick, onDone });\n }\n scene.overrides.commit();\n };\n\n // False for a glide canceled through the animator: it stopped short of its\n // slot and nothing is carrying it there.\n const onCourse = (id: string, g: Glide<TPose>): boolean =>\n animator.isActive(keyFor(id)) || samePose(g.entry.pose, g.slot);\n\n const stop = (id: string): void => {\n const g = glides.get(id);\n if (!g) return;\n glides.delete(id);\n animator.cancelKey(keyFor(id));\n const nid = id as NodeId;\n scene.overrides.clear(nid, g.entry);\n unsubscribeIfIdle();\n };\n\n const start = (id: string, pose: TPose): Glide<TPose> => {\n const g: Glide<TPose> = { entry: { pose }, slot: pose, settling: false, target: null };\n const descriptor = read().geometry ?? (RECT_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>);\n const axes = liveAxes(descriptor, () => g.slot);\n if (axes) {\n g.target = createTarget<TPose>({\n axes,\n get: () => g.slot,\n set: (slot) => { g.slot = slot; },\n show: (shown) => {\n g.entry.pose = shown;\n dirty = true;\n },\n });\n }\n glides.set(id, g);\n return g;\n };\n\n // The glide for `id`, created if absent, starting from `from` when given,\n // and installed as a ply if it is not one: its place among other writers' is left alone.\n const claim = (\n id: string,\n node: PosedNode<TPose>,\n g: Glide<TPose> | undefined,\n from: TPose | undefined,\n ): Glide<TPose> => {\n if (!g) {\n g = start(id, from ?? effectivePose(scene, node));\n } else if (from !== undefined) {\n animator.cancelKey(keyFor(id));\n g.slot = from;\n g.entry.pose = from;\n }\n if (!scene.overrides.has(id as NodeId, g.entry)) scene.overrides.set(id as NodeId, g.entry);\n return g;\n };\n\n return {\n glide(id, pose, opts) {\n const node = scene.get(id as NodeId);\n if (!node) return;\n const from = opts?.from;\n const g = glides.get(id);\n if (g && from === undefined && !g.settling && samePose(g.slot, pose) && onCourse(id, g)) return;\n run(id, claim(id, node, g, from), pose, false);\n },\n settle(id, opts) {\n const from = opts?.from;\n const g = glides.get(id);\n if (!g && from === undefined) return;\n const node = scene.get(id as NodeId);\n if (!node) { stop(id); return; }\n const home = documentPose(scene, node);\n if (g && from === undefined) {\n if (g.settling && samePose(g.slot, home) && onCourse(id, g)) return;\n run(id, g, home, true);\n return;\n }\n run(id, claim(id, node, g, from), home, true);\n },\n stop,\n poseOf: (id) => glides.get(id)?.entry.pose,\n dispose() {\n for (const id of [...glides.keys()]) stop(id);\n },\n };\n}\n\n/**\n * A reflow transition over `animator`. Each node it moves has an animation\n * target whose committed value is the slot the layout wants it shown at, and\n * a new slot is a new animation on that target under the key `reflow:<id>`:\n * a timed glide adds to the ones still running, a spring interrupts them at\n * their velocity, and `animator.cancelKey` reaches one node's. See\n * {@link useAnimatedReflow} for the hook form.\n */\nexport function createReflowTransition<TPose>(\n scene: ReflowScene<TPose>,\n animator: Animator,\n opts: ReflowTransitionOptions<TPose> = {},\n): AnimatedReflow<TPose> {\n return makeReflow(scene, animator, () => opts);\n}\n\n/**\n * Opt a canvas's layout reflow into animation: pass the result to\n * `<SceneCanvas reflowTransition>` and siblings a drag displaces glide to\n * their slots instead of snapping. `null` (or `false`) turns it off, and\n * whatever it was holding snaps home. Option changes apply from the next\n * glide on, without rebuilding.\n */\nexport function useAnimatedReflow<TPose>(\n scene: ReflowScene<TPose>,\n animator: Animator,\n opts: ReflowTransitionOptions<TPose> | null | false | undefined,\n): AnimatedReflow<TPose> | null {\n const latest = useLatest(opts || {});\n const enabled = !!opts;\n const reflow = useMemo(\n () => (enabled ? makeReflow(scene, animator, () => latest.current) : null),\n [enabled, scene, animator, latest],\n );\n useEffect(() => () => reflow?.dispose(), [reflow]);\n return reflow;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"reflow.js","names":[],"sources":["../../src/animation/reflow.ts"],"sourcesContent":["import { useEffect, useMemo } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { RECT_POSE_DESCRIPTOR, type PoseDescriptor } from '../core/geometry/poseDescriptor';\nimport { documentPose, effectivePose, type PosedNode, type PoseSource } from '../core/scene/effectivePose';\nimport type { NodeId, PoseOverride, PoseOverrides } from '../core/scene/types';\nimport type { ReflowTransition } from '../layout/types';\nimport { liveAxes } from './poseTarget';\nimport { createTarget, type Target } from '@weasel-js/animator';\nimport type { Animator, EasingSpec, SpringPresetName } from '@weasel-js/animator';\n\n/** How a reflowed sibling travels: a duration and easing, or a spring. */\nexport interface ReflowTransitionOptions<TPose> {\n /** Default 200. Ignored under `spring`. */\n ms?: number;\n easing?: EasingSpec;\n /** Travel on a spring instead of a duration. A retarget starts a new spring\n * from the pose on screen at the speed the node was moving. */\n spring?: {\n preset?: SpringPresetName;\n stiffness?: number;\n damping?: number;\n mass?: number;\n };\n /** Supplies the pose's axes, and its `lerp` is the path a timed glide\n * follows. Default `RECT_POSE_DESCRIPTOR`, each axis in a straight line.\n * A pose with no axes glides by `lerp` alone, and a retarget restarts it. */\n geometry?: PoseDescriptor<TPose>;\n /** Names each glide in `animator.watch` and `live()`. Default `'reflow'`. */\n label?: string;\n}\n\n/** A {@link ReflowTransition} the animator drives. `dispose` drops every\n * override it holds; the transition stays usable afterward. */\nexport interface AnimatedReflow<TPose = unknown> extends ReflowTransition<TPose> {\n dispose(): void;\n /** The same transition over another scene: its animator, timing and label,\n * for poses `geometry` describes given this one's descriptor. Option\n * changes reach it as they reach this one. */\n over<TOther>(\n scene: ReflowScene<TOther>,\n geometry: (mine: PoseDescriptor<TPose>) => PoseDescriptor<TOther>,\n ): AnimatedReflow<TOther>;\n}\n\n/** The part of a scene a reflow transition reads and overrides. */\nexport interface ReflowScene<TPose> extends PoseSource<TPose> {\n readonly overrides: PoseOverrides<TPose>;\n}\n\ninterface Glide<TPose> {\n entry: PoseOverride<TPose>;\n /** Where the layout wants the node shown: what its target commits. */\n slot: TPose;\n settling: boolean;\n /** Null for a pose with no axes, which glides by `lerp`. */\n target: Target<TPose> | null;\n}\n\n/** The animator's cancel-key for one node's glide. */\nconst keyFor = (id: string): string => `reflow:${id}`;\n\nfunction samePoseDeep(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) return true;\n if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) return false;\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n const ka = Object.keys(a);\n if (ka.length !== Object.keys(b).length) return false;\n for (const k of ka) {\n if (!samePoseDeep((a as Record<string, unknown>)[k], (b as Record<string, unknown>)[k])) return false;\n }\n return true;\n}\n\nfunction makeReflow<TPose>(\n scene: ReflowScene<TPose>,\n animator: Animator,\n read: () => ReflowTransitionOptions<TPose>,\n): AnimatedReflow<TPose> {\n return {\n ...makeGlides(scene, animator, read),\n over: (other, geometry) => makeReflow(other, animator, () => {\n const { geometry: own, ...timing } = read();\n return { ...timing, geometry: geometry(own ?? (RECT_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>)) };\n }),\n };\n}\n\nfunction makeGlides<TPose>(\n scene: ReflowScene<TPose>,\n animator: Animator,\n read: () => ReflowTransitionOptions<TPose>,\n): Omit<AnimatedReflow<TPose>, 'over'> {\n const glides = new Map<string, Glide<TPose>>();\n let dirty = false;\n let unsubscribe: (() => void) | null = null;\n\n // Ticks only mark the frame dirty; one commit per animator frame publishes\n // every glide at once.\n const subscribe = (): void => {\n if (unsubscribe) return;\n unsubscribe = animator.onTick(() => {\n if (!dirty) return;\n dirty = false;\n scene.overrides.commit();\n });\n };\n const unsubscribeIfIdle = (): void => {\n if (glides.size > 0 || !unsubscribe) return;\n unsubscribe();\n unsubscribe = null;\n };\n\n const release = (id: string, g: Glide<TPose>): void => {\n if (glides.get(id) === g) glides.delete(id);\n const nid = id as NodeId;\n scene.overrides.clear(nid, g.entry);\n dirty = true;\n };\n\n const run = (id: string, g: Glide<TPose>, to: TPose, settling: boolean): void => {\n const from = g.entry.pose as TPose;\n g.settling = settling;\n if (samePoseDeep(from, to)) {\n animator.cancelKey(keyFor(id));\n g.slot = to;\n g.entry.pose = to;\n if (settling) release(id, g);\n scene.overrides.commit();\n unsubscribeIfIdle();\n return;\n }\n // Already on its way there: whatever is moving it finishes the job.\n if (g.target?.active && samePoseDeep(g.slot, to)) return;\n const o = read();\n const lerp = o.geometry?.lerp;\n const onDone = (): void => {\n if (g.target?.active || !g.settling) return;\n release(id, g);\n unsubscribeIfIdle();\n };\n const cancelKey = keyFor(id);\n const label = o.label ?? 'reflow';\n subscribe();\n if (g.target) {\n // A spring interrupts what is moving the node and takes its velocity; a timed glide adds to it.\n if (o.spring) animator.spring<TPose>({ target: g.target, to, ...o.spring, cancelKey, label, onDone });\n else {\n animator.tween<TPose>({\n target: g.target, to, ms: o.ms ?? 200, easing: o.easing, cancelKey, interrupt: false, label, onDone,\n interpolate: lerp && ((a, b, t) => lerp(a, b, t)),\n });\n }\n } else {\n if (!lerp) throw new Error('useAnimatedReflow: this pose has no axes; supply geometry: { ..., lerp }');\n g.slot = to;\n const onTick = (p: number): void => {\n g.entry.pose = lerp(from, to, p);\n dirty = true;\n };\n // The shared key is what retargets: the new animation interrupts the old.\n if (o.spring) animator.spring<number>({ from: 0, to: 1, ...o.spring, cancelKey, label, onTick, onDone });\n else animator.tween<number>({ from: 0, to: 1, ms: o.ms ?? 200, easing: o.easing, cancelKey, label, onTick, onDone });\n }\n scene.overrides.commit();\n };\n\n // False for a glide canceled through the animator: it stopped short of its\n // slot and nothing is carrying it there.\n const onCourse = (id: string, g: Glide<TPose>): boolean =>\n animator.isActive(keyFor(id)) || samePoseDeep(g.entry.pose, g.slot);\n\n const stop = (id: string): void => {\n const g = glides.get(id);\n if (!g) return;\n glides.delete(id);\n animator.cancelKey(keyFor(id));\n const nid = id as NodeId;\n scene.overrides.clear(nid, g.entry);\n unsubscribeIfIdle();\n };\n\n const start = (id: string, pose: TPose): Glide<TPose> => {\n const g: Glide<TPose> = { entry: { pose }, slot: pose, settling: false, target: null };\n const descriptor = read().geometry ?? (RECT_POSE_DESCRIPTOR as unknown as PoseDescriptor<TPose>);\n const axes = liveAxes(descriptor, () => g.slot);\n if (axes) {\n g.target = createTarget<TPose>({\n axes,\n get: () => g.slot,\n set: (slot) => { g.slot = slot; },\n show: (shown) => {\n g.entry.pose = shown;\n dirty = true;\n },\n });\n }\n glides.set(id, g);\n return g;\n };\n\n // The glide for `id`, created if absent, starting from `from` when given,\n // and installed as a ply if it is not one: its place among other writers' is left alone.\n const claim = (\n id: string,\n node: PosedNode<TPose>,\n g: Glide<TPose> | undefined,\n from: TPose | undefined,\n ): Glide<TPose> => {\n if (!g) {\n g = start(id, from ?? effectivePose(scene, node));\n } else if (from !== undefined) {\n animator.cancelKey(keyFor(id));\n g.slot = from;\n g.entry.pose = from;\n }\n if (!scene.overrides.has(id as NodeId, g.entry)) scene.overrides.set(id as NodeId, g.entry);\n return g;\n };\n\n return {\n glide(id, pose, opts) {\n const node = scene.get(id as NodeId);\n if (!node) return;\n const from = opts?.from;\n const g = glides.get(id);\n if (g && from === undefined && !g.settling && samePoseDeep(g.slot, pose) && onCourse(id, g)) return;\n run(id, claim(id, node, g, from), pose, false);\n },\n settle(id, opts) {\n const from = opts?.from;\n const g = glides.get(id);\n if (!g && from === undefined) return;\n const node = scene.get(id as NodeId);\n if (!node) { stop(id); return; }\n const home = documentPose(scene, node);\n if (g && from === undefined) {\n if (g.settling && samePoseDeep(g.slot, home) && onCourse(id, g)) return;\n run(id, g, home, true);\n return;\n }\n run(id, claim(id, node, g, from), home, true);\n },\n stop,\n poseOf: (id) => glides.get(id)?.entry.pose,\n dispose() {\n for (const id of [...glides.keys()]) stop(id);\n },\n };\n}\n\n/**\n * A reflow transition over `animator`. Each node it moves has an animation\n * target whose committed value is the slot the layout wants it shown at, and\n * a new slot is a new animation on that target under the key `reflow:<id>`:\n * a timed glide adds to the ones still running, a spring interrupts them at\n * their velocity, and `animator.cancelKey` reaches one node's. See\n * {@link useAnimatedReflow} for the hook form.\n */\nexport function createReflowTransition<TPose>(\n scene: ReflowScene<TPose>,\n animator: Animator,\n opts: ReflowTransitionOptions<TPose> = {},\n): AnimatedReflow<TPose> {\n return makeReflow(scene, animator, () => opts);\n}\n\n/**\n * Opt a canvas's layout reflow into animation: pass the result to\n * `<SceneCanvas reflowTransition>` and siblings a drag displaces glide to\n * their slots instead of snapping. `null` (or `false`) turns it off, and\n * whatever it was holding snaps home. Option changes apply from the next\n * glide on, without rebuilding.\n */\nexport function useAnimatedReflow<TPose>(\n scene: ReflowScene<TPose>,\n animator: Animator,\n opts: ReflowTransitionOptions<TPose> | null | false | undefined,\n): AnimatedReflow<TPose> | null {\n const latest = useLatest(opts || {});\n const enabled = !!opts;\n const reflow = useMemo(\n () => (enabled ? makeReflow(scene, animator, () => latest.current) : null),\n [enabled, scene, animator, latest],\n );\n useEffect(() => () => reflow?.dispose(), [reflow]);\n return reflow;\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { easeOut, resolveEasing } from "@weasel-js/geom";
2
2
 
3
- //#region src/animation/rewind.ts
3
+ // src/animation/rewind.ts
4
4
  /** A handle that answers for whichever leg of a move is running. */
5
5
  function following(current) {
6
6
  return {
@@ -92,6 +92,5 @@ function rewindingSpring(animator, target, o) {
92
92
  return following(() => current);
93
93
  }
94
94
 
95
- //#endregion
96
95
  export { rewindingSpring, rewindingTween };
97
96
  //# sourceMappingURL=rewind.js.map
@@ -1,10 +1,10 @@
1
1
  import { AUTO_POSE_DESCRIPTOR } from "../../core/geometry/autoPoseDescriptor.js";
2
- import { bindSkins, dataRestPath } from "./skinBinding.js";
3
2
  import { createRigSeat } from "./rigSeat.js";
3
+ import { bindSkins, dataRestPath } from "./skinBinding.js";
4
4
  import { mat3 } from "@weasel-js/geom";
5
5
  import { resolveSkeleton } from "@weasel-js/animator";
6
6
 
7
- //#region src/animation/rig/bindRig.ts
7
+ // src/animation/rig/bindRig.ts
8
8
  /**
9
9
  * Carries a node rigidly with its joint: the rest pose's center moves by
10
10
  * `fromRest`, and its rotation turns with the rest pose's x-axis. Scale in the
@@ -154,6 +154,5 @@ function bindRigOn(options, seat) {
154
154
  };
155
155
  }
156
156
 
157
- //#endregion
158
157
  export { bindRig, bindRigOn, rigidRigApply };
159
158
  //# sourceMappingURL=bindRig.js.map
@@ -1,11 +1,11 @@
1
1
  import { AUTO_POSE_DESCRIPTOR } from "../../core/geometry/autoPoseDescriptor.js";
2
2
  import { createRigSeat } from "./rigSeat.js";
3
3
  import { useSeatedRig } from "./useRig.js";
4
- import { poseFrameInverseOf, poseFrameOf } from "@weasel-js/geom";
4
+ import { applyToPoint, poseFrameInverseOf, poseFrameOf } from "@weasel-js/geom";
5
5
  import { useMemo, useState, useSyncExternalStore } from "react";
6
6
 
7
- //#region src/animation/rig/rigNode.ts
8
- var through = (m, x, y) => m ? [m[0] * x + m[2] * y + m[4], m[1] * x + m[3] * y + m[5]] : [x, y];
7
+ // src/animation/rig/rigNode.ts
8
+ var through = (m, x, y) => m ? applyToPoint(m, x, y) : [x, y];
9
9
  /**
10
10
  * A skeleton as a rig node's data keeps it, moved to where the node's pose puts it: its root
11
11
  * joints are offset from the pose box's top-left corner and turned as the node is. Joints
@@ -139,6 +139,5 @@ function useRigNode(options) {
139
139
  }, seat);
140
140
  }
141
141
 
142
- //#endregion
143
142
  export { placeSkeleton, rigFromNode, unplaceSkeleton, useRigNode };
144
143
  //# sourceMappingURL=rigNode.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rigNode.js","names":[],"sources":["../../../src/animation/rig/rigNode.ts"],"sourcesContent":["import { useMemo, useState, useSyncExternalStore } from 'react';\nimport { poseFrameInverseOf, poseFrameOf } from '@weasel-js/geom';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\nimport type { PoseDescriptor } from '../../core/geometry/poseDescriptor';\nimport type { NodeId } from '../../core/scene/types';\nimport type { BindRigOptions, Rig, RigScene } from './bindRig';\nimport type { Skin } from '@weasel-js/animator';\nimport type { Skeleton } from '@weasel-js/animator';\nimport { createRigSeat } from './rigSeat';\nimport { useSeatedRig } from './useRig';\n\n/** What a rig reads from node data: a `skeleton` on the node that is the rig, and on the nodes\n * under it a `skin` for a path that bends or a `joint` for a node that rides one whole. */\nexport interface RigNodeData {\n /** Joints relative to the node's pose: its box's top-left corner, turned as the node is. */\n skeleton?: Skeleton;\n skin?: Skin;\n joint?: string;\n}\n\n/** Weights to bind in place of the document's, and word of when they change. `@weasel-js/rig`'s\n * `RigEditState` is one: it holds what a stroke of the weight tool has painted and not yet written. */\nexport interface PaintedSkins {\n /** By node. A new map whenever the weights change. */\n painted(): ReadonlyMap<NodeId, Skin>;\n listen(fn: () => void): () => void;\n}\n\n/** The part of a scene `rigFromNode` reads. */\nexport interface RigNodeSource<TPose> {\n get(id: NodeId): { pose: TPose; data?: unknown } | undefined;\n childrenOf(id: NodeId): readonly NodeId[];\n}\n\n/** The skeleton, bindings, and skins a rig node declares, as `bindRig` takes them. */\nexport interface RigNodeParts {\n skeleton: Skeleton;\n bindings: Record<string, NodeId[]>;\n skins: Record<NodeId, Skin>;\n}\n\ninterface Reading extends RigNodeParts {\n /** Every node, pose, and data object the parts were read from, to tell when they are stale. */\n refs: unknown[];\n}\n\ntype Affine = readonly [number, number, number, number, number, number];\nconst through = (m: Affine | null, x: number, y: number): [number, number] =>\n (m ? [m[0] * x + m[2] * y + m[4], m[1] * x + m[3] * y + m[5]] : [x, y]);\n\n/**\n * A skeleton as a rig node's data keeps it, moved to where the node's pose puts it: its root\n * joints are offset from the pose box's top-left corner and turned as the node is. Joints\n * under a root are relative to their parents and are left as they are.\n */\nexport function placeSkeleton<TPose>(\n skeleton: Skeleton,\n pose: TPose,\n descriptor: PoseDescriptor<TPose> = AUTO_POSE_DESCRIPTOR as PoseDescriptor<TPose>,\n): Skeleton {\n const box = descriptor.getBounds(pose);\n const frame = poseFrameOf(pose);\n const turn = descriptor.getRotation?.(pose) ?? 0;\n return {\n joints: skeleton.joints.map((joint) => {\n if (joint.parent != null) return joint;\n const [x, y] = through(frame, box.x + joint.bind.x, box.y + joint.bind.y);\n return { ...joint, bind: { ...joint.bind, x, y, rotation: joint.bind.rotation + turn } };\n }),\n };\n}\n\n/** The inverse of {@link placeSkeleton}: a skeleton in the scene's space, as the node at\n * `pose` would keep it in its data. */\nexport function unplaceSkeleton<TPose>(\n skeleton: Skeleton,\n pose: TPose,\n descriptor: PoseDescriptor<TPose> = AUTO_POSE_DESCRIPTOR as PoseDescriptor<TPose>,\n): Skeleton {\n const box = descriptor.getBounds(pose);\n const inverse = poseFrameInverseOf(pose);\n const turn = descriptor.getRotation?.(pose) ?? 0;\n return {\n joints: skeleton.joints.map((joint) => {\n if (joint.parent != null) return joint;\n const [x, y] = through(inverse, joint.bind.x, joint.bind.y);\n return { ...joint, bind: { ...joint.bind, x: x - box.x, y: y - box.y, rotation: joint.bind.rotation - turn } };\n }),\n };\n}\n\nconst UNPAINTED: ReadonlyMap<NodeId, Skin> = new Map();\nconst noWord = (): (() => void) => () => {};\nconst unpainted = (): ReadonlyMap<NodeId, Skin> => UNPAINTED;\n\nfunction read<TPose>(\n scene: RigNodeSource<TPose>,\n id: NodeId,\n descriptor: PoseDescriptor<TPose>,\n painted: ReadonlyMap<NodeId, Skin> = UNPAINTED,\n): Reading {\n const node = scene.get(id);\n if (!node) throw new Error(`rigFromNode: the rig is node \"${id}\", which the scene lacks.`);\n const local = (node.data as RigNodeData | null | undefined)?.skeleton;\n if (!local) throw new Error(`rigFromNode: node \"${id}\" has no skeleton in its data.`);\n\n const skeleton = placeSkeleton(local, node.pose, descriptor);\n\n const out: Reading = { skeleton, bindings: {}, skins: {}, refs: [node.pose, node.data] };\n const walk = (parent: NodeId): void => {\n for (const child of scene.childrenOf(parent)) {\n const n = scene.get(child);\n if (!n) continue;\n const data = n.data as RigNodeData | null | undefined;\n const skin = painted.get(child) ?? data?.skin;\n out.refs.push(child, n.pose, n.data, skin);\n if (skin) out.skins[child] = skin;\n else if (data?.joint !== undefined) (out.bindings[data.joint] ??= []).push(child);\n walk(child);\n }\n };\n walk(id);\n return out;\n}\n\nconst sameRefs = (a: Reading, b: Reading): boolean =>\n a === b || (a.refs.length === b.refs.length && a.refs.every((r, i) => r === b.refs[i]));\n\n/**\n * Read a rig out of the scene: the skeleton in `id`'s `data.skeleton`, placed by that node's\n * pose, and under it every node whose data has a `skin` or names a `joint`.\n */\nexport function rigFromNode<TPose>(\n scene: RigNodeSource<TPose>,\n id: NodeId,\n descriptor: PoseDescriptor<TPose> = AUTO_POSE_DESCRIPTOR as PoseDescriptor<TPose>,\n): RigNodeParts {\n const { skeleton, bindings, skins } = read(scene, id, descriptor);\n return { skeleton, bindings, skins };\n}\n\n/** Options for `useRigNode`. */\nexport interface UseRigNodeOptions<TPose>\n extends Pick<BindRigOptions<TPose>, 'apply' | 'descriptor' | 'restPath'> {\n scene: RigScene<TPose> & RigNodeSource<TPose> & {\n subscribe(listener: () => void): () => void;\n getVersion(): number;\n };\n /** The node whose data holds the skeleton. */\n node: NodeId;\n /** Weights bound in place of a node's `data.skin` while they are held. Give it the\n * `RigEditState` `@weasel-js/rig`'s weight tool has, and a stroke bends the path as it is painted. */\n painting?: PaintedSkins;\n}\n\n/**\n * A {@link Rig} read from a node, as {@link rigFromNode} reads it. It is bound again when the\n * rig node or a node under it changes its pose or data, or when nodes under it come or go; an\n * edit elsewhere in the scene leaves it alone. A rig bound again keeps its `target`, with the\n * animations running on it, its committed pose, and its placement, unless the skeleton's\n * joints were added, removed, renamed, or reordered. Then it has a new `target`, which takes\n * over the placement and the pose of every joint the skeleton still names. Animations go on\n * running on the target they were started on and show through the new one, so a joint that\n * was renamed stops moving.\n */\nexport function useRigNode<TPose>(options: UseRigNodeOptions<TPose>): Rig {\n const { scene, node, apply, descriptor, restPath, painting } = options;\n const version = useSyncExternalStore(scene.subscribe, scene.getVersion);\n const painted = useSyncExternalStore(painting?.listen ?? noWord, painting?.painted ?? unpainted);\n const next = useMemo(\n () => read(scene, node, descriptor ?? (AUTO_POSE_DESCRIPTOR as PoseDescriptor<TPose>), painted),\n // `version` is what says the scene may answer differently.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [scene, node, descriptor, version, painted],\n );\n // Each read makes new objects; the rig must outlive a read that found nothing changed.\n const [held, setHeld] = useState(next);\n const parts = sameRefs(held, next) ? held : next;\n if (parts !== held) setHeld(next);\n const joints = JSON.stringify(parts.skeleton.joints.map((joint) => joint.name));\n // A pose target's axes are its joints' names in order, so the seat holds while those do,\n // and the next one takes over from it.\n const [seated, setSeated] = useState(() => ({ joints, seat: createRigSeat(parts.skeleton) }));\n let { seat } = seated;\n if (seated.joints !== joints) {\n seat = createRigSeat(parts.skeleton, seated.seat);\n setSeated({ joints, seat });\n }\n return useSeatedRig({\n scene, skeleton: parts.skeleton, bindings: parts.bindings, skins: parts.skins, apply, descriptor, restPath,\n }, seat);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"rigNode.js","names":[],"sources":["../../../src/animation/rig/rigNode.ts"],"sourcesContent":["import { useMemo, useState, useSyncExternalStore } from 'react';\nimport { applyToPoint, poseFrameInverseOf, poseFrameOf, type Affine } from '@weasel-js/geom';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\nimport type { PoseDescriptor } from '../../core/geometry/poseDescriptor';\nimport type { NodeId } from '../../core/scene/types';\nimport type { BindRigOptions, Rig, RigScene } from './bindRig';\nimport type { Skin } from '@weasel-js/animator';\nimport type { Skeleton } from '@weasel-js/animator';\nimport { createRigSeat } from './rigSeat';\nimport { useSeatedRig } from './useRig';\n\n/** What a rig reads from node data: a `skeleton` on the node that is the rig, and on the nodes\n * under it a `skin` for a path that bends or a `joint` for a node that rides one whole. */\nexport interface RigNodeData {\n /** Joints relative to the node's pose: its box's top-left corner, turned as the node is. */\n skeleton?: Skeleton;\n skin?: Skin;\n joint?: string;\n}\n\n/** Weights to bind in place of the document's, and word of when they change. `@weasel-js/rig`'s\n * `RigEditState` is one: it holds what a stroke of the weight tool has painted and not yet written. */\nexport interface PaintedSkins {\n /** By node. A new map whenever the weights change. */\n painted(): ReadonlyMap<NodeId, Skin>;\n listen(fn: () => void): () => void;\n}\n\n/** The part of a scene `rigFromNode` reads. */\nexport interface RigNodeSource<TPose> {\n get(id: NodeId): { pose: TPose; data?: unknown } | undefined;\n childrenOf(id: NodeId): readonly NodeId[];\n}\n\n/** The skeleton, bindings, and skins a rig node declares, as `bindRig` takes them. */\nexport interface RigNodeParts {\n skeleton: Skeleton;\n bindings: Record<string, NodeId[]>;\n skins: Record<NodeId, Skin>;\n}\n\ninterface Reading extends RigNodeParts {\n /** Every node, pose, and data object the parts were read from, to tell when they are stale. */\n refs: unknown[];\n}\n\nconst through = (m: Affine | null, x: number, y: number): [number, number] => (m ? applyToPoint(m, x, y) : [x, y]);\n\n/**\n * A skeleton as a rig node's data keeps it, moved to where the node's pose puts it: its root\n * joints are offset from the pose box's top-left corner and turned as the node is. Joints\n * under a root are relative to their parents and are left as they are.\n */\nexport function placeSkeleton<TPose>(\n skeleton: Skeleton,\n pose: TPose,\n descriptor: PoseDescriptor<TPose> = AUTO_POSE_DESCRIPTOR as PoseDescriptor<TPose>,\n): Skeleton {\n const box = descriptor.getBounds(pose);\n const frame = poseFrameOf(pose);\n const turn = descriptor.getRotation?.(pose) ?? 0;\n return {\n joints: skeleton.joints.map((joint) => {\n if (joint.parent != null) return joint;\n const [x, y] = through(frame, box.x + joint.bind.x, box.y + joint.bind.y);\n return { ...joint, bind: { ...joint.bind, x, y, rotation: joint.bind.rotation + turn } };\n }),\n };\n}\n\n/** The inverse of {@link placeSkeleton}: a skeleton in the scene's space, as the node at\n * `pose` would keep it in its data. */\nexport function unplaceSkeleton<TPose>(\n skeleton: Skeleton,\n pose: TPose,\n descriptor: PoseDescriptor<TPose> = AUTO_POSE_DESCRIPTOR as PoseDescriptor<TPose>,\n): Skeleton {\n const box = descriptor.getBounds(pose);\n const inverse = poseFrameInverseOf(pose);\n const turn = descriptor.getRotation?.(pose) ?? 0;\n return {\n joints: skeleton.joints.map((joint) => {\n if (joint.parent != null) return joint;\n const [x, y] = through(inverse, joint.bind.x, joint.bind.y);\n return { ...joint, bind: { ...joint.bind, x: x - box.x, y: y - box.y, rotation: joint.bind.rotation - turn } };\n }),\n };\n}\n\nconst UNPAINTED: ReadonlyMap<NodeId, Skin> = new Map();\nconst noWord = (): (() => void) => () => {};\nconst unpainted = (): ReadonlyMap<NodeId, Skin> => UNPAINTED;\n\nfunction read<TPose>(\n scene: RigNodeSource<TPose>,\n id: NodeId,\n descriptor: PoseDescriptor<TPose>,\n painted: ReadonlyMap<NodeId, Skin> = UNPAINTED,\n): Reading {\n const node = scene.get(id);\n if (!node) throw new Error(`rigFromNode: the rig is node \"${id}\", which the scene lacks.`);\n const local = (node.data as RigNodeData | null | undefined)?.skeleton;\n if (!local) throw new Error(`rigFromNode: node \"${id}\" has no skeleton in its data.`);\n\n const skeleton = placeSkeleton(local, node.pose, descriptor);\n\n const out: Reading = { skeleton, bindings: {}, skins: {}, refs: [node.pose, node.data] };\n const walk = (parent: NodeId): void => {\n for (const child of scene.childrenOf(parent)) {\n const n = scene.get(child);\n if (!n) continue;\n const data = n.data as RigNodeData | null | undefined;\n const skin = painted.get(child) ?? data?.skin;\n out.refs.push(child, n.pose, n.data, skin);\n if (skin) out.skins[child] = skin;\n else if (data?.joint !== undefined) (out.bindings[data.joint] ??= []).push(child);\n walk(child);\n }\n };\n walk(id);\n return out;\n}\n\nconst sameRefs = (a: Reading, b: Reading): boolean =>\n a === b || (a.refs.length === b.refs.length && a.refs.every((r, i) => r === b.refs[i]));\n\n/**\n * Read a rig out of the scene: the skeleton in `id`'s `data.skeleton`, placed by that node's\n * pose, and under it every node whose data has a `skin` or names a `joint`.\n */\nexport function rigFromNode<TPose>(\n scene: RigNodeSource<TPose>,\n id: NodeId,\n descriptor: PoseDescriptor<TPose> = AUTO_POSE_DESCRIPTOR as PoseDescriptor<TPose>,\n): RigNodeParts {\n const { skeleton, bindings, skins } = read(scene, id, descriptor);\n return { skeleton, bindings, skins };\n}\n\n/** Options for `useRigNode`. */\nexport interface UseRigNodeOptions<TPose>\n extends Pick<BindRigOptions<TPose>, 'apply' | 'descriptor' | 'restPath'> {\n scene: RigScene<TPose> & RigNodeSource<TPose> & {\n subscribe(listener: () => void): () => void;\n getVersion(): number;\n };\n /** The node whose data holds the skeleton. */\n node: NodeId;\n /** Weights bound in place of a node's `data.skin` while they are held. Give it the\n * `RigEditState` `@weasel-js/rig`'s weight tool has, and a stroke bends the path as it is painted. */\n painting?: PaintedSkins;\n}\n\n/**\n * A {@link Rig} read from a node, as {@link rigFromNode} reads it. It is bound again when the\n * rig node or a node under it changes its pose or data, or when nodes under it come or go; an\n * edit elsewhere in the scene leaves it alone. A rig bound again keeps its `target`, with the\n * animations running on it, its committed pose, and its placement, unless the skeleton's\n * joints were added, removed, renamed, or reordered. Then it has a new `target`, which takes\n * over the placement and the pose of every joint the skeleton still names. Animations go on\n * running on the target they were started on and show through the new one, so a joint that\n * was renamed stops moving.\n */\nexport function useRigNode<TPose>(options: UseRigNodeOptions<TPose>): Rig {\n const { scene, node, apply, descriptor, restPath, painting } = options;\n const version = useSyncExternalStore(scene.subscribe, scene.getVersion);\n const painted = useSyncExternalStore(painting?.listen ?? noWord, painting?.painted ?? unpainted);\n const next = useMemo(\n () => read(scene, node, descriptor ?? (AUTO_POSE_DESCRIPTOR as PoseDescriptor<TPose>), painted),\n // `version` is what says the scene may answer differently.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [scene, node, descriptor, version, painted],\n );\n // Each read makes new objects; the rig must outlive a read that found nothing changed.\n const [held, setHeld] = useState(next);\n const parts = sameRefs(held, next) ? held : next;\n if (parts !== held) setHeld(next);\n const joints = JSON.stringify(parts.skeleton.joints.map((joint) => joint.name));\n // A pose target's axes are its joints' names in order, so the seat holds while those do,\n // and the next one takes over from it.\n const [seated, setSeated] = useState(() => ({ joints, seat: createRigSeat(parts.skeleton) }));\n let { seat } = seated;\n if (seated.joints !== joints) {\n seat = createRigSeat(parts.skeleton, seated.seat);\n setSeated({ joints, seat });\n }\n return useSeatedRig({\n scene, skeleton: parts.skeleton, bindings: parts.bindings, skins: parts.skins, apply, descriptor, restPath,\n }, seat);\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { createTarget, skeletonAxes } from "@weasel-js/animator";
2
2
 
3
- //#region src/animation/rig/rigSeat.ts
3
+ // src/animation/rig/rigSeat.ts
4
4
  var moving = (seat) => seat.target.active || seat.carried !== null && moving(seat.carried.seat);
5
5
  /** How far `carried`'s target has moved since it was taken over from, in the new seat's axes. */
6
6
  function travel(carried) {
@@ -74,6 +74,5 @@ function seatBinding(seat, binding) {
74
74
  if (seat.shown) binding.show(seat.target.read());
75
75
  }
76
76
 
77
- //#endregion
78
77
  export { createRigSeat, seatBinding };
79
78
  //# sourceMappingURL=rigSeat.js.map
@@ -1,7 +1,7 @@
1
1
  import { boundsOfPath, pathInWorld, remapPointValues } from "@weasel-js/geom";
2
2
  import { skinPath } from "@weasel-js/animator";
3
3
 
4
- //#region src/animation/rig/skinBinding.ts
4
+ // src/animation/rig/skinBinding.ts
5
5
  /** The path in a node's `data.path`, carried through its pose as `kit:path` paints it. */
6
6
  function dataRestPath(node) {
7
7
  const path = node.data?.path;
@@ -71,6 +71,5 @@ function bindSkins(scene, skins, restPath, descriptor) {
71
71
  };
72
72
  }
73
73
 
74
- //#endregion
75
74
  export { bindSkins, dataRestPath, remapSkin };
76
75
  //# sourceMappingURL=skinBinding.js.map
@@ -1,8 +1,8 @@
1
- import { createRigSeat, seatBinding } from "./rigSeat.js";
2
1
  import { bindRigOn } from "./bindRig.js";
2
+ import { createRigSeat, seatBinding } from "./rigSeat.js";
3
3
  import { useEffect, useMemo } from "react";
4
4
 
5
- //#region src/animation/rig/useRig.ts
5
+ // src/animation/rig/useRig.ts
6
6
  /**
7
7
  * A {@link Rig} bound for the component's lifetime, its overrides dropped on
8
8
  * unmount. Rebinds — re-reading every node's rest pose — whenever an option's
@@ -47,6 +47,5 @@ function useSeatedRig(options, kept) {
47
47
  return made.rig;
48
48
  }
49
49
 
50
- //#endregion
51
50
  export { useRig, useSeatedRig };
52
51
  //# sourceMappingURL=useRig.js.map
@@ -1,7 +1,7 @@
1
1
  import { tweenPose } from "../poseHelpers.js";
2
2
  import { setPoseInstant } from "./instantPose.js";
3
3
 
4
- //#region src/animation/wrappers/animateLifecycle.ts
4
+ // src/animation/wrappers/animateLifecycle.ts
5
5
  /** Wrap an adapter so inserts and removals animate — the scene-graph
6
6
  * equivalent of CSS enter/leave transitions. The result is the adapter it
7
7
  * was given, with `insertNode` and `removeNode` replaced. */
@@ -59,6 +59,5 @@ function animateLifecycle(adapter, animator, opts) {
59
59
  };
60
60
  }
61
61
 
62
- //#endregion
63
62
  export { animateLifecycle };
64
63
  //# sourceMappingURL=animateLifecycle.js.map
@@ -1,7 +1,7 @@
1
1
  import { poseKey, springPose, tweenPose } from "../poseHelpers.js";
2
2
  import { instantPoseWrite } from "./instantPose.js";
3
3
 
4
- //#region src/animation/wrappers/animateOnSetPose.ts
4
+ // src/animation/wrappers/animateOnSetPose.ts
5
5
  /**
6
6
  * Wrap an adapter so every `setPose` animates to the new pose instead of
7
7
  * jumping to it. The result is the adapter it was given, with that one method
@@ -64,6 +64,5 @@ function animateOnSetPose(adapter, animator, opts = {}) {
64
64
  };
65
65
  }
66
66
 
67
- //#endregion
68
67
  export { animateOnSetPose };
69
68
  //# sourceMappingURL=animateOnSetPose.js.map
@@ -1,4 +1,4 @@
1
- //#region src/animation/wrappers/instantPose.ts
1
+ // src/animation/wrappers/instantPose.ts
2
2
  var INSTANT = Symbol("weasel.setPoseInstant");
3
3
  /** The member an adapter wrapper that animates `setPose` spreads into what it
4
4
  * returns, so the write that does not animate survives any wrapper above it
@@ -13,6 +13,5 @@ function setPoseInstant(adapter, id, pose) {
13
13
  else adapter.setPose(id, pose);
14
14
  }
15
15
 
16
- //#endregion
17
16
  export { instantPoseWrite, setPoseInstant };
18
17
  //# sourceMappingURL=instantPose.js.map
@@ -1,7 +1,7 @@
1
1
  import { liveAxes } from "./poseTarget.js";
2
2
  import { createTarget } from "@weasel-js/animator";
3
3
 
4
- //#region src/animation/writtenPoseTarget.ts
4
+ // src/animation/writtenPoseTarget.ts
5
5
  /**
6
6
  * A {@link Target} over a pose whose store holds one value and has no overrides table to show a
7
7
  * moving pose through: an array in React state, a plain record. While the node moves, the
@@ -50,6 +50,5 @@ function createWrittenPoseTarget(opts) {
50
50
  return target;
51
51
  }
52
52
 
53
- //#endregion
54
53
  export { createWrittenPoseTarget };
55
54
  //# sourceMappingURL=writtenPoseTarget.js.map
@@ -10,10 +10,11 @@ import { renderNeeds } from "../canvas/renderNeeds.js";
10
10
  import { createRasterSession, planPixelRender, renderSceneToPixels, warmRender } from "../canvas/renderSceneToPixels.js";
11
11
  import { debugSnapshotArgs, renderDebugSnapshot } from "../canvas/renderDebugSnapshot.js";
12
12
  import { rasterToPng } from "../canvas/rasterToPng.js";
13
+ import { usePublishPointer } from "../input/usePublishPointer.js";
13
14
  import { PointerProviderIfRoot } from "../canvas/SceneCanvas/PointerProviderIfRoot.js";
14
15
  import { ActionsProviderIfRoot } from "../canvas/SceneCanvas/ActionsProviderIfRoot.js";
15
16
  import { DepRegistryProviderIfRoot } from "../canvas/SceneCanvas/DepRegistryProviderIfRoot.js";
16
17
  import { LONG_PRESS_MS, activatesFocusedControl, createLongPressStore as createLongPressStore$1, focusedControlOwnsKey, historyKey, isEditableTarget as isEditableTarget$1, matchesKeyBinding } from "@weasel-js/routing";
17
18
  import { PointerContextProvider as PointerContextProvider$1, createPointerStore, usePointerContext as usePointerContext$1, usePointerPosition } from "@weasel-js/routing/react";
18
19
 
19
- export { ActionsProviderIfRoot, DepRegistryProviderIfRoot, LONG_PRESS_FEEDBACK_ID, LONG_PRESS_MS, PointerContextProvider$1 as PointerContextProvider, PointerProviderIfRoot, activatesFocusedControl, buildSceneViewCommands, createKeyState, createLongPressFeedbackContribution, createLongPressStore$1 as createLongPressStore, createPointerStore, createRasterSession, debugSnapshotArgs, focusedControlOwnsKey, forEachCoalesced, getStylusData, historyKey, isEditableTarget$1 as isEditableTarget, matchesKeyBinding, planPixelRender, pressureToWidth, rasterToPng, releaseCanvasRenderer, renderDebugSnapshot, renderNeeds, renderSceneToCanvas, renderSceneToPixels, useKeyModifiers, useKeyState, usePointerContext$1 as usePointerContext, usePointerPosition, usePointerStylus, warmRender };
20
+ export { ActionsProviderIfRoot, DepRegistryProviderIfRoot, LONG_PRESS_FEEDBACK_ID, LONG_PRESS_MS, PointerContextProvider$1 as PointerContextProvider, PointerProviderIfRoot, activatesFocusedControl, buildSceneViewCommands, createKeyState, createLongPressFeedbackContribution, createLongPressStore$1 as createLongPressStore, createPointerStore, createRasterSession, debugSnapshotArgs, focusedControlOwnsKey, forEachCoalesced, getStylusData, historyKey, isEditableTarget$1 as isEditableTarget, matchesKeyBinding, planPixelRender, pressureToWidth, rasterToPng, releaseCanvasRenderer, renderDebugSnapshot, renderNeeds, renderSceneToCanvas, renderSceneToPixels, useKeyModifiers, useKeyState, usePointerContext$1 as usePointerContext, usePointerPosition, usePointerStylus, usePublishPointer, warmRender };
@@ -18,6 +18,7 @@ import { AUTO_ORIGIN_PROJECTION, RECT_ORIGIN_PROJECTION } from "../interactions/
18
18
  import { createDepartures } from "../animation/departures.js";
19
19
  import { bindPoseTransition, glidesByDefault, usePoseTransition } from "../animation/poseTransition.js";
20
20
  import { DEFAULT_ROTATION_HANDLE_DISTANCE, hitRotationHandle, rotationHandle } from "../interactions/actions/rotate/handle.js";
21
+ import { undeclaredMagnifications } from "../interactions/actions/magnification.js";
21
22
  import { useDragGesture } from "../interactions/gestures/dragGesture/dragGesture.js";
22
23
  import { dragPointOf } from "../interactions/gestures/dragGesture/dragPointOf.js";
23
24
  import { useDragRect } from "../interactions/gestures/dragRect/dragRect.js";
@@ -38,4 +39,4 @@ import { placeSkeleton, rigFromNode, unplaceSkeleton, useRigNode } from "../anim
38
39
  import { EASINGS, SPRING_PRESETS, cubicBezierEasing, easeIn, easeInBack, easeInBounce, easeInCirc, easeInCubic, easeInElastic, easeInExpo, easeInOut, easeInOutBack, easeInOutBounce, easeInOutCirc, easeInOutCubic, easeInOutElastic, easeInOutExpo, easeInOutQuad, easeInOutQuart, easeInOutQuint, easeInOutSine, easeInQuad, easeInQuart, easeInQuint, easeInSine, easeOut, easeOutBack, easeOutBounce, easeOutCirc, easeOutCubic, easeOutElastic, easeOutExpo, easeOutQuad, easeOutQuart, easeOutQuint, easeOutSine, hexToOklchDeg, hslToSrgb, interpolateSrgb, lerpColorArray, lerpOklab, lerpOklch, linear, linearSrgbToOklab, linearToSrgb, oklabToLinearSrgb, oklabToOklch, oklabToSrgbU8, oklchDegToHex, oklchToOklab, resolveEasing, srgbFloatToOklab, srgbToHsl, srgbToLinear, srgbU8ToOklab } from "../animation/index.js";
39
40
  import { CONTROL_SELECTOR, DRAG_THRESHOLD_PX, isInControlWithin, openPointerSession as openPointerSession$1, pastDragThreshold as pastDragThreshold$1, startCarry } from "@weasel-js/routing";
40
41
 
41
- export { AUTO_ORIGIN_PROJECTION, AUTO_POSE_DESCRIPTOR, CONTROL_SELECTOR, DEFAULT_ROTATION_HANDLE_DISTANCE, DRAG_THRESHOLD_PX, EASINGS, MOVE_NODES_REQUIRES, RECT_ORIGIN_PROJECTION, RECT_POSE_DESCRIPTOR, ROTATED_POSE_DESCRIPTOR, SPRING_PRESETS, WEASEL_CLIPBOARD_MIME, WEASEL_CLIPBOARD_MIME_WEB, aabbCenter, alignDeltaFor, alignTargetBounds, animateLifecycle, animateOnSetPose, bindPoseTransition, bindRig, buildWeaselClipboardText, cornerResizeHandles, createDepartures, createPoseTarget, createReflowTransition, createWrittenPoseTarget, cubicBezierEasing, dataRestPath, dragPointOf, easeIn, easeInBack, easeInBounce, easeInCirc, easeInCubic, easeInElastic, easeInExpo, easeInOut, easeInOutBack, easeInOutBounce, easeInOutCirc, easeInOutCubic, easeInOutElastic, easeInOutExpo, easeInOutQuad, easeInOutQuart, easeInOutQuint, easeInOutSine, easeInQuad, easeInQuart, easeInQuint, easeInSine, easeOut, easeOutBack, easeOutBounce, easeOutCirc, easeOutCubic, easeOutElastic, easeOutExpo, easeOutQuad, easeOutQuart, easeOutQuint, easeOutSine, embedWeaselMetadataInSvg, enumerateAnchors, extractWeaselClipboardFromSvg, fixedCornerOf, forgetTransform, gesturePlaneReader, gestureViewReader, glidesByDefault, hexToOklchDeg, hitAnchor, hitCornerHandle, hitRotationHandle, hslToSrgb, interpolateSrgb, isInControlWithin, isPathLike, isRectPose, lastTransform, lerpColorArray, lerpOklab, lerpOklch, linear, linearSrgbToOklab, linearToSrgb, momentum, moveNodes, moveNodesOps, oklabToLinearSrgb, oklabToOklch, oklabToSrgbU8, oklchDegToHex, oklchToOklab, openPointerSession$1 as openPointerSession, parseWeaselClipboardText, pastDragThreshold$1 as pastDragThreshold, placeSkeleton, pointInRotatedRect, poseAxes, poseDescriptorForNode, recordTransform, rectCorners, resolveEasing, resolveSpatialReference, rigFromNode, rigidRigApply, rotatePoint, rotatedRectCorners, rotationHandle, sceneBoxFrames, sceneClipTargets, scenePoseFrame, scenePoseTarget, screenTolerance, sniffWeaselClipboardText, springPose, srgbFloatToOklab, srgbToHsl, srgbToLinear, srgbU8ToOklab, staggerSpringPose, startCarry, translatePoseViaDescriptor, tweenPose, unplaceSkeleton, useAlign, useAnimatedReflow, useClipboardOps, useDistribute, useDragGesture, useDragRadial, useDragRect, usePoseTransition, useRig, useRigNode, visualBoundsViaDescriptor, withCoord };
42
+ export { AUTO_ORIGIN_PROJECTION, AUTO_POSE_DESCRIPTOR, CONTROL_SELECTOR, DEFAULT_ROTATION_HANDLE_DISTANCE, DRAG_THRESHOLD_PX, EASINGS, MOVE_NODES_REQUIRES, RECT_ORIGIN_PROJECTION, RECT_POSE_DESCRIPTOR, ROTATED_POSE_DESCRIPTOR, SPRING_PRESETS, WEASEL_CLIPBOARD_MIME, WEASEL_CLIPBOARD_MIME_WEB, aabbCenter, alignDeltaFor, alignTargetBounds, animateLifecycle, animateOnSetPose, bindPoseTransition, bindRig, buildWeaselClipboardText, cornerResizeHandles, createDepartures, createPoseTarget, createReflowTransition, createWrittenPoseTarget, cubicBezierEasing, dataRestPath, dragPointOf, easeIn, easeInBack, easeInBounce, easeInCirc, easeInCubic, easeInElastic, easeInExpo, easeInOut, easeInOutBack, easeInOutBounce, easeInOutCirc, easeInOutCubic, easeInOutElastic, easeInOutExpo, easeInOutQuad, easeInOutQuart, easeInOutQuint, easeInOutSine, easeInQuad, easeInQuart, easeInQuint, easeInSine, easeOut, easeOutBack, easeOutBounce, easeOutCirc, easeOutCubic, easeOutElastic, easeOutExpo, easeOutQuad, easeOutQuart, easeOutQuint, easeOutSine, embedWeaselMetadataInSvg, enumerateAnchors, extractWeaselClipboardFromSvg, fixedCornerOf, forgetTransform, gesturePlaneReader, gestureViewReader, glidesByDefault, hexToOklchDeg, hitAnchor, hitCornerHandle, hitRotationHandle, hslToSrgb, interpolateSrgb, isInControlWithin, isPathLike, isRectPose, lastTransform, lerpColorArray, lerpOklab, lerpOklch, linear, linearSrgbToOklab, linearToSrgb, momentum, moveNodes, moveNodesOps, oklabToLinearSrgb, oklabToOklch, oklabToSrgbU8, oklchDegToHex, oklchToOklab, openPointerSession$1 as openPointerSession, parseWeaselClipboardText, pastDragThreshold$1 as pastDragThreshold, placeSkeleton, pointInRotatedRect, poseAxes, poseDescriptorForNode, recordTransform, rectCorners, resolveEasing, resolveSpatialReference, rigFromNode, rigidRigApply, rotatePoint, rotatedRectCorners, rotationHandle, sceneBoxFrames, sceneClipTargets, scenePoseFrame, scenePoseTarget, screenTolerance, sniffWeaselClipboardText, springPose, srgbFloatToOklab, srgbToHsl, srgbToLinear, srgbU8ToOklab, staggerSpringPose, startCarry, translatePoseViaDescriptor, tweenPose, undeclaredMagnifications, unplaceSkeleton, useAlign, useAnimatedReflow, useClipboardOps, useDistribute, useDragGesture, useDragRadial, useDragRect, usePoseTransition, useRig, useRigNode, visualBoundsViaDescriptor, withCoord };
@@ -5,8 +5,8 @@ import { DEFAULT_FILL_COLOR, DEFAULT_PALETTE, DEFAULT_STROKE_COLOR, GHOST_STROKE
5
5
  import { asPaint } from "../core/paint/paintKindEntry.js";
6
6
  import { useGradientKinds, usePaintKind, usePaintKinds } from "../core/usePaintKinds.js";
7
7
  import { commandFill as commandFill$1, commandPaint as commandPaint$1, commandStroke as commandStroke$1, createTilePattern, fillInPoseFrame, fillToBoundsFrame, isPaintKindKnown as isPaintKindKnown$1, resolveFillPattern, resolvePatternSpec, warmPaintKinds as warmPaintKinds$1 } from "@weasel-js/renderer";
8
- import { INHERIT as INHERIT$1, STROKE_DASH_RATIOS, TILE_KINDS, alignedStrokeRect as alignedStrokeRect$1, composePatternTransform, contrastLineColor, contrastRatio, dashForStrokeStyle as dashForStrokeStyle$1, decomposePatternTransform, gradientForBounds as gradientForBounds$1, gradientGeometry, hexToRgbBytes, hexToRgba, isGradientPaint as isGradientPaint$1, isImagePatternPaint, isPatternPaint, isSolidPaint, isTileKind, isTilePaint as isTilePaint$1, lerpFill as lerpFill$1, lerpPaint, lerpStroke as lerpStroke$1, normalizeHex, parseColor, parseColorToRgba255, parseHexBytes, patternPlacementOf, resolveColor, resolveFill as resolveFill$1, resolveScreenLength as resolveScreenLength$1, resolveStroke as resolveStroke$1, rgbaToHex, sampleGradientStops, scaleVertexWidth as scaleVertexWidth$1, strokeDashStyleOf as strokeDashStyleOf$1, tileSpecOf, vertexHalfWidths as vertexHalfWidths$1, vertexWidthFromSides as vertexWidthFromSides$1, wcagLevels, widestHalfWidth, withGradientKind as withGradientKind$1 } from "@weasel-js/paint";
8
+ import { INHERIT as INHERIT$1, STROKE_DASH_RATIOS, TILE_KINDS, alignedStrokeRect as alignedStrokeRect$1, composePatternTransform, contrastLineColor, contrastRatio, dashForStrokeStyle as dashForStrokeStyle$1, decomposePatternTransform, gradientForBounds as gradientForBounds$1, gradientGeometry, hexToRgbBytes, hexToRgba, isGradientPaint as isGradientPaint$1, isImagePatternPaint, isPatternPaint, isSolidPaint, isTileKind, isTilePaint as isTilePaint$1, lerpFill as lerpFill$1, lerpPaint, lerpStroke as lerpStroke$1, luminanceContrast, normalizeHex, parseColor, parseColorToRgba255, parseHexBytes, patternPlacementOf, relativeLuminance, resolveColor, resolveFill as resolveFill$1, resolveScreenLength as resolveScreenLength$1, resolveStroke as resolveStroke$1, rgbaToHex, sampleGradientStops, scaleVertexWidth as scaleVertexWidth$1, strokeDashStyleOf as strokeDashStyleOf$1, tileSpecOf, vertexHalfWidths as vertexHalfWidths$1, vertexWidthFromSides as vertexWidthFromSides$1, wcagLevels, widestHalfWidth, withGradientKind as withGradientKind$1 } from "@weasel-js/paint";
9
9
  import { BUILTIN_MARKERS, getMarker, listMarkers as listMarkers$1, markerInset, markerKeyOf, markerRegistry, markerSites, registerMarker, resolveMarkerSize, resolveStrokeWidth as resolveStrokeWidth$1, strokeInsets as strokeInsets$1 } from "@weasel-js/stroke";
10
10
  import { trimPolyline } from "@weasel-js/geom/tessellate";
11
11
 
12
- export { BUILTIN_MARKERS, DEFAULT_FILL_COLOR, DEFAULT_PALETTE, DEFAULT_STROKE_COLOR, GHOST_STROKE, INHERIT$1 as INHERIT, STROKE_DASH_RATIOS, TILE_KINDS, alignedStrokeRect$1 as alignedStrokeRect, asPaint, commandFill$1 as commandFill, commandPaint$1 as commandPaint, commandStroke$1 as commandStroke, composePatternTransform, contrastLineColor, contrastRatio, createTilePattern, cycleFill, dashForStrokeStyle$1 as dashForStrokeStyle, decomposePatternTransform, fillInPoseFrame, fillToBoundsFrame, getAlpha01, getMarker, getPaintKind, gradientForBounds$1 as gradientForBounds, gradientGeometry, hexToRgbBytes, hexToRgba, isGradientPaint$1 as isGradientPaint, isImagePatternPaint, isPaintKindKnown$1 as isPaintKindKnown, isPatternPaint, isSolidPaint, isTileKind, isTilePaint$1 as isTilePaint, lerpFill$1 as lerpFill, lerpPaint, lerpStroke$1 as lerpStroke, listGradientKinds, listMarkers$1 as listMarkers, listPaintKinds, markerInset, markerKeyOf, markerRegistry, markerSites, mergeAlphaFromPrev, normalizeHex, paintAlpha, paintKindOf, paintKindRegistry, paintWithAlpha, paintWithColor, parseColor, parseColorToRgba255, parseHexBytes, pathPaintOf, patternFamily, patternPlacementOf, registerMarker, registerPaintKind, registerPaintKindLoader, resolveColor, resolveFill$1 as resolveFill, resolveFillPattern, resolveMarkerSize, resolvePatternSpec, resolveScreenLength$1 as resolveScreenLength, resolveStroke$1 as resolveStroke, resolveStrokeWidth$1 as resolveStrokeWidth, rgbaToHex, sampleGradientStops, scaleVertexWidth$1 as scaleVertexWidth, seedTile, solid, strokeDashStyleOf$1 as strokeDashStyleOf, strokeInsets$1 as strokeInsets, strokeOf, strokeWith, switchGradientKind, tileSpecOf, toHex8, trimPolyline, useGradientKinds, usePaintKind, usePaintKinds, vertexHalfWidths$1 as vertexHalfWidths, vertexWidthFromSides$1 as vertexWidthFromSides, warmPaintKinds$1 as warmPaintKinds, wcagLevels, widestHalfWidth, withAlpha01, withGradientKind$1 as withGradientKind };
12
+ export { BUILTIN_MARKERS, DEFAULT_FILL_COLOR, DEFAULT_PALETTE, DEFAULT_STROKE_COLOR, GHOST_STROKE, INHERIT$1 as INHERIT, STROKE_DASH_RATIOS, TILE_KINDS, alignedStrokeRect$1 as alignedStrokeRect, asPaint, commandFill$1 as commandFill, commandPaint$1 as commandPaint, commandStroke$1 as commandStroke, composePatternTransform, contrastLineColor, contrastRatio, createTilePattern, cycleFill, dashForStrokeStyle$1 as dashForStrokeStyle, decomposePatternTransform, fillInPoseFrame, fillToBoundsFrame, getAlpha01, getMarker, getPaintKind, gradientForBounds$1 as gradientForBounds, gradientGeometry, hexToRgbBytes, hexToRgba, isGradientPaint$1 as isGradientPaint, isImagePatternPaint, isPaintKindKnown$1 as isPaintKindKnown, isPatternPaint, isSolidPaint, isTileKind, isTilePaint$1 as isTilePaint, lerpFill$1 as lerpFill, lerpPaint, lerpStroke$1 as lerpStroke, listGradientKinds, listMarkers$1 as listMarkers, listPaintKinds, luminanceContrast, markerInset, markerKeyOf, markerRegistry, markerSites, mergeAlphaFromPrev, normalizeHex, paintAlpha, paintKindOf, paintKindRegistry, paintWithAlpha, paintWithColor, parseColor, parseColorToRgba255, parseHexBytes, pathPaintOf, patternFamily, patternPlacementOf, registerMarker, registerPaintKind, registerPaintKindLoader, relativeLuminance, resolveColor, resolveFill$1 as resolveFill, resolveFillPattern, resolveMarkerSize, resolvePatternSpec, resolveScreenLength$1 as resolveScreenLength, resolveStroke$1 as resolveStroke, resolveStrokeWidth$1 as resolveStrokeWidth, rgbaToHex, sampleGradientStops, scaleVertexWidth$1 as scaleVertexWidth, seedTile, solid, strokeDashStyleOf$1 as strokeDashStyleOf, strokeInsets$1 as strokeInsets, strokeOf, strokeWith, switchGradientKind, tileSpecOf, toHex8, trimPolyline, useGradientKinds, usePaintKind, usePaintKinds, vertexHalfWidths$1 as vertexHalfWidths, vertexWidthFromSides$1 as vertexWidthFromSides, warmPaintKinds$1 as warmPaintKinds, wcagLevels, widestHalfWidth, withAlpha01, withGradientKind$1 as withGradientKind };
@@ -60,10 +60,10 @@ import { useStarTool } from "../tools/builtin/star/useStarTool.js";
60
60
  import { usePencilTool } from "../tools/builtin/pencil/usePencilTool.js";
61
61
  import { useSliceTool } from "../tools/builtin/slice/useSliceTool.js";
62
62
  import { useMeasureTool } from "../tools/builtin/measure/useMeasureTool.js";
63
- import { createToolOptionValues, isToolSet, steppedOption, toolIdsOf as toolIdsOf$1, toolOptionParams, toolOptionSteps, toolSet as toolSet$1, toolSetHas, withoutTools } from "../tools/index.js";
63
+ import { createToolOptionValues, isToolSet, steppedOption, toolIdsOf as toolIdsOf$1, toolOptionParams as toolOptionParams$1, toolOptionSteps, toolSet as toolSet$1, toolSetHas, withoutTools } from "../tools/index.js";
64
64
  import { useLatest as useLatest$1 } from "@weasel-js/react";
65
65
  import { ActionDisabledReason as ActionDisabledReason$1, actionBindings as actionBindings$1, actionCursor, actionItemTitle, actionItems, actionSettingsParams, actionShortcuts, actionsTagged, bindingId, buildDepsFromRequires as buildDepsFromRequires$1, createDepRegistry, createDispatcher as createDispatcher$1, deleteScratch, evaluateActive as evaluateActive$1, evaluateEnabled as evaluateEnabled$1, getScratch as getScratch$1, heldKeySpec as heldKeySpec$1, keySpecShortcut, keysHeld, matchActionItem, modifierStateOf, overlaysOf as overlaysOf$1, readActionSettings, resolveBindingOverrides, resolveParams as resolveParams$1, resolveSchemaMenu, roleReader as roleReader$1, scratchKey as scratchKey$1, setScratch as setScratch$1, specificity, taggedActionItems, tuneAction } from "@weasel-js/routing";
66
66
  import { bodyPredicate, hitPredicate as hitPredicate$1 } from "@weasel-js/gestures";
67
67
  import { ActionsProvider as ActionsProvider$1, ActiveToolContextProvider as ActiveToolContextProvider$1, ActiveToolContextProviderIfRoot as ActiveToolContextProviderIfRoot$1, DepRegistryProvider as DepRegistryProvider$1, InputScope as InputScope$1, Yoke, lastOperationOf, useAction, useActionsRegistry as useActionsRegistry$1, useActiveToolContext, useCommand, useDepRegistry as useDepRegistry$1, useDepSource as useDepSource$1, useGestureDispatcher as useGestureDispatcher$1, useLastOperation, useLastOperationStore, useMenuHost as useMenuHost$1, useMenus, useOngoingAction, useOpenKeymap, useOptionalActiveToolContext as useOptionalActiveToolContext$1, useOptionalDepRegistry as useOptionalDepRegistry$1, useYoke } from "@weasel-js/routing/react";
68
68
 
69
- export { ANCHORS_TOOL_ID, AREA_SELECT_ID, ActionDisabledReason$1 as ActionDisabledReason, ActionsProvider$1 as ActionsProvider, ActiveToolContextProvider$1 as ActiveToolContextProvider, ActiveToolContextProviderIfRoot$1 as ActiveToolContextProviderIfRoot, CORNER_ANCHORS, DRAG_PAN_ID, DepRegistryProvider$1 as DepRegistryProvider, EDGE_HANDLE_MIN_RADII, GROUP_ENTRY_ID, INSERT_REPOSITION_BINDING, InputScope$1 as InputScope, KIT_STANDARD_ACTION_IDS, PATH_GESTURE_TAGS, POLYGON_INSERT_PARAMS, RESIZE_HANDLE_ANCHORS, SELECTION_MOVE_ID, SELECTION_RESIZE_ID, SELECTION_ROTATE_ID, SELECTION_TRANSFORM_ID, STAR_INSERT_PARAMS, STICKY_DEFAULTS, Yoke, actionBindings$1 as actionBindings, actionCursor, actionItemTitle, actionItems, actionSettingsParams, actionShortcuts, actionsTagged, anchorsTool, areaSelectAction, areaSelectContribution, bindingId, bodyPredicate, buildDepsFromRequires$1 as buildDepsFromRequires, clearSelectionAction, clipboardCopyAction, clipboardCutAction, clipboardPasteAction, clipboardPasteEventAction, cloneAction, commitDeleteToScene, computeSliceOps, containerScrollAction, contextMenuAction, cornerPoint, createDeleteAction, createDepRegistry, createDispatcher$1 as createDispatcher, createGroupEntryContribution, createPointerFollower, createResizeAction, createToolOptionValues, defaultCommitAdapter, defineTool, deleteAction, deleteAnchorsAction, deleteScratch, dragPanContribution, editAnchorsAction, editingLayer, enterTextEditAction, evaluateActive$1 as evaluateActive, evaluateEnabled$1 as evaluateEnabled, flipAction, getScratch$1 as getScratch, handlePoint, heldKeySpec$1 as heldKeySpec, hiddenSourceDeleteOps, hitPredicate$1 as hitPredicate, inPlane, insertAction, insertLayer, insertParams, insertRepositionAction, isCornerHandle, isToolSet, keySpecShortcut, keysHeld, lassoSelectAction, lastOperationOf, makePinchZoomAction, makeViewportWheelPanAction, makeViewportZoomAction, matchActionItem, modifierStateOf, moveAction, nudgeAnchorsDownAction, nudgeAnchorsLeftAction, nudgeAnchorsRightAction, nudgeAnchorsUpAction, onEmptyCanvas, openContextMenu, overlaysOf$1 as overlaysOf, pathOperationTags, pickTopMostHit, pinchZoomAction, placeAction, readActionSettings, refusalOf, resizeAction, resizeHandlesFor, resolveBindingOverrides, resolveParams$1 as resolveParams, resolveSchemaMenu, roleReader$1 as roleReader, rotateAction, scratchKey$1 as scratchKey, scrollRange, scrollableAt, selectAnchorAction, selectFromLasso, selectionLayer, selectionMoveBindings, selectionMoveContribution, selectionResizeBindings, selectionResizeContribution, selectionRotateBindings, selectionRotateContribution, selectionTransformBindings, selectionTransformContribution, setScratch$1 as setScratch, sliceAction, specificity, steppedOption, stickyData, stickyNodeFactory, taggedActionItems, toolIdsOf$1 as toolIdsOf, toolOptionParams, toolOptionSteps, toolSet$1 as toolSet, toolSetHas, tuneAction, useAction, useActionsRegistry$1 as useActionsRegistry, useActiveToolContext, useBooleansAdapterSource, useCommand, useDepRegistry$1 as useDepRegistry, useDepSource$1 as useDepSource, useEllipseTool, useEyedropperTool, useGestureDispatcher$1 as useGestureDispatcher, useGroupEntryContribution, useHandTool, useImageTool, useKeybindings, useLassoTool, useLastOperation, useLastOperationStore, useLatest$1 as useLatest, useLineTool, useMeasureTool, useMenuHost$1 as useMenuHost, useMenus, useOngoingAction, useOpenKeymap, useOptionalActiveToolContext$1 as useOptionalActiveToolContext, useOptionalDepRegistry$1 as useOptionalDepRegistry, usePenTool, usePencilTool, usePolygonTool, usePoseDescriptorDepSource, useRectTool, useResizePolicy, useSelectTool, useSliceDep, useSliceDepSource, useSliceTool, useStandardActions, useStarTool, useStickyTool, useTextTool, useToolOptionTunings, useToolOptionValues, useTools$1 as useTools, useYoke, viewportDragPanAction, viewportWheelPanAction, viewportZoomAction, withoutTools };
69
+ export { ANCHORS_TOOL_ID, AREA_SELECT_ID, ActionDisabledReason$1 as ActionDisabledReason, ActionsProvider$1 as ActionsProvider, ActiveToolContextProvider$1 as ActiveToolContextProvider, ActiveToolContextProviderIfRoot$1 as ActiveToolContextProviderIfRoot, CORNER_ANCHORS, DRAG_PAN_ID, DepRegistryProvider$1 as DepRegistryProvider, EDGE_HANDLE_MIN_RADII, GROUP_ENTRY_ID, INSERT_REPOSITION_BINDING, InputScope$1 as InputScope, KIT_STANDARD_ACTION_IDS, PATH_GESTURE_TAGS, POLYGON_INSERT_PARAMS, RESIZE_HANDLE_ANCHORS, SELECTION_MOVE_ID, SELECTION_RESIZE_ID, SELECTION_ROTATE_ID, SELECTION_TRANSFORM_ID, STAR_INSERT_PARAMS, STICKY_DEFAULTS, Yoke, actionBindings$1 as actionBindings, actionCursor, actionItemTitle, actionItems, actionSettingsParams, actionShortcuts, actionsTagged, anchorsTool, areaSelectAction, areaSelectContribution, bindingId, bodyPredicate, buildDepsFromRequires$1 as buildDepsFromRequires, clearSelectionAction, clipboardCopyAction, clipboardCutAction, clipboardPasteAction, clipboardPasteEventAction, cloneAction, commitDeleteToScene, computeSliceOps, containerScrollAction, contextMenuAction, cornerPoint, createDeleteAction, createDepRegistry, createDispatcher$1 as createDispatcher, createGroupEntryContribution, createPointerFollower, createResizeAction, createToolOptionValues, defaultCommitAdapter, defineTool, deleteAction, deleteAnchorsAction, deleteScratch, dragPanContribution, editAnchorsAction, editingLayer, enterTextEditAction, evaluateActive$1 as evaluateActive, evaluateEnabled$1 as evaluateEnabled, flipAction, getScratch$1 as getScratch, handlePoint, heldKeySpec$1 as heldKeySpec, hiddenSourceDeleteOps, hitPredicate$1 as hitPredicate, inPlane, insertAction, insertLayer, insertParams, insertRepositionAction, isCornerHandle, isToolSet, keySpecShortcut, keysHeld, lassoSelectAction, lastOperationOf, makePinchZoomAction, makeViewportWheelPanAction, makeViewportZoomAction, matchActionItem, modifierStateOf, moveAction, nudgeAnchorsDownAction, nudgeAnchorsLeftAction, nudgeAnchorsRightAction, nudgeAnchorsUpAction, onEmptyCanvas, openContextMenu, overlaysOf$1 as overlaysOf, pathOperationTags, pickTopMostHit, pinchZoomAction, placeAction, readActionSettings, refusalOf, resizeAction, resizeHandlesFor, resolveBindingOverrides, resolveParams$1 as resolveParams, resolveSchemaMenu, roleReader$1 as roleReader, rotateAction, scratchKey$1 as scratchKey, scrollRange, scrollableAt, selectAnchorAction, selectFromLasso, selectionLayer, selectionMoveBindings, selectionMoveContribution, selectionResizeBindings, selectionResizeContribution, selectionRotateBindings, selectionRotateContribution, selectionTransformBindings, selectionTransformContribution, setScratch$1 as setScratch, sliceAction, specificity, steppedOption, stickyData, stickyNodeFactory, taggedActionItems, toolIdsOf$1 as toolIdsOf, toolOptionParams$1 as toolOptionParams, toolOptionSteps, toolSet$1 as toolSet, toolSetHas, tuneAction, useAction, useActionsRegistry$1 as useActionsRegistry, useActiveToolContext, useBooleansAdapterSource, useCommand, useDepRegistry$1 as useDepRegistry, useDepSource$1 as useDepSource, useEllipseTool, useEyedropperTool, useGestureDispatcher$1 as useGestureDispatcher, useGroupEntryContribution, useHandTool, useImageTool, useKeybindings, useLassoTool, useLastOperation, useLastOperationStore, useLatest$1 as useLatest, useLineTool, useMeasureTool, useMenuHost$1 as useMenuHost, useMenus, useOngoingAction, useOpenKeymap, useOptionalActiveToolContext$1 as useOptionalActiveToolContext, useOptionalDepRegistry$1 as useOptionalDepRegistry, usePenTool, usePencilTool, usePolygonTool, usePoseDescriptorDepSource, useRectTool, useResizePolicy, useSelectTool, useSliceDep, useSliceDepSource, useSliceTool, useStandardActions, useStarTool, useStickyTool, useTextTool, useToolOptionTunings, useToolOptionValues, useTools$1 as useTools, useYoke, viewportDragPanAction, viewportWheelPanAction, viewportZoomAction, withoutTools };
@@ -42,6 +42,7 @@ import { sceneSelectionStore } from "../core/scene/sceneSelection.js";
42
42
  import { localizeInScene, localizeWorldPoses, worldPosesOf } from "../core/scene/worldSave.js";
43
43
  import { isSerializedScene, nodeKindOf, specsFromSerialized } from "../core/scene/serialization.js";
44
44
  import { createScene, sceneFromJSON } from "../core/scene/scene.js";
45
+ import { sceneDeclaredScopes, sceneMagnification, sceneSharedUnitScopes, sceneUnitScopes } from "../core/scene/unitScopes.js";
45
46
  import { createSetTextOp } from "../core/ops/setText.js";
46
47
  import { createSetDependsOnOp } from "../core/ops/setDependsOn.js";
47
48
  import { createSetHiddenOp, createSetLockedOp } from "../core/ops/nodeFlags.js";
@@ -51,11 +52,10 @@ import { nestedHitTester } from "../core/scene/nestedHit.js";
51
52
  import { unionOfChildrenVia } from "../core/scene/unionOfChildren.js";
52
53
  import { useScene } from "../core/scene/useScene.js";
53
54
  import { reconcileSpecs } from "../core/scene/reconcileSpecs.js";
54
- import { sceneSharedUnitScopes, sceneUnitScopes } from "../core/scene/unitScopes.js";
55
55
  import { createPoseFeed } from "../core/scene/poseFeed.js";
56
56
  import { MEASURE_AFFORDANCE_KIND, MEASURE_LAYER_ID } from "../domains/measure/measureLayer.js";
57
57
  import { measurementsContribution } from "../domains/measure/measureContribution.js";
58
58
  import { MIXED } from "@weasel-js/registry";
59
59
  import { swapOp } from "@weasel-js/history";
60
60
 
61
- export { BOOLEAN_OF_CHILDREN, CLIP_NOTHING, IDENTITY_POSE_COMPOSITION, MEASURE_ACTION_IDS, MEASURE_AFFORDANCE_KIND, MEASURE_LAYER_ID, MIXED, RECT_POSE_COMPOSITION, RIGID_POSE_COMPOSITION, SCENE_HISTORY_FORM, SceneArrivalRefused, UNION_OF_CHILDREN, annotationLayerIds, applyOpsTo, asNodeId, axisAlignedBounds, booleanGroupFields, booleanOfChildren, booleanOpOf, canBringForward, canSendBackward, carriedDescendants, childFrameAt, clipNothing, composeChildFrame, composeRectPose, composeRigidPose, composeWorldPose, composesFrames, createArrangeOp, createDeleteOp, createHistory$1 as createHistory, createInsertOp, createMeasurements, createMoveToIndexOp, createPoseFeed, createPoseOverrides, createReorderOp, createReparentOp, createScene, createScrollOffsets, createSetChildOrderOp, createSetDataOp, createSetDependsOnOp, createSetHiddenOp, createSetLayerOp, createSetLayoutOp, createSetLockedOp, createSetPathOp, createSetSelectionOp, createSetTextOp, createTransformOp, currentMeasureId, decomposeRectPose, decomposeRigidPose, definesFrame, derivedDepOf, derivedPose, dispatchApplyBatch, documentDepOf, documentOf, documentPose, effectivePose, hasChildren, heldInFrame, hidesSubtree, isAnnotationLayer, isAnnotationNode, isLeaf, isNodeHidden, isNodeLocked, isSerializedScene, localizeInScene, localizeWorldPoses, measureAt, measureBetween, measureEndSource, measureEndsOf, measureIds, measureNode, measurePose, measurementOf, measurementsContribution, nestedHitTester, nodeAsShown, nodeGates, nodeKindOf, opFactoryRegistry, rebaseLocalPose, rebuildOp, reconcileSpecs, registerOpFactory, registeredOpNames, sceneCarrySource, sceneFromJSON, scenePoseAdapter, sceneSelectionStore, sceneSharedUnitScopes, sceneUnitScopes, sceneViewPoseAdapter, scrollRectPose, scrollRigidPose, scrolledFrames, specsFromSerialized, statedFields, swapOp, translateRectPose, unionAABB, unionBounds, unionOfChildren, unionOfChildrenVia, useScene, viewPoseAdapter, worldPoseLookup, worldPosesOf, writtenBy };
61
+ export { BOOLEAN_OF_CHILDREN, CLIP_NOTHING, IDENTITY_POSE_COMPOSITION, MEASURE_ACTION_IDS, MEASURE_AFFORDANCE_KIND, MEASURE_LAYER_ID, MIXED, RECT_POSE_COMPOSITION, RIGID_POSE_COMPOSITION, SCENE_HISTORY_FORM, SceneArrivalRefused, UNION_OF_CHILDREN, annotationLayerIds, applyOpsTo, asNodeId, axisAlignedBounds, booleanGroupFields, booleanOfChildren, booleanOpOf, canBringForward, canSendBackward, carriedDescendants, childFrameAt, clipNothing, composeChildFrame, composeRectPose, composeRigidPose, composeWorldPose, composesFrames, createArrangeOp, createDeleteOp, createHistory$1 as createHistory, createInsertOp, createMeasurements, createMoveToIndexOp, createPoseFeed, createPoseOverrides, createReorderOp, createReparentOp, createScene, createScrollOffsets, createSetChildOrderOp, createSetDataOp, createSetDependsOnOp, createSetHiddenOp, createSetLayerOp, createSetLayoutOp, createSetLockedOp, createSetPathOp, createSetSelectionOp, createSetTextOp, createTransformOp, currentMeasureId, decomposeRectPose, decomposeRigidPose, definesFrame, derivedDepOf, derivedPose, dispatchApplyBatch, documentDepOf, documentOf, documentPose, effectivePose, hasChildren, heldInFrame, hidesSubtree, isAnnotationLayer, isAnnotationNode, isLeaf, isNodeHidden, isNodeLocked, isSerializedScene, localizeInScene, localizeWorldPoses, measureAt, measureBetween, measureEndSource, measureEndsOf, measureIds, measureNode, measurePose, measurementOf, measurementsContribution, nestedHitTester, nodeAsShown, nodeGates, nodeKindOf, opFactoryRegistry, rebaseLocalPose, rebuildOp, reconcileSpecs, registerOpFactory, registeredOpNames, sceneCarrySource, sceneDeclaredScopes, sceneFromJSON, sceneMagnification, scenePoseAdapter, sceneSelectionStore, sceneSharedUnitScopes, sceneUnitScopes, sceneViewPoseAdapter, scrollRectPose, scrollRigidPose, scrolledFrames, specsFromSerialized, statedFields, swapOp, translateRectPose, unionAABB, unionBounds, unionOfChildren, unionOfChildrenVia, useScene, viewPoseAdapter, worldPoseLookup, worldPosesOf, writtenBy };
@@ -22,11 +22,11 @@ import { COARSE_TARGET_SCALE, DEFAULT_DEVICE_PROFILE as DEFAULT_DEVICE_PROFILE$1
22
22
  import { fitToBounds, fitZoom } from "../core/viewport/fitToBounds.js";
23
23
  import { adjacentPage, layoutPages, pageAt, pageHolding, pageName, pageOfBounds, pagesBounds } from "../core/pages/pages.js";
24
24
  import { pagesLayer } from "../core/pages/pagesLayer.js";
25
+ import { viewportWorldRect } from "../core/viewport/viewportWorldRect.js";
25
26
  import { fitViewToPage, pageInView } from "../core/pages/fitViewToPage.js";
26
27
  import { PAGES_DOC_KEY, addPage, movePage, nextPageId, pageMembers, pagesOf, placedPagesOf, removePage, renamePage, resizePage, setPages } from "../core/pages/pageEdits.js";
27
28
  import { axisZoomFactor, zoomAt } from "../core/viewport/zoomAt.js";
28
29
  import { clampView } from "../core/viewport/clampView.js";
29
- import { viewportWorldRect } from "../core/viewport/viewportWorldRect.js";
30
30
  import { sceneNodeClientRect } from "../core/viewport/sceneNodeClientRect.js";
31
31
  import { computeFitViewport, useAutoCenter } from "../core/viewport/useAutoCenter.js";
32
32
  import { WHEEL_ZOOM_STEP, computeWheelAction, wheelPan, wheelZoom, wheelZoomFactor } from "../core/viewport/wheelHandler.js";
@@ -43,10 +43,10 @@ import { SceneViewCanvas } from "../canvas/SceneViewCanvas.js";
43
43
  import { DrawCanvas } from "../canvas/DrawCanvas.js";
44
44
  import { FALLBACK_ACCENT, accentColorOf } from "../canvas/accentColor.js";
45
45
  import { gateLayer } from "../core/layers/gateLayer.js";
46
- import { meanScale as meanScale$1, pxExtent as pxExtent$1, scaleDelta as scaleDelta$1, screenAngleOf as screenAngleOf$1, standoff as standoff$1, withinPxBox, withinPxRadius as withinPxRadius$1 } from "@weasel-js/geom";
46
+ import { meanScale as meanScale$1, pxExtent as pxExtent$1, scaleDelta as scaleDelta$1, screenAngleOf as screenAngleOf$1, standoff as standoff$1, viewRectToScreen as viewRectToScreen$1, viewScreenToWorld as viewScreenToWorld$1, viewWorldToScreen as viewWorldToScreen$1, withinPxBox, withinPxRadius as withinPxRadius$1 } from "@weasel-js/geom";
47
47
  import { DEFAULT_ALPHA_DECAY, DEFAULT_ALPHA_MIN, DEFAULT_VELOCITY_DECAY, createSimulation } from "@weasel-js/simulation";
48
48
  import { useSimulation } from "@weasel-js/simulation/react";
49
49
  import { useCanvasFocus, useVisibleRaf as useVisibleRaf$1 } from "@weasel-js/react";
50
50
  import { clientToCanvas as clientToCanvas$1 } from "@weasel-js/routing";
51
51
 
52
- export { ANCHOR_HIT_BASE_PX, COARSE_TARGET_SCALE, CanvasView, DEFAULT_ALPHA_DECAY, DEFAULT_ALPHA_MIN, DEFAULT_DEVICE_PROFILE$1 as DEFAULT_DEVICE_PROFILE, DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, DEFAULT_VELOCITY_DECAY, DeviceProfileProvider, DrawCanvas, FALLBACK_ACCENT, HANDLE_BASE_PX, PAGES_DOC_KEY, ROTATION_HANDLE_BASE_PX, SceneViewCanvas, VERSION, VIEW_ANIMATION_KEY, VIEW_MARKER_DEFAULT_STYLE, VIEW_MARKER_DRAG, VIEW_MARKER_HIT_SLOP_PX, ViewMarker, WHEEL_ZOOM_STEP, ZOOM_FLOOR, accentColorOf, addPage, adjacentPage, aimSpace2d, axisZoomFactor, clampView, clientToCanvas$1 as clientToCanvas, computeFitViewport, computeWheelAction, createSimulation, createVelocityTracker, createViewMarkerContribution, createViewMarkerLayer, createViewResolver, createViewportLayer, deriveParallaxView, fitToBounds, fitViewToBounds, fitViewToPage, fitZoom, fromPlane, gateLayer, grabViewMarker, interpolateView, isPlainObject, isRectAim, layoutPages, meanScale$1 as meanScale, movePage, nextPageId, normalizeView, normalizeZoom$1 as normalizeZoom, pageAt, pageHolding, pageInView, pageMembers, pageName, pageOfBounds, pagesBounds, pagesLayer, pagesOf, placedPagesOf, planeMap, planeMatrix, planeToPlane, pxExtent$1 as pxExtent, rectAim, rectFromPlane, rectToPlane, removePage, renamePage, resizePage, resolveDeviceProfile$1 as resolveDeviceProfile, scaleDelta$1 as scaleDelta, sceneNodeClientRect, screenAngleOf$1 as screenAngleOf, screenToWorld, setPages, stableStringify, standoff$1 as standoff, startThresholdDrag, toPlane, useAutoCenter, useCanvasFocus, useCanvasSize, useDecayLoop, useDeviceProfile, useDragHandle, useDropZone, useElementSize, useHandleDrag, useNodeOverlayFrame, usePoseRun, useSimulation, useVelocityTracker, useViewAnimation, useViewAnimationOn, useVisibleRaf$1 as useVisibleRaf, viewAxes, viewForAim, viewMarkerDragAction, viewToTransform, viewZoom, viewportWorldRect, watchDevicePixelRatio, wheelPan, wheelZoom, wheelZoomFactor, withinPxBox, withinPxRadius$1 as withinPxRadius, worldToScreen, zoomAt };
52
+ export { ANCHOR_HIT_BASE_PX, COARSE_TARGET_SCALE, CanvasView, DEFAULT_ALPHA_DECAY, DEFAULT_ALPHA_MIN, DEFAULT_DEVICE_PROFILE$1 as DEFAULT_DEVICE_PROFILE, DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, DEFAULT_VELOCITY_DECAY, DeviceProfileProvider, DrawCanvas, FALLBACK_ACCENT, HANDLE_BASE_PX, PAGES_DOC_KEY, ROTATION_HANDLE_BASE_PX, SceneViewCanvas, VERSION, VIEW_ANIMATION_KEY, VIEW_MARKER_DEFAULT_STYLE, VIEW_MARKER_DRAG, VIEW_MARKER_HIT_SLOP_PX, ViewMarker, WHEEL_ZOOM_STEP, ZOOM_FLOOR, accentColorOf, addPage, adjacentPage, aimSpace2d, axisZoomFactor, clampView, clientToCanvas$1 as clientToCanvas, computeFitViewport, computeWheelAction, createSimulation, createVelocityTracker, createViewMarkerContribution, createViewMarkerLayer, createViewResolver, createViewportLayer, deriveParallaxView, fitToBounds, fitViewToBounds, fitViewToPage, fitZoom, fromPlane, gateLayer, grabViewMarker, interpolateView, isPlainObject, isRectAim, layoutPages, meanScale$1 as meanScale, movePage, nextPageId, normalizeView, normalizeZoom$1 as normalizeZoom, pageAt, pageHolding, pageInView, pageMembers, pageName, pageOfBounds, pagesBounds, pagesLayer, pagesOf, placedPagesOf, planeMap, planeMatrix, planeToPlane, pxExtent$1 as pxExtent, rectAim, rectFromPlane, rectToPlane, removePage, renamePage, resizePage, resolveDeviceProfile$1 as resolveDeviceProfile, scaleDelta$1 as scaleDelta, sceneNodeClientRect, screenAngleOf$1 as screenAngleOf, screenToWorld, setPages, stableStringify, standoff$1 as standoff, startThresholdDrag, toPlane, useAutoCenter, useCanvasFocus, useCanvasSize, useDecayLoop, useDeviceProfile, useDragHandle, useDropZone, useElementSize, useHandleDrag, useNodeOverlayFrame, usePoseRun, useSimulation, useVelocityTracker, useViewAnimation, useViewAnimationOn, useVisibleRaf$1 as useVisibleRaf, viewAxes, viewForAim, viewMarkerDragAction, viewRectToScreen$1 as viewRectToScreen, viewScreenToWorld$1 as viewScreenToWorld, viewToTransform, viewWorldToScreen$1 as viewWorldToScreen, viewZoom, viewportWorldRect, watchDevicePixelRatio, wheelPan, wheelZoom, wheelZoomFactor, withinPxBox, withinPxRadius$1 as withinPxRadius, worldToScreen, zoomAt };
@@ -1,12 +1,12 @@
1
- import { AUTO_POSE_DESCRIPTOR } from "../core/geometry/autoPoseDescriptor.js";
1
+ import { registerMountedCanvas } from "./mountedCanvases.js";
2
2
  import { useViewHelpers } from "./useViewHelpers.js";
3
+ import { useViewLayerGate } from "./useViewLayerGate.js";
4
+ import { useSurfaceInput } from "./useSurfaceInput.js";
3
5
  import { useOptionalViewRegistry } from "./viewRegistry.js";
4
6
  import { useCanvasSurface } from "./useCanvasSurface.js";
5
7
  import { SurfaceCanvas } from "./SurfaceCanvas.js";
6
8
  import { useSurfaceSize } from "./useSurfaceSize.js";
7
- import { registerMountedCanvas } from "./mountedCanvases.js";
8
- import { useViewLayerGate } from "./useViewLayerGate.js";
9
- import { useSurfaceInput } from "./useSurfaceInput.js";
9
+ import { AUTO_POSE_DESCRIPTOR } from "../core/geometry/autoPoseDescriptor.js";
10
10
  import { useDebugSink } from "../debug/useDebugSink.js";
11
11
  import { useToolCursor } from "./useToolCursor.js";
12
12
  import { useCanvasElements } from "./useCanvasElements.js";
@@ -22,7 +22,7 @@ import { forwardRef, useCallback, useEffect, useInsertionEffect, useLayoutEffect
22
22
  import { useLatest } from "@weasel-js/react";
23
23
  import { jsx } from "react/jsx-runtime";
24
24
 
25
- //#region src/canvas/Canvas.tsx
25
+ // src/canvas/Canvas.tsx
26
26
  /**
27
27
  * Low-level WebGL surface + viewport primitive. Composes layers into a single GL render pass,
28
28
  * applies a view transform, and delivers hover to the layers that ask for it. It routes no
@@ -203,6 +203,5 @@ function CanvasInner(props, ref) {
203
203
  * `adapter` prop. */
204
204
  var Canvas = forwardRef(CanvasInner);
205
205
 
206
- //#endregion
207
206
  export { Canvas };
208
207
  //# sourceMappingURL=Canvas.js.map