@weasel-js/core 1.6.1 → 1.7.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 (1005) hide show
  1. package/CHANGELOG.md +1006 -0
  2. package/README.md +28 -9
  3. package/dist/WeaselProvider.js +15 -0
  4. package/dist/WeaselProvider.js.map +1 -0
  5. package/dist/affordances/composeAffordanceLayer.js +224 -0
  6. package/dist/affordances/composeAffordanceLayer.js.map +1 -0
  7. package/dist/affordances/cornerResize.js +69 -0
  8. package/dist/affordances/cornerResize.js.map +1 -0
  9. package/dist/affordances/hitAffordanceRegions.js +138 -0
  10. package/dist/affordances/hitAffordanceRegions.js.map +1 -0
  11. package/dist/affordances/pathAnchors.js +66 -0
  12. package/dist/affordances/pathAnchors.js.map +1 -0
  13. package/dist/affordances/rotationHandle.js +103 -0
  14. package/dist/affordances/rotationHandle.js.map +1 -0
  15. package/dist/animation/behaviors/momentum.js +118 -0
  16. package/dist/animation/behaviors/momentum.js.map +1 -0
  17. package/dist/animation/colorHelpers.js +135 -0
  18. package/dist/animation/colorHelpers.js.map +1 -0
  19. package/dist/animation/colorRegistry.js +37 -0
  20. package/dist/animation/colorRegistry.js.map +1 -0
  21. package/dist/animation/index.js +20 -0
  22. package/dist/animation/loop.js +62 -0
  23. package/dist/animation/loop.js.map +1 -0
  24. package/dist/animation/observe.js +23 -0
  25. package/dist/animation/observe.js.map +1 -0
  26. package/dist/animation/poseHelpers.js +50 -0
  27. package/dist/animation/poseHelpers.js.map +1 -0
  28. package/dist/animation/reflow.js +121 -0
  29. package/dist/animation/reflow.js.map +1 -0
  30. package/dist/animation/rig/bindRig.js +74 -0
  31. package/dist/animation/rig/bindRig.js.map +1 -0
  32. package/dist/animation/rig/blendPoses.js +43 -0
  33. package/dist/animation/rig/blendPoses.js.map +1 -0
  34. package/dist/animation/rig/mirrorPose.js +19 -0
  35. package/dist/animation/rig/mirrorPose.js.map +1 -0
  36. package/dist/animation/rig/resolveSkeleton.js +33 -0
  37. package/dist/animation/rig/resolveSkeleton.js.map +1 -0
  38. package/dist/animation/rig/solveIk.js +103 -0
  39. package/dist/animation/rig/solveIk.js.map +1 -0
  40. package/dist/animation/rig/types.js +12 -0
  41. package/dist/animation/rig/types.js.map +1 -0
  42. package/dist/animation/rig/useRig.js +23 -0
  43. package/dist/animation/rig/useRig.js.map +1 -0
  44. package/dist/animation/slew.js +27 -0
  45. package/dist/animation/slew.js.map +1 -0
  46. package/dist/animation/stagger.js +138 -0
  47. package/dist/animation/stagger.js.map +1 -0
  48. package/dist/animation/timeline/booking.js +106 -0
  49. package/dist/animation/timeline/booking.js.map +1 -0
  50. package/dist/animation/timeline/createTimeline.js +116 -0
  51. package/dist/animation/timeline/createTimeline.js.map +1 -0
  52. package/dist/animation/timeline/sampleTrack.js +29 -0
  53. package/dist/animation/timeline/sampleTrack.js.map +1 -0
  54. package/dist/animation/useAnimator.js +329 -0
  55. package/dist/animation/useAnimator.js.map +1 -0
  56. package/dist/animation/wrappers/animateLifecycle.js +40 -0
  57. package/dist/animation/wrappers/animateLifecycle.js.map +1 -0
  58. package/dist/animation/wrappers/animateOnSetPose.js +44 -0
  59. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -0
  60. package/dist/{autoPoseDescriptor-_XOyF7t4.d.ts → autoPoseDescriptor-BT_vp9FO.d.ts} +2 -2
  61. package/dist/{builtins-HWyuLzE-.d.ts → builtins-BSUfH8nU.d.ts} +1301 -508
  62. package/dist/canvas/Canvas.js +608 -0
  63. package/dist/canvas/Canvas.js.map +1 -0
  64. package/dist/canvas/CanvasView.js +255 -0
  65. package/dist/canvas/CanvasView.js.map +1 -0
  66. package/dist/canvas/CursorCoordsHud.js +75 -0
  67. package/dist/canvas/CursorCoordsHud.js.map +1 -0
  68. package/dist/canvas/DrawCanvas.js +67 -0
  69. package/dist/canvas/DrawCanvas.js.map +1 -0
  70. package/dist/canvas/MinimapCanvas.js +139 -0
  71. package/dist/canvas/MinimapCanvas.js.map +1 -0
  72. package/dist/canvas/ModalityHud.js +66 -0
  73. package/dist/canvas/ModalityHud.js.map +1 -0
  74. package/dist/canvas/NodeShape.js +391 -0
  75. package/dist/canvas/NodeShape.js.map +1 -0
  76. package/dist/canvas/PickHud.js +93 -0
  77. package/dist/canvas/PickHud.js.map +1 -0
  78. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +10 -0
  79. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js.map +1 -0
  80. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +10 -0
  81. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js.map +1 -0
  82. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +51 -0
  83. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -0
  84. package/dist/canvas/SceneCanvas/contributionFrameHooks.js +42 -0
  85. package/dist/canvas/SceneCanvas/contributionFrameHooks.js.map +1 -0
  86. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +549 -0
  87. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -0
  88. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +26 -0
  89. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -0
  90. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +69 -0
  91. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -0
  92. package/dist/canvas/SceneCanvas/features.js +97 -0
  93. package/dist/canvas/SceneCanvas/features.js.map +1 -0
  94. package/dist/canvas/SceneCanvas/poseGeometry.js +46 -0
  95. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -0
  96. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +48 -0
  97. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -0
  98. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +70 -0
  99. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -0
  100. package/dist/canvas/SceneCanvas/useContributionRoles.js +75 -0
  101. package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -0
  102. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +172 -0
  103. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -0
  104. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +69 -0
  105. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -0
  106. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +127 -0
  107. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -0
  108. package/dist/canvas/SceneCanvas/useViewportActions.js +30 -0
  109. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -0
  110. package/dist/canvas/SceneCanvas.js +992 -0
  111. package/dist/canvas/SceneCanvas.js.map +1 -0
  112. package/dist/canvas/SceneViewCanvas.js +54 -0
  113. package/dist/canvas/SceneViewCanvas.js.map +1 -0
  114. package/dist/canvas/accentColor.js +9 -0
  115. package/dist/canvas/accentColor.js.map +1 -0
  116. package/dist/canvas/affordanceAt.js +63 -0
  117. package/dist/canvas/affordanceAt.js.map +1 -0
  118. package/dist/canvas/buildSceneTree.js +65 -0
  119. package/dist/canvas/buildSceneTree.js.map +1 -0
  120. package/dist/canvas/canvasRenderer.js +89 -0
  121. package/dist/canvas/canvasRenderer.js.map +1 -0
  122. package/dist/canvas/colorOverrides.js +16 -0
  123. package/dist/canvas/colorOverrides.js.map +1 -0
  124. package/dist/canvas/defaultDrawOne.js +43 -0
  125. package/dist/canvas/defaultDrawOne.js.map +1 -0
  126. package/dist/canvas/deps/areaSelect.js +19 -0
  127. package/dist/canvas/deps/areaSelect.js.map +1 -0
  128. package/dist/canvas/deps/debug.js +9 -0
  129. package/dist/canvas/deps/debug.js.map +1 -0
  130. package/dist/canvas/deps/dispatcher.js +11 -0
  131. package/dist/canvas/deps/dispatcher.js.map +1 -0
  132. package/dist/canvas/deps/editAnchors.js +101 -0
  133. package/dist/canvas/deps/editAnchors.js.map +1 -0
  134. package/dist/canvas/deps/geometryProjection.js +11 -0
  135. package/dist/canvas/deps/geometryProjection.js.map +1 -0
  136. package/dist/canvas/deps/hitTestArea.js +51 -0
  137. package/dist/canvas/deps/hitTestArea.js.map +1 -0
  138. package/dist/canvas/deps/ingestion.js +31 -0
  139. package/dist/canvas/deps/ingestion.js.map +1 -0
  140. package/dist/canvas/deps/insert.js +116 -0
  141. package/dist/canvas/deps/insert.js.map +1 -0
  142. package/dist/canvas/deps/lassoSelect.js +20 -0
  143. package/dist/canvas/deps/lassoSelect.js.map +1 -0
  144. package/dist/canvas/deps/layout.js +34 -0
  145. package/dist/canvas/deps/layout.js.map +1 -0
  146. package/dist/canvas/deps/nodeAtPoint.js +19 -0
  147. package/dist/canvas/deps/nodeAtPoint.js.map +1 -0
  148. package/dist/canvas/deps/poseComposition.js +11 -0
  149. package/dist/canvas/deps/poseComposition.js.map +1 -0
  150. package/dist/canvas/deps/poseDescriptor.js +12 -0
  151. package/dist/canvas/deps/poseDescriptor.js.map +1 -0
  152. package/dist/canvas/deps/resizePolicy.js +35 -0
  153. package/dist/canvas/deps/resizePolicy.js.map +1 -0
  154. package/dist/canvas/deps/slice.js +99 -0
  155. package/dist/canvas/deps/slice.js.map +1 -0
  156. package/dist/canvas/deps/snap.js +11 -0
  157. package/dist/canvas/deps/snap.js.map +1 -0
  158. package/dist/canvas/deps/textEdit.js +21 -0
  159. package/dist/canvas/deps/textEdit.js.map +1 -0
  160. package/dist/canvas/deps/view.js +43 -0
  161. package/dist/canvas/deps/view.js.map +1 -0
  162. package/dist/canvas/derivedPath.js +47 -0
  163. package/dist/canvas/derivedPath.js.map +1 -0
  164. package/dist/canvas/drawEnvelope.js +22 -0
  165. package/dist/canvas/drawEnvelope.js.map +1 -0
  166. package/dist/canvas/getNodeAtPoint.js +18 -0
  167. package/dist/canvas/getNodeAtPoint.js.map +1 -0
  168. package/dist/canvas/hostAnchor.js +29 -0
  169. package/dist/canvas/hostAnchor.js.map +1 -0
  170. package/dist/canvas/hud.module.js +18 -0
  171. package/dist/canvas/hud.module.js.map +1 -0
  172. package/dist/canvas/insertPreviewExtent.js +103 -0
  173. package/dist/canvas/insertPreviewExtent.js.map +1 -0
  174. package/dist/canvas/kitRequirements.js +177 -0
  175. package/dist/canvas/kitRequirements.js.map +1 -0
  176. package/dist/canvas/layerOrder.js +66 -0
  177. package/dist/canvas/layerOrder.js.map +1 -0
  178. package/dist/canvas/layerSlots.js +14 -0
  179. package/dist/canvas/layerSlots.js.map +1 -0
  180. package/dist/canvas/minimapMath.js +80 -0
  181. package/dist/canvas/minimapMath.js.map +1 -0
  182. package/dist/canvas/mountedCanvases.js +20 -0
  183. package/dist/canvas/mountedCanvases.js.map +1 -0
  184. package/dist/canvas/overlayRoleStrokes.js +17 -0
  185. package/dist/canvas/overlayRoleStrokes.js.map +1 -0
  186. package/dist/canvas/paintCull.js +20 -0
  187. package/dist/canvas/paintCull.js.map +1 -0
  188. package/dist/canvas/pickWalk.js +158 -0
  189. package/dist/canvas/pickWalk.js.map +1 -0
  190. package/dist/canvas/planeClips.js +30 -0
  191. package/dist/canvas/planeClips.js.map +1 -0
  192. package/dist/canvas/poseRotation.js +35 -0
  193. package/dist/canvas/poseRotation.js.map +1 -0
  194. package/dist/canvas/rasterToPng.js +21 -0
  195. package/dist/canvas/rasterToPng.js.map +1 -0
  196. package/dist/canvas/renderDebugSnapshot.js +32 -0
  197. package/dist/canvas/renderDebugSnapshot.js.map +1 -0
  198. package/dist/canvas/renderNeeds.js +25 -0
  199. package/dist/canvas/renderNeeds.js.map +1 -0
  200. package/dist/canvas/renderSceneToPixels.js +143 -0
  201. package/dist/canvas/renderSceneToPixels.js.map +1 -0
  202. package/dist/canvas/sceneAdapter.js +270 -0
  203. package/dist/canvas/sceneAdapter.js.map +1 -0
  204. package/dist/canvas/sceneLayerPaint.js +37 -0
  205. package/dist/canvas/sceneLayerPaint.js.map +1 -0
  206. package/dist/canvas/sceneSlotWiring.js +20 -0
  207. package/dist/canvas/sceneSlotWiring.js.map +1 -0
  208. package/dist/canvas/sceneViewRender.js +72 -0
  209. package/dist/canvas/sceneViewRender.js.map +1 -0
  210. package/dist/canvas/slopsDebugLayer.js +61 -0
  211. package/dist/canvas/slopsDebugLayer.js.map +1 -0
  212. package/dist/canvas/surfaceContribution.js +15 -0
  213. package/dist/canvas/surfaceContribution.js.map +1 -0
  214. package/dist/canvas/toolPreview.js +39 -0
  215. package/dist/canvas/toolPreview.js.map +1 -0
  216. package/dist/canvas/useCanvasRenderer.js +11 -0
  217. package/dist/canvas/useCanvasRenderer.js.map +1 -0
  218. package/dist/canvas/useFrameLoop.js +60 -0
  219. package/dist/canvas/useFrameLoop.js.map +1 -0
  220. package/dist/canvas/useHostAnchor.js +71 -0
  221. package/dist/canvas/useHostAnchor.js.map +1 -0
  222. package/dist/canvas/useLateContentRedraw.js +21 -0
  223. package/dist/canvas/useLateContentRedraw.js.map +1 -0
  224. package/dist/canvas/useRedrawOn.js +21 -0
  225. package/dist/canvas/useRedrawOn.js.map +1 -0
  226. package/dist/canvas/useViewHelpers.js +120 -0
  227. package/dist/canvas/useViewHelpers.js.map +1 -0
  228. package/dist/canvas/viewInputs.js +17 -0
  229. package/dist/canvas/viewInputs.js.map +1 -0
  230. package/dist/canvas/viewRegistry.js +61 -0
  231. package/dist/canvas/viewRegistry.js.map +1 -0
  232. package/dist/canvas/wrapNodeOutput.js +14 -0
  233. package/dist/canvas/wrapNodeOutput.js.map +1 -0
  234. package/dist/clipboard.d.ts +10 -5
  235. package/dist/clipboard.js +3 -5
  236. package/dist/clone.d.ts +3 -3
  237. package/dist/clone.js +2 -5
  238. package/dist/core/adapters/arrayAdapter.js +85 -0
  239. package/dist/core/adapters/arrayAdapter.js.map +1 -0
  240. package/dist/core/adapters/useArrayAdapter.js +13 -0
  241. package/dist/core/adapters/useArrayAdapter.js.map +1 -0
  242. package/dist/core/applyOps.js +12 -0
  243. package/dist/core/applyOps.js.map +1 -0
  244. package/dist/core/device/index.js +4 -0
  245. package/dist/core/device/targets.js +17 -0
  246. package/dist/core/device/targets.js.map +1 -0
  247. package/dist/core/device/useDeviceProfile.js +75 -0
  248. package/dist/core/device/useDeviceProfile.js.map +1 -0
  249. package/dist/core/fillInPoseFrame.js +102 -0
  250. package/dist/core/fillInPoseFrame.js.map +1 -0
  251. package/dist/core/geometry/poseDescriptor.js +98 -0
  252. package/dist/core/geometry/poseDescriptor.js.map +1 -0
  253. package/dist/core/geometry/poseRotation.js +58 -0
  254. package/dist/core/geometry/poseRotation.js.map +1 -0
  255. package/dist/core/geometry/regionHit.js +102 -0
  256. package/dist/core/geometry/regionHit.js.map +1 -0
  257. package/dist/core/geometry/unionBounds.js +60 -0
  258. package/dist/core/geometry/unionBounds.js.map +1 -0
  259. package/dist/core/gradient.js +136 -0
  260. package/dist/core/gradient.js.map +1 -0
  261. package/dist/core/isPlainObject.js +11 -0
  262. package/dist/core/isPlainObject.js.map +1 -0
  263. package/dist/core/layers/render.js +150 -0
  264. package/dist/core/layers/render.js.map +1 -0
  265. package/dist/core/markerInset.js +24 -0
  266. package/dist/core/markerInset.js.map +1 -0
  267. package/dist/core/mixed.js +6 -0
  268. package/dist/core/mixed.js.map +1 -0
  269. package/dist/core/ops/arrange.js +31 -0
  270. package/dist/core/ops/arrange.js.map +1 -0
  271. package/dist/core/ops/create.js +32 -0
  272. package/dist/core/ops/create.js.map +1 -0
  273. package/dist/core/ops/createHistory.js +20 -0
  274. package/dist/core/ops/createHistory.js.map +1 -0
  275. package/dist/core/ops/delete.js +89 -0
  276. package/dist/core/ops/delete.js.map +1 -0
  277. package/dist/core/ops/registry.js +17 -0
  278. package/dist/core/ops/registry.js.map +1 -0
  279. package/dist/core/ops/reorder/algorithms.js +55 -0
  280. package/dist/core/ops/reorder/algorithms.js.map +1 -0
  281. package/dist/core/ops/reorder/index.js +140 -0
  282. package/dist/core/ops/reorder/index.js.map +1 -0
  283. package/dist/core/ops/reparent.js +52 -0
  284. package/dist/core/ops/reparent.js.map +1 -0
  285. package/dist/core/ops/select.js +34 -0
  286. package/dist/core/ops/select.js.map +1 -0
  287. package/dist/core/ops/setData.js +34 -0
  288. package/dist/core/ops/setData.js.map +1 -0
  289. package/dist/core/ops/setLayer.js +34 -0
  290. package/dist/core/ops/setLayer.js.map +1 -0
  291. package/dist/core/ops/setLayout.js +31 -0
  292. package/dist/core/ops/setLayout.js.map +1 -0
  293. package/dist/core/ops/setPath.js +57 -0
  294. package/dist/core/ops/setPath.js.map +1 -0
  295. package/dist/core/ops/setText.js +34 -0
  296. package/dist/core/ops/setText.js.map +1 -0
  297. package/dist/core/ops/slot.js +37 -0
  298. package/dist/core/ops/slot.js.map +1 -0
  299. package/dist/core/ops/transform.js +42 -0
  300. package/dist/core/ops/transform.js.map +1 -0
  301. package/dist/core/paintKinds.js +156 -0
  302. package/dist/core/paintKinds.js.map +1 -0
  303. package/dist/core/scene/NodeProperties.js +20 -0
  304. package/dist/core/scene/NodeProperties.js.map +1 -0
  305. package/dist/core/scene/NodeRouting.js +24 -0
  306. package/dist/core/scene/NodeRouting.js.map +1 -0
  307. package/dist/core/scene/arrivals.js +12 -0
  308. package/dist/core/scene/arrivals.js.map +1 -0
  309. package/dist/core/scene/composeFrame.js +29 -0
  310. package/dist/core/scene/composeFrame.js.map +1 -0
  311. package/dist/core/scene/depMemo.js +18 -0
  312. package/dist/core/scene/depMemo.js.map +1 -0
  313. package/dist/core/scene/dependents.js +66 -0
  314. package/dist/core/scene/dependents.js.map +1 -0
  315. package/dist/core/scene/derivedPath.js +31 -0
  316. package/dist/core/scene/derivedPath.js.map +1 -0
  317. package/dist/core/scene/effectivePose.js +78 -0
  318. package/dist/core/scene/effectivePose.js.map +1 -0
  319. package/dist/core/scene/kitRegistry.js +33 -0
  320. package/dist/core/scene/kitRegistry.js.map +1 -0
  321. package/dist/core/scene/layoutPass.js +96 -0
  322. package/dist/core/scene/layoutPass.js.map +1 -0
  323. package/dist/core/scene/nodeFnFields.js +83 -0
  324. package/dist/core/scene/nodeFnFields.js.map +1 -0
  325. package/dist/core/scene/nodeMemo.js +28 -0
  326. package/dist/core/scene/nodeMemo.js.map +1 -0
  327. package/dist/core/scene/poseFeed.js +87 -0
  328. package/dist/core/scene/poseFeed.js.map +1 -0
  329. package/dist/core/scene/poseOverrides.js +52 -0
  330. package/dist/core/scene/poseOverrides.js.map +1 -0
  331. package/dist/core/scene/poseSnapshot.js +54 -0
  332. package/dist/core/scene/poseSnapshot.js.map +1 -0
  333. package/dist/core/scene/scene.js +1271 -0
  334. package/dist/core/scene/scene.js.map +1 -0
  335. package/dist/core/scene/types.js +6 -0
  336. package/dist/core/scene/types.js.map +1 -0
  337. package/dist/core/scene/useScene.js +32 -0
  338. package/dist/core/scene/useScene.js.map +1 -0
  339. package/dist/core/selection/chromeState.js +31 -0
  340. package/dist/core/selection/chromeState.js.map +1 -0
  341. package/dist/core/selection/selectionTarget.js +6 -0
  342. package/dist/core/selection/selectionTarget.js.map +1 -0
  343. package/dist/core/selection/useSelection.js +71 -0
  344. package/dist/core/selection/useSelection.js.map +1 -0
  345. package/dist/core/shapeKinds.js +54 -0
  346. package/dist/core/shapeKinds.js.map +1 -0
  347. package/dist/core/strokeMarkerShapes.js +139 -0
  348. package/dist/core/strokeMarkerShapes.js.map +1 -0
  349. package/dist/core/strokeMarkers.js +28 -0
  350. package/dist/core/strokeMarkers.js.map +1 -0
  351. package/dist/core/stylus/stylus.js +39 -0
  352. package/dist/core/stylus/stylus.js.map +1 -0
  353. package/dist/core/stylus/usePointerStylus.js +51 -0
  354. package/dist/core/stylus/usePointerStylus.js.map +1 -0
  355. package/dist/core/usePaintKinds.js +17 -0
  356. package/dist/core/usePaintKinds.js.map +1 -0
  357. package/dist/core/viewport/clampView.js +24 -0
  358. package/dist/core/viewport/clampView.js.map +1 -0
  359. package/dist/core/viewport/clientToWorld.js +8 -0
  360. package/dist/core/viewport/clientToWorld.js.map +1 -0
  361. package/dist/core/viewport/createVelocityTracker.js +39 -0
  362. package/dist/core/viewport/createVelocityTracker.js.map +1 -0
  363. package/dist/core/viewport/fitToBounds.js +18 -0
  364. package/dist/core/viewport/fitToBounds.js.map +1 -0
  365. package/dist/core/viewport/fitViewToBounds.js +36 -0
  366. package/dist/core/viewport/fitViewToBounds.js.map +1 -0
  367. package/dist/core/viewport/interpolateView.js +34 -0
  368. package/dist/core/viewport/interpolateView.js.map +1 -0
  369. package/dist/core/viewport/meanScale.js +8 -0
  370. package/dist/core/viewport/meanScale.js.map +1 -0
  371. package/dist/core/viewport/parallax.js +111 -0
  372. package/dist/core/viewport/parallax.js.map +1 -0
  373. package/dist/core/viewport/pxExtent.js +42 -0
  374. package/dist/core/viewport/pxExtent.js.map +1 -0
  375. package/dist/core/viewport/sceneNodeClientRect.js +18 -0
  376. package/dist/core/viewport/sceneNodeClientRect.js.map +1 -0
  377. package/dist/core/viewport/screenSlop.js +27 -0
  378. package/dist/core/viewport/screenSlop.js.map +1 -0
  379. package/dist/core/viewport/useAutoCenter.js +32 -0
  380. package/dist/core/viewport/useAutoCenter.js.map +1 -0
  381. package/dist/core/viewport/useCanvasSize.js +29 -0
  382. package/dist/core/viewport/useCanvasSize.js.map +1 -0
  383. package/dist/core/viewport/useDecayLoop.js +63 -0
  384. package/dist/core/viewport/useDecayLoop.js.map +1 -0
  385. package/dist/core/viewport/useVelocityTracker.js +10 -0
  386. package/dist/core/viewport/useVelocityTracker.js.map +1 -0
  387. package/dist/core/viewport/useViewAnimation.js +63 -0
  388. package/dist/core/viewport/useViewAnimation.js.map +1 -0
  389. package/dist/core/viewport/view.js +37 -0
  390. package/dist/core/viewport/view.js.map +1 -0
  391. package/dist/core/viewport/viewTransform.js +11 -0
  392. package/dist/core/viewport/viewTransform.js.map +1 -0
  393. package/dist/core/viewport/viewportWorldRect.js +13 -0
  394. package/dist/core/viewport/viewportWorldRect.js.map +1 -0
  395. package/dist/core/viewport/wheelHandler.js +30 -0
  396. package/dist/core/viewport/wheelHandler.js.map +1 -0
  397. package/dist/core/viewport/zoomAt.js +22 -0
  398. package/dist/core/viewport/zoomAt.js.map +1 -0
  399. package/dist/core/viewport/zoomBounds.js +20 -0
  400. package/dist/core/viewport/zoomBounds.js.map +1 -0
  401. package/dist/{pointSnapToGrid-7mCcm6qG.d.ts → cornerHandles-CDcZOV8h.d.ts} +54 -71
  402. package/dist/debug/createDebugOverlayLayer.js +358 -0
  403. package/dist/debug/createDebugOverlayLayer.js.map +1 -0
  404. package/dist/debug/createDebugSink.js +83 -0
  405. package/dist/debug/createDebugSink.js.map +1 -0
  406. package/dist/debug/defaultTheme.js +31 -0
  407. package/dist/debug/defaultTheme.js.map +1 -0
  408. package/dist/debug/flag.js +41 -0
  409. package/dist/debug/flag.js.map +1 -0
  410. package/dist/debug/frameStats.js +16 -0
  411. package/dist/debug/frameStats.js.map +1 -0
  412. package/dist/debug/parseDebugFlags.js +32 -0
  413. package/dist/debug/parseDebugFlags.js.map +1 -0
  414. package/dist/features/chrome-caps/buildChromeCtx.js +16 -0
  415. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -0
  416. package/dist/features/chrome-caps/conditions.js +36 -0
  417. package/dist/features/chrome-caps/conditions.js.map +1 -0
  418. package/dist/features/chrome-caps/defaults.js +26 -0
  419. package/dist/features/chrome-caps/defaults.js.map +1 -0
  420. package/dist/features/chrome-caps/index.js +7 -0
  421. package/dist/features/chrome-caps/resolve.js +23 -0
  422. package/dist/features/chrome-caps/resolve.js.map +1 -0
  423. package/dist/features/chrome-caps/useHoverTracking.js +27 -0
  424. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -0
  425. package/dist/features/cursor/paintedCursorLayer.js +60 -0
  426. package/dist/features/cursor/paintedCursorLayer.js.map +1 -0
  427. package/dist/features/focus/gateLayer.js +14 -0
  428. package/dist/features/focus/gateLayer.js.map +1 -0
  429. package/dist/features/focus/useCanvasFocus.js +29 -0
  430. package/dist/features/focus/useCanvasFocus.js.map +1 -0
  431. package/dist/features/groups/children.js +23 -0
  432. package/dist/features/groups/children.js.map +1 -0
  433. package/dist/features/groups/composePose.js +67 -0
  434. package/dist/features/groups/composePose.js.map +1 -0
  435. package/dist/features/groups/nestedHit.js +40 -0
  436. package/dist/features/groups/nestedHit.js.map +1 -0
  437. package/dist/features/groups/unionOfChildren.js +15 -0
  438. package/dist/features/groups/unionOfChildren.js.map +1 -0
  439. package/dist/features/images/imageCache.js +94 -0
  440. package/dist/features/images/imageCache.js.map +1 -0
  441. package/dist/features/ingestion/contentHandlers.js +37 -0
  442. package/dist/features/ingestion/contentHandlers.js.map +1 -0
  443. package/dist/features/ingestion/imageHandler.js +45 -0
  444. package/dist/features/ingestion/imageHandler.js.map +1 -0
  445. package/dist/features/ingestion/index.js +8 -0
  446. package/dist/features/ingestion/openFilePicker.js +15 -0
  447. package/dist/features/ingestion/openFilePicker.js.map +1 -0
  448. package/dist/features/ingestion/registerKitHandlers.js +26 -0
  449. package/dist/features/ingestion/registerKitHandlers.js.map +1 -0
  450. package/dist/features/ingestion/svgHandler.js +58 -0
  451. package/dist/features/ingestion/svgHandler.js.map +1 -0
  452. package/dist/features/ingestion/weaselJsonHandler.js +39 -0
  453. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -0
  454. package/dist/features/longPress/longPressFeedback.js +96 -0
  455. package/dist/features/longPress/longPressFeedback.js.map +1 -0
  456. package/dist/features/meshPaint/bake.js +79 -0
  457. package/dist/features/meshPaint/bake.js.map +1 -0
  458. package/dist/features/meshPaint/bakeCache.js +59 -0
  459. package/dist/features/meshPaint/bakeCache.js.map +1 -0
  460. package/dist/features/meshPaint/handles.js +86 -0
  461. package/dist/features/meshPaint/handles.js.map +1 -0
  462. package/dist/features/meshPaint/lazyKind.js +1298 -0
  463. package/dist/features/meshPaint/lazyKind.js.map +1 -0
  464. package/dist/features/meshPaint/meshPaint.js +236 -0
  465. package/dist/features/meshPaint/meshPaint.js.map +1 -0
  466. package/dist/features/meshPaint/meshShader.js +6 -0
  467. package/dist/features/meshPaint/meshShader.js.map +1 -0
  468. package/dist/features/meshPaint/register.js +7 -0
  469. package/dist/features/meshPaint/register.js.map +1 -0
  470. package/dist/features/meshPaint/surface.js +110 -0
  471. package/dist/features/meshPaint/surface.js.map +1 -0
  472. package/dist/features/minimap/actions.js +53 -0
  473. package/dist/features/minimap/actions.js.map +1 -0
  474. package/dist/features/minimap/createMinimapContribution.js +96 -0
  475. package/dist/features/minimap/createMinimapContribution.js.map +1 -0
  476. package/dist/features/minimap/layers.js +103 -0
  477. package/dist/features/minimap/layers.js.map +1 -0
  478. package/dist/features/modes/modeLayers.js +113 -0
  479. package/dist/features/modes/modeLayers.js.map +1 -0
  480. package/dist/features/overlays/useNodeOverlayFrame.js +103 -0
  481. package/dist/features/overlays/useNodeOverlayFrame.js.map +1 -0
  482. package/dist/features/parallax/createParallaxLayer.js +26 -0
  483. package/dist/features/parallax/createParallaxLayer.js.map +1 -0
  484. package/dist/features/parallax/createParallaxPlane.js +26 -0
  485. package/dist/features/parallax/createParallaxPlane.js.map +1 -0
  486. package/dist/features/paths/anchorEdits.js +156 -0
  487. package/dist/features/paths/anchorEdits.js.map +1 -0
  488. package/dist/features/paths/anchors.js +154 -0
  489. package/dist/features/paths/anchors.js.map +1 -0
  490. package/dist/features/paths/booleans.js +2 -0
  491. package/dist/features/paths/index.js +15 -0
  492. package/dist/features/paths/markerCommands.js +116 -0
  493. package/dist/features/paths/markerCommands.js.map +1 -0
  494. package/dist/features/paths/markerSites.js +59 -0
  495. package/dist/features/paths/markerSites.js.map +1 -0
  496. package/dist/features/paths/markers.js +95 -0
  497. package/dist/features/paths/markers.js.map +1 -0
  498. package/dist/features/paths/nearestAnchor.js +36 -0
  499. package/dist/features/paths/nearestAnchor.js.map +1 -0
  500. package/dist/features/paths/originProjection.js +16 -0
  501. package/dist/features/paths/originProjection.js.map +1 -0
  502. package/dist/features/paths/pathEditingOverlayLayer.js +137 -0
  503. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -0
  504. package/dist/features/paths/pathInWorld.js +41 -0
  505. package/dist/features/paths/pathInWorld.js.map +1 -0
  506. package/dist/features/paths/pathLayer.js +44 -0
  507. package/dist/features/paths/pathLayer.js.map +1 -0
  508. package/dist/features/paths/penPreviewLayer.js +220 -0
  509. package/dist/features/paths/penPreviewLayer.js.map +1 -0
  510. package/dist/features/paths/poseDescriptor.js +44 -0
  511. package/dist/features/paths/poseDescriptor.js.map +1 -0
  512. package/dist/features/paths/tessellate/stroke.js +230 -0
  513. package/dist/features/paths/tessellate/stroke.js.map +1 -0
  514. package/dist/features/patterns/index.js +23 -0
  515. package/dist/features/patterns/index.js.map +1 -0
  516. package/dist/features/patterns/patterns-builtin.js +38 -0
  517. package/dist/features/patterns/patterns-builtin.js.map +1 -0
  518. package/dist/features/patterns/resolveSpec.js +57 -0
  519. package/dist/features/patterns/resolveSpec.js.map +1 -0
  520. package/dist/features/patterns/tileGeometry.js +158 -0
  521. package/dist/features/patterns/tileGeometry.js.map +1 -0
  522. package/dist/features/pointer/PointerContext.js +45 -0
  523. package/dist/features/pointer/PointerContext.js.map +1 -0
  524. package/dist/features/poseRun/usePoseRun.js +70 -0
  525. package/dist/features/poseRun/usePoseRun.js.map +1 -0
  526. package/dist/features/selection/SelectionContext.js +46 -0
  527. package/dist/features/selection/SelectionContext.js.map +1 -0
  528. package/dist/features/selection/overlay.js +442 -0
  529. package/dist/features/selection/overlay.js.map +1 -0
  530. package/dist/features/simulation/createSimulation.js +61 -0
  531. package/dist/features/simulation/createSimulation.js.map +1 -0
  532. package/dist/features/simulation/types.js +6 -0
  533. package/dist/features/simulation/types.js.map +1 -0
  534. package/dist/features/simulation/useSimulation.js +74 -0
  535. package/dist/features/simulation/useSimulation.js.map +1 -0
  536. package/dist/features/text/domRuns.js +258 -0
  537. package/dist/features/text/domRuns.js.map +1 -0
  538. package/dist/features/text/fitTextPose.js +38 -0
  539. package/dist/features/text/fitTextPose.js.map +1 -0
  540. package/dist/features/text/hitTest.js +45 -0
  541. package/dist/features/text/hitTest.js.map +1 -0
  542. package/dist/features/text/renderLabel.js +14 -0
  543. package/dist/features/text/renderLabel.js.map +1 -0
  544. package/dist/features/text/runs/effectiveRangeStyle.js +66 -0
  545. package/dist/features/text/runs/effectiveRangeStyle.js.map +1 -0
  546. package/dist/features/text/runs/flagRange.js +53 -0
  547. package/dist/features/text/runs/flagRange.js.map +1 -0
  548. package/dist/features/text/runs/rangeStyle.js +135 -0
  549. package/dist/features/text/runs/rangeStyle.js.map +1 -0
  550. package/dist/features/text/textCommand.js +59 -0
  551. package/dist/features/text/textCommand.js.map +1 -0
  552. package/dist/features/text/textLayer.js +35 -0
  553. package/dist/features/text/textLayer.js.map +1 -0
  554. package/dist/features/text/textToPath.js +181 -0
  555. package/dist/features/text/textToPath.js.map +1 -0
  556. package/dist/features/text/useSceneTextEdit.js +138 -0
  557. package/dist/features/text/useSceneTextEdit.js.map +1 -0
  558. package/dist/features/text/useTextEdit.js +465 -0
  559. package/dist/features/text/useTextEdit.js.map +1 -0
  560. package/dist/features/tiling/createTiledLayer.js +63 -0
  561. package/dist/features/tiling/createTiledLayer.js.map +1 -0
  562. package/dist/features/tiling/tiledProject.js +14 -0
  563. package/dist/features/tiling/tiledProject.js.map +1 -0
  564. package/dist/features/viewports/viewResolver.js +59 -0
  565. package/dist/features/viewports/viewResolver.js.map +1 -0
  566. package/dist/features/viewports/viewportLayer.js +58 -0
  567. package/dist/features/viewports/viewportLayer.js.map +1 -0
  568. package/dist/icons/ArrowIcon.js +23 -0
  569. package/dist/icons/ArrowIcon.js.map +1 -0
  570. package/dist/icons/EllipseIcon.js +21 -0
  571. package/dist/icons/EllipseIcon.js.map +1 -0
  572. package/dist/icons/EyedropperIcon.js +49 -0
  573. package/dist/icons/EyedropperIcon.js.map +1 -0
  574. package/dist/icons/HandIcon.js +59 -0
  575. package/dist/icons/HandIcon.js.map +1 -0
  576. package/dist/icons/ImageIcon.js +34 -0
  577. package/dist/icons/ImageIcon.js.map +1 -0
  578. package/dist/icons/LassoIcon.js +22 -0
  579. package/dist/icons/LassoIcon.js.map +1 -0
  580. package/dist/icons/LineIcon.js +22 -0
  581. package/dist/icons/LineIcon.js.map +1 -0
  582. package/dist/icons/PenIcon.js +36 -0
  583. package/dist/icons/PenIcon.js.map +1 -0
  584. package/dist/icons/PencilIcon.js +25 -0
  585. package/dist/icons/PencilIcon.js.map +1 -0
  586. package/dist/icons/PolygonIcon.js +19 -0
  587. package/dist/icons/PolygonIcon.js.map +1 -0
  588. package/dist/icons/RectIcon.js +37 -0
  589. package/dist/icons/RectIcon.js.map +1 -0
  590. package/dist/icons/SelectIcon.js +20 -0
  591. package/dist/icons/SelectIcon.js.map +1 -0
  592. package/dist/icons/StarIcon.js +19 -0
  593. package/dist/icons/StarIcon.js.map +1 -0
  594. package/dist/icons/TextIcon.js +19 -0
  595. package/dist/icons/TextIcon.js.map +1 -0
  596. package/dist/icons/UnknownIcon.js +33 -0
  597. package/dist/icons/UnknownIcon.js.map +1 -0
  598. package/dist/icons/_base.js +12 -0
  599. package/dist/icons/_base.js.map +1 -0
  600. package/dist/index.css +2 -86
  601. package/dist/index.d.ts +2349 -2609
  602. package/dist/index.js +312 -13
  603. package/dist/input/keyState.js +76 -0
  604. package/dist/input/keyState.js.map +1 -0
  605. package/dist/input/useKeyState.js +22 -0
  606. package/dist/input/useKeyState.js.map +1 -0
  607. package/dist/interactions/actions/actionShortcuts.js +32 -0
  608. package/dist/interactions/actions/actionShortcuts.js.map +1 -0
  609. package/dist/interactions/actions/align/align.js +81 -0
  610. package/dist/interactions/actions/align/align.js.map +1 -0
  611. package/dist/interactions/actions/booleans/booleans.js +120 -0
  612. package/dist/interactions/actions/booleans/booleans.js.map +1 -0
  613. package/dist/interactions/actions/booleans/useBooleans.js +20 -0
  614. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -0
  615. package/dist/interactions/actions/booleans/useBooleansAdapter.js +9 -0
  616. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -0
  617. package/dist/interactions/actions/clipboard/clipboardOps.js +94 -0
  618. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -0
  619. package/dist/interactions/actions/clipboard/materializePaste.js +25 -0
  620. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -0
  621. package/dist/interactions/actions/clipboard/wireFormat.js +43 -0
  622. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -0
  623. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +26 -0
  624. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +1 -0
  625. package/dist/interactions/actions/defaultCommitAdapter.js +42 -0
  626. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -0
  627. package/dist/interactions/actions/defaults/align.js +71 -0
  628. package/dist/interactions/actions/defaults/align.js.map +1 -0
  629. package/dist/interactions/actions/defaults/anchorEditing.js +235 -0
  630. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -0
  631. package/dist/interactions/actions/defaults/areaSelect.js +75 -0
  632. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -0
  633. package/dist/interactions/actions/defaults/booleans.js +52 -0
  634. package/dist/interactions/actions/defaults/booleans.js.map +1 -0
  635. package/dist/interactions/actions/defaults/cancelGesture.js +24 -0
  636. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -0
  637. package/dist/interactions/actions/defaults/clearSelection.js +19 -0
  638. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -0
  639. package/dist/interactions/actions/defaults/clipboard.js +78 -0
  640. package/dist/interactions/actions/defaults/clipboard.js.map +1 -0
  641. package/dist/interactions/actions/defaults/clone.js +96 -0
  642. package/dist/interactions/actions/defaults/clone.js.map +1 -0
  643. package/dist/interactions/actions/defaults/createOutlines.js +47 -0
  644. package/dist/interactions/actions/defaults/createOutlines.js.map +1 -0
  645. package/dist/interactions/actions/defaults/createPaintAction.js +85 -0
  646. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -0
  647. package/dist/interactions/actions/defaults/delete.js +61 -0
  648. package/dist/interactions/actions/defaults/delete.js.map +1 -0
  649. package/dist/interactions/actions/defaults/distribute.js +66 -0
  650. package/dist/interactions/actions/defaults/distribute.js.map +1 -0
  651. package/dist/interactions/actions/defaults/duplicate.js +83 -0
  652. package/dist/interactions/actions/defaults/duplicate.js.map +1 -0
  653. package/dist/interactions/actions/defaults/editAnchors.js +100 -0
  654. package/dist/interactions/actions/defaults/editAnchors.js.map +1 -0
  655. package/dist/interactions/actions/defaults/enterPathEdit.js +29 -0
  656. package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -0
  657. package/dist/interactions/actions/defaults/enterTextEdit.js +20 -0
  658. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -0
  659. package/dist/interactions/actions/defaults/escape.js +26 -0
  660. package/dist/interactions/actions/defaults/escape.js.map +1 -0
  661. package/dist/interactions/actions/defaults/exitPathEdit.js +22 -0
  662. package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -0
  663. package/dist/interactions/actions/defaults/flip.js +119 -0
  664. package/dist/interactions/actions/defaults/flip.js.map +1 -0
  665. package/dist/interactions/actions/defaults/freshNodeId.js +10 -0
  666. package/dist/interactions/actions/defaults/freshNodeId.js.map +1 -0
  667. package/dist/interactions/actions/defaults/group.js +131 -0
  668. package/dist/interactions/actions/defaults/group.js.map +1 -0
  669. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js +40 -0
  670. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js.map +1 -0
  671. package/dist/interactions/actions/defaults/icons/actionGlyphs.js +10 -0
  672. package/dist/interactions/actions/defaults/icons/actionGlyphs.js.map +1 -0
  673. package/dist/interactions/actions/defaults/icons/alignIcons.js +173 -0
  674. package/dist/interactions/actions/defaults/icons/alignIcons.js.map +1 -0
  675. package/dist/interactions/actions/defaults/icons/booleanIcons.js +171 -0
  676. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -0
  677. package/dist/interactions/actions/defaults/icons/distributeIcons.js +63 -0
  678. package/dist/interactions/actions/defaults/icons/distributeIcons.js.map +1 -0
  679. package/dist/interactions/actions/defaults/icons/editIcons.js +280 -0
  680. package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -0
  681. package/dist/interactions/actions/defaults/icons/outlineIcons.js +53 -0
  682. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -0
  683. package/dist/interactions/actions/defaults/ingest.js +58 -0
  684. package/dist/interactions/actions/defaults/ingest.js.map +1 -0
  685. package/dist/interactions/actions/defaults/insert.js +288 -0
  686. package/dist/interactions/actions/defaults/insert.js.map +1 -0
  687. package/dist/interactions/actions/defaults/insertPathAnchor.js +50 -0
  688. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -0
  689. package/dist/interactions/actions/defaults/lassoSelect.js +156 -0
  690. package/dist/interactions/actions/defaults/lassoSelect.js.map +1 -0
  691. package/dist/interactions/actions/defaults/move.js +656 -0
  692. package/dist/interactions/actions/defaults/move.js.map +1 -0
  693. package/dist/interactions/actions/defaults/nudge.js +110 -0
  694. package/dist/interactions/actions/defaults/nudge.js.map +1 -0
  695. package/dist/interactions/actions/defaults/pinchZoom.js +63 -0
  696. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -0
  697. package/dist/interactions/actions/defaults/reorder.js +143 -0
  698. package/dist/interactions/actions/defaults/reorder.js.map +1 -0
  699. package/dist/interactions/actions/defaults/requiresSelection.js +10 -0
  700. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -0
  701. package/dist/interactions/actions/defaults/resize.js +332 -0
  702. package/dist/interactions/actions/defaults/resize.js.map +1 -0
  703. package/dist/interactions/actions/defaults/rotate.js +181 -0
  704. package/dist/interactions/actions/defaults/rotate.js.map +1 -0
  705. package/dist/interactions/actions/defaults/selectAll.js +27 -0
  706. package/dist/interactions/actions/defaults/selectAll.js.map +1 -0
  707. package/dist/interactions/actions/defaults/setFill.js +27 -0
  708. package/dist/interactions/actions/defaults/setFill.js.map +1 -0
  709. package/dist/interactions/actions/defaults/setFillOpacity.js +15 -0
  710. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -0
  711. package/dist/interactions/actions/defaults/setStroke.js +36 -0
  712. package/dist/interactions/actions/defaults/setStroke.js.map +1 -0
  713. package/dist/interactions/actions/defaults/setStrokeOpacity.js +21 -0
  714. package/dist/interactions/actions/defaults/setStrokeOpacity.js.map +1 -0
  715. package/dist/interactions/actions/defaults/slice.js +39 -0
  716. package/dist/interactions/actions/defaults/slice.js.map +1 -0
  717. package/dist/interactions/actions/defaults/sliceOps.js +60 -0
  718. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -0
  719. package/dist/interactions/actions/defaults/toolActivate.js +35 -0
  720. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -0
  721. package/dist/interactions/actions/defaults/toolResetToDefault.js +26 -0
  722. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -0
  723. package/dist/interactions/actions/defaults/undoRedo.js +51 -0
  724. package/dist/interactions/actions/defaults/undoRedo.js.map +1 -0
  725. package/dist/interactions/actions/defaults/viewportDragPan.js +88 -0
  726. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -0
  727. package/dist/interactions/actions/defaults/viewportWheelPan.js +57 -0
  728. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -0
  729. package/dist/interactions/actions/defaults/viewportZoom.js +143 -0
  730. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -0
  731. package/dist/interactions/actions/distribute/distribute.js +42 -0
  732. package/dist/interactions/actions/distribute/distribute.js.map +1 -0
  733. package/dist/interactions/actions/distribute/plan.js +29 -0
  734. package/dist/interactions/actions/distribute/plan.js.map +1 -0
  735. package/dist/interactions/actions/edit-anchors/geometry.js +61 -0
  736. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -0
  737. package/dist/interactions/actions/edit-anchors/handles.js +43 -0
  738. package/dist/interactions/actions/edit-anchors/handles.js.map +1 -0
  739. package/dist/interactions/actions/flip/helpers.js +35 -0
  740. package/dist/interactions/actions/flip/helpers.js.map +1 -0
  741. package/dist/interactions/actions/geometryProjection.js +18 -0
  742. package/dist/interactions/actions/geometryProjection.js.map +1 -0
  743. package/dist/interactions/actions/gestureLifecycle.js +44 -0
  744. package/dist/interactions/actions/gestureLifecycle.js.map +1 -0
  745. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +39 -0
  746. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -0
  747. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +36 -0
  748. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -0
  749. package/dist/interactions/actions/move/behaviors/snapToContainer.js +67 -0
  750. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -0
  751. package/dist/interactions/actions/move/gestureAdapter.js +37 -0
  752. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -0
  753. package/dist/interactions/actions/outlines/createOutlines.js +84 -0
  754. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -0
  755. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +9 -0
  756. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js.map +1 -0
  757. package/dist/interactions/actions/planeInput.js +168 -0
  758. package/dist/interactions/actions/planeInput.js.map +1 -0
  759. package/dist/interactions/actions/poseDescriptorDep.js +9 -0
  760. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -0
  761. package/dist/interactions/actions/poseFrame.js +38 -0
  762. package/dist/interactions/actions/poseFrame.js.map +1 -0
  763. package/dist/interactions/actions/previewOverrides.js +25 -0
  764. package/dist/interactions/actions/previewOverrides.js.map +1 -0
  765. package/dist/interactions/actions/resize/autoPoseDescriptor.js +32 -0
  766. package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +1 -0
  767. package/dist/interactions/actions/resize/behaviors/clampMinSize.js +18 -0
  768. package/dist/interactions/actions/resize/behaviors/clampMinSize.js.map +1 -0
  769. package/dist/interactions/actions/resize/behaviors/index.js +8 -0
  770. package/dist/interactions/actions/resize/behaviors/index.js.map +1 -0
  771. package/dist/interactions/actions/resize/behaviors/lockAspect.js +24 -0
  772. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -0
  773. package/dist/interactions/actions/resize/cornerHandles.js +72 -0
  774. package/dist/interactions/actions/resize/cornerHandles.js.map +1 -0
  775. package/dist/interactions/actions/resolveOverlays.js +60 -0
  776. package/dist/interactions/actions/resolveOverlays.js.map +1 -0
  777. package/dist/interactions/actions/resolvePreviews.js +61 -0
  778. package/dist/interactions/actions/resolvePreviews.js.map +1 -0
  779. package/dist/interactions/actions/rotate/geometry.js +46 -0
  780. package/dist/interactions/actions/rotate/geometry.js.map +1 -0
  781. package/dist/interactions/actions/rotate/handle.js +27 -0
  782. package/dist/interactions/actions/rotate/handle.js.map +1 -0
  783. package/dist/interactions/actions/spatialReference.js +42 -0
  784. package/dist/interactions/actions/spatialReference.js.map +1 -0
  785. package/dist/interactions/actions/useStandardActions.js +142 -0
  786. package/dist/interactions/actions/useStandardActions.js.map +1 -0
  787. package/dist/interactions/gestures/dragGesture/dragGesture.js +111 -0
  788. package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -0
  789. package/dist/interactions/gestures/dragRadial/dragRadial.js +117 -0
  790. package/dist/interactions/gestures/dragRadial/dragRadial.js.map +1 -0
  791. package/dist/interactions/gestures/dragRect/dragRect.js +164 -0
  792. package/dist/interactions/gestures/dragRect/dragRect.js.map +1 -0
  793. package/dist/interactions/gestures/handleDrag/handleDrag.js +46 -0
  794. package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -0
  795. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +118 -0
  796. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -0
  797. package/dist/interactions/gestures/shared/originProjection.js +42 -0
  798. package/dist/interactions/gestures/shared/originProjection.js.map +1 -0
  799. package/dist/interactions/gestures/shared/screenTolerance.js +21 -0
  800. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -0
  801. package/dist/interactions/gestures/shared/snap.js +24 -0
  802. package/dist/interactions/gestures/shared/snap.js.map +1 -0
  803. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +30 -0
  804. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -0
  805. package/dist/layout/arrivals.js +36 -0
  806. package/dist/layout/arrivals.js.map +1 -0
  807. package/dist/{math-MCQcf_gc.d.ts → math-CUMxmZzn.d.ts} +8 -116
  808. package/dist/math.d.ts +4 -5
  809. package/dist/math.js +6 -4
  810. package/dist/mesh.d.ts +268 -0
  811. package/dist/mesh.js +7 -0
  812. package/dist/move.d.ts +7 -48
  813. package/dist/move.js +3 -142
  814. package/dist/originProjection-BSn4xiEy.d.ts +57 -0
  815. package/dist/patterns-builtin.js +3 -3
  816. package/dist/{poseDescriptor-rZa9W5hJ.d.ts → poseDescriptor-CjSXMf8X.d.ts} +3 -3
  817. package/dist/registerProgram-ateHDGjw.d.ts +193 -0
  818. package/dist/renderer/DrawCommand.js +6 -0
  819. package/dist/renderer/DrawCommand.js.map +1 -0
  820. package/dist/renderer/WeaselRenderer.js +328 -0
  821. package/dist/renderer/WeaselRenderer.js.map +1 -0
  822. package/dist/renderer/cache/GLImageCache.js +64 -0
  823. package/dist/renderer/cache/GLImageCache.js.map +1 -0
  824. package/dist/renderer/cache/GLMeshCache.js +102 -0
  825. package/dist/renderer/cache/GLMeshCache.js.map +1 -0
  826. package/dist/renderer/cache/GLTextureCache.js +51 -0
  827. package/dist/renderer/cache/GLTextureCache.js.map +1 -0
  828. package/dist/renderer/cache/GradientRampAtlas.js +82 -0
  829. package/dist/renderer/cache/GradientRampAtlas.js.map +1 -0
  830. package/dist/renderer/cache/cache.js +13 -0
  831. package/dist/renderer/cache/cache.js.map +1 -0
  832. package/dist/renderer/cache/markerCommandCache.js +59 -0
  833. package/dist/renderer/cache/markerCommandCache.js.map +1 -0
  834. package/dist/renderer/cache/outlineMeshCache.js +15 -0
  835. package/dist/renderer/cache/outlineMeshCache.js.map +1 -0
  836. package/dist/renderer/cache/outlineStrokeMeshCache.js +31 -0
  837. package/dist/renderer/cache/outlineStrokeMeshCache.js.map +1 -0
  838. package/dist/renderer/cache/strokeMeshCache.js +44 -0
  839. package/dist/renderer/cache/strokeMeshCache.js.map +1 -0
  840. package/dist/renderer/cullDrawCommands.js +89 -0
  841. package/dist/renderer/cullDrawCommands.js.map +1 -0
  842. package/dist/renderer/draw.js +1109 -0
  843. package/dist/renderer/draw.js.map +1 -0
  844. package/dist/renderer/drawBatch.js +168 -0
  845. package/dist/renderer/drawBatch.js.map +1 -0
  846. package/dist/renderer/effects/EffectTargets.js +45 -0
  847. package/dist/renderer/effects/EffectTargets.js.map +1 -0
  848. package/dist/renderer/effects/builtins.js +31 -0
  849. package/dist/renderer/effects/builtins.js.map +1 -0
  850. package/dist/renderer/effects/composite.js +9 -0
  851. package/dist/renderer/effects/composite.js.map +1 -0
  852. package/dist/renderer/effects/effectPrelude.js +10 -0
  853. package/dist/renderer/effects/effectPrelude.js.map +1 -0
  854. package/dist/renderer/effects/types.js +10 -0
  855. package/dist/renderer/effects/types.js.map +1 -0
  856. package/dist/renderer/index.js +19 -0
  857. package/dist/renderer/math/color.js +341 -0
  858. package/dist/renderer/math/color.js.map +1 -0
  859. package/dist/renderer/math/mat3.js +71 -0
  860. package/dist/renderer/math/mat3.js.map +1 -0
  861. package/dist/renderer/math/patternSpace.js +22 -0
  862. package/dist/renderer/math/patternSpace.js.map +1 -0
  863. package/dist/renderer/math/viewToMat3.js +19 -0
  864. package/dist/renderer/math/viewToMat3.js.map +1 -0
  865. package/dist/renderer/paintResources.js +18 -0
  866. package/dist/renderer/paintResources.js.map +1 -0
  867. package/dist/renderer/paintScratch.js +37 -0
  868. package/dist/renderer/paintScratch.js.map +1 -0
  869. package/dist/renderer/shaders/ShaderProgram.js +74 -0
  870. package/dist/renderer/shaders/ShaderProgram.js.map +1 -0
  871. package/dist/renderer/shaders/batchFill.js +118 -0
  872. package/dist/renderer/shaders/batchFill.js.map +1 -0
  873. package/dist/renderer/shaders/customPrelude.js +34 -0
  874. package/dist/renderer/shaders/customPrelude.js.map +1 -0
  875. package/dist/renderer/shaders/extractUniformNames.js +184 -0
  876. package/dist/renderer/shaders/extractUniformNames.js.map +1 -0
  877. package/dist/renderer/shaders/glyphPaint.js +61 -0
  878. package/dist/renderer/shaders/glyphPaint.js.map +1 -0
  879. package/dist/renderer/shaders/gradFill.js +30 -0
  880. package/dist/renderer/shaders/gradFill.js.map +1 -0
  881. package/dist/renderer/shaders/imageFill.js +14 -0
  882. package/dist/renderer/shaders/imageFill.js.map +1 -0
  883. package/dist/renderer/shaders/pathFill.js +13 -0
  884. package/dist/renderer/shaders/pathFill.js.map +1 -0
  885. package/dist/renderer/shaders/patternFill.js +24 -0
  886. package/dist/renderer/shaders/patternFill.js.map +1 -0
  887. package/dist/renderer/shaders/registerProgram.js +18 -0
  888. package/dist/renderer/shaders/registerProgram.js.map +1 -0
  889. package/dist/renderer/spriteSheet.js +14 -0
  890. package/dist/renderer/spriteSheet.js.map +1 -0
  891. package/dist/renderer/state/GroupState.js +77 -0
  892. package/dist/renderer/state/GroupState.js.map +1 -0
  893. package/dist/renderer/syntheticItalic.js +6 -0
  894. package/dist/renderer/syntheticItalic.js.map +1 -0
  895. package/dist/renderer/textures/registerTexture.js +14 -0
  896. package/dist/renderer/textures/registerTexture.js.map +1 -0
  897. package/dist/renderer.d.ts +18 -20
  898. package/dist/renderer.js +18 -13
  899. package/dist/resize.d.ts +10 -46
  900. package/dist/resize.js +7 -5
  901. package/dist/routing.d.ts +1 -1
  902. package/dist/routing.js +2 -3
  903. package/dist/scheduling/useVisibleRaf.js +69 -0
  904. package/dist/scheduling/useVisibleRaf.js.map +1 -0
  905. package/dist/test-hook/createTestHook.js +39 -0
  906. package/dist/test-hook/createTestHook.js.map +1 -0
  907. package/dist/test-hook/install.js +12 -0
  908. package/dist/test-hook/install.js.map +1 -0
  909. package/dist/test-seams-fYf6m5pu.d.ts +356 -0
  910. package/dist/test-seams.d.ts +6 -0
  911. package/dist/test-seams.js +3 -0
  912. package/dist/tools/builtin/ellipse/useEllipseTool.js +33 -0
  913. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -0
  914. package/dist/tools/builtin/eyedropper/useEyedropperTool.js +55 -0
  915. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -0
  916. package/dist/tools/builtin/hand/dragPanContribution.js +17 -0
  917. package/dist/tools/builtin/hand/dragPanContribution.js.map +1 -0
  918. package/dist/tools/builtin/hand/useHandTool.js +31 -0
  919. package/dist/tools/builtin/hand/useHandTool.js.map +1 -0
  920. package/dist/tools/builtin/image/useImageTool.js +41 -0
  921. package/dist/tools/builtin/image/useImageTool.js.map +1 -0
  922. package/dist/tools/builtin/lasso/useLassoTool.js +42 -0
  923. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -0
  924. package/dist/tools/builtin/line/useLineTool.js +33 -0
  925. package/dist/tools/builtin/line/useLineTool.js.map +1 -0
  926. package/dist/tools/builtin/pen/usePenTool.js +414 -0
  927. package/dist/tools/builtin/pen/usePenTool.js.map +1 -0
  928. package/dist/tools/builtin/pencil/usePencilTool.js +36 -0
  929. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -0
  930. package/dist/tools/builtin/pickTopMostHit.js +45 -0
  931. package/dist/tools/builtin/pickTopMostHit.js.map +1 -0
  932. package/dist/tools/builtin/polygon/usePolygonTool.js +81 -0
  933. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -0
  934. package/dist/tools/builtin/rect/useRectTool.js +32 -0
  935. package/dist/tools/builtin/rect/useRectTool.js.map +1 -0
  936. package/dist/tools/builtin/select/selectionContributions.js +109 -0
  937. package/dist/tools/builtin/select/selectionContributions.js.map +1 -0
  938. package/dist/tools/builtin/select/useSelectTool.js +162 -0
  939. package/dist/tools/builtin/select/useSelectTool.js.map +1 -0
  940. package/dist/tools/builtin/shared/insertToolOptions.js +8 -0
  941. package/dist/tools/builtin/shared/insertToolOptions.js.map +1 -0
  942. package/dist/tools/builtin/slice/useSliceTool.js +263 -0
  943. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -0
  944. package/dist/tools/builtin/star/useStarTool.js +82 -0
  945. package/dist/tools/builtin/star/useStarTool.js.map +1 -0
  946. package/dist/tools/builtin/text/useTextTool.js +177 -0
  947. package/dist/tools/builtin/text/useTextTool.js.map +1 -0
  948. package/dist/tools/overlayBinding.js +8 -0
  949. package/dist/tools/overlayBinding.js.map +1 -0
  950. package/dist/tools/prefs.js +47 -0
  951. package/dist/tools/prefs.js.map +1 -0
  952. package/dist/tools/useKeybindings.js +66 -0
  953. package/dist/tools/useKeybindings.js.map +1 -0
  954. package/dist/{types-CxC8P6W0.d.ts → types-CA54-mAZ.d.ts} +188 -17
  955. package/dist/{types-D_74YlWs.d.ts → types-DSjd6W3n.d.ts} +35 -12
  956. package/dist/util/color.js +26 -0
  957. package/dist/util/color.js.map +1 -0
  958. package/dist/util/constrainTo45.js +17 -0
  959. package/dist/util/constrainTo45.js.map +1 -0
  960. package/dist/util/paint.js +72 -0
  961. package/dist/util/paint.js.map +1 -0
  962. package/dist/version.js +6 -0
  963. package/dist/version.js.map +1 -0
  964. package/package.json +31 -18
  965. package/dist/chunk-44EWMJV2.js +0 -128
  966. package/dist/chunk-44EWMJV2.js.map +0 -1
  967. package/dist/chunk-4RJP2N2L.js +0 -143
  968. package/dist/chunk-4RJP2N2L.js.map +0 -1
  969. package/dist/chunk-BJN5ZRIJ.js +0 -167
  970. package/dist/chunk-BJN5ZRIJ.js.map +0 -1
  971. package/dist/chunk-D4AAWR64.js +0 -28
  972. package/dist/chunk-D4AAWR64.js.map +0 -1
  973. package/dist/chunk-DOBSZOPR.js +0 -29
  974. package/dist/chunk-DOBSZOPR.js.map +0 -1
  975. package/dist/chunk-H6N2JSZ3.js +0 -248
  976. package/dist/chunk-H6N2JSZ3.js.map +0 -1
  977. package/dist/chunk-HPFJUUTF.js +0 -167
  978. package/dist/chunk-HPFJUUTF.js.map +0 -1
  979. package/dist/chunk-L5YNZYEG.js +0 -648
  980. package/dist/chunk-L5YNZYEG.js.map +0 -1
  981. package/dist/chunk-MZAIDI6D.js +0 -32492
  982. package/dist/chunk-MZAIDI6D.js.map +0 -1
  983. package/dist/chunk-PNNZSYRD.js +0 -318
  984. package/dist/chunk-PNNZSYRD.js.map +0 -1
  985. package/dist/chunk-RMR4QMM6.js +0 -250
  986. package/dist/chunk-RMR4QMM6.js.map +0 -1
  987. package/dist/clipboard.js.map +0 -1
  988. package/dist/clone.js.map +0 -1
  989. package/dist/grid-BXdz8GF2.d.ts +0 -158
  990. package/dist/index.css.map +0 -1
  991. package/dist/index.js.map +0 -1
  992. package/dist/insert.d.ts +0 -37
  993. package/dist/insert.js +0 -81
  994. package/dist/insert.js.map +0 -1
  995. package/dist/math.js.map +0 -1
  996. package/dist/move.js.map +0 -1
  997. package/dist/options-CzjxFoYZ.d.ts +0 -67
  998. package/dist/path-JEV2c5If.d.ts +0 -48
  999. package/dist/patterns-builtin.js.map +0 -1
  1000. package/dist/renderer.css +0 -86
  1001. package/dist/renderer.css.map +0 -1
  1002. package/dist/renderer.js.map +0 -1
  1003. package/dist/resize.js.map +0 -1
  1004. package/dist/routing.js.map +0 -1
  1005. package/dist/types-D2tTKEU0.d.ts +0 -18
