@weasel-js/core 1.9.4 → 1.10.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 (1191) hide show
  1. package/CHANGELOG.md +918 -0
  2. package/README.md +38 -3
  3. package/dist/WeaselProvider.js +5 -7
  4. package/dist/WeaselProvider.js.map +1 -1
  5. package/dist/affordances/composeAffordanceLayer.js +92 -84
  6. package/dist/affordances/composeAffordanceLayer.js.map +1 -1
  7. package/dist/affordances/cornerResize.js +3 -2
  8. package/dist/affordances/cornerResize.js.map +1 -1
  9. package/dist/affordances/hitAffordanceRegions.js +71 -101
  10. package/dist/affordances/hitAffordanceRegions.js.map +1 -1
  11. package/dist/affordances/pathAnchors.js +50 -28
  12. package/dist/affordances/pathAnchors.js.map +1 -1
  13. package/dist/affordances/rotateCursor.js +12 -0
  14. package/dist/affordances/rotateCursor.js.map +1 -0
  15. package/dist/affordances/rotationHandle.js +44 -46
  16. package/dist/affordances/rotationHandle.js.map +1 -1
  17. package/dist/animation/behaviors/coast.js +21 -0
  18. package/dist/animation/behaviors/coast.js.map +1 -0
  19. package/dist/animation/behaviors/coastByWrite.js +107 -0
  20. package/dist/animation/behaviors/coastByWrite.js.map +1 -0
  21. package/dist/animation/behaviors/coastOnTargets.js +94 -0
  22. package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
  23. package/dist/animation/behaviors/momentum.js +48 -136
  24. package/dist/animation/behaviors/momentum.js.map +1 -1
  25. package/dist/animation/clipTargets.js +12 -0
  26. package/dist/animation/clipTargets.js.map +1 -0
  27. package/dist/animation/index.js +15 -20
  28. package/dist/animation/poseHelpers.js +112 -33
  29. package/dist/animation/poseHelpers.js.map +1 -1
  30. package/dist/animation/poseTarget.js +115 -0
  31. package/dist/animation/poseTarget.js.map +1 -0
  32. package/dist/animation/reflow.js +113 -83
  33. package/dist/animation/reflow.js.map +1 -1
  34. package/dist/animation/rewind.js +66 -0
  35. package/dist/animation/rewind.js.map +1 -0
  36. package/dist/animation/rig/bindRig.js +85 -53
  37. package/dist/animation/rig/bindRig.js.map +1 -1
  38. package/dist/animation/rig/rigNode.js +99 -0
  39. package/dist/animation/rig/rigNode.js.map +1 -0
  40. package/dist/animation/rig/rigSeat.js +59 -0
  41. package/dist/animation/rig/rigSeat.js.map +1 -0
  42. package/dist/animation/rig/skinBinding.js +64 -0
  43. package/dist/animation/rig/skinBinding.js.map +1 -0
  44. package/dist/animation/rig/useRig.js +31 -16
  45. package/dist/animation/rig/useRig.js.map +1 -1
  46. package/dist/animation/wrappers/animateLifecycle.js +8 -7
  47. package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
  48. package/dist/animation/wrappers/animateOnSetPose.js +31 -31
  49. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
  50. package/dist/animation/wrappers/instantPose.js.map +1 -1
  51. package/dist/animation/writtenPoseTarget.js +33 -0
  52. package/dist/animation/writtenPoseTarget.js.map +1 -0
  53. package/dist/autoPoseDescriptor-DHg5KqaJ.d.ts +27 -0
  54. package/dist/barrel/canvas.js +32 -0
  55. package/dist/barrel/chrome.js +10 -10
  56. package/dist/barrel/input.js +16 -17
  57. package/dist/barrel/interactions.js +34 -37
  58. package/dist/barrel/paint.js +11 -18
  59. package/dist/barrel/paths.js +13 -19
  60. package/dist/barrel/renderer.js +14 -20
  61. package/dist/barrel/routing.js +54 -47
  62. package/dist/barrel/scene.js +37 -0
  63. package/dist/barrel/text.js +9 -18
  64. package/dist/barrel/viewport.js +44 -51
  65. package/dist/canvas/Canvas.js +270 -475
  66. package/dist/canvas/Canvas.js.map +1 -1
  67. package/dist/canvas/CanvasView.js +168 -190
  68. package/dist/canvas/CanvasView.js.map +1 -1
  69. package/dist/canvas/CursorCoordsHud.js +24 -25
  70. package/dist/canvas/CursorCoordsHud.js.map +1 -1
  71. package/dist/canvas/DrawCanvas.js +39 -56
  72. package/dist/canvas/DrawCanvas.js.map +1 -1
  73. package/dist/canvas/ModalityHud.js.map +1 -1
  74. package/dist/canvas/NodeShape.js +28 -29
  75. package/dist/canvas/NodeShape.js.map +1 -1
  76. package/dist/canvas/PickHud.js.map +1 -1
  77. package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
  78. package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
  79. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +66 -107
  80. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -1
  81. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +33 -36
  82. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
  83. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +38 -50
  84. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
  85. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +3 -3
  86. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -1
  87. package/dist/canvas/SceneCanvas/coordTrace.js +37 -1
  88. package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
  89. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +319 -270
  90. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  91. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -1
  92. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
  93. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
  94. package/dist/canvas/SceneCanvas/features.js +71 -62
  95. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  96. package/dist/canvas/SceneCanvas/insertPreviewCommands.js +97 -0
  97. package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -0
  98. package/dist/canvas/SceneCanvas/isDev.js.map +1 -1
  99. package/dist/canvas/SceneCanvas/poseGeometry.js +33 -37
  100. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
  101. package/dist/canvas/SceneCanvas/props.js +15 -14
  102. package/dist/canvas/SceneCanvas/props.js.map +1 -1
  103. package/dist/canvas/SceneCanvas/scenePointQuery.js +50 -0
  104. package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -0
  105. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +52 -0
  106. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -0
  107. package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
  108. package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
  109. package/dist/canvas/SceneCanvas/useActionTunings.js +17 -0
  110. package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -0
  111. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
  112. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
  113. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
  114. package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
  115. package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
  116. package/dist/canvas/SceneCanvas/useCanvasCamera.js +46 -0
  117. package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
  118. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
  119. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
  120. package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
  121. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
  122. package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
  123. package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
  124. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +49 -113
  125. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
  126. package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
  127. package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
  128. package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
  129. package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
  130. package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
  131. package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
  132. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +51 -41
  133. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
  134. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
  135. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
  136. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
  137. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
  138. package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
  139. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
  140. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
  141. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
  142. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +65 -101
  143. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  144. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
  145. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
  146. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
  147. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
  148. package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
  149. package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
  150. package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
  151. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
  152. package/dist/canvas/SceneCanvas/worldPointAt.js +8 -0
  153. package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
  154. package/dist/canvas/SceneCanvas.js +301 -708
  155. package/dist/canvas/SceneCanvas.js.map +1 -1
  156. package/dist/canvas/SceneViewCanvas.js +41 -47
  157. package/dist/canvas/SceneViewCanvas.js.map +1 -1
  158. package/dist/canvas/SurfaceCanvas.js +40 -0
  159. package/dist/canvas/SurfaceCanvas.js.map +1 -0
  160. package/dist/canvas/adapterDerivedPath.js +26 -0
  161. package/dist/canvas/adapterDerivedPath.js.map +1 -0
  162. package/dist/canvas/adapterPickSource.js +34 -0
  163. package/dist/canvas/adapterPickSource.js.map +1 -0
  164. package/dist/canvas/affordanceAt.js +12 -2
  165. package/dist/canvas/affordanceAt.js.map +1 -1
  166. package/dist/canvas/buildSceneLayer.js +81 -61
  167. package/dist/canvas/buildSceneLayer.js.map +1 -1
  168. package/dist/canvas/buildSceneTree.js +56 -34
  169. package/dist/canvas/buildSceneTree.js.map +1 -1
  170. package/dist/canvas/canvasRenderer.js +40 -44
  171. package/dist/canvas/canvasRenderer.js.map +1 -1
  172. package/dist/canvas/colorOverrides.js.map +1 -1
  173. package/dist/canvas/copiesAbove.js +27 -0
  174. package/dist/canvas/copiesAbove.js.map +1 -0
  175. package/dist/canvas/defaultDrawOne.js +25 -24
  176. package/dist/canvas/defaultDrawOne.js.map +1 -1
  177. package/dist/canvas/deps/areaSelect.js +4 -4
  178. package/dist/canvas/deps/areaSelect.js.map +1 -1
  179. package/dist/canvas/deps/debug.js.map +1 -1
  180. package/dist/canvas/deps/editAnchors.js +47 -71
  181. package/dist/canvas/deps/editAnchors.js.map +1 -1
  182. package/dist/canvas/deps/geometryProjection.js.map +1 -1
  183. package/dist/canvas/deps/hitTestArea.js +45 -25
  184. package/dist/canvas/deps/hitTestArea.js.map +1 -1
  185. package/dist/canvas/deps/insert.js +149 -104
  186. package/dist/canvas/deps/insert.js.map +1 -1
  187. package/dist/canvas/deps/lassoSelect.js +5 -5
  188. package/dist/canvas/deps/lassoSelect.js.map +1 -1
  189. package/dist/canvas/deps/layout.js +9 -15
  190. package/dist/canvas/deps/layout.js.map +1 -1
  191. package/dist/canvas/deps/poseDescriptor.js +1 -1
  192. package/dist/canvas/deps/poseDescriptor.js.map +1 -1
  193. package/dist/canvas/deps/resizePolicy.js.map +1 -1
  194. package/dist/canvas/deps/slice.js +44 -45
  195. package/dist/canvas/deps/slice.js.map +1 -1
  196. package/dist/canvas/deps/textEdit.js +8 -8
  197. package/dist/canvas/deps/textEdit.js.map +1 -1
  198. package/dist/canvas/deps/view.js.map +1 -1
  199. package/dist/canvas/derivedPath.js +69 -43
  200. package/dist/canvas/derivedPath.js.map +1 -1
  201. package/dist/canvas/drawEnvelope.js +8 -4
  202. package/dist/canvas/drawEnvelope.js.map +1 -1
  203. package/dist/canvas/getNodeAtPoint.js +2 -6
  204. package/dist/canvas/getNodeAtPoint.js.map +1 -1
  205. package/dist/canvas/hud.module.js.map +1 -1
  206. package/dist/canvas/insertPreviewExtent.js +33 -31
  207. package/dist/canvas/insertPreviewExtent.js.map +1 -1
  208. package/dist/canvas/layerOrder.js.map +1 -1
  209. package/dist/canvas/layerSlots.js +6 -1
  210. package/dist/canvas/layerSlots.js.map +1 -1
  211. package/dist/canvas/nodeShapes/derivedPainter.js +12 -12
  212. package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
  213. package/dist/canvas/nodeShapes/imagePainter.js +10 -10
  214. package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
  215. package/dist/canvas/nodeShapes/memo.js.map +1 -1
  216. package/dist/canvas/nodeShapes/nodePaint.js +34 -23
  217. package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
  218. package/dist/canvas/nodeShapes/pathPainter.js +23 -22
  219. package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
  220. package/dist/canvas/nodeShapes/poseBox.js +6 -6
  221. package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
  222. package/dist/canvas/nodeShapes/rectFallbackPainter.js +8 -8
  223. package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
  224. package/dist/canvas/nodeShapes/shapePainter.js +16 -16
  225. package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
  226. package/dist/canvas/nodeShapes/textPainter.js +1 -1
  227. package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
  228. package/dist/canvas/overChildren.js +29 -0
  229. package/dist/canvas/overChildren.js.map +1 -0
  230. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  231. package/dist/canvas/paintCull.js +6 -8
  232. package/dist/canvas/paintCull.js.map +1 -1
  233. package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
  234. package/dist/canvas/paintedCursorLayer.js.map +1 -0
  235. package/dist/canvas/pickReach.js +23 -0
  236. package/dist/canvas/pickReach.js.map +1 -0
  237. package/dist/canvas/pickWalk.js +43 -70
  238. package/dist/canvas/pickWalk.js.map +1 -1
  239. package/dist/canvas/planeClips.js +18 -19
  240. package/dist/canvas/planeClips.js.map +1 -1
  241. package/dist/canvas/poseCascade.js +41 -0
  242. package/dist/canvas/poseCascade.js.map +1 -0
  243. package/dist/canvas/poseRotation.js +1 -3
  244. package/dist/canvas/poseRotation.js.map +1 -1
  245. package/dist/canvas/rasterReadback.js +22 -0
  246. package/dist/canvas/rasterReadback.js.map +1 -0
  247. package/dist/canvas/renderDebugSnapshot.js +12 -12
  248. package/dist/canvas/renderDebugSnapshot.js.map +1 -1
  249. package/dist/canvas/renderNeeds.js +3 -3
  250. package/dist/canvas/renderNeeds.js.map +1 -1
  251. package/dist/canvas/renderSceneToPixels.js +64 -83
  252. package/dist/canvas/renderSceneToPixels.js.map +1 -1
  253. package/dist/canvas/sceneAdapter.js +59 -144
  254. package/dist/canvas/sceneAdapter.js.map +1 -1
  255. package/dist/canvas/sceneClipboard.js +1 -1
  256. package/dist/canvas/sceneClipboard.js.map +1 -1
  257. package/dist/canvas/sceneLayerPaint.js +4 -4
  258. package/dist/canvas/sceneLayerPaint.js.map +1 -1
  259. package/dist/canvas/sceneSlotWiring.js +10 -9
  260. package/dist/canvas/sceneSlotWiring.js.map +1 -1
  261. package/dist/canvas/sceneViewRender.js +37 -42
  262. package/dist/canvas/sceneViewRender.js.map +1 -1
  263. package/dist/canvas/slopsDebugLayer.js +4 -4
  264. package/dist/canvas/slopsDebugLayer.js.map +1 -1
  265. package/dist/canvas/useCanvasRenderer.js +23 -11
  266. package/dist/canvas/useCanvasRenderer.js.map +1 -1
  267. package/dist/canvas/useCanvasSurface.js +31 -0
  268. package/dist/canvas/useCanvasSurface.js.map +1 -0
  269. package/dist/canvas/useCanvasView.js +51 -44
  270. package/dist/canvas/useCanvasView.js.map +1 -1
  271. package/dist/canvas/useFrameLoop.js +11 -12
  272. package/dist/canvas/useFrameLoop.js.map +1 -1
  273. package/dist/canvas/useHostAnchor.js +35 -33
  274. package/dist/canvas/useHostAnchor.js.map +1 -1
  275. package/dist/canvas/useLateContentRedraw.js +8 -8
  276. package/dist/canvas/useLateContentRedraw.js.map +1 -1
  277. package/dist/canvas/useSceneAdapter.js +22 -0
  278. package/dist/canvas/useSceneAdapter.js.map +1 -0
  279. package/dist/canvas/useSceneLayerList.js +4 -14
  280. package/dist/canvas/useSceneLayerList.js.map +1 -1
  281. package/dist/canvas/useSurfaceInput.js +39 -0
  282. package/dist/canvas/useSurfaceInput.js.map +1 -0
  283. package/dist/canvas/useToolCursor.js +29 -0
  284. package/dist/canvas/useToolCursor.js.map +1 -0
  285. package/dist/canvas/useViewHelpers.js +46 -85
  286. package/dist/canvas/useViewHelpers.js.map +1 -1
  287. package/dist/canvas/viewInputs.js.map +1 -1
  288. package/dist/canvas/viewRegistry.js +40 -34
  289. package/dist/canvas/viewRegistry.js.map +1 -1
  290. package/dist/canvas/watchElementMove.js +43 -0
  291. package/dist/canvas/watchElementMove.js.map +1 -0
  292. package/dist/canvas/wrapNodeOutput.js +7 -2
  293. package/dist/canvas/wrapNodeOutput.js.map +1 -1
  294. package/dist/clipboard.d.ts +7 -14
  295. package/dist/{types-B4iJRHC3.d.ts → clone-C0eADtS0.d.ts} +129 -84
  296. package/dist/clone.d.ts +4 -8
  297. package/dist/clone.js +0 -2
  298. package/dist/core/device/targets.js.map +1 -1
  299. package/dist/core/device/useDeviceProfile.js +13 -13
  300. package/dist/core/device/useDeviceProfile.js.map +1 -1
  301. package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
  302. package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
  303. package/dist/core/geometry/pathPoseDescriptor.js +88 -0
  304. package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
  305. package/dist/core/geometry/poseDescriptor.js +102 -29
  306. package/dist/core/geometry/poseDescriptor.js.map +1 -1
  307. package/dist/core/geometry/regionHit.js +35 -37
  308. package/dist/core/geometry/regionHit.js.map +1 -1
  309. package/dist/core/geometry/targetFrame.js +94 -0
  310. package/dist/core/geometry/targetFrame.js.map +1 -0
  311. package/dist/core/geometry/unionBounds.js +4 -5
  312. package/dist/core/geometry/unionBounds.js.map +1 -1
  313. package/dist/core/layers/backgroundFill.js +31 -0
  314. package/dist/core/layers/backgroundFill.js.map +1 -0
  315. package/dist/{features/groups → core/layers}/children.js +2 -4
  316. package/dist/core/layers/children.js.map +1 -0
  317. package/dist/{features/focus → core/layers}/gateLayer.js +2 -2
  318. package/dist/core/layers/gateLayer.js.map +1 -0
  319. package/dist/core/layers/layerGroup.js +40 -0
  320. package/dist/core/layers/layerGroup.js.map +1 -0
  321. package/dist/core/layers/render.js +50 -76
  322. package/dist/core/layers/render.js.map +1 -1
  323. package/dist/core/ops/create.js +2 -2
  324. package/dist/core/ops/create.js.map +1 -1
  325. package/dist/core/ops/createHistory.js +9 -9
  326. package/dist/core/ops/createHistory.js.map +1 -1
  327. package/dist/core/ops/delete.js +19 -23
  328. package/dist/core/ops/delete.js.map +1 -1
  329. package/dist/core/ops/reorder/index.js +3 -7
  330. package/dist/core/ops/reorder/index.js.map +1 -1
  331. package/dist/core/ops/reorder/setChildOrder.js +2 -4
  332. package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
  333. package/dist/core/ops/reparent.js +0 -1
  334. package/dist/core/ops/reparent.js.map +1 -1
  335. package/dist/core/ops/slot.js +3 -6
  336. package/dist/core/ops/slot.js.map +1 -1
  337. package/dist/core/pages/fitViewToPage.js +15 -0
  338. package/dist/core/pages/fitViewToPage.js.map +1 -0
  339. package/dist/core/pages/pages.js +65 -0
  340. package/dist/core/pages/pages.js.map +1 -0
  341. package/dist/core/pages/pagesLayer.js +27 -0
  342. package/dist/core/pages/pagesLayer.js.map +1 -0
  343. package/dist/core/paint/meshKind.js +16 -0
  344. package/dist/core/paint/meshKind.js.map +1 -0
  345. package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +104 -93
  346. package/dist/core/paint/meshKindLazy.js.map +1 -0
  347. package/dist/core/paint/paintKindEntry.js +8 -0
  348. package/dist/core/paint/paintKindEntry.js.map +1 -0
  349. package/dist/core/paint/paintKinds.js +144 -0
  350. package/dist/core/paint/paintKinds.js.map +1 -0
  351. package/dist/core/paint/registerMesh.js +7 -0
  352. package/dist/core/paint/registerMesh.js.map +1 -0
  353. package/dist/core/scene/NodeProperties.js.map +1 -1
  354. package/dist/core/scene/NodeRouting.js.map +1 -1
  355. package/dist/core/scene/arrivalWindow.js +65 -64
  356. package/dist/core/scene/arrivalWindow.js.map +1 -1
  357. package/dist/core/scene/boundOps.js +40 -0
  358. package/dist/core/scene/boundOps.js.map +1 -0
  359. package/dist/core/scene/composeFrame.js +9 -6
  360. package/dist/core/scene/composeFrame.js.map +1 -1
  361. package/dist/core/scene/composePose.js +105 -0
  362. package/dist/core/scene/composePose.js.map +1 -0
  363. package/dist/core/scene/depMemo.js +31 -6
  364. package/dist/core/scene/depMemo.js.map +1 -1
  365. package/dist/core/scene/derivedPath.js +19 -20
  366. package/dist/core/scene/derivedPath.js.map +1 -1
  367. package/dist/core/scene/editMode.js +26 -0
  368. package/dist/core/scene/editMode.js.map +1 -0
  369. package/dist/core/scene/effectivePose.js +42 -39
  370. package/dist/core/scene/effectivePose.js.map +1 -1
  371. package/dist/core/scene/fieldEdits.js +98 -0
  372. package/dist/core/scene/fieldEdits.js.map +1 -0
  373. package/dist/core/scene/historyFacade.js +122 -70
  374. package/dist/core/scene/historyFacade.js.map +1 -1
  375. package/dist/core/scene/historyForm.js +6 -0
  376. package/dist/core/scene/historyForm.js.map +1 -0
  377. package/dist/core/scene/kitOps.js +83 -71
  378. package/dist/core/scene/kitOps.js.map +1 -1
  379. package/dist/core/scene/kitRegistry.js.map +1 -1
  380. package/dist/core/scene/layerStack.js +105 -12
  381. package/dist/core/scene/layerStack.js.map +1 -1
  382. package/dist/core/scene/layoutPass.js +58 -59
  383. package/dist/core/scene/layoutPass.js.map +1 -1
  384. package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
  385. package/dist/core/scene/nestedHit.js.map +1 -0
  386. package/dist/core/scene/nodeFnFields.js +16 -9
  387. package/dist/core/scene/nodeFnFields.js.map +1 -1
  388. package/dist/core/scene/nodeMemo.js.map +1 -1
  389. package/dist/core/scene/nodeStore.js +72 -71
  390. package/dist/core/scene/nodeStore.js.map +1 -1
  391. package/dist/core/scene/notifier.js +37 -0
  392. package/dist/core/scene/notifier.js.map +1 -0
  393. package/dist/core/scene/opTable.js +50 -0
  394. package/dist/core/scene/opTable.js.map +1 -0
  395. package/dist/core/scene/outerOps.js +67 -0
  396. package/dist/core/scene/outerOps.js.map +1 -0
  397. package/dist/core/scene/poseHold.js +39 -0
  398. package/dist/core/scene/poseHold.js.map +1 -0
  399. package/dist/core/scene/poseOverrides.js +44 -36
  400. package/dist/core/scene/poseOverrides.js.map +1 -1
  401. package/dist/core/scene/poseSnapshot.js.map +1 -1
  402. package/dist/core/scene/reconcileSpecs.js +4 -3
  403. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  404. package/dist/core/scene/recorder.js +86 -0
  405. package/dist/core/scene/recorder.js.map +1 -0
  406. package/dist/core/scene/renderOrder.js.map +1 -1
  407. package/dist/core/scene/scene.js +81 -690
  408. package/dist/core/scene/scene.js.map +1 -1
  409. package/dist/core/scene/sceneEdits.js +58 -0
  410. package/dist/core/scene/sceneEdits.js.map +1 -0
  411. package/dist/core/scene/sceneMutators.js +49 -0
  412. package/dist/core/scene/sceneMutators.js.map +1 -0
  413. package/dist/core/scene/scenePoseAdapter.js +16 -0
  414. package/dist/core/scene/scenePoseAdapter.js.map +1 -0
  415. package/dist/core/scene/sceneRecording.js +91 -0
  416. package/dist/core/scene/sceneRecording.js.map +1 -0
  417. package/dist/core/scene/sceneSelection.js +28 -0
  418. package/dist/core/scene/sceneSelection.js.map +1 -0
  419. package/dist/core/scene/sceneState.js +49 -0
  420. package/dist/core/scene/sceneState.js.map +1 -0
  421. package/dist/core/scene/serialization.js +8 -5
  422. package/dist/core/scene/serialization.js.map +1 -1
  423. package/dist/core/scene/staleReplay.js +51 -0
  424. package/dist/core/scene/staleReplay.js.map +1 -0
  425. package/dist/core/scene/statedFields.js +9 -0
  426. package/dist/core/scene/statedFields.js.map +1 -0
  427. package/dist/core/scene/treeEdits.js +127 -0
  428. package/dist/core/scene/treeEdits.js.map +1 -0
  429. package/dist/core/scene/treeReads.js +26 -0
  430. package/dist/core/scene/treeReads.js.map +1 -0
  431. package/dist/core/scene/types.js.map +1 -1
  432. package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
  433. package/dist/core/scene/unionOfChildren.js.map +1 -0
  434. package/dist/core/scene/unitScopes.js +13 -0
  435. package/dist/core/scene/unitScopes.js.map +1 -0
  436. package/dist/core/scene/useScene.js.map +1 -1
  437. package/dist/core/selection/readOnlySelection.js +32 -0
  438. package/dist/core/selection/readOnlySelection.js.map +1 -0
  439. package/dist/core/selection/usePublishSceneSelection.js +26 -0
  440. package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
  441. package/dist/core/selection/useSelection.js +34 -25
  442. package/dist/core/selection/useSelection.js.map +1 -1
  443. package/dist/core/shapeKinds.js.map +1 -1
  444. package/dist/core/stylus/stylus.js.map +1 -1
  445. package/dist/core/stylus/usePointerStylus.js.map +1 -1
  446. package/dist/core/usePaintKinds.js +1 -1
  447. package/dist/core/usePaintKinds.js.map +1 -1
  448. package/dist/core/viewport/clientToWorld.js.map +1 -1
  449. package/dist/core/viewport/fitViewToBounds.js.map +1 -1
  450. package/dist/core/viewport/parallax.js.map +1 -1
  451. package/dist/core/viewport/screenSlop.js +11 -11
  452. package/dist/core/viewport/screenSlop.js.map +1 -1
  453. package/dist/core/viewport/useCanvasSize.js.map +1 -1
  454. package/dist/core/viewport/useDecayLoop.js +31 -33
  455. package/dist/core/viewport/useDecayLoop.js.map +1 -1
  456. package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
  457. package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
  458. package/dist/core/viewport/useViewAnimation.js +113 -53
  459. package/dist/core/viewport/useViewAnimation.js.map +1 -1
  460. package/dist/core/viewport/view.js +14 -11
  461. package/dist/core/viewport/view.js.map +1 -1
  462. package/dist/core/viewport/wheelHandler.js.map +1 -1
  463. package/dist/core/viewport/zoomAt.js +11 -2
  464. package/dist/core/viewport/zoomAt.js.map +1 -1
  465. package/dist/{cornerHandles-CtCb8a3G.d.ts → cornerHandles-BSKbyuvQ.d.ts} +11 -24
  466. package/dist/debug/createDebugOverlayLayer.js +100 -100
  467. package/dist/debug/createDebugOverlayLayer.js.map +1 -1
  468. package/dist/debug/createDebugSink.js.map +1 -1
  469. package/dist/debug/frameStats.js.map +1 -1
  470. package/dist/debug/useDebugSink.js +52 -0
  471. package/dist/debug/useDebugSink.js.map +1 -0
  472. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
  473. package/dist/features/chrome-caps/conditions.js.map +1 -1
  474. package/dist/features/chrome-caps/defaults.js.map +1 -1
  475. package/dist/features/chrome-caps/resolve.js.map +1 -1
  476. package/dist/features/chrome-caps/useChromeCaps.js +54 -0
  477. package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
  478. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
  479. package/dist/features/ingestion/contentHandlers.js +25 -19
  480. package/dist/features/ingestion/contentHandlers.js.map +1 -1
  481. package/dist/features/ingestion/imageHandler.js +21 -24
  482. package/dist/features/ingestion/imageHandler.js.map +1 -1
  483. package/dist/features/ingestion/openFilePicker.js.map +1 -1
  484. package/dist/features/ingestion/placement.js +16 -0
  485. package/dist/features/ingestion/placement.js.map +1 -0
  486. package/dist/features/ingestion/svgHandler.js +5 -0
  487. package/dist/features/ingestion/svgHandler.js.map +1 -1
  488. package/dist/features/ingestion/textHandler.js +28 -0
  489. package/dist/features/ingestion/textHandler.js.map +1 -0
  490. package/dist/features/ingestion/useCanvasIngestion.js +48 -0
  491. package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
  492. package/dist/features/ingestion/weaselJsonHandler.js +5 -0
  493. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
  494. package/dist/features/longPress/longPressFeedback.js.map +1 -1
  495. package/dist/features/modes/modeLayers.js +7 -7
  496. package/dist/features/modes/modeLayers.js.map +1 -1
  497. package/dist/features/paths/editablePath.js +63 -0
  498. package/dist/features/paths/editablePath.js.map +1 -0
  499. package/dist/features/paths/index.js +9 -16
  500. package/dist/features/paths/pathEditState.js +41 -0
  501. package/dist/features/paths/pathEditState.js.map +1 -0
  502. package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
  503. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
  504. package/dist/features/paths/pathLayer.js +3 -2
  505. package/dist/features/paths/pathLayer.js.map +1 -1
  506. package/dist/features/paths/penPreviewLayer.js +86 -88
  507. package/dist/features/paths/penPreviewLayer.js.map +1 -1
  508. package/dist/features/paths/shapeGenerator.js +89 -0
  509. package/dist/features/paths/shapeGenerator.js.map +1 -0
  510. package/dist/features/paths/usePathEdit.js +34 -0
  511. package/dist/features/paths/usePathEdit.js.map +1 -0
  512. package/dist/features/poseRun/usePoseRun.js +44 -57
  513. package/dist/features/poseRun/usePoseRun.js.map +1 -1
  514. package/dist/features/selection/overlay.js +170 -178
  515. package/dist/features/selection/overlay.js.map +1 -1
  516. package/dist/features/text/index.js +6 -0
  517. package/dist/features/text/textLayer.js +1 -1
  518. package/dist/features/text/textLayer.js.map +1 -1
  519. package/dist/features/text/useSceneTextEdit.js +119 -88
  520. package/dist/features/text/useSceneTextEdit.js.map +1 -1
  521. package/dist/features/viewports/viewResolver.js +28 -24
  522. package/dist/features/viewports/viewResolver.js.map +1 -1
  523. package/dist/features/viewports/viewportLayer.js +25 -36
  524. package/dist/features/viewports/viewportLayer.js.map +1 -1
  525. package/dist/icons/SliceIcon.js +24 -0
  526. package/dist/icons/SliceIcon.js.map +1 -0
  527. package/dist/index.d.ts +5200 -8777
  528. package/dist/index.js +284 -320
  529. package/dist/input/keyState.js +14 -14
  530. package/dist/interactions/actions/actionShortcuts.js.map +1 -1
  531. package/dist/interactions/actions/{defaults/align.js → align/action.js} +15 -16
  532. package/dist/interactions/actions/align/action.js.map +1 -0
  533. package/dist/interactions/actions/align/align.js +24 -24
  534. package/dist/interactions/actions/align/align.js.map +1 -1
  535. package/dist/interactions/actions/booleans/action.js +65 -0
  536. package/dist/interactions/actions/booleans/action.js.map +1 -0
  537. package/dist/interactions/actions/booleans/booleans.js +74 -83
  538. package/dist/interactions/actions/booleans/booleans.js.map +1 -1
  539. package/dist/interactions/actions/booleans/operands.js +40 -0
  540. package/dist/interactions/actions/booleans/operands.js.map +1 -0
  541. package/dist/interactions/actions/booleans/pieces.js +45 -0
  542. package/dist/interactions/actions/booleans/pieces.js.map +1 -0
  543. package/dist/interactions/actions/booleans/placement.js +24 -0
  544. package/dist/interactions/actions/booleans/placement.js.map +1 -0
  545. package/dist/interactions/actions/booleans/useBooleans.js +11 -9
  546. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
  547. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
  548. package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +19 -19
  549. package/dist/interactions/actions/clipboard/action.js.map +1 -0
  550. package/dist/interactions/actions/clipboard/clipboardOps.js +15 -15
  551. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
  552. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
  553. package/dist/interactions/actions/clone/action.js +103 -0
  554. package/dist/interactions/actions/clone/action.js.map +1 -0
  555. package/dist/interactions/actions/clone/behaviors.js +52 -0
  556. package/dist/interactions/actions/clone/behaviors.js.map +1 -0
  557. package/dist/interactions/actions/defaultCommitAdapter.js +10 -37
  558. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
  559. package/dist/interactions/actions/defaults/anchorEditing.js +69 -74
  560. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
  561. package/dist/interactions/actions/defaults/anchorHandles.js +42 -0
  562. package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -0
  563. package/dist/interactions/actions/defaults/anchorJoin.js +92 -0
  564. package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -0
  565. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  566. package/dist/interactions/actions/defaults/bendSegment.js +46 -0
  567. package/dist/interactions/actions/defaults/bendSegment.js.map +1 -0
  568. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
  569. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
  570. package/dist/interactions/actions/defaults/copySubtree.js +1 -1
  571. package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
  572. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
  573. package/dist/interactions/actions/defaults/delete.js.map +1 -1
  574. package/dist/interactions/actions/defaults/duplicate.js +36 -21
  575. package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
  576. package/dist/interactions/actions/defaults/enterPathEdit.js +19 -7
  577. package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
  578. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
  579. package/dist/interactions/actions/defaults/group.js +35 -40
  580. package/dist/interactions/actions/defaults/group.js.map +1 -1
  581. package/dist/interactions/actions/defaults/icons/anchorIcons.js +75 -0
  582. package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +1 -0
  583. package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
  584. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
  585. package/dist/interactions/actions/defaults/icons/editIcons.js +35 -8
  586. package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -1
  587. package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
  588. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
  589. package/dist/interactions/actions/defaults/ingest.js +19 -15
  590. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  591. package/dist/interactions/actions/defaults/insertPathAnchor.js +18 -34
  592. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
  593. package/dist/interactions/actions/defaults/nudge.js +43 -39
  594. package/dist/interactions/actions/defaults/nudge.js.map +1 -1
  595. package/dist/interactions/actions/defaults/pinchZoom.js +29 -29
  596. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
  597. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
  598. package/dist/interactions/actions/defaults/segmentUnder.js +22 -0
  599. package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -0
  600. package/dist/interactions/actions/defaults/setFill.js +9 -3
  601. package/dist/interactions/actions/defaults/setFill.js.map +1 -1
  602. package/dist/interactions/actions/defaults/setFillOpacity.js +4 -1
  603. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
  604. package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
  605. package/dist/interactions/actions/defaults/sliceOps.js +20 -22
  606. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
  607. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
  608. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
  609. package/dist/interactions/actions/defaults/viewportDragPan.js +1 -1
  610. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
  611. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
  612. package/dist/interactions/actions/defaults/viewportZoom.js +82 -79
  613. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
  614. package/dist/interactions/actions/{defaults/distribute.js → distribute/action.js} +18 -19
  615. package/dist/interactions/actions/distribute/action.js.map +1 -0
  616. package/dist/interactions/actions/distribute/distribute.js +15 -15
  617. package/dist/interactions/actions/distribute/distribute.js.map +1 -1
  618. package/dist/interactions/actions/edit-anchors/action.js +101 -0
  619. package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
  620. package/dist/interactions/actions/edit-anchors/geometry.js +2 -4
  621. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
  622. package/dist/interactions/actions/edit-anchors/preview.js +26 -0
  623. package/dist/interactions/actions/edit-anchors/preview.js.map +1 -0
  624. package/dist/interactions/actions/edit-anchors/symmetry.js +11 -0
  625. package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -0
  626. package/dist/interactions/actions/flip/action.js +124 -0
  627. package/dist/interactions/actions/flip/action.js.map +1 -0
  628. package/dist/interactions/actions/flip/helpers.js +1 -1
  629. package/dist/interactions/actions/flip/helpers.js.map +1 -1
  630. package/dist/interactions/actions/geometryProjection.js.map +1 -1
  631. package/dist/interactions/actions/gestureFrames.js +18 -0
  632. package/dist/interactions/actions/gestureFrames.js.map +1 -0
  633. package/dist/interactions/actions/gestureLifecycle.js +47 -20
  634. package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
  635. package/dist/interactions/actions/insert/action.js +79 -0
  636. package/dist/interactions/actions/insert/action.js.map +1 -0
  637. package/dist/interactions/actions/insert/commit.js +28 -0
  638. package/dist/interactions/actions/insert/commit.js.map +1 -0
  639. package/dist/interactions/actions/insert/extras.js +65 -0
  640. package/dist/interactions/actions/insert/extras.js.map +1 -0
  641. package/dist/interactions/actions/insert/frame.js +55 -0
  642. package/dist/interactions/actions/insert/frame.js.map +1 -0
  643. package/dist/interactions/actions/insert/geometry.js +35 -0
  644. package/dist/interactions/actions/insert/geometry.js.map +1 -0
  645. package/dist/interactions/actions/insert/repositionAction.js +31 -0
  646. package/dist/interactions/actions/insert/repositionAction.js.map +1 -0
  647. package/dist/interactions/actions/insert/rotateAction.js +21 -0
  648. package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
  649. package/dist/interactions/actions/insert/session.js +59 -0
  650. package/dist/interactions/actions/insert/session.js.map +1 -0
  651. package/dist/interactions/actions/insert/shape.js +34 -0
  652. package/dist/interactions/actions/insert/shape.js.map +1 -0
  653. package/dist/interactions/actions/lasso-select/action.js +143 -0
  654. package/dist/interactions/actions/lasso-select/action.js.map +1 -0
  655. package/dist/interactions/actions/move/action.js +91 -0
  656. package/dist/interactions/actions/move/action.js.map +1 -0
  657. package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
  658. package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
  659. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
  660. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
  661. package/dist/interactions/actions/move/behaviors/snapToContainer.js +35 -28
  662. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
  663. package/dist/interactions/actions/move/capture.js +108 -0
  664. package/dist/interactions/actions/move/capture.js.map +1 -0
  665. package/dist/interactions/actions/move/commit/index.js +41 -0
  666. package/dist/interactions/actions/move/commit/index.js.map +1 -0
  667. package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
  668. package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
  669. package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
  670. package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
  671. package/dist/interactions/actions/move/commit/rebase.js +18 -0
  672. package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
  673. package/dist/interactions/actions/move/commit/reparent.js +65 -0
  674. package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
  675. package/dist/interactions/actions/move/delta.js +51 -0
  676. package/dist/interactions/actions/move/delta.js.map +1 -0
  677. package/dist/interactions/actions/move/frame.js +47 -0
  678. package/dist/interactions/actions/move/frame.js.map +1 -0
  679. package/dist/interactions/actions/move/gestureAdapter.js +15 -40
  680. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
  681. package/dist/interactions/actions/move/landedDescendants.js +8 -8
  682. package/dist/interactions/actions/move/layout/container.js +94 -0
  683. package/dist/interactions/actions/move/layout/container.js.map +1 -0
  684. package/dist/interactions/actions/move/layout/dragged.js +58 -0
  685. package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
  686. package/dist/interactions/actions/move/layout/dropPass.js +122 -0
  687. package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
  688. package/dist/interactions/actions/move/layout/exits.js +38 -0
  689. package/dist/interactions/actions/move/layout/exits.js.map +1 -0
  690. package/dist/interactions/actions/move/layout/glide.js +48 -0
  691. package/dist/interactions/actions/move/layout/glide.js.map +1 -0
  692. package/dist/interactions/actions/move/session.js +63 -0
  693. package/dist/interactions/actions/move/session.js.map +1 -0
  694. package/dist/interactions/actions/move/translate.js +61 -0
  695. package/dist/interactions/actions/move/translate.js.map +1 -0
  696. package/dist/interactions/actions/outlines/createOutlines.js +17 -64
  697. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
  698. package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
  699. package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
  700. package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
  701. package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
  702. package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
  703. package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
  704. package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
  705. package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
  706. package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
  707. package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
  708. package/dist/interactions/actions/pathCommands/cutJoin.js +102 -0
  709. package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -0
  710. package/dist/interactions/actions/pathCommands/livePathEdit.js +64 -0
  711. package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -0
  712. package/dist/interactions/actions/pathCommands/pathNodes.js +99 -0
  713. package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -0
  714. package/dist/interactions/actions/pathCommands/simplifyOffset.js +42 -0
  715. package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -0
  716. package/dist/interactions/actions/planeInput.js.map +1 -1
  717. package/dist/interactions/actions/pointerState.js +12 -0
  718. package/dist/interactions/actions/pointerState.js.map +1 -0
  719. package/dist/interactions/actions/poseDescriptorDep.js +1 -1
  720. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
  721. package/dist/interactions/actions/poseFrame.js +26 -26
  722. package/dist/interactions/actions/poseFrame.js.map +1 -1
  723. package/dist/interactions/actions/resize/action.js +66 -0
  724. package/dist/interactions/actions/resize/action.js.map +1 -0
  725. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
  726. package/dist/interactions/actions/resize/boxFrame.js +16 -0
  727. package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
  728. package/dist/interactions/actions/resize/capture.js +85 -0
  729. package/dist/interactions/actions/resize/capture.js.map +1 -0
  730. package/dist/interactions/actions/resize/commit.js +69 -0
  731. package/dist/interactions/actions/resize/commit.js.map +1 -0
  732. package/dist/interactions/actions/resize/frame.js +88 -0
  733. package/dist/interactions/actions/resize/frame.js.map +1 -0
  734. package/dist/interactions/actions/resize/pointSnap.js +111 -0
  735. package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
  736. package/dist/interactions/actions/resize/replay.js +47 -0
  737. package/dist/interactions/actions/resize/replay.js.map +1 -0
  738. package/dist/interactions/actions/resize/ruleBounds.js +9 -0
  739. package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
  740. package/dist/interactions/actions/resize/session.js +63 -0
  741. package/dist/interactions/actions/resize/session.js.map +1 -0
  742. package/dist/interactions/actions/resolveOverlays.js +2 -1
  743. package/dist/interactions/actions/resolveOverlays.js.map +1 -1
  744. package/dist/interactions/actions/resolvePreviews.js.map +1 -1
  745. package/dist/interactions/actions/rotate/action.js +71 -0
  746. package/dist/interactions/actions/rotate/action.js.map +1 -0
  747. package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
  748. package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
  749. package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
  750. package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
  751. package/dist/interactions/actions/rotate/commit.js +40 -0
  752. package/dist/interactions/actions/rotate/commit.js.map +1 -0
  753. package/dist/interactions/actions/rotate/frame.js +65 -0
  754. package/dist/interactions/actions/rotate/frame.js.map +1 -0
  755. package/dist/interactions/actions/rotate/handle.js +12 -12
  756. package/dist/interactions/actions/rotate/handle.js.map +1 -1
  757. package/dist/interactions/actions/rotate/replay.js +22 -0
  758. package/dist/interactions/actions/rotate/replay.js.map +1 -0
  759. package/dist/interactions/actions/rotate/session.js +102 -0
  760. package/dist/interactions/actions/rotate/session.js.map +1 -0
  761. package/dist/interactions/actions/spatialReference.js.map +1 -1
  762. package/dist/interactions/actions/transform-again/action.js +63 -0
  763. package/dist/interactions/actions/transform-again/action.js.map +1 -0
  764. package/dist/interactions/actions/transform-again/memory.js +35 -0
  765. package/dist/interactions/actions/transform-again/memory.js.map +1 -0
  766. package/dist/interactions/actions/useStandardActions.js +84 -61
  767. package/dist/interactions/actions/useStandardActions.js.map +1 -1
  768. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +61 -42
  769. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
  770. package/dist/interactions/gestures/shared/originProjection.js +1 -1
  771. package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
  772. package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
  773. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
  774. package/dist/interactions/gestures/shared/snap.js.map +1 -1
  775. package/dist/math-CYUjoyyU.d.ts +33 -0
  776. package/dist/math.d.ts +5 -2
  777. package/dist/math.js +6 -6
  778. package/dist/mesh.d.ts +4 -268
  779. package/dist/mesh.js +3 -7
  780. package/dist/move.d.ts +6 -4
  781. package/dist/{originProjection-gHnOup4e.d.ts → originProjection-CoNVpITV.d.ts} +1 -1
  782. package/dist/patterns-builtin.d.ts +1 -118
  783. package/dist/patterns-builtin.js +2 -3
  784. package/dist/poseDescriptor-Bqk-11Rl.d.ts +73 -0
  785. package/dist/renderer.d.ts +1 -92
  786. package/dist/renderer.js +2 -19
  787. package/dist/resize.d.ts +11 -22
  788. package/dist/resize.js +1 -1
  789. package/dist/style.css +1 -1
  790. package/dist/test-hook/install.js.map +1 -1
  791. package/dist/test-hook/useTestHook.js +22 -0
  792. package/dist/test-hook/useTestHook.js.map +1 -0
  793. package/dist/test-seams-D0pyV3pR.d.ts +149 -0
  794. package/dist/test-seams.d.ts +4 -4
  795. package/dist/test-seams.js +2 -2
  796. package/dist/tools/builtin/bone/boneActions.js +130 -0
  797. package/dist/tools/builtin/bone/boneActions.js.map +1 -0
  798. package/dist/tools/builtin/bone/boneOverlay.js +58 -0
  799. package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
  800. package/dist/tools/builtin/bone/placedRig.js +24 -0
  801. package/dist/tools/builtin/bone/placedRig.js.map +1 -0
  802. package/dist/tools/builtin/bone/rigEditState.js +21 -0
  803. package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
  804. package/dist/tools/builtin/bone/useBoneTool.js +98 -0
  805. package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
  806. package/dist/tools/builtin/ellipse/useEllipseTool.js +16 -15
  807. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
  808. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
  809. package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
  810. package/dist/tools/builtin/image/useImageTool.js.map +1 -1
  811. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
  812. package/dist/tools/builtin/line/useLineTool.js +16 -15
  813. package/dist/tools/builtin/line/useLineTool.js.map +1 -1
  814. package/dist/tools/builtin/pen/usePenTool.js +162 -164
  815. package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
  816. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
  817. package/dist/tools/builtin/pickTopMostHit.js +11 -14
  818. package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
  819. package/dist/tools/builtin/polygon/usePolygonTool.js +17 -15
  820. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
  821. package/dist/tools/builtin/rect/useRectTool.js +15 -14
  822. package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
  823. package/dist/tools/builtin/select/adapterPointQuery.js +40 -0
  824. package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
  825. package/dist/tools/builtin/select/selectionContributions.js +5 -5
  826. package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
  827. package/dist/tools/builtin/select/useSelectTool.js +44 -71
  828. package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
  829. package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
  830. package/dist/tools/builtin/slice/useSliceTool.js +69 -72
  831. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
  832. package/dist/tools/builtin/star/useStarTool.js +18 -16
  833. package/dist/tools/builtin/star/useStarTool.js.map +1 -1
  834. package/dist/tools/builtin/text/useTextTool.js +10 -2
  835. package/dist/tools/builtin/text/useTextTool.js.map +1 -1
  836. package/dist/tools/builtin/weight/useWeightTool.js +77 -0
  837. package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
  838. package/dist/tools/builtin/weight/weightActions.js +112 -0
  839. package/dist/tools/builtin/weight/weightActions.js.map +1 -0
  840. package/dist/tools/builtin/weight/weightOverlay.js +61 -0
  841. package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
  842. package/dist/tools/overlayBinding.js.map +1 -1
  843. package/dist/tools/useKeybindings.js +20 -14
  844. package/dist/tools/useKeybindings.js.map +1 -1
  845. package/dist/{types-k-5Oqh-U.d.ts → types-DBbbCy0i.d.ts} +103 -176
  846. package/dist/util/paint.js +1 -1
  847. package/dist/util/paint.js.map +1 -1
  848. package/dist/version.js +1 -1
  849. package/package.json +26 -21
  850. package/dist/animation/colorHelpers.js +0 -135
  851. package/dist/animation/colorHelpers.js.map +0 -1
  852. package/dist/animation/colorRegistry.js +0 -37
  853. package/dist/animation/colorRegistry.js.map +0 -1
  854. package/dist/animation/engine/axes.js +0 -36
  855. package/dist/animation/engine/axes.js.map +0 -1
  856. package/dist/animation/engine/codec.js +0 -170
  857. package/dist/animation/engine/codec.js.map +0 -1
  858. package/dist/animation/engine/integrator.js +0 -12
  859. package/dist/animation/engine/integrator.js.map +0 -1
  860. package/dist/animation/loop.js +0 -60
  861. package/dist/animation/loop.js.map +0 -1
  862. package/dist/animation/observe.js +0 -23
  863. package/dist/animation/observe.js.map +0 -1
  864. package/dist/animation/rig/blendPoses.js +0 -43
  865. package/dist/animation/rig/blendPoses.js.map +0 -1
  866. package/dist/animation/rig/mirrorPose.js +0 -19
  867. package/dist/animation/rig/mirrorPose.js.map +0 -1
  868. package/dist/animation/rig/resolveSkeleton.js +0 -33
  869. package/dist/animation/rig/resolveSkeleton.js.map +0 -1
  870. package/dist/animation/rig/solveIk.js +0 -103
  871. package/dist/animation/rig/solveIk.js.map +0 -1
  872. package/dist/animation/rig/types.js +0 -12
  873. package/dist/animation/rig/types.js.map +0 -1
  874. package/dist/animation/slew.js +0 -27
  875. package/dist/animation/slew.js.map +0 -1
  876. package/dist/animation/stagger.js +0 -146
  877. package/dist/animation/stagger.js.map +0 -1
  878. package/dist/animation/timeline/booking.js +0 -114
  879. package/dist/animation/timeline/booking.js.map +0 -1
  880. package/dist/animation/timeline/createTimeline.js +0 -125
  881. package/dist/animation/timeline/createTimeline.js.map +0 -1
  882. package/dist/animation/timeline/sampleTrack.js +0 -79
  883. package/dist/animation/timeline/sampleTrack.js.map +0 -1
  884. package/dist/animation/useAnimator.js +0 -388
  885. package/dist/animation/useAnimator.js.map +0 -1
  886. package/dist/autoPoseDescriptor-Ct7yqivU.d.ts +0 -108
  887. package/dist/builtins-DPcdghtB.d.ts +0 -1223
  888. package/dist/canvas/MinimapCanvas.js +0 -140
  889. package/dist/canvas/MinimapCanvas.js.map +0 -1
  890. package/dist/canvas/deps/poseComposition.js +0 -11
  891. package/dist/canvas/deps/poseComposition.js.map +0 -1
  892. package/dist/canvas/minimapMath.js +0 -82
  893. package/dist/canvas/minimapMath.js.map +0 -1
  894. package/dist/canvas/toolPreview.js +0 -39
  895. package/dist/canvas/toolPreview.js.map +0 -1
  896. package/dist/core/adapters/arrayAdapter.js +0 -94
  897. package/dist/core/adapters/arrayAdapter.js.map +0 -1
  898. package/dist/core/adapters/useArrayAdapter.js +0 -13
  899. package/dist/core/adapters/useArrayAdapter.js.map +0 -1
  900. package/dist/core/fillInPoseFrame.js +0 -102
  901. package/dist/core/fillInPoseFrame.js.map +0 -1
  902. package/dist/core/geometry/poseFrame.js +0 -44
  903. package/dist/core/geometry/poseFrame.js.map +0 -1
  904. package/dist/core/geometry/poseRotation.js +0 -58
  905. package/dist/core/geometry/poseRotation.js.map +0 -1
  906. package/dist/core/gradient.js +0 -136
  907. package/dist/core/gradient.js.map +0 -1
  908. package/dist/core/markerInset.js +0 -24
  909. package/dist/core/markerInset.js.map +0 -1
  910. package/dist/core/mixed.js +0 -6
  911. package/dist/core/mixed.js.map +0 -1
  912. package/dist/core/paintKinds.js +0 -156
  913. package/dist/core/paintKinds.js.map +0 -1
  914. package/dist/core/scene/pickability.js +0 -6
  915. package/dist/core/scene/pickability.js.map +0 -1
  916. package/dist/core/strokeMarkerShapes.js +0 -139
  917. package/dist/core/strokeMarkerShapes.js.map +0 -1
  918. package/dist/core/strokeMarkers.js +0 -28
  919. package/dist/core/strokeMarkers.js.map +0 -1
  920. package/dist/core/viewport/meanScale.js +0 -8
  921. package/dist/core/viewport/meanScale.js.map +0 -1
  922. package/dist/core/viewport/pxExtent.js +0 -42
  923. package/dist/core/viewport/pxExtent.js.map +0 -1
  924. package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
  925. package/dist/features/focus/gateLayer.js.map +0 -1
  926. package/dist/features/focus/useCanvasFocus.js +0 -29
  927. package/dist/features/focus/useCanvasFocus.js.map +0 -1
  928. package/dist/features/groups/children.js.map +0 -1
  929. package/dist/features/groups/composePose.js +0 -67
  930. package/dist/features/groups/composePose.js.map +0 -1
  931. package/dist/features/groups/nestedHit.js.map +0 -1
  932. package/dist/features/groups/unionOfChildren.js.map +0 -1
  933. package/dist/features/images/imageCache.js +0 -104
  934. package/dist/features/images/imageCache.js.map +0 -1
  935. package/dist/features/ingestion/index.js +0 -8
  936. package/dist/features/meshPaint/bake.js +0 -79
  937. package/dist/features/meshPaint/bake.js.map +0 -1
  938. package/dist/features/meshPaint/bakeCache.js +0 -59
  939. package/dist/features/meshPaint/bakeCache.js.map +0 -1
  940. package/dist/features/meshPaint/handles.js +0 -86
  941. package/dist/features/meshPaint/handles.js.map +0 -1
  942. package/dist/features/meshPaint/lazyKind.js.map +0 -1
  943. package/dist/features/meshPaint/meshPaint.js +0 -239
  944. package/dist/features/meshPaint/meshPaint.js.map +0 -1
  945. package/dist/features/meshPaint/meshShader.js +0 -6
  946. package/dist/features/meshPaint/meshShader.js.map +0 -1
  947. package/dist/features/meshPaint/register.js +0 -7
  948. package/dist/features/meshPaint/register.js.map +0 -1
  949. package/dist/features/meshPaint/surface.js +0 -110
  950. package/dist/features/meshPaint/surface.js.map +0 -1
  951. package/dist/features/minimap/actions.js +0 -53
  952. package/dist/features/minimap/actions.js.map +0 -1
  953. package/dist/features/minimap/createMinimapContribution.js +0 -96
  954. package/dist/features/minimap/createMinimapContribution.js.map +0 -1
  955. package/dist/features/minimap/layers.js +0 -85
  956. package/dist/features/minimap/layers.js.map +0 -1
  957. package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
  958. package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
  959. package/dist/features/parallax/createParallaxLayer.js +0 -26
  960. package/dist/features/parallax/createParallaxLayer.js.map +0 -1
  961. package/dist/features/parallax/createParallaxPlane.js +0 -22
  962. package/dist/features/parallax/createParallaxPlane.js.map +0 -1
  963. package/dist/features/paths/anchorEdits.js +0 -167
  964. package/dist/features/paths/anchorEdits.js.map +0 -1
  965. package/dist/features/paths/anchors.js +0 -159
  966. package/dist/features/paths/anchors.js.map +0 -1
  967. package/dist/features/paths/booleans.js +0 -2
  968. package/dist/features/paths/markerCommands.js +0 -149
  969. package/dist/features/paths/markerCommands.js.map +0 -1
  970. package/dist/features/paths/markerSites.js +0 -59
  971. package/dist/features/paths/markerSites.js.map +0 -1
  972. package/dist/features/paths/markers.js +0 -95
  973. package/dist/features/paths/markers.js.map +0 -1
  974. package/dist/features/paths/nearestAnchor.js +0 -36
  975. package/dist/features/paths/nearestAnchor.js.map +0 -1
  976. package/dist/features/paths/pathInWorld.js +0 -41
  977. package/dist/features/paths/pathInWorld.js.map +0 -1
  978. package/dist/features/paths/poseDescriptor.js +0 -39
  979. package/dist/features/paths/poseDescriptor.js.map +0 -1
  980. package/dist/features/paths/strokeToPath.js +0 -40
  981. package/dist/features/paths/strokeToPath.js.map +0 -1
  982. package/dist/features/paths/tessellate/dash.js +0 -52
  983. package/dist/features/paths/tessellate/dash.js.map +0 -1
  984. package/dist/features/paths/tessellate/insets.js +0 -32
  985. package/dist/features/paths/tessellate/insets.js.map +0 -1
  986. package/dist/features/paths/tessellate/metric.js +0 -72
  987. package/dist/features/paths/tessellate/metric.js.map +0 -1
  988. package/dist/features/paths/tessellate/stroke.js +0 -170
  989. package/dist/features/paths/tessellate/stroke.js.map +0 -1
  990. package/dist/features/paths/tessellate/vertexWidths.js +0 -32
  991. package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
  992. package/dist/features/patterns/commandPaint.js +0 -18
  993. package/dist/features/patterns/commandPaint.js.map +0 -1
  994. package/dist/features/patterns/index.js +0 -11
  995. package/dist/features/patterns/index.js.map +0 -1
  996. package/dist/features/patterns/patterns-builtin.js +0 -38
  997. package/dist/features/patterns/patterns-builtin.js.map +0 -1
  998. package/dist/features/patterns/rasterizeTile.js +0 -17
  999. package/dist/features/patterns/rasterizeTile.js.map +0 -1
  1000. package/dist/features/patterns/resolveSpec.js +0 -65
  1001. package/dist/features/patterns/resolveSpec.js.map +0 -1
  1002. package/dist/features/patterns/tileGeometry.js +0 -158
  1003. package/dist/features/patterns/tileGeometry.js.map +0 -1
  1004. package/dist/features/pointer/PointerContext.js +0 -45
  1005. package/dist/features/pointer/PointerContext.js.map +0 -1
  1006. package/dist/features/selection/SelectionContext.js +0 -51
  1007. package/dist/features/selection/SelectionContext.js.map +0 -1
  1008. package/dist/features/simulation/createSimulation.js +0 -61
  1009. package/dist/features/simulation/createSimulation.js.map +0 -1
  1010. package/dist/features/simulation/types.js +0 -6
  1011. package/dist/features/simulation/types.js.map +0 -1
  1012. package/dist/features/simulation/useSimulation.js +0 -74
  1013. package/dist/features/simulation/useSimulation.js.map +0 -1
  1014. package/dist/features/text/domOffsets.js +0 -82
  1015. package/dist/features/text/domOffsets.js.map +0 -1
  1016. package/dist/features/text/domRuns.js +0 -230
  1017. package/dist/features/text/domRuns.js.map +0 -1
  1018. package/dist/features/text/fitTextPose.js +0 -38
  1019. package/dist/features/text/fitTextPose.js.map +0 -1
  1020. package/dist/features/text/hitTest.js +0 -48
  1021. package/dist/features/text/hitTest.js.map +0 -1
  1022. package/dist/features/text/isTextData.js +0 -8
  1023. package/dist/features/text/isTextData.js.map +0 -1
  1024. package/dist/features/text/overlayDirection.js +0 -15
  1025. package/dist/features/text/overlayDirection.js.map +0 -1
  1026. package/dist/features/text/renderLabel.js +0 -14
  1027. package/dist/features/text/renderLabel.js.map +0 -1
  1028. package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
  1029. package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
  1030. package/dist/features/text/runs/flagRange.js +0 -53
  1031. package/dist/features/text/runs/flagRange.js.map +0 -1
  1032. package/dist/features/text/runs/rangeStyle.js +0 -133
  1033. package/dist/features/text/runs/rangeStyle.js.map +0 -1
  1034. package/dist/features/text/textCommand.js +0 -60
  1035. package/dist/features/text/textCommand.js.map +0 -1
  1036. package/dist/features/text/textToPath.js +0 -181
  1037. package/dist/features/text/textToPath.js.map +0 -1
  1038. package/dist/features/text/useTextEdit.js +0 -491
  1039. package/dist/features/text/useTextEdit.js.map +0 -1
  1040. package/dist/features/tiling/createTiledLayer.js +0 -65
  1041. package/dist/features/tiling/createTiledLayer.js.map +0 -1
  1042. package/dist/features/tiling/tiledProject.js +0 -14
  1043. package/dist/features/tiling/tiledProject.js.map +0 -1
  1044. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
  1045. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
  1046. package/dist/interactions/actions/defaults/align.js.map +0 -1
  1047. package/dist/interactions/actions/defaults/booleans.js +0 -52
  1048. package/dist/interactions/actions/defaults/booleans.js.map +0 -1
  1049. package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
  1050. package/dist/interactions/actions/defaults/clone.js +0 -91
  1051. package/dist/interactions/actions/defaults/clone.js.map +0 -1
  1052. package/dist/interactions/actions/defaults/createOutlines.js +0 -47
  1053. package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
  1054. package/dist/interactions/actions/defaults/distribute.js.map +0 -1
  1055. package/dist/interactions/actions/defaults/editAnchors.js +0 -100
  1056. package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
  1057. package/dist/interactions/actions/defaults/flip.js +0 -125
  1058. package/dist/interactions/actions/defaults/flip.js.map +0 -1
  1059. package/dist/interactions/actions/defaults/insert.js +0 -287
  1060. package/dist/interactions/actions/defaults/insert.js.map +0 -1
  1061. package/dist/interactions/actions/defaults/lassoSelect.js +0 -153
  1062. package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
  1063. package/dist/interactions/actions/defaults/move.js +0 -778
  1064. package/dist/interactions/actions/defaults/move.js.map +0 -1
  1065. package/dist/interactions/actions/defaults/resize.js +0 -341
  1066. package/dist/interactions/actions/defaults/resize.js.map +0 -1
  1067. package/dist/interactions/actions/defaults/rotate.js +0 -185
  1068. package/dist/interactions/actions/defaults/rotate.js.map +0 -1
  1069. package/dist/interactions/actions/previewOverrides.js +0 -25
  1070. package/dist/interactions/actions/previewOverrides.js.map +0 -1
  1071. package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
  1072. package/dist/layout/arrivals.js +0 -36
  1073. package/dist/layout/arrivals.js.map +0 -1
  1074. package/dist/math-J-ACHyEg.d.ts +0 -159
  1075. package/dist/registerProgram-T9S_PfAX.d.ts +0 -208
  1076. package/dist/renderer/DrawCommand.js +0 -6
  1077. package/dist/renderer/DrawCommand.js.map +0 -1
  1078. package/dist/renderer/WeaselRenderer.js +0 -333
  1079. package/dist/renderer/WeaselRenderer.js.map +0 -1
  1080. package/dist/renderer/batchClip.js +0 -46
  1081. package/dist/renderer/batchClip.js.map +0 -1
  1082. package/dist/renderer/cache/GLImageCache.js +0 -74
  1083. package/dist/renderer/cache/GLImageCache.js.map +0 -1
  1084. package/dist/renderer/cache/GLMeshCache.js +0 -102
  1085. package/dist/renderer/cache/GLMeshCache.js.map +0 -1
  1086. package/dist/renderer/cache/GLTextureCache.js +0 -68
  1087. package/dist/renderer/cache/GLTextureCache.js.map +0 -1
  1088. package/dist/renderer/cache/GradientRampAtlas.js +0 -82
  1089. package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
  1090. package/dist/renderer/cache/cache.js +0 -13
  1091. package/dist/renderer/cache/cache.js.map +0 -1
  1092. package/dist/renderer/cache/markerCommandCache.js +0 -63
  1093. package/dist/renderer/cache/markerCommandCache.js.map +0 -1
  1094. package/dist/renderer/cache/outlineMeshCache.js +0 -15
  1095. package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
  1096. package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
  1097. package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
  1098. package/dist/renderer/cache/strokeMeshCache.js +0 -55
  1099. package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
  1100. package/dist/renderer/cullDrawCommands.js +0 -90
  1101. package/dist/renderer/cullDrawCommands.js.map +0 -1
  1102. package/dist/renderer/draw/batch.js +0 -133
  1103. package/dist/renderer/draw/batch.js.map +0 -1
  1104. package/dist/renderer/draw/clip.js +0 -89
  1105. package/dist/renderer/draw/clip.js.map +0 -1
  1106. package/dist/renderer/draw/customShader.js +0 -230
  1107. package/dist/renderer/draw/customShader.js.map +0 -1
  1108. package/dist/renderer/draw/drawTriangles.js +0 -8
  1109. package/dist/renderer/draw/drawTriangles.js.map +0 -1
  1110. package/dist/renderer/draw/effects.js +0 -28
  1111. package/dist/renderer/draw/effects.js.map +0 -1
  1112. package/dist/renderer/draw/flushBatch.js +0 -35
  1113. package/dist/renderer/draw/flushBatch.js.map +0 -1
  1114. package/dist/renderer/draw/gradient.js +0 -90
  1115. package/dist/renderer/draw/gradient.js.map +0 -1
  1116. package/dist/renderer/draw/image.js +0 -38
  1117. package/dist/renderer/draw/image.js.map +0 -1
  1118. package/dist/renderer/draw/mesh.js +0 -16
  1119. package/dist/renderer/draw/mesh.js.map +0 -1
  1120. package/dist/renderer/draw/paintBind.js +0 -70
  1121. package/dist/renderer/draw/paintBind.js.map +0 -1
  1122. package/dist/renderer/draw/pathPaint.js +0 -142
  1123. package/dist/renderer/draw/pathPaint.js.map +0 -1
  1124. package/dist/renderer/draw/scratchPass.js +0 -83
  1125. package/dist/renderer/draw/scratchPass.js.map +0 -1
  1126. package/dist/renderer/draw/stencil.js +0 -28
  1127. package/dist/renderer/draw/stencil.js.map +0 -1
  1128. package/dist/renderer/draw/text.js +0 -167
  1129. package/dist/renderer/draw/text.js.map +0 -1
  1130. package/dist/renderer/draw/uniforms.js +0 -77
  1131. package/dist/renderer/draw/uniforms.js.map +0 -1
  1132. package/dist/renderer/draw.js +0 -79
  1133. package/dist/renderer/draw.js.map +0 -1
  1134. package/dist/renderer/drawBatch.js +0 -198
  1135. package/dist/renderer/drawBatch.js.map +0 -1
  1136. package/dist/renderer/effects/EffectTargets.js +0 -48
  1137. package/dist/renderer/effects/EffectTargets.js.map +0 -1
  1138. package/dist/renderer/effects/builtins.js +0 -31
  1139. package/dist/renderer/effects/builtins.js.map +0 -1
  1140. package/dist/renderer/effects/composite.js +0 -11
  1141. package/dist/renderer/effects/composite.js.map +0 -1
  1142. package/dist/renderer/effects/effectPrelude.js +0 -10
  1143. package/dist/renderer/effects/effectPrelude.js.map +0 -1
  1144. package/dist/renderer/effects/types.js +0 -10
  1145. package/dist/renderer/effects/types.js.map +0 -1
  1146. package/dist/renderer/glyphOutlineMesh.js +0 -67
  1147. package/dist/renderer/glyphOutlineMesh.js.map +0 -1
  1148. package/dist/renderer/index.js +0 -20
  1149. package/dist/renderer/math/color.js +0 -321
  1150. package/dist/renderer/math/color.js.map +0 -1
  1151. package/dist/renderer/math/mat3.js +0 -80
  1152. package/dist/renderer/math/mat3.js.map +0 -1
  1153. package/dist/renderer/math/patternSpace.js +0 -22
  1154. package/dist/renderer/math/patternSpace.js.map +0 -1
  1155. package/dist/renderer/math/viewToMat3.js +0 -19
  1156. package/dist/renderer/math/viewToMat3.js.map +0 -1
  1157. package/dist/renderer/paintResources.js +0 -18
  1158. package/dist/renderer/paintResources.js.map +0 -1
  1159. package/dist/renderer/paintScratch.js +0 -37
  1160. package/dist/renderer/paintScratch.js.map +0 -1
  1161. package/dist/renderer/shaders/ShaderProgram.js +0 -74
  1162. package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
  1163. package/dist/renderer/shaders/batchFill.js +0 -119
  1164. package/dist/renderer/shaders/batchFill.js.map +0 -1
  1165. package/dist/renderer/shaders/customPrelude.js +0 -34
  1166. package/dist/renderer/shaders/customPrelude.js.map +0 -1
  1167. package/dist/renderer/shaders/extractUniformNames.js +0 -184
  1168. package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
  1169. package/dist/renderer/shaders/glyphPaint.js +0 -61
  1170. package/dist/renderer/shaders/glyphPaint.js.map +0 -1
  1171. package/dist/renderer/shaders/gradFill.js +0 -31
  1172. package/dist/renderer/shaders/gradFill.js.map +0 -1
  1173. package/dist/renderer/shaders/pathFill.js +0 -14
  1174. package/dist/renderer/shaders/pathFill.js.map +0 -1
  1175. package/dist/renderer/shaders/patternFill.js +0 -25
  1176. package/dist/renderer/shaders/patternFill.js.map +0 -1
  1177. package/dist/renderer/shaders/registerProgram.js +0 -18
  1178. package/dist/renderer/shaders/registerProgram.js.map +0 -1
  1179. package/dist/renderer/spriteSheet.js +0 -14
  1180. package/dist/renderer/spriteSheet.js.map +0 -1
  1181. package/dist/renderer/state/GroupState.js +0 -77
  1182. package/dist/renderer/state/GroupState.js.map +0 -1
  1183. package/dist/renderer/strokeLengths.js +0 -50
  1184. package/dist/renderer/strokeLengths.js.map +0 -1
  1185. package/dist/renderer/syntheticItalic.js +0 -6
  1186. package/dist/renderer/syntheticItalic.js.map +0 -1
  1187. package/dist/renderer/textures/registerTexture.js +0 -34
  1188. package/dist/renderer/textures/registerTexture.js.map +0 -1
  1189. package/dist/scheduling/useVisibleRaf.js +0 -69
  1190. package/dist/scheduling/useVisibleRaf.js.map +0 -1
  1191. package/dist/test-seams-DM2B87-g.d.ts +0 -356
