@weasel-js/core 1.11.0 → 1.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. package/CHANGELOG.md +427 -0
  2. package/README.md +1 -1
  3. package/dist/animation/index.js +3 -3
  4. package/dist/animation/rig/bindRig.js +1 -1
  5. package/dist/animation/rig/rigNode.js.map +1 -1
  6. package/dist/barrel/canvas.js +7 -3
  7. package/dist/barrel/interactions.js +5 -4
  8. package/dist/barrel/paths.js +3 -3
  9. package/dist/barrel/renderer.js +3 -2
  10. package/dist/barrel/routing.js +6 -11
  11. package/dist/barrel/scene.js +8 -5
  12. package/dist/barrel/viewport.js +4 -3
  13. package/dist/canvas/Canvas.js +3 -1
  14. package/dist/canvas/Canvas.js.map +1 -1
  15. package/dist/canvas/SceneCanvas/SceneCanvasInput.js +17 -3
  16. package/dist/canvas/SceneCanvas/SceneCanvasInput.js.map +1 -1
  17. package/dist/canvas/SceneCanvas/builtinToolSets.js +30 -0
  18. package/dist/canvas/SceneCanvas/builtinToolSets.js.map +1 -0
  19. package/dist/canvas/SceneCanvas/canvasPassThrough.js +1 -0
  20. package/dist/canvas/SceneCanvas/canvasPassThrough.js.map +1 -1
  21. package/dist/canvas/SceneCanvas/coordTrace.js +5 -16
  22. package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
  23. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +5 -0
  24. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  25. package/dist/canvas/SceneCanvas/features.js +45 -5
  26. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  27. package/dist/canvas/SceneCanvas/props.js +1 -11
  28. package/dist/canvas/SceneCanvas/props.js.map +1 -1
  29. package/dist/canvas/SceneCanvas/toolRegistry.js +8 -4
  30. package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -1
  31. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +1 -11
  32. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
  33. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
  34. package/dist/canvas/SceneCanvas/useBuiltinTools.js +2 -9
  35. package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -1
  36. package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js +93 -0
  37. package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js.map +1 -0
  38. package/dist/canvas/SceneCanvas/useCanvasSelection.js +7 -2
  39. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -1
  40. package/dist/canvas/SceneCanvas/useCanvasTools.js +8 -8
  41. package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -1
  42. package/dist/canvas/SceneCanvas/useNodeKinds.js +1 -1
  43. package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -1
  44. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +13 -2
  45. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -1
  46. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +1 -3
  47. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js.map +1 -1
  48. package/dist/canvas/SceneCanvas/useSceneChrome.js +6 -7
  49. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -1
  50. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +5 -3
  51. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js.map +1 -1
  52. package/dist/canvas/SceneCanvas/useScenePicking.js +2 -3
  53. package/dist/canvas/SceneCanvas/useScenePicking.js.map +1 -1
  54. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +2 -1
  55. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  56. package/dist/canvas/SceneCanvas/useSceneStandardActions.js +3 -4
  57. package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -1
  58. package/dist/canvas/SceneCanvas.js +16 -14
  59. package/dist/canvas/SceneCanvas.js.map +1 -1
  60. package/dist/canvas/SurfaceCanvas.js +5 -22
  61. package/dist/canvas/SurfaceCanvas.js.map +1 -1
  62. package/dist/canvas/canvasRenderer.js +9 -5
  63. package/dist/canvas/canvasRenderer.js.map +1 -1
  64. package/dist/canvas/contextAttributes.js +14 -0
  65. package/dist/canvas/contextAttributes.js.map +1 -0
  66. package/dist/canvas/deps/editAnchors.js +9 -113
  67. package/dist/canvas/deps/editAnchors.js.map +1 -1
  68. package/dist/canvas/deps/insert.js +4 -2
  69. package/dist/canvas/deps/insert.js.map +1 -1
  70. package/dist/canvas/deps/pathEditCommits.js +193 -0
  71. package/dist/canvas/deps/pathEditCommits.js.map +1 -0
  72. package/dist/canvas/deps/snap.js +12 -9
  73. package/dist/canvas/deps/snap.js.map +1 -1
  74. package/dist/canvas/deps/transformFollowers.js +20 -0
  75. package/dist/canvas/deps/transformFollowers.js.map +1 -0
  76. package/dist/canvas/derivedPath.js +20 -1
  77. package/dist/canvas/derivedPath.js.map +1 -1
  78. package/dist/canvas/drawnBounds.js +29 -3
  79. package/dist/canvas/drawnBounds.js.map +1 -1
  80. package/dist/canvas/nodeShapes/derivedPainter.js +9 -1
  81. package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
  82. package/dist/canvas/nodeShapes/pathPainter.js +3 -2
  83. package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
  84. package/dist/canvas/nodeShapes/shapePainter.js +1 -1
  85. package/dist/canvas/overlayRoleStrokes.js +12 -0
  86. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  87. package/dist/canvas/pathOverlay.js +27 -7
  88. package/dist/canvas/pathOverlay.js.map +1 -1
  89. package/dist/canvas/renderDebugSnapshot.js +1 -0
  90. package/dist/canvas/renderDebugSnapshot.js.map +1 -1
  91. package/dist/canvas/renderSceneToPixels.js +6 -5
  92. package/dist/canvas/renderSceneToPixels.js.map +1 -1
  93. package/dist/canvas/sceneAdapter.js.map +1 -1
  94. package/dist/canvas/useCanvasPaint.js +2 -1
  95. package/dist/canvas/useCanvasPaint.js.map +1 -1
  96. package/dist/canvas/useInFlightBounds.js +52 -0
  97. package/dist/canvas/useInFlightBounds.js.map +1 -0
  98. package/dist/canvas/useViewHelpers.js +7 -9
  99. package/dist/canvas/useViewHelpers.js.map +1 -1
  100. package/dist/clipboard.d.ts +3 -2
  101. package/dist/{clone-DZDrfIlU.d.ts → clone-C3e0OTuF.d.ts} +8 -21
  102. package/dist/clone.d.ts +4 -3
  103. package/dist/core/geometry/autoPoseDescriptor.js +1 -1
  104. package/dist/core/ops/setDependsOn.js +37 -0
  105. package/dist/core/ops/setDependsOn.js.map +1 -0
  106. package/dist/core/ops/writtenBy.js +53 -0
  107. package/dist/core/ops/writtenBy.js.map +1 -0
  108. package/dist/core/pages/fitViewToPage.js +12 -1
  109. package/dist/core/pages/fitViewToPage.js.map +1 -1
  110. package/dist/core/pages/pageEdits.js +164 -0
  111. package/dist/core/pages/pageEdits.js.map +1 -0
  112. package/dist/core/pages/pages.js +30 -1
  113. package/dist/core/pages/pages.js.map +1 -1
  114. package/dist/core/scene/NodeRouting.js +8 -3
  115. package/dist/core/scene/NodeRouting.js.map +1 -1
  116. package/dist/core/scene/arrivalWindow.js.map +1 -1
  117. package/dist/core/scene/carryDescendants.js +51 -0
  118. package/dist/core/scene/carryDescendants.js.map +1 -0
  119. package/dist/core/scene/docValues.js +57 -0
  120. package/dist/core/scene/docValues.js.map +1 -0
  121. package/dist/core/scene/editPass.js +111 -0
  122. package/dist/core/scene/editPass.js.map +1 -0
  123. package/dist/core/scene/effectivePose.js +7 -1
  124. package/dist/core/scene/effectivePose.js.map +1 -1
  125. package/dist/core/scene/fieldEdits.js +4 -1
  126. package/dist/core/scene/fieldEdits.js.map +1 -1
  127. package/dist/core/scene/historyFacade.js +1 -0
  128. package/dist/core/scene/historyFacade.js.map +1 -1
  129. package/dist/core/scene/layoutPass.js +28 -3
  130. package/dist/core/scene/layoutPass.js.map +1 -1
  131. package/dist/core/scene/recorder.js +28 -19
  132. package/dist/core/scene/recorder.js.map +1 -1
  133. package/dist/core/scene/scene.js +15 -9
  134. package/dist/core/scene/scene.js.map +1 -1
  135. package/dist/core/scene/sceneChanges.js +13 -0
  136. package/dist/core/scene/sceneChanges.js.map +1 -0
  137. package/dist/core/scene/sceneEdits.js +8 -1
  138. package/dist/core/scene/sceneEdits.js.map +1 -1
  139. package/dist/core/scene/sceneMutators.js +1 -0
  140. package/dist/core/scene/sceneMutators.js.map +1 -1
  141. package/dist/core/scene/sceneRecording.js +20 -3
  142. package/dist/core/scene/sceneRecording.js.map +1 -1
  143. package/dist/core/scene/sceneSelection.js +4 -1
  144. package/dist/core/scene/sceneSelection.js.map +1 -1
  145. package/dist/core/scene/sceneState.js +11 -5
  146. package/dist/core/scene/sceneState.js.map +1 -1
  147. package/dist/core/scene/serialization.js +5 -3
  148. package/dist/core/scene/serialization.js.map +1 -1
  149. package/dist/core/scene/types.js.map +1 -1
  150. package/dist/core/scene/unitScopes.js +19 -1
  151. package/dist/core/scene/unitScopes.js.map +1 -1
  152. package/dist/core/selection/usePublishSceneSelection.js +6 -12
  153. package/dist/core/selection/usePublishSceneSelection.js.map +1 -1
  154. package/dist/core/shapeKinds.js +25 -11
  155. package/dist/core/shapeKinds.js.map +1 -1
  156. package/dist/{cornerHandles-Camw_yeu.d.ts → cornerHandles-BHuoMs1o.d.ts} +1 -1
  157. package/dist/debug/createDebugOverlayLayer.js +16 -111
  158. package/dist/debug/createDebugOverlayLayer.js.map +1 -1
  159. package/dist/debug/createDebugSink.js +2 -1
  160. package/dist/debug/createDebugSink.js.map +1 -1
  161. package/dist/debug/defaultTheme.js +4 -2
  162. package/dist/debug/defaultTheme.js.map +1 -1
  163. package/dist/debug/features.js +17 -0
  164. package/dist/debug/features.js.map +1 -0
  165. package/dist/debug/overlayPanels.js +117 -0
  166. package/dist/debug/overlayPanels.js.map +1 -0
  167. package/dist/debug/parseDebugFlags.js +4 -13
  168. package/dist/debug/parseDebugFlags.js.map +1 -1
  169. package/dist/{depSchema-Cgfu_G9s.d.ts → depSchema-BpZNOv7q.d.ts} +114 -892
  170. package/dist/devtools/handlers.js +112 -0
  171. package/dist/devtools/handlers.js.map +1 -0
  172. package/dist/devtools/history.js +71 -0
  173. package/dist/devtools/history.js.map +1 -0
  174. package/dist/devtools/hook.js +74 -0
  175. package/dist/devtools/hook.js.map +1 -0
  176. package/dist/devtools/label.js +25 -0
  177. package/dist/devtools/label.js.map +1 -0
  178. package/dist/devtools/notices.js +58 -0
  179. package/dist/devtools/notices.js.map +1 -0
  180. package/dist/devtools/protocol.js +7 -0
  181. package/dist/devtools/protocol.js.map +1 -0
  182. package/dist/devtools/registry.js +90 -0
  183. package/dist/devtools/registry.js.map +1 -0
  184. package/dist/devtools/root.js +80 -0
  185. package/dist/devtools/root.js.map +1 -0
  186. package/dist/devtools/serialize.js +86 -0
  187. package/dist/devtools/serialize.js.map +1 -0
  188. package/dist/devtools/session.js +111 -0
  189. package/dist/devtools/session.js.map +1 -0
  190. package/dist/devtools/transport.js +67 -0
  191. package/dist/devtools/transport.js.map +1 -0
  192. package/dist/devtools/useDevtoolsRoot.js +81 -0
  193. package/dist/devtools/useDevtoolsRoot.js.map +1 -0
  194. package/dist/devtools-protocol.d.ts +435 -0
  195. package/dist/devtools-protocol.js +7 -0
  196. package/dist/devtools.d.ts +8 -0
  197. package/dist/devtools.js +12 -0
  198. package/dist/devtools.js.map +1 -0
  199. package/dist/features/chrome-caps/useHoverTracking.js +16 -10
  200. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
  201. package/dist/features/ingestion/contentHandlers.js +25 -2
  202. package/dist/features/ingestion/contentHandlers.js.map +1 -1
  203. package/dist/features/measure/measureCommands.js +7 -5
  204. package/dist/features/measure/measureCommands.js.map +1 -1
  205. package/dist/features/paths/index.js +2 -2
  206. package/dist/features/paths/pathEditExtension.js.map +1 -1
  207. package/dist/features/paths/pathSnap/pathSnapSource.js +5 -5
  208. package/dist/features/paths/pathSnap/pathSnapSource.js.map +1 -1
  209. package/dist/features/paths/pathSnap/sceneIndex.js +10 -3
  210. package/dist/features/paths/pathSnap/sceneIndex.js.map +1 -1
  211. package/dist/features/selection/selectionPose.js +4 -1
  212. package/dist/features/selection/selectionPose.js.map +1 -1
  213. package/dist/features/snap/gather.js +9 -1
  214. package/dist/features/snap/gather.js.map +1 -1
  215. package/dist/features/snap/lazySession.js +17 -0
  216. package/dist/features/snap/lazySession.js.map +1 -0
  217. package/dist/features/snap/marks.js.map +1 -1
  218. package/dist/features/snap/probes2d.js +27 -19
  219. package/dist/features/snap/probes2d.js.map +1 -1
  220. package/dist/features/snap/readoutLayer.js.map +1 -1
  221. package/dist/features/snap/roles.js +2 -1
  222. package/dist/features/snap/roles.js.map +1 -1
  223. package/dist/features/snap/rotationSource.js +25 -8
  224. package/dist/features/snap/rotationSource.js.map +1 -1
  225. package/dist/features/snap/sceneSession2d.js +6 -4
  226. package/dist/features/snap/sceneSession2d.js.map +1 -1
  227. package/dist/features/snap/session2d.js +37 -23
  228. package/dist/features/snap/session2d.js.map +1 -1
  229. package/dist/features/snap/spanSnap.js +5 -2
  230. package/dist/features/snap/spanSnap.js.map +1 -1
  231. package/dist/icons.table.js +1 -1
  232. package/dist/icons.table.js.map +1 -1
  233. package/dist/icons.table.json +0 -10
  234. package/dist/index.d.ts +701 -696
  235. package/dist/index.js +35 -29
  236. package/dist/interactions/actions/align/action.js +6 -4
  237. package/dist/interactions/actions/align/action.js.map +1 -1
  238. package/dist/interactions/actions/align/align.js.map +1 -1
  239. package/dist/interactions/actions/booleans/action.js +7 -1
  240. package/dist/interactions/actions/booleans/action.js.map +1 -1
  241. package/dist/interactions/actions/clone/action.js +1 -1
  242. package/dist/interactions/actions/clone/behaviors.js +4 -4
  243. package/dist/interactions/actions/clone/behaviors.js.map +1 -1
  244. package/dist/interactions/actions/defaults/bendSegment.js +1 -1
  245. package/dist/interactions/actions/defaults/bendSegment.js.map +1 -1
  246. package/dist/interactions/actions/defaults/createPaintAction.js +1 -1
  247. package/dist/interactions/actions/defaults/delete.js +48 -39
  248. package/dist/interactions/actions/defaults/delete.js.map +1 -1
  249. package/dist/interactions/actions/defaults/duplicate.js +1 -1
  250. package/dist/interactions/actions/defaults/group.js +2 -2
  251. package/dist/interactions/actions/defaults/ingest.js +7 -5
  252. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  253. package/dist/interactions/actions/defaults/nudge.js +13 -38
  254. package/dist/interactions/actions/defaults/nudge.js.map +1 -1
  255. package/dist/interactions/actions/distribute/action.js +6 -4
  256. package/dist/interactions/actions/distribute/action.js.map +1 -1
  257. package/dist/interactions/actions/drawnBoxes.js +2 -1
  258. package/dist/interactions/actions/drawnBoxes.js.map +1 -1
  259. package/dist/interactions/actions/edit-anchors/action.js +3 -6
  260. package/dist/interactions/actions/edit-anchors/action.js.map +1 -1
  261. package/dist/interactions/actions/edit-anchors/preview.js +41 -8
  262. package/dist/interactions/actions/edit-anchors/preview.js.map +1 -1
  263. package/dist/interactions/actions/flip/action.js +6 -4
  264. package/dist/interactions/actions/flip/action.js.map +1 -1
  265. package/dist/interactions/actions/gestureLifecycle.js +5 -2
  266. package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
  267. package/dist/interactions/actions/insert/action.js +1 -2
  268. package/dist/interactions/actions/insert/action.js.map +1 -1
  269. package/dist/interactions/actions/insert/commit.js +1 -1
  270. package/dist/interactions/actions/insert/parent.js +11 -0
  271. package/dist/interactions/actions/insert/parent.js.map +1 -0
  272. package/dist/interactions/actions/insert/placeAction.js +7 -2
  273. package/dist/interactions/actions/insert/placeAction.js.map +1 -1
  274. package/dist/interactions/actions/insert/session.js +5 -1
  275. package/dist/interactions/actions/insert/session.js.map +1 -1
  276. package/dist/interactions/actions/move/action.js +8 -4
  277. package/dist/interactions/actions/move/action.js.map +1 -1
  278. package/dist/interactions/actions/move/behaviors/layoutDrop.js +0 -1
  279. package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -1
  280. package/dist/interactions/actions/move/behaviors/snapToContainer.js +1 -1
  281. package/dist/interactions/actions/move/capture.js +1 -1
  282. package/dist/interactions/actions/move/commit/index.js +0 -2
  283. package/dist/interactions/actions/move/commit/index.js.map +1 -1
  284. package/dist/interactions/actions/move/commit/layoutDrop.js +2 -2
  285. package/dist/interactions/actions/move/commit/layoutRelease.js +2 -2
  286. package/dist/interactions/actions/move/commit/reparent.js +11 -5
  287. package/dist/interactions/actions/move/commit/reparent.js.map +1 -1
  288. package/dist/interactions/actions/move/frame.js +4 -10
  289. package/dist/interactions/actions/move/frame.js.map +1 -1
  290. package/dist/interactions/actions/move/landedDescendants.js +20 -17
  291. package/dist/interactions/actions/move/landedDescendants.js.map +1 -1
  292. package/dist/interactions/actions/move/layout/container.js +2 -1
  293. package/dist/interactions/actions/move/layout/container.js.map +1 -1
  294. package/dist/interactions/actions/move/layout/dragged.js +1 -1
  295. package/dist/interactions/actions/move/layout/dropPass.js +18 -1
  296. package/dist/interactions/actions/move/layout/dropPass.js.map +1 -1
  297. package/dist/interactions/actions/move/layout/exits.js +5 -5
  298. package/dist/interactions/actions/move/layout/exits.js.map +1 -1
  299. package/dist/interactions/actions/move/session.js +14 -3
  300. package/dist/interactions/actions/move/session.js.map +1 -1
  301. package/dist/interactions/actions/move/translate.js +8 -37
  302. package/dist/interactions/actions/move/translate.js.map +1 -1
  303. package/dist/interactions/actions/moveNodes.js +87 -0
  304. package/dist/interactions/actions/moveNodes.js.map +1 -0
  305. package/dist/interactions/actions/planeInput.js.map +1 -1
  306. package/dist/interactions/actions/resize/action.js +83 -72
  307. package/dist/interactions/actions/resize/action.js.map +1 -1
  308. package/dist/interactions/actions/resize/commit.js +2 -1
  309. package/dist/interactions/actions/resize/commit.js.map +1 -1
  310. package/dist/interactions/actions/resize/session.js +2 -0
  311. package/dist/interactions/actions/resize/session.js.map +1 -1
  312. package/dist/interactions/actions/resolvePreviews.js +3 -3
  313. package/dist/interactions/actions/resolvePreviews.js.map +1 -1
  314. package/dist/interactions/actions/rotate/action.js +7 -4
  315. package/dist/interactions/actions/rotate/action.js.map +1 -1
  316. package/dist/interactions/actions/rotate/commit.js +2 -1
  317. package/dist/interactions/actions/rotate/commit.js.map +1 -1
  318. package/dist/interactions/actions/rotate/session.js +2 -0
  319. package/dist/interactions/actions/rotate/session.js.map +1 -1
  320. package/dist/interactions/actions/selectionSubtree.js +13 -2
  321. package/dist/interactions/actions/selectionSubtree.js.map +1 -1
  322. package/dist/interactions/actions/testUtils.js.map +1 -1
  323. package/dist/interactions/actions/transform-again/action.js +5 -6
  324. package/dist/interactions/actions/transform-again/action.js.map +1 -1
  325. package/dist/interactions/actions/transformFinish.js +106 -0
  326. package/dist/interactions/actions/transformFinish.js.map +1 -0
  327. package/dist/kitSettingsSchema.js +0 -4
  328. package/dist/kitSettingsSchema.js.map +1 -1
  329. package/dist/move.d.ts +5 -4
  330. package/dist/{options-p9GZMXbY.d.ts → options-DBxEryYq.d.ts} +1 -1
  331. package/dist/resize.d.ts +4 -3
  332. package/dist/routing.d.ts +1 -1
  333. package/dist/routing.js +2 -2
  334. package/dist/test-hook/createTestHook.js +1 -1
  335. package/dist/test-hook/createTestHook.js.map +1 -1
  336. package/dist/test-hook/useTestHook.js +2 -1
  337. package/dist/test-hook/useTestHook.js.map +1 -1
  338. package/dist/test-seams.d.ts +9 -5
  339. package/dist/tools/builtin/pen/penHandle.js +3 -5
  340. package/dist/tools/builtin/pen/penHandle.js.map +1 -1
  341. package/dist/tools/index.js +26 -0
  342. package/dist/{types-CHVXGfYm.d.ts → types-7puAuVD2.d.ts} +3 -262
  343. package/dist/types-BN9hbdMI.d.ts +184 -0
  344. package/dist/types-CniVctmk.d.ts +949 -0
  345. package/dist/types-oFeQ5VjV.d.ts +264 -0
  346. package/dist/version.js +1 -1
  347. package/package.json +35 -25
  348. package/dist/canvas/SceneCanvas/useBuiltinRigTools.js +0 -65
  349. package/dist/canvas/SceneCanvas/useBuiltinRigTools.js.map +0 -1
  350. package/dist/tools/builtin/bone/boneActions.js +0 -156
  351. package/dist/tools/builtin/bone/boneActions.js.map +0 -1
  352. package/dist/tools/builtin/bone/boneOverlay.js +0 -71
  353. package/dist/tools/builtin/bone/boneOverlay.js.map +0 -1
  354. package/dist/tools/builtin/bone/placedRig.js +0 -28
  355. package/dist/tools/builtin/bone/placedRig.js.map +0 -1
  356. package/dist/tools/builtin/bone/rigEditState.js +0 -30
  357. package/dist/tools/builtin/bone/rigEditState.js.map +0 -1
  358. package/dist/tools/builtin/bone/useBoneTool.js +0 -125
  359. package/dist/tools/builtin/bone/useBoneTool.js.map +0 -1
  360. package/dist/tools/builtin/weight/useWeightTool.js +0 -101
  361. package/dist/tools/builtin/weight/useWeightTool.js.map +0 -1
  362. package/dist/tools/builtin/weight/weightActions.js +0 -140
  363. package/dist/tools/builtin/weight/weightActions.js.map +0 -1
  364. package/dist/tools/builtin/weight/weightOverlay.js +0 -78
  365. package/dist/tools/builtin/weight/weightOverlay.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,24 +1,30 @@