@@ -0,0 +1,332 @@
1
+ import { fromPlane as e, toPlane as t } from "../../../core/viewport/parallax.js";
2
+ import { dropPreviewOverrides as n, syncPreviewOverrides as r } from "../previewOverrides.js";
3
+ import { poseRotationOf as i } from "../../../core/geometry/poseRotation.js";
4
+ import { gesturePlaneReader as a, gestureViewReader as o } from "../../gestures/shared/screenTolerance.js";
5
+ import { commitGestureOps as s, readGestureLifecycle as c, reduceBehaviorEnd as l, runBehaviorCancel as u } from "../gestureLifecycle.js";
6
+ import { createTransformOp as d } from "../../../core/ops/transform.js";
7
+ import { geometryDataOp as f } from "../geometryProjection.js";
8
+ import { unionBounds as p } from "../../../core/geometry/unionBounds.js";
9
+ import { remapRotatedLeaf as m, translatePoseViaDescriptor as h } from "../../../core/geometry/poseDescriptor.js";
10
+ import { poseDescriptorOf as g } from "../poseDescriptorDep.js";
11
+ import { inPlane as _, selectionLayer as v } from "../planeInput.js";
12
+ import { DEFAULT_RESIZE_BEHAVIORS as y } from "../resize/behaviors/index.js";
13
+ import { fixedCornerOf as b } from "../resize/cornerHandles.js";
14
+ import { rotatePoint as x } from "../rotate/geometry.js";
15
+ import { defaultCommitAdapter as S } from "../defaultCommitAdapter.js";
16
+ import { scenePoseFrame as C } from "../poseFrame.js";
17
+ import { boxToBox as w } from "@weasel-js/geom";
18
+ //#region src/interactions/actions/defaults/resize.ts
19
+ var T = (e) => e, E = [];
20
+ function D(e) {
21
+ let t = g(e.deps.poseDescriptor), n = e.deps.resizePolicy;
22
+ return n ? {
23
+ behaviors: n.constraints,
24
+ pointSnap: n.pointSnap,
25
+ expandIds: n.expandIds,
26
+ geometry: t,
27
+ policy: n
28
+ } : {
29
+ behaviors: y,
30
+ pointSnap: E,
31
+ expandIds: T,
32
+ geometry: t,
33
+ policy: void 0
34
+ };
35
+ }
36
+ function ee(e, t, n, r) {
37
+ let i = e.x + e.width / 2, a = e.y + e.height / 2, o = x(e.x, e.y, i, a, t), s = x(e.x + e.width, e.y, i, a, t), c = x(e.x + e.width, e.y + e.height, i, a, t), l = x(e.x, e.y + e.height, i, a, t), u = null, d = null;
38
+ if (n.x !== "free" && n.y !== "free") {
39
+ let e = n.x === "min" && n.y === "min" ? o : n.x === "max" && n.y === "min" ? s : n.x === "max" && n.y === "max" ? c : l, t = n.x === "min" && n.y === "min" ? c : n.x === "max" && n.y === "min" ? l : n.x === "max" && n.y === "max" ? o : s;
40
+ d = {
41
+ worldX: e.x,
42
+ worldY: e.y
43
+ }, u = {
44
+ worldX: t.x,
45
+ worldY: t.y
46
+ };
47
+ }
48
+ return {
49
+ draggedCorner: u,
50
+ fixedCorner: d,
51
+ center: {
52
+ worldX: i,
53
+ worldY: a
54
+ },
55
+ origin: {
56
+ worldX: o.x,
57
+ worldY: o.y
58
+ },
59
+ rotation: t,
60
+ anchor: n,
61
+ proposed: e,
62
+ modifiers: r
63
+ };
64
+ }
65
+ function te(e, t, n, r) {
66
+ if (n.frame === "center") {
67
+ let t = n.worldX - r.center.worldX, i = n.worldY - r.center.worldY;
68
+ return {
69
+ ...e,
70
+ x: e.x + t,
71
+ y: e.y + i
72
+ };
73
+ }
74
+ if (n.frame === "origin") {
75
+ let t = n.worldX - r.origin.worldX, i = n.worldY - r.origin.worldY;
76
+ return {
77
+ ...e,
78
+ x: e.x + t,
79
+ y: e.y + i
80
+ };
81
+ }
82
+ let i = n.frame === "dragged-corner" ? r.fixedCorner : r.draggedCorner;
83
+ if (!i) return e;
84
+ let a = n.worldX - i.worldX, o = n.worldY - i.worldY, s = Math.cos(t), c = Math.sin(t), l = a * s + o * c, u = -a * c + o * s, d = Math.abs(l), f = Math.abs(u), p = (i.worldX + n.worldX) / 2, m = (i.worldY + n.worldY) / 2;
85
+ return {
86
+ ...e,
87
+ x: p - d / 2,
88
+ y: m - f / 2,
89
+ width: d,
90
+ height: f
91
+ };
92
+ }
93
+ function O(t, n) {
94
+ let r = (t) => {
95
+ let r = e(n, {
96
+ x: t.worldX,
97
+ y: t.worldY
98
+ });
99
+ return {
100
+ worldX: r.x,
101
+ worldY: r.y
102
+ };
103
+ };
104
+ return {
105
+ ...t,
106
+ draggedCorner: t.draggedCorner && r(t.draggedCorner),
107
+ fixedCorner: t.fixedCorner && r(t.fixedCorner),
108
+ center: r(t.center),
109
+ origin: r(t.origin)
110
+ };
111
+ }
112
+ function k(e, n) {
113
+ if (!e) return e;
114
+ let r = t(n, {
115
+ x: e.worldX,
116
+ y: e.worldY
117
+ });
118
+ return {
119
+ ...e,
120
+ worldX: r.x,
121
+ worldY: r.y
122
+ };
123
+ }
124
+ function A(e, t, n, r, i) {
125
+ if (i !== 0) {
126
+ let e = Math.cos(-i), t = Math.sin(-i), a = e * n - t * r, o = t * n + e * r;
127
+ n = a, r = o;
128
+ }
129
+ let a = e.x, o = e.y, s = e.width, c = e.height;
130
+ return t.x === "min" ? s = e.width + n : t.x === "max" && (a = e.x + n, s = e.width - n), t.y === "min" ? c = e.height + r : t.y === "max" && (o = e.y + r, c = e.height - r), {
131
+ x: a,
132
+ y: o,
133
+ width: s,
134
+ height: c
135
+ };
136
+ }
137
+ var j = _({
138
+ id: "resize",
139
+ label: "Resize",
140
+ eligible: { capability: "transforms-selection" },
141
+ requires: [
142
+ "selection",
143
+ "scene",
144
+ "resizePolicy",
145
+ "poseDescriptor",
146
+ "applyOps",
147
+ "geometryProjection",
148
+ "poseComposition",
149
+ "view"
150
+ ],
151
+ invoker: {
152
+ timing: "ongoing",
153
+ start(e, t) {
154
+ let g = e.deps.selection, _ = e.deps.scene, v = e.deps.applyOps, y = e.deps.geometryProjection;
155
+ if (!g || !_) return {};
156
+ let T = g.get();
157
+ if (T.length === 0) return {};
158
+ let E = e.drag?.affordance?.anchor;
159
+ if (!E) return {};
160
+ let { behaviors: j, pointSnap: M, expandIds: N, geometry: P, policy: F } = D(e), I = N(T);
161
+ if (I.length === 0) return {};
162
+ let L = T.length === 1 && (I.length !== 1 || I[0] !== T[0]), R = L ? I : T, z = C(_, e.deps.poseComposition), B = /* @__PURE__ */ new Map(), V = /* @__PURE__ */ new Map(), H = [];
163
+ for (let e of R) {
164
+ let t = _.get(e);
165
+ if (!t) continue;
166
+ B.set(e, t.pose);
167
+ let n = z.world(e);
168
+ V.set(e, n), H.push(P.getBounds(n));
169
+ }
170
+ if (B.size === 0) return {};
171
+ let U = H.length === 1 ? H[0] : p(H), W = !L && R.length === 1 ? V.get(R[0]) : U, G = L ? 0 : P.getRotation?.(W) ?? 0, K = b(U, E), q = G === 0 ? K : x(K.x, K.y, U.x + U.width / 2, U.y + U.height / 2, G), J = {
172
+ x: e.drag?.start.x ?? 0,
173
+ y: e.drag?.start.y ?? 0
174
+ }, Y = o(e.deps), X = a(e.deps), Z = {
175
+ draggedIds: T,
176
+ origin: /* @__PURE__ */ new Map([[T[0], W]]),
177
+ current: /* @__PURE__ */ new Map([[T[0], W]]),
178
+ snap: null,
179
+ modifiers: { ...e.modifiers },
180
+ pointer: {
181
+ worldX: J.x,
182
+ worldY: J.y,
183
+ clientX: 0,
184
+ clientY: 0
185
+ },
186
+ view: Y(),
187
+ plane: X(),
188
+ adapter: void 0,
189
+ scratch: {}
190
+ }, ne = Z;
191
+ for (let e of j) e.onStart?.(ne);
192
+ let Q = {
193
+ writeIds: R,
194
+ scene: _,
195
+ frame: z,
196
+ startPoses: B,
197
+ startWorlds: V,
198
+ originBounds: U,
199
+ anchor: E,
200
+ startWorld: J,
201
+ originRotation: G,
202
+ fixedWorld: q,
203
+ previews: /* @__PURE__ */ new Map(),
204
+ overrideEntries: /* @__PURE__ */ new Map(),
205
+ geometry: P,
206
+ behaviors: j,
207
+ pointSnap: M,
208
+ gestureCtx: Z,
209
+ applyOps: v,
210
+ geometryProjection: y,
211
+ lifecycle: c(F, "Resize", j)
212
+ }, { lifecycle: $ } = Q;
213
+ $.start(R);
214
+ let re = () => {
215
+ let e = {
216
+ scene: _,
217
+ applyOps: Q.applyOps,
218
+ adapter: S(_, g.adapterMethods)
219
+ }, t = l(Q.behaviors, Q.gestureCtx);
220
+ if (t === null) return !1;
221
+ if (t !== void 0) return s(e, $, t), !0;
222
+ if (Q.previews.size === 0) return !1;
223
+ let n = [];
224
+ for (let e of Q.writeIds) {
225
+ let t = Q.previews.get(e);
226
+ if (t === void 0) continue;
227
+ let r = Q.startPoses.get(e);
228
+ if (r === void 0) continue;
229
+ let i = t;
230
+ if (Q.geometryProjection) {
231
+ let a = Q.scene.get(e);
232
+ if (a) {
233
+ let o = Q.geometry.getBounds(r), s = Q.geometry.getBounds(t), c = w(o.x, o.y, o.width, o.height, s.x, s.y, s.width, s.height), l = f(Q.geometryProjection, {
234
+ id: e,
235
+ data: a.data,
236
+ pose: r
237
+ }, c, $.label);
238
+ if (l && (n.push(l), s.width < 0 || s.height < 0)) {
239
+ let e = {
240
+ ...s,
241
+ x: s.width < 0 ? s.x + s.width : s.x,
242
+ y: s.height < 0 ? s.y + s.height : s.y,
243
+ width: Math.abs(s.width),
244
+ height: Math.abs(s.height)
245
+ };
246
+ i = Q.geometry.remapBounds(t, s, e);
247
+ }
248
+ }
249
+ }
250
+ n.push(d({
251
+ id: e,
252
+ from: r,
253
+ to: i,
254
+ label: $.label
255
+ }));
256
+ }
257
+ return n.length !== 0 && (s(e, $, n), !0);
258
+ };
259
+ return {
260
+ kind: "resize",
261
+ onMove(e) {
262
+ if (!e.drag) return;
263
+ let t = e.drag.current.x - Q.startWorld.x, n = e.drag.current.y - Q.startWorld.y;
264
+ Q.gestureCtx.modifiers = { ...e.modifiers }, Q.gestureCtx.pointer = {
265
+ worldX: e.drag.current.x,
266
+ worldY: e.drag.current.y,
267
+ clientX: 0,
268
+ clientY: 0
269
+ }, Q.gestureCtx.view = Y(), Q.gestureCtx.plane = X();
270
+ let a = A(Q.originBounds, Q.anchor, t, n, Q.originRotation), o = Q.gestureCtx;
271
+ for (let e of Q.behaviors) {
272
+ let t = e.onMove?.(o, {
273
+ pose: a,
274
+ anchor: Q.anchor
275
+ });
276
+ t && t.pose !== void 0 && (a = {
277
+ x: t.pose.x,
278
+ y: t.pose.y,
279
+ width: t.pose.width,
280
+ height: t.pose.height
281
+ });
282
+ }
283
+ let s = (e) => {
284
+ let t = Q.startWorlds.get(e);
285
+ if (t !== void 0) return L && i(t) !== null ? m(t, Q.originBounds, a) : Q.geometry.remapBounds(t, Q.originBounds, a);
286
+ };
287
+ if (Q.previews.clear(), !L && Q.writeIds.length === 1) {
288
+ let e = Q.writeIds[0], t = s(e);
289
+ if (t === void 0) {
290
+ r(Q);
291
+ return;
292
+ }
293
+ if (Q.originRotation !== 0) {
294
+ let e = a.x + a.width / 2, n = a.y + a.height / 2, r = b(a, Q.anchor), i = x(r.x, r.y, e, n, Q.originRotation), o = Q.fixedWorld.x - i.x, s = Q.fixedWorld.y - i.y;
295
+ t = h(t, o, s, Q.geometry);
296
+ }
297
+ if (Q.pointSnap.length > 0) {
298
+ let e = Q.originRotation, n = t, r = ee(n, e, Q.anchor, Q.gestureCtx.modifiers), i = Q.gestureCtx.plane ?? null;
299
+ for (let a of Q.pointSnap) {
300
+ let o = i ? k(a.onMove(O(r, i)), i) : a.onMove(r);
301
+ if (o) {
302
+ t = te(n, e, o, r);
303
+ break;
304
+ }
305
+ }
306
+ }
307
+ Q.previews.set(e, Q.frame.local(e, t)), Q.gestureCtx.current = /* @__PURE__ */ new Map([[e, t]]);
308
+ } else for (let e of Q.writeIds) {
309
+ let t = s(e);
310
+ t !== void 0 && Q.previews.set(e, Q.frame.local(e, t));
311
+ }
312
+ r(Q);
313
+ },
314
+ onEnd(e, t) {
315
+ let r = !1;
316
+ try {
317
+ t === "commit" ? r = re() : u(Q.behaviors, Q.gestureCtx);
318
+ } finally {
319
+ n(Q), Q.previews.clear(), $.end(r);
320
+ }
321
+ },
322
+ previewIds: () => Q.previews.keys(),
323
+ previewPose: (e) => Q.previews.get(e) ?? null
324
+ };
325
+ }
326
+ },
327
+ enabled: () => !0
328
+ }, v);
329
+ //#endregion
330
+ export { j as resizeAction };
331
+
332
+ //# sourceMappingURL=resize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize.js","names":["IDENTITY_EXPAND","ids","EMPTY_POINT_SNAP","resolveDeps","geometry","poseDescriptorOf","ctx","dep","DEFAULT_RESIZE_BEHAVIORS","buildPointSnapContext","cx","pose","cy","tl","rotatePoint","rotation","tr","br","bl","draggedCorner","fixedCorner","anchor","fixedPt","draggedPt","applyPointSnap","result","dx","dy","pin","Dx","Dy","cos","sin","localW","localH","newWidth","newHeight","newCx","newCy","pointSnapToCamera","cam","w","fromPlane","m","p","pointSnapFromPlane","r","toPlane","computeProposedBounds","cs","sn","dxLocal","dyLocal","nx","ob","ny","nw","nh","resizeAction","inPlane","selection","scene","applyOps","geometryProjection","expanded","expandIds","isGroupPath","writeIds","frame","scenePoseFrame","startPoses","startWorlds","leafBounds","id","node","world","originBounds","unionBounds","originPose","originRotation","fixedLocal","fixedCornerOf","fixedWorld","startWorld","readView","gestureViewReader","readPlane","gesturePlaneReader","gestureCtx","ctxAsRect","b","behaviors","scratch","readGestureLifecycle","policy","commitResize","target","defaultCommitAdapter","reduceBehaviorEnd","commitGestureOps","lifecycle","ops","next","from","committed","sb","db","boxToBox","dataOp","geometryDataOp","nb","createTransformOp","mctx","proposedBounds","behaviorCtx","computePose","sp","poseRotationOf","remapRotatedLeaf","proposedPose","newCenterX","newCenterY","newFixedLocal","newFixedWorld","correctionX","correctionY","translatePoseViaDescriptor","poseAsRect","psCtx","plane","beh","reason","runBehaviorCancel","dropPreviewOverrides","selectionLayer"],"sources":["../../../../src/interactions/actions/defaults/resize.ts"],"sourcesContent":["/**\n * `resizeAction` — ongoing Action descriptor for anchor-relative drag resize.\n *\n * ## Status: REAL\n *\n * Performs real anchor-relative resize math for rect-shaped poses. Reads\n * `ctx.drag.affordance.anchor` to determine which corner is fixed, captures\n * start poses, applies per-frame bounds remapping, and commits one batch on\n * end — labeled, transient and observed per the `resizePolicy` dep's\n * lifecycle fields.\n *\n * ## Behaviors / point-snap / expandIds — via the `resizePolicy` dep\n *\n * The `resizePolicy` dep carries the behavior options the legacy `useResize`\n * hook exposed (`behaviors`, `pointSnapBehaviors`, `expandIds`). When the dep\n * is registered, this invoker:\n *\n * - Calls `expandIds([id])` at start. When the result expands beyond the\n * starting id, takes the group path (union-AABB origin, per-leaf remap).\n * - Runs `behaviors[]` after the raw anchor-math bounds are computed.\n * Behaviors return `{ pose? }` and rewrite the proposed bounds before\n * they're projected back into pose space.\n * - Runs `pointSnap[]` after the bounds→pose projection. The first non-null\n * `PointSnapResult` wins; this invoker back-solves a pose so the chosen\n * frame's world point lands on the snap target.\n *\n * When the dep is absent the invoker falls back to identity defaults\n * (no behaviors, no snap, `ids => ids` expansion).\n *\n * ## Pose geometry — via the `poseDescriptor` dep\n *\n * Every pose read and rewrite goes through the `poseDescriptor` dep, which\n * `<SceneCanvas>` sources from its `poseDescriptor` prop. Unsourced it is\n * `AUTO_POSE_DESCRIPTOR`, which dispatches per call to `pathPoseDescriptor`\n * for Path-shaped poses and to `RECT_POSE_DESCRIPTOR` for everything else.\n *\n * @see useResize — the React hook this descriptor mirrors.\n * @see src/interactions/actions/resize/geometry.ts — `PoseDescriptor`.\n */\n\nimport { gesturePlaneReader, gestureViewReader } from '../../gestures/shared/screenTolerance';\nimport type { Action } from '@weasel-js/routing';\nimport type { InvocationCtx, OngoingHandle } from '@weasel-js/routing';\nimport type { Scene, NodeId } from 'core/scene/types';\nimport { syncPreviewOverrides, dropPreviewOverrides } from '../previewOverrides';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport type {\n GestureContext,\n ModifierState,\n PointSnapBehavior,\n PointSnapContext,\n PointSnapResult,\n ResizeAnchor,\n BoundsConstraint,\n RotatedPose,\n} from '../../gestures/types';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\nimport type { ResizePolicy } from '../depSchema';\nimport { DEFAULT_RESIZE_BEHAVIORS } from '../resize/behaviors';\nimport { remapRotatedLeaf, translatePoseViaDescriptor, type PoseDescriptor } from '../resize/geometry';\nimport { poseRotationOf } from 'core/geometry/poseRotation';\nimport { poseDescriptorOf } from '../poseDescriptorDep';\nimport { fixedCornerOf } from '../resize/cornerHandles';\nimport { rotatePoint } from '../rotate/geometry';\nimport type { Op } from 'core/ops/types';\nimport type { Mat3 } from '@weasel-js/geom';\nimport { boxToBox } from '@weasel-js/geom';\nimport { createTransformOp } from 'core/ops/transform';\nimport { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport { geometryDataOp, type GeometryProjection } from '../geometryProjection';\nimport { unionBounds } from 'core/geometry/unionBounds';\nimport { scenePoseFrame, type PoseFrame } from '../poseFrame';\nimport { commitGestureOps, readGestureLifecycle, reduceBehaviorEnd, runBehaviorCancel, type GestureLifecycle } from '../gestureLifecycle';\nimport { inPlane, selectionLayer } from '../planeInput';\nimport { fromPlane, toPlane, type PlaneMap } from 'core/viewport/parallax';\n\n// ---------------------------------------------------------------------------\n// Defaults applied when `resizePolicy` dep is absent. Mirrors the\n// destructuring defaults in `useResize`.\n// ---------------------------------------------------------------------------\n\nconst IDENTITY_EXPAND = (ids: string[]) => ids;\nconst EMPTY_POINT_SNAP: PointSnapBehavior<Bounds>[] = [];\n\nfunction resolveDeps(ctx: InvocationCtx): {\n behaviors: BoundsConstraint<Bounds>[];\n pointSnap: PointSnapBehavior<Bounds>[];\n expandIds: (ids: string[]) => string[];\n geometry: PoseDescriptor<unknown>;\n policy: ResizePolicy<unknown> | undefined;\n} {\n const geometry = poseDescriptorOf(ctx.deps.poseDescriptor);\n const dep = ctx.deps.resizePolicy as ResizePolicy<unknown> | undefined;\n if (!dep) {\n return {\n // Standard kit behaviors (shift = aspect lock) apply even with no\n // policy wired; consumers opt out via an explicit `behaviors: []`.\n behaviors: DEFAULT_RESIZE_BEHAVIORS as BoundsConstraint<Bounds>[],\n pointSnap: EMPTY_POINT_SNAP,\n expandIds: IDENTITY_EXPAND,\n geometry,\n policy: undefined,\n };\n }\n return {\n behaviors: dep.constraints as unknown as BoundsConstraint<Bounds>[],\n pointSnap: dep.pointSnap as unknown as PointSnapBehavior<Bounds>[],\n expandIds: dep.expandIds,\n geometry,\n policy: dep,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Point-snap math (lifted from `useResize`).\n// ---------------------------------------------------------------------------\n\nfunction buildPointSnapContext<TPose extends Bounds>(\n pose: TPose,\n rotation: number,\n anchor: ResizeAnchor,\n modifiers: ModifierState,\n): PointSnapContext<TPose> {\n const cx = pose.x + pose.width / 2;\n const cy = pose.y + pose.height / 2;\n\n const tl = rotatePoint(pose.x, pose.y, cx, cy, rotation);\n const tr = rotatePoint(pose.x + pose.width, pose.y, cx, cy, rotation);\n const br = rotatePoint(pose.x + pose.width, pose.y + pose.height, cx, cy, rotation);\n const bl = rotatePoint(pose.x, pose.y + pose.height, cx, cy, rotation);\n\n let draggedCorner: { worldX: number; worldY: number } | null = null;\n let fixedCorner: { worldX: number; worldY: number } | null = null;\n\n if (anchor.x !== 'free' && anchor.y !== 'free') {\n const fixedPt =\n anchor.x === 'min' && anchor.y === 'min' ? tl :\n anchor.x === 'max' && anchor.y === 'min' ? tr :\n anchor.x === 'max' && anchor.y === 'max' ? br : bl;\n const draggedPt =\n anchor.x === 'min' && anchor.y === 'min' ? br :\n anchor.x === 'max' && anchor.y === 'min' ? bl :\n anchor.x === 'max' && anchor.y === 'max' ? tl : tr;\n fixedCorner = { worldX: fixedPt.x, worldY: fixedPt.y };\n draggedCorner = { worldX: draggedPt.x, worldY: draggedPt.y };\n }\n\n return {\n draggedCorner,\n fixedCorner,\n center: { worldX: cx, worldY: cy },\n origin: { worldX: tl.x, worldY: tl.y },\n rotation,\n anchor,\n proposed: pose,\n modifiers,\n };\n}\n\nfunction applyPointSnap<TPose extends Bounds>(\n pose: TPose,\n rotation: number,\n result: PointSnapResult,\n ctx: PointSnapContext<TPose>,\n): TPose {\n if (result.frame === 'center') {\n const dx = result.worldX - ctx.center.worldX;\n const dy = result.worldY - ctx.center.worldY;\n return { ...pose, x: pose.x + dx, y: pose.y + dy };\n }\n if (result.frame === 'origin') {\n const dx = result.worldX - ctx.origin.worldX;\n const dy = result.worldY - ctx.origin.worldY;\n return { ...pose, x: pose.x + dx, y: pose.y + dy };\n }\n const pin = result.frame === 'dragged-corner' ? ctx.fixedCorner : ctx.draggedCorner;\n if (!pin) return pose;\n const Dx = result.worldX - pin.worldX;\n const Dy = result.worldY - pin.worldY;\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n const localW = Dx * cos + Dy * sin;\n const localH = -Dx * sin + Dy * cos;\n const newWidth = Math.abs(localW);\n const newHeight = Math.abs(localH);\n const newCx = (pin.worldX + result.worldX) / 2;\n const newCy = (pin.worldY + result.worldY) / 2;\n return { ...pose, x: newCx - newWidth / 2, y: newCy - newHeight / 2, width: newWidth, height: newHeight };\n}\n\n/** `ctx`'s points in the camera's world, for a snap rule written against it. */\nfunction pointSnapToCamera<TPose extends Bounds>(\n ctx: PointSnapContext<TPose>,\n m: PlaneMap,\n): PointSnapContext<TPose> {\n const cam = (p: { worldX: number; worldY: number }) => {\n const w = fromPlane(m, { x: p.worldX, y: p.worldY });\n return { worldX: w.x, worldY: w.y };\n };\n return {\n ...ctx,\n draggedCorner: ctx.draggedCorner && cam(ctx.draggedCorner),\n fixedCorner: ctx.fixedCorner && cam(ctx.fixedCorner),\n center: cam(ctx.center),\n origin: cam(ctx.origin),\n };\n}\n\n/** A snap rule's answer, back in the plane the resize works in. */\nfunction pointSnapFromPlane(\n r: PointSnapResult | null | undefined,\n m: PlaneMap,\n): PointSnapResult | null | undefined {\n if (!r) return r;\n const p = toPlane(m, { x: r.worldX, y: r.worldY });\n return { ...r, worldX: p.x, worldY: p.y };\n}\n\n// ---------------------------------------------------------------------------\n// Anchor math (rotated and unrotated).\n// ---------------------------------------------------------------------------\n\nfunction computeProposedBounds(\n ob: Bounds,\n anchor: ResizeAnchor,\n dx: number,\n dy: number,\n rotation: number,\n): Bounds {\n if (rotation !== 0) {\n const cs = Math.cos(-rotation);\n const sn = Math.sin(-rotation);\n const dxLocal = cs * dx - sn * dy;\n const dyLocal = sn * dx + cs * dy;\n dx = dxLocal;\n dy = dyLocal;\n }\n let nx = ob.x;\n let ny = ob.y;\n let nw = ob.width;\n let nh = ob.height;\n if (anchor.x === 'min') {\n nw = ob.width + dx;\n } else if (anchor.x === 'max') {\n nx = ob.x + dx;\n nw = ob.width - dx;\n }\n if (anchor.y === 'min') {\n nh = ob.height + dy;\n } else if (anchor.y === 'max') {\n ny = ob.y + dy;\n nh = ob.height - dy;\n }\n return { x: nx, y: ny, width: nw, height: nh };\n}\n\n// ---------------------------------------------------------------------------\n// Internal scratch\n// ---------------------------------------------------------------------------\n\ninterface ResizeScratch {\n /** Ids the gesture writes to. For group expansion this is the leaf set;\n * for the single-id path it's the original selection. */\n writeIds: NodeId[];\n scene: Scene<unknown, string, unknown>;\n /** World reads and local writes over the scene's composition strategy. */\n frame: PoseFrame<unknown>;\n /** Start poses keyed by write id, as stored — the `from` of each op. */\n startPoses: Map<NodeId, unknown>;\n /** Start poses in world — the frame the anchor math and the drag share. */\n startWorlds: Map<NodeId, unknown>;\n /** Shared origin bounds (union for group/multi-select, own bounds for\n * single). Used as the `src` rect for `geometry.remapBounds`. */\n originBounds: Bounds;\n anchor: ResizeAnchor;\n startWorld: { x: number; y: number };\n /** Rotation captured at gesture start (from `geometry.getRotation?`). */\n originRotation: number;\n /** World-space position of the diagonally opposite corner at start. Used\n * for the rotated-resize fixed-corner pin correction. */\n fixedWorld: { x: number; y: number };\n /** In-flight preview poses buffered during drag. */\n previews: Map<NodeId, unknown>;\n overrideEntries: Map<NodeId, { pose: unknown }>;\n geometry: PoseDescriptor<unknown>;\n behaviors: BoundsConstraint<Bounds>[];\n pointSnap: PointSnapBehavior<Bounds>[];\n /** Gesture context handed to behaviors. Reused across move/end. */\n gestureCtx: GestureContext<unknown>;\n /** Optional consumer commit hook captured at gesture start. When present,\n * the final pose commit routes through it (consumer history) instead of\n * `scene.applyBatch`. Undefined → fall back to `scene.applyBatch`. */\n applyOps?: (ops: Op[], label: string) => void;\n /** Optional eager-sync seam captured at gesture start. When present, the\n * commit emits a `setData` op per leaf mapping its data-held geometry by\n * the box→box affine the pose underwent. Undefined → pose-only commit. */\n geometryProjection?: GeometryProjection;\n /** Label, history and callbacks from the `resizePolicy` dep. */\n lifecycle: GestureLifecycle;\n}\n\n// ---------------------------------------------------------------------------\n// Descriptor\n// ---------------------------------------------------------------------------\n\n/**\n * @experimental\n * Static descriptor for the `resize` Action.\n *\n * Requires dep-schema entries: `selection`, `scene`.\n * Reads optional `resizePolicy` dep when present.\n * Requires `InvocationCtx.drag.affordance` with a `handle:*` kind.\n */\nexport const resizeAction: Action & { requires: string[] } = inPlane({\n id: 'resize',\n label: 'Resize',\n // No default binding: a bare `{ kind: 'drag' }` claimed every drag at ambient\n // scope, tying areaSelect's. The resize handles bind it\n // (`selectionTransformBindings`, the `transform` preset).\n eligible: { capability: 'transforms-selection' },\n requires: ['selection', 'scene', 'resizePolicy', 'poseDescriptor', 'applyOps', 'geometryProjection', 'poseComposition', 'view'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, _opts): OngoingHandle {\n const selection = ctx.deps.selection as SelectionApi | undefined;\n const scene = ctx.deps.scene as Scene<unknown, string, unknown> | undefined;\n const applyOps = ctx.deps.applyOps as ((ops: Op[], label: string) => void) | undefined;\n const geometryProjection = ctx.deps.geometryProjection as GeometryProjection | undefined;\n\n if (!selection || !scene) return {};\n\n const ids = selection.get() as NodeId[];\n if (ids.length === 0) return {};\n\n const affordance = ctx.drag?.affordance;\n const anchor = affordance?.anchor;\n if (!anchor) return {};\n\n const { behaviors, pointSnap, expandIds, geometry, policy } = resolveDeps(ctx);\n\n // Group expansion. When the starting selection is a single id but\n // `expandIds` returns a different set, we're in the group path:\n // every leaf is written, and origin bounds is the union AABB.\n // When `expandIds` returns the same list (identity default or no-op),\n // we write the selected ids directly.\n const expanded = expandIds(ids as unknown as string[]);\n if (expanded.length === 0) return {};\n\n const isGroupPath =\n ids.length === 1 && (expanded.length !== 1 || expanded[0] !== (ids[0] as string));\n const writeIds = (isGroupPath ? expanded : (ids as unknown as string[])) as NodeId[];\n\n // Capture start poses + per-leaf bounds. The drag delta is world, so\n // the anchor math runs on world poses; each frame's result is stored\n // back in the node's own parent frame.\n const frame = scenePoseFrame(scene, ctx.deps.poseComposition);\n const startPoses = new Map<NodeId, unknown>();\n const startWorlds = new Map<NodeId, unknown>();\n const leafBounds: Bounds[] = [];\n for (const id of writeIds) {\n const node = scene.get(id);\n if (!node) continue;\n startPoses.set(id, node.pose);\n const world = frame.world(id);\n startWorlds.set(id, world);\n leafBounds.push(geometry.getBounds(world));\n }\n if (startPoses.size === 0) return {};\n\n // `leafBounds` is non-empty here (startPoses.size === 0 guarded above),\n // and the union branch only runs for length >= 2 → `!` is safe.\n const originBounds = leafBounds.length === 1\n ? leafBounds[0]\n : unionBounds(leafBounds)!;\n\n // Rotation captured only for the single-write-id path; group-resize\n // takes the AABB-frame (unrotated) path even if leaves have rotation.\n const originPose = !isGroupPath && writeIds.length === 1\n ? startWorlds.get(writeIds[0])\n : (originBounds as unknown);\n const originRotation = !isGroupPath\n ? (geometry.getRotation?.(originPose) ?? 0)\n : 0;\n\n const fixedLocal = fixedCornerOf(originBounds, anchor);\n const fixedWorld = originRotation === 0\n ? fixedLocal\n : rotatePoint(\n fixedLocal.x, fixedLocal.y,\n originBounds.x + originBounds.width / 2,\n originBounds.y + originBounds.height / 2,\n originRotation,\n );\n\n const startWorld = { x: ctx.drag?.start.x ?? 0, y: ctx.drag?.start.y ?? 0 };\n\n // Minimal GestureContext for behaviors. `draggedIds` matches the\n // legacy hook: the starting id (not the expanded leaf set).\n const readView = gestureViewReader(ctx.deps);\n const readPlane = gesturePlaneReader(ctx.deps);\n const gestureCtx: GestureContext<unknown> = {\n draggedIds: ids as unknown as string[],\n origin: new Map<string, unknown>([[ids[0] as string, originPose]]),\n current: new Map<string, unknown>([[ids[0] as string, originPose]]),\n snap: null,\n modifiers: { ...ctx.modifiers },\n pointer: { worldX: startWorld.x, worldY: startWorld.y, clientX: 0, clientY: 0 },\n view: readView(),\n plane: readPlane(),\n // `adapter` is unused by the kit's behaviors; cast to satisfy the type.\n adapter: undefined as unknown as GestureContext<unknown>['adapter'],\n scratch: {},\n };\n\n // Fire behavior onStart hooks (parity with `useResize`).\n const ctxAsRect = gestureCtx as unknown as GestureContext<Bounds>;\n for (const b of behaviors) b.onStart?.(ctxAsRect);\n\n const scratch: ResizeScratch = {\n writeIds,\n scene,\n frame,\n startPoses,\n startWorlds,\n originBounds,\n anchor,\n startWorld,\n originRotation,\n fixedWorld,\n previews: new Map<NodeId, unknown>(),\n overrideEntries: new Map<NodeId, { pose: unknown }>(),\n geometry,\n behaviors,\n pointSnap,\n gestureCtx,\n applyOps,\n geometryProjection,\n lifecycle: readGestureLifecycle(policy, 'Resize', behaviors),\n };\n const { lifecycle } = scratch;\n lifecycle.start(writeIds as string[]);\n\n // Returns whether anything reached the document.\n const commitResize = (): boolean => {\n const target = {\n scene,\n applyOps: scratch.applyOps,\n adapter: defaultCommitAdapter(scene, selection.adapterMethods),\n };\n const r = reduceBehaviorEnd(scratch.behaviors, scratch.gestureCtx as unknown as GestureContext<Bounds>);\n if (r === null) return false;\n if (r !== undefined) {\n commitGestureOps(target, lifecycle, r);\n return true;\n }\n\n if (scratch.previews.size === 0) return false;\n\n // One transform op per write id (from = pre-drag start pose, to =\n // final preview pose), committed as a single batch → one undo entry.\n const ops: Op[] = [];\n for (const id of scratch.writeIds) {\n const next = scratch.previews.get(id);\n if (next === undefined) continue;\n const from = scratch.startPoses.get(id);\n if (from === undefined) continue;\n let committed = next;\n // Eager-sync: map data-held geometry by the box→box affine the\n // pose underwent (start-pose bounds → final-pose bounds). Opt-in\n // via the geometryProjection seam; a no-op when the dep is absent.\n if (scratch.geometryProjection) {\n const node = scratch.scene.get(id);\n if (node) {\n const sb = scratch.geometry.getBounds(from);\n const db = scratch.geometry.getBounds(next);\n const m: Mat3 = boxToBox(\n sb.x, sb.y, sb.width, sb.height,\n db.x, db.y, db.width, db.height,\n );\n const dataOp = geometryDataOp(\n scratch.geometryProjection,\n { id: id as string, data: node.data, pose: from },\n m,\n lifecycle.label,\n );\n if (dataOp) {\n ops.push(dataOp);\n // The data absorbed the affine — including any mirror from a\n // drag past the opposite edge — so the pose must commit as a\n // normalized AABB. Leaving signed extents on the pose makes\n // the node unhittable (hit-testing assumes normalized boxes).\n // Without the seam the signed pose is kept: a bare-AABB pose\n // is the only carrier of the flip there.\n if (db.width < 0 || db.height < 0) {\n const nb = {\n ...db,\n x: db.width < 0 ? db.x + db.width : db.x,\n y: db.height < 0 ? db.y + db.height : db.y,\n width: Math.abs(db.width),\n height: Math.abs(db.height),\n };\n committed = scratch.geometry.remapBounds(next, db, nb) as typeof next;\n }\n }\n }\n }\n ops.push(createTransformOp<unknown>({\n id: id as string,\n from,\n to: committed,\n label: lifecycle.label,\n }));\n }\n if (ops.length === 0) return false;\n commitGestureOps(target, lifecycle, ops);\n return true;\n };\n\n return {\n kind: 'resize',\n onMove(mctx: InvocationCtx): void {\n if (!mctx.drag) return;\n const dx = mctx.drag.current.x - scratch.startWorld.x;\n const dy = mctx.drag.current.y - scratch.startWorld.y;\n\n // Refresh modifiers + pointer on the gesture ctx for behaviors.\n scratch.gestureCtx.modifiers = { ...mctx.modifiers };\n scratch.gestureCtx.pointer = {\n worldX: mctx.drag.current.x,\n worldY: mctx.drag.current.y,\n clientX: 0,\n clientY: 0,\n };\n scratch.gestureCtx.view = readView();\n scratch.gestureCtx.plane = readPlane();\n\n let proposedBounds = computeProposedBounds(\n scratch.originBounds,\n scratch.anchor,\n dx,\n dy,\n scratch.originRotation,\n );\n\n // Behaviors run in bounds-space.\n const behaviorCtx = scratch.gestureCtx as unknown as GestureContext<Bounds>;\n for (const b of scratch.behaviors) {\n const r = b.onMove?.(behaviorCtx, {\n pose: proposedBounds,\n anchor: scratch.anchor,\n });\n if (!r) continue;\n if (r.pose !== undefined) {\n proposedBounds = {\n x: r.pose.x, y: r.pose.y, width: r.pose.width, height: r.pose.height,\n };\n }\n }\n\n // Project bounds → pose. For the group path, each leaf is remapped\n // from its own startPose; for single, from the start pose directly.\n //\n // A rotated leaf in a group needs its own frame: `src`/`dst` are\n // world-frame here, unlike the single path where the drag delta was\n // already projected into the leaf's frame, so the naive affine\n // scales the wrong pair of extents. See `remapRotatedLeaf`.\n const computePose = (id: NodeId): unknown => {\n const sp = scratch.startWorlds.get(id);\n if (sp === undefined) return undefined;\n if (isGroupPath && poseRotationOf(sp) !== null) {\n return remapRotatedLeaf(\n sp as RotatedPose, scratch.originBounds, proposedBounds,\n );\n }\n return scratch.geometry.remapBounds(sp, scratch.originBounds, proposedBounds);\n };\n\n // Single-id path: apply rotation correction + point-snap, then\n // store. Group path: rotation correction + point-snap don't apply\n // (group resize is AABB-frame).\n scratch.previews.clear();\n\n if (!isGroupPath && scratch.writeIds.length === 1) {\n const id = scratch.writeIds[0];\n let proposedPose = computePose(id);\n if (proposedPose === undefined) { syncPreviewOverrides(scratch); return; }\n\n if (scratch.originRotation !== 0) {\n const newCenterX = proposedBounds.x + proposedBounds.width / 2;\n const newCenterY = proposedBounds.y + proposedBounds.height / 2;\n const newFixedLocal = fixedCornerOf(proposedBounds, scratch.anchor);\n const newFixedWorld = rotatePoint(\n newFixedLocal.x, newFixedLocal.y,\n newCenterX, newCenterY,\n scratch.originRotation,\n );\n const correctionX = scratch.fixedWorld.x - newFixedWorld.x;\n const correctionY = scratch.fixedWorld.y - newFixedWorld.y;\n proposedPose = translatePoseViaDescriptor(proposedPose, correctionX, correctionY, scratch.geometry);\n }\n\n if (scratch.pointSnap.length > 0) {\n const rotation = scratch.originRotation;\n const poseAsRect = proposedPose as Bounds;\n const psCtx = buildPointSnapContext(\n poseAsRect,\n rotation,\n scratch.anchor,\n scratch.gestureCtx.modifiers,\n );\n // Point snaps are the surface's rules over the camera's world, so\n // on a plane their points cross at this boundary.\n const plane = scratch.gestureCtx.plane ?? null;\n for (const beh of scratch.pointSnap) {\n const result = plane\n ? pointSnapFromPlane(beh.onMove(pointSnapToCamera(psCtx, plane)), plane)\n : beh.onMove(psCtx);\n if (result) {\n proposedPose = applyPointSnap(poseAsRect, rotation, result, psCtx) as unknown;\n break;\n }\n }\n }\n\n scratch.previews.set(id, scratch.frame.local(id, proposedPose));\n scratch.gestureCtx.current = new Map<string, unknown>([[id as string, proposedPose]]);\n } else {\n // Group / multi path: remap each leaf and store.\n for (const id of scratch.writeIds) {\n const next = computePose(id);\n if (next === undefined) continue;\n scratch.previews.set(id, scratch.frame.local(id, next));\n }\n }\n\n syncPreviewOverrides(scratch);\n },\n\n onEnd(_endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n let committed = false;\n try {\n if (reason === 'commit') committed = commitResize();\n else runBehaviorCancel(scratch.behaviors, scratch.gestureCtx as unknown as GestureContext<Bounds>);\n } finally {\n dropPreviewOverrides(scratch);\n scratch.previews.clear();\n lifecycle.end(committed);\n }\n },\n previewIds: () => scratch.previews.keys(),\n previewPose: (id: string) => scratch.previews.get(id as NodeId) ?? null,\n };\n },\n },\n /**\n * Always enabled at the descriptor level. The dispatcher's\n * specificity-fallthrough loop treats anything `!== true` as \"skip and\n * try the next match\" — returning `ActionDisabledReason.SelectionRequired`\n * here makes the resize binding silently lose to lower-specificity\n * matches (e.g. ambient `insertAction`), inserting phantom nodes on\n * every drag instead of resizing. The invoker self-guards on empty\n * selection (returns `{}`), so a static `true` here is correct.\n *\n * Fix: previously `() => ActionDisabledReason.SelectionRequired`\n * — that broke every dispatcher-routed resize. See git blame.\n */\n enabled: () => true,\n}, selectionLayer);\n"],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ import { dropPreviewOverrides as e, syncPreviewOverrides as t } from "../previewOverrides.js";
2
+ import { gesturePlaneReader as n, gestureViewReader as r } from "../../gestures/shared/screenTolerance.js";
3
+ import { commitGestureOps as i, readGestureLifecycle as a, reduceBehaviorEnd as o, runBehaviorCancel as s } from "../gestureLifecycle.js";
4
+ import { createTransformOp as c } from "../../../core/ops/transform.js";
5
+ import { unionAABB as l } from "../../../core/geometry/unionBounds.js";
6
+ import { poseDescriptorForNode as u, translatePoseViaDescriptor as d, visualBoundsViaDescriptor as f } from "../../../core/geometry/poseDescriptor.js";
7
+ import { poseDescriptorOf as p } from "../poseDescriptorDep.js";
8
+ import { moveGestureAdapter as m } from "../move/gestureAdapter.js";
9
+ import { inPlane as h, selectionLayer as g } from "../planeInput.js";
10
+ import { defaultCommitAdapter as _ } from "../defaultCommitAdapter.js";
11
+ import { scenePoseFrame as v } from "../poseFrame.js";
12
+ import { resolveParams as y } from "@weasel-js/routing";
13
+ //#region src/interactions/actions/defaults/rotate.ts
14
+ function b(e, t, n, r, i, a, o) {
15
+ let s = e.withRotation(t, n + r);
16
+ if (!o) return s;
17
+ let c = Math.cos(r), l = Math.sin(r), u = i.x - a.x, f = i.y - a.y, p = a.x + u * c - f * l, m = a.y + u * l + f * c;
18
+ return d(s, p - i.x, m - i.y, e);
19
+ }
20
+ var x = h({
21
+ id: "rotate",
22
+ label: "Rotate",
23
+ eligible: { capability: "transforms-selection" },
24
+ requires: [
25
+ "selection",
26
+ "scene",
27
+ "applyOps",
28
+ "poseDescriptor",
29
+ "poseComposition",
30
+ "view"
31
+ ],
32
+ invoker: {
33
+ timing: "ongoing",
34
+ start(d, h) {
35
+ let g = d.deps.selection, x = d.deps.scene, S = d.deps.applyOps, C = y(h?.params), w = h?.behaviors ?? [];
36
+ if (!g || !x) return {};
37
+ let T = g.get();
38
+ if (T.length === 0) return {};
39
+ let E = p(d.deps.poseDescriptor), D = v(x, d.deps.poseComposition), O = /* @__PURE__ */ new Map(), k = /* @__PURE__ */ new Map(), A = /* @__PURE__ */ new Map(), j = /* @__PURE__ */ new Map(), M = [];
40
+ for (let e of T) {
41
+ let t = x.get(e);
42
+ if (!t) continue;
43
+ let n = u(E, t);
44
+ if (!n.withRotation || n.supportsRotation?.(t.pose) === !1) continue;
45
+ O.set(e, t.pose);
46
+ let r = D.world(e);
47
+ k.set(e, r);
48
+ let i = n.getBounds(r);
49
+ A.set(e, {
50
+ x: i.x + i.width / 2,
51
+ y: i.y + i.height / 2
52
+ }), j.set(e, n.getRotation?.(r) ?? 0), M.push(f(r, n));
53
+ }
54
+ if (O.size === 0) return {};
55
+ let N = l(M), P = {
56
+ x: N.x + N.width / 2,
57
+ y: N.y + N.height / 2
58
+ }, F = Math.atan2(d.world.y - P.y, d.world.x - P.x), I = r(d.deps), L = n(d.deps), R = {
59
+ ids: T,
60
+ scene: x,
61
+ descriptor: E,
62
+ frame: D,
63
+ originPoses: O,
64
+ originWorlds: k,
65
+ originCenters: A,
66
+ originRotations: j,
67
+ unionCenter: P,
68
+ startPointerAngle: F,
69
+ currentDelta: 0,
70
+ useUnionPivot: T.length > 1 && C?.pivot !== "each",
71
+ previews: /* @__PURE__ */ new Map(),
72
+ overrideEntries: /* @__PURE__ */ new Map(),
73
+ applyOps: S,
74
+ lifecycle: a(C, "Rotate", w),
75
+ behaviors: w,
76
+ gestureCtx: {
77
+ draggedIds: [...O.keys()],
78
+ origin: new Map([...k].map(([e, t]) => [e, t])),
79
+ current: new Map([...k].map(([e, t]) => [e, t])),
80
+ snap: null,
81
+ modifiers: { ...d.modifiers },
82
+ pointer: {
83
+ worldX: d.world.x,
84
+ worldY: d.world.y,
85
+ clientX: 0,
86
+ clientY: 0
87
+ },
88
+ view: I(),
89
+ plane: L(),
90
+ adapter: m(x),
91
+ scratch: {}
92
+ }
93
+ }, { lifecycle: z } = R, B = (e) => {
94
+ let t = /* @__PURE__ */ new Map();
95
+ for (let [n, r] of R.originWorlds) t.set(n, b(R.descriptor, r, R.originRotations.get(n) ?? 0, e, R.originCenters.get(n) ?? {
96
+ x: 0,
97
+ y: 0
98
+ }, R.unionCenter, R.useUnionPivot));
99
+ return t;
100
+ }, V = (e) => {
101
+ let t = B(e);
102
+ for (let [e, n] of t) R.gestureCtx.current.set(e, n);
103
+ return t;
104
+ }, H = (e, t) => {
105
+ let n = R.gestureCtx;
106
+ n.modifiers = { ...e.modifiers }, n.pointer = {
107
+ worldX: e.world.x,
108
+ worldY: e.world.y,
109
+ clientX: 0,
110
+ clientY: 0
111
+ }, n.view = I(), n.plane = L();
112
+ let r = R.originWorlds.keys().next().value, i = R.originRotations.get(r) ?? 0, a = t, o = {
113
+ pose: V(t).get(r),
114
+ rotation: i + t
115
+ };
116
+ for (let e of R.behaviors) {
117
+ let t = e.onMove?.(n, o);
118
+ if (!t || t.pose === void 0) continue;
119
+ let r = R.descriptor.getRotation?.(t.pose) ?? 0;
120
+ a = r - i, o = {
121
+ pose: t.pose,
122
+ rotation: r
123
+ };
124
+ }
125
+ return a;
126
+ }, U = () => {
127
+ let e = {
128
+ scene: x,
129
+ applyOps: R.applyOps,
130
+ adapter: _(x, g.adapterMethods)
131
+ };
132
+ if (R.behaviors.length > 0) {
133
+ V(R.currentDelta);
134
+ let t = o(R.behaviors, R.gestureCtx);
135
+ if (t === null) return !1;
136
+ if (t !== void 0) return i(e, z, t), !0;
137
+ }
138
+ if (R.currentDelta === 0) return !1;
139
+ let t = [];
140
+ for (let e of R.ids) {
141
+ let n = R.previews.get(e);
142
+ if (n === void 0) continue;
143
+ let r = R.originPoses.get(e);
144
+ r !== void 0 && t.push(c({
145
+ id: e,
146
+ from: r,
147
+ to: n,
148
+ label: z.label
149
+ }));
150
+ }
151
+ return t.length !== 0 && (i(e, z, t), !0);
152
+ }, W = (e) => {
153
+ if (R.previews.clear(), e !== 0) for (let [t, n] of B(e)) R.previews.set(t, R.frame.local(t, n));
154
+ t(R);
155
+ };
156
+ for (let e of w) e.onStart?.(R.gestureCtx);
157
+ return z.start(R.gestureCtx.draggedIds), {
158
+ kind: "rotate",
159
+ onMove(e) {
160
+ let t = Math.atan2(e.world.y - R.unionCenter.y, e.world.x - R.unionCenter.x) - R.startPointerAngle;
161
+ R.currentDelta = R.behaviors.length > 0 ? H(e, t) : t, W(R.currentDelta);
162
+ },
163
+ onEnd(t, n) {
164
+ let r = !1;
165
+ try {
166
+ n === "commit" ? r = U() : s(R.behaviors, R.gestureCtx);
167
+ } finally {
168
+ e(R), R.previews.clear(), z.end(r);
169
+ }
170
+ },
171
+ previewIds: () => R.previews.keys(),
172
+ previewPose: (e) => R.previews.get(e) ?? null
173
+ };
174
+ }
175
+ },
176
+ enabled: () => !0
177
+ }, g);
178
+ //#endregion
179
+ export { x as rotateAction };
180
+
181
+ //# sourceMappingURL=rotate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rotate.js","names":["applyRotationDelta","rotated","d","pose","originRotation","delta","useUnionPivot","cos","sin","ox","originCenter","unionCenter","oy","nx","ny","translatePoseViaDescriptor","rotateAction","inPlane","selection","ctx","scene","applyOps","params","resolveParams","opts","behaviors","ids","descriptor","poseDescriptorOf","frame","scenePoseFrame","originPoses","originWorlds","originCenters","originRotations","visual","id","node","g","poseDescriptorForNode","world","b","visualBoundsViaDescriptor","union","unionAABB","startPointerAngle","readView","gestureViewReader","readPlane","gesturePlaneReader","scratch","\"pivot\"","readGestureLifecycle","p","moveGestureAdapter","turnedWorlds","out","origin","syncGestureCurrent","turned","shapeDelta","gctx","moveCtx","primary","raw","proposed","r","rotation","commitRotate","target","defaultCommitAdapter","reduceBehaviorEnd","commitGestureOps","lifecycle","ops","next","from","createTransformOp","recomputePreviews","committed","reason","runBehaviorCancel","dropPreviewOverrides","selectionLayer"],"sources":["../../../../src/interactions/actions/defaults/rotate.ts"],"sourcesContent":["/**\n * `rotateAction` — ongoing Action descriptor for pointer-driven rotation.\n *\n * ## Status: REAL (unrotated-pivot path)\n *\n * Implements the core rotation math from `useRotate`:\n * - `start`: captures origin poses + AABB centers; computes start pointer\n * angle around the union center of selected nodes.\n * - `onMove`: derives pointer angle delta from start, applies to each node's\n * origin rotation. In union-pivot mode (multi-selection) orbits each item's\n * center around the union center.\n * - `onEnd('commit')`: builds one `createTransformOp` per node (from =\n * pre-mutation origin pose, to = rotated pose) and commits them as a\n * single batch → one undo entry for the whole drag. Routes through the\n * optional `applyOps` dep (consumer history) when present, else\n * `scene.applyBatch` + `defaultCommitAdapter`.\n * - `onEnd('cancel')`: no scene writes (scene never mutated during drag).\n *\n * ## Constraints vs `useRotate`\n *\n * - Reads and writes poses through the `poseDescriptor` dep; a pose whose\n * descriptor has no `withRotation`, or reports `supportsRotation` false, is\n * left alone.\n * - Behaviors (`opts.behaviors`) see the first rotated node's turned pose; a\n * pose one returns from `onMove` sets the rotation for the whole selection.\n * - No overlay rendering — deferred to Phase 7 overlay surface.\n * - Shift-snap (15° quantum) is NOT wired in this phase — omitted deliberately\n * to keep the invoker self-contained (would need to read shift from onMove ctx).\n * TODO: thread shift from InvocationCtx.modifiers.shift into snap logic.\n */\n\nimport { gesturePlaneReader, gestureViewReader } from '../../gestures/shared/screenTolerance';\nimport type { Action } from '@weasel-js/routing';\nimport type { InvocationCtx, OngoingHandle } from '@weasel-js/routing';\nimport { resolveParams } from '@weasel-js/routing';\nimport type { Scene, NodeId } from 'core/scene/types';\nimport { syncPreviewOverrides, dropPreviewOverrides } from '../previewOverrides';\nimport type { Op } from 'core/ops/types';\nimport { createTransformOp } from 'core/ops/transform';\nimport { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport { unionAABB } from 'core/geometry/unionBounds';\nimport type { Bounds } from 'core/viewport/fitViewToBounds';\nimport { poseDescriptorOf } from '../poseDescriptorDep';\nimport {\n poseDescriptorForNode,\n translatePoseViaDescriptor,\n visualBoundsViaDescriptor,\n type PoseDescriptor,\n} from '../resize/geometry';\nimport { scenePoseFrame, type PoseFrame } from '../poseFrame';\nimport { commitGestureOps, readGestureLifecycle, reduceBehaviorEnd, runBehaviorCancel, type GestureLifecycle } from '../gestureLifecycle';\nimport { moveGestureAdapter } from '../move/gestureAdapter';\nimport type { GestureContext, RotateBehavior, RotateProposed } from '../../gestures/types';\nimport { inPlane, selectionLayer } from '../planeInput';\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\n/** Apply a rotation delta (radians) to a pose, optionally orbiting the item's\n * center around a shared union center. */\nfunction applyRotationDelta(\n d: PoseDescriptor<unknown>,\n pose: unknown,\n originRotation: number,\n delta: number,\n originCenter: { x: number; y: number },\n unionCenter: { x: number; y: number },\n useUnionPivot: boolean,\n): unknown {\n const rotated = d.withRotation!(pose, originRotation + delta);\n if (!useUnionPivot) return rotated;\n const cos = Math.cos(delta);\n const sin = Math.sin(delta);\n const ox = originCenter.x - unionCenter.x;\n const oy = originCenter.y - unionCenter.y;\n const nx = unionCenter.x + ox * cos - oy * sin;\n const ny = unionCenter.y + ox * sin + oy * cos;\n return translatePoseViaDescriptor(rotated, nx - originCenter.x, ny - originCenter.y, d);\n}\n\n// ---------------------------------------------------------------------------\n// Internal scratch\n// ---------------------------------------------------------------------------\n\ninterface RotateScratch {\n ids: NodeId[];\n scene: Scene<unknown, string, unknown>;\n descriptor: PoseDescriptor<unknown>;\n /** World reads and local writes over the scene's composition strategy. */\n frame: PoseFrame<unknown>;\n /** Origin pose for each selected node as stored — the `from` of its op. */\n originPoses: Map<NodeId, unknown>;\n /** Origin pose for each selected node in world — what the gesture turns. */\n originWorlds: Map<NodeId, unknown>;\n /** AABB center for each selected node (from origin pose). */\n originCenters: Map<NodeId, { x: number; y: number }>;\n /** Per-node origin rotation (radians). */\n originRotations: Map<NodeId, number>;\n /** Union center of all selected nodes — the rotation pivot. */\n unionCenter: { x: number; y: number };\n /** Pointer angle around unionCenter at drag start. */\n startPointerAngle: number;\n /** Running delta — updated each onMove, applied once at commit. */\n currentDelta: number;\n /** Use union pivot (multi-select) vs each item's own center. */\n useUnionPivot: boolean;\n /** In-flight preview poses keyed by node id. */\n previews: Map<NodeId, unknown>;\n overrideEntries: Map<NodeId, { pose: unknown }>;\n /** Optional consumer commit hook captured at gesture start. When present,\n * ops-based commits route through it (consumer history) instead of\n * `scene.applyBatch`. Undefined → fall back to `scene.applyBatch`. */\n applyOps?: (ops: Op[], label: string) => void;\n lifecycle: GestureLifecycle;\n behaviors: RotateBehavior<unknown>[];\n /** Reused gesture context handed to behaviors across the drag. */\n gestureCtx: GestureContext<unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Descriptor\n// ---------------------------------------------------------------------------\n\n/**\n * @experimental\n * Static descriptor for the `rotate` Action.\n *\n * Requires dep-schema entries: `selection`, `scene`.\n *\n * Implements the unrotated-pivot rotation path from `useRotate`.\n *\n * @see useRotate — the React hook this descriptor mirrors for the rect case.\n */\nexport const rotateAction: Action & { requires: string[] } = inPlane({\n id: 'rotate',\n label: 'Rotate',\n // No default binding. It used to be a bare `{ kind: 'drag' }`, which made\n // any drag no active tool claimed rotate a non-empty selection. The rotation\n // handle binds it (`selectionTransformBindings`, the `transform` preset).\n eligible: { capability: 'transforms-selection' },\n requires: ['selection', 'scene', 'applyOps', 'poseDescriptor', 'poseComposition', 'view'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts): OngoingHandle {\n const selection = ctx.deps.selection as SelectionApi | undefined;\n const scene = ctx.deps.scene as Scene<unknown, string, unknown> | undefined;\n const applyOps = ctx.deps.applyOps as ((ops: Op[], label: string) => void) | undefined;\n const params = resolveParams(opts?.params);\n const behaviors = (opts?.behaviors ?? []) as RotateBehavior<unknown>[];\n\n if (!selection || !scene) return {};\n\n const ids = selection.get() as NodeId[];\n if (ids.length === 0) return {};\n\n const descriptor = poseDescriptorOf(ctx.deps.poseDescriptor);\n // The pivot the pointer orbits is a world point, so every pose the\n // gesture turns is a world pose. Each turned result is stored back in\n // the node's own parent frame at preview and commit alike.\n const frame = scenePoseFrame(scene, ctx.deps.poseComposition);\n const originPoses = new Map<NodeId, unknown>();\n const originWorlds = new Map<NodeId, unknown>();\n const originCenters = new Map<NodeId, { x: number; y: number }>();\n const originRotations = new Map<NodeId, number>();\n const visual: Bounds[] = [];\n\n for (const id of ids) {\n const node = scene.get(id);\n if (!node) continue;\n const g = poseDescriptorForNode(descriptor, node);\n if (!g.withRotation || g.supportsRotation?.(node.pose) === false) continue;\n originPoses.set(id, node.pose);\n // The pivot is a world point, so every measurement the gesture orbits\n // is taken from the world pose, not the stored one.\n const world = frame.world(id);\n originWorlds.set(id, world);\n const b = g.getBounds(world);\n originCenters.set(id, { x: b.x + b.width / 2, y: b.y + b.height / 2 });\n originRotations.set(id, g.getRotation?.(world) ?? 0);\n visual.push(visualBoundsViaDescriptor(world, g));\n }\n\n if (originPoses.size === 0) return {};\n\n const union = unionAABB(visual)!;\n const unionCenter = { x: union.x + union.width / 2, y: union.y + union.height / 2 };\n const startPointerAngle = Math.atan2(\n ctx.world.y - unionCenter.y,\n ctx.world.x - unionCenter.x,\n );\n\n const readView = gestureViewReader(ctx.deps);\n\n const readPlane = gesturePlaneReader(ctx.deps);\n const scratch: RotateScratch = {\n ids,\n scene,\n descriptor,\n frame,\n originPoses,\n originWorlds,\n originCenters,\n originRotations,\n unionCenter,\n startPointerAngle,\n currentDelta: 0,\n useUnionPivot: ids.length > 1 && params?.['pivot'] !== 'each',\n previews: new Map<NodeId, unknown>(),\n overrideEntries: new Map<NodeId, { pose: unknown }>(),\n applyOps,\n lifecycle: readGestureLifecycle(params, 'Rotate', behaviors),\n behaviors,\n gestureCtx: {\n draggedIds: [...originPoses.keys()] as string[],\n origin: new Map([...originWorlds].map(([id, p]) => [id as string, p])),\n current: new Map([...originWorlds].map(([id, p]) => [id as string, p])),\n snap: null,\n modifiers: { ...ctx.modifiers },\n pointer: { worldX: ctx.world.x, worldY: ctx.world.y, clientX: 0, clientY: 0 },\n view: readView(),\n plane: readPlane(),\n adapter: moveGestureAdapter(scene) as unknown as GestureContext<unknown>['adapter'],\n scratch: {},\n },\n };\n const { lifecycle } = scratch;\n\n /** Each rotated node's world pose turned by `delta`. */\n const turnedWorlds = (delta: number): Map<NodeId, unknown> => {\n const out = new Map<NodeId, unknown>();\n for (const [id, origin] of scratch.originWorlds) {\n out.set(id, applyRotationDelta(\n scratch.descriptor,\n origin,\n scratch.originRotations.get(id) ?? 0,\n delta,\n scratch.originCenters.get(id) ?? { x: 0, y: 0 },\n scratch.unionCenter,\n scratch.useUnionPivot,\n ));\n }\n return out;\n };\n\n const syncGestureCurrent = (delta: number): Map<NodeId, unknown> => {\n const turned = turnedWorlds(delta);\n for (const [id, pose] of turned) scratch.gestureCtx.current.set(id as string, pose);\n return turned;\n };\n\n /** The pointer's delta as the behaviors reshape it. */\n const shapeDelta = (moveCtx: InvocationCtx, raw: number): number => {\n const gctx = scratch.gestureCtx;\n gctx.modifiers = { ...moveCtx.modifiers };\n gctx.pointer = { worldX: moveCtx.world.x, worldY: moveCtx.world.y, clientX: 0, clientY: 0 };\n gctx.view = readView();\n gctx.plane = readPlane();\n const primary = scratch.originWorlds.keys().next().value as NodeId;\n const originRotation = scratch.originRotations.get(primary) ?? 0;\n let delta = raw;\n let proposed: RotateProposed<unknown> = {\n pose: syncGestureCurrent(raw).get(primary),\n rotation: originRotation + raw,\n };\n for (const b of scratch.behaviors) {\n const r = b.onMove?.(gctx, proposed);\n if (!r || r.pose === undefined) continue;\n const rotation = scratch.descriptor.getRotation?.(r.pose) ?? 0;\n delta = rotation - originRotation;\n proposed = { pose: r.pose, rotation };\n }\n return delta;\n };\n\n // Returns whether anything reached the document.\n const commitRotate = (): boolean => {\n const target = {\n scene,\n applyOps: scratch.applyOps,\n adapter: defaultCommitAdapter(scene, selection.adapterMethods),\n };\n if (scratch.behaviors.length > 0) {\n syncGestureCurrent(scratch.currentDelta);\n const r = reduceBehaviorEnd(scratch.behaviors, scratch.gestureCtx);\n if (r === null) return false;\n if (r !== undefined) {\n commitGestureOps(target, lifecycle, r);\n return true;\n }\n }\n if (scratch.currentDelta === 0) return false;\n // One transform op per node: `from` is the origin pose captured at drag\n // start, `to` the rotated preview. A single batch, so one undo entry.\n const ops: Op[] = [];\n for (const id of scratch.ids) {\n const next = scratch.previews.get(id);\n if (next === undefined) continue;\n const from = scratch.originPoses.get(id);\n if (from === undefined) continue;\n ops.push(createTransformOp<unknown>({\n id: id as string,\n from,\n to: next,\n label: lifecycle.label,\n }));\n }\n if (ops.length === 0) return false;\n commitGestureOps(target, lifecycle, ops);\n return true;\n };\n\n const recomputePreviews = (delta: number) => {\n scratch.previews.clear();\n if (delta !== 0) {\n for (const [id, turned] of turnedWorlds(delta)) {\n scratch.previews.set(id, scratch.frame.local(id, turned));\n }\n }\n syncPreviewOverrides(scratch);\n };\n\n for (const b of behaviors) b.onStart?.(scratch.gestureCtx);\n lifecycle.start(scratch.gestureCtx.draggedIds);\n\n return {\n kind: 'rotate',\n onMove(moveCtx: InvocationCtx): void {\n const pointerAngle = Math.atan2(\n moveCtx.world.y - scratch.unionCenter.y,\n moveCtx.world.x - scratch.unionCenter.x,\n );\n const raw = pointerAngle - scratch.startPointerAngle;\n scratch.currentDelta = scratch.behaviors.length > 0 ? shapeDelta(moveCtx, raw) : raw;\n recomputePreviews(scratch.currentDelta);\n },\n onEnd(_endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n let committed = false;\n try {\n if (reason === 'commit') committed = commitRotate();\n else runBehaviorCancel(scratch.behaviors, scratch.gestureCtx);\n } finally {\n dropPreviewOverrides(scratch);\n scratch.previews.clear();\n lifecycle.end(committed);\n }\n },\n previewIds: () => scratch.previews.keys(),\n previewPose: (id: string) => scratch.previews.get(id as NodeId) ?? null,\n };\n },\n },\n enabled: () => true,\n}, selectionLayer);\n"],"mappings":"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"}