@@ -3,30 +3,24 @@ import { useEffect as t } from "react";
3
3
  import { useLatest as n } from "@weasel-js/react";
4
4
  import { useDepSource as r } from "@weasel-js/routing/react";
5
5
  //#region src/canvas/deps/layout.ts
6
- function i(i, a, o, s) {
7
- let c = n({
8
- layouts: a,
9
- dropTarget: o,
10
- reflow: s
6
+ function i(i, a, o) {
7
+ let s = n({
8
+ dropTarget: a,
9
+ reflow: o
11
10
  });
12
11
  r("layout", () => ({
13
- getLayout: (t) => {
14
- let n = i.layoutOf(e(t));
15
- if (n !== null) return n;
16
- let r = c.current.layouts;
17
- return r ? typeof r == "function" ? r(t) : r[t] ?? null : null;
18
- },
19
- dropTarget: c.current.dropTarget,
12
+ getLayout: (t) => i.layoutOf(e(t)),
13
+ dropTarget: s.current.dropTarget,
20
14
  get reflow() {
21
- return c.current.reflow ?? null;
15
+ return s.current.reflow ?? null;
22
16
  }
23
17
  })), t(() => i.onReflow((e) => {
24
- let t = c.current.reflow;
18
+ let t = s.current.reflow;
25
19
  if (t) for (let n of e) {
26
20
  let e = n.id;
27
21
  t.settle(e, t.poseOf(e) === void 0 ? { from: n.from } : void 0);
28
22
  }
29
- }), [i, c]);
23
+ }), [i, s]);
30
24
  }