1
- import { R as RectPose, i as SystemLayerSpec, A as AddNodeSpec, j as RegisteredOp, k as SceneRegistry, l as PoseComposition, L as LayoutFrame, N as Node, D as Dims, m as RenderLayer, n as LayerHit, V as ViewAnimationOptions, a as PathEditExtension, o as PoseAdapter, S as Scene, p as ViewportDims, F as FitViewToBoundsOptions, q as RedrawSource, r as EditAnchorsParams, I as InertiaConfig, E as EditAnchorsDep, G as GestureLifecycleOptions, s as SliceDep, t as StickyStyle, u as PoseOverrides, C as ContentHandlerEntry, v as PoseRemoval, w as PoseWrite, x as ScenePoseReports, y as AnchorMarkerShape, P as PathEditMark, z as ChromeState, B as LayerGroup, b as SnapSource, J as SerializedScene, K as GeometryProjection, M as InsertNodeFactory, O as InsertPaint, Q as SvgIngestOptions, T as SceneCanvasSnap, U as Affordance, W as AffordanceRegion, X as AffordanceBinding, Y as CommonAffordanceScratch, Z as TextOverflow, $ as CreateOutlinesAdapter, a0 as PaintKindEntry, a1 as DerivePoseFn, a2 as DerivePathFn, a3 as DerivedDep, a4 as PathEditTarget, a5 as PathSymmetryDep, H as HandleLocks, a6 as BooleanOpOptions, a7 as BooleansAdapter, a8 as BooleanOp, a9 as PathPaint, aa as BooleanOpResult, ab as BooleanStrokes, ac as SnapMods, ad as SourceCandidate, ae as SnapProbeAt, af as SnapCollect, ag as SnapMark, c as SnapGesture, ah as SnapDep, ai as SnapOutcome } from './depSchema-Cgfu_G9s.js';
2
- export { aj as AddLayerSpec, ak as AngleCandidate, al as AngleCollect, am as AnimateToBoundsOptions, an as AreaSelectDep, ao as Bivariant, ap as BooleanOpPreview, aq as BooleanPreviewPiece, ar as ClipFromPoseFn, as as ClipboardDep, at as ClipboardIngestCtx, au as ContainerNode, av as CopiesFromPoseFn, aw as CreateOutlinesResult, ax as CustomPaintContext, ay as DEFAULT_LAYER_RETAIN, az as DecayLoopConfig, aA as FinishedEditFrame, aB as FinishedPathEdit, aC as GEOMETRY_BOUND_DATA, aD as HandleLock, aE as HitTestView, aF as IDENTITY_POSE_COMPOSITION, aG as IngestCtx, aH as IngestionDep, aI as InsertDep, aJ as InsertEnds, aK as InsertExtras, aL as InsertIntoDep, aM as InsertLive, aN as LassoSelectDep, aO as LayerCommandCache, aP as LayerDrawFailure, aQ as LayerDrawSpan, aR as LayerRecord, aS as LayerRetainPolicy, aT as LayoutDep, aU as LayoutMove, aV as LeafNode, aW as Locus, aX as MinSize, aY as NodeAtPointDep, aZ as OutlinePathSpec, a_ as PATH_OVERLAY_ROLES, a$ as PaintKind, b0 as PaintKindEditorProps, b1 as PaintKindFamily, b2 as PaintKindLoader, b3 as PanBounds, b4 as PathEditDrag, b5 as PathEditDragStart, b6 as PathEditFinishCtx, b7 as PathEditHandleMove, b8 as PathEditMarksCtx, b9 as PathEditOther, ba as PathEditPart, bb as PathEditStore, bc as PathForm, bd as PathOverlay, be as PathOverlayOptions, bf as PathOverlayStyle, bg as PathRepresentation, bh as PoseClosure, bi as PoseHold, bj as PoseOverride, bk as PoseWriteOrigin, bl as PreviewPathsDep, bm as RemovedNode, bn as ResizePolicy, bo as SCENE_HISTORY_FORM, bp as STICKY_DEFAULTS, bq as SceneArrivalHandler, br as SerializedLayer, bs as SerializedNode, bt as SerializedSceneHistory, bu as SnapBegin, d as SnapConstrain, bv as SnapEdge, bw as SnapEdges, f as SnapGeometry, bx as SnapMarks, g as SnapOutcomeStore, by as SnapReadoutDep, bz as SnapReadoutStyle, e as SnapResizeBox, h as SnapSession, bA as SvgUnpacker, bB as SystemLayerRecord, bC as TextEditDep, bD as TextNodeData, bE as TransientPath, bF as UserLayerRecord, bG as VIEW_ANIMATION_KEY, bH as ViewAnimationApi, bI as ViewApi, bJ as ViewChannel, bK as applyBooleanOp, bL as applyCreateOutlines, bM as asNodeId, bN as asPaint, bO as composeWorldPose, bP as composesFrames, bQ as createPathOverlay, bR as createSnapOutcomeStore, bS as createSnapReadoutLayer, bT as depsUnchanged, bU as drawLayers, bV as drawOneLayer, bW as fitViewToBounds, bX as getPaintKind, bY as isLayerPainted, bZ as isLayerVisible, b_ as listGradientKinds, b$ as listPaintKinds, c0 as minSizeOf, c1 as paintKindOf, c2 as paintKindRegistry, c3 as paintedLayers, c4 as paintsLayer, c5 as paletteInsertPaint, c6 as pathPaintOf, c7 as patternFamily, c8 as previewBooleanOp, c9 as rebaseLocalPose, ca as registerContentHandler, cb as registerPaintKind, cc as registerPaintKindLoader, cd as seedTile, ce as stickyData, cf as stickyNodeFactory, cg as subscribeToSources, ch as switchGradientKind, ci as textBoxOf, cj as useDecayLoop, ck as useViewAnimation, cl as useViewAnimationOn, cm as viewAxes, cn as withoutGeometryBoundData } from './depSchema-Cgfu_G9s.js';
3
- import { View, Scale2, Path, FramedBox, PolygonPath, Point as Point$3, AnchorField, AnchorSet, GlMat3, PlacementAlign, Rect, Affine, PathSnapKind, PathInWorldPose, AnchorFieldValues, NumberEntry, JoinOptions, SegmentHit, AnchorSymmetry, BlendPathsOptions, BendAlongPathOptions, RepeatAlongPathOptions, PoseLinear } from '@weasel-js/geom';
4
- export { AnchorField, AnchorFieldValues, AnchorPair, AverageAxis, BendAlongPathOptions, BezierEasing, BlendPathsOptions, FramedBox as Bounds, CONSTRAINT_TOLERANCE, CORNER_FIT_TOLERANCE, CORNER_KEYWORDS, ConstrainedPathEdit, ConstraintPoint, CornerFrame, CornerKeyword, CornerPiece, CornerShape, CornerShapeFrame, CornerSpec, DEFAULT_FLATTEN_TOLERANCE, EASINGS, EasingFn, EasingName, EasingSpec, ExtendToMeetOptions, JoinOptions, MeasurePathOptions, NumberEntry, OpenPathEnd, PATH_C, PATH_CMD_LENGTHS, PATH_L, PATH_M, PATH_Q, PATH_SNAP_KINDS, PATH_Z, Path, PathBlend, PathBuilder, PathConstraint, PathConstraintKind, PathCrossing, PathFillRule, PathInWorldPose, PathMeasure, PathSegment, PathSnapHit, PathSnapIndex, PathSnapKind, PathSnapQuery, PathStation, PathStop, PenAnchor, PointAlongPathOptions, PointInPathOptions, PolygonPath, PoseLinear, PoseRotation, Rect, RectPath, RepeatAlongPathOptions, RepeatStation, ResolvedCorners, SPRING_PRESETS, Scale2, SegmentCrossing, SimplifyPathOptions, SmudgePathOptions, SolveConstraintsOptions, SolveConstraintsResult, SpringPreset, SpringPresetName, TrimPathOptions, TrimResult, Point as Vec2, View, ZOOM_FLOOR, asPolygonPath, averageAnchorsAt, bendAlongPath, blendPaths, boundsOfPath, circlePath, composePath, constrainPathEdit, constraintAnchors, cornerAt, cornerFrameAt, cornerFrames, cornerKeywordOf, cornerShapeK, cornerShapePieces, cornerSpecAt, countPathAnchors, createPathSnapIndex, cubicBezierEasing, decomposePath, 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, ellipsePath, extendToMeet, findPathSnap, flattenCubic, flattenCubicWithArcLen, flattenQuadratic, flattenQuadraticWithArcLen, hasCorners, hasOpenSubpath, intersectSegments, isCornerShape, joinAnchorsAt, lengthenOpenEnd, linePath, linear, meanScale, measurePath, nextCornerShape, openEndRay, openPathEnds, pathAnchorPoints, pathCommandCoordCount, pathContainsPoint, pathContainsPolygon, pathContainsRect, pathCrossings, pathDistanceToPoint, pathFromD, pathInPoseFrame, pathInWorld, pathIntersectsPolygon, pathIntersectsRect, pathSegments, pathSignedArea, pathThroughPoseFrame, pathToAnchors, pointAlongPath, pointInPath, polygonFromPoints, polylineFromPoints, poseFrameInverseOf, poseFrameOf, poseLinearOf, poseRotationOf, prepareBlend, pxExtent, rectMarkerPath, rectPath, regularPolygonPath, remapPerAnchor, repeatAlongPath, resolveCorners, resolveCornersWithSources, resolveEasing, reversePath, rotatePathAround, roundRectPath, scaleDelta, scalePathToBounds, screenAngleOf, simplifyAnchorsAt, simplifyPath, smudgePath, solveConstraints, solvePathConstraints, splitByClosure, splitSubpaths, squarePath, standoff, starPath, stationsAlongPath, transformPath, translatePath, trimPathAt, unionBoundsPath, unsatisfiedConstraints, withCorner, withinPxBox, withinPxRadius, withoutCorners, worldEditToStorage } from '@weasel-js/geom';
5
- import { P as PlaneMap, L as LayoutStrategy, M as MoveAdapter, A as AreaSelectAdapter, e as LayerEnumerableAdapter, f as LassoHitMode, d as ReflowTransition, c as LayoutDropTargetMode, b as PasteOmission, g as ResizeAdapter, h as RotateAdapter, i as LassoSelectAdapter, I as InsertAdapter, j as ClipboardSnapshot, k as PasteCtx, O as OrderedAdapter } from './types-CHVXGfYm.js';
6
- export { C as ContainerBounds, D as DropRegion, l as DropTarget, m as LayoutArrival, n as LayoutChild, o as LayoutContainer, p as LayoutDragged, q as LayoutSnap, a as ParallaxOpts, r as ReflowGlideOptions, R as RegionPickView, s as ScalarOrXY, S as SnapTarget, t as deriveParallaxView, u as fromPlane, v as planeMap, w as planeMatrix, x as planeToPlane, y as rectFromPlane, z as rectToPlane, B as toPlane } from './types-CHVXGfYm.js';
1
+ import { D as Dims, R as RenderLayer, L as LayerHit, V as ViewAnimationOptions, a as PathEditExtension, h as ViewportDims, F as FitViewToBoundsOptions, i as RedrawSource, j as EditAnchorsParams, I as InertiaConfig, E as EditAnchorsDep, G as GestureLifecycleOptions, k as SliceDep, l as StickyStyle, C as ContentHandlerEntry, A as AnchorMarkerShape, P as PathEditMark, m as ChromeState, n as LayerGroup, S as SnapSource, T as TransformFollower, o as GeometryProjection, p as InsertNodeFactory, q as InsertPaint, r as SvgIngestOptions, s as SceneCanvasSnap, t as Affordance, u as AffordanceRegion, v as AffordanceBinding, w as CommonAffordanceScratch, x as TextOverflow, y as CreateOutlinesAdapter, z as PaintKindEntry, B as PathEditTarget, J as FinishedEditFrame, K as PathSymmetryDep, H as HandleLocks, M as BooleanOpOptions, N as BooleansAdapter, O as BooleanOp, Q as PathPaint, U as BooleanOpResult, W as BooleanStrokes, X as SnapMods, Y as SourceCandidate, Z as SnapProbeAt, $ as SnapCollect, a0 as SnapMark, b as SnapGesture, a1 as SnapDep, a2 as SnapOutcome, f as SnapOutcomeStore, a3 as SnapReadoutStyle } from './depSchema-BpZNOv7q.js';
2
+ export { a4 as AngleCandidate, a5 as AngleCollect, a6 as AnimateToBoundsOptions, a7 as AreaSelectDep, a8 as BooleanOpPreview, a9 as BooleanPreviewPiece, aa as CanDropIntoDep, ab as ClipboardDep, ac as ClipboardIngestCtx, ad as CreateOutlinesResult, ae as CustomPaintContext, af as DEFAULT_LAYER_RETAIN, ag as DecayLoopConfig, ah as FinishedPathEdit, ai as GEOMETRY_BOUND_DATA, aj as HandleLock, ak as HitTestView, al as IngestCtx, am as IngestionDep, an as InsertDep, ao as InsertEnds, ap as InsertExtras, aq as InsertIntoDep, ar as InsertLive, as as LassoSelectDep, at as LayerCommandCache, au as LayerDrawFailure, av as LayerDrawSpan, aw as LayerRetainPolicy, ax as LayoutDep, ay as Locus, az as MinSize, aA as NodeAtPointDep, aB as OutlinePathSpec, aC as PATH_OVERLAY_ROLES, aD as PaintKind, aE as PaintKindEditorProps, aF as PaintKindFamily, aG as PaintKindLoader, aH as PanBounds, aI as PathEditDrag, aJ as PathEditDragStart, aK as PathEditFinishCtx, aL as PathEditHandleMove, aM as PathEditMarksCtx, aN as PathEditOther, aO as PathEditPart, aP as PathEditStore, aQ as PathForm, aR as PathOverlay, aS as PathOverlayOptions, aT as PathOverlayStyle, aU as PathRepresentation, aV as PathTransformFinishCtx, aW as PreviewPathsDep, aX as ResizePolicy, aY as STICKY_DEFAULTS, aZ as SnapBegin, c as SnapConstrain, a_ as SnapEdge, a$ as SnapEdges, e as SnapGeometry, b0 as SnapMarks, b1 as SnapReadoutDep, d as SnapResizeBox, g as SnapSession, b2 as SvgUnpacker, b3 as TextEditDep, b4 as TextNodeData, b5 as TransformPreviewNode, b6 as TransientPath, b7 as VIEW_ANIMATION_KEY, b8 as ViewAnimationApi, b9 as ViewApi, ba as ViewChannel, bb as applyBooleanOp, bc as applyCreateOutlines, bd as asPaint, be as createPathOverlay, bf as createSnapOutcomeStore, bg as depsUnchanged, bh as drawLayers, bi as drawOneLayer, bj as fitViewToBounds, bk as getPaintKind, bl as isLayerPainted, bm as isLayerVisible, bn as listGradientKinds, bo as listPaintKinds, bp as minSizeOf, bq as paintKindOf, br as paintKindRegistry, bs as paintedLayers, bt as paintsLayer, bu as paletteInsertPaint, bv as pathPaintOf, bw as patternFamily, bx as previewBooleanOp, by as registerContentHandler, bz as registerPaintKind, bA as registerPaintKindLoader, bB as seedTile, bC as stickyData, bD as stickyNodeFactory, bE as subscribeToSources, bF as switchGradientKind, bG as textBoxOf, bH as useDecayLoop, bI as useViewAnimation, bJ as useViewAnimationOn, bK as viewAxes, bL as withoutGeometryBoundData } from './depSchema-BpZNOv7q.js';
3
+ import { View, Scale2, Path, FramedBox, PolygonPath, Point as Point$3, AnchorField, AnchorSet, GlMat3, PlacementAlign, Rect, Affine, PathSnapKind, PathInWorldPose, AnchorFieldValues, NumberEntry, JoinOptions, SegmentHit, PointOrigin, AnchorSymmetry, BlendPathsOptions, BendAlongPathOptions, RepeatAlongPathOptions, PoseLinear } from '@weasel-js/geom';
4
+ export { AnchorField, AnchorFieldValues, AnchorPair, AverageAxis, BendAlongPathOptions, BezierEasing, BlendPathsOptions, FramedBox as Bounds, CONSTRAINT_TOLERANCE, CORNER_FIT_TOLERANCE, CORNER_KEYWORDS, ConstrainedPathEdit, ConstraintPoint, CornerFrame, CornerKeyword, CornerPiece, CornerShape, CornerShapeFrame, CornerSpec, DEFAULT_FLATTEN_TOLERANCE, EASINGS, EasingFn, EasingName, EasingSpec, ExtendToMeetOptions, JoinOptions, MeasurePathOptions, NumberEntry, OpenPathEnd, PATH_C, PATH_CMD_LENGTHS, PATH_L, PATH_M, PATH_Q, PATH_SNAP_KINDS, PATH_Z, Path, PathBlend, PathBuilder, PathConstraint, PathConstraintKind, PathCrossing, PathFillRule, PathInWorldPose, PathMeasure, PathSegment, PathSnapHit, PathSnapIndex, PathSnapKind, PathSnapQuery, PathStation, PathStop, PenAnchor, PointAlongPathOptions, PointInPathOptions, PolygonPath, PoseLinear, PoseRotation, Rect, RectPath, RepeatAlongPathOptions, RepeatStation, ResolvedCorners, SPRING_PRESETS, Scale2, SegmentCrossing, SimplifyPathOptions, SmudgePathOptions, SolveConstraintsOptions, SolveConstraintsResult, SpringPreset, SpringPresetName, TrimPathOptions, TrimResult, Point as Vec2, View, ZOOM_FLOOR, asPolygonPath, averageAnchorsAt, bendAlongPath, blendPaths, boundsOfPath, circlePath, composePath, constrainPathEdit, constraintAnchors, cornerAt, cornerFrameAt, cornerFrames, cornerKeywordOf, cornerShapeK, cornerShapePieces, cornerSpecAt, countPathAnchors, createPathSnapIndex, cubicBezierEasing, decomposePath, 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, ellipsePath, extendToMeet, findPathSnap, flattenCubic, flattenCubicWithArcLen, flattenQuadratic, flattenQuadraticWithArcLen, hasCorners, hasOpenSubpath, intersectSegments, isCornerShape, joinAnchorsAt, lengthenOpenEnd, linePath, linear, meanScale, measurePath, nextCornerShape, openEndRay, openPathEnds, pathAnchorPoints, pathCommandCoordCount, pathContainsPoint, pathContainsPolygon, pathContainsRect, pathCrossings, pathDistanceToPoint, pathFromD, pathInPoseFrame, pathInWorld, pathIntersectsPolygon, pathIntersectsRect, pathSegments, pathSignedArea, pathThroughPoseFrame, pathToAnchors, pathToD, pointAlongPath, pointInPath, polygonFromPoints, polylineFromPoints, poseFrameInverseOf, poseFrameOf, poseLinearOf, poseRotationOf, prepareBlend, pxExtent, rectMarkerPath, rectPath, regularPolygonPath, remapPerAnchor, repeatAlongPath, resolveCorners, resolveCornersWithSources, resolveEasing, reversePath, rotatePathAround, roundRectPath, scaleDelta, scalePathToBounds, screenAngleOf, simplifyAnchorsAt, simplifyPath, smudgePath, solveConstraints, solvePathConstraints, splitByClosure, splitSubpaths, squarePath, standoff, starPath, stationsAlongPath, transformPath, translatePath, trimPathAt, unionBoundsPath, unsatisfiedConstraints, withCorner, withinPxBox, withinPxRadius, withoutCorners, worldEditToStorage } from '@weasel-js/geom';
5
+ import { a as PlaneMap, L as LayoutStrategy, R as ReflowTransition, b as LayoutDropTargetMode } from './types-7puAuVD2.js';
6
+ export { C as ContainerBounds, D as DropRegion, c as DropTarget, d as LayoutArrival, e as LayoutChild, f as LayoutContainer, g as LayoutDragged, h as LayoutSnap, P as ParallaxOpts, i as ReflowGlideOptions, S as ScalarOrXY, j as deriveParallaxView, k as fromPlane, p as planeMap, l as planeMatrix, m as planeToPlane, r as rectFromPlane, n as rectToPlane, t as toPlane } from './types-7puAuVD2.js';
7
7
  export { DEFAULT_ALPHA_DECAY, DEFAULT_ALPHA_MIN, DEFAULT_VELOCITY_DECAY, Simulation, SimulationCore, SimulationForce, SimulationNode, SimulationOptions, UseSimulationOptions, createSimulation } from '@weasel-js/simulation';
8
8
  export { useSimulation } from '@weasel-js/simulation/react';
9
- import { NodeId, SelectionMode, SelectionExtendKey, SelectionApi, DebugSink, HitShape, HandleKind, ViewportGestureKind, View as View$1, IngestItem, OngoingOverlay, PointerSessionCancelReason, DeviceProfile, Bounds, Tool as Tool$1, Contribution as Contribution$1, ContributionChrome as ContributionChrome$1, ToolDef as ToolDef$1, DepName, DepSchema, Action, ActionDeps, GestureBinding, AffordanceHit, ActionDisabledReason, ToolKeybinding, HotkeyTrigger, ModifierState, RuleCtx, Rule, ActionTunings, ActionsProp, OverlayRole, ResizeAnchor, InvocationCtx, OngoingHandle } from '@weasel-js/routing';
10
- export { ALWAYS, Action, ActionDeps, ActionDisabledReason, ActionDisabledReasonValue, ActionDispatch, ActionEnabledResult, ActionEntry, ActionItem, ActionParamSchema, ActionParams, ActionPresentation, ActionShortcut, ActionTuning, ActionTunings, ActionVariant, ActionsProp, ActionsRegistry, AffordanceHit, AssemblyInputs, BindingOpts, BindingScope, BindingSource, BoundGesture, BuildRuleCtxArgs, COARSE_TARGET_SCALE, CONTROL_SELECTOR, Carry, CarryCallbacks, CarryPayload, CarryPointer, CarryStage, ContributionDeps, ContributionRouting, DEFAULT_ALLOWED_CAPABILITIES, DEFAULT_DEVICE_PROFILE, DRAG_THRESHOLD_PX, DebugSink, DepName, DepRegistry, DepSchema, DetectedDeviceFacts, DeviceProfile, DispatchRecord, DispatchRecordInput, Dispatcher, DispatcherContext, DragSample, DroppedCandidate, Eligibility, EligibilityState, GestureBinding, GestureKitSettings, HandleKind, HitShape, HotkeyTrigger, ImmediateInvoker, IngestItem, InputEvent, InvocationCtx, Invoker, KeyBinding, LONG_PRESS_MS, LongPressOptions, LongPressState, LongPressStore, MatchResult, MenuDef, MenuHit, MenuHost, MenuOpenRequest, MenuSources, ModeShortcutHandlers, ModifierRole, ModifierRoles, ModifierState, NEVER, NodeId, OngoingHandle, OngoingInvoker, OngoingOverlay, OpenMenu, OverlayPosition, OverlayRole, PendingLongPress, PlacedBy, Point2, PointerSession, PointerSessionCallbacks, PointerSessionCancelReason, PointerSessionOptions, RankedCandidate, RecordCandidate, ResizeAnchor, ResolveAllOptions, ResolveOnlyResult, ResolvedCandidate, RoleKeys, RoleRebinds, Rule, RuleCtx, ScopedBinding, ScratchKey, ScratchStore, SelectionApi, SelectionExtendKey, SelectionMode, Selector, SpecificityPart, ToolKeybinding, ToolModifiers, ToolPresentation, ToolSlot, TunedBinding, UiOngoingControl, ViewportGestureKind, WalkStep, actionBindings, actionCursor, actionItemTitle, actionItems, actionShortcuts, actionsTagged, activatesFocusedControl, assembleEntries, buildDepsFromRequires, buildRuleCtx, clientToCanvas, createDepRegistry, createDispatcher, createLongPressStore, defineTool, deleteScratch, describeRule, dlog, dwarn, evaluate, evaluateActive, evaluateEnabled, focusedControlOwnsKey, getScratch, heldKeySpec, historyKey, isDebugEnabled, isEditableTarget, isInControlWithin, keySpecShortcut, keysHeld, liveScope, matchActionItem, matchesKeyBinding, modeShortcutSpec, modeShortcuts, openPointerSession, overlaysOf, pastDragThreshold, resolveDeviceProfile, resolveParams, resolveSchemaMenu, roleReader, scopeBindings, scratchKey, setScratch, specificity, startCarry, taggedActionItems, tuneAction } from '@weasel-js/routing';
11
- import * as React$1 from 'react';
12
- import React__default, { Ref, RefObject, ReactNode, MutableRefObject, MouseEvent } from 'react';
9
+ import { R as RectPose, a as SystemLayerSpec, A as AddNodeSpec, b as RegisteredOp, c as SceneRegistry, P as PoseComposition, L as LayoutFrame, N as Node, d as PoseAdapter, S as Scene, e as PoseRemoval, f as PoseWrite, g as ScenePoseReports, h as PoseOverrides, i as SerializedScene, D as DerivePoseFn, j as DerivePathFn, k as DerivedDep } from './types-CniVctmk.js';
10
+ export { l as AddLayerSpec, B as Bivariant, C as ClipFromPoseFn, m as ContainerNode, n as CopiesFromPoseFn, I as IDENTITY_POSE_COMPOSITION, o as LayerRecord, p as LayoutMove, q as LeafNode, r as PoseClosure, s as PoseHold, t as PoseOverride, u as PoseWriteOrigin, v as RemovedNode, w as SCENE_HISTORY_FORM, x as SceneArrivalHandler, y as SceneBatchOptions, z as SceneDoc, E as SceneDocValues, F as SceneEditPass, G as SceneEditPassOptions, H as SceneEditSummary, J as SerializedDoc, K as SerializedLayer, M as SerializedNode, O as SerializedSceneHistory, Q as SystemLayerRecord, U as UserLayerRecord, T as asNodeId, V as composeWorldPose, W as composesFrames, X as rebaseLocalPose } from './types-CniVctmk.js';
11
+ import { NodeId, SelectionMode, SelectionExtendKey, SelectionApi, IngestItem, OngoingOverlay, PointerSessionCancelReason, DeviceProfile, Bounds, Tool as Tool$1, Contribution as Contribution$1, ContributionChrome as ContributionChrome$1, ToolDef as ToolDef$1, DepName, DepSchema, Action, ActionDeps, GestureBinding, AffordanceHit, ActionDisabledReason, ToolKeybinding, HotkeyTrigger, ModifierState, RuleCtx, Rule, DebugSink, ToolSet, ToolEntry, ActionTunings, ActionsProp, OverlayRole, ResizeAnchor, InvocationCtx, OngoingHandle } from '@weasel-js/routing';
12
+ export { ALWAYS, Action, ActionDeps, ActionDisabledReason, ActionDisabledReasonValue, ActionDispatch, ActionEnabledResult, ActionEntry, ActionItem, ActionParamSchema, ActionParams, ActionPresentation, ActionSettings, ActionSettingsState, ActionShortcut, ActionTuning, ActionTunings, ActionVariant, ActionsProp, ActionsRegistry, AffordanceHit, AssemblyInputs, BindingOpts, BindingScope, BindingSource, BoundGesture, BuildRuleCtxArgs, COARSE_TARGET_SCALE, CONTROL_SELECTOR, Carried, Carry, CarryCallbacks, CarryPayload, CarryPointer, CarryStage, ContributionDeps, ContributionRouting, DEFAULT_ALLOWED_CAPABILITIES, DEFAULT_DEVICE_PROFILE, DRAG_THRESHOLD_PX, DebugSink, DepListing, DepName, DepRegistry, DepSchema, DepSource, DetectedDeviceFacts, DeviceProfile, DispatchRecord, DispatchRecordInput, Dispatcher, DispatcherContext, DragSample, DroppedCandidate, Eligibility, EligibilityState, GestureBinding, GestureKitSettings, HandleKind, HitShape, HotkeyTrigger, ImmediateInvoker, IngestItem, InputEvent, InvocationCtx, Invoker, KeyBinding, KeyReach, LONG_PRESS_MS, LongPressOptions, LongPressState, LongPressStore, MatchResult, MenuDef, MenuHit, MenuHost, MenuOpenRequest, MenuSources, ModeShortcutHandlers, ModifierRole, ModifierRoles, ModifierState, NEVER, NodeId, OngoingHandle, OngoingInvoker, OngoingOverlay, OpenMenu, OverlayPosition, OverlayRole, PendingLongPress, PlacedBy, Point2, PointerSession, PointerSessionCallbacks, PointerSessionCancelReason, PointerSessionOptions, RankedCandidate, RecordCandidate, ResizeAnchor, ResolveAllOptions, ResolveOnlyResult, ResolvedCandidate, RoleKeys, RoleRebinds, Rule, RuleCtx, ScopedBinding, ScratchKey, ScratchStore, SelectionApi, SelectionExtendKey, SelectionMode, Selector, SpecificityPart, ToolEntry, ToolKeybinding, ToolModifiers, ToolPresentation, ToolSet, ToolSlot, TunedBinding, UiOngoingControl, ViewportGestureKind, WalkStep, actionBindings, actionCursor, actionItemTitle, actionItems, actionSettingsParams, actionShortcuts, actionsTagged, activatesFocusedControl, assembleEntries, buildDepsFromRequires, buildRuleCtx, clientToCanvas, createDepRegistry, createDispatcher, createLongPressStore, defineTool, deleteScratch, describeRule, dlog, dwarn, evaluate, evaluateActive, evaluateEnabled, focusedControlOwnsKey, getScratch, heldKeySpec, historyKey, isDebugEnabled, isEditableTarget, isInControlWithin, isToolSet, keySpecShortcut, keysHeld, liveScope, matchActionItem, matchesKeyBinding, modeShortcutSpec, modeShortcuts, openPointerSession, overlaysOf, pastDragThreshold, readActionSettings, resolveDeviceProfile, resolveParams, resolveSchemaMenu, roleReader, scopeBindings, scratchKey, setScratch, specificity, startCarry, taggedActionItems, toolIdsOf, toolSet, toolSetHas, tuneAction, withoutTools } from '@weasel-js/routing';
13
+ import * as react from 'react';
14
+ import react__default, { Ref, RefObject, ReactNode, MutableRefObject, MouseEvent } from 'react';
13
15
  import { Reflection } from '@weasel-js/registry';
14
16
  export { MIXED, Mixed, QueryMatch, Reflectable, ReflectedEntry, Reflection, RegisterOptions, Registrant, createReflectable, isPlainObject } from '@weasel-js/registry';
17
+ import { P as PoseDescriptor, b as RotatedPose } from './poseDescriptor-DN2yfnq_.js';
18
+ export { R as RECT_POSE_DESCRIPTOR, a as ROTATED_POSE_DESCRIPTOR, p as poseDescriptorForNode, t as translatePoseViaDescriptor, v as visualBoundsViaDescriptor } from './poseDescriptor-DN2yfnq_.js';
15
19
  import { KitSettingsStore } from '@weasel-js/react';
16
20
  export { CanvasFocusReturn, FrameClock, FrameClockOptions, UseCanvasFocusOptions, VisibleRaf, VisibleRafOptions, VisibleRafTarget, useCanvasFocus, useFrameClock, useLatest, useVisibleRaf } from '@weasel-js/react';
17
21
  import { PaintedCursorState, CursorSink, CursorSpec } from '@weasel-js/cursor';
18
22
  export { BakeOptions, CURSOR_ANGLE_STEPS, CURSOR_MAX_CSS_PX, CursorGlyph, CursorGlyphName, CursorGlyphSpec, CursorSink, CursorSinkTarget, CursorSpec, PaintedCursor, PaintedCursorFrame, PaintedCursorState, ResolvedCursor, bakeCursor, createCursorSink, createPaintedCursorState, cursorFor, resolveCursor, resolveCursorTier } from '@weasel-js/cursor';
19
- import { DrawCommand, FlattenTolerance, ShaderProgramHandle, CommandStroke as CommandStroke$1 } from '@weasel-js/renderer';
23
+ import { DrawCommand, FlattenTolerance, ImageMinification, ShaderProgramHandle, CommandStroke as CommandStroke$1 } from '@weasel-js/renderer';
20
24
  export { BlendFactor, BlendFactors, CompositeOp, CullRect, DrawCommand, Effect, FillPoseBox, FlattenTolerance, GlMat3, GroupDrawCommand, ImageDrawCommand, ImageMinification, ImageNodeData, ImageRasterSize, ImageStatus, PaintBindContext, PaintDrawKind, PaintProgram, PaintResources, PathDrawCommand, ProgramSource, RenderTarget, SPRITE_STRIDE, ShaderDrawCommand, ShaderProgram, ShaderProgramHandle, ShaderUniform, SpriteSheet, SpritesDrawCommand, TextDrawCommand, TilePatternOpts, bitmapSrc, blur, commandFill, commandPaint, commandStroke, createTilePattern, cullDrawCommands, fillInPoseFrame, fillToBoundsFrame, frameRect, getImageBitmap, imageStatus, isPaintKindKnown, isVectorImageSrc, mat3, registerEffect, releaseImage, resolveFillPattern, resolvePatternSpec, retryImage, setImageCacheBudget, subscribeImageReady, textCommand, textCommandFromPose, textCommandFromRuns, viewToMat3, vignette, warmPaintKinds } from '@weasel-js/renderer';
21
- import { VertexColorChannel, Target, Animator, ColorOverrideRegistry, Skeleton, Skin, Pose, TargetAxes, ClipBinder, SpringPresetName, StaggerOptions, StaggerDelay, EasingSpec, AnimationHandle } from '@weasel-js/animator';
25
+ import { C as CanvasDebugSink, D as DebugSnapshot, a as DebugConfig, b as DebugStrokes, c as DebugTheme } from './types-BN9hbdMI.js';
26
+ export { d as DEBUG_FEATURES, e as DebugFeature, f as DebugStroke, F as FrameStats, L as LayerFrameStats, R as RecordedBounds, g as RecordedHandle, h as RecordedHitbox, i as RecordedLayer, j as RecordedOrigin, k as RecordedSnap, l as RecordedViewport } from './types-BN9hbdMI.js';
27
+ import { VertexColorChannel, Target, Animator, ColorOverrideRegistry, TargetAxes, Pose, ClipBinder, SpringPresetName, StaggerOptions, StaggerDelay, EasingSpec, AnimationHandle, Skeleton, Skin } from '@weasel-js/animator';
22
28
  import { SelectionStore as SelectionStore$1 } from '@weasel-js/select';
23
29
  import { Paint, CommandFill, CommandStroke, CommandPaint, Fill, Stroke, Palette, SolidPaint, VertexWidth } from '@weasel-js/paint';
24
30
  export { ColorInterpolationSpace, ColorSpace, CommandFill, CommandPaint, CommandPaintUnits, CommandStroke, Fill, GradStop, GradientKind, GradientPaint, HalfWidths, HueInterpolation, KitMarkerKey, MarkerKey, MarkerRef, OklchDeg, Paint, PaintUnits, PatternPaint, PatternPlacement, PatternTransform, PatternTransformParts, PosedPaint, Region, STROKE_DASH_RATIOS, ScreenLength, SolidPaint, Stroke, StrokeAlign, StrokeDashStyle, StrokeNib, TILE_KINDS, TextureHandle, TexturePaint, TileKind, TilePaint, TilePatternSpec, VertexWidth, VertexWidthSides, alignedStrokeRect, composePatternTransform, contrastLineColor, dashForStrokeStyle, decomposePatternTransform, gradientForBounds, gradientGeometry, hexToOklchDeg, hexToRgbBytes, hexToRgba, hslToSrgb, interpolateSrgb, isGradientPaint, isPatternPaint, isSolidPaint, isTileKind, isTilePaint, lerpColorArray, lerpFill, lerpOklab, lerpOklch, lerpPaint, lerpStroke, linearSrgbToOklab, linearToSrgb, normalizeHex, oklabToLinearSrgb, oklabToOklch, oklabToSrgbU8, oklchDegToHex, oklchToOklab, parseColor, parseColorToRgba255, parseHexBytes, patternPlacementOf, resolveColor, resolveScreenLength, rgbaToHex, sampleGradientStops, scaleVertexWidth, srgbFloatToOklab, srgbToHsl, srgbToLinear, srgbU8ToOklab, strokeDashStyleOf, tileSpecOf, vertexHalfWidths, vertexWidthFromSides, widestHalfWidth, withGradientKind } from '@weasel-js/paint';
@@ -28,17 +34,17 @@ import { FontRequest } from '@weasel-js/font';
28
34
  export { FaceMetrics, FaceRuleMetrics, FaceScriptMetrics, FontFamilyFaces, FontRequest, FontStyle, FontVariant, LocalFontOutlinesResult, OutlineFaceInfo, OutlineSource, OutlineStatus, OutlineVariant, RegisterFontOptions, canQueryLocalFonts, cssFamilyName, cssFontFamily, cssFontFamilyLoading, enableLocalFontOutlines, fontOutlineRegistry, fontRegistry, hasFontOutlines, isCanvasFont, listFontOutlines, loadFontOutlines, outlineStatus, refreshCanvasFont, registerCanvasFont, registerFont, registerFontOutlines, subscribeGlyphReady, unregisterCanvasFont, unregisterFontOutlines, warmFonts } from '@weasel-js/font';
29
35
  import * as _weasel_js_history from '@weasel-js/history';
30
36
  import { Op, CreateHistoryOptions, History, HistorySelection } from '@weasel-js/history';
31
- export { BeginJournalOptions, CreateHistoryOptions, EvictedEntry, History, HistoryBranch, HistoryEntry, HistoryLogger, HistorySelection, Journal, Op, RecordEntryOptions, SerializedHistory, SerializedHistoryEntry, SerializedOp, SwapArgs, SwapOpOptions, swapOp } from '@weasel-js/history';
32
- import { P as PoseDescriptor, b as RotatedPose } from './poseDescriptor-DN2yfnq_.js';
33
- export { R as RECT_POSE_DESCRIPTOR, a as ROTATED_POSE_DESCRIPTOR, p as poseDescriptorForNode, t as translatePoseViaDescriptor, v as visualBoundsViaDescriptor } from './poseDescriptor-DN2yfnq_.js';
34
- import { G as GestureContext, B as BoundsConstraint, R as RotateBehavior, I as InsertBehavior, L as LassoSelectBehavior, M as MoveBehavior } from './clone-DZDrfIlU.js';
35
- export { A as ActionBehavior, a as AreaSelectOverlay, b as BehaviorEnd, c as BehaviorResult, C as CloneBehavior, d as CloneBehaviorResult, e as GestureFrames, f as GroupTransform, g as InsertMoveResult, h as InsertOverlay, i as InsertPoint, j as InsertProposed, k as LassoSelectMoveResult, l as LassoSelectOverlay, m as LassoSelectPose, n as LassoSelectProposed, o as MoveEnd, P as PointerState, p as ResizeMoveResult, q as ResizeOverlay, r as ResizeProposed, s as RotateMoveResult, t as RotateOverlay, u as RotateProposed } from './clone-DZDrfIlU.js';
36
- import { d as ResizeHandleLayout, U as UseResizeOptions, T as TargetTransform } from './cornerHandles-Camw_yeu.js';
37
- export { C as CORNER_ANCHORS, a as CornerAnchor, k as CornerEdge, b as CornerHandle, E as EDGE_HANDLE_MIN_RADII, H as HandleEdge, R as RESIZE_HANDLE_ANCHORS, c as ResizeHandleAnchor, e as cornerPoint, f as cornerResizeHandles, g as fixedCornerOf, h as handlePoint, i as hitCornerHandle, j as isCornerHandle, r as resizeHandlesFor } from './cornerHandles-Camw_yeu.js';
37
+ export { BeginJournalOptions, CreateHistoryOptions, EvictedEntry, History, HistoryBranch, HistoryEntry, HistoryLogger, HistorySelection, HistoryStep, Journal, Op, RecordEntryOptions, SerializedHistory, SerializedHistoryEntry, SerializedOp, SwapArgs, SwapOpOptions, swapOp } from '@weasel-js/history';
38
+ import { G as GestureContext, B as BoundsConstraint, R as RotateBehavior, I as InsertBehavior, L as LassoSelectBehavior, M as MoveBehavior } from './clone-C3e0OTuF.js';
39
+ export { A as ActionBehavior, a as AreaSelectOverlay, b as BehaviorEnd, c as BehaviorResult, C as CloneBehavior, d as CloneBehaviorResult, e as GestureFrames, f as GroupTransform, g as InsertMoveResult, h as InsertOverlay, i as InsertPoint, j as InsertProposed, k as LassoSelectMoveResult, l as LassoSelectOverlay, m as LassoSelectPose, n as LassoSelectProposed, o as MoveEnd, P as PointerState, p as ResizeMoveResult, q as ResizeOverlay, r as ResizeProposed, s as RotateMoveResult, t as RotateOverlay, u as RotateProposed } from './clone-C3e0OTuF.js';
40
+ import { d as ResizeHandleLayout, U as UseResizeOptions, T as TargetTransform } from './cornerHandles-BHuoMs1o.js';
41
+ export { C as CORNER_ANCHORS, a as CornerAnchor, k as CornerEdge, b as CornerHandle, E as EDGE_HANDLE_MIN_RADII, H as HandleEdge, R as RESIZE_HANDLE_ANCHORS, c as ResizeHandleAnchor, e as cornerPoint, f as cornerResizeHandles, g as fixedCornerOf, h as handlePoint, i as hitCornerHandle, j as isCornerHandle, r as resizeHandlesFor } from './cornerHandles-BHuoMs1o.js';
38
42
  import { ModeRegistry, ModeDecorations } from '@weasel-js/modes';
43
+ import { M as MoveAdapter, A as AreaSelectAdapter, L as LayerEnumerableAdapter, a as LassoHitMode, P as PasteOmission, b as ResizeAdapter, c as RotateAdapter, d as LassoSelectAdapter, I as InsertAdapter, C as ClipboardSnapshot, e as PasteCtx, O as OrderedAdapter } from './types-oFeQ5VjV.js';
44
+ export { R as RegionPickView, S as SnapTarget } from './types-oFeQ5VjV.js';
39
45
  import * as _weasel_js_gestures from '@weasel-js/gestures';
40
46
  export { CarrySpec, ClaimableGesture, ClickSpec, DragSpec, DropSpec, GestureSpec, KeyHeldSpec, KeySpec, ModSpec, MultiTouchSpec, PasteSpec, PinchSpec, TargetPredicate, TargetSpec, WheelSpec, bodyPredicate, hitPredicate } from '@weasel-js/gestures';
41
- import { U as UseMoveOptions } from './options-p9GZMXbY.js';
47
+ import { U as UseMoveOptions } from './options-DBxEryYq.js';
42
48
  import { IconRef, IconTable, IconVariantLoader, IconRegistry, IconGlyph, IconEntry, IconVariantState } from '@weasel-js/icons';
43
49
  export { IconRef, IconTable, toIconRef } from '@weasel-js/icons';
44
50
  import * as _weasel_js_prefs from '@weasel-js/prefs';
@@ -60,6 +66,29 @@ export { a as aabbCenter, p as pointInRotatedRect, r as rectCorners, b as rotate
60
66
  export { ClipboardFlavors, UseClipboardOpsOptions, UseClipboardOpsReturn, WEASEL_CLIPBOARD_MIME, WEASEL_CLIPBOARD_MIME_WEB, buildWeaselClipboardText, embedWeaselMetadataInSvg, extractWeaselClipboardFromSvg, parseWeaselClipboardText, sniffWeaselClipboardText, useClipboardOps } from './clipboard.js';
61
67
  import { Vec, SnapCandidate } from '@weasel-js/geom/nd';
62
68
 
69
+ /** One pose write an {@link createArrangeOp} made. */
70
+ interface ArrangedPose {
71
+ id: string;
72
+ from: unknown;
73
+ to: unknown;
74
+ }
75
+ /** Arguments to {@link createArrangeOp}. */
76
+ interface ArrangeArgs {
77
+ /** The writes to make. Absent until a computed arrangement has run once. */
78
+ placed?: ArrangedPose[];
79
+ }
80
+ /**
81
+ * Op: write a set of poses decided when the op first applies, not when it is
82
+ * built. The scene appends one to an edit that moves nodes into a container,
83
+ * and `compute` asks the container what to do with them after the rest of
84
+ * the edit has landed. Every later apply — redo, or a rebuild from a
85
+ * serialized history — replays the writes it recorded, so the arrangement is
86
+ * decided once. `write` replaces the adapter's `setPose` for this op and its
87
+ * inverses — the scene passes its own, since not every adapter an edit is
88
+ * applied through can write poses.
89
+ */
90
+ declare function createArrangeOp(args: ArrangeArgs, compute?: () => ArrangedPose[], write?: (id: string, pose: unknown) => void): Op;
91
+
63
92
  /** Pan offset (in pixels) plus per-axis zoom (pixels per content unit). */
64
93
  interface ViewTransform {
65
94
  panX: number;
@@ -109,6 +138,8 @@ declare function normalizeView(view: View): View;
109
138
  interface UseSceneOptions<TData, TLayer extends string, TPose = RectPose> {
110
139
  systemLayers: readonly SystemLayerSpec<TLayer>[];
111
140
  initial?: readonly AddNodeSpec<TData, TLayer, TPose>[];
141
+ /** The document values the scene starts with, outside history. See `Scene.doc`. */
142
+ doc?: Readonly<Record<string, unknown>>;
112
143
  ops?: Readonly<Record<string, RegisteredOp<unknown>>>;
113
144
  historyLimit?: number;
114
145
  /** Window (ms) within which consecutive same-shaped mutations merge into
@@ -291,6 +322,9 @@ interface NodeInkCtx {
291
322
  * rotation and `transform`. With it, a `{ px }` length is measured the way
292
323
  * the renderer builds it, exact in every direction; without, at `scale`. */
293
324
  screen?: readonly [number, number, number, number];
325
+ /** The path the node shows in place of its pose's, already where it is
326
+ * drawn: its box is measured from this, not from the placeholder pose. */
327
+ derivedPath?: Path | null;
294
328
  }
295
329
 
296
330
  /** What a painter that declares no `ink` is assumed to do. */
@@ -499,178 +533,6 @@ interface CanvasViewProps {
499
533
  */
500
534
  declare function CanvasView(props: CanvasViewProps): null;
501
535
 
502
- /**
503
- * `DebugSink`, `HitShape` and `HandleKind` are declared in
504
- * `@weasel-js/routing`. Re-exported here, beside the overlay that reads one.
505
- */
506
-
507
- /** One bit per debug feature; absent keys are off. */
508
- interface DebugConfig {
509
- hitboxes?: boolean;
510
- handles?: boolean;
511
- bounds?: boolean;
512
- origins?: boolean;
513
- snap?: boolean;
514
- layers?: boolean;
515
- /** Render each tracked node's id as a label at the top-left of its
516
- * bounds. Pulls from the same `recordBounds` stream `bounds` uses, so
517
- * no extra sink calls are required to enable. */
518
- ids?: boolean;
519
- /** Frame panel in the top-left corner: repaint rate and interval, the
520
- * CPU cost and GL draw-call count of the last paint, and both again per
521
- * render layer. The rate tracks the overlay's own draw callback, so it is
522
- * the canvas's repaint rate — a canvas that is not repainting shows the
523
- * last numbers, not zero. */
524
- fps?: boolean;
525
- /** The last viewport change a pan or zoom made: the viewport it started
526
- * from, outlined in the current view, and the world point it held fixed. */
527
- viewport?: boolean;
528
- /** Optional per-feature color overrides; falls back to the default theme. */
529
- theme?: Partial<DebugTheme>;
530
- /** Optional per-feature line-width / dash overrides; falls back to
531
- * {@link DEFAULT_DEBUG_STROKES}. */
532
- strokes?: Partial<DebugStrokes>;
533
- }
534
- /** The name of one debug-overlay feature — the keys of {@link DebugConfig}
535
- * that toggle a visualization. */
536
- type DebugFeature = 'hitboxes' | 'handles' | 'bounds' | 'origins' | 'snap' | 'layers' | 'ids' | 'fps' | 'viewport';
537
- /** Colors the debug overlay draws with, one entry per feature. */
538
- interface DebugTheme {
539
- hitboxFill: string;
540
- hitboxStroke: string;
541
- handle: string;
542
- bounds: string;
543
- origin: string;
544
- snap: string;
545
- layerText: string;
546
- layerTextBg: string;
547
- /** Color for the per-node id label rendered when `config.ids` is on. */
548
- idText: string;
549
- /** Foreground / background for the FPS panel. */
550
- fpsText: string;
551
- fpsTextBg: string;
552
- /** Previous-viewport outline, anchor trail and readout. */
553
- viewport: string;
554
- }
555
- /** Line width and dash pattern for one stroked debug feature. An empty (or
556
- * omitted) `dash` is a solid line. */
557
- interface DebugStroke {
558
- width: number;
559
- dash?: readonly number[];
560
- }
561
- /** The stroked half of the debug overlay's appearance, split from
562
- * {@link DebugTheme} because only some features draw a line at all — text
563
- * panels and filled origin dots take color and nothing else. */
564
- interface DebugStrokes {
565
- hitbox: DebugStroke;
566
- bounds: DebugStroke;
567
- handle: DebugStroke;
568
- /** Rejected snap candidates only; accepted ones paint as a filled dot. */
569
- snap: DebugStroke;
570
- /** The previous-viewport outline and the anchor's trail. */
571
- viewport: DebugStroke;
572
- }
573
- /** A hit region tested during the current frame. */
574
- interface RecordedHitbox {
575
- id: string;
576
- kind: 'body' | 'handle' | 'rotation' | 'anchor';
577
- shape: HitShape;
578
- }
579
- /** A handle drawn during the current frame, and where. */
580
- interface RecordedHandle {
581
- id: string;
582
- position: {
583
- x: number;
584
- y: number;
585
- };
586
- kind: HandleKind;
587
- }
588
- /** A node's bounds as computed during the current frame. */
589
- interface RecordedBounds {
590
- id: string;
591
- bounds: {
592
- x: number;
593
- y: number;
594
- width: number;
595
- height: number;
596
- };
597
- }
598
- /** A node's transform origin as used during the current frame. */
599
- interface RecordedOrigin {
600
- id: string;
601
- point: {
602
- x: number;
603
- y: number;
604
- };
605
- }
606
- /** A snap candidate considered during the current gesture, and whether it
607
- * won. Unlike the other records these survive across frames, until the
608
- * gesture ends. */
609
- interface RecordedSnap {
610
- point: {
611
- x: number;
612
- y: number;
613
- };
614
- accepted: boolean;
615
- }
616
- /** A render layer that drew during the current frame. */
617
- interface RecordedLayer {
618
- id: string;
619
- label: string;
620
- space: 'world' | 'screen';
621
- index: number;
622
- }
623
- /** The last viewport change a gesture made. See `DebugSink.recordViewport`. */
624
- interface RecordedViewport {
625
- kind: ViewportGestureKind;
626
- from: View$1;
627
- to: View$1;
628
- /** World point the gesture held fixed, when it had one. */
629
- anchor?: {
630
- x: number;
631
- y: number;
632
- };
633
- }
634
- /** What one render layer cost in a paint. */
635
- interface LayerFrameStats {
636
- id: string;
637
- /** GL draw calls issued while this layer's commands were dispatched. A
638
- * batched run is drawn when it closes, so it counts toward the layer that
639
- * closed it. */
640
- drawCalls: number;
641
- /** CPU milliseconds: building the layer's commands plus dispatching them. */
642
- ms: number;
643
- }
644
- /** What one paint cost, for the frame panel. */
645
- interface FrameStats {
646
- /** CPU milliseconds for the whole paint — command build and dispatch. GPU
647
- * time is not included; the GPU runs asynchronously. */
648
- paintMs: number;
649
- drawCalls: number;
650
- layers: LayerFrameStats[];
651
- }
652
- /** Everything the sink collected, ready for the overlay to draw. */
653
- interface DebugSnapshot {
654
- hitboxes: RecordedHitbox[];
655
- handles: RecordedHandle[];
656
- bounds: RecordedBounds[];
657
- origins: RecordedOrigin[];
658
- snap: RecordedSnap[];
659
- layers: RecordedLayer[];
660
- /** Latest viewport change; survives frames until replaced. */
661
- viewport: RecordedViewport | null;
662
- /** The previous paint's cost. The overlay draws before the paint it is part
663
- * of is dispatched, so this is always one paint behind. */
664
- frame: FrameStats | null;
665
- }
666
- /** The sink `<Canvas>` creates: what tools record into, plus the canvas-side
667
- * half — the frame stats only the painter knows — and the read the overlay
668
- * draws from. */
669
- interface CanvasDebugSink extends DebugSink {
670
- recordFrame(stats: FrameStats): void;
671
- snapshot(): DebugSnapshot;
672
- }
673
-
674
536
  /**
675
537
  * A view added through {@link SceneCanvasApi.addView}.
676
538
  */
@@ -942,6 +804,8 @@ interface SceneCanvasApi extends CanvasExtensionApi {
942
804
  */
943
805
  interface GesturePreviewSource {
944
806
  previewIds?(): Iterable<string> | null;
807
+ /** Absent/null falls back to the node's effective pose, which is where a
808
+ * transform publishing to the scene's overrides puts it. */
945
809
  previewPose?(id: string): unknown;
946
810
  /** Companion to `previewPose` for actions that mutate node data (anchor
947
811
  * edits on `data.path` nodes). Absent/null falls back to committed data. */
@@ -1644,7 +1508,7 @@ interface DeviceProfileProviderProps {
1644
1508
  * Publish one resolved profile to a subtree. `<SceneCanvas>` renders this so
1645
1509
  * overlays, affordances, and consumer chrome all read the same object.
1646
1510
  */
1647
- declare function DeviceProfileProvider({ value, children }: DeviceProfileProviderProps): React$1.FunctionComponentElement<React$1.ProviderProps<DeviceProfile | null>>;
1511
+ declare function DeviceProfileProvider({ value, children }: DeviceProfileProviderProps): react.FunctionComponentElement<react.ProviderProps<DeviceProfile | null>>;
1648
1512
 
1649
1513
  /**
1650
1514
  * Call `onChange` each time `window.devicePixelRatio` changes: the window
@@ -1717,6 +1581,10 @@ interface PageLayoutOptions {
1717
1581
  * Throws on two pages with one id.
1718
1582
  */
1719
1583
  declare function layoutPages(pages: readonly Page[], options?: PageLayoutOptions): PlacedPage[];
1584
+ /** The name page `index` of the page order shows: its own, else "Page" and its place. */
1585
+ declare function pageName(page: {
1586
+ readonly name?: string | undefined;
1587
+ }, index: number): string;
1720
1588
  /** The page under a world point, or `null` between and outside them. A point on an edge is on the page. */
1721
1589
  declare function pageAt(pages: readonly PlacedPage[], point: {
1722
1590
  readonly x: number;
@@ -1728,6 +1596,13 @@ declare function pageAt(pages: readonly PlacedPage[], point: {
1728
1596
  * rule that says which page an object is on.
1729
1597
  */
1730
1598
  declare function pageOfBounds(pages: readonly PlacedPage[], bounds: Bounds): PlacedPage | null;
1599
+ /**
1600
+ * The page a world-space box is held by: the one it is on (`pageOfBounds`),
1601
+ * else the one nearest it by the box-to-box gap, the earlier of two equally
1602
+ * near. `null` only with no pages. Used where every object must land on some
1603
+ * page, such as an export; `pageOfBounds` stays the rule for what is on one.
1604
+ */
1605
+ declare function pageHolding(pages: readonly PlacedPage[], bounds: Bounds): PlacedPage | null;
1731
1606
  /**
1732
1607
  * The page `step` places along the page order from the one with id `current`:
1733
1608
  * the next slide is `1`, the one before is `-1`. `null` past either end, unless
@@ -1758,6 +1633,64 @@ declare function pagesLayer(pages: readonly PlacedPage[], options: PagesLayerOpt
1758
1633
 
1759
1634
  /** The view that shows one placed page whole: `fitViewToBounds` on its rect. */
1760
1635
  declare function fitViewToPage(page: PlacedPage, viewportDims: ViewportDims, currentView: View, options?: FitViewToBoundsOptions): View;
1636
+ /** The page the view shows most of: the one overlapping the visible world rect most, or `null` when none shows. */
1637
+ declare function pageInView(pages: readonly PlacedPage[], view: View, viewportDims: ViewportDims): PlacedPage | null;
1638
+
1639
+ /**
1640
+ * A document's pages as a scene document value, and the edits that change
1641
+ * them. Each edit moves the nodes on a page by however far the page itself
1642
+ * moved, so what is on a page stays where it is on that page.
1643
+ */
1644
+
1645
+ /** The document value under {@link PAGES_DOC_KEY}: the pages in order, and how they are laid out. */
1646
+ interface PagesDoc {
1647
+ readonly pages: readonly Page[];
1648
+ readonly layout?: PageLayoutOptions;
1649
+ }
1650
+ /** The scene document value key a page list lives under (`scene.doc`). */
1651
+ declare const PAGES_DOC_KEY = "core:pages";
1652
+ /** Options every page edit takes. */
1653
+ interface PageEditOptions {
1654
+ /** The undo entry's label. */
1655
+ label?: string;
1656
+ /** How node poses are measured and moved. Default: poses are rects. */
1657
+ descriptor?: PoseDescriptor<unknown>;
1658
+ }
1659
+ /** The scene's pages doc, or `null` when it has none. */
1660
+ declare function pagesOf<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>): PagesDoc | null;
1661
+ /** The scene's pages, placed in world space; empty when it has no pages doc. */
1662
+ declare function placedPagesOf<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>): PlacedPage[];
1663
+ /** An id none of `pages` has: `page-1`, `page-2`, and so on. */
1664
+ declare function nextPageId(pages: readonly Page[]): string;
1665
+ /**
1666
+ * The root nodes on each placed page, by page id: each root belongs to the
1667
+ * page its bounds overlap most (`pageOfBounds`). A root in the gaps belongs to
1668
+ * none, and one that derives from other nodes is left out, since it follows
1669
+ * them.
1670
+ */
1671
+ declare function pageMembers<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>, placed: readonly PlacedPage[], descriptor?: PoseDescriptor<unknown>): Map<string, NodeId[]>;
1672
+ /**
1673
+ * Replace the scene's pages doc with `next`, moving each page's members by
1674
+ * the change in their page's place, all as one undo entry labeled `label`.
1675
+ * Members of a page `next` drops are left where they are; `removePage` deletes
1676
+ * them first.
1677
+ */
1678
+ declare function setPages<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>, next: PagesDoc, label: string, options?: Pick<PageEditOptions, 'descriptor'>): void;
1679
+ /** Insert `page` at `index`, by default after the last page. */
1680
+ declare function addPage<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>, page: Page, options?: PageEditOptions & {
1681
+ index?: number;
1682
+ }): void;
1683
+ /** Delete page `id`, what is on it, and every node that derives from that, as one entry. */
1684
+ declare function removePage<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>, id: string, options?: PageEditOptions): void;
1685
+ /** Move page `id` to `index` in the page order. */
1686
+ declare function movePage<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>, id: string, index: number, options?: PageEditOptions): void;
1687
+ /** Give page `id` a new size. Its members keep their places on it; the pages after it shift. */
1688
+ declare function resizePage<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>, id: string, size: {
1689
+ readonly width: number;
1690
+ readonly height: number;
1691
+ }, options?: PageEditOptions): void;
1692
+ /** Rename page `id`; an empty name removes it. */
1693
+ declare function renamePage<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>, id: string, name: string, options?: PageEditOptions): void;
1761
1694
 
1762
1695
  /** Optional clamp bounds for `zoomAt`. Defaults: {@link DEFAULT_MIN_ZOOM} /
1763
1696
  * {@link DEFAULT_MAX_ZOOM} (per axis). */
@@ -2118,7 +2051,7 @@ interface SceneViewCanvasProps<TData, TLayer extends string, TPose> extends Surf
2118
2051
  * pointer listeners or call `toBlob` for snapshots through this. */
2119
2052
  canvasRef?: Ref<HTMLCanvasElement>;
2120
2053
  }
2121
- declare function SceneViewCanvasInner<TData, TLayer extends string, TPose>(props: SceneViewCanvasProps<TData, TLayer, TPose>): React$1.JSX.Element;
2054
+ declare function SceneViewCanvasInner<TData, TLayer extends string, TPose>(props: SceneViewCanvasProps<TData, TLayer, TPose>): react.JSX.Element;
2122
2055
  /**
2123
2056
  * Pointer-inert read-only scene view. It attaches no event listeners;
2124
2057
  * consumers attach their own through `canvasRef`, a plain prop because
@@ -2162,7 +2095,7 @@ interface DrawCanvasProps extends SurfaceSizeProps {
2162
2095
  * a package demo, a swatch, a preview — where a `<SceneCanvas>` would bring a
2163
2096
  * scene, tools and an input dispatcher that nothing uses.
2164
2097
  */