31
25
  //#endregion
32
26
  export { i as useLayoutDepSource };
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","names":["useLayoutDepSource","ref","useLatest","useDepSource","declared","scene","asNodeId","containerId","l","useEffect","glide","m","moves","id"],"sources":["../../../src/canvas/deps/layout.ts"],"sourcesContent":["/**\n * `useLayoutDepSource` — wires the `layout` dep consumed by `moveAction`'s\n * drag-time reflow pass. A container's layout is the one its scene node\n * declares (`scene.layoutOf`); `<SceneCanvas>`'s `layouts` prop (a static map\n * or a resolver fn) fills in for containers that declare none. Carries the\n * `layoutDropTarget` mode, and hands every reflow the scene records to the\n * reflow transition so it glides as a drag's does. Always registers; returns\n * null per-container when no layout is configured, so the reflow pass is a\n * no-op without churning dep registration on prop changes.\n */\nimport { useEffect } from 'react';\nimport { useDepSource } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport type { LayoutDep } from 'interactions/actions/depSchema';\nimport type { Scene } from 'core/scene/types';\nimport { asNodeId } from 'core/scene/types';\nimport type { LayoutDropTargetMode, ReflowTransition } from '../../layout/types';\nimport type { SceneToAdapterOptions } from '../sceneAdapter';\n\n// Reuse the canonical `layouts` option type from the scene adapter under the\n// dep's erased generics (`unknown`/`string`/`unknown`) so the public surface\n// stays a single source of truth.\ntype LayoutsProp = NonNullable<SceneToAdapterOptions<unknown, string, unknown>['layouts']>;\n\nexport function useLayoutDepSource(\n scene: Scene<unknown, string, unknown>,\n layouts: LayoutsProp | undefined,\n dropTarget?: LayoutDropTargetMode,\n reflow?: ReflowTransition<unknown> | null,\n): void {\n const ref = useLatest({ layouts, dropTarget, reflow });\n\n useDepSource('layout', (): LayoutDep => ({\n getLayout: (containerId) => {\n const declared = scene.layoutOf(asNodeId(containerId));\n if (declared !== null) return declared;\n const l = ref.current.layouts;\n if (!l) return null;\n return typeof l === 'function' ? l(containerId) : (l[containerId] ?? null);\n },\n dropTarget: ref.current.dropTarget,\n get reflow() { return ref.current.reflow ?? null; },\n }));\n\n useEffect(() => scene.onReflow((moves) => {\n const glide = ref.current.reflow;\n if (!glide) return;\n for (const m of moves) {\n // One already gliding carries on from where it is shown.\n const id = m.id as string;\n glide.settle(id, glide.poseOf(id) === undefined ? { from: m.from } : undefined);\n }\n }), [scene, ref]);\n}\n"],"mappings":";;;;;AAwBA,SAAgBA,EACd,GACA,GACA,GACA,GACM;CACN,IAAMC,IAAMC,EAAU;EAAE;EAAS;EAAY;CAAO,CAAC;CAcrD,AAZAC,EAAa,iBAA4B;EACvC,YAAY,MAAgB;GAC1B,IAAMC,IAAWC,EAAM,SAASC,EAASC,CAAW,CAAC;GACrD,IAAIH,MAAa,MAAM,OAAOA;GAC9B,IAAMI,IAAIP,EAAI,QAAQ;GAEtB,OADKO,IACE,OAAOA,KAAM,aAAaA,EAAED,CAAW,IAAKC,EAAED,MAAgB,OADtD;EAEjB;EACA,YAAYN,EAAI,QAAQ;EACxB,IAAI,SAAS;GAAE,OAAOA,EAAI,QAAQ,UAAU;EAAM;CACpD,EAAE,GAEFQ,QAAgBJ,EAAM,UAAU,MAAU;EACxC,IAAMK,IAAQT,EAAI,QAAQ;EAC1B,IAAKS,GACL,KAAK,IAAMC,KAAKC,GAAO;GAErB,IAAMC,IAAKF,EAAE;GACb,EAAM,OAAOE,GAAIH,EAAM,OAAOG,CAAE,MAAM,KAAA,IAAY,EAAE,MAAMF,EAAE,KAAK,IAAI,KAAA,CAAS;EAChF;CACF,CAAC,GAAG,CAACN,GAAOJ,CAAG,CAAC;AAClB"}
1
+ {"version":3,"file":"layout.js","names":["useLayoutDepSource","ref","useLatest","useDepSource","scene","asNodeId","containerId","useEffect","glide","m","moves","id"],"sources":["../../../src/canvas/deps/layout.ts"],"sourcesContent":["/**\n * `useLayoutDepSource` — wires the `layout` dep consumed by `moveAction`'s\n * drag-time reflow pass. A container's layout is the one its scene node\n * declares (`scene.layoutOf`). Carries the `layoutDropTarget` mode, and hands\n * every reflow the scene records to the reflow transition so it glides as a\n * drag's does. Always registers; returns null for a container that declares\n * no layout, so the reflow pass is a no-op without churning dep registration\n * on prop changes.\n */\nimport { useEffect } from 'react';\nimport { useDepSource } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport type { LayoutDep } from 'interactions/actions/depSchema';\nimport type { Scene } from 'core/scene/types';\nimport { asNodeId } from 'core/scene/types';\nimport type { LayoutDropTargetMode, ReflowTransition } from '../../layout/types';\n\nexport function useLayoutDepSource(\n scene: Scene<unknown, string, unknown>,\n dropTarget?: LayoutDropTargetMode,\n reflow?: ReflowTransition<unknown> | null,\n): void {\n const ref = useLatest({ dropTarget, reflow });\n\n useDepSource('layout', (): LayoutDep => ({\n getLayout: (containerId) => scene.layoutOf(asNodeId(containerId)),\n dropTarget: ref.current.dropTarget,\n get reflow() { return ref.current.reflow ?? null; },\n }));\n\n useEffect(() => scene.onReflow((moves) => {\n const glide = ref.current.reflow;\n if (!glide) return;\n for (const m of moves) {\n // One already gliding carries on from where it is shown.\n const id = m.id as string;\n glide.settle(id, glide.poseOf(id) === undefined ? { from: m.from } : undefined);\n }\n }), [scene, ref]);\n}\n"],"mappings":";;;;;AAiBA,SAAgBA,EACd,GACA,GACA,GACM;CACN,IAAMC,IAAMC,EAAU;EAAE;EAAY;CAAO,CAAC;CAQ5C,AANAC,EAAa,iBAA4B;EACvC,YAAY,MAAgBC,EAAM,SAASC,EAASC,CAAW,CAAC;EAChE,YAAYL,EAAI,QAAQ;EACxB,IAAI,SAAS;GAAE,OAAOA,EAAI,QAAQ,UAAU;EAAM;CACpD,EAAE,GAEFM,QAAgBH,EAAM,UAAU,MAAU;EACxC,IAAMI,IAAQP,EAAI,QAAQ;EAC1B,IAAKO,GACL,KAAK,IAAMC,KAAKC,GAAO;GAErB,IAAMC,IAAKF,EAAE;GACb,EAAM,OAAOE,GAAIH,EAAM,OAAOG,CAAE,MAAM,KAAA,IAAY,EAAE,MAAMF,EAAE,KAAK,IAAI,KAAA,CAAS;EAChF;CACF,CAAC,GAAG,CAACL,GAAOH,CAAG,CAAC;AAClB"}
@@ -1,4 +1,4 @@
1
- import { AUTO_POSE_DESCRIPTOR as e } from "../../interactions/actions/resize/autoPoseDescriptor.js";
1
+ import { AUTO_POSE_DESCRIPTOR as e } from "../../core/geometry/autoPoseDescriptor.js";
2
2
  import { useLatest as t } from "@weasel-js/react";
3
3
  import { useDepSource as n } from "@weasel-js/routing/react";
4
4
  //#region src/canvas/deps/poseDescriptor.ts
@@ -1 +1 @@
1
- {"version":3,"file":"poseDescriptor.js","names":["usePoseDescriptorDepSource","ref","useLatest","descriptor","AUTO_POSE_DESCRIPTOR"],"sources":["../../../src/canvas/deps/poseDescriptor.ts"],"sourcesContent":["import { useDepSource } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { AUTO_POSE_DESCRIPTOR } from 'interactions/actions/resize/autoPoseDescriptor';\n\n/** Publish the pose descriptor every built-in action reads. */\nexport function usePoseDescriptorDepSource(\n descriptor: PoseDescriptor<unknown> | undefined,\n): void {\n const ref = useLatest(descriptor);\n useDepSource('poseDescriptor', () => ref.current ?? AUTO_POSE_DESCRIPTOR);\n}\n"],"mappings":";;;;AAMA,SAAgBA,EACd,GACM;CACN,IAAMC,IAAMC,EAAUC,CAAU;CAChC,EAAa,wBAAwBF,EAAI,WAAWG,CAAoB;AAC1E"}
1
+ {"version":3,"file":"poseDescriptor.js","names":["usePoseDescriptorDepSource","ref","useLatest","descriptor","AUTO_POSE_DESCRIPTOR"],"sources":["../../../src/canvas/deps/poseDescriptor.ts"],"sourcesContent":["import { useDepSource } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport type { PoseDescriptor } from 'interactions/actions/resize/geometry';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\n\n/** Publish the pose descriptor every built-in action reads. */\nexport function usePoseDescriptorDepSource(\n descriptor: PoseDescriptor<unknown> | undefined,\n): void {\n const ref = useLatest(descriptor);\n useDepSource('poseDescriptor', () => ref.current ?? AUTO_POSE_DESCRIPTOR);\n}\n"],"mappings":";;;;AAMA,SAAgBA,EACd,GACM;CACN,IAAMC,IAAMC,EAAUC,CAAU;CAChC,EAAa,wBAAwBF,EAAI,WAAWG,CAAoB;AAC1E"}
@@ -1 +1 @@
1
- {"version":3,"file":"resizePolicy.js","names":["IDENTITY_EXPAND","ids","EMPTY","useResizePolicy","optsRef","useLatest","options","o","DEFAULT_RESIZE_BEHAVIORS","resizePolicyOptions"],"sources":["../../../src/canvas/deps/resizePolicy.ts"],"sourcesContent":["/**\n * `useResizePolicy` — wires the `resizePolicy` dep consumed\n * by `resizeAction`.\n *\n * - `constraints` — bounds-frame constraints (e.g. `lockAspectWithModifier`).\n * - `pointSnap` — world-space anchor-point snap behaviors.\n * - `expandIds` — group-expansion at gesture start.\n * - `label`, `transient`, `onGestureStart`, `onGestureEnd` — the commit's\n * history label and recording, and the gesture's lifecycle callbacks.\n *\n * Every field is optional; omitted fields fall back to kit defaults\n * (`DEFAULT_RESIZE_BEHAVIORS` — shift = aspect lock; pass `[]` to disable —\n * then `[]`, `ids => ids`).\n *\n * Built once per render and stabilised by `useDepSource` (which reads via a\n * ref internally), so callers can pass fresh closures without triggering\n * re-registration.\n *\n * @see ResizePolicy — the dep schema entry.\n */\nimport { useDepSource } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport type { ResizePolicy } from 'interactions/actions/depSchema';\nimport type {\n PointSnapBehavior,\n BoundsConstraint,\n} from 'interactions/gestures/types';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\nimport { DEFAULT_RESIZE_BEHAVIORS } from 'interactions/actions/resize/behaviors';\nimport type { GestureLifecycleOptions } from 'interactions/actions/gestureLifecycle';\nimport type { UseResizeOptions } from 'interactions/actions/resize/options';\n\n/** Options for `useResizePolicy`. Each omitted field falls back to the kit\n * default. */\nexport interface UseResizePolicyOptions<TPose> extends GestureLifecycleOptions {\n constraints?: TPose extends Bounds ? BoundsConstraint<TPose>[] : never[];\n pointSnap?: TPose extends Bounds ? PointSnapBehavior<TPose>[] : never[];\n expandIds?: (ids: string[]) => string[];\n}\n\nconst IDENTITY_EXPAND = (ids: string[]) => ids;\nconst EMPTY: readonly unknown[] = Object.freeze([]);\n\n/** Publish how resizing should behave — constraints, point snapping, group\n * expansion — for the resize action to consult. */\nexport function useResizePolicy<TPose>(\n options: UseResizePolicyOptions<TPose>,\n): void {\n const optsRef = useLatest(options);\n\n useDepSource('resizePolicy', (): ResizePolicy<unknown> => {\n const o = optsRef.current;\n return {\n label: o.label,\n transient: o.transient,\n onGestureStart: o.onGestureStart,\n onGestureEnd: o.onGestureEnd,\n constraints: (o.constraints ?? DEFAULT_RESIZE_BEHAVIORS) as ResizePolicy<unknown>['constraints'],\n pointSnap: (o.pointSnap ?? (EMPTY as unknown[])) as ResizePolicy<unknown>['pointSnap'],\n expandIds: o.expandIds ?? IDENTITY_EXPAND,\n };\n });\n}\n\n/** `<SceneCanvas selectTool.resize>` as {@link useResizePolicy} options.\n * `resizable` is read by `<SceneCanvas>` itself. */\nexport function resizePolicyOptions<TPose>(o: UseResizeOptions<TPose>): UseResizePolicyOptions<TPose> {\n return {\n constraints: o.behaviors as UseResizePolicyOptions<TPose>['constraints'],\n pointSnap: o.pointSnapBehaviors as UseResizePolicyOptions<TPose>['pointSnap'],\n expandIds: o.expandIds,\n label: o.resizeLabel,\n transient: o.transient,\n onGestureStart: o.onGestureStart,\n onGestureEnd: o.onGestureEnd,\n };\n}\n"],"mappings":";;;;AAwCA,IAAMA,KAAmB,MAAkBC,GACrCC,IAA4B,OAAO,OAAO,CAAC,CAAC;AAIlD,SAAgBC,EACd,GACM;CACN,IAAMC,IAAUC,EAAUC,CAAO;CAEjC,EAAa,sBAA6C;EACxD,IAAMC,IAAIH,EAAQ;EAClB,OAAO;GACL,OAAOG,EAAE;GACT,WAAWA,EAAE;GACb,gBAAgBA,EAAE;GAClB,cAAcA,EAAE;GAChB,aAAcA,EAAE,eAAeC;GAC/B,WAAYD,EAAE,aAAcL;GAC5B,WAAWK,EAAE,aAAaP;EAC5B;CACF,CAAC;AACH;AAIA,SAAgBS,EAA2B,GAA2D;CACpG,OAAO;EACL,aAAaF,EAAE;EACf,WAAWA,EAAE;EACb,WAAWA,EAAE;EACb,OAAOA,EAAE;EACT,WAAWA,EAAE;EACb,gBAAgBA,EAAE;EAClB,cAAcA,EAAE;CAClB;AACF"}
1
+ {"version":3,"file":"resizePolicy.js","names":["IDENTITY_EXPAND","ids","EMPTY","useResizePolicy","optsRef","useLatest","options","o","DEFAULT_RESIZE_BEHAVIORS","resizePolicyOptions"],"sources":["../../../src/canvas/deps/resizePolicy.ts"],"sourcesContent":["/**\n * Wires the `resizePolicy` dep consumed by `resizeAction`. Omitted\n * `constraints` default to `DEFAULT_RESIZE_BEHAVIORS` (shift = aspect lock);\n * pass `[]` to disable.\n */\nimport { useDepSource } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport type { ResizePolicy } from 'interactions/actions/depSchema';\nimport type {\n PointSnapBehavior,\n BoundsConstraint,\n} from 'interactions/gestures/types';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\nimport { DEFAULT_RESIZE_BEHAVIORS } from 'interactions/actions/resize/behaviors';\nimport type { GestureLifecycleOptions } from 'interactions/actions/gestureLifecycle';\nimport type { UseResizeOptions } from 'interactions/actions/resize/options';\n\n/** Options for `useResizePolicy`. Each omitted field falls back to the kit\n * default. */\nexport interface UseResizePolicyOptions<TPose> extends GestureLifecycleOptions {\n constraints?: TPose extends Bounds ? BoundsConstraint<TPose>[] : never[];\n pointSnap?: TPose extends Bounds ? PointSnapBehavior<TPose>[] : never[];\n expandIds?: (ids: string[]) => string[];\n}\n\nconst IDENTITY_EXPAND = (ids: string[]) => ids;\nconst EMPTY: readonly unknown[] = Object.freeze([]);\n\n/** Publish how resizing should behave — constraints, point snapping, group\n * expansion — for the resize action to consult. */\nexport function useResizePolicy<TPose>(\n options: UseResizePolicyOptions<TPose>,\n): void {\n const optsRef = useLatest(options);\n\n useDepSource('resizePolicy', (): ResizePolicy<unknown> => {\n const o = optsRef.current;\n return {\n label: o.label,\n transient: o.transient,\n onGestureStart: o.onGestureStart,\n onGestureEnd: o.onGestureEnd,\n constraints: (o.constraints ?? DEFAULT_RESIZE_BEHAVIORS) as ResizePolicy<unknown>['constraints'],\n pointSnap: (o.pointSnap ?? (EMPTY as unknown[])) as ResizePolicy<unknown>['pointSnap'],\n expandIds: o.expandIds ?? IDENTITY_EXPAND,\n };\n });\n}\n\n/** `<SceneCanvas selectTool.resize>` as {@link useResizePolicy} options.\n * `resizable` is read by `<SceneCanvas>` itself. */\nexport function resizePolicyOptions<TPose>(o: UseResizeOptions<TPose>): UseResizePolicyOptions<TPose> {\n return {\n constraints: o.behaviors as UseResizePolicyOptions<TPose>['constraints'],\n pointSnap: o.pointSnapBehaviors as UseResizePolicyOptions<TPose>['pointSnap'],\n expandIds: o.expandIds,\n label: o.resizeLabel,\n transient: o.transient,\n onGestureStart: o.onGestureStart,\n onGestureEnd: o.onGestureEnd,\n };\n}\n"],"mappings":";;;;AAyBA,IAAMA,KAAmB,MAAkBC,GACrCC,IAA4B,OAAO,OAAO,CAAC,CAAC;AAIlD,SAAgBC,EACd,GACM;CACN,IAAMC,IAAUC,EAAUC,CAAO;CAEjC,EAAa,sBAA6C;EACxD,IAAMC,IAAIH,EAAQ;EAClB,OAAO;GACL,OAAOG,EAAE;GACT,WAAWA,EAAE;GACb,gBAAgBA,EAAE;GAClB,cAAcA,EAAE;GAChB,aAAcA,EAAE,eAAeC;GAC/B,WAAYD,EAAE,aAAcL;GAC5B,WAAWK,EAAE,aAAaP;EAC5B;CACF,CAAC;AACH;AAIA,SAAgBS,EAA2B,GAA2D;CACpG,OAAO;EACL,aAAaF,EAAE;EACf,WAAWA,EAAE;EACb,WAAWA,EAAE;EACb,OAAOA,EAAE;EACT,WAAWA,EAAE;EACb,gBAAgBA,EAAE;EAClB,cAAcA,EAAE;CAClB;AACF"}
@@ -1,9 +1,8 @@
1
- import { poseLinearOf as e } from "../../core/geometry/poseFrame.js";
2
- import { poseDescriptorForNode as t } from "../../core/geometry/poseDescriptor.js";
3
- import { AUTO_POSE_DESCRIPTOR as n } from "../../interactions/actions/resize/autoPoseDescriptor.js";
4
- import { pathInWorld as r, worldEditToStorage as i } from "../../features/paths/pathInWorld.js";
5
- import { scenePoseFrame as a } from "../../interactions/actions/poseFrame.js";
6
- import { computeSliceOps as o } from "../../interactions/actions/defaults/sliceOps.js";
1
+ import { poseDescriptorForNode as e } from "../../core/geometry/poseDescriptor.js";
2
+ import { AUTO_POSE_DESCRIPTOR as t } from "../../core/geometry/autoPoseDescriptor.js";
3
+ import { scenePoseFrame as n } from "../../interactions/actions/poseFrame.js";
4
+ import { computeSliceOps as r } from "../../interactions/actions/defaults/sliceOps.js";
5
+ import { pathInWorld as i, poseLinearOf as a, worldEditToStorage as o } from "@weasel-js/geom";
7
6
  import { useLatest as s } from "@weasel-js/react";