2165
- declare function DrawCanvas(props: DrawCanvasProps): React$1.JSX.Element;
2098
+ declare function DrawCanvas(props: DrawCanvasProps): react.JSX.Element;
2166
2099
 
2167
2100
  /** The accent canvas chrome paints in when the element sits under no theme. */
2168
2101
  declare const FALLBACK_ACCENT = "#4c8dff";
@@ -2629,6 +2562,10 @@ interface RenderSceneToPixelsArgs<TData, TLayer extends string, TPose> {
2629
2562
  * output's top-left, one unit per output pixel. Annotations, watermarks,
2630
2563
  * and `renderDebugSnapshot`'s overlay ride here. */
2631
2564
  overlay?: readonly DrawCommand[];
2565
+ /** Draw the scene's annotation layers (`isAnnotationLayer`). Default
2566
+ * `false`: a raster is an export, which leaves them out as the SVG export
2567
+ * does. Pass `true` to reproduce the canvas as it looked. */
2568
+ annotations?: boolean;
2632
2569
  }
2633
2570
  /** The result of planning a headless render: how big the output is, the view
2634
2571
  * that maps the source rect onto it, and the commands to draw. */
@@ -2774,6 +2711,8 @@ interface RenderDebugSnapshotArgs<TData, TLayer extends string, TPose> extends O
2774
2711
  /** Which overlay features to draw, as on `<Canvas debug>`. The frame panel
2775
2712
  * shows the recorded paint cost but no rate: a still image has no frames. */
2776
2713
  config: DebugConfig;
2714
+ /** Draw the scene's annotation layers. Default `true`, as the canvas did. */
2715
+ annotations?: boolean;
2777
2716
  }
2778
2717
  /**
2779
2718
  * Rasterize the scene through `view` at `size` and paint the debug overlay
@@ -2794,18 +2733,18 @@ declare function rasterToPng(image: RasterImage): Promise<Blob>;
2794
2733
  /** Mount a `<PointerContextProvider>` only when none is already in scope. */
2795
2734
  declare function PointerProviderIfRoot({ children }: {
2796
2735
  children: ReactNode;
2797
- }): React$1.JSX.Element;
2736
+ }): react.JSX.Element;
2798
2737
 
2799
2738
  /** Mount an `<ActionsProvider>` only when none is already in scope. */
2800
2739
  declare function ActionsProviderIfRoot({ children }: {
2801
2740
  children: ReactNode;
2802
- }): React$1.JSX.Element;
2741
+ }): react.JSX.Element;
2803
2742
 
2804
2743
  /** Mount a `<DepRegistryProvider>` only when none is already in scope, so a
2805
2744
  * consumer's dep sources are not shadowed by a nested canvas. */
2806
2745
  declare function DepRegistryProviderIfRoot({ children }: {
2807
2746
  children: ReactNode;
2808
- }): React$1.JSX.Element;
2747
+ }): react.JSX.Element;
2809
2748
 
2810
2749
  /**
2811
2750
  * Open the menu for a right-click, or for Shift+F10 when `params` carry no client point. Reads
@@ -2855,10 +2794,13 @@ declare function pathOperationTags(family: PathGestureFamily): readonly string[]
2855
2794
  */
2856
2795
 
2857
2796
  /** The scene reads {@link drawnBoundsOf} makes. `childrenOf` absent: every
2858
- * node is a leaf. */
2797
+ * node is a leaf. `derivedPathOf` absent: every node is measured by its pose,
2798
+ * a path-derived one included — `drawnBoundsScene` supplies it for a `Scene`. */
2859
2799
  interface DrawnBoundsScene {
2860
2800
  get(id: NodeId): Node<unknown, string, unknown> | undefined;
2861
2801
  childrenOf?(id: NodeId): readonly NodeId[];
2802
+ /** The path a node shows in place of its pose's, or `null` for one that shows its own. */
2803
+ derivedPathOf?(id: NodeId): Path | null;
2862
2804
  }
2863
2805
  /** How {@link drawnBoundsOf} reads a node. */