8
7
  import { useDepSource as c } from "@weasel-js/routing/react";
9
8
  //#region src/canvas/deps/slice.ts
@@ -11,25 +10,25 @@ function l(e) {
11
10
  let t = s(e);
12
11
  c("slice", () => t.current);
13
12
  }
14
- function u(e, i, l, u, h) {
15
- let g = s(e), _ = s(i), v = s(l), y = s(u), b = s(h);
16
- c("slice", () => ({ commit(e) {
17
- let i = g.current, s = a(i, y.current), c = b.current ?? n, l = [], u = /* @__PURE__ */ new Map();
18
- for (let e of i.renderOrderNodes()) {
19
- let n = p(i, e);
13
+ function u(a, o, l, u) {
14
+ let h = s(a), g = s(o), _ = s(l), v = s(u);
15
+ c("slice", () => ({ commit(a) {
16
+ let o = h.current, s = n(o), c = v.current ?? t, l = [], u = /* @__PURE__ */ new Map();
17
+ for (let t of o.renderOrderNodes()) {
18
+ let n = p(o, t);
20
19
  if (!n) continue;
21
- let a = d(t(c, e), s.world(e.id));
22
- a && (u.set(e.id, a), l.push({
23
- node: e,
24
- index: m(i, e),
25
- worldPath: r(n, a.box)
20
+ let r = d(e(c, t), s.world(t.id));
21
+ r && (u.set(t.id, r), l.push({
22
+ node: t,
23
+ index: m(o, t),
24
+ worldPath: i(n, r.box)
26
25
  }));
27
26
  }
28
- let h = _.current, { ops: x, nextSelection: S } = o({
27
+ let y = g.current, { ops: b, nextSelection: x } = r({
29
28
  leaves: l,
30
- cut: e,
31
- nextId: () => i.mintId(),
32
- selection: h.get(),
29
+ cut: a,
30
+ nextId: () => o.mintId(),
31
+ selection: y.get(),
33
32
  placePiece: (e, t) => {
34
33
  let n = f(u.get(e.node.id), t);
35
34
  return {
@@ -38,51 +37,51 @@ function u(e, i, l, u, h) {
38
37
  };
39
38
  }
40
39
  });
41
- x.length !== 0 && (v.current.applyOps(x, "Slice"), S && h.set(S));
40
+ b.length !== 0 && (_.current.applyOps(b, "Slice"), x && y.set(x));
42
41
  } }));
43
42
  }
44
- function d(t, n) {
45
- let r = t.getBounds(n);
46
- if (!r || ![
47
- r.x,
48
- r.y,
49
- r.width,
50
- r.height
43
+ function d(e, t) {
44
+ let n = e.getBounds(t);
45
+ if (!n || ![
46
+ n.x,
47
+ n.y,
48
+ n.width,
49
+ n.height
51
50
  ].every(Number.isFinite)) return null;
52
- let i = t.getRotation?.(n) ?? 0, a = e(n) ?? void 0;
51
+ let r = e.getRotation?.(t) ?? 0, i = a(t) ?? void 0;
53
52
  return {
54
- world: n,
55
- g: t,
53
+ world: t,
54
+ g: e,
56
55
  box: {
57
- x: r.x,
58
- y: r.y,
59
- width: r.width,
60
- height: r.height,
61
- rotation: i,
62
- transform: a
56
+ x: n.x,
57
+ y: n.y,
58
+ width: n.width,
59
+ height: n.height,
60
+ rotation: r,
61
+ transform: i
63
62
  }
64
63
  };
65
64
  }
66
65
  function f({ world: e, g: t, box: n }, r) {
67
- let a = !!t.withRotation && t.supportsRotation?.(e) !== !1, o = n.rotation ?? 0;
68
- if (o !== 0 && !a) {
69
- let a = i({
66
+ let i = !!t.withRotation && t.supportsRotation?.(e) !== !1, a = n.rotation ?? 0;
67
+ if (a !== 0 && !i) {
68
+ let i = o({
70
69
  ...n,
71
70
  rotation: 0
72
71
  }, r);
73
72
  return {
74
- pose: t.fromBounds(a.pose, e),
75
- path: a.path
73
+ pose: t.fromBounds(i.pose, e),
74
+ path: i.path
76
75
  };
77
76
  }
78
- let { pose: s, path: c } = i(n, r), l = {
77
+ let { pose: s, path: c } = o(n, r), l = {
79
78
  x: s.x,
80
79
  y: s.y,
81
80
  width: s.width,
82
81
  height: s.height
83
82
  }, u = t.remapBounds(e, t.getBounds(e), l);
84
83
  return {
85
- pose: o === 0 ? u : t.withRotation(u, o),
84
+ pose: a === 0 ? u : t.withRotation(u, a),
86
85
  path: c
87
86
  };
88
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"slice.js","names":["useSliceDep","depRef","useLatest","dep","useSliceDepSource","sceneRef","scene","selectionRef","selection","adapterRef","adapter","compositionRef","poseComposition","descriptorRef","poseDescriptor","sc","frame","scenePoseFrame","descriptor","AUTO_POSE_DESCRIPTOR","leaves","drawnAt","node","path","sliceablePath","drawn","drawnPose","poseDescriptorForNode","siblingIndex","pathInWorld","sel","computeSliceOps","stored","storePiece","leaf","piece","ops","nextSelection","b","g","world","rotation","transform","poseLinearOf","keepsRotation","box","baked","worldEditToStorage","dst","pose"],"sources":["../../../src/canvas/deps/slice.ts"],"sourcesContent":["/**\n * The `slice` dep `sliceAction` and `useSliceTool` commit their cuts through.\n *\n * `<SceneCanvas>` publishes `useSliceDepSource` over its own scene. A consumer\n * replaces it with `useSliceDep` (or `useDepSource('slice', …)`) from under\n * the canvas; the newest registration wins, and a canvas child registers\n * after the canvas's own.\n */\nimport { useDepSource } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport type { SliceDep } from 'interactions/actions/depSchema';\nimport type { Scene, NodeId, Node } from 'core/scene/types';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport type { Op } from 'core/ops/types';\nimport type { Path } from '@weasel-js/geom';\nimport { AUTO_POSE_DESCRIPTOR } from 'interactions/actions/resize/autoPoseDescriptor';\nimport { poseDescriptorForNode, type PoseDescriptor } from 'core/geometry/poseDescriptor';\nimport { pathInWorld, worldEditToStorage, type PathInWorldPose } from 'features/paths/pathInWorld';\nimport { poseLinearOf } from 'core/geometry/poseFrame';\nimport { scenePoseFrame } from 'interactions/actions/poseFrame';\nimport { computeSliceOps, type SliceLeaf } from 'interactions/actions/defaults/sliceOps';\nimport type { PoseComposition } from 'features/groups/composePose';\n\n/** Publish how a slice (knife cut) is performed, so the `slice` action can\n * run against the consumer's geometry. */\nexport function useSliceDep(dep: SliceDep): void {\n const depRef = useLatest(dep);\n\n useDepSource('slice', (): SliceDep => depRef.current);\n}\n\ninterface OpsApplier {\n applyOps(ops: Op[], label?: string): void;\n}\n\n/**\n * The kit `slice` dep: cut every leaf the cut crosses and swap it for its\n * pieces in one undoable batch.\n *\n * A leaf is cut when its `data.path` is a `Path` and `poseDescriptor` can read\n * its world pose as a box and a rotation; a leaf on a locked layer, or one\n * whose geometry derives from other nodes, is passed over. Each path is drawn\n * into world space the way the renderer draws it, so a child is cut where it\n * appears, and each piece is mapped back into the source's frame: it keeps the\n * source's rotation in its pose when the descriptor can write one\n * (`withRotation`), and has the rotation baked into its path otherwise. The\n * piece's pose is then stored in its parent's frame through `poseComposition`.\n * The pieces of a selected leaf take its place in the selection.\n */\nexport function useSliceDepSource(\n scene: Scene<unknown, string, unknown>,\n selection: SelectionApi,\n adapter: OpsApplier,\n poseComposition?: PoseComposition<unknown>,\n poseDescriptor?: PoseDescriptor<unknown>,\n): void {\n const sceneRef = useLatest(scene);\n const selectionRef = useLatest(selection);\n const adapterRef = useLatest(adapter);\n const compositionRef = useLatest(poseComposition);\n const descriptorRef = useLatest(poseDescriptor);\n\n useDepSource('slice', (): SliceDep => ({\n commit(cut) {\n const sc = sceneRef.current;\n const frame = scenePoseFrame(sc, compositionRef.current);\n const descriptor = descriptorRef.current ?? AUTO_POSE_DESCRIPTOR;\n const leaves: SliceLeaf<Node<unknown, string, unknown>>[] = [];\n const drawnAt = new Map<string, DrawnPose>();\n for (const node of sc.renderOrderNodes()) {\n const path = sliceablePath(sc, node);\n if (!path) continue;\n const drawn = drawnPose(poseDescriptorForNode(descriptor, node), frame.world(node.id));\n if (!drawn) continue;\n drawnAt.set(node.id, drawn);\n leaves.push({ node, index: siblingIndex(sc, node), worldPath: pathInWorld(path, drawn.box) });\n }\n\n const sel = selectionRef.current;\n const { ops, nextSelection } = computeSliceOps({\n leaves,\n cut,\n nextId: () => sc.mintId(),\n selection: sel.get(),\n placePiece: (leaf, piece) => {\n const stored = storePiece(drawnAt.get(leaf.node.id)!, piece);\n return { pose: frame.local(leaf.node.id, stored.pose), path: stored.path };\n },\n });\n if (ops.length === 0) return;\n adapterRef.current.applyOps(ops, 'Slice');\n if (nextSelection) sel.set(nextSelection as NodeId[]);\n },\n }));\n}\n\n/** A leaf's world pose, and the box, rotation, and transform its path is drawn through. */\ninterface DrawnPose {\n world: unknown;\n g: PoseDescriptor<unknown>;\n box: PathInWorldPose;\n}\n\nfunction drawnPose(g: PoseDescriptor<unknown>, world: unknown): DrawnPose | null {\n const b = g.getBounds(world);\n if (!b || ![b.x, b.y, b.width, b.height].every(Number.isFinite)) return null;\n const rotation = g.getRotation?.(world) ?? 0;\n const transform = poseLinearOf(world) ?? undefined;\n return { world, g, box: { x: b.x, y: b.y, width: b.width, height: b.height, rotation, transform } };\n}\n\n/** A world-space piece as a world pose of the source's kind plus the path it draws. */\nfunction storePiece({ world, g, box }: DrawnPose, piece: Path): { pose: unknown; path: Path } {\n const keepsRotation = !!g.withRotation && g.supportsRotation?.(world) !== false;\n const rotation = box.rotation ?? 0;\n if (rotation !== 0 && !keepsRotation) {\n const baked = worldEditToStorage({ ...box, rotation: 0 }, piece);\n return { pose: g.fromBounds(baked.pose, world), path: baked.path };\n }\n const { pose: b, path } = worldEditToStorage(box, piece);\n const dst = { x: b.x, y: b.y, width: b.width, height: b.height };\n const pose = g.remapBounds(world, g.getBounds(world), dst);\n return { pose: rotation !== 0 ? g.withRotation!(pose, rotation) : pose, path };\n}\n\nfunction sliceablePath(scene: Scene<unknown, string, unknown>, node: Node<unknown, string, unknown>): Path | null {\n if (node.kind !== 'leaf' || node.derivePath || node.derivePose) return null;\n if (scene.isLocked(node.id)) return null;\n const path = (node.data as { path?: unknown } | null)?.path as Path | undefined;\n return path && (path.kind === 'rect' || path.kind === 'polygon') ? path : null;\n}\n\nfunction siblingIndex(scene: Scene<unknown, string, unknown>, node: Node<unknown, string, unknown>): number {\n const siblings = node.parent == null ? scene.roots : scene.childrenOf(node.parent);\n return siblings.indexOf(node.id);\n}\n"],"mappings":";;;;;;;;;AAyBA,SAAgBA,EAAY,GAAqB;CAC/C,IAAMC,IAASC,EAAUC,CAAG;CAE5B,EAAa,eAAyBF,EAAO,OAAO;AACtD;AAoBA,SAAgBG,EACd,GACA,GACA,GACA,GACA,GACM;CACN,IAAMC,IAAWH,EAAUI,CAAK,GAC1BC,IAAeL,EAAUM,CAAS,GAClCC,IAAaP,EAAUQ,CAAO,GAC9BC,IAAiBT,EAAUU,CAAe,GAC1CC,IAAgBX,EAAUY,CAAc;CAE9C,EAAa,gBAA0B,EACrC,OAAO,GAAK;EACV,IAAMC,IAAKV,EAAS,SACdW,IAAQC,EAAeF,GAAIJ,EAAe,OAAO,GACjDO,IAAaL,EAAc,WAAWM,GACtCC,IAAsD,CAAC,GACvDC,oBAAU,IAAI,IAAuB;EAC3C,KAAK,IAAMC,KAAQP,EAAG,iBAAiB,GAAG;GACxC,IAAMQ,IAAOC,EAAcT,GAAIO,CAAI;GACnC,IAAI,CAACC,GAAM;GACX,IAAME,IAAQC,EAAUC,EAAsBT,GAAYI,CAAI,GAAGN,EAAM,MAAMM,EAAK,EAAE,CAAC;GACrF,AAAKG,MACLJ,EAAQ,IAAIC,EAAK,IAAIG,CAAK,GAC1BL,EAAO,KAAK;IAAE;IAAM,OAAOQ,EAAab,GAAIO,CAAI;IAAG,WAAWO,EAAYN,GAAME,EAAM,GAAG;GAAE,CAAC;EAC9F;EAEA,IAAMK,IAAMvB,EAAa,SACnB,EAAE,QAAK,qBAAkBwB,EAAgB;GAC7C;GACA;GACA,cAAchB,EAAG,OAAO;GACxB,WAAWe,EAAI,IAAI;GACnB,aAAa,GAAM,MAAU;IAC3B,IAAME,IAASC,EAAWZ,EAAQ,IAAIa,EAAK,KAAK,EAAE,GAAIC,CAAK;IAC3D,OAAO;KAAE,MAAMnB,EAAM,MAAMkB,EAAK,KAAK,IAAIF,EAAO,IAAI;KAAG,MAAMA,EAAO;IAAK;GAC3E;EACF,CAAC;EACD,AAAII,EAAI,WAAW,MACnB3B,EAAW,QAAQ,SAAS2B,GAAK,OAAO,GACpCC,KAAeP,EAAI,IAAIO,CAAyB;CACtD,EACF,EAAE;AACJ;AASA,SAASX,EAAU,GAA4B,GAAkC;CAC/E,IAAMY,IAAIC,EAAE,UAAUC,CAAK;CAC3B,IAAI,CAACF,KAAK,CAAC;EAACA,EAAE;EAAGA,EAAE;EAAGA,EAAE;EAAOA,EAAE;CAAM,CAAC,CAAC,MAAM,OAAO,QAAQ,GAAG,OAAO;CACxE,IAAMG,IAAWF,EAAE,cAAcC,CAAK,KAAK,GACrCE,IAAYC,EAAaH,CAAK,KAAK,KAAA;CACzC,OAAO;EAAE;EAAO;EAAG,KAAK;GAAE,GAAGF,EAAE;GAAG,GAAGA,EAAE;GAAG,OAAOA,EAAE;GAAO,QAAQA,EAAE;GAAQ;GAAU;EAAU;CAAE;AACpG;AAGA,SAASL,EAAW,EAAE,UAAO,MAAG,UAAkB,GAA4C;CAC5F,IAAMW,IAAgB,CAAC,CAACL,EAAE,gBAAgBA,EAAE,mBAAmBC,CAAK,MAAM,IACpEC,IAAWI,EAAI,YAAY;CACjC,IAAIJ,MAAa,KAAK,CAACG,GAAe;EACpC,IAAME,IAAQC,EAAmB;GAAE,GAAGF;GAAK,UAAU;EAAE,GAAGV,CAAK;EAC/D,OAAO;GAAE,MAAMI,EAAE,WAAWO,EAAM,MAAMN,CAAK;GAAG,MAAMM,EAAM;EAAK;CACnE;CACA,IAAM,EAAE,MAAMR,GAAG,YAASS,EAAmBF,GAAKV,CAAK,GACjDa,IAAM;EAAE,GAAGV,EAAE;EAAG,GAAGA,EAAE;EAAG,OAAOA,EAAE;EAAO,QAAQA,EAAE;CAAO,GACzDW,IAAOV,EAAE,YAAYC,GAAOD,EAAE,UAAUC,CAAK,GAAGQ,CAAG;CACzD,OAAO;EAAE,MAAMP,MAAa,IAAsCQ,IAAlCV,EAAE,aAAcU,GAAMR,CAAQ;EAAU;CAAK;AAC/E;AAEA,SAASjB,EAAc,GAAwC,GAAmD;CAEhH,IADIF,EAAK,SAAS,UAAUA,EAAK,cAAcA,EAAK,cAChDhB,EAAM,SAASgB,EAAK,EAAE,GAAG,OAAO;CACpC,IAAMC,IAAQD,EAAK,MAAoC;CACvD,OAAOC,MAASA,EAAK,SAAS,UAAUA,EAAK,SAAS,aAAaA,IAAO;AAC5E;AAEA,SAASK,EAAa,GAAwC,GAA8C;CAE1G,QADiBN,EAAK,UAAU,OAAOhB,EAAM,QAAQA,EAAM,WAAWgB,EAAK,MAAM,EAAA,CACjE,QAAQA,EAAK,EAAE;AACjC"}
1
+ {"version":3,"file":"slice.js","names":["useSliceDep","depRef","useLatest","dep","useSliceDepSource","sceneRef","scene","selectionRef","selection","adapterRef","adapter","descriptorRef","poseDescriptor","sc","frame","scenePoseFrame","descriptor","AUTO_POSE_DESCRIPTOR","leaves","drawnAt","node","path","sliceablePath","drawn","drawnPose","poseDescriptorForNode","siblingIndex","pathInWorld","sel","computeSliceOps","stored","storePiece","leaf","piece","ops","nextSelection","b","g","world","rotation","transform","poseLinearOf","keepsRotation","box","baked","worldEditToStorage","dst","pose"],"sources":["../../../src/canvas/deps/slice.ts"],"sourcesContent":["/**\n * The `slice` dep `sliceAction` and `useSliceTool` commit their cuts through.\n *\n * `<SceneCanvas>` publishes `useSliceDepSource` over its own scene. A consumer\n * replaces it with `useSliceDep` (or `useDepSource('slice', …)`) from under\n * the canvas; the newest registration wins, and a canvas child registers\n * after the canvas's own.\n */\nimport { useDepSource } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport type { SliceDep } from 'interactions/actions/depSchema';\nimport type { Scene, NodeId, Node } from 'core/scene/types';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport type { Op } from 'core/ops/types';\nimport type { Path } from '@weasel-js/geom';\nimport { AUTO_POSE_DESCRIPTOR } from 'core/geometry/autoPoseDescriptor';\nimport { poseDescriptorForNode, type PoseDescriptor } from 'core/geometry/poseDescriptor';\nimport { pathInWorld, worldEditToStorage, type PathInWorldPose } from '@weasel-js/geom';\nimport { poseLinearOf } from '@weasel-js/geom';\nimport { scenePoseFrame } from 'interactions/actions/poseFrame';\nimport { computeSliceOps, type SliceLeaf } from 'interactions/actions/defaults/sliceOps';\n\n/** Publish how a slice (knife cut) is performed, so the `slice` action can\n * run against the consumer's geometry. */\nexport function useSliceDep(dep: SliceDep): void {\n const depRef = useLatest(dep);\n\n useDepSource('slice', (): SliceDep => depRef.current);\n}\n\n/** What the `slice` dep writes its batch through. An adapter satisfies it. */\nexport interface OpsApplier {\n applyOps(ops: Op[], label?: string): void;\n}\n\n/**\n * The kit `slice` dep: cut every leaf the cut crosses and swap it for its\n * pieces in one undoable batch.\n *\n * A leaf is cut when its `data.path` is a `Path` and `poseDescriptor` can read\n * its world pose as a box and a rotation; a leaf on a locked layer, or one\n * whose geometry derives from other nodes, is passed over. A piece keeps the\n * source's rotation in its pose when the descriptor can write one\n * (`withRotation`), and has the rotation baked into its path otherwise. The\n * pieces of a selected leaf take its place in the selection.\n */\nexport function useSliceDepSource(\n scene: Scene<unknown, string, unknown>,\n selection: SelectionApi,\n adapter: OpsApplier,\n poseDescriptor?: PoseDescriptor<unknown>,\n): void {\n const sceneRef = useLatest(scene);\n const selectionRef = useLatest(selection);\n const adapterRef = useLatest(adapter);\n const descriptorRef = useLatest(poseDescriptor);\n\n useDepSource('slice', (): SliceDep => ({\n commit(cut) {\n const sc = sceneRef.current;\n const frame = scenePoseFrame(sc);\n const descriptor = descriptorRef.current ?? AUTO_POSE_DESCRIPTOR;\n const leaves: SliceLeaf<Node<unknown, string, unknown>>[] = [];\n const drawnAt = new Map<string, DrawnPose>();\n for (const node of sc.renderOrderNodes()) {\n const path = sliceablePath(sc, node);\n if (!path) continue;\n const drawn = drawnPose(poseDescriptorForNode(descriptor, node), frame.world(node.id));\n if (!drawn) continue;\n drawnAt.set(node.id, drawn);\n leaves.push({ node, index: siblingIndex(sc, node), worldPath: pathInWorld(path, drawn.box) });\n }\n\n const sel = selectionRef.current;\n const { ops, nextSelection } = computeSliceOps({\n leaves,\n cut,\n nextId: () => sc.mintId(),\n selection: sel.get(),\n placePiece: (leaf, piece) => {\n const stored = storePiece(drawnAt.get(leaf.node.id)!, piece);\n return { pose: frame.local(leaf.node.id, stored.pose), path: stored.path };\n },\n });\n if (ops.length === 0) return;\n adapterRef.current.applyOps(ops, 'Slice');\n if (nextSelection) sel.set(nextSelection as NodeId[]);\n },\n }));\n}\n\n/** A leaf's world pose, and the box, rotation, and transform its path is drawn through. */\ninterface DrawnPose {\n world: unknown;\n g: PoseDescriptor<unknown>;\n box: PathInWorldPose;\n}\n\nfunction drawnPose(g: PoseDescriptor<unknown>, world: unknown): DrawnPose | null {\n const b = g.getBounds(world);\n if (!b || ![b.x, b.y, b.width, b.height].every(Number.isFinite)) return null;\n const rotation = g.getRotation?.(world) ?? 0;\n const transform = poseLinearOf(world) ?? undefined;\n return { world, g, box: { x: b.x, y: b.y, width: b.width, height: b.height, rotation, transform } };\n}\n\n/** A world-space piece as a world pose of the source's kind plus the path it draws. */\nfunction storePiece({ world, g, box }: DrawnPose, piece: Path): { pose: unknown; path: Path } {\n const keepsRotation = !!g.withRotation && g.supportsRotation?.(world) !== false;\n const rotation = box.rotation ?? 0;\n if (rotation !== 0 && !keepsRotation) {\n const baked = worldEditToStorage({ ...box, rotation: 0 }, piece);\n return { pose: g.fromBounds(baked.pose, world), path: baked.path };\n }\n const { pose: b, path } = worldEditToStorage(box, piece);\n const dst = { x: b.x, y: b.y, width: b.width, height: b.height };\n const pose = g.remapBounds(world, g.getBounds(world), dst);\n return { pose: rotation !== 0 ? g.withRotation!(pose, rotation) : pose, path };\n}\n\nfunction sliceablePath(scene: Scene<unknown, string, unknown>, node: Node<unknown, string, unknown>): Path | null {\n if (node.kind !== 'leaf' || node.derivePath || node.derivePose) return null;\n if (scene.isLocked(node.id)) return null;\n const path = (node.data as { path?: unknown } | null)?.path as Path | undefined;\n return path && (path.kind === 'rect' || path.kind === 'polygon') ? path : null;\n}\n\nfunction siblingIndex(scene: Scene<unknown, string, unknown>, node: Node<unknown, string, unknown>): number {\n const siblings = node.parent == null ? scene.roots : scene.childrenOf(node.parent);\n return siblings.indexOf(node.id);\n}\n"],"mappings":"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"}
@@ -1,17 +1,17 @@
1
- import { isTextData as e } from "../../features/text/isTextData.js";
2
- import { useLatest as t } from "@weasel-js/react";
3
- import { useDepSource as n } from "@weasel-js/routing/react";
1
+ import { useLatest as e } from "@weasel-js/react";
2
+ import { useDepSource as t } from "@weasel-js/routing/react";
3
+ import { isTextData as n } from "@weasel-js/text";
4
4
  //#region src/canvas/deps/textEdit.ts
5
5
  function r(r) {
6
- let i = t(r);
7
- n("textEdit", () => {
8
- let t = i.current;
6
+ let i = e(r);
7
+ t("textEdit", () => {
8
+ let e = i.current;
9
9
  return {
10
10
  startEdit(e, t) {
11
11
  process.env.NODE_ENV !== "production" && console.warn("weasel textEditDep: startEdit called but no useTextEdit hook is mounted in SceneCanvas. Override the \"textEdit\" dep via useDepSource(\"textEdit\", ...) to enable in-place text editing.");
12
12
  },
13
- isTextNode(n) {
14
- return e(t.get(n)?.data);
13
+ isTextNode(t) {
14
+ return n(e.get(t)?.data);
15
15
  }
16
16
  };
17
17
  });
@@ -1 +1 @@
1
- {"version":3,"file":"textEdit.js","names":["useTextEditDepSource","sceneRef","useLatest","scene","sc","isTextData","id"],"sources":["../../../src/canvas/deps/textEdit.ts"],"sourcesContent":["/**\n * `useTextEditDepSource` — wires the `textEdit` dep consumed by\n * `enterTextEditAction`. Kit-default implementation is a no-op stub for\n * `startEdit` plus an `isTextNode` that asks `isTextData`. Consumers wanting real text editing override the\n * dep via their own `useDepSource('textEdit', ...)` sourced from a\n * `useSceneTextEdit` instance.\n */\nimport { useDepSource } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport type { TextEditDep } from 'interactions/actions/depSchema';\nimport type { Scene, NodeId } from 'core/scene/types';\nimport { isTextData } from 'features/text/isTextData';\n\nexport function useTextEditDepSource(\n scene: Scene<unknown, string, unknown>,\n): void {\n const sceneRef = useLatest(scene);\n\n useDepSource('textEdit', (): TextEditDep => {\n const sc = sceneRef.current;\n return {\n startEdit(_id: string, _opts?: { caret?: number | 'all' }) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'weasel textEditDep: startEdit called but no useTextEdit hook is mounted in SceneCanvas. ' +\n 'Override the \"textEdit\" dep via useDepSource(\"textEdit\", ...) to enable in-place text editing.',\n );\n }\n },\n isTextNode(id: string) {\n return isTextData(sc.get(id as NodeId)?.data);\n },\n };\n });\n}\n"],"mappings":";;;;AAaA,SAAgBA,EACd,GACM;CACN,IAAMC,IAAWC,EAAUC,CAAK;CAEhC,EAAa,kBAA+B;EAC1C,IAAMC,IAAKH,EAAS;EACpB,OAAO;GACL,UAAU,GAAa,GAAoC;IACzD,AAAA,QAAA,IAAA,aAA6B,gBAC3B,QAAQ,KACN,4LAEF;GAEJ;GACA,WAAW,GAAY;IACrB,OAAOI,EAAWD,EAAG,IAAIE,CAAY,CAAC,EAAE,IAAI;GAC9C;EACF;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"textEdit.js","names":["useTextEditDepSource","sceneRef","useLatest","scene","sc","isTextData","id"],"sources":["../../../src/canvas/deps/textEdit.ts"],"sourcesContent":["/**\n * `useTextEditDepSource` — wires the `textEdit` dep consumed by\n * `enterTextEditAction`. Kit-default implementation is a no-op stub for\n * `startEdit` plus an `isTextNode` that asks `isTextData`. Consumers wanting real text editing override the\n * dep via their own `useDepSource('textEdit', ...)` sourced from a\n * `useSceneTextEdit` instance.\n */\nimport { useDepSource } from '@weasel-js/routing/react';\nimport { useLatest } from '@weasel-js/react';\nimport type { TextEditDep } from 'interactions/actions/depSchema';\nimport type { Scene, NodeId } from 'core/scene/types';\nimport { isTextData } from '@weasel-js/text';\n\nexport function useTextEditDepSource(\n scene: Scene<unknown, string, unknown>,\n): void {\n const sceneRef = useLatest(scene);\n\n useDepSource('textEdit', (): TextEditDep => {\n const sc = sceneRef.current;\n return {\n startEdit(_id: string, _opts?: { caret?: number | 'all' }) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'weasel textEditDep: startEdit called but no useTextEdit hook is mounted in SceneCanvas. ' +\n 'Override the \"textEdit\" dep via useDepSource(\"textEdit\", ...) to enable in-place text editing.',\n );\n }\n },\n isTextNode(id: string) {\n return isTextData(sc.get(id as NodeId)?.data);\n },\n };\n });\n}\n"],"mappings":";;;;AAaA,SAAgBA,EACd,GACM;CACN,IAAMC,IAAWC,EAAUC,CAAK;CAEhC,EAAa,kBAA+B;EAC1C,IAAMC,IAAKH,EAAS;EACpB,OAAO;GACL,UAAU,GAAa,GAAoC;IACzD,AAAA,QAAA,IAAA,aAA6B,gBAC3B,QAAQ,KACN,4LAEF;GAEJ;GACA,WAAW,GAAY;IACrB,OAAOI,EAAWD,EAAG,IAAIE,CAAY,CAAC,EAAE,IAAI;GAC9C;EACF;CACF,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"view.js","names":["useViewDepSource","wiring","useLatest","hasRecenter","recenter","hasHostSize","hostSize","hasAnimation","animation","hasDecay","decay","hasLayerIsPainted","layerIsPainted","useMemo","v","to","opts","config","layerId"],"sources":["../../../src/canvas/deps/view.ts"],"sourcesContent":["/**\n * `useViewDepSource` — builds a stable `ViewApi` that reads from\n * `currentViewRef`, writes via `onViewChange`, and (when a camera runner is\n * passed) exposes animation.\n *\n * NOTE: this hook does **not** itself call `useDepSource('view', ...)` because\n * `useStandardActions` already publishes the `view` dep when it is passed in\n * its options bag. Returning the `ViewApi` here lets the registrar hand the\n * same instance to `useStandardActions` (which then registers it) without\n * having to reconstruct it inline.\n *\n * Kept as a per-dep module so the construction logic (closure refresh, ref\n * stability, etc.) has a single home next to the other dep modules.\n */\nimport { useMemo } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type React from 'react';\nimport type { ViewApi } from 'interactions/actions/depSchema';\nimport type { ViewAnimationApi } from 'core/viewport/useViewAnimation';\nimport type { DecayLoopConfig } from 'core/viewport/useDecayLoop';\nimport type { View } from 'core/viewport/view';\n\ninterface Wiring {\n currentViewRef: React.RefObject<View>;\n onViewChange: (v: View) => void;\n recenter?: () => View | void;\n hostSize?: () => { width: number; height: number } | null;\n animation?: ViewAnimationApi;\n decay?: DecayApi;\n layerIsPainted?: (layerId: string) => boolean;\n}\n\n/** The slice of `useDecayLoop` the view dep republishes. */\nexport interface DecayApi {\n start(config: DecayLoopConfig): void;\n cancel(): void;\n}\n\nexport function useViewDepSource(\n currentViewRef: React.RefObject<View>,\n onViewChange: (v: View) => void,\n recenter?: () => View | void,\n hostSize?: () => { width: number; height: number } | null,\n animation?: ViewAnimationApi,\n decay?: DecayApi,\n layerIsPainted?: (layerId: string) => boolean,\n): ViewApi {\n // Every method reads through this, so the latest onViewChange / recenter /\n // runner is captured without the API object itself changing identity.\n const wiring = useLatest<Wiring>({\n currentViewRef, onViewChange, recenter, hostSize, animation, decay, layerIsPainted,\n });\n\n // An unwired optional member must read falsy — `viewportZoomAction` branches\n // on `view.recenter`, and a forwarder is truthy — so the identity-stable API\n // is rebuilt whenever that presence set changes.\n const hasRecenter = !!recenter;\n const hasHostSize = !!hostSize;\n const hasAnimation = !!animation;\n const hasDecay = !!decay;\n const hasLayerIsPainted = !!layerIsPainted;\n return useMemo((): ViewApi => ({\n get: () => wiring.current.currentViewRef.current,\n // Not the canvas's only cancel feed (`onViewChange` is), but a `view` dep\n // wired to something other than a `<SceneCanvas>` has only this one.\n set: (v: View) => {\n wiring.current.animation?.stopIfExternal();\n wiring.current.onViewChange(v);\n },\n ...(hasRecenter ? { recenter: () => wiring.current.recenter!() } : {}),\n ...(hasHostSize ? { hostSize: () => wiring.current.hostSize!() } : {}),\n ...(hasAnimation\n ? {\n animate: (to: View, opts?: Parameters<ViewAnimationApi['animate']>[1]) =>\n wiring.current.animation!.animate(to, opts),\n stopAnimation: () => wiring.current.animation!.stop(),\n animationTarget: () => wiring.current.animation!.target(),\n }\n : {}),\n ...(hasDecay\n ? {\n decay: (config: DecayLoopConfig) => wiring.current.decay!.start(config),\n stopDecay: () => wiring.current.decay!.cancel(),\n }\n : {}),\n ...(hasLayerIsPainted\n ? { layerIsPainted: (layerId: string) => wiring.current.layerIsPainted!(layerId) }\n : {}),\n }), [wiring, hasRecenter, hasHostSize, hasAnimation, hasDecay, hasLayerIsPainted]);\n}\n"],"mappings":";;;AAsCA,SAAgBA,EACd,GACA,GACA,GACA,GACA,GACA,GACA,GACS;CAGT,IAAMC,IAASC,EAAkB;EAC/B;EAAgB;EAAc;EAAU;EAAU;EAAW;EAAO;CACtE,CAAC,GAKKC,IAAc,CAAC,CAACC,GAChBC,IAAc,CAAC,CAACC,GAChBC,IAAe,CAAC,CAACC,GACjBC,IAAW,CAAC,CAACC,GACbC,IAAoB,CAAC,CAACC;CAC5B,OAAOC,SAAwB;EAC7B,WAAWZ,EAAO,QAAQ,eAAe;EAGzC,MAAM,MAAY;GAEhB,AADAA,EAAO,QAAQ,WAAW,eAAe,GACzCA,EAAO,QAAQ,aAAaa,CAAC;EAC/B;EACA,GAAIX,IAAc,EAAE,gBAAgBF,EAAO,QAAQ,SAAU,EAAE,IAAI,CAAC;EACpE,GAAII,IAAc,EAAE,gBAAgBJ,EAAO,QAAQ,SAAU,EAAE,IAAI,CAAC;EACpE,GAAIM,IACA;GACE,UAAU,GAAU,MAClBN,EAAO,QAAQ,UAAW,QAAQc,GAAIC,CAAI;GAC5C,qBAAqBf,EAAO,QAAQ,UAAW,KAAK;GACpD,uBAAuBA,EAAO,QAAQ,UAAW,OAAO;EAC1D,IACA,CAAC;EACL,GAAIQ,IACA;GACE,QAAQ,MAA4BR,EAAO,QAAQ,MAAO,MAAMgB,CAAM;GACtE,iBAAiBhB,EAAO,QAAQ,MAAO,OAAO;EAChD,IACA,CAAC;EACL,GAAIU,IACA,EAAE,iBAAiB,MAAoBV,EAAO,QAAQ,eAAgBiB,CAAO,EAAE,IAC/E,CAAC;CACP,IAAI;EAACjB;EAAQE;EAAaE;EAAaE;EAAcE;EAAUE;CAAiB,CAAC;AACnF"}
1
+ {"version":3,"file":"view.js","names":["useViewDepSource","wiring","useLatest","hasRecenter","recenter","hasHostSize","hostSize","hasAnimation","animation","hasDecay","decay","hasLayerIsPainted","layerIsPainted","useMemo","v","to","opts","config","layerId"],"sources":["../../../src/canvas/deps/view.ts"],"sourcesContent":["/**\n * Builds a stable `ViewApi` that reads from `currentViewRef` and writes via\n * `onViewChange`. It does **not** call `useDepSource('view', ...)` itself:\n * `useStandardActions` publishes the `view` dep it is handed.\n */\nimport { useMemo } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport type React from 'react';\nimport type { ViewApi } from 'interactions/actions/depSchema';\nimport type { ViewAnimationApi } from 'core/viewport/useViewAnimation';\nimport type { DecayLoopConfig } from 'core/viewport/useDecayLoop';\nimport type { View } from 'core/viewport/view';\n\ninterface Wiring {\n currentViewRef: React.RefObject<View>;\n onViewChange: (v: View) => void;\n recenter?: () => View | void;\n hostSize?: () => { width: number; height: number } | null;\n animation?: ViewAnimationApi;\n decay?: DecayApi;\n layerIsPainted?: (layerId: string) => boolean;\n}\n\n/** The slice of `useDecayLoop` the view dep republishes. */\nexport interface DecayApi {\n start(config: DecayLoopConfig): void;\n cancel(): void;\n}\n\nexport function useViewDepSource(\n currentViewRef: React.RefObject<View>,\n onViewChange: (v: View) => void,\n recenter?: () => View | void,\n hostSize?: () => { width: number; height: number } | null,\n animation?: ViewAnimationApi,\n decay?: DecayApi,\n layerIsPainted?: (layerId: string) => boolean,\n): ViewApi {\n // Every method reads through this, so the latest onViewChange / recenter /\n // runner is captured without the API object itself changing identity.\n const wiring = useLatest<Wiring>({\n currentViewRef, onViewChange, recenter, hostSize, animation, decay, layerIsPainted,\n });\n\n // An unwired optional member must read falsy — `viewportZoomAction` branches\n // on `view.recenter`, and a forwarder is truthy — so the identity-stable API\n // is rebuilt whenever that presence set changes.\n const hasRecenter = !!recenter;\n const hasHostSize = !!hostSize;\n const hasAnimation = !!animation;\n const hasDecay = !!decay;\n const hasLayerIsPainted = !!layerIsPainted;\n return useMemo((): ViewApi => ({\n get: () => wiring.current.currentViewRef.current,\n // Not the canvas's only cancel feed (`onViewChange` is), but a `view` dep\n // wired to something other than a `<SceneCanvas>` has only this one.\n set: (v: View) => {\n wiring.current.animation?.stopIfExternal();\n wiring.current.onViewChange(v);\n },\n ...(hasRecenter ? { recenter: () => wiring.current.recenter!() } : {}),\n ...(hasHostSize ? { hostSize: () => wiring.current.hostSize!() } : {}),\n ...(hasAnimation\n ? {\n animate: (to: View, opts?: Parameters<ViewAnimationApi['animate']>[1]) =>\n wiring.current.animation!.animate(to, opts),\n stopAnimation: () => wiring.current.animation!.stop(),\n animationTarget: () => wiring.current.animation!.target(),\n }\n : {}),\n ...(hasDecay\n ? {\n decay: (config: DecayLoopConfig) => wiring.current.decay!.start(config),\n stopDecay: () => wiring.current.decay!.cancel(),\n }\n : {}),\n ...(hasLayerIsPainted\n ? { layerIsPainted: (layerId: string) => wiring.current.layerIsPainted!(layerId) }\n : {}),\n }), [wiring, hasRecenter, hasHostSize, hasAnimation, hasDecay, hasLayerIsPainted]);\n}\n"],"mappings":";;;AA6BA,SAAgBA,EACd,GACA,GACA,GACA,GACA,GACA,GACA,GACS;CAGT,IAAMC,IAASC,EAAkB;EAC/B;EAAgB;EAAc;EAAU;EAAU;EAAW;EAAO;CACtE,CAAC,GAKKC,IAAc,CAAC,CAACC,GAChBC,IAAc,CAAC,CAACC,GAChBC,IAAe,CAAC,CAACC,GACjBC,IAAW,CAAC,CAACC,GACbC,IAAoB,CAAC,CAACC;CAC5B,OAAOC,SAAwB;EAC7B,WAAWZ,EAAO,QAAQ,eAAe;EAGzC,MAAM,MAAY;GAEhB,AADAA,EAAO,QAAQ,WAAW,eAAe,GACzCA,EAAO,QAAQ,aAAaa,CAAC;EAC/B;EACA,GAAIX,IAAc,EAAE,gBAAgBF,EAAO,QAAQ,SAAU,EAAE,IAAI,CAAC;EACpE,GAAII,IAAc,EAAE,gBAAgBJ,EAAO,QAAQ,SAAU,EAAE,IAAI,CAAC;EACpE,GAAIM,IACA;GACE,UAAU,GAAU,MAClBN,EAAO,QAAQ,UAAW,QAAQc,GAAIC,CAAI;GAC5C,qBAAqBf,EAAO,QAAQ,UAAW,KAAK;GACpD,uBAAuBA,EAAO,QAAQ,UAAW,OAAO;EAC1D,IACA,CAAC;EACL,GAAIQ,IACA;GACE,QAAQ,MAA4BR,EAAO,QAAQ,MAAO,MAAMgB,CAAM;GACtE,iBAAiBhB,EAAO,QAAQ,MAAO,OAAO;EAChD,IACA,CAAC;EACL,GAAIU,IACA,EAAE,iBAAiB,MAAoBV,EAAO,QAAQ,eAAgBiB,CAAO,EAAE,IAC/E,CAAC;CACP,IAAI;EAACjB;EAAQE;EAAaE;EAAaE;EAAcE;EAAUE;CAAiB,CAAC;AACnF"}
@@ -1,41 +1,64 @@
1
- import { createNodeMemoScope as e } from "../core/scene/nodeMemo.js";
2
- import { composeWorldPose as t } from "../core/scene/composeFrame.js";
3
- import { resolveDerivedPath as n } from "../core/scene/derivedPath.js";
4
- import { definesFrame as r, derivedDepOf as i, effectivePose as a } from "../core/scene/effectivePose.js";
5
- import { asNodeId as o } from "../core/scene/types.js";
1
+ import { composeWorldPose as e, composesFrames as t } from "../core/scene/composeFrame.js";
2
+ import { createNodeMemoScope as n } from "../core/scene/nodeMemo.js";
3
+ import { resolveDerivedPath as r } from "../core/scene/derivedPath.js";
4
+ import { definesFrame as i, derivedDepOf as a, effectivePose as o } from "../core/scene/effectivePose.js";
5
+ import { isRectPose as s } from "../core/geometry/autoPoseDescriptor.js";
6
+ import { asNodeId as c } from "../core/scene/types.js";
7
+ import { boxToBox as l, transformPath as u } from "@weasel-js/geom";
6
8
  //#region src/canvas/derivedPath.ts
7
- var s = (e) => e !== void 0 && e.closure !== "identity";
8
- function c(e, n, i) {
9
- let c = n ?? ((t) => a(e, t));
10
- if (!s(i)) return c;
11
- let l = {
12
- getPose: (t) => {
13
- let n = e.get(o(t));
14
- return n ? c(n) : void 0;
9
+ function d(e, t) {
10
+ let n = o(e, t);
11
+ return n === t.pose ? t : {
12
+ ...t,
13
+ pose: n
14
+ };
15
+ }
16
+ function f(e, t) {
17
+ return (n) => t(d(e, n));
18
+ }
19
+ function p(e, t, n) {
20
+ return !s(t) || !s(n) || t.x === n.x && t.y === n.y && t.width === n.width && t.height === n.height ? e : u(e, l(t.x, t.y, t.width, t.height, n.x, n.y, n.width, n.height));
21
+ }
22
+ function m(e, t) {
23
+ return t === void 0 ? (t) => e.overrides.read(t.id)?.path : (n) => {
24
+ let r = e.overrides.read(n.id)?.path;
25
+ if (r === void 0) return;
26
+ let i = d(e, n);
27
+ return p(r, i.pose, t(i));
28
+ };
29
+ }
30
+ function h(n, r) {
31
+ let a = r ? f(n, r) : (e) => o(n, e);
32
+ if (!t(n.composition)) return a;
33
+ let s = {
34
+ getPose: (e) => {
35
+ let t = n.get(c(e));
36
+ return t ? a(t) : void 0;
15
37
  },
16
- getParent: (t) => e.get(o(t))?.parent ?? null,
17
- definesFrame: (t) => {
18
- let n = e.get(o(t));
19
- return n === void 0 || r(n);
38
+ getParent: (e) => n.get(c(e))?.parent ?? null,
39
+ definesFrame: (e) => {
40
+ let t = n.get(c(e));
41
+ return t === void 0 || i(t);
20
42
  }
21
43
  };
22
- return (e) => t(l, e.id, i.compose);
44
+ return (t) => e(s, t.id, n.composition.compose);
23
45
  }
24
- function l(e, t, n) {
25
- let r = p(t, n);
26
- if (r === void 0) return (t) => i(e, t);
27
- let a = {
28
- at: c(e, t, n),
46
+ function g(e, n) {
47
+ let r = x(n, t(e.composition));
48
+ if (r === void 0) return (t) => a(e, t);
49
+ let i = {
50
+ at: h(e, n),
29
51
  slot: r,
52
+ shown: m(e, n),
30
53
  childrenOf: (t) => e.childrenOf(t),
31
54
  lookup: (t) => {
32
55
  let n = e.get(t);
33
- return n === void 0 ? void 0 : new u(n, a);
56
+ return n === void 0 ? void 0 : new _(n, i);
34
57
  }
35
58
  };
36
- return a.lookup;
59
+ return i.lookup;
37
60
  }
38
- var u = class {
61
+ var _ = class {
39
62
  ctx;
40
63
  node;
41
64
  pose;
@@ -43,28 +66,31 @@ var u = class {
43
66
  this.ctx = t, this.node = e, this.pose = t.at(e);
44
67
  }
45
68
  get path() {
46
- return n(this.node, this.ctx.lookup, this.ctx.childrenOf, this.ctx.slot);
69
+ return this.ctx.shown(this.node) ?? r(this.node, this.ctx.lookup, this.ctx.childrenOf, this.ctx.slot);
47
70
  }
48
71
  };
49
- function d(e, t, r) {
50
- let i = l(e, t, r), a = p(t, r), o = (t) => e.childrenOf(t);
51
- return (e) => n(e, i, o, a);
72
+ function v(e, t) {
73
+ return t.dependsOn !== void 0 || e.overrides.read(t.id)?.path !== void 0;
74
+ }
75
+ function y(e, n) {
76
+ let i = g(e, n), a = x(n, t(e.composition)), o = (t) => e.childrenOf(t), s = (e) => r(e, i, o, a), c = m(e, n);
77
+ return (e) => c(e) ?? s(e);
52
78
  }
53
- var f = /* @__PURE__ */ new WeakMap();
54
- function p(t, n) {
55
- let r = s(n) ? "world" : "local";
56
- if (t === void 0) return r === "world" ? "kit:derivedPath:world" : void 0;
57
- let i = f.get(t);
58
- return i === void 0 && (i = {}, f.set(t, i)), i[r] ??= e();
79
+ var b = /* @__PURE__ */ new WeakMap();
80
+ function x(e, t) {
81
+ let r = t ? "world" : "local";
82
+ if (e === void 0) return r === "world" ? "kit:derivedPath:world" : void 0;
83
+ let i = b.get(e);
84
+ return i === void 0 && (i = {}, b.set(e, i)), i[r] ??= n();
59
85
  }
60
- function m(e, t, n, r) {
61
- let i = d(e, n, r);
62
- return (e, n, r, a) => e.dependsOn === void 0 ? t(e, n, r, a) : t(e, n, r, {
63
- ...a,
64
- derivedPath: i(e)
65
- });
86
+ function S(e, t, n) {
87
+ let r = y(e, n);
88
+ return (n, i, a, o) => v(e, n) ? t(n, i, a, {
89
+ ...o,
90
+ derivedPath: r(n)
91
+ }) : t(n, i, a, o);
66
92
  }
67
93
  //#endregion
68
- export { n as resolveDerivedPath, l as sceneDepLookup, d as sceneDerivedPathOf, c as scenePaintedPoseOf, m as withDerivedPaths };
94
+ export { r as resolveDerivedPath, g as sceneDepLookup, y as sceneDerivedPathOf, h as scenePaintedPoseOf, f as sceneShownToPose, v as showsComputedPath, S as withDerivedPaths };
69
95
 
70
96
  //# sourceMappingURL=derivedPath.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"derivedPath.js","names":["composes","composition","scenePaintedPoseOf","local","toPose","effectivePose","scene","node","poseComposition","chain","asNodeId","id","definesFrame","composeWorldPose","sceneDepLookup","slot","memoSlotFor","derivedDepOf","ctx","SlotDep","posed","resolveDerivedPath","sceneDerivedPathOf","depOf","childrenOf","toPoseScopes","frame","scopes","createNodeMemoScope","withDerivedPaths","derivedPathOf","drawOne","pose","view"],"sources":["../../src/canvas/derivedPath.ts"],"sourcesContent":["/**\n * The render walk's half of derived paths: resolving one against a scene, and\n * handing it to the painter.\n *\n * The resolver itself lives in `core/scene/derivedPath.ts`, beside\n * `derivedPose` — a *pose* can derive from a dependency's path, so\n * `effectivePose` has to be able to reach it.\n */\nimport type { DerivedDep, Node, NodeId, Scene } from 'core/scene/types';\nimport type { Path } from '@weasel-js/geom';\nimport { asNodeId } from 'core/scene/types';\nimport { definesFrame, derivedDepOf, effectivePose } from 'core/scene/effectivePose';\nimport { composeWorldPose, type PoseAdapter, type PoseComposition } from 'core/scene/composeFrame';\nimport { resolveDerivedPath } from 'core/scene/derivedPath';\nimport { createNodeMemoScope, type NodeMemoScope } from 'core/scene/nodeMemo';\nimport type { SceneViewDrawOne } from './NodeShape';\n\nexport { resolveDerivedPath } from 'core/scene/derivedPath';\n\nconst composes = <TPose>(composition: PoseComposition<TPose> | undefined): composition is PoseComposition<TPose> =>\n composition !== undefined && composition.closure !== 'identity';\n\n/**\n * `(node) => the pose it is painted at`: the slot's `toPose` if it has one,\n * else the scene's effective pose, folded through the parent chain when\n * `poseComposition` makes a stored pose local to its container.\n */\nexport function scenePaintedPoseOf<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n toPose?: (node: Node<TData, TLayer, TPose>) => TPose,\n poseComposition?: PoseComposition<TPose>,\n): (node: Node<TData, TLayer, TPose>) => TPose {\n const local = toPose ?? ((node: Node<TData, TLayer, TPose>) => effectivePose(scene, node));\n if (!composes(poseComposition)) return local;\n const chain: PoseAdapter<TPose> = {\n getPose: (id) => {\n const n = scene.get(asNodeId(id));\n return n ? local(n) : (undefined as unknown as TPose);\n },\n getParent: (id) => scene.get(asNodeId(id))?.parent ?? null,\n definesFrame: (id) => {\n const n = scene.get(asNodeId(id));\n return n === undefined || definesFrame(n);\n },\n };\n return (node) => composeWorldPose(chain, node.id, poseComposition.compose);\n}\n\n/**\n * `(id) => that node, the pose it is painted at, and the path it derives` —\n * resolved against the scene, so a dependency that is itself derived resolves\n * before it is read.\n *\n * A derived edge is drawn from these coordinates and must meet the nodes it\n * connects, so this reads the pose each one is painted at: see\n * {@link scenePaintedPoseOf}.\n */\nexport function sceneDepLookup<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n toPose?: (node: Node<TData, TLayer, TPose>) => TPose,\n poseComposition?: PoseComposition<TPose>,\n): (id: NodeId) => DerivedDep<TPose> | undefined {\n const slot = memoSlotFor(toPose, poseComposition);\n if (slot === undefined) return (id) => derivedDepOf(scene, id);\n const ctx: SlotLookup<TPose> = {\n at: scenePaintedPoseOf(scene, toPose, poseComposition) as (node: unknown) => TPose,\n slot,\n childrenOf: (id: NodeId) => scene.childrenOf(id),\n lookup: (id: NodeId) => {\n const node = scene.get(id);\n return node === undefined ? undefined : new SlotDep(node, ctx);\n },\n };\n return ctx.lookup;\n}\n\ninterface SlotLookup<TPose> {\n at: (node: unknown) => TPose;\n slot: string | NodeMemoScope;\n childrenOf: (id: NodeId) => readonly NodeId[];\n lookup: (id: NodeId) => DerivedDep<TPose> | undefined;\n}\n\n/** A class, not an object literal with a `get path()` — see `SceneDep` in\n * `core/scene/effectivePose.ts` for why. */\nclass SlotDep<TPose> implements DerivedDep<TPose> {\n readonly node: Node<unknown, string, TPose>;\n readonly pose: TPose;\n\n constructor(posed: unknown, private readonly ctx: SlotLookup<TPose>) {\n this.node = posed as Node<unknown, string, TPose>;\n this.pose = ctx.at(posed);\n }\n\n get path(): Path | null {\n return resolveDerivedPath(\n this.node as never, this.ctx.lookup, this.ctx.childrenOf, this.ctx.slot,\n );\n }\n}\n\n/** `(node) => the path it derives`, read through {@link sceneDepLookup}. */\nexport function sceneDerivedPathOf<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n toPose?: (node: Node<TData, TLayer, TPose>) => TPose,\n poseComposition?: PoseComposition<TPose>,\n): (node: Node<TData, TLayer, TPose>) => Path | null {\n const depOf = sceneDepLookup(scene, toPose, poseComposition);\n const slot = memoSlotFor(toPose, poseComposition);\n const childrenOf = (id: NodeId): readonly NodeId[] => scene.childrenOf(id);\n return (node) => resolveDerivedPath(node, depOf, childrenOf, slot);\n}\n\nconst toPoseScopes = new WeakMap<object, { local?: NodeMemoScope; world?: NodeMemoScope }>();\n\n/** Where one way of reading poses memoizes its paths, or `undefined` for the\n * scene's own slot: two readers painting one scene at different poses must\n * not serve each other's paths. Every reader composing stored poses shares a\n * slot; a `toPose` gets a scope that is collected with the function. */\nfunction memoSlotFor<TPose>(\n toPose: object | undefined,\n poseComposition: PoseComposition<TPose> | undefined,\n): string | NodeMemoScope | undefined {\n const frame = composes(poseComposition) ? 'world' : 'local';\n if (toPose === undefined) return frame === 'world' ? 'kit:derivedPath:world' : undefined;\n let scopes = toPoseScopes.get(toPose);\n if (scopes === undefined) {\n scopes = {};\n toPoseScopes.set(toPose, scopes);\n }\n return (scopes[frame] ??= createNodeMemoScope());\n}\n\n/**\n * Wrap a `drawOne` so a node that derives its geometry arrives at the painter\n * with the resolved path. The painter has no scene handle and so cannot read\n * the dependencies' poses itself; both scene walks wrap here instead.\n *\n * A node that derives nothing passes the caller's `ctx` through untouched —\n * this runs per node per frame, and an added `{ derivedPath: null }` would be\n * an allocation per node for a field no painter reads.\n */\nexport function withDerivedPaths<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n drawOne: SceneViewDrawOne<TData, TLayer, TPose>,\n toPose?: (node: Node<TData, TLayer, TPose>) => TPose,\n poseComposition?: PoseComposition<TPose>,\n): SceneViewDrawOne<TData, TLayer, TPose> {\n const derivedPathOf = sceneDerivedPathOf(scene, toPose, poseComposition);\n return (node, pose, view, ctx) => {\n if (node.dependsOn === undefined) return drawOne(node, pose, view, ctx);\n return drawOne(node, pose, view, { ...ctx, derivedPath: derivedPathOf(node) });\n };\n}\n"],"mappings":";;;;;;AAmBA,IAAMA,KAAmB,MACvBC,MAAgB,KAAA,KAAaA,EAAY,YAAY;AAOvD,SAAgBC,EACd,GACA,GACA,GAC6C;CAC7C,IAAMC,IAAQC,OAAY,MAAqCC,EAAcC,GAAOC,CAAI;CACxF,IAAI,CAACP,EAASQ,CAAe,GAAG,OAAOL;CACvC,IAAMM,IAA4B;EAChC,UAAU,MAAO;GACf,IAAM,IAAIH,EAAM,IAAII,EAASC,CAAE,CAAC;GAChC,OAAO,IAAIR,EAAM,CAAC,IAAK,KAAA;EACzB;EACA,YAAY,MAAOG,EAAM,IAAII,EAASC,CAAE,CAAC,CAAC,EAAE,UAAU;EACtD,eAAe,MAAO;GACpB,IAAM,IAAIL,EAAM,IAAII,EAASC,CAAE,CAAC;GAChC,OAAO,MAAM,KAAA,KAAaC,EAAa,CAAC;EAC1C;CACF;CACA,QAAQ,MAASC,EAAiBJ,GAAOF,EAAK,IAAIC,EAAgB,OAAO;AAC3E;AAWA,SAAgBM,EACd,GACA,GACA,GAC+C;CAC/C,IAAMC,IAAOC,EAAYZ,GAAQI,CAAe;CAChD,IAAIO,MAAS,KAAA,GAAW,QAAQ,MAAOE,EAAaX,GAAOK,CAAE;CAC7D,IAAMO,IAAyB;EAC7B,IAAIhB,EAAmBI,GAAOF,GAAQI,CAAe;EACrD;EACA,aAAa,MAAeF,EAAM,WAAWK,CAAE;EAC/C,SAAS,MAAe;GACtB,IAAMJ,IAAOD,EAAM,IAAIK,CAAE;GACzB,OAAOJ,MAAS,KAAA,IAAY,KAAA,IAAY,IAAIY,EAAQZ,GAAMW,CAAG;EAC/D;CACF;CACA,OAAOA,EAAI;AACb;AAWA,IAAMC,IAAN,MAAkD;CAIH;CAH7C;CACA;CAEA,YAAY,GAAgB,GAAyC;EAEnE,AAF2C,KAAA,MAAAD,GAC3C,KAAK,OAAOE,GACZ,KAAK,OAAOF,EAAI,GAAGE,CAAK;CAC1B;CAEA,IAAI,OAAoB;EACtB,OAAOC,EACL,KAAK,MAAe,KAAK,IAAI,QAAQ,KAAK,IAAI,YAAY,KAAK,IAAI,IACrE;CACF;AACF;AAGA,SAAgBC,EACd,GACA,GACA,GACmD;CACnD,IAAMC,IAAQT,EAAeR,GAAOF,GAAQI,CAAe,GACrDO,IAAOC,EAAYZ,GAAQI,CAAe,GAC1CgB,KAAc,MAAkClB,EAAM,WAAWK,CAAE;CACzE,QAAQ,MAASU,EAAmBd,GAAMgB,GAAOC,GAAYT,CAAI;AACnE;AAEA,IAAMU,oBAAe,IAAI,QAAkE;AAM3F,SAAST,EACP,GACA,GACoC;CACpC,IAAMU,IAAQ1B,EAASQ,CAAe,IAAI,UAAU;CACpD,IAAIJ,MAAW,KAAA,GAAW,OAAOsB,MAAU,UAAU,0BAA0B,KAAA;CAC/E,IAAIC,IAASF,EAAa,IAAIrB,CAAM;CAKpC,OAJIuB,MAAW,KAAA,MACb,IAAS,CAAC,GACVF,EAAa,IAAIrB,GAAQuB,CAAM,IAEzB,EAAOD,OAAWE,EAAoB;AAChD;AAWA,SAAgBC,EACd,GACA,GACA,GACA,GACwC;CACxC,IAAMC,IAAgBR,EAAmBhB,GAAOF,GAAQI,CAAe;CACvE,QAAQ,GAAM,GAAM,GAAM,MACpBD,EAAK,cAAc,KAAA,IAAkBwB,EAAQxB,GAAMyB,GAAMC,GAAMf,CAAG,IAC/Da,EAAQxB,GAAMyB,GAAMC,GAAM;EAAE,GAAGf;EAAK,aAAaY,EAAcvB,CAAI;CAAE,CAAC;AAEjF"}
1
+ {"version":3,"file":"derivedPath.js","names":["shownNode","pose","effectivePose","scene","node","sceneShownToPose","toPose","carryPath","isRectPose","from","to","path","transformPath","boxToBox","sceneOverridePathOf","shown","scenePaintedPoseOf","local","composesFrames","chain","n","asNodeId","id","definesFrame","composeWorldPose","sceneDepLookup","slot","memoSlotFor","derivedDepOf","ctx","SlotDep","posed","resolveDerivedPath","showsComputedPath","sceneDerivedPathOf","depOf","childrenOf","derived","overridePathOf","toPoseScopes","frame","composes","scopes","createNodeMemoScope","withDerivedPaths","derivedPathOf","drawOne","view"],"sources":["../../src/canvas/derivedPath.ts"],"sourcesContent":["/**\n * The render walk's half of derived paths: resolving one against a scene, and\n * handing it to the painter.\n *\n * The resolver itself lives in `core/scene/derivedPath.ts`, beside\n * `derivedPose` — a *pose* can derive from a dependency's path, so\n * `effectivePose` has to be able to reach it.\n */\nimport type { DerivedDep, Node, NodeId, Scene } from 'core/scene/types';\nimport { boxToBox, transformPath, type Path } from '@weasel-js/geom';\nimport { asNodeId } from 'core/scene/types';\nimport { isRectPose } from 'core/geometry/autoPoseDescriptor';\nimport { definesFrame, derivedDepOf, effectivePose } from 'core/scene/effectivePose';\nimport { composesFrames, composeWorldPose, type PoseAdapter } from 'core/scene/composeFrame';\nimport { resolveDerivedPath } from 'core/scene/derivedPath';\nimport { createNodeMemoScope, type NodeMemoScope } from 'core/scene/nodeMemo';\nimport type { SceneViewDrawOne } from './NodeShape';\n\nexport { resolveDerivedPath } from 'core/scene/derivedPath';\n\ntype ToPose<TData, TLayer extends string, TPose> = (node: Node<TData, TLayer, TPose>) => TPose;\n\n/** `node` as the scene shows it, its `pose` an override's or a derived one: the stored node\n * itself where the two agree. */\nfunction shownNode<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n node: Node<TData, TLayer, TPose>,\n): Node<TData, TLayer, TPose> {\n const pose = effectivePose(scene, node);\n return pose === node.pose ? node : { ...node, pose };\n}\n\n/** A slot's `toPose`, handed each node as the scene shows it, so a view drawn through one\n * shows a drag in flight and a rig's motion as every other view does. */\nexport function sceneShownToPose<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n toPose: ToPose<TData, TLayer, TPose>,\n): ToPose<TData, TLayer, TPose> {\n return (node) => toPose(shownNode(scene, node));\n}\n\n/** `path`, drawn for a node boxed at `from`, as it is drawn for that node boxed at `to`. A\n * pose that is not a box leaves the path where it is. */\nfunction carryPath(path: Path, from: unknown, to: unknown): Path {\n if (!isRectPose(from) || !isRectPose(to)) return path;\n if (from.x === to.x && from.y === to.y && from.width === to.width && from.height === to.height) return path;\n return transformPath(path, boxToBox(from.x, from.y, from.width, from.height, to.x, to.y, to.width, to.height));\n}\n\n/**\n * `(node) => the path its pose override shows it by`, in the frame the reader paints in: as\n * the override has it, or under a `toPose` carried from the box the scene shows the node at\n * to the box `toPose` answers.\n */\nfunction sceneOverridePathOf<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n toPose?: ToPose<TData, TLayer, TPose>,\n): (node: Node<TData, TLayer, TPose>) => Path | undefined {\n if (toPose === undefined) return (node) => scene.overrides.read(node.id)?.path;\n return (node) => {\n const path = scene.overrides.read(node.id)?.path;\n if (path === undefined) return undefined;\n const shown = shownNode(scene, node);\n return carryPath(path, shown.pose, toPose(shown));\n };\n}\n\n/**\n * `(node) => the pose it is painted at`: the slot's `toPose` of the node as the scene shows\n * it if it has one, else the scene's effective pose, folded through the parent chain when\n * the scene's composition makes a stored pose local to its container.\n */\nexport function scenePaintedPoseOf<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n toPose?: (node: Node<TData, TLayer, TPose>) => TPose,\n): (node: Node<TData, TLayer, TPose>) => TPose {\n const local = toPose\n ? sceneShownToPose(scene, toPose)\n : (node: Node<TData, TLayer, TPose>) => effectivePose(scene, node);\n if (!composesFrames(scene.composition)) return local;\n const chain: PoseAdapter<TPose> = {\n getPose: (id) => {\n const n = scene.get(asNodeId(id));\n return n ? local(n) : (undefined as unknown as TPose);\n },\n getParent: (id) => scene.get(asNodeId(id))?.parent ?? null,\n definesFrame: (id) => {\n const n = scene.get(asNodeId(id));\n return n === undefined || definesFrame(n);\n },\n };\n return (node) => composeWorldPose(chain, node.id, scene.composition.compose);\n}\n\n/**\n * `(id) => that node, the pose it is painted at, and the path it derives` —\n * resolved against the scene, so a dependency that is itself derived resolves\n * before it is read.\n *\n * A derived edge is drawn from these coordinates and must meet the nodes it\n * connects, so this reads the pose each one is painted at: see\n * {@link scenePaintedPoseOf}.\n */\nexport function sceneDepLookup<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n toPose?: (node: Node<TData, TLayer, TPose>) => TPose,\n): (id: NodeId) => DerivedDep<TPose> | undefined {\n const slot = memoSlotFor(toPose, composesFrames(scene.composition));\n if (slot === undefined) return (id) => derivedDepOf(scene, id);\n const ctx: SlotLookup<TPose> = {\n at: scenePaintedPoseOf(scene, toPose) as (node: unknown) => TPose,\n slot,\n shown: sceneOverridePathOf(scene, toPose) as (node: unknown) => Path | undefined,\n childrenOf: (id: NodeId) => scene.childrenOf(id),\n lookup: (id: NodeId) => {\n const node = scene.get(id);\n return node === undefined ? undefined : new SlotDep(node, ctx);\n },\n };\n return ctx.lookup;\n}\n\ninterface SlotLookup<TPose> {\n at: (node: unknown) => TPose;\n slot: string | NodeMemoScope;\n /** The path a pose override shows a node by, where it has one. */\n shown: (node: unknown) => Path | undefined;\n childrenOf: (id: NodeId) => readonly NodeId[];\n lookup: (id: NodeId) => DerivedDep<TPose> | undefined;\n}\n\n/** A class, not an object literal with a `get path()` — see `SceneDep` in\n * `core/scene/effectivePose.ts` for why. */\nclass SlotDep<TPose> implements DerivedDep<TPose> {\n readonly node: Node<unknown, string, TPose>;\n readonly pose: TPose;\n\n constructor(posed: unknown, private readonly ctx: SlotLookup<TPose>) {\n this.node = posed as Node<unknown, string, TPose>;\n this.pose = ctx.at(posed);\n }\n\n get path(): Path | null {\n return this.ctx.shown(this.node) ?? resolveDerivedPath(\n this.node as never, this.ctx.lookup, this.ctx.childrenOf, this.ctx.slot,\n );\n }\n}\n\n/** Whether something outside `node`'s data says what path it shows: it derives one, or a\n * pose override carries one. The gate both scene walks check before resolving a path. */\nexport function showsComputedPath<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n node: { id: NodeId; dependsOn?: readonly NodeId[] | 'children' },\n): boolean {\n return node.dependsOn !== undefined || scene.overrides.read(node.id)?.path !== undefined;\n}\n\n/**\n * `(node) => the path it shows in place of its data's`: a pose override's `path`, else the\n * one it derives, read through {@link sceneDepLookup}. A reader painting through a `toPose`\n * is answered the override's path carried into the box its `toPose` answers.\n */\nexport function sceneDerivedPathOf<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n toPose?: (node: Node<TData, TLayer, TPose>) => TPose,\n): (node: Node<TData, TLayer, TPose>) => Path | null {\n const depOf = sceneDepLookup(scene, toPose);\n const slot = memoSlotFor(toPose, composesFrames(scene.composition));\n const childrenOf = (id: NodeId): readonly NodeId[] => scene.childrenOf(id);\n const derived = (node: Node<TData, TLayer, TPose>): Path | null =>\n resolveDerivedPath(node, depOf, childrenOf, slot);\n const overridePathOf = sceneOverridePathOf(scene, toPose);\n return (node) => overridePathOf(node) ?? derived(node);\n}\n\nconst toPoseScopes = new WeakMap<object, { local?: NodeMemoScope; world?: NodeMemoScope }>();\n\n/** Where one way of reading poses memoizes its paths, or `undefined` for the\n * scene's own slot: two readers painting one scene at different poses must\n * not serve each other's paths. Every reader composing stored poses shares a\n * slot; a `toPose` gets a scope that is collected with the function. */\nfunction memoSlotFor(\n toPose: object | undefined,\n composes: boolean,\n): string | NodeMemoScope | undefined {\n const frame = composes ? 'world' : 'local';\n if (toPose === undefined) return frame === 'world' ? 'kit:derivedPath:world' : undefined;\n let scopes = toPoseScopes.get(toPose);\n if (scopes === undefined) {\n scopes = {};\n toPoseScopes.set(toPose, scopes);\n }\n return (scopes[frame] ??= createNodeMemoScope());\n}\n\n/**\n * Wrap a `drawOne` so a node that derives its geometry, or whose pose override\n * carries a path, arrives at the painter with the resolved path. The painter has no scene handle and so cannot read\n * the dependencies' poses itself; both scene walks wrap here instead.\n *\n * A node that derives nothing passes the caller's `ctx` through untouched —\n * this runs per node per frame, and an added `{ derivedPath: null }` would be\n * an allocation per node for a field no painter reads.\n */\nexport function withDerivedPaths<TData, TLayer extends string, TPose>(\n scene: Scene<TData, TLayer, TPose>,\n drawOne: SceneViewDrawOne<TData, TLayer, TPose>,\n toPose?: (node: Node<TData, TLayer, TPose>) => TPose,\n): SceneViewDrawOne<TData, TLayer, TPose> {\n const derivedPathOf = sceneDerivedPathOf(scene, toPose);\n return (node, pose, view, ctx) => {\n if (!showsComputedPath(scene, node)) return drawOne(node, pose, view, ctx);\n return drawOne(node, pose, view, { ...ctx, derivedPath: derivedPathOf(node) });\n };\n}\n"],"mappings":"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"}
@@ -10,13 +10,17 @@ function n(t) {
10
10
  return e(t, "getIsVisible")?.() ?? null;
11
11
  }
12
12
  function r(t) {
13
- return e(t, "getPreviewSources")?.() ?? a;
13
+ return e(t, "getPreviewSources")?.() ?? o;
14
14
  }
15
15
  function i(t) {
16
- return e(t, "getGestureOverlays")?.() ?? o;
16
+ return e(t, "getGestureOverlays")?.() ?? s;
17
17
  }
18
- var a = [], o = [];
18
+ function a(e) {
19
+ let t = e?.getDebug;
20
+ return typeof t == "function" ? t() : null;
21
+ }
22
+ var o = [], s = [];
19
23
  //#endregion
20
- export { t as chromeStateFrom, i as gestureOverlaysFrom, n as isVisibleFrom, r as previewSourcesFrom };
24
+ export { t as chromeStateFrom, a as debugSinkFrom, i as gestureOverlaysFrom, n as isVisibleFrom, r as previewSourcesFrom };
21
25
 
22
26
  //# sourceMappingURL=drawEnvelope.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"drawEnvelope.js","names":["thunk","maybe","data","key","chromeStateFrom","isVisibleFrom","previewSourcesFrom","EMPTY_SOURCES","gestureOverlaysFrom","EMPTY_OVERLAYS"],"sources":["../../src/canvas/drawEnvelope.ts"],"sourcesContent":["/**\n * Reading a layer's draw envelope.\n *\n * Every `RenderLayer.draw` receives the drawing view's {@link CanvasHelpers} as\n * its `data` argument, and `<CanvasView>` overlays its own half before handing\n * the stack to a second camera. A layer that answers from a construction\n * closure instead therefore answers for view zero in every view — so these\n * lookups exist to make the envelope the easy source.\n *\n * A layer drawn by a bare consumer may get plain data instead, which is why\n * each reader has an \"unwired\" answer rather than throwing.\n */\nimport type { ChromeState } from 'core/selection/chromeState';\nimport type { OngoingOverlay } from '@weasel-js/routing';\nimport type { GesturePreviewSource } from './gestureBounds';\nimport type { CanvasViewHelpers } from './useViewHelpers';\n\ntype PartialEnvelope = Partial<CanvasViewHelpers<unknown>>;\n\nfunction thunk<K extends keyof CanvasViewHelpers<unknown>>(\n data: unknown,\n key: K,\n): CanvasViewHelpers<unknown>[K] | undefined {\n const maybe = data as PartialEnvelope | null | undefined;\n return typeof maybe?.[key] === 'function' ? maybe[key] : undefined;\n}\n\n/** This view's chrome state, or `null` when the caller passed plain data. */\nexport function chromeStateFrom(data: unknown): ChromeState | null {\n return thunk(data, 'getChromeState')?.() ?? null;\n}\n\n/** This view's chrome-caps predicate, or `null` when the caller passed plain\n * data — the layer then paints unconditionally. */\nexport function isVisibleFrom(data: unknown): ((id: string) => boolean) | null {\n return thunk(data, 'getIsVisible')?.() ?? null;\n}\n\n/** This view's in-flight preview surfaces, in resolution order. Empty when\n * nothing is in flight and when the caller passed plain data. */\nexport function previewSourcesFrom(data: unknown): readonly GesturePreviewSource[] {\n return thunk(data, 'getPreviewSources')?.() ?? EMPTY_SOURCES;\n}\n\n/** The overlay shapes this view's in-flight handles publish. */\nexport function gestureOverlaysFrom(data: unknown): readonly OngoingOverlay[] {\n return thunk(data, 'getGestureOverlays')?.() ?? EMPTY_OVERLAYS;\n}\n\n/** First non-null `previewPose(id)` across `sources`, or `null`. */\nexport function previewPoseIn(\n sources: readonly GesturePreviewSource[],\n id: string,\n): unknown {\n for (const s of sources) {\n const p = s.previewPose?.(id);\n if (p != null) return p;\n }\n return null;\n}\n\n/** First non-null `previewData(id)` across `sources`, or `null`. */\nexport function previewDataIn(\n sources: readonly GesturePreviewSource[],\n id: string,\n): unknown {\n for (const s of sources) {\n const d = s.previewData?.(id);\n if (d != null) return d;\n }\n return null;\n}\n\nconst EMPTY_SOURCES: readonly GesturePreviewSource[] = [];\nconst EMPTY_OVERLAYS: readonly OngoingOverlay[] = [];\n"],"mappings":";AAmBA,SAASA,EACP,GACA,GAC2C;CAC3C,IAAMC,IAAQC;CACd,OAAO,OAAOD,IAAQE,MAAS,aAAaF,EAAME,KAAO,KAAA;AAC3D;AAGA,SAAgBC,EAAgB,GAAmC;CACjE,OAAOJ,EAAME,GAAM,gBAAgB,CAAC,GAAG,KAAK;AAC9C;AAIA,SAAgBG,EAAc,GAAiD;CAC7E,OAAOL,EAAME,GAAM,cAAc,CAAC,GAAG,KAAK;AAC5C;AAIA,SAAgBI,EAAmB,GAAgD;CACjF,OAAON,EAAME,GAAM,mBAAmB,CAAC,GAAG,KAAKK;AACjD;AAGA,SAAgBC,EAAoB,GAA0C;CAC5E,OAAOR,EAAME,GAAM,oBAAoB,CAAC,GAAG,KAAKO;AAClD;AA0BA,IAAMF,IAAiD,CAAC,GAClDE,IAA4C,CAAC"}
1
+ {"version":3,"file":"drawEnvelope.js","names":["thunk","maybe","data","key","chromeStateFrom","isVisibleFrom","previewSourcesFrom","EMPTY_SOURCES","gestureOverlaysFrom","EMPTY_OVERLAYS","debugSinkFrom","getDebug"],"sources":["../../src/canvas/drawEnvelope.ts"],"sourcesContent":["/**\n * Reading a layer's draw envelope.\n *\n * Every `RenderLayer.draw` receives the drawing view's `CanvasHelpers` as its\n * `data` argument. A layer that answers from a construction closure instead\n * answers for view zero in every view. A layer drawn by a bare consumer may\n * get plain data, so each reader has an \"unwired\" answer rather than throwing.\n */\nimport type { ChromeState } from 'core/selection/chromeState';\nimport type { OngoingOverlay } from '@weasel-js/routing';\nimport type { GesturePreviewSource } from './gestureBounds';\nimport type { DebugSink } from '../debug/types';\nimport type { CanvasSurfaceHelpers, CanvasViewHelpers } from './useViewHelpers';\n\ntype PartialEnvelope = Partial<CanvasViewHelpers<unknown>>;\n\nfunction thunk<K extends keyof CanvasViewHelpers<unknown>>(\n data: unknown,\n key: K,\n): CanvasViewHelpers<unknown>[K] | undefined {\n const maybe = data as PartialEnvelope | null | undefined;\n return typeof maybe?.[key] === 'function' ? maybe[key] : undefined;\n}\n\n/** This view's chrome state, or `null` when the caller passed plain data. */\nexport function chromeStateFrom(data: unknown): ChromeState | null {\n return thunk(data, 'getChromeState')?.() ?? null;\n}\n\n/** This view's chrome-caps predicate, or `null` when the caller passed plain\n * data — the layer then paints unconditionally. */\nexport function isVisibleFrom(data: unknown): ((id: string) => boolean) | null {\n return thunk(data, 'getIsVisible')?.() ?? null;\n}\n\n/** This view's in-flight preview surfaces, in resolution order. Empty when\n * nothing is in flight and when the caller passed plain data. */\nexport function previewSourcesFrom(data: unknown): readonly GesturePreviewSource[] {\n return thunk(data, 'getPreviewSources')?.() ?? EMPTY_SOURCES;\n}\n\n/** The overlay shapes this view's in-flight handles publish. */\nexport function gestureOverlaysFrom(data: unknown): readonly OngoingOverlay[] {\n return thunk(data, 'getGestureOverlays')?.() ?? EMPTY_OVERLAYS;\n}\n\n/** The surface's debug sink, or `null` when debugging is off and when the\n * caller passed plain data. */\nexport function debugSinkFrom(data: unknown): DebugSink | null {\n const getDebug = (data as Partial<CanvasSurfaceHelpers> | null | undefined)?.getDebug;\n return typeof getDebug === 'function' ? getDebug() : null;\n}\n\n/** First non-null `previewPose(id)` across `sources`, or `null`. */\nexport function previewPoseIn(\n sources: readonly GesturePreviewSource[],\n id: string,\n): unknown {\n for (const s of sources) {\n const p = s.previewPose?.(id);\n if (p != null) return p;\n }\n return null;\n}\n\n/** First non-null `previewData(id)` across `sources`, or `null`. */\nexport function previewDataIn(\n sources: readonly GesturePreviewSource[],\n id: string,\n): unknown {\n for (const s of sources) {\n const d = s.previewData?.(id);\n if (d != null) return d;\n }\n return null;\n}\n\nconst EMPTY_SOURCES: readonly GesturePreviewSource[] = [];\nconst EMPTY_OVERLAYS: readonly OngoingOverlay[] = [];\n"],"mappings":";AAgBA,SAASA,EACP,GACA,GAC2C;CAC3C,IAAMC,IAAQC;CACd,OAAO,OAAOD,IAAQE,MAAS,aAAaF,EAAME,KAAO,KAAA;AAC3D;AAGA,SAAgBC,EAAgB,GAAmC;CACjE,OAAOJ,EAAME,GAAM,gBAAgB,CAAC,GAAG,KAAK;AAC9C;AAIA,SAAgBG,EAAc,GAAiD;CAC7E,OAAOL,EAAME,GAAM,cAAc,CAAC,GAAG,KAAK;AAC5C;AAIA,SAAgBI,EAAmB,GAAgD;CACjF,OAAON,EAAME,GAAM,mBAAmB,CAAC,GAAG,KAAKK;AACjD;AAGA,SAAgBC,EAAoB,GAA0C;CAC5E,OAAOR,EAAME,GAAM,oBAAoB,CAAC,GAAG,KAAKO;AAClD;AAIA,SAAgBC,EAAc,GAAiC;CAC7D,IAAMC,IAAYT,GAA2D;CAC7E,OAAO,OAAOS,KAAa,aAAaA,EAAS,IAAI;AACvD;AA0BA,IAAMJ,IAAiD,CAAC,GAClDE,IAA4C,CAAC"}
@@ -2,13 +2,9 @@
2
2
  function e(e, t) {
3
3
  return (n, r, i) => {
4
4
  let a = e(n, r, i);
5
- if (a == null) return null;
6
- let o = t?.(a) ?? null;
7
- return {
5
+ return a == null ? null : {
8
6
  id: a,
9
- kind: o?.kind ?? "unknown",
10
- pose: o?.pose,
11
- data: o?.data ?? { id: a }
7
+ kind: t?.(a)?.kind ?? "unknown"
12
8
  };
13
9
  };
14
10
  }