2864
2806
  interface DrawnBoundsOptions {
@@ -2877,7 +2819,8 @@ interface DrawnBoundsOptions {
2877
2819
  * drawn in: a turned node's box comes back turned with it. A node with no
2878
2820
  * stroke, a painter that declares no {@link NodeShapeEntry.drawnBounds}, or
2879
2821
  * `includeStroke: false` answers `framedBounds` unchanged. A container's box
2880
- * reaches as far as its members' boxes do.
2822
+ * reaches as far as its members' boxes do. A node showing a derived path is
2823
+ * boxed around that path, and its placeholder pose plays no part.
2881
2824
  */
2882
2825
  declare function drawnBoundsOf(scene: DrawnBoundsScene, id: NodeId, pose: unknown, opts?: DrawnBoundsOptions): FramedBox;
2883
2826
  /** How far `id`'s ink at `pose` reaches past its pose box on each side, in
@@ -2956,7 +2899,9 @@ interface UseAlignOptions<TPose> {
2956
2899
  * the same value and the alignment runs entirely in stored coordinates. */
2957
2900
  composition?: PoseComposition<TPose>;
2958
2901
  /** The nodes behind the adapter's ids. With it, a stroked node aligns by
2959
- * the box it is drawn with (`drawnBoundsOf`); without, by its pose box. */
2902
+ * the box it is drawn with (`drawnBoundsOf`); without, by its pose box.
2903
+ * Pass a `Scene` through `drawnBoundsScene` so a path-derived node is
2904
+ * boxed by its path. */
2960
2905
  scene?: DrawnBoundsScene;
2961
2906
  /** View scale a screen-pixel stroke is resolved at. Default 1. */
2962
2907
  viewScale?: () => number | Scale2;
@@ -3145,6 +3090,7 @@ declare function defaultCommitAdapter<TPose>(scene: Scene<unknown, string, TPose
3145
3090
  setChildOrder(parentId: string | null, ids: string[]): void;
3146
3091
  setData(id: string, data: unknown): void;
3147
3092
  setLayer(id: string, layer: string): void;
3093
+ setDependsOn(id: string, dependsOn: readonly string[] | "children" | undefined): void;
3148
3094
  setLayout(id: string, layout: string | LayoutStrategy<TPose> | null): void;
3149
3095
  setHidden(id: string, hidden: boolean): void;
3150
3096
  setLocked(id: string, locked: boolean): void;
@@ -3182,6 +3128,14 @@ declare const flipAction: Action & {
3182
3128
  requires: string[];
3183
3129
  };
3184
3130
 
3131
+ /** Options for {@link createResizeAction}. */
3132
+ interface ResizeActionOptions {
3133
+ /** Runs in place of the scene commit, handed each resized node's pose at
3134
+ * release, so a host keeping the geometry as data can store it. The scene
3135
+ * is left as it was, and no undo entry is made; the constraints' `onEnd`
3136
+ * answers are not asked for. */
3137
+ commit?: (poses: ReadonlyMap<NodeId, unknown>, deps: ActionDeps) => void;
3138
+ }
3185
3139
  /**
3186
3140
  * Anchor-relative drag resize, committed as one batch on release. It needs
3187
3141
  * `InvocationCtx.drag.affordance` with a `handle:*` kind.
@@ -3192,6 +3146,10 @@ declare const flipAction: Action & {
3192
3146
  * carries the constraints, point snaps, and `expandIds`; absent, the invoker
3193
3147
  * runs no constraints and `ids => ids` expansion.
3194
3148
  */
3149
+ declare function createResizeAction(opts?: ResizeActionOptions): Action & {
3150
+ requires: string[];
3151
+ };
3152
+ /** The resize that commits to the scene. */
3195
3153
  declare const resizeAction: Action & {
3196
3154
  requires: string[];
3197
3155
  };
@@ -3628,6 +3586,27 @@ declare const sliceAction: Action & {
3628
3586
  requires: string[];
3629
3587
  };
3630
3588
 
3589
+ /** Options for {@link createDeleteAction}. */
3590
+ interface DeleteActionOptions {
3591
+ /** Runs in place of the default, {@link commitDeleteToScene}. */
3592
+ commit?: (ids: readonly NodeId[], deps: ActionDeps) => void;
3593
+ }
3594
+ /** The default commit: removes `ids` and their dependents as one undo entry,
3595
+ * then empties the selection. */
3596
+ declare function commitDeleteToScene(ids: readonly NodeId[], deps: ActionDeps): void;
3597
+ /** Delete on Delete and Backspace: hands the selected ids to `commit`. */
3598
+ declare function createDeleteAction(opts?: DeleteActionOptions): Action & {
3599
+ requires: string[];
3600
+ };
3601
+ /**
3602
+ * Removes every selected node from the scene as one undo entry. Undo restores
3603
+ * everything the removal cascaded — a container's children and a deleted
3604
+ * node's dependents come back with it, at their own slots.
3605
+ */
3606
+ declare const deleteAction: Action & {
3607
+ requires: string[];
3608
+ };
3609
+
3631
3610
  /**
3632
3611
  * Tuning for {@link makePinchZoomAction}.
3633
3612
  */
@@ -4323,318 +4302,6 @@ interface UseStickyToolOptions extends InsertToolOptions, StickyStyle {
4323
4302
  */
4324
4303
  declare function useStickyTool(options?: UseStickyToolOptions): Tool;
4325
4304
 
4326
- /** The part of a scene a rig's skins read and write. */
4327
- interface SkinScene<TPose> {
4328
- get(id: NodeId): {
4329
- pose: TPose;
4330
- data?: unknown;
4331
- } | undefined;
4332
- readonly overrides: PoseOverrides<TPose>;
4333
- setPose(id: NodeId, pose: TPose): void;
4334
- update(id: NodeId, patch: {
4335
- data: never;
4336
- }): void;
4337
- }
4338
- /** Where a node's path is drawn, for a skin to bend: `null` for a node with none. */
4339
- type RestPath<TPose> = (node: {
4340
- pose: TPose;
4341
- data?: unknown;
4342
- }) => Path | null;
4343
- /** The path in a node's `data.path`, carried through its pose as `kit:path` paints it. */
4344
- declare function dataRestPath<TPose>(node: {
4345
- pose: TPose;
4346
- data?: unknown;
4347
- }): Path | null;
4348
-
4349
- /** The part of a scene a rig writes to. */
4350
- interface RigScene<TPose> extends SkinScene<TPose> {
4351
- batch<T>(label: string, fn: () => T): T;
4352
- }
4353
- /** What a `RigApply` knows about the node it is posing. */
4354
- interface RigApplyContext<TPose> {
4355
- /** The joint the node rides. */
4356
- joint: string;
4357
- node: NodeId;
4358
- /** The node's document pose when the rig was bound — where it sits at the
4359
- * bind pose. */
4360
- rest: TPose;
4361
- /** The joint's world transform at the bind pose. */
4362
- restWorld: GlMat3;
4363
- /** `world * inverse(restWorld)`: the motion since the bind pose, in world
4364
- * space. Carrying `rest` by it is what welding the node to the joint means. */
4365
- fromRest: GlMat3;
4366
- }
4367
- /** Turns a joint's world transform into a pose for one bound node. The only
4368
- * part of a rig that knows the scene's pose shape. */
4369
- type RigApply<TPose> = (world: GlMat3, ctx: RigApplyContext<TPose>) => TPose;
4370
- /** Options for `bindRig`. */
4371
- interface BindRigOptions<TPose> {
4372
- scene: RigScene<TPose>;
4373
- skeleton: Skeleton;
4374
- /** Joint name → the node or nodes that ride it. Each node keeps the offset
4375
- * from its joint that it has at the bind pose. */
4376
- bindings?: Readonly<Record<string, NodeId | readonly NodeId[]>>;
4377
- /** Node id → the weights its path bends by. Where a bound node moves whole with one joint,
4378
- * a skinned node's points each follow their own joints, and the rig shows the bent path
4379
- * through the node's pose override, posed at the path's bounds. */
4380
- skins?: Readonly<Record<NodeId, Skin>>;
4381
- /** Where a skinned node's path is drawn when the rig is bound. Default
4382
- * {@link dataRestPath}: the node's `data.path`, through its pose. */
4383
- restPath?: RestPath<TPose>;
4384
- /** Default: {@link rigidRigApply} over `descriptor`. */
4385
- apply?: RigApply<TPose>;
4386
- /** The descriptor the default `apply` reads and writes poses through.
4387
- * Default `AUTO_POSE_DESCRIPTOR`. */
4388
- descriptor?: PoseDescriptor<TPose>;
4389
- }
4390
- /** A skeleton bound to scene nodes, as `bindRig` returns it. */
4391
- interface Rig {
4392
- readonly skeleton: Skeleton;
4393
- /**
4394
- * The rig's pose as a value an animator moves. Its committed value starts as `{}`, the bind
4395
- * pose, and each frame the rig is posed with what the target shows. A clip is a
4396
- * `SampledTrack<Pose>` given this as its `target`: clips on one rig crossfade by their
4397
- * `weight`s, weights short of 1 leave the rest to the committed pose, and a `spring` or
4398
- * `tween` from a pose away from the committed one adds on top. `animator.hold` shows a pose made elsewhere the same way, an
4399
- * IK solve included.
4400
- */
4401
- readonly target: Target<Pose>;
4402
- /**
4403
- * Commit `pose` and move every bound node to what the target now shows, which is `pose`
4404
- * unless something is animating the target; a hold on it weighs the new pose in when it is
4405
- * next read, at the animator's next frame or the hold's `touch()`. Writes go through the scene's pose overrides —
4406
- * no history entry, no document write, no version bump — and are committed. `root`, where
4407
- * given, replaces the placement, as {@link Rig.place}.
4408
- */
4409
- pose(pose: Pose, root?: GlMat3): void;
4410
- /** Place the rig in the world by `root`, which may mirror it, and pose it there. It stays
4411
- * until placed again; with no `root`, the rig goes back to where its skeleton puts it. */
4412
- place(root?: GlMat3): void;
4413
- /** The joint world transforms as the rig was last posed, root applied. */
4414
- world(): ReadonlyMap<string, GlMat3>;
4415
- /** Write the current frame into the bound nodes' document poses as one
4416
- * undo entry, and drop the overrides. A skinned node's bent path goes into
4417
- * its `data.path`. Later frames stay relative to the bind-time rest, so
4418
- * baking does not compound. */
4419
- bake(label?: string): void;
4420
- /** Drop the overrides; the nodes show their document poses again until the
4421
- * rig is next posed. */
4422
- release(): void;
4423
- }
4424
- /**
4425
- * Carries a node rigidly with its joint: the rest pose's center moves by
4426
- * `fromRest`, and its rotation turns with the rest pose's x-axis. Scale in the
4427
- * joint chain moves positions but not sizes — the pose model holds no shear,
4428
- * and a sized pose under anisotropic scale would need one. Write an `apply`
4429
- * that reads `world` to size nodes from joint scale.
4430
- */
4431
- declare function rigidRigApply<TPose>(descriptor: PoseDescriptor<TPose>): RigApply<TPose>;
4432
- /**
4433
- * Bind a skeleton's joints to scene nodes. Nodes are written in world space
4434
- * and the rig resolves its own hierarchy, so bound nodes are best left
4435
- * unparented, or under containers whose pose does not compose into theirs;
4436
- * the scene's tree stays free to order and group them for drawing.
4437
- */
4438
- declare function bindRig<TPose>(options: BindRigOptions<TPose>): Rig;
4439
-
4440
- /** What a rig reads from node data: a `skeleton` on the node that is the rig, and on the nodes
4441
- * under it a `skin` for a path that bends or a `joint` for a node that rides one whole. */
4442
- interface RigNodeData {
4443
- /** Joints relative to the node's pose: its box's top-left corner, turned as the node is. */
4444
- skeleton?: Skeleton;
4445
- skin?: Skin;
4446
- joint?: string;
4447
- }
4448
- /** Weights to bind in place of the document's, and word of when they change. A `RigEditState`
4449
- * is one: it holds what a stroke of the weight tool has painted and not yet written. */
4450
- interface PaintedSkins {
4451
- /** By node. A new map whenever the weights change. */
4452
- painted(): ReadonlyMap<NodeId, Skin>;
4453
- listen(fn: () => void): () => void;
4454
- }
4455
- /** The part of a scene `rigFromNode` reads. */
4456
- interface RigNodeSource<TPose> {
4457
- get(id: NodeId): {
4458
- pose: TPose;
4459
- data?: unknown;
4460
- } | undefined;
4461
- childrenOf(id: NodeId): readonly NodeId[];
4462
- }
4463
- /** The skeleton, bindings, and skins a rig node declares, as `bindRig` takes them. */
4464
- interface RigNodeParts {
4465
- skeleton: Skeleton;
4466
- bindings: Record<string, NodeId[]>;
4467
- skins: Record<NodeId, Skin>;
4468
- }
4469
- /**
4470
- * A skeleton as a rig node's data keeps it, moved to where the node's pose puts it: its root
4471
- * joints are offset from the pose box's top-left corner and turned as the node is. Joints
4472
- * under a root are relative to their parents and are left as they are.
4473
- */
4474
- declare function placeSkeleton<TPose>(skeleton: Skeleton, pose: TPose, descriptor?: PoseDescriptor<TPose>): Skeleton;
4475
- /** The inverse of {@link placeSkeleton}: a skeleton in the scene's space, as the node at
4476
- * `pose` would keep it in its data. */
4477
- declare function unplaceSkeleton<TPose>(skeleton: Skeleton, pose: TPose, descriptor?: PoseDescriptor<TPose>): Skeleton;
4478
- /**
4479
- * Read a rig out of the scene: the skeleton in `id`'s `data.skeleton`, placed by that node's
4480
- * pose, and under it every node whose data has a `skin` or names a `joint`.
4481
- */
4482
- declare function rigFromNode<TPose>(scene: RigNodeSource<TPose>, id: NodeId, descriptor?: PoseDescriptor<TPose>): RigNodeParts;
4483
- /** Options for `useRigNode`. */
4484
- interface UseRigNodeOptions<TPose> extends Pick<BindRigOptions<TPose>, 'apply' | 'descriptor' | 'restPath'> {
4485
- scene: RigScene<TPose> & RigNodeSource<TPose> & {
4486
- subscribe(listener: () => void): () => void;
4487
- getVersion(): number;
4488
- };
4489
- /** The node whose data holds the skeleton. */
4490
- node: NodeId;
4491
- /** Weights bound in place of a node's `data.skin` while they are held. Give it the
4492
- * `RigEditState` the weight tool has, and a stroke bends the path as it is painted. */
4493
- painting?: PaintedSkins;
4494
- }
4495
- /**
4496
- * A {@link Rig} read from a node, as {@link rigFromNode} reads it. It is bound again when the
4497
- * rig node or a node under it changes its pose or data, or when nodes under it come or go; an
4498
- * edit elsewhere in the scene leaves it alone. A rig bound again keeps its `target`, with the
4499
- * animations running on it, its committed pose, and its placement, unless the skeleton's
4500
- * joints were added, removed, renamed, or reordered. Then it has a new `target`, which takes
4501
- * over the placement and the pose of every joint the skeleton still names. Animations go on
4502
- * running on the target they were started on and show through the new one, so a joint that
4503
- * was renamed stops moving.
4504
- */
4505
- declare function useRigNode<TPose>(options: UseRigNodeOptions<TPose>): Rig;
4506
-
4507
- /** What the bone and weight tools share between gestures: the joint they act on, and the
4508
- * weights a stroke has painted and not yet written. */
4509
- interface RigEditState extends PaintedSkins {
4510
- /** The active joint's name, or `null`. */
4511
- active(): string | null;
4512
- setActive(joint: string | null): void;
4513
- /** Weights a stroke of the weight tool has painted and not yet written, by node. Empty
4514
- * between strokes. `useRigNode` given this state as `painting` binds them as they change. */
4515
- painted(): ReadonlyMap<NodeId, Skin>;
4516
- /** Replace the painted weights; `null` empties them. */
4517
- paint(next: ReadonlyMap<NodeId, Skin> | null): void;
4518
- /** Notified when the active joint or the painted weights change. Returns an unsubscribe. */
4519
- listen(fn: () => void): () => void;
4520
- }
4521
- /** A `RigEditState` with no joint active. Hand one to both tools so a joint picked with the
4522
- * bone tool is the one the weight tool paints. */
4523
- declare function createRigEditState(): RigEditState;
4524
-
4525
- /** Options for `useBoneTool`. */
4526
- interface UseBoneToolOptions {
4527
- scene: Scene<unknown, string, unknown>;
4528
- /** The node whose data holds the skeleton, or will once a bone is drawn: usually read from
4529
- * the selection. `null` leaves the tool with nothing to edit. */
4530
- rig: () => NodeId | null;
4531
- /** Shared with `useWeightTool`, so both act on one joint. Default: the tool's own. */
4532
- state?: RigEditState;
4533
- /** Override the default keybinding (`{ key: 'J' }`). Pass `null` to omit. */
4534
- keybinding?: ToolKeybinding | null;
4535
- /** Screen px around a joint within which a press takes it. Default 10. */
4536
- reach?: number;
4537
- }
4538
- /**
4539
- * Draws and edits the skeleton in a node's `data.skeleton`. A drag on a joint moves it, with
4540
- * the joints under it; a drag from anywhere else draws a bone, from the active joint if there
4541
- * is one and from the press if not, and the new joint becomes the active one. A click picks
4542
- * the active joint or clears it, Delete removes it with everything under it, taking its
4543
- * weights out of every skin beneath the rig node, and Escape clears it. Each edit is one undo
4544
- * entry.
4545
- */
4546
- declare function useBoneTool(options: UseBoneToolOptions): Tool;
4547
-
4548
- /** A rig node and its skeleton in the scene's space, as the rig tools edit and draw it. */
4549
- interface PlacedRig {
4550
- id: NodeId;
4551
- skeleton: Skeleton;
4552
- }
4553
- /** The rig at node `id`, an empty skeleton for a node that has none yet, or `null` when
4554
- * there is no such node. */
4555
- declare function placedRig(scene: {
4556
- get(id: NodeId): {
4557
- pose: unknown;
4558
- data?: unknown;
4559
- } | undefined;
4560
- }, id: NodeId | null): PlacedRig | null;
4561
-
4562
- /**
4563
- * A screen-space layer drawing a skeleton as bones and joints at a constant size: a line from
4564
- * each joint to its parent, a ring on each joint, and the active joint filled.
4565
- */
4566
- declare function createBoneOverlay(source: {
4567
- id: string;
4568
- /** The skeleton to draw, in the scene's space, or `null` for none. */
4569
- skeleton(): Skeleton | null;
4570
- active(): string | null;
4571
- subscribe(fn: () => void): () => void;
4572
- /** Joint dot radius in screen px, read each frame. Default `JOINT_RADIUS_PX`. */
4573
- jointRadiusPx?: () => number | undefined;
4574
- }): RenderLayer<unknown>;
4575
-
4576
- /** Options for `useWeightTool`. */
4577
- interface UseWeightToolOptions {
4578
- scene: Scene<unknown, string, unknown>;
4579
- /** The node whose data holds the skeleton; the tool paints the paths under it. */
4580
- rig: () => NodeId | null;
4581
- /** Shared with `useBoneTool`, so both act on one joint. Default: the tool's own. */
4582
- state?: RigEditState;
4583
- /** Override the default keybinding (`{ key: 'W' }`). Pass `null` to omit. */
4584
- keybinding?: ToolKeybinding | null;
4585
- /** The brush's radius in screen px. Default 24. */
4586
- radius?: number;
4587
- /** Screen px around a joint within which a click picks it. Default 10. */
4588
- reach?: number;
4589
- }
4590
- /**
4591
- * Paints how much the active joint weighs each point of the paths under a rig node, into
4592
- * their `data.skin`. A click on a joint makes it the active one. A drag is a round brush:
4593
- * points under it follow the active joint more, the nearer the brush's center, and their
4594
- * other joints give way; with Alt held they follow it less. A click away from any joint is
4595
- * one dab. Every point shows as a dot colored by the active joint's share of it. A stroke is
4596
- * one undo entry, and until it ends its weights are in `state.painted()`, which `useRigNode`
4597
- * binds when given the same `state` as `painting`.
4598
- */
4599
- declare function useWeightTool(options: UseWeightToolOptions): Tool;
4600
-
4601
- /** One path under the rig node, where it is drawn, with the weights now showing. */
4602
- interface WeighedPath {
4603
- id: NodeId;
4604
- path: PolygonPath;
4605
- skin: Skin;
4606
- }
4607
- /** What the weight tool's actions read and write, all of it the tool's own. */
4608
- interface WeightEnv {
4609
- scene(): Scene<unknown, string, unknown>;
4610
- placed(): PlacedRig | null;
4611
- state: RigEditState;
4612
- /** Screen px around a joint within which a click picks it. */
4613
- reachPx(): number;
4614
- /** The brush's radius in screen px. */
4615
- radiusPx(): number;
4616
- /** Weights a stroke has painted and not yet committed, by node. */
4617
- painted(): ReadonlyMap<NodeId, Skin>;
4618
- paint(next: ReadonlyMap<NodeId, Skin> | null): void;
4619
- }
4620
- /** Every path under the rig node, with what `env.painted()` holds for it in place of its
4621
- * `data.skin`. */
4622
- declare function weighedPaths(env: Pick<WeightEnv, 'scene' | 'placed' | 'painted'>): WeighedPath[];
4623
-
4624
- /**
4625
- * A screen-space layer drawing a dot on every point of every path under a rig, anchors and
4626
- * curve handles alike, colored by how much the active joint weighs it. With no joint active
4627
- * the dots are gray.
4628
- */
4629
- declare function createWeightOverlay(source: {
4630
- id: string;
4631
- paths(): readonly WeighedPath[];
4632
- active(): string | null;
4633
- subscribe(fn: () => void): () => void;
4634
- /** Point dot radius in screen px, read each frame. Default `POINT_RADIUS_PX`. */
4635
- pointRadiusPx?: () => number | undefined;
4636
- }): RenderLayer<unknown>;
4637
-
4638
4305
  /**
4639
4306
  * In-progress pen anchor. A click places a corner, with no handles. A drag
4640
4307
  * sets `outHandle` to the drag point and `inHandle` to its mirror through
@@ -5297,6 +4964,8 @@ interface UseHoverTrackingArgs {
5297
4964
  id: NodeId;
5298
4965
  } | null;
5299
4966
  enabled?: boolean;
4967
+ /** Called when the hovered id changes, `null` once the pointer is over no node or has left. */
4968
+ onChange?: (id: NodeId | null) => void;
5300
4969
  }
5301
4970
  /** What `useHoverTracking` returns. Both members keep their identity. */
5302
4971
  interface HoverTracking {
@@ -5381,96 +5050,11 @@ interface SceneCanvasPointerProps {
5381
5050
  * behavior, so a pick it made is already in the selection, and fires
5382
5051
  * again on a node that was already picked. */
5383
5052
  onClick?: (hit: SceneCanvasHit | null) => void;
5053
+ /** Called when the topmost pickable node under the pointer changes, with
5054
+ * its id, and with `null` once there is none or the pointer leaves. */
5055
+ onHover?: (id: string | null) => void;
5384
5056
  }
5385
5057
 
5386
- /**
5387
- * The kit's built-in shape kinds — one table, every other spelling derived.
5388
- *
5389
- * This module imports nothing on purpose: `useBuiltinShapeTools` imports the
5390
- * package barrel, so anything barrel-reachable that needs these lists at
5391
- * module-evaluation time must not route through it.
5392
- */
5393
- /** What the kit knows about one built-in shape kind. */
5394
- interface ShapeKindDescriptor {
5395
- /** Mounted as a built-in shape tool by `useBuiltinShapeTools`, and so a
5396
- * member of `BuiltinShapeToolId` / `KIT_SHAPE_KINDS`. `image` is false:
5397
- * `useImageTool` needs a `src` and can't be auto-mounted. */
5398
- readonly tool: boolean;
5399
- /** `insertAction` emits an `insertPreview` overlay for this kind, and the
5400
- * dispatcher overlay layer knows how to draw it. Kinds without one still
5401
- * commit; they just have no live drag preview. */
5402
- readonly insertPreview: boolean;
5403
- /** A node of this kind is a text node: an insert drops into its caret, and
5404
- * its properties carry the text groups. Absent, it is not. */
5405
- readonly text?: boolean;
5406
- }
5407
- /**
5408
- * Declaration order is the enumeration order of every derived list —
5409
- * `KIT_SHAPE_KINDS`, and through it `defaultNodeRouting` /
5410
- * `defaultNodeProperties` / `BUILTIN_TOOL_IDS`.
5411
- */
5412
- declare const SHAPE_KINDS: {
5413
- readonly rect: {
5414
- readonly tool: true;
5415
- readonly insertPreview: true;
5416
- };
5417
- readonly ellipse: {
5418
- readonly tool: true;
5419
- readonly insertPreview: true;
5420
- };
5421
- readonly line: {
5422
- readonly tool: true;
5423
- readonly insertPreview: true;
5424
- };
5425
- readonly polygon: {
5426
- readonly tool: true;
5427
- readonly insertPreview: true;
5428
- };
5429
- readonly star: {
5430
- readonly tool: true;
5431
- readonly insertPreview: true;
5432
- };
5433
- readonly pen: {
5434
- readonly tool: true;
5435
- readonly insertPreview: false;
5436
- };
5437
- readonly pencil: {
5438
- readonly tool: true;
5439
- readonly insertPreview: true;
5440
- };
5441
- readonly lasso: {
5442
- readonly tool: true;
5443
- readonly insertPreview: false;
5444
- };
5445
- readonly text: {
5446
- readonly tool: true;
5447
- readonly insertPreview: true;
5448
- readonly text: true;
5449
- };
5450
- readonly sticky: {
5451
- readonly tool: true;
5452
- readonly insertPreview: true;
5453
- readonly text: true;
5454
- };
5455
- readonly image: {
5456
- readonly tool: false;
5457
- readonly insertPreview: true;
5458
- };
5459
- };
5460
- /** Every kind in the table, tool or not. */
5461
- type ShapeKind = keyof typeof SHAPE_KINDS;
5462
- /** The keys of a shape-kind table whose descriptor sets `F` to `true`. */
5463
- type ShapeKindsWhere<T, F extends keyof ShapeKindDescriptor> = {
5464
- [K in keyof T]: T[K] extends Record<F, true> ? K : never;
5465
- }[keyof T];
5466
- /** Built-in shape tool ids handled by `useBuiltinShapeTools`. */
5467
- type BuiltinShapeToolId = ShapeKindsWhere<typeof SHAPE_KINDS, 'tool'>;
5468
- /** The insert kinds the kit's dispatcher overlay layer knows how to render.
5469
- * Consumer-defined kinds fall outside it: no live preview, commit unaffected. */
5470
- type KitInsertShape = ShapeKindsWhere<typeof SHAPE_KINDS, 'insertPreview'>;
5471
- /** Runtime, iterable list of the shape-tool ids in `BuiltinShapeToolId`. */
5472
- declare const KIT_SHAPE_KINDS: readonly BuiltinShapeToolId[];
5473
-
5474
5058
  /**
5475
5059
  * Turns pasted or dropped plain text into a text node sized to the string. Registered nowhere by
5476
5060
  * default: a canvas opts in with `ingestion={{ handlers: [kitTextHandler] }}`.
@@ -5606,6 +5190,9 @@ interface NodeRouting {
5606
5190
  /** Enumerate registered kinds in registration order. */
5607
5191
  list(): readonly NodeRoutingEntry[];
5608
5192
  }
5193
+ /** The routing kind of a node: the name of the first entry whose `matches(data, node)` returns
5194
+ * true, or `'unknown'`. What `NodeRouting.classify` answers, for a caller holding a plain list. */
5195
+ declare function routeKind(entries: readonly NodeRoutingEntry[], data: unknown, node?: RoutedNode): string;
5609
5196
  /** Build a registry of per-node-kind routing entries. Registering a duplicate
5610
5197
  * kind name throws. */
5611
5198
  declare function createNodeRouting(): NodeRouting;
@@ -6212,6 +5799,12 @@ interface CanvasProps<TPose = unknown> extends SurfaceSizeProps {
6212
5799
  * zoom, whatever the scene's world unit. A number holds a fixed world
6213
5800
  * tolerance instead. */
6214
5801
  flattenTolerance?: FlattenTolerance;
5802
+ /** How images drawn smaller than their pixels are filtered, forwarded to
5803
+ * `WeaselRendererOptions.imageMinification`. Default `'linear'`, one tap,
5804
+ * which aliases an image drawn at half size or less; `'auto'` builds an
5805
+ * image's mipmaps the first time a frame draws it that small. Changing it
5806
+ * re-uploads every image. */
5807
+ imageMinification?: ImageMinification;
6215
5808
  /** Which unchanged layers the renderer keeps as pixels between frames and
6216
5809
  * composites as one quad, instead of drawing their commands again — see
6217
5810
  * `RenderLayer.retain` and `LayerRetainPolicy`. `false` retains no layer on
@@ -6298,11 +5891,14 @@ interface CanvasProps<TPose = unknown> extends SurfaceSizeProps {
6298
5891
  /** Inline style for the `<canvas>` this component renders; a tool's cursor
6299
5892
  * is merged over it. Not applied under `paintInto`, where only that cursor
6300
5893
  * is written, onto the input element. */
6301
- style?: React__default.CSSProperties;
5894
+ style?: react__default.CSSProperties;
6302
5895
  /** Tab order of the `<canvas>` this component renders. Default 0, so the
6303
5896
  * canvas is focusable. Not applied under `paintInto`: whether the input
6304
5897
  * element can take focus is the caller's to decide. */
6305
5898
  tabIndex?: number;
5899
+ /** Accessible name of the `<canvas>` this component renders; devtools lists the canvas under it.
5900
+ * Not applied under `paintInto`. */
5901
+ 'aria-label'?: string;
6306
5902
  /** Fired when the element input comes from gains focus: the canvas, or
6307
5903
  * under `paintInto` the `inputElement`. Called with the DOM event. */
6308
5904
  onFocus?: (event: FocusEvent) => void;
@@ -6327,7 +5923,7 @@ interface CanvasProps<TPose = unknown> extends SurfaceSizeProps {
6327
5923
  * (move/resize/rotate) instead of the committed scene; an id outside the active overlay
6328
5924
  * falls back to the adapter.
6329
5925
  */
6330
- helpersRef?: React__default.MutableRefObject<CanvasHelpers<TPose> | null>;
5926
+ helpersRef?: react__default.MutableRefObject<CanvasHelpers<TPose> | null>;
6331
5927
  /**
6332
5928
  * Debug overlay configuration.
6333
5929
  * - `undefined` (default): read `?debug=…` from the URL.
@@ -6341,7 +5937,7 @@ interface CanvasProps<TPose = unknown> extends SurfaceSizeProps {
6341
5937
  debug?: DebugConfig | false;
6342
5938
  /** Test-only escape hatch: writes the live debug sink to this ref so tests
6343
5939
  * can call `snapshot()` after a render. No effect when debug is off. */
6344
- debugSinkRef?: React__default.MutableRefObject<CanvasDebugSink | null>;
5940
+ debugSinkRef?: react__default.MutableRefObject<CanvasDebugSink | null>;
6345
5941
  /**
6346
5942
  * Shader programs to compile before the frame that first draws them; one
6347
5943
  * not named here compiles on that frame. Each handle comes from a
@@ -6414,6 +6010,115 @@ interface CanvasProps<TPose = unknown> extends SurfaceSizeProps {
6414
6010
  * Pass a stable object: a new one each render re-registers it. */
6415
6011
  declare function useSnapSource(source: SnapSource): void;
6416
6012
 
6013
+ /**
6014
+ * Add a follower to the `transformFollowers` dep for the lifetime of the
6015
+ * calling component, after every one already there in its scope and the
6016
+ * scopes above. `follower` is read each time the dep is; answering null adds
6017
+ * nothing.
6018
+ */
6019
+ declare function useTransformFollower(follower: () => TransformFollower | null): void;
6020
+
6021
+ /**
6022
+ * The kit's built-in shape kinds — one table, every other spelling derived.
6023
+ *
6024
+ * This module imports nothing on purpose: `useBuiltinShapeTools` imports the
6025
+ * package barrel, so anything barrel-reachable that needs these lists at
6026
+ * module-evaluation time must not route through it.
6027
+ */
6028
+ /** What the kit knows about one built-in shape kind. */
6029
+ interface ShapeKindDescriptor {
6030
+ /** Mounted as a built-in shape tool by `useBuiltinShapeTools`, and so a
6031
+ * member of `BuiltinShapeToolId` / `KIT_SHAPE_KINDS`. `image` is false:
6032
+ * `useImageTool` needs a `src` and can't be auto-mounted. */
6033
+ readonly tool: boolean;
6034
+ /** `insertAction` emits an `insertPreview` overlay for this kind, and the
6035
+ * dispatcher overlay layer knows how to draw it. Kinds without one still
6036
+ * commit; they just have no live drag preview. */
6037
+ readonly insertPreview: boolean;
6038
+ /** The tool family a kind with a tool belongs to: which built-in tool set
6039
+ * names it, and so which palette group it sits in. */
6040
+ readonly family?: 'shape' | 'draw' | 'select' | 'type';
6041
+ /** A node of this kind is a text node: an insert drops into its caret, and
6042
+ * its properties carry the text groups. Absent, it is not. */
6043
+ readonly text?: boolean;
6044
+ }
6045
+ /**
6046
+ * Declaration order is the enumeration order of every derived list —
6047
+ * `KIT_SHAPE_KINDS`, and through it `defaultNodeRouting` /
6048
+ * `defaultNodeProperties` / `BUILTIN_TOOL_IDS`.
6049
+ */
6050
+ declare const SHAPE_KINDS: {
6051
+ readonly rect: {
6052
+ readonly tool: true;
6053
+ readonly insertPreview: true;
6054
+ readonly family: "shape";
6055
+ };
6056
+ readonly ellipse: {
6057
+ readonly tool: true;
6058
+ readonly insertPreview: true;
6059
+ readonly family: "shape";
6060
+ };
6061
+ readonly line: {
6062
+ readonly tool: true;
6063
+ readonly insertPreview: true;
6064
+ readonly family: "shape";
6065
+ };
6066
+ readonly polygon: {
6067
+ readonly tool: true;
6068
+ readonly insertPreview: true;
6069
+ readonly family: "shape";
6070
+ };
6071
+ readonly star: {
6072
+ readonly tool: true;
6073
+ readonly insertPreview: true;
6074
+ readonly family: "shape";
6075
+ };
6076
+ readonly pen: {
6077
+ readonly tool: true;
6078
+ readonly insertPreview: false;
6079
+ readonly family: "draw";
6080
+ };
6081
+ readonly pencil: {
6082
+ readonly tool: true;
6083
+ readonly insertPreview: true;
6084
+ readonly family: "draw";
6085
+ };
6086
+ readonly lasso: {
6087
+ readonly tool: true;
6088
+ readonly insertPreview: false;
6089
+ readonly family: "select";
6090
+ };
6091
+ readonly text: {
6092
+ readonly tool: true;
6093
+ readonly insertPreview: true;
6094
+ readonly text: true;
6095
+ readonly family: "type";
6096
+ };
6097
+ readonly sticky: {
6098
+ readonly tool: true;
6099
+ readonly insertPreview: true;
6100
+ readonly text: true;
6101
+ readonly family: "type";
6102
+ };
6103
+ readonly image: {
6104
+ readonly tool: false;
6105
+ readonly insertPreview: true;
6106
+ };
6107
+ };
6108
+ /** Every kind in the table, tool or not. */
6109
+ type ShapeKind = keyof typeof SHAPE_KINDS;
6110
+ /** The keys of a shape-kind table whose descriptor sets `F` to `true`. */
6111
+ type ShapeKindsWhere<T, F extends keyof ShapeKindDescriptor> = {
6112
+ [K in keyof T]: T[K] extends Record<F, true> ? K : never;
6113
+ }[keyof T];
6114
+ /** Built-in shape tool ids handled by `useBuiltinShapeTools`. */
6115
+ type BuiltinShapeToolId = ShapeKindsWhere<typeof SHAPE_KINDS, 'tool'>;
6116
+ /** The insert kinds the kit's dispatcher overlay layer knows how to render.
6117
+ * Consumer-defined kinds fall outside it: no live preview, commit unaffected. */
6118
+ type KitInsertShape = ShapeKindsWhere<typeof SHAPE_KINDS, 'insertPreview'>;
6119
+ /** Runtime, iterable list of the shape-tool ids in `BuiltinShapeToolId`. */
6120
+ declare const KIT_SHAPE_KINDS: readonly BuiltinShapeToolId[];
6121
+
6417
6122
  /** Per-tool option overrides for the built-in tools.
6418
6123
  * Each entry is a narrow subset of the underlying hook's options surface
6419
6124
  * — just the knobs that need consumer control under the bundle pattern. */
@@ -6431,21 +6136,7 @@ interface BuiltinToolOptions {
6431
6136
  sticky?: StickyStyle;
6432
6137
  /** The knife: screen px around the first point within which a click closes the cut. */
6433
6138
  slice?: {
6434
- closeHitRadius?: number;
6435
- };
6436
- /** The bone and weight tools. `rig` names the node they edit; by default the one
6437
- * selected node, or the nearest ancestor of it holding `data.skeleton`. `state` is the
6438
- * joint they share, which a canvas otherwise makes for itself; pass the one handed to
6439
- * `useRigNode` as `painting` so a stroke shows as it is painted. `reach` is the screen
6440
- * px around a joint within which a press takes it. */
6441
- rig?: {
6442
- rig?: () => NodeId | null;
6443
- state?: RigEditState;
6444
- reach?: number;
6445
- };
6446
- /** The weight tool's brush radius, in screen px. */
6447
- weight?: {
6448
- radius?: number;
6139
+ closeHitRadius?: number;
6449
6140
  };
6450
6141
  }
6451
6142
 
@@ -6492,6 +6183,26 @@ interface SceneCanvasViewport {
6492
6183
  recenter?: () => View | void;
6493
6184
  }
6494
6185
 
6186
+ /** Built-in tool ids SceneCanvas knows how to mount, through `defaultTools` or a preset. */
6187
+ type BuiltinToolId = 'select' | 'hand' | BuiltinShapeToolId | 'slice';
6188
+ /** The selection tools: click and marquee, and the lasso. */
6189
+ declare const SELECT_TOOLS: ToolSet<BuiltinToolId>;
6190
+ /** The view tools. */
6191
+ declare const VIEW_TOOLS: ToolSet<BuiltinToolId>;
6192
+ /** The tools that drag out a closed or open primitive. */
6193
+ declare const SHAPE_TOOLS: ToolSet<BuiltinToolId>;
6194
+ /** The freehand and bezier path tools. */
6195
+ declare const DRAW_TOOLS: ToolSet<BuiltinToolId>;
6196
+ /** The text tools: text and the sticky note. */
6197
+ declare const TYPE_TOOLS: ToolSet<BuiltinToolId>;
6198
+ /** The tools that cut the page itself. */
6199
+ declare const PAGE_TOOLS: ToolSet<BuiltinToolId>;
6200
+ /** Every built-in tool, in palette order: the navigation tools, the shape-kind
6201
+ * table's tools in its order, then the knife. */
6202
+ declare const BUILTIN_TOOLS: ToolSet<BuiltinToolId>;
6203
+ /** Every built-in tool id, in palette order: {@link BUILTIN_TOOLS} opened. */
6204
+ declare const BUILTIN_TOOL_IDS: readonly BuiltinToolId[];
6205
+
6495
6206
  /** Default size in CSS pixels for selection corner-handles AND their
6496
6207
  * hit-test radius, at `targetScale = 1`. Deliberately unscaled; kit-internal
6497
6208
  * use sites multiply by `DeviceProfile.targetScale`. */
@@ -6518,12 +6229,6 @@ interface SceneCanvasLongPress {
6518
6229
  type SceneCanvasLayers<TNode extends {
6519
6230
  id: string;
6520
6231
  }, TPose> = LayersMap<TNode, TPose, Partial<SceneSlotConfig<TNode, TPose>>>;
6521
- /** Built-in tool ids SceneCanvas knows how to mount when no `tools` prop
6522
- * is supplied, via `defaultTools`. */
6523
- type BuiltinToolId = 'select' | 'hand' | BuiltinShapeToolId | 'slice' | 'bone' | 'weight';
6524
- /** Every built-in tool id, in palette order: the navigation tools, the shape
6525
- * tools of the `core/shapeKinds` table, then the knife and the rig tools. */
6526
- declare const BUILTIN_TOOL_IDS: readonly BuiltinToolId[];
6527
6232
 
6528
6233
  /** Props for `<SceneCanvas>`. A scene is the only thing it needs. With nothing
6529
6234
  * else it renders that scene and keeps a selection no input sets; `features`
@@ -6593,8 +6298,8 @@ type SceneCanvasProps<TData, TLayer extends string, TPose> = Omit<CanvasProps<TP
6593
6298
  selectTool?: {
6594
6299
  move?: UseMoveOptions<TPose>;
6595
6300
  resize?: UseResizeOptions<TPose>;
6596
- /** Rotation options, or `false` to disable rotation entirely — drops the
6597
- * `rotate` action AND hides the selection rotation-handle chrome. */
6301
+ /** Rotation options, or `false` to hide the rotation handle and bind it to
6302
+ * nothing; the `rotate` action stays, for other tools and `actions.rotate`. */
6598
6303
  rotate?: UseRotateOptions<TPose> | false;
6599
6304
  handleHitRadius?: number;
6600
6305
  /** Override the body-pick used on click/pointerdown. Alt-aware: receives
@@ -6706,8 +6411,8 @@ type SceneCanvasProps<TData, TLayer extends string, TPose> = Omit<CanvasProps<TP
6706
6411
  * - `true` pulls in the built-in for this id (`'pen'`, `'lasso'`,
6707
6412
  * `'hand'`, …), the same as listing it in `defaultTools`. Unknown
6708
6413
  * built-in ids warn in dev and are ignored.
6709
- * - `Tool` adds a new id or replaces an existing one
6710
- * (dev-only warning on replace).
6414
+ * - `Tool` adds a new id or replaces an existing one in place
6415
+ * (dev-only warning if `defaultTools` also names that id).
6711
6416
  * - `false` omits a bundled tool entirely.
6712
6417
  * Auto-wiring (keybindings, dispatcher, action registry) still runs.
6713
6418
  *
@@ -6745,12 +6450,13 @@ type SceneCanvasProps<TData, TLayer extends string, TPose> = Omit<CanvasProps<TP
6745
6450
  onToolsCreated?: (tools: ToolsApi) => void;
6746
6451
  /**
6747
6452
  * Built-in tools SceneCanvas registers in its internal `useTools`, on top
6748
- * of the ones presets bring (`select` from `pick`, `hand` from `view`).
6453
+ * of the ones presets bring (`select` from `pick`, `hand` from `view`):
6454
+ * ids, or sets of them such as `SHAPE_TOOLS`, or `withoutTools(...)` of one.
6749
6455
  * Default: none. Each tool also registers the kit actions it binds, so
6750
6456
  * `['rect']` brings `insert`. Ignored when the consumer supplies their own
6751
6457
  * `tools` prop.
6752
6458
  */
6753
- defaultTools?: readonly BuiltinToolId[];
6459
+ defaultTools?: readonly ToolEntry<BuiltinToolId>[];
6754
6460
  /** Per-tool option overrides for the built-in tools. Each entry is a
6755
6461
  * narrow subset of the underlying hook's options surface — `lasso.mode`,
6756
6462
  * `rig.state`, etc. */
@@ -6795,8 +6501,8 @@ type SceneCanvasProps<TData, TLayer extends string, TPose> = Omit<CanvasProps<TP
6795
6501
  * Given a scene node, return a short human-readable "kind" label (e.g. `'rectangle'`,
6796
6502
  * `'sticky note'`), which the kit publishes per id into any surrounding
6797
6503
  * `<SelectionContextProvider>`. Return `undefined` to skip an entry. When omitted,
6798
- * containers report `'group'`, poses with a `kind` property report `'path'`, and
6799
- * everything else is left unlabelled.
6504
+ * each node reports its routing kind (see `routing`), and a node that routes as
6505
+ * `'unknown'` is left unlabeled.
6800
6506
  */
6801
6507
  describeKind?: (node: Node<TData, TLayer, TPose>) => string | undefined;
6802
6508
  /**
@@ -6960,8 +6666,8 @@ interface FeaturePreset {
6960
6666
  * are standard actions: `<SceneCanvas actions>` overrides and mutes them,
6961
6667
  * and `tune` reaches them. */
6962
6668
  readonly actions?: readonly Action[];
6963
- /** Tools it mounts: a built-in by id, or a tool of its own. */
6964
- readonly tools?: readonly (BuiltinToolId | Tool)[];
6669
+ /** Tools it mounts: a built-in by id or a set of them, or a tool of its own. */
6670
+ readonly tools?: readonly (ToolEntry<BuiltinToolId> | Tool)[];
6965
6671
  /** Its ambient bindings: an always-live entry routing a gesture to its
6966
6672
  * actions under any tool that does not claim the gesture itself. */
6967
6673
  readonly ambient?: (options: FeatureBindingOptions) => Contribution;
@@ -7040,7 +6746,7 @@ declare function rotateAroundAABBCenter(x: number, y: number, width: number, hei
7040
6746
 
7041
6747
  declare function SceneCanvasInner<TData, TLayer extends string, TPose>(props: SceneCanvasProps<TData, TLayer, TPose> & {
7042
6748
  presetSource: PresetSource;
7043
- }, ref: React__default.ForwardedRef<SceneCanvasApi>): React__default.JSX.Element;
6749
+ }, ref: react__default.ForwardedRef<SceneCanvasApi>): react__default.JSX.Element;
7044
6750
  /**
7045
6751
  * The canvas component: renders a `Scene` and wires the interaction stack
7046
6752
  * around it.
@@ -7056,9 +6762,16 @@ declare function SceneCanvasInner<TData, TLayer extends string, TPose>(props: Sc
7056
6762
  * fit a prop (view control, hit queries, redraw requests).
7057
6763
  */
7058
6764
  declare const SceneCanvas: <TData, TLayer extends string, TPose>(props: SceneCanvasProps<TData, TLayer, TPose> & {
7059
- ref?: React__default.Ref<SceneCanvasApi>;
6765
+ ref?: react__default.Ref<SceneCanvasApi>;
7060
6766
  }) => ReturnType<typeof SceneCanvasInner>;
7061
6767
 
6768
+ /**
6769
+ * What a canvas's WebGL2 context is opened with. A context keeps the attributes of whoever opened it
6770
+ * first, and the renderer refuses one without a stencil buffer, so anything that may open a weasel
6771
+ * canvas before its first paint (a pixel reader in a test, a tenant sharing the buffer) asks for these.
6772
+ */
6773
+ declare const CANVAS_CONTEXT_ATTRIBUTES: Readonly<WebGLContextAttributes>;
6774
+
7062
6775
  /** How each `polyline` overlay role reads. An action publishes the run and
7063
6776
  * the word; this table is the whole of the paint, for the dispatcher overlay
7064
6777
  * and for any tool previewing the same kind of run between gestures. */
@@ -7078,8 +6791,8 @@ type LeanSceneCanvasProps<TData, TLayer extends string, TPose> = Omit<SceneCanva
7078
6791
  * `viewPreset` here; pass it.
7079
6792
  */
7080
6793
  declare const LeanSceneCanvas: <TData, TLayer extends string, TPose>(props: LeanSceneCanvasProps<TData, TLayer, TPose> & {
7081
- ref?: React__default.Ref<SceneCanvasApi>;
7082
- }) => React__default.ReactElement;
6794
+ ref?: react__default.Ref<SceneCanvasApi>;
6795
+ }) => react__default.ReactElement;
7083
6796
 
7084
6797
  /**
7085
6798
  * How a painter asks for part of a node's paint to land on top of the node's
@@ -7203,7 +6916,7 @@ interface CursorCoordsHudProps {
7203
6916
  }
7204
6917
  /** Debug overlay showing the pointer's client and world coordinates and the
7205
6918
  * current frame rate, pinned to the canvas's top-right corner. */
7206
- declare function CursorCoordsHud({ canvasRef, anchorRef, viewRef, toWorld, offset }: CursorCoordsHudProps): React$1.JSX.Element | null;
6919
+ declare function CursorCoordsHud({ canvasRef, anchorRef, viewRef, toWorld, offset }: CursorCoordsHudProps): react.JSX.Element | null;
7207
6920
 
7208
6921
  /** Props for `<PickHud>`. */
7209
6922
  interface PickHudProps {
@@ -7231,7 +6944,20 @@ interface PickHudProps {
7231
6944
  }
7232
6945
  /** Debug overlay listing every node under the pointer, with the one a click
7233
6946
  * would actually select shown in bold. */
7234
- declare function PickHud({ canvasRef, anchorRef, viewRef, toWorld, pickEvery, pickBest, offset }: PickHudProps): React$1.JSX.Element | null;
6947
+ declare function PickHud({ canvasRef, anchorRef, viewRef, toWorld, pickEvery, pickBest, offset }: PickHudProps): react.JSX.Element | null;
6948
+
6949
+ /**
6950
+ * The render walk's half of derived paths: resolving one against a scene, and
6951
+ * handing it to the painter.
6952
+ *
6953
+ * The resolver itself lives in `core/scene/derivedPath.ts`, beside
6954
+ * `derivedPose` — a *pose* can derive from a dependency's path, so
6955
+ * `effectivePose` has to be able to reach it.
6956
+ */
6957
+
6958
+ /** `scene` read as `drawnBoundsOf` reads one, each node that shows a computed
6959
+ * path answering it. One object per scene, so it can key a memo. */
6960
+ declare function drawnBoundsScene<TData, TLayer extends string, TPose>(scene: Scene<TData, TLayer, TPose>): DrawnBoundsScene;
7235
6961
 
7236
6962
  /**
7237
6963
  * Synthesize a `<Canvas>`-compatible adapter from a `Scene` primitive.
@@ -7282,6 +7008,8 @@ type SceneCanvasAdapter<TData, TLayer extends string, TPose> = MoveAdapter<Node<
7282
7008
  setLayout(id: string, layout: LayoutStrategy<TPose> | string | null): void;
7283
7009
  /** Move a node to another layer — what a `setLayer` op writes through. */
7284
7010
  setLayer(id: string, layer: TLayer): void;
7011
+ /** Retarget a derived node's sources — what a `setDependsOn` op writes through. */
7012
+ setDependsOn(id: string, dependsOn: readonly string[] | 'children' | undefined): void;
7285
7013
  /** Hide or show a node — what a `setHidden` op writes through. */
7286
7014
  setHidden(id: string, hidden: boolean): void;
7287
7015
  /** Lock or unlock a node — what a `setLocked` op writes through. */
@@ -7430,22 +7158,24 @@ declare const defaultNodeProperties: readonly NodePropertiesEntry[];
7430
7158
  declare const inferredNodeProperties: readonly NodePropertiesEntry[];
7431
7159
 
7432
7160
  /**
7433
- * What an in-flight gesture is proposing, resolved against the committed scene.
7161
+ * What an in-flight gesture is proposing, resolved against the scene.
7434
7162
  *
7435
- * An ongoing action publishes interim poses on its handle rather than writing
7436
- * them to the scene, and `<SceneCanvas>`'s ghost layer used to be the only
7437
- * thing that knew how to read them: which ids are in flight, which of those are
7438
- * roots, whose preview wins when two sources name the same id, and which are
7439
- * merely displaced rather than dragged. None of that is about drawing, and a
7440
- * consumer with its own renderer needs all of it.
7163
+ * An ongoing action names the ids it previews on its handle. A transform —
7164
+ * move, resize, rotate — publishes their poses to the scene's overrides, and
7165
+ * other actions answer `previewPose` on the handle. Resolving them means
7166
+ * knowing which ids are in flight, which of those are roots, whose preview
7167
+ * wins when two sources name the same id, and which are merely displaced
7168
+ * rather than dragged. None of that is about drawing, and a consumer with its
7169
+ * own renderer needs all of it.
7441
7170
  */
7442
7171
 
7443
7172
  /** One node an in-flight gesture is previewing, as {@link resolvePreviews} returns it. */
7444
7173
  interface PreviewNode<TData, TLayer extends string, TPose> {
7445
7174
  id: NodeId;
7446
- /** The node as committed — the gesture has not touched the scene. */
7175
+ /** The node as committed. */
7447
7176
  node: Node<TData, TLayer, TPose>;
7448
- /** The interim pose, or the committed one when only data is in flight. */
7177
+ /** The pose a source previews, else the node's effective pose — where the
7178
+ * scene's overrides put it mid-transform. */
7449
7179
  pose: TPose;
7450
7180
  /** The interim data, or the committed one when only the pose is in flight. */
7451
7181
  data: TData;
@@ -7463,7 +7193,7 @@ interface PreviewNode<TData, TLayer extends string, TPose> {
7463
7193
  * which is what lets a caller draw a container and its contents as one thing.
7464
7194
  *
7465
7195
  * An id with no node is skipped: an insert previews before the node it will
7466
- * create exists. So is an id no source has a pose or data for.
7196
+ * create exists.
7467
7197
  */
7468
7198
  declare function resolvePreviews<TData, TLayer extends string, TPose>(sources: Iterable<GesturePreviewSource>, scene: Scene<TData, TLayer, TPose>): PreviewNode<TData, TLayer, TPose>[];
7469
7199
  /** Every entry in the forest, parents before their children. */
@@ -7629,11 +7359,11 @@ interface IconRegistryProviderProps {
7629
7359
  children: ReactNode;
7630
7360
  }
7631
7361
  /** Holds one icon registry for everything below it. */
7632
- declare function IconRegistryProvider({ icons, variants, children }: IconRegistryProviderProps): React$1.JSX.Element;
7362
+ declare function IconRegistryProvider({ icons, variants, children }: IconRegistryProviderProps): react.JSX.Element;
7633
7363
  /** Mount an empty {@link IconRegistryProvider} only when none is already in scope. */
7634
7364
  declare function IconRegistryProviderIfRoot({ children }: {
7635
7365
  children: ReactNode;
7636
- }): React$1.JSX.Element;
7366
+ }): react.JSX.Element;
7637
7367
  /** The registry in scope, or `null` outside every provider. */
7638
7368
  declare function useIconRegistry(): IconRegistry | null;
7639
7369
 
@@ -7674,7 +7404,7 @@ interface WeaselProviderProps {
7674
7404
  * panel, or two canvases that should agree on the selection. Mount it above
7675
7405
  * any `useTools(...)` call, or the dispatcher sees a stale active tool.
7676
7406
  */
7677
- declare function WeaselProvider({ children, isolate, icons, iconVariants }: WeaselProviderProps): React$1.JSX.Element;
7407
+ declare function WeaselProvider({ children, isolate, icons, iconVariants }: WeaselProviderProps): react.JSX.Element;
7678
7408
 
7679
7409
  /** Options for {@link workspaceTintLayer}. */
7680
7410
  interface WorkspaceTintLayerOptions {
@@ -7817,6 +7547,22 @@ declare const DEFAULT_DEBUG_THEME: DebugTheme;
7817
7547
  */
7818
7548
  declare const DEFAULT_DEBUG_STROKES: DebugStrokes;
7819
7549
 
7550
+ /** Props for `<DevtoolsLabel>`. */
7551
+ interface DevtoolsLabelProps {
7552
+ /** The name a devtools panel lists each canvas below this under, unless the canvas has an `aria-label` or id. */
7553
+ value: string;
7554
+ children?: ReactNode;
7555
+ }
7556
+ /**
7557
+ * Names the canvases beneath it in a devtools panel, ahead of any labeled
7558
+ * element between them and it. A host that frames canvases it did not write,
7559
+ * such as a lab's trial or a story's frame, knows the right name; the nearest
7560
+ * labeled ancestor is only a guess.
7561
+ */
7562
+ declare function DevtoolsLabel({ value, children }: DevtoolsLabelProps): react.JSX.Element;
7563
+ /** The label the nearest `<DevtoolsLabel>` gives, or null outside one. */
7564
+ declare function useDevtoolsLabel(): string | null;
7565
+
7820
7566
  /**
7821
7567
  * Bundle a list of Affordances into a single RenderLayer.
7822
7568
  *
@@ -8426,29 +8172,6 @@ interface TransformArgs<TPose> {
8426
8172
  * coalesce window. Pass an explicit key (or a unique one) to opt out. */
8427
8173
  declare function createTransformOp<TPose>(args: TransformArgs<TPose>): Op;
8428
8174
 
8429
- /** One pose write an {@link createArrangeOp} made. */
8430
- interface ArrangedPose {
8431
- id: string;
8432
- from: unknown;
8433
- to: unknown;
8434
- }
8435
- /** Arguments to {@link createArrangeOp}. */
8436
- interface ArrangeArgs {
8437
- /** The writes to make. Absent until a computed arrangement has run once. */
8438
- placed?: ArrangedPose[];
8439
- }
8440
- /**
8441
- * Op: write a set of poses decided when the op first applies, not when it is
8442
- * built. The scene appends one to an edit that moves nodes into a container,
8443
- * and `compute` asks the container what to do with them after the rest of
8444
- * the edit has landed. Every later apply — redo, or a rebuild from a
8445
- * serialized history — replays the writes it recorded, so the arrangement is
8446
- * decided once. `write` replaces the adapter's `setPose` for this op and its
8447
- * inverses — the scene passes its own, since not every adapter an edit is
8448
- * applied through can write poses.
8449
- */
8450
- declare function createArrangeOp(args: ArrangeArgs, compute?: () => ArrangedPose[], write?: (id: string, pose: unknown) => void): Op;
8451
-
8452
8175
  /**
8453
8176
  * A node's position among its siblings, recorded so an op can put it back.
8454
8177
  *
@@ -8605,6 +8328,20 @@ interface SetLayerArgs {
8605
8328
  * explicit key to opt out. */
8606
8329
  declare function createSetLayerOp(args: SetLayerArgs): Op;
8607
8330
 
8331
+ type DependsOn = readonly string[] | 'children' | undefined;
8332
+ /** Arguments to {@link createSetDependsOnOp}: retarget node `id`'s derivation
8333
+ * from the sources `from` to `to`. `undefined` is no derivation. */
8334
+ interface SetDependsOnArgs {
8335
+ id: string;
8336
+ from: DependsOn;
8337
+ to: DependsOn;
8338
+ label?: string;
8339
+ coalesceKey?: string;
8340
+ }
8341
+ /** Op: set what a derived node's geometry derives from, inverting back to
8342
+ * `from`. */
8343
+ declare function createSetDependsOnOp(args: SetDependsOnArgs): Op;
8344
+
8608
8345
  /** Arguments to {@link createSetHiddenOp} and {@link createSetLockedOp}: set
8609
8346
  * node `id`'s flag `from` → `to`. */
8610
8347
  interface NodeFlagArgs {
@@ -8739,6 +8476,18 @@ interface SetPathArgs {
8739
8476
  */
8740
8477
  declare function createSetPathOp(args: SetPathArgs): Op;
8741
8478
 
8479
+ /** A node's pose and data, as a batch of ops leaves them. */
8480
+ interface WrittenNode {
8481
+ pose: unknown;
8482
+ data: unknown;
8483
+ }
8484
+ /**
8485
+ * The pose and data `ops` leave each node they write, by id, read by applying
8486
+ * them to a recorder rather than the scene; null when one cannot be read that
8487
+ * way. A node only re-parented, re-layered, inserted, or removed is not in it.
8488
+ */
8489
+ declare function writtenBy(sc: Scene<unknown, string, unknown>, ops: readonly Op[]): Map<string, WrittenNode> | null;
8490
+
8742
8491
  /** Rebuilds an op from its serialized `args`. */
8743
8492
  type OpFactory = (args: unknown) => Op;
8744
8493
  /** Every registered op factory, keyed by op name, in registration order. */
@@ -8764,6 +8513,31 @@ declare function registeredOpNames(): readonly string[];
8764
8513
  * parent updates compose correctly. */
8765
8514
  declare function scenePoseAdapter(scene: Scene<unknown, string, unknown>): PoseAdapter<unknown>;
8766
8515
 
8516
+ /**
8517
+ * Bringing a node's descendants along when something writes the node's pose
8518
+ * and nothing writes theirs: a layout restacking a container, a drop landing
8519
+ * one, a page move. Under absolute poses a descendant stores its own world
8520
+ * pose, so it stays behind unless it is written too.
8521
+ */
8522
+
8523
+ /** What carrying reads: the tree, every stored pose, and how poses compose. */
8524
+ interface CarrySource<TPose> {
8525
+ childrenOf(id: NodeId): readonly NodeId[];
8526
+ poses: PoseAdapter<TPose>;
8527
+ composition: PoseComposition<TPose>;
8528
+ }
8529
+ /** A {@link CarrySource} over a scene's document poses. */
8530
+ declare function sceneCarrySource(scene: Scene<unknown, string, unknown>): CarrySource<unknown>;
8531
+ /**
8532
+ * The stored poses that bring `root`'s descendants along with it: each one's
8533
+ * world pose put through `translate`, rebased into the frame it is stored in.
8534
+ * A descendant stored in the frame of `root` or of a node under it is left
8535
+ * out, since that frame carries it, and so is one `translate` answers null
8536
+ * for. A descendant `moving` names is moving on its own: it and everything
8537
+ * under it are left to whoever moves it.
8538
+ */
8539
+ declare function carriedDescendants<TPose>(source: CarrySource<TPose>, root: NodeId, translate: (world: TPose, id: NodeId) => TPose | null, moving?: (id: NodeId) => boolean): Map<NodeId, TPose>;
8540
+
8767
8541
  /** @internal */
8768
8542
  interface HitAdapter<TNode extends {
8769
8543
  id: string;
@@ -8946,6 +8720,13 @@ interface ScopedScene {
8946
8720
  declare function sceneUnitScopes(scene: ScopedScene, id: NodeId, root: UnitScope, opts?: {
8947
8721
  inclusive?: boolean;
8948
8722
  }): UnitScope[];
8723
+ /**
8724
+ * The unit scopes every node of `ids` sits in, outermost first: the run of
8725
+ * their chains that agree, where two containers declaring equal scopes
8726
+ * agree. What a reader showing or snapping several nodes as one reads them
8727
+ * in; the root alone for no nodes.
8728
+ */
8729
+ declare function sceneSharedUnitScopes(scene: ScopedScene, ids: readonly NodeId[], root: UnitScope): UnitScope[];
8949
8730
 
8950
8731
  /**
8951
8732
  * Thrown by a scene edit — `batch`, `untracked`, or a bare `add` / `move` —
@@ -9006,6 +8787,10 @@ declare function derivedPose<TPose>(source: PoseSource<TPose>, node: PosedNode<T
9006
8787
  * resolved before it is read.
9007
8788
  */
9008
8789
  declare function derivedDepOf<TPose>(source: PoseSource<TPose>, id: NodeId, reader?: PosedNode<TPose>): DerivedDep<TPose> | undefined;
8790
+ /** `id` as {@link derivedDepOf} answers it, but at the pose and path the
8791
+ * document holds: no override anywhere down its dependencies counts. For a
8792
+ * reader that must not see an in-flight gesture, such as an edit pass. */
8793
+ declare function documentDepOf<TPose>(source: PoseSource<TPose>, id: NodeId): DerivedDep<TPose> | undefined;
9009
8794
  /**
9010
8795
  * The pose the *document* says `node` is at: derived when it derives, else
9011
8796
  * authored. `effectivePose` minus the override step, at every link of the
@@ -9587,17 +9372,33 @@ interface PathEditPreview {
9587
9372
  previewPose: NonNullable<OngoingHandle['previewPose']>;
9588
9373
  previewData: NonNullable<OngoingHandle['previewData']>;
9589
9374
  }
9375
+ /** One frame of a drag that reshapes the path in edit mode: the world-space
9376
+ * polygon it makes, and where each of its points came from when the drag
9377
+ * knows (`editAnchorSetTracked`). */
9378
+ interface PathEditFrame {
9379
+ path: PolygonPath;
9380
+ origins?: readonly (PointOrigin | null)[];
9381
+ }
9382
+ /** `path`, a frame of an edit of `id`, finished by the dep's `finishEdit` as
9383
+ * committing it would be: its path and the other nodes' that move with it.
9384
+ * Null when an extension cannot finish it. */
9385
+ declare function finishPathEditFrame(dep: EditAnchorsDep, id: string, path: PolygonPath, origins?: readonly (PointOrigin | null)[]): FinishedEditFrame | null;
9590
9386
  /**
9591
9387
  * Preview ghosts for a drag that reshapes the path in edit mode. `current`
9592
- * answers the world-space polygon to show, or null while there is nothing to
9593
- * preview yet; `others`, the world-space paths of other nodes the edit moves
9594
- * with it. Null when the node stores its path in neither supported place.
9595
- *
9596
- * The ghost is what committing `current` would store (`storeEditablePath`),
9388
+ * answers the frame to show, or null while there is nothing to preview yet.
9389
+ * Each frame is finished as committing it would be
9390
+ * ({@link finishPathEditFrame}), so the node's constraints and the nodes
9391
+ * linked to it show as they will commit; a frame that cannot be finished
9392
+ * commits nothing, and shows nothing. A drag that finishes its own frames
9393
+ * passes `finished`, the world-space paths of the other nodes its frame
9394
+ * moves, and its frames are shown as they are. Null when the node stores its
9395
+ * path in neither supported place.
9396
+ *
9397
+ * The ghost is what committing the frame would store (`storeEditablePath`),
9597
9398
  * so a path drawn from a form is drawn again from the edited form on every
9598
9399
  * move.
9599
9400
  */
9600
- declare function pathEditPreview(dep: EditAnchorsDep, id: string, current: () => PolygonPath | null, others?: () => readonly {
9401
+ declare function pathEditPreview(dep: EditAnchorsDep, id: string, current: () => PathEditFrame | null, finished?: () => readonly {
9601
9402
  id: string;
9602
9403
  path: PolygonPath;
9603
9404
  }[]): PathEditPreview | null;
@@ -10203,6 +10004,33 @@ interface AnchorHit {
10203
10004
  * are within `threshold` (controls are smaller and rendered on top). */
10204
10005
  declare function hitAnchor(path: PolygonPath, worldX: number, worldY: number, threshold: number): AnchorHit | null;
10205
10006
 
10007
+ type AnyScene = Scene<unknown, string, unknown>;
10008
+ /** The deps {@link moveNodes} reads; an action calling it declares these. */
10009
+ declare const MOVE_NODES_REQUIRES: readonly ["scene", "selection", "applyOps", "poseDescriptor", "geometryProjection", "transformFollowers"];
10010
+ /**
10011
+ * The ops that move `ids` by `delta` the way a drag of them commits: each id
10012
+ * that is not itself derived (a derived one is moved through what it derives
10013
+ * from) and every descendant not carried by a moving frame, each translated in
10014
+ * the frame it is stored in. `delta` is in the coordinates a gesture's points
10015
+ * are — world on a 2D canvas — and the `poseDescriptor` dep turns it into each
10016
+ * pose's translation, so a 3D host's descriptor lands it on the node's plane.
10017
+ */
10018
+ declare function moveNodesOps(scene: AnyScene, ids: readonly string[], delta: {
10019
+ dx: number;
10020
+ dy: number;
10021
+ }, deps?: Pick<ActionDeps, 'poseDescriptor' | 'geometryProjection'>, label?: string): Op[];
10022
+ /**
10023
+ * Move `ids` by `delta` the way a drag of them commits ({@link moveNodesOps}),
10024
+ * finished by the `transformFollowers` and committed as one undo entry through
10025
+ * `applyOps`, else the scene. Inside an open `scene.batch` it joins that
10026
+ * batch's entry. Returns whether anything moved. A caller running as an
10027
+ * action declares {@link MOVE_NODES_REQUIRES}.
10028
+ */
10029
+ declare function moveNodes(deps: ActionDeps, ids: readonly string[], delta: {
10030
+ dx: number;
10031
+ dy: number;
10032
+ }, label?: string): boolean;
10033
+
10206
10034
  /**
10207
10035
  * A transform the selection underwent, kept relative so it can be applied to
10208
10036
  * whatever is selected next.
@@ -10605,6 +10433,120 @@ interface MomentumOptions {
10605
10433
  */
10606
10434
  declare function momentum<TPose>(opts: MomentumOptions): MoveBehavior<TPose>;
10607
10435
 
10436
+ /** The part of a scene a rig's skins read and write. */
10437
+ interface SkinScene<TPose> {
10438
+ get(id: NodeId): {
10439
+ pose: TPose;
10440
+ data?: unknown;
10441
+ } | undefined;
10442
+ readonly overrides: PoseOverrides<TPose>;
10443
+ setPose(id: NodeId, pose: TPose): void;
10444
+ update(id: NodeId, patch: {
10445
+ data: never;
10446
+ }): void;
10447
+ }
10448
+ /** Where a node's path is drawn, for a skin to bend: `null` for a node with none. */
10449
+ type RestPath<TPose> = (node: {
10450
+ pose: TPose;
10451
+ data?: unknown;
10452
+ }) => Path | null;
10453
+ /** The path in a node's `data.path`, carried through its pose as `kit:path` paints it. */
10454
+ declare function dataRestPath<TPose>(node: {
10455
+ pose: TPose;
10456
+ data?: unknown;
10457
+ }): Path | null;
10458
+
10459
+ /** The part of a scene a rig writes to. */
10460
+ interface RigScene<TPose> extends SkinScene<TPose> {
10461
+ batch<T>(label: string, fn: () => T): T;
10462
+ }
10463
+ /** What a `RigApply` knows about the node it is posing. */
10464
+ interface RigApplyContext<TPose> {
10465
+ /** The joint the node rides. */
10466
+ joint: string;
10467
+ node: NodeId;
10468
+ /** The node's document pose when the rig was bound — where it sits at the
10469
+ * bind pose. */
10470
+ rest: TPose;
10471
+ /** The joint's world transform at the bind pose. */
10472
+ restWorld: GlMat3;
10473
+ /** `world * inverse(restWorld)`: the motion since the bind pose, in world
10474
+ * space. Carrying `rest` by it is what welding the node to the joint means. */
10475
+ fromRest: GlMat3;
10476
+ }
10477
+ /** Turns a joint's world transform into a pose for one bound node. The only
10478
+ * part of a rig that knows the scene's pose shape. */
10479
+ type RigApply<TPose> = (world: GlMat3, ctx: RigApplyContext<TPose>) => TPose;
10480
+ /** Options for `bindRig`. */
10481
+ interface BindRigOptions<TPose> {
10482
+ scene: RigScene<TPose>;
10483
+ skeleton: Skeleton;
10484
+ /** Joint name → the node or nodes that ride it. Each node keeps the offset
10485
+ * from its joint that it has at the bind pose. */
10486
+ bindings?: Readonly<Record<string, NodeId | readonly NodeId[]>>;
10487
+ /** Node id → the weights its path bends by. Where a bound node moves whole with one joint,
10488
+ * a skinned node's points each follow their own joints, and the rig shows the bent path
10489
+ * through the node's pose override, posed at the path's bounds. */
10490
+ skins?: Readonly<Record<NodeId, Skin>>;
10491
+ /** Where a skinned node's path is drawn when the rig is bound. Default
10492
+ * {@link dataRestPath}: the node's `data.path`, through its pose. */
10493
+ restPath?: RestPath<TPose>;
10494
+ /** Default: {@link rigidRigApply} over `descriptor`. */
10495
+ apply?: RigApply<TPose>;
10496
+ /** The descriptor the default `apply` reads and writes poses through.
10497
+ * Default `AUTO_POSE_DESCRIPTOR`. */
10498
+ descriptor?: PoseDescriptor<TPose>;
10499
+ }
10500
+ /** A skeleton bound to scene nodes, as `bindRig` returns it. */
10501
+ interface Rig {
10502
+ readonly skeleton: Skeleton;
10503
+ /**
10504
+ * The rig's pose as a value an animator moves. Its committed value starts as `{}`, the bind
10505
+ * pose, and each frame the rig is posed with what the target shows. A clip is a
10506
+ * `SampledTrack<Pose>` given this as its `target`: clips on one rig crossfade by their
10507
+ * `weight`s, weights short of 1 leave the rest to the committed pose, and a `spring` or
10508
+ * `tween` from a pose away from the committed one adds on top. `animator.hold` shows a pose made elsewhere the same way, an
10509
+ * IK solve included.
10510
+ */
10511
+ readonly target: Target<Pose>;
10512
+ /**
10513
+ * Commit `pose` and move every bound node to what the target now shows, which is `pose`
10514
+ * unless something is animating the target; a hold on it weighs the new pose in when it is
10515
+ * next read, at the animator's next frame or the hold's `touch()`. Writes go through the scene's pose overrides —
10516
+ * no history entry, no document write, no version bump — and are committed. `root`, where
10517
+ * given, replaces the placement, as {@link Rig.place}.
10518
+ */
10519
+ pose(pose: Pose, root?: GlMat3): void;
10520
+ /** Place the rig in the world by `root`, which may mirror it, and pose it there. It stays
10521
+ * until placed again; with no `root`, the rig goes back to where its skeleton puts it. */
10522
+ place(root?: GlMat3): void;
10523
+ /** The joint world transforms as the rig was last posed, root applied. */
10524
+ world(): ReadonlyMap<string, GlMat3>;
10525
+ /** Write the current frame into the bound nodes' document poses as one
10526
+ * undo entry, and drop the overrides. A skinned node's bent path goes into
10527
+ * its `data.path`. Later frames stay relative to the bind-time rest, so
10528
+ * baking does not compound. */
10529
+ bake(label?: string): void;
10530
+ /** Drop the overrides; the nodes show their document poses again until the
10531
+ * rig is next posed. */
10532
+ release(): void;
10533
+ }
10534
+ /**
10535
+ * Carries a node rigidly with its joint: the rest pose's center moves by
10536
+ * `fromRest`, and its rotation turns with the rest pose's x-axis. Scale in the
10537
+ * joint chain moves positions but not sizes — the pose model holds no shear,
10538
+ * and a sized pose under anisotropic scale would need one. Write an `apply`
10539
+ * that reads `world` to size nodes from joint scale.
10540
+ */
10541
+ declare function rigidRigApply<TPose>(descriptor: PoseDescriptor<TPose>): RigApply<TPose>;
10542
+ /**
10543
+ * Bind a skeleton's joints to scene nodes. Nodes are written in world space
10544
+ * and the rig resolves its own hierarchy, so bound nodes are best left
10545
+ * unparented, or under containers whose pose does not compose into theirs;
10546
+ * the scene's tree stays free to order and group them for drawing.
10547
+ */
10548
+ declare function bindRig<TPose>(options: BindRigOptions<TPose>): Rig;
10549
+
10608
10550
  /**
10609
10551
  * A {@link Rig} bound for the component's lifetime, its overrides dropped on
10610
10552
  * unmount. Rebinds — re-reading every node's rest pose — whenever an option's
@@ -10612,12 +10554,78 @@ declare function momentum<TPose>(opts: MomentumOptions): MoveBehavior<TPose>;
10612
10554
  */
10613
10555
  declare function useRig<TPose>(options: BindRigOptions<TPose>): Rig;
10614
10556
 
10557
+ /** What a rig reads from node data: a `skeleton` on the node that is the rig, and on the nodes
10558
+ * under it a `skin` for a path that bends or a `joint` for a node that rides one whole. */
10559
+ interface RigNodeData {
10560
+ /** Joints relative to the node's pose: its box's top-left corner, turned as the node is. */
10561
+ skeleton?: Skeleton;
10562
+ skin?: Skin;
10563
+ joint?: string;
10564
+ }
10565
+ /** Weights to bind in place of the document's, and word of when they change. `@weasel-js/rig`'s
10566
+ * `RigEditState` is one: it holds what a stroke of the weight tool has painted and not yet written. */
10567
+ interface PaintedSkins {
10568
+ /** By node. A new map whenever the weights change. */
10569
+ painted(): ReadonlyMap<NodeId, Skin>;
10570
+ listen(fn: () => void): () => void;
10571
+ }
10572
+ /** The part of a scene `rigFromNode` reads. */
10573
+ interface RigNodeSource<TPose> {
10574
+ get(id: NodeId): {
10575
+ pose: TPose;
10576
+ data?: unknown;
10577
+ } | undefined;
10578
+ childrenOf(id: NodeId): readonly NodeId[];
10579
+ }
10580
+ /** The skeleton, bindings, and skins a rig node declares, as `bindRig` takes them. */
10581
+ interface RigNodeParts {
10582
+ skeleton: Skeleton;
10583
+ bindings: Record<string, NodeId[]>;
10584
+ skins: Record<NodeId, Skin>;
10585
+ }
10586
+ /**
10587
+ * A skeleton as a rig node's data keeps it, moved to where the node's pose puts it: its root
10588
+ * joints are offset from the pose box's top-left corner and turned as the node is. Joints
10589
+ * under a root are relative to their parents and are left as they are.
10590
+ */
10591
+ declare function placeSkeleton<TPose>(skeleton: Skeleton, pose: TPose, descriptor?: PoseDescriptor<TPose>): Skeleton;
10592
+ /** The inverse of {@link placeSkeleton}: a skeleton in the scene's space, as the node at
10593
+ * `pose` would keep it in its data. */
10594
+ declare function unplaceSkeleton<TPose>(skeleton: Skeleton, pose: TPose, descriptor?: PoseDescriptor<TPose>): Skeleton;
10595
+ /**
10596
+ * Read a rig out of the scene: the skeleton in `id`'s `data.skeleton`, placed by that node's
10597
+ * pose, and under it every node whose data has a `skin` or names a `joint`.
10598
+ */
10599
+ declare function rigFromNode<TPose>(scene: RigNodeSource<TPose>, id: NodeId, descriptor?: PoseDescriptor<TPose>): RigNodeParts;
10600
+ /** Options for `useRigNode`. */
10601
+ interface UseRigNodeOptions<TPose> extends Pick<BindRigOptions<TPose>, 'apply' | 'descriptor' | 'restPath'> {
10602
+ scene: RigScene<TPose> & RigNodeSource<TPose> & {
10603
+ subscribe(listener: () => void): () => void;
10604
+ getVersion(): number;
10605
+ };
10606
+ /** The node whose data holds the skeleton. */
10607
+ node: NodeId;
10608
+ /** Weights bound in place of a node's `data.skin` while they are held. Give it the
10609
+ * `RigEditState` `@weasel-js/rig`'s weight tool has, and a stroke bends the path as it is painted. */
10610
+ painting?: PaintedSkins;
10611
+ }
10612
+ /**
10613
+ * A {@link Rig} read from a node, as {@link rigFromNode} reads it. It is bound again when the
10614
+ * rig node or a node under it changes its pose or data, or when nodes under it come or go; an
10615
+ * edit elsewhere in the scene leaves it alone. A rig bound again keeps its `target`, with the
10616
+ * animations running on it, its committed pose, and its placement, unless the skeleton's
10617
+ * joints were added, removed, renamed, or reordered. Then it has a new `target`, which takes
10618
+ * over the placement and the pose of every joint the skeleton still names. Animations go on
10619
+ * running on the target they were started on and show through the new one, so a joint that
10620
+ * was renamed stops moving.
10621
+ */
10622
+ declare function useRigNode<TPose>(options: UseRigNodeOptions<TPose>): Rig;
10623
+
10615
10624
  /** A glyph this package draws, by its bare name. */
10616
- type CoreIconName = 'arrow' | 'bone' | 'ellipse' | 'eyedropper' | 'hand' | 'image' | 'lasso' | 'line' | 'pen' | 'pencil' | 'polygon' | 'rect' | 'select' | 'slice' | 'star' | 'sticky' | 'text' | 'unknown' | 'weight' | 'cut' | 'copy' | 'paste' | 'duplicate' | 'transformAgain' | 'group' | 'ungroup' | 'bringForward' | 'bringToFront' | 'sendBackward' | 'sendToBack' | 'flipX' | 'flipY' | 'delete' | 'undo' | 'redo' | 'measure' | 'tune' | 'alignLeft' | 'alignRight' | 'alignTop' | 'alignBottom' | 'alignCenterX' | 'alignCenterY' | 'distributeHorizontal' | 'distributeVertical' | 'union' | 'intersect' | 'subtract' | 'exclude' | 'divide' | 'crop' | 'trim' | 'merge' | 'join' | 'bridge' | 'cutAtCrossings' | 'simplify' | 'offsetPath' | 'retractHandles' | 'symmetricHandles' | 'holdHandleAngle' | 'holdHandleLength' | 'simplifyBrush' | 'harmonize' | 'averageAnchors' | 'bendSegment' | 'nudgeAnchors' | 'nudgeAnchorsUp' | 'nudgeAnchorsDown' | 'nudgeAnchorsLeft' | 'createOutlines' | 'outlineStroke' | 'bold' | 'italic' | 'underline' | 'strikethrough' | 'overline' | 'superscript' | 'subscript' | 'textAlignLeft' | 'textAlignCenter' | 'textAlignRight' | 'textAlignJustify' | 'textAlignTop' | 'textAlignMiddle' | 'textAlignBottom' | 'strokeWidth' | 'strokeCap' | 'strokeJoin' | 'strokeAlign' | 'capButt' | 'capRound' | 'capSquare' | 'joinMiter' | 'joinRound' | 'joinBevel' | 'alignInner' | 'alignCenter' | 'alignOuter' | 'dashSolid' | 'dashDashed' | 'dashDotted' | 'dashCustom' | 'paintSolid' | 'paintLinear' | 'paintRadial' | 'paintConic' | 'paintMesh' | 'paintPattern' | 'paintNone';
10625
+ type CoreIconName = 'arrow' | 'ellipse' | 'eyedropper' | 'hand' | 'image' | 'lasso' | 'line' | 'pen' | 'pencil' | 'polygon' | 'rect' | 'select' | 'slice' | 'star' | 'sticky' | 'text' | 'unknown' | 'cut' | 'copy' | 'paste' | 'duplicate' | 'transformAgain' | 'group' | 'ungroup' | 'bringForward' | 'bringToFront' | 'sendBackward' | 'sendToBack' | 'flipX' | 'flipY' | 'delete' | 'undo' | 'redo' | 'measure' | 'tune' | 'alignLeft' | 'alignRight' | 'alignTop' | 'alignBottom' | 'alignCenterX' | 'alignCenterY' | 'distributeHorizontal' | 'distributeVertical' | 'union' | 'intersect' | 'subtract' | 'exclude' | 'divide' | 'crop' | 'trim' | 'merge' | 'join' | 'bridge' | 'cutAtCrossings' | 'simplify' | 'offsetPath' | 'retractHandles' | 'symmetricHandles' | 'holdHandleAngle' | 'holdHandleLength' | 'simplifyBrush' | 'harmonize' | 'averageAnchors' | 'bendSegment' | 'nudgeAnchors' | 'nudgeAnchorsUp' | 'nudgeAnchorsDown' | 'nudgeAnchorsLeft' | 'createOutlines' | 'outlineStroke' | 'bold' | 'italic' | 'underline' | 'strikethrough' | 'overline' | 'superscript' | 'subscript' | 'textAlignLeft' | 'textAlignCenter' | 'textAlignRight' | 'textAlignJustify' | 'textAlignTop' | 'textAlignMiddle' | 'textAlignBottom' | 'strokeWidth' | 'strokeCap' | 'strokeJoin' | 'strokeAlign' | 'capButt' | 'capRound' | 'capSquare' | 'joinMiter' | 'joinRound' | 'joinBevel' | 'alignInner' | 'alignCenter' | 'alignOuter' | 'dashSolid' | 'dashDashed' | 'dashDotted' | 'dashCustom' | 'paintSolid' | 'paintLinear' | 'paintRadial' | 'paintConic' | 'paintMesh' | 'paintPattern' | 'paintNone';
10617
10626
  declare module '@weasel-js/icons' {
10618
10627
  interface IconName {
10619
10628
  'core:arrow': true;
10620
- 'core:bone': true;
10621
10629
  'core:ellipse': true;
10622
10630
  'core:eyedropper': true;
10623
10631
  'core:hand': true;
@@ -10634,7 +10642,6 @@ declare module '@weasel-js/icons' {
10634
10642
  'core:sticky': true;
10635
10643
  'core:text': true;
10636
10644
  'core:unknown': true;
10637
- 'core:weight': true;
10638
10645
  'core:cut': true;
10639
10646
  'core:copy': true;
10640
10647
  'core:paste': true;
@@ -10830,7 +10837,8 @@ declare const SNAP_ROLES: {
10830
10837
  /** The angle step `snap.constrain` (Shift) holds a direction to: a line, a
10831
10838
  * measurement, a rotate, a symmetry axis. 15 degrees. */
10832
10839
  declare const SNAP_ANGLE_STEP: number;
10833
- /** The step an `'axis'` lock holds a move to: the axes and the diagonals. */
10840
+ /** The step an `'axis'` lock holds a move or an anchor drag to, and Shift a
10841
+ * pen handle: the axes and the diagonals. */
10834
10842
  declare const SNAP_AXIS_STEP: number;
10835
10843
  /** The snap roles `ctx` holds. */
10836
10844
  declare function snapMods(ctx: {
@@ -10840,6 +10848,8 @@ declare function snapMods(ctx: {
10840
10848
 
10841
10849
  /** The sources that answer `gesture`: those naming it, and, for one naming none, point, move and resize. */
10842
10850
  declare function snapSourcesFor<S extends Pick<SnapSource<unknown>, 'gestures'>>(sources: readonly S[], gesture: SnapGesture): S[];
10851
+ /** Throws if two of `sources` share an id: one would silently replace the other. */
10852
+ declare function assertSnapSourceIds(sources: readonly Pick<SnapSource<unknown>, 'id'>[]): void;
10843
10853
  /** What a candidate draws when the result meets it. */
10844
10854
  type SnapCandidateMark<P> = NonNullable<SourceCandidate<P>['mark']>;
10845
10855
  /** How `gatherSnapCandidates` reads a host's points. */
@@ -10917,6 +10927,9 @@ declare function pathSnapSource(opts?: PathSnapSourceOptions): SnapSource;
10917
10927
  /** The canvas's reach when neither a source nor the kit settings name one. */
10918
10928
  declare const DEFAULT_SNAP_PX = 8;
10919
10929
 
10930
+ /** A screen-space layer drawing the marks in `store`, redrawn when they change. */
10931
+ declare function createSnapReadoutLayer(store: SnapOutcomeStore, style?: SnapReadoutStyle): RenderLayer<unknown>;
10932
+
10920
10933
  /**
10921
10934
  * The screen-space drawing the snap readout and the guides overlay share:
10922
10935
  * ticked segments, number pills, and the glyph-and-label of a point mark.
@@ -10951,8 +10964,6 @@ interface CoreKitTargetSettings {
10951
10964
  penCloseHintRadiusPx: number;
10952
10965
  /** How near the pen's first anchor a click closes the subpath. */
10953
10966
  penCloseHitPx: number;
10954
- boneJointRadiusPx: number;
10955
- weightPointRadiusPx: number;
10956
10967
  sliceVertexRadiusPx: number;
10957
10968
  /** How near the knife's first point a click closes the cut. */
10958
10969
  sliceCloseHitPx: number;
@@ -11039,12 +11050,6 @@ declare const coreKitSettingsSchema: Omit<_weasel_js_prefs.PrefGroup, "children"
11039
11050
  readonly penCloseHitPx: _weasel_js_prefs.PrefNumber & {
11040
11051
  default: number;
11041
11052
  };
11042
- readonly boneJointRadiusPx: _weasel_js_prefs.PrefNumber & {
11043
- default: number;
11044
- };
11045
- readonly weightPointRadiusPx: _weasel_js_prefs.PrefNumber & {
11046
- default: number;
11047
- };
11048
11053
  readonly sliceVertexRadiusPx: _weasel_js_prefs.PrefNumber & {
11049
11054
  default: number;
11050
11055
  };
@@ -11063,4 +11068,4 @@ declare const coreKitSettingsSchema: Omit<_weasel_js_prefs.PrefGroup, "children"
11063
11068
  };
11064
11069
  };
11065
11070
 
11066
- export { ANCHOR_HIT_BASE_PX, AREA_SELECT_ID, ActionsProviderIfRoot, AddNodeSpec, Affordance, AffordanceBinding, AffordanceRegion, type AffordanceRegionHit, type AlignAdapter, type AlignEdge, type AlignReference, type AnchorEdit, type AnchorFieldsApi, type AnchorHit, AnchorMarkerShape, type AnchorScratch, type AnchorState, type AnimateOnSetPoseOptions, type AnimatedReflow, type AnnotationFlag, type AnyTool, AreaSelectAdapter, type ArrangeArgs, type ArrangedPose, BUILTIN_TOOL_IDS, type BaseFeature, type BendAlongEffect, type BindRigOptions, type BlendEffect, type BooleanCommitPiece, BooleanOp, BooleanOpOptions, BooleanOpResult, type BooleanOperands, type BooleanSource, BooleanStrokes, BooleansAdapter, BoundsConstraint, type BuildChromeCtxArgs, type BuiltinShapeToolId, type BuiltinToolId, type BuiltinToolOptions, COMPOSITE_FEATURES, type CameraProps, type CanvasDebugSink, type CanvasExtensionApi, type CanvasHelpers, type CanvasLayers, type CanvasProps, type CanvasRetainOptions, type CanvasSize, type CanvasSizeSnapshot, type CanvasSurfaceHelpers, CanvasView, type CanvasViewCamera, type CanvasViewHandle, type CanvasViewHelpers, type CanvasViewProps, type CanvasViewState, type ChildOrder, type ChromeCtx, type ChromeId, ChromeState, type ClampBounds, ClipboardSnapshot, type CoalescedCtx, CommonAffordanceScratch, type ComposeSelectionPoseOpts, type CompositeFeature, type ComputeSliceOpsArgs, type ComputeSliceResult, type Condition, ContentHandlerEntry, type Contribution, type ContributionChrome, type ContributionDepReader, type ContributionFrameCtx, type CoreIconName, type CoreKitTargetSettings, type CornerResizeAffordanceOptions, type CornerResizeScratch, type CreateChildrenLayerOpts, type CreateDebugOverlayLayerOpts, CreateOutlinesAdapter, type CreatePathEditingOverlayLayerOptions, type CreatePathLayerOpts, type CreatePenPreviewLayerOptions, type CreateTextLayerOpts, type CreateViewResolverOpts, type CreateViewportLayerOpts, CursorCoordsHud, type CursorCoordsHudProps, type CustomLayerEntry, DEFAULT_DEBUG_STROKES, DEFAULT_DEBUG_THEME, DEFAULT_FILL_COLOR, DEFAULT_HANDLE_SIZE, DEFAULT_INK, DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, DEFAULT_OVERLAY_STYLE, DEFAULT_PALETTE, DEFAULT_ROTATION_HANDLE_DISTANCE, DEFAULT_SHAPE_FILL, DEFAULT_SIMPLIFY_TOLERANCE, DEFAULT_SNAP_PX, DEFAULT_STROKE_COLOR, DRAG_PAN_ID, type DebugConfig, type DebugFeature, type DebugSnapshot, type DebugStroke, type DebugStrokes, type DebugTheme, type DefaultTextData, type DeleteArgs, DepRegistryProviderIfRoot, type Departures, DerivePathFn, DerivePoseFn, DerivedDep, type DerivedPart, DeviceProfileProvider, type DeviceProfileProviderProps, Dims, type DistributeAdapter, type DistributeAxis, type DistributeMode, type DragGestureController, type DragGestureCtx, type DragGestureEndCtx, type DragGesturePhase, type DragGesturePoint, type DragHandleOptions, type DragPanParams, type DragPayload, type DragRadialController, type DragRadialCtx, type DragRadialEndCtx, type DragRadialPoint, type DragRadialState, type DragRectBounds, type DragRectController, type DragRectCtx, type DragRectEndCtx, type DragRectPoint, DrawCanvas, type DrawCanvasDraw, type DrawCanvasProps, type DrawnBoundsOptions, type DrawnBoundsScene, type DropZoneOptions, EditAnchorsDep, EditAnchorsParams, type EditableShape, type EditedLayerOf, type EditingDrawOne, type EffectSource, type EffectSourceReader, FALLBACK_ACCENT, FEATURE_ACTION_IDS, type Feature, type FeatureBindingOptions, type FeatureEntry, type FeaturePreset, type FeedDelta, type FeedNode, FitViewToBoundsOptions, type FlipAxis, type FlipPivot, type FrameStats, GHOST_STROKE, type GateLayerOptions, type GateSource, type GatedLayer, type GatedNode, type GatherSnapOptions, type GeneratedShape, GeometryProjection, GestureContext, type GesturePreviewSource, type GestureSource, HANDLE_BASE_PX, HANDLE_LOCK_ROLES, InertiaConfig as HandToolInertiaConfig, type HandleDragEnd, type HandleDragPoint, type HandleEdit, HandleLocks, type HandleScope, type HeadlessCanvasLike, type HostAnchorAlign, type HostAnchorInput, type HostAnchorOffset, type HostAnchorStyle, type HoverTracking, INSERT_REPOSITION_BINDING, IconRegistryProvider, IconRegistryProviderIfRoot, type IconRegistryProviderProps, InertiaConfig, type InkExtents, InsertAdapter, type InsertArgs, InsertBehavior, InsertNodeFactory, type InsertOp, type InsertOverlayStyle, InsertPaint, type InsertPreviewExtent, type InsertPreviewGeometry, type InsertPreviewLike, type InsertPreviewOverlay, type InsertToolOptions, type JoinPlan, KIT_SHAPE_KINDS, KIT_STANDARD_ACTION_IDS, KIT_VERSIONS, type KeyModifiers, type KeyState, type KeyStateAttachOptions, type KitInsertShape, type KitRequirements, type KitVersions, LONG_PRESS_FEEDBACK_ID, LassoHitMode, LassoSelectAdapter, LassoSelectBehavior, LayerEnumerableAdapter, type LayerFrameStats, LayerGroup, LayerHit, type LayerSlotValue, type LayersMap, LayoutDropTargetMode, LayoutFrame, type LayoutRef, LayoutStrategy, LeanSceneCanvas, type LeanSceneCanvasProps, type LifecycleAdapter, type LifecycleAnimation, type LinePoint, type LivePathEditSpec, type LongPressFeedbackOptions, MEASURE_ACTION_IDS, MEASURE_AFFORDANCE_KIND, MEASURE_LAYER_ID, type MeasureCell, type MeasureData, type MeasureEnd, type MeasureEndSourceOptions, type MeasureHit, type MeasurePoint, type Measurement, type Measurements, type ModeTriggerHandlers, type MomentumOptions, MoveAdapter, MoveBehavior, type MoveToIndexArgs, type NestedHitOpts, type NestedHitTester, type NodeClientRect, type NodeFlagArgs, type NodeGates, type NodeInk, type NodeInkCtx, type NodeOverlayFrame, type NodePaintCtx, type NodeProperties, type NodePropertiesEntry, type NodeRouting, type NodeRoutingEntry, type NodeShapeEntry, type NodeSilhouetteCtx, OVERLAY_ROLE_STROKES, type OpFactory, type OpenFilePickerOptions, type OpsApplier, OrderedAdapter, OriginProjection, type OutlineStrokeResult, type Overlay, type OverlayPoint, type OverlayVisibilityId, PAINTED_CURSOR_LAYER_ID, PATHFINDER_STROKES, PATH_ANCHOR_CHROME_ID, PATH_EFFECT, PATH_EFFECT_DERIVATIONS, PATH_GESTURE_TAGS, PATH_SNAP_LABELS, type Page, type PageLayoutOptions, type PagesLayerOptions, type PaintBoundsFn, PaintKindEntry, type PaintedSkins, PasteCtx, PasteOmission, type PathAnchor, type PathAnchorAffordanceOptions, PathEditExtension, type PathEditHost, PathEditMark, type PathEditOpening, type PathEditPreview, PathEditTarget, type PathEditingOverlaySlotConfig, type PathEditingOverlayStyle, type PathEffect, type PathEffectDerivations, type PathGestureFamily, type PathNode, PathPaint, type PathSnapSourceOptions, type PathStorageKind, PathSymmetryDep, type PenContinuation, type PenPreviewStyle, type PenScratch, type PenSubpath, type PencilPoint, PickHud, type PickHudProps, type PickSlop, type PickTopMostHitAdapter, type PinchZoomOptions, type PixelRenderPlan, type PlacedNode, type PlacedPage, type PlacedRig, PlaneMap, type PointSnap, type PointerFollower, PointerProviderIfRoot, type PointerSample, type PointerStylusState, type PolygonGenerator, type PolygonPoint, PoseAdapter, type PoseAnimationAdapter, type PoseCascade, PoseComposition, PoseDescriptor, type PoseFeed, type PoseFrame, PoseOverrides, PoseRemoval, type PoseRun, type PoseRunCtx, type PoseRunStep, type PoseSource, type PoseTargetOptions, type PoseTargetScene, type PoseTransitionScene, type PoseTransitionSeat, PoseWrite, type PosedNode, type PressureToWidthOptions, type PreviewNode, RECT_POSE_COMPOSITION, RIGID_POSE_COMPOSITION, ROTATION_HANDLE_BASE_PX, type RasterImage, type RasterRenderArgs, type RasterSession, type RasterSessionOptions, type RecordedBounds, type RecordedHandle, type RecordedHitbox, type RecordedLayer, type RecordedOrigin, type RecordedSnap, type RecordedViewport, RectPose, RedrawSource, type ReflowScene, ReflowTransition, type ReflowTransitionOptions, type RegisterNodeShapeOptions, RegisteredOp, type RenderDebugSnapshotArgs, RenderLayer, type RenderNeeds, type RenderSceneToCanvasArgs, type RenderSceneToPixelsArgs, type ReorderArgs, type ReorderDirection, type ReorderRestoreEntry, type ReparentArgs, type RepeatAlongEffect, type RepeatableTransform, type RequirementMismatch, ResizeAdapter, ResizeHandleLayout, type ResolvableView, type ResolvedOverlay, type RestPath, type Rig, type RigApply, type RigApplyContext, type RigEditState, type RigNodeData, type RigNodeParts, type RigNodeSource, type RigScene, RotateAdapter, RotateBehavior, RotatedPose, type RotationAffordanceOptions, type RotationHandle, type RotationScratch, type RoutedNode, SCENE_CANVAS_FEATURES, SELECTION_MOVE_ID, SELECTION_RESIZE_ID, SELECTION_ROTATE_ID, SELECTION_TRANSFORM_ID, SHAPE_COUNT_RANGE, SHAPE_KINDS, SNAP_ANGLE_STEP, SNAP_AXIS_STEP, SNAP_ROLES, STAR_RATIO_RANGE, Scene, type SceneAdapterSelection, SceneArrivalRefused, SceneCanvas, type SceneCanvasAdapter, type SceneCanvasApi, type SceneCanvasGeometry, type SceneCanvasHit, type SceneCanvasLayers, type SceneCanvasLongPress, type SceneCanvasProps, SceneCanvasSnap, type SceneCanvasViewport, type SceneClipTargetsOptions, Node as SceneNode, type SceneNodeClientRectOpts, ScenePoseReports, SceneRegistry, type SceneSlotConfig, type SceneSlotLayers, type SceneToAdapterOptions, SceneViewCanvas, type SceneViewCanvasProps, type SceneViewCull, type SceneViewDrawOne, type SceneViewLayers, type ScopedScene, type ScreenSlop, type SelectAdapter, type SelectFromLassoOptions, type SelectionHandleStyle, type SelectionHandlesLayerOpts, type SelectionMoveOptions, type SelectionOutlineLayerOpts, type SelectionOverlayLayerOpts, type SelectionOverlaySlotConfig, type SelectionRotateOptions, type SelectionStore, type SelectionTransformOptions, SerializedScene, type SetAnchorFieldParams, type SetChildOrderArgs, type SetDataArgs, type SetLayerArgs, type SetLayoutArgs, type SetPathArgs, type SetPathFields, type SetSelectionArgs, type SetTextArgs, type ShapeCoversPointOptions, type ShapeGenerator, type ShapeKind, type ShapeKindDescriptor, type ShapeKindsWhere, type ShownDeparture, type SiblingSlot, SliceDep, type SliceLeaf, type SlicePiece, type SliceScratch, type SliceableNode, type SnapCandidateMark, SnapCollect, SnapDep, SnapGesture, SnapMark, SnapMods, SnapOutcome, SnapProbeAt, SnapSource, SourceCandidate, type SpatialReference, type SpatialReferenceSources, type SpringPoseOptions, type StaggerSpringPoseOptions, type StandardSlotConfig, type StandardSlotName, type StarGenerator, type StarPoint, StickyStyle, type StrokeRegionOptions, type StylusData, type SurfaceContribution, type SurfaceSizeProps, SvgIngestOptions, SystemLayerSpec, TOOL_DRIVEN_ACTION_IDS, TargetTransform, TextOverflow, type ThresholdDragHandle, type ThresholdDragOptions, type Tool, type ToolDef, type ToolsApi, type TransformArgs, type TweenPoseOptions, UNION_OF_CHILDREN, type UseAlignOptions, type UseAlignReturn, type UseBoneToolOptions, type UseBooleansOptions, type UseBooleansReturn, type UseDistributeOptions, type UseDistributeReturn, type UseDragGestureOptions, type UseDragRadialOptions, type UseDragRectOptions, type UseEyedropperToolOptions, type UseHandToolOptions, type UseHandleDragOptions, type UseHandleDragReturn, type UseHostAnchorOptions, type UseHoverTrackingArgs, type UseImageToolOptions, type UseKeyStateOptions, type UseKeybindingsOptions, type UseLassoSelectOptions, type UseLassoToolOptions, type UseMeasureToolOptions, UseMoveOptions, type UseNodeOverlayFrameOptions, type UsePenToolOptions, type UsePointerStylusOptions, type UsePolygonToolOptions, type UsePoseRunOptions, UseResizeOptions, type UseResizePolicyOptions, type UseRigNodeOptions, type UseRotateOptions, type UseSceneOptions, type UseSceneTextEditOptions, type UseSceneTextEditReturn, type UseSceneTrivialOptions, type UseSelectToolOptions, type UseSelectionOptions, type UseSliceToolOptions, type UseStandardActionsOptions, type UseStarToolOptions, type UseStickyToolOptions, type UseToolsOptions, type UseWeightToolOptions, VERSION, type VelocityTracker, type VersionCheck, ViewAnimationOptions, type ViewAt, type ViewKitSettings, type ViewLike, type ViewPoseAdapter, type ViewRect, type ViewResolver, type ViewTarget, type ViewTransform, ViewportDims, type ViewportLayer, type ViewportZoomAnimateOptions, type ViewportZoomOptions, type VisibilityRules, WHEEL_ZOOM_STEP, type WarmRenderOptions, WeaselProvider, type WeaselProviderProps, type WeighedPath, type WeightEnv, type WheelInput, type WheelPanOptions, type WheelPanOpts, type WorkspaceTintLayerOptions, type WrittenPoseTargetOptions, type ZoomAxis, type ZoomBound, type ZoomClampOpts, type ZoomFactor, accentColorOf, actionIs, adjacentPage, alignDeltaFor, alignTargetBounds, always, anchorEditWouldChange, and, animateLifecycle, animateOnSetPose, annotationLayerIds, annulusSemiAxes, applyOpsTo, applyOutlineStroke, areaSelectAction, areaSelectContribution, arrangePreset, axisAlignedBounds, axisZoomFactor, bindPoseTransition, bindRig, buildChromeCtx, buildDebugOverlayCommands, buildSceneViewCommands, canBringForward, canHover, canSendBackward, capabilityAll, capabilityIn, capabilityIs, capabilityNot, checkRequirements, clampShapeGenerator, clampView, classifyPathStorage, clearSelectionAction, clipboardCopyAction, clipboardCutAction, clipboardPasteAction, clipboardPasteEventAction, cloneAction, coarsePointer, commitAnchorEdit, commitBooleanPieces, commitOps, composeAffordanceLayer, composeRectPose, composeRigidPose, composeSelectionPose, computeFitViewport, computeSliceOps, computeWheelAction, cond, contextMenuAction, coreKitSettingsSchema, createArrangeOp, createBoneOverlay, createChildrenLayer, createCornerResizeAffordance, createDebugOverlayLayer, createDebugSink, createDeleteOp, createDepartures, createHistory, createInsertOp, createKeyState, createLongPressFeedbackContribution, createMeasurements, createMoveToIndexOp, createNodeProperties, createNodeRouting, createPaintedCursorLayer, createPathAnchorAffordances, createPathEditingOverlayLayer, createPathEffectDerivations, createPathLayer, createPenPreviewLayer, createPointerFollower, createPoseFeed, createPoseOverrides, createPoseTarget, createRasterSession, createReflowTransition, createReorderOp, createReparentOp, createRigEditState, createRotationAffordance, createScene, createSelectionHandlesLayer, createSelectionOutlineLayer, createSelectionOverlayLayer, createSetChildOrderOp, createSetDataOp, createSetHiddenOp, createSetLayerOp, createSetLayoutOp, createSetLockedOp, createSetPathOp, createSetSelectionOp, createSetTextOp, createTextLayer, createTransformOp, createVelocityTracker, createViewResolver, createViewportLayer, createWeightOverlay, createWrittenPoseTarget, currentMeasureId, cycleFill, dataRestPath, debugSnapshotArgs, decomposeRectPose, decomposeRigidPose, defaultCommitAdapter, defaultDrawOne, defaultNodeProperties, defaultNodeRouting, defaultPaintBounds, defaultVisibilityRules, definesFrame, deleteAnchorsAction, deleteNode, deleteSelectedMark, depOf, derivedDepOf, derivedPartsOf, derivedPose, dispatchApplyBatch, documentPose, dragPanContribution, dragPointOf, drawnAABBOf, drawnBoundsOf, editAnchorsAction, editPreset, editTargetOf, editedPathSymmetries, editingAnchors, editingLayer, effectivePose, enterTextEditAction, enumerateAnchors, exitPathEditToolAction, findNodeShape, findShapeBounds, findShapeDrawnBounds, findShapeInk, findShapeSilhouette, fitToBounds, fitViewToPage, fitZoom, flattenPreviews, flipAction, focused, forEachCoalesced, forgetTransform, gateLayer, gatherSnapCandidates, gesturePlaneReader, gestureViewReader, gesturing, getAlpha01, getNodeShapes, getStylusData, glidesByDefault, groupNodeRouting, hasEditablePath, hidesSubtree, hitAffordanceRegions, hitAnchor, hitRotationHandle, hostAnchorCss, hostAnchorRect, hovering, hoveringSelected, inPlane, inferredNodeProperties, inferredNodeRouting, ingestPreset, inkExtentsOf, insertAction, insertAt, insertLayer, insertPreviewExtent, insertRepositionAction, interpolateView, isAnnotationLayer, isAnnotationNode, isNodeHidden, isNodeLocked, isOverChildren, isShapeGenerator, joinPathsCommand, joinSelectedAnchors, kitTextHandler, lassoSelectAction, lastTransform, layoutPages, livePathEdit, locksInForce, makeHandleCommand, makePinchZoomAction, makeViewportWheelPanAction, makeViewportZoomAction, markUnder, measureAt, measureBetween, measureEndSource, measureEndsOf, measureIds, measureNode, measurePose, measuredSegmentCommands, measurementOf, measurementsContribution, mergeAlphaFromPrev, mergeContributions, modeDecorationLayer, modeIn, modeIs, modeNot, modeTriggers, modifierHeld, momentum, moveAction, movePreset, multiActive, nestedHitTester, never, nodeGates, nodeOutline, normalizeView, normalizeZoom, not, nudgeAnchorsDownAction, nudgeAnchorsLeftAction, nudgeAnchorsRightAction, nudgeAnchorsUpAction, onEmptyCanvas, opFactoryRegistry, openContextMenu, openFilePicker, or, outlinePreset, overChildren, pageAt, pageOfBounds, pagesBounds, pagesLayer, paintAlpha, paintWithAlpha, paintWithColor, parseDebugFlags, pathCopy, pathEditPathOf, pathEditPreview, pathEditToolAction, pathEditToolActive, pathEffectNode, pathEffectOf, pathEffectParts, pathFromParts, pathNodesOf, pathOperationTags, pathOriginProjection, pathPoseDescriptor, pathSnapGlyph, pathSnapSource, pathsPreset, pickTopMostHit, pillCommands, pinchZoomAction, placeAction, placeSkeleton, placedRig, planJoin, planPixelRender, pointRegionFrame, pointSnap, poseAxes, pressureToWidth, rasterToPng, readEffectSource, rebuildOp, reconcileSpecs, recordTransform, regenerateShape, registerNodeShape, registerOpFactory, registeredOpNames, registeredPathEffects, releaseCanvasRenderer, renderDebugSnapshot, renderNeeds, renderSceneToCanvas, renderSceneToPixels, requiresAnchorSelection, reshapeOps, reshapeTo, resizeAction, resizePreset, resolveBooleanOperands, resolveEditablePathOf, resolveOverlays, resolvePreviews, resolveSpatialReference, resolveVisibility, resolvedSnapMarks, rigFromNode, rigidRigApply, rotateAction, rotateAroundAABBCenter, rotatePreset, rotationDegreesUnit, rotationHandle, rotationSnapSource, satisfiesRange, sceneClipTargets, sceneFromJSON, sceneNodeClientRect, scenePoseAdapter, scenePoseFrame, scenePoseTarget, sceneSelectionStore, sceneToAdapter, sceneUnitScopes, screenToWorld, screenTolerance, segmentUnder, selectAnchorAction, selectFromLasso, selectPreset, selectedPathNodes, selectionAtLeast, selectionEmpty, selectionIs, selectionLayer, selectionMoveBindings, selectionMoveContribution, selectionResizeBindings, selectionResizeContribution, selectionRotateBindings, selectionRotateContribution, selectionTransformBindings, selectionTransformContribution, settleShapeGenerator, shapeCoversPoint, shapeGeneratorOf, shapeGeneratorPath, sliceAction, slotOf, snapMods, snapSourcesFor, solid, splitOverChildren, springPose, stableStringify, staggerSpringPose, startThresholdDrag, stepAngles, storeEditablePath, strokeOf, strokeRegion, strokeWith, tickedSegment, toHex8, translateRectPose, tweenPose, unionAABB, unionBounds, unionOfChildren, unionOfChildrenVia, unplaceSkeleton, useAlign, useAnchorFields, useAnimatedReflow, useAutoCenter, useBoneTool, useBooleans, useBooleansAdapter, useBooleansAdapterSource, useCanvasSize, useCreateOutlinesAdapter, useDeviceProfile, useDistribute, useDragGesture, useDragHandle, useDragRadial, useDragRect, useDropZone, useElementSize, useEllipseTool, useEyedropperTool, useGradientKinds, useHandTool, useHandleDrag, useHostAnchor, useHoverTracking, useIconGlyph, useIconRegistry, useIconVariant, useImageTool, useKeyModifiers, useKeyState, useKeybindings, useLassoTool, useLineTool, useMeasureTool, useNodeOverlayFrame, usePaintKind, usePaintKinds, usePenTool, usePencilTool, usePointerStylus, usePolygonTool, usePoseDescriptorDepSource, usePoseRun, usePoseTransition, useRectTool, useResizePolicy, useRig, useRigNode, useScene, useSceneAdapter, useSceneTextEdit, useSelectTool, useSelection, useSliceDep, useSliceDepSource, useSliceTool, useSnapSource, useStandardActions, useStarTool, useStickyTool, useTextTool, useTools, useVelocityTracker, useWeightTool, viewPreset, viewToTransform, viewZoom, viewportDragPanAction, viewportWheelPanAction, viewportWorldRect, viewportZoomAction, warmRender, watchDevicePixelRatio, weighedPaths, wheelPan, wheelZoom, wheelZoomFactor, when, withAlpha01, withCoord, withPath, withPathEffectsRegistry, withoutShapeGenerator, workspaceTintLayer, worldPoseLookup, worldToScreen, zoomAt, zoomAtLeast };
11071
+ export { ANCHOR_HIT_BASE_PX, AREA_SELECT_ID, ActionsProviderIfRoot, AddNodeSpec, Affordance, AffordanceBinding, AffordanceRegion, type AffordanceRegionHit, type AlignAdapter, type AlignEdge, type AlignReference, type AnchorEdit, type AnchorFieldsApi, type AnchorHit, AnchorMarkerShape, type AnchorScratch, type AnchorState, type AnimateOnSetPoseOptions, type AnimatedReflow, type AnnotationFlag, type AnyTool, AreaSelectAdapter, type ArrangeArgs, type ArrangedPose, BUILTIN_TOOLS, BUILTIN_TOOL_IDS, type BaseFeature, type BendAlongEffect, type BindRigOptions, type BlendEffect, type BooleanCommitPiece, BooleanOp, BooleanOpOptions, BooleanOpResult, type BooleanOperands, type BooleanSource, BooleanStrokes, BooleansAdapter, BoundsConstraint, type BuildChromeCtxArgs, type BuiltinShapeToolId, type BuiltinToolId, type BuiltinToolOptions, CANVAS_CONTEXT_ATTRIBUTES, COMPOSITE_FEATURES, type CameraProps, CanvasDebugSink, type CanvasExtensionApi, type CanvasHelpers, type CanvasLayers, type CanvasProps, type CanvasRetainOptions, type CanvasSize, type CanvasSizeSnapshot, type CanvasSurfaceHelpers, CanvasView, type CanvasViewCamera, type CanvasViewHandle, type CanvasViewHelpers, type CanvasViewProps, type CanvasViewState, type CarrySource, type ChildOrder, type ChromeCtx, type ChromeId, ChromeState, type ClampBounds, ClipboardSnapshot, type CoalescedCtx, CommonAffordanceScratch, type ComposeSelectionPoseOpts, type CompositeFeature, type ComputeSliceOpsArgs, type ComputeSliceResult, type Condition, ContentHandlerEntry, type Contribution, type ContributionChrome, type ContributionDepReader, type ContributionFrameCtx, type CoreIconName, type CoreKitTargetSettings, type CornerResizeAffordanceOptions, type CornerResizeScratch, type CreateChildrenLayerOpts, type CreateDebugOverlayLayerOpts, CreateOutlinesAdapter, type CreatePathEditingOverlayLayerOptions, type CreatePathLayerOpts, type CreatePenPreviewLayerOptions, type CreateTextLayerOpts, type CreateViewResolverOpts, type CreateViewportLayerOpts, CursorCoordsHud, type CursorCoordsHudProps, type CustomLayerEntry, DEFAULT_DEBUG_STROKES, DEFAULT_DEBUG_THEME, DEFAULT_FILL_COLOR, DEFAULT_HANDLE_SIZE, DEFAULT_INK, DEFAULT_MAX_ZOOM, DEFAULT_MIN_ZOOM, DEFAULT_OVERLAY_STYLE, DEFAULT_PALETTE, DEFAULT_ROTATION_HANDLE_DISTANCE, DEFAULT_SHAPE_FILL, DEFAULT_SIMPLIFY_TOLERANCE, DEFAULT_SNAP_PX, DEFAULT_STROKE_COLOR, DRAG_PAN_ID, DRAW_TOOLS, DebugConfig, DebugSnapshot, DebugStrokes, DebugTheme, type DefaultTextData, type DeleteActionOptions, type DeleteArgs, DepRegistryProviderIfRoot, type Departures, DerivePathFn, DerivePoseFn, DerivedDep, type DerivedPart, DeviceProfileProvider, type DeviceProfileProviderProps, DevtoolsLabel, type DevtoolsLabelProps, Dims, type DistributeAdapter, type DistributeAxis, type DistributeMode, type DragGestureController, type DragGestureCtx, type DragGestureEndCtx, type DragGesturePhase, type DragGesturePoint, type DragHandleOptions, type DragPanParams, type DragPayload, type DragRadialController, type DragRadialCtx, type DragRadialEndCtx, type DragRadialPoint, type DragRadialState, type DragRectBounds, type DragRectController, type DragRectCtx, type DragRectEndCtx, type DragRectPoint, DrawCanvas, type DrawCanvasDraw, type DrawCanvasProps, type DrawnBoundsOptions, type DrawnBoundsScene, type DropZoneOptions, EditAnchorsDep, EditAnchorsParams, type EditableShape, type EditedLayerOf, type EditingDrawOne, type EffectSource, type EffectSourceReader, FALLBACK_ACCENT, FEATURE_ACTION_IDS, type Feature, type FeatureBindingOptions, type FeatureEntry, type FeaturePreset, type FeedDelta, type FeedNode, FinishedEditFrame, FitViewToBoundsOptions, type FlipAxis, type FlipPivot, GHOST_STROKE, type GateLayerOptions, type GateSource, type GatedLayer, type GatedNode, type GatherSnapOptions, type GeneratedShape, GeometryProjection, GestureContext, type GesturePreviewSource, type GestureSource, HANDLE_BASE_PX, HANDLE_LOCK_ROLES, InertiaConfig as HandToolInertiaConfig, type HandleDragEnd, type HandleDragPoint, type HandleEdit, HandleLocks, type HandleScope, type HeadlessCanvasLike, type HostAnchorAlign, type HostAnchorInput, type HostAnchorOffset, type HostAnchorStyle, type HoverTracking, INSERT_REPOSITION_BINDING, IconRegistryProvider, IconRegistryProviderIfRoot, type IconRegistryProviderProps, InertiaConfig, type InkExtents, InsertAdapter, type InsertArgs, InsertBehavior, InsertNodeFactory, type InsertOp, type InsertOverlayStyle, InsertPaint, type InsertPreviewExtent, type InsertPreviewGeometry, type InsertPreviewLike, type InsertPreviewOverlay, type InsertToolOptions, type JoinPlan, KIT_SHAPE_KINDS, KIT_STANDARD_ACTION_IDS, KIT_VERSIONS, type KeyModifiers, type KeyState, type KeyStateAttachOptions, type KitInsertShape, type KitRequirements, type KitVersions, LONG_PRESS_FEEDBACK_ID, LassoHitMode, LassoSelectAdapter, LassoSelectBehavior, LayerEnumerableAdapter, LayerGroup, LayerHit, type LayerSlotValue, type LayersMap, LayoutDropTargetMode, LayoutFrame, type LayoutRef, LayoutStrategy, LeanSceneCanvas, type LeanSceneCanvasProps, type LifecycleAdapter, type LifecycleAnimation, type LinePoint, type LivePathEditSpec, type LongPressFeedbackOptions, MEASURE_ACTION_IDS, MEASURE_AFFORDANCE_KIND, MEASURE_LAYER_ID, MOVE_NODES_REQUIRES, type MeasureCell, type MeasureData, type MeasureEnd, type MeasureEndSourceOptions, type MeasureHit, type MeasurePoint, type Measurement, type Measurements, type ModeTriggerHandlers, type MomentumOptions, MoveAdapter, MoveBehavior, type MoveToIndexArgs, type NestedHitOpts, type NestedHitTester, type NodeClientRect, type NodeFlagArgs, type NodeGates, type NodeInk, type NodeInkCtx, type NodeOverlayFrame, type NodePaintCtx, type NodeProperties, type NodePropertiesEntry, type NodeRouting, type NodeRoutingEntry, type NodeShapeEntry, type NodeSilhouetteCtx, OVERLAY_ROLE_STROKES, type OpFactory, type OpenFilePickerOptions, type OpsApplier, OrderedAdapter, OriginProjection, type OutlineStrokeResult, type Overlay, type OverlayPoint, type OverlayVisibilityId, PAGES_DOC_KEY, PAGE_TOOLS, PAINTED_CURSOR_LAYER_ID, PATHFINDER_STROKES, PATH_ANCHOR_CHROME_ID, PATH_EFFECT, PATH_EFFECT_DERIVATIONS, PATH_GESTURE_TAGS, PATH_SNAP_LABELS, type Page, type PageEditOptions, type PageLayoutOptions, type PagesDoc, type PagesLayerOptions, type PaintBoundsFn, PaintKindEntry, type PaintedSkins, PasteCtx, PasteOmission, type PathAnchor, type PathAnchorAffordanceOptions, PathEditExtension, type PathEditFrame, type PathEditHost, PathEditMark, type PathEditOpening, type PathEditPreview, PathEditTarget, type PathEditingOverlaySlotConfig, type PathEditingOverlayStyle, type PathEffect, type PathEffectDerivations, type PathGestureFamily, type PathNode, PathPaint, type PathSnapSourceOptions, type PathStorageKind, PathSymmetryDep, type PenContinuation, type PenPreviewStyle, type PenScratch, type PenSubpath, type PencilPoint, PickHud, type PickHudProps, type PickSlop, type PickTopMostHitAdapter, type PinchZoomOptions, type PixelRenderPlan, type PlacedNode, type PlacedPage, PlaneMap, type PointSnap, type PointerFollower, PointerProviderIfRoot, type PointerSample, type PointerStylusState, type PolygonGenerator, type PolygonPoint, PoseAdapter, type PoseAnimationAdapter, type PoseCascade, PoseComposition, PoseDescriptor, type PoseFeed, type PoseFrame, PoseOverrides, PoseRemoval, type PoseRun, type PoseRunCtx, type PoseRunStep, type PoseSource, type PoseTargetOptions, type PoseTargetScene, type PoseTransitionScene, type PoseTransitionSeat, PoseWrite, type PosedNode, type PressureToWidthOptions, type PreviewNode, RECT_POSE_COMPOSITION, RIGID_POSE_COMPOSITION, ROTATION_HANDLE_BASE_PX, type RasterImage, type RasterRenderArgs, type RasterSession, type RasterSessionOptions, RectPose, RedrawSource, type ReflowScene, ReflowTransition, type ReflowTransitionOptions, type RegisterNodeShapeOptions, RegisteredOp, type RenderDebugSnapshotArgs, RenderLayer, type RenderNeeds, type RenderSceneToCanvasArgs, type RenderSceneToPixelsArgs, type ReorderArgs, type ReorderDirection, type ReorderRestoreEntry, type ReparentArgs, type RepeatAlongEffect, type RepeatableTransform, type RequirementMismatch, type ResizeActionOptions, ResizeAdapter, ResizeHandleLayout, type ResolvableView, type ResolvedOverlay, type RestPath, type Rig, type RigApply, type RigApplyContext, type RigNodeData, type RigNodeParts, type RigNodeSource, type RigScene, RotateAdapter, RotateBehavior, RotatedPose, type RotationAffordanceOptions, type RotationHandle, type RotationScratch, type RoutedNode, SCENE_CANVAS_FEATURES, SELECTION_MOVE_ID, SELECTION_RESIZE_ID, SELECTION_ROTATE_ID, SELECTION_TRANSFORM_ID, SELECT_TOOLS, SHAPE_COUNT_RANGE, SHAPE_KINDS, SHAPE_TOOLS, SNAP_ANGLE_STEP, SNAP_AXIS_STEP, SNAP_ROLES, STAR_RATIO_RANGE, Scene, type SceneAdapterSelection, SceneArrivalRefused, SceneCanvas, type SceneCanvasAdapter, type SceneCanvasApi, type SceneCanvasGeometry, type SceneCanvasHit, type SceneCanvasLayers, type SceneCanvasLongPress, type SceneCanvasProps, SceneCanvasSnap, type SceneCanvasViewport, type SceneClipTargetsOptions, Node as SceneNode, type SceneNodeClientRectOpts, ScenePoseReports, SceneRegistry, type SceneSlotConfig, type SceneSlotLayers, type SceneToAdapterOptions, SceneViewCanvas, type SceneViewCanvasProps, type SceneViewCull, type SceneViewDrawOne, type SceneViewLayers, type ScopedScene, type ScreenSlop, type SelectAdapter, type SelectFromLassoOptions, type SelectionHandleStyle, type SelectionHandlesLayerOpts, type SelectionMoveOptions, type SelectionOutlineLayerOpts, type SelectionOverlayLayerOpts, type SelectionOverlaySlotConfig, type SelectionRotateOptions, type SelectionStore, type SelectionTransformOptions, SerializedScene, type SetAnchorFieldParams, type SetChildOrderArgs, type SetDataArgs, type SetDependsOnArgs, type SetLayerArgs, type SetLayoutArgs, type SetPathArgs, type SetPathFields, type SetSelectionArgs, type SetTextArgs, type ShapeCoversPointOptions, type ShapeGenerator, type ShapeKind, type ShapeKindDescriptor, type ShapeKindsWhere, type ShownDeparture, type SiblingSlot, SliceDep, type SliceLeaf, type SlicePiece, type SliceScratch, type SliceableNode, type SnapCandidateMark, SnapCollect, SnapDep, SnapGesture, SnapMark, SnapMods, SnapOutcome, SnapOutcomeStore, SnapProbeAt, SnapReadoutStyle, SnapSource, SourceCandidate, type SpatialReference, type SpatialReferenceSources, type SpringPoseOptions, type StaggerSpringPoseOptions, type StandardSlotConfig, type StandardSlotName, type StarGenerator, type StarPoint, StickyStyle, type StrokeRegionOptions, type StylusData, type SurfaceContribution, type SurfaceSizeProps, SvgIngestOptions, SystemLayerSpec, TOOL_DRIVEN_ACTION_IDS, TYPE_TOOLS, TargetTransform, TextOverflow, type ThresholdDragHandle, type ThresholdDragOptions, type Tool, type ToolDef, type ToolsApi, type TransformArgs, TransformFollower, type TweenPoseOptions, UNION_OF_CHILDREN, type UseAlignOptions, type UseAlignReturn, type UseBooleansOptions, type UseBooleansReturn, type UseDistributeOptions, type UseDistributeReturn, type UseDragGestureOptions, type UseDragRadialOptions, type UseDragRectOptions, type UseEyedropperToolOptions, type UseHandToolOptions, type UseHandleDragOptions, type UseHandleDragReturn, type UseHostAnchorOptions, type UseHoverTrackingArgs, type UseImageToolOptions, type UseKeyStateOptions, type UseKeybindingsOptions, type UseLassoSelectOptions, type UseLassoToolOptions, type UseMeasureToolOptions, UseMoveOptions, type UseNodeOverlayFrameOptions, type UsePenToolOptions, type UsePointerStylusOptions, type UsePolygonToolOptions, type UsePoseRunOptions, UseResizeOptions, type UseResizePolicyOptions, type UseRigNodeOptions, type UseRotateOptions, type UseSceneOptions, type UseSceneTextEditOptions, type UseSceneTextEditReturn, type UseSceneTrivialOptions, type UseSelectToolOptions, type UseSelectionOptions, type UseSliceToolOptions, type UseStandardActionsOptions, type UseStarToolOptions, type UseStickyToolOptions, type UseToolsOptions, VERSION, VIEW_TOOLS, type VelocityTracker, type VersionCheck, ViewAnimationOptions, type ViewAt, type ViewKitSettings, type ViewLike, type ViewPoseAdapter, type ViewRect, type ViewResolver, type ViewTarget, type ViewTransform, ViewportDims, type ViewportLayer, type ViewportZoomAnimateOptions, type ViewportZoomOptions, type VisibilityRules, WHEEL_ZOOM_STEP, type WarmRenderOptions, WeaselProvider, type WeaselProviderProps, type WheelInput, type WheelPanOptions, type WheelPanOpts, type WorkspaceTintLayerOptions, type WrittenNode, type WrittenPoseTargetOptions, type ZoomAxis, type ZoomBound, type ZoomClampOpts, type ZoomFactor, accentColorOf, actionIs, addPage, adjacentPage, alignDeltaFor, alignTargetBounds, always, anchorEditWouldChange, and, animateLifecycle, animateOnSetPose, annotationLayerIds, annulusSemiAxes, applyOpsTo, applyOutlineStroke, areaSelectAction, areaSelectContribution, arrangePreset, assertSnapSourceIds, axisAlignedBounds, axisZoomFactor, bindPoseTransition, bindRig, buildChromeCtx, buildDebugOverlayCommands, buildSceneViewCommands, canBringForward, canHover, canSendBackward, capabilityAll, capabilityIn, capabilityIs, capabilityNot, carriedDescendants, checkRequirements, clampShapeGenerator, clampView, classifyPathStorage, clearSelectionAction, clipboardCopyAction, clipboardCutAction, clipboardPasteAction, clipboardPasteEventAction, cloneAction, coarsePointer, commitAnchorEdit, commitBooleanPieces, commitDeleteToScene, commitOps, composeAffordanceLayer, composeRectPose, composeRigidPose, composeSelectionPose, computeFitViewport, computeSliceOps, computeWheelAction, cond, contextMenuAction, coreKitSettingsSchema, createArrangeOp, createChildrenLayer, createCornerResizeAffordance, createDebugOverlayLayer, createDebugSink, createDeleteAction, createDeleteOp, createDepartures, createHistory, createInsertOp, createKeyState, createLongPressFeedbackContribution, createMeasurements, createMoveToIndexOp, createNodeProperties, createNodeRouting, createPaintedCursorLayer, createPathAnchorAffordances, createPathEditingOverlayLayer, createPathEffectDerivations, createPathLayer, createPenPreviewLayer, createPointerFollower, createPoseFeed, createPoseOverrides, createPoseTarget, createRasterSession, createReflowTransition, createReorderOp, createReparentOp, createResizeAction, createRotationAffordance, createScene, createSelectionHandlesLayer, createSelectionOutlineLayer, createSelectionOverlayLayer, createSetChildOrderOp, createSetDataOp, createSetDependsOnOp, createSetHiddenOp, createSetLayerOp, createSetLayoutOp, createSetLockedOp, createSetPathOp, createSetSelectionOp, createSetTextOp, createSnapReadoutLayer, createTextLayer, createTransformOp, createVelocityTracker, createViewResolver, createViewportLayer, createWrittenPoseTarget, currentMeasureId, cycleFill, dataRestPath, debugSnapshotArgs, decomposeRectPose, decomposeRigidPose, defaultCommitAdapter, defaultDrawOne, defaultNodeProperties, defaultNodeRouting, defaultPaintBounds, defaultVisibilityRules, definesFrame, deleteAction, deleteAnchorsAction, deleteNode, deleteSelectedMark, depOf, derivedDepOf, derivedPartsOf, derivedPose, dispatchApplyBatch, documentDepOf, documentPose, dragPanContribution, dragPointOf, drawnAABBOf, drawnBoundsOf, drawnBoundsScene, editAnchorsAction, editPreset, editTargetOf, editedPathSymmetries, editingAnchors, editingLayer, effectivePose, enterTextEditAction, enumerateAnchors, exitPathEditToolAction, findNodeShape, findShapeBounds, findShapeDrawnBounds, findShapeInk, findShapeSilhouette, finishPathEditFrame, fitToBounds, fitViewToPage, fitZoom, flattenPreviews, flipAction, focused, forEachCoalesced, forgetTransform, gateLayer, gatherSnapCandidates, gesturePlaneReader, gestureViewReader, gesturing, getAlpha01, getNodeShapes, getStylusData, glidesByDefault, groupNodeRouting, hasEditablePath, hidesSubtree, hitAffordanceRegions, hitAnchor, hitRotationHandle, hostAnchorCss, hostAnchorRect, hovering, hoveringSelected, inPlane, inferredNodeProperties, inferredNodeRouting, ingestPreset, inkExtentsOf, insertAction, insertAt, insertLayer, insertPreviewExtent, insertRepositionAction, interpolateView, isAnnotationLayer, isAnnotationNode, isNodeHidden, isNodeLocked, isOverChildren, isShapeGenerator, joinPathsCommand, joinSelectedAnchors, kitTextHandler, lassoSelectAction, lastTransform, layoutPages, livePathEdit, locksInForce, makeHandleCommand, makePinchZoomAction, makeViewportWheelPanAction, makeViewportZoomAction, markUnder, measureAt, measureBetween, measureEndSource, measureEndsOf, measureIds, measureNode, measurePose, measuredSegmentCommands, measurementOf, measurementsContribution, mergeAlphaFromPrev, mergeContributions, modeDecorationLayer, modeIn, modeIs, modeNot, modeTriggers, modifierHeld, momentum, moveAction, moveNodes, moveNodesOps, movePage, movePreset, multiActive, nestedHitTester, never, nextPageId, nodeGates, nodeOutline, normalizeView, normalizeZoom, not, nudgeAnchorsDownAction, nudgeAnchorsLeftAction, nudgeAnchorsRightAction, nudgeAnchorsUpAction, onEmptyCanvas, opFactoryRegistry, openContextMenu, openFilePicker, or, outlinePreset, overChildren, pageAt, pageHolding, pageInView, pageMembers, pageName, pageOfBounds, pagesBounds, pagesLayer, pagesOf, paintAlpha, paintWithAlpha, paintWithColor, parseDebugFlags, pathCopy, pathEditPathOf, pathEditPreview, pathEditToolAction, pathEditToolActive, pathEffectNode, pathEffectOf, pathEffectParts, pathFromParts, pathNodesOf, pathOperationTags, pathOriginProjection, pathPoseDescriptor, pathSnapGlyph, pathSnapSource, pathsPreset, pickTopMostHit, pillCommands, pinchZoomAction, placeAction, placeSkeleton, placedPagesOf, planJoin, planPixelRender, pointRegionFrame, pointSnap, poseAxes, pressureToWidth, rasterToPng, readEffectSource, rebuildOp, reconcileSpecs, recordTransform, regenerateShape, registerNodeShape, registerOpFactory, registeredOpNames, registeredPathEffects, releaseCanvasRenderer, removePage, renamePage, renderDebugSnapshot, renderNeeds, renderSceneToCanvas, renderSceneToPixels, requiresAnchorSelection, reshapeOps, reshapeTo, resizeAction, resizePage, resizePreset, resolveBooleanOperands, resolveEditablePathOf, resolveOverlays, resolvePreviews, resolveSpatialReference, resolveVisibility, resolvedSnapMarks, rigFromNode, rigidRigApply, rotateAction, rotateAroundAABBCenter, rotatePreset, rotationDegreesUnit, rotationHandle, rotationSnapSource, routeKind, satisfiesRange, sceneCarrySource, sceneClipTargets, sceneFromJSON, sceneNodeClientRect, scenePoseAdapter, scenePoseFrame, scenePoseTarget, sceneSelectionStore, sceneSharedUnitScopes, sceneToAdapter, sceneUnitScopes, screenToWorld, screenTolerance, segmentUnder, selectAnchorAction, selectFromLasso, selectPreset, selectedPathNodes, selectionAtLeast, selectionEmpty, selectionIs, selectionLayer, selectionMoveBindings, selectionMoveContribution, selectionResizeBindings, selectionResizeContribution, selectionRotateBindings, selectionRotateContribution, selectionTransformBindings, selectionTransformContribution, setPages, settleShapeGenerator, shapeCoversPoint, shapeGeneratorOf, shapeGeneratorPath, sliceAction, slotOf, snapMods, snapSourcesFor, solid, splitOverChildren, springPose, stableStringify, staggerSpringPose, startThresholdDrag, stepAngles, storeEditablePath, strokeOf, strokeRegion, strokeWith, tickedSegment, toHex8, translateRectPose, tweenPose, unionAABB, unionBounds, unionOfChildren, unionOfChildrenVia, unplaceSkeleton, useAlign, useAnchorFields, useAnimatedReflow, useAutoCenter, useBooleans, useBooleansAdapter, useBooleansAdapterSource, useCanvasSize, useCreateOutlinesAdapter, useDeviceProfile, useDevtoolsLabel, useDistribute, useDragGesture, useDragHandle, useDragRadial, useDragRect, useDropZone, useElementSize, useEllipseTool, useEyedropperTool, useGradientKinds, useHandTool, useHandleDrag, useHostAnchor, useHoverTracking, useIconGlyph, useIconRegistry, useIconVariant, useImageTool, useKeyModifiers, useKeyState, useKeybindings, useLassoTool, useLineTool, useMeasureTool, useNodeOverlayFrame, usePaintKind, usePaintKinds, usePenTool, usePencilTool, usePointerStylus, usePolygonTool, usePoseDescriptorDepSource, usePoseRun, usePoseTransition, useRectTool, useResizePolicy, useRig, useRigNode, useScene, useSceneAdapter, useSceneTextEdit, useSelectTool, useSelection, useSliceDep, useSliceDepSource, useSliceTool, useSnapSource, useStandardActions, useStarTool, useStickyTool, useTextTool, useTools, useTransformFollower, useVelocityTracker, viewPreset, viewToTransform, viewZoom, viewportDragPanAction, viewportWheelPanAction, viewportWorldRect, viewportZoomAction, warmRender, watchDevicePixelRatio, wheelPan, wheelZoom, wheelZoomFactor, when, withAlpha01, withCoord, withPath, withPathEffectsRegistry, withoutShapeGenerator, workspaceTintLayer, worldPoseLookup, worldToScreen, writtenBy, zoomAt, zoomAtLeast };