@weasel-js/core 1.7.0 → 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 (1003) hide show
  1. package/CHANGELOG.md +764 -0
  2. package/README.md +7 -8
  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-DLn2lCr_.d.ts → builtins-BSUfH8nU.d.ts} +738 -513
  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-Dp2IxLGb.d.ts → cornerHandles-CDcZOV8h.d.ts} +3 -13
  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 -62
  601. package/dist/index.d.ts +1955 -1891
  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 -49
  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 +11 -21
  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.js +2 -3
  902. package/dist/scheduling/useVisibleRaf.js +69 -0
  903. package/dist/scheduling/useVisibleRaf.js.map +1 -0
  904. package/dist/test-hook/createTestHook.js +39 -0
  905. package/dist/test-hook/createTestHook.js.map +1 -0
  906. package/dist/test-hook/install.js +12 -0
  907. package/dist/test-hook/install.js.map +1 -0
  908. package/dist/test-seams-fYf6m5pu.d.ts +356 -0
  909. package/dist/test-seams.d.ts +6 -0
  910. package/dist/test-seams.js +3 -0
  911. package/dist/tools/builtin/ellipse/useEllipseTool.js +33 -0
  912. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -0
  913. package/dist/tools/builtin/eyedropper/useEyedropperTool.js +55 -0
  914. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -0
  915. package/dist/tools/builtin/hand/dragPanContribution.js +17 -0
  916. package/dist/tools/builtin/hand/dragPanContribution.js.map +1 -0
  917. package/dist/tools/builtin/hand/useHandTool.js +31 -0
  918. package/dist/tools/builtin/hand/useHandTool.js.map +1 -0
  919. package/dist/tools/builtin/image/useImageTool.js +41 -0
  920. package/dist/tools/builtin/image/useImageTool.js.map +1 -0
  921. package/dist/tools/builtin/lasso/useLassoTool.js +42 -0
  922. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -0
  923. package/dist/tools/builtin/line/useLineTool.js +33 -0
  924. package/dist/tools/builtin/line/useLineTool.js.map +1 -0
  925. package/dist/tools/builtin/pen/usePenTool.js +414 -0
  926. package/dist/tools/builtin/pen/usePenTool.js.map +1 -0
  927. package/dist/tools/builtin/pencil/usePencilTool.js +36 -0
  928. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -0
  929. package/dist/tools/builtin/pickTopMostHit.js +45 -0
  930. package/dist/tools/builtin/pickTopMostHit.js.map +1 -0
  931. package/dist/tools/builtin/polygon/usePolygonTool.js +81 -0
  932. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -0
  933. package/dist/tools/builtin/rect/useRectTool.js +32 -0
  934. package/dist/tools/builtin/rect/useRectTool.js.map +1 -0
  935. package/dist/tools/builtin/select/selectionContributions.js +109 -0
  936. package/dist/tools/builtin/select/selectionContributions.js.map +1 -0
  937. package/dist/tools/builtin/select/useSelectTool.js +162 -0
  938. package/dist/tools/builtin/select/useSelectTool.js.map +1 -0
  939. package/dist/tools/builtin/shared/insertToolOptions.js +8 -0
  940. package/dist/tools/builtin/shared/insertToolOptions.js.map +1 -0
  941. package/dist/tools/builtin/slice/useSliceTool.js +263 -0
  942. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -0
  943. package/dist/tools/builtin/star/useStarTool.js +82 -0
  944. package/dist/tools/builtin/star/useStarTool.js.map +1 -0
  945. package/dist/tools/builtin/text/useTextTool.js +177 -0
  946. package/dist/tools/builtin/text/useTextTool.js.map +1 -0
  947. package/dist/tools/overlayBinding.js +8 -0
  948. package/dist/tools/overlayBinding.js.map +1 -0
  949. package/dist/tools/prefs.js +47 -0
  950. package/dist/tools/prefs.js.map +1 -0
  951. package/dist/tools/useKeybindings.js +66 -0
  952. package/dist/tools/useKeybindings.js.map +1 -0
  953. package/dist/{types-D-9QWBy5.d.ts → types-CA54-mAZ.d.ts} +181 -13
  954. package/dist/{types-qYpyTAiZ.d.ts → types-DSjd6W3n.d.ts} +32 -6
  955. package/dist/util/color.js +26 -0
  956. package/dist/util/color.js.map +1 -0
  957. package/dist/util/constrainTo45.js +17 -0
  958. package/dist/util/constrainTo45.js.map +1 -0
  959. package/dist/util/paint.js +72 -0
  960. package/dist/util/paint.js.map +1 -0
  961. package/dist/version.js +6 -0
  962. package/dist/version.js.map +1 -0
  963. package/package.json +29 -19
  964. package/dist/chunk-3TY6FHAF.js +0 -170
  965. package/dist/chunk-3TY6FHAF.js.map +0 -1
  966. package/dist/chunk-DGWNNKGD.js +0 -248
  967. package/dist/chunk-DGWNNKGD.js.map +0 -1
  968. package/dist/chunk-G4ZGQMY7.js +0 -33372
  969. package/dist/chunk-G4ZGQMY7.js.map +0 -1
  970. package/dist/chunk-L5YNZYEG.js +0 -648
  971. package/dist/chunk-L5YNZYEG.js.map +0 -1
  972. package/dist/chunk-LU4IJ52W.js +0 -111
  973. package/dist/chunk-LU4IJ52W.js.map +0 -1
  974. package/dist/chunk-M24CLARN.js +0 -28
  975. package/dist/chunk-M24CLARN.js.map +0 -1
  976. package/dist/chunk-NE27EOLP.js +0 -146
  977. package/dist/chunk-NE27EOLP.js.map +0 -1
  978. package/dist/chunk-PNNZSYRD.js +0 -318
  979. package/dist/chunk-PNNZSYRD.js.map +0 -1
  980. package/dist/chunk-UPZY4ART.js +0 -29
  981. package/dist/chunk-UPZY4ART.js.map +0 -1
  982. package/dist/chunk-WPNA6L5O.js +0 -250
  983. package/dist/chunk-WPNA6L5O.js.map +0 -1
  984. package/dist/chunk-XMAWPGTK.js +0 -128
  985. package/dist/chunk-XMAWPGTK.js.map +0 -1
  986. package/dist/clipboard.js.map +0 -1
  987. package/dist/clone.js.map +0 -1
  988. package/dist/grid-CY5UKlZh.d.ts +0 -98
  989. package/dist/index.css.map +0 -1
  990. package/dist/index.js.map +0 -1
  991. package/dist/insert.d.ts +0 -36
  992. package/dist/insert.js +0 -81
  993. package/dist/insert.js.map +0 -1
  994. package/dist/math.js.map +0 -1
  995. package/dist/move.js.map +0 -1
  996. package/dist/path-JEV2c5If.d.ts +0 -48
  997. package/dist/patterns-builtin.js.map +0 -1
  998. package/dist/renderer.css +0 -62
  999. package/dist/renderer.css.map +0 -1
  1000. package/dist/renderer.js.map +0 -1
  1001. package/dist/resize.js.map +0 -1
  1002. package/dist/routing.js.map +0 -1
  1003. package/dist/types-D2tTKEU0.d.ts +0 -18
@@ -0,0 +1,288 @@
1
+ import { gesturePlaneReader as e, gestureViewReader as t } from "../../gestures/shared/screenTolerance.js";
2
+ import { commitGestureOps as n, readGestureLifecycle as r, reduceBehaviorEnd as i, runBehaviorCancel as a } from "../gestureLifecycle.js";
3
+ import { inPlane as o, insertLayer as s } from "../planeInput.js";
4
+ import { defaultCommitAdapter as c } from "../defaultCommitAdapter.js";
5
+ import { shapeKindInfo as l } from "../../../core/shapeKinds.js";
6
+ import { resolveParams as u } from "@weasel-js/routing";
7
+ //#region src/interactions/actions/defaults/insert.ts
8
+ var d = null;
9
+ function f(e, t) {
10
+ let n = e === "center" ? "center" : "corner";
11
+ return t ? n === "center" ? "corner" : "center" : n;
12
+ }
13
+ function p(e, t, n, r, i) {
14
+ if (i === "center") {
15
+ let i = Math.abs(n - e), a = Math.abs(r - t);
16
+ return {
17
+ x: e - i,
18
+ y: t - a,
19
+ width: i * 2,
20
+ height: a * 2
21
+ };
22
+ }
23
+ return {
24
+ x: Math.min(e, n),
25
+ y: Math.min(t, r),
26
+ width: Math.abs(n - e),
27
+ height: Math.abs(r - t)
28
+ };
29
+ }
30
+ function m(e, t) {
31
+ let n = t.x - e.x, r = t.y - e.y, i = Math.hypot(n, r);
32
+ if (i === 0) return t;
33
+ let a = Math.PI / 12, o = Math.round(Math.atan2(r, n) / a) * a;
34
+ return {
35
+ x: e.x + i * Math.cos(o),
36
+ y: e.y + i * Math.sin(o)
37
+ };
38
+ }
39
+ var h = "gesture";
40
+ function g(e, t) {
41
+ let n = u(e.opts?.params), r = n?.kind ?? "rect", i = e.gestureCtx, a = i.origin.get(h), o = {
42
+ x: e.currentX,
43
+ y: e.currentY
44
+ };
45
+ if (r === "line" && e.shiftHeld && (o = m({
46
+ x: e.startX,
47
+ y: e.startY
48
+ }, o)), o = e.snap(o), e.behaviors.length > 0) {
49
+ i.modifiers = { ...t }, i.pointer = {
50
+ worldX: e.currentX,
51
+ worldY: e.currentY,
52
+ clientX: 0,
53
+ clientY: 0
54
+ }, i.view = e.readView(), i.plane = e.readPlane(), i.current.set(h, o);
55
+ let r = f(n?.originMode, e.altHeld);
56
+ for (let t of e.behaviors) {
57
+ let e = p(a.x, a.y, o.x, o.y, r), n = t.onMove?.(i, {
58
+ start: a,
59
+ current: o,
60
+ bounds: e,
61
+ pose: e
62
+ });
63
+ n && (n.start && (a = n.start), n.current && (o = n.current));
64
+ }
65
+ i.current.set(h, o);
66
+ }
67
+ e.shaped = {
68
+ start: a,
69
+ current: o
70
+ };
71
+ }
72
+ function _(e, t, n) {
73
+ let { start: r } = e.shaped, { current: i } = e.shaped;
74
+ return t === "line" && n === "center" && (r = {
75
+ x: r.x - (i.x - r.x),
76
+ y: r.y - (i.y - r.y)
77
+ }), {
78
+ startX: r.x,
79
+ startY: r.y,
80
+ currentX: i.x,
81
+ currentY: i.y
82
+ };
83
+ }
84
+ function v(e, t, n, r, i, a) {
85
+ let o = e?.kind ?? "rect";
86
+ switch (o) {
87
+ case "rect":
88
+ case "ellipse": return { kind: o };
89
+ case "line": return {
90
+ kind: "line",
91
+ a: {
92
+ x: t,
93
+ y: n
94
+ },
95
+ b: {
96
+ x: r,
97
+ y: i
98
+ }
99
+ };
100
+ case "polygon": {
101
+ let a = Number(e?.sides ?? 6), o = r === t && i === n ? 0 : Math.atan2(i - n, r - t), s = {
102
+ kind: "polygon",
103
+ sides: a,
104
+ rotation: e?.rotation === void 0 ? o : Number(e.rotation)
105
+ };
106
+ if (e?.originMode === "center") {
107
+ let e = r - t, a = i - n;
108
+ s.center = {
109
+ x: t,
110
+ y: n
111
+ }, s.radius = Math.hypot(e, a);
112
+ } else e?.center !== void 0 && (s.center = e.center), e?.radius !== void 0 && (s.radius = e.radius);
113
+ return s;
114
+ }
115
+ case "star": {
116
+ let a = Number(e?.points ?? 5), o = Number(e?.innerRadiusRatio ?? .5), s = r === t && i === n ? 0 : Math.atan2(i - n, r - t), c = {
117
+ kind: "star",
118
+ points: a,
119
+ innerRadiusRatio: o,
120
+ rotation: e?.rotation === void 0 ? s : Number(e.rotation)
121
+ };
122
+ if (e?.originMode === "center") {
123
+ let e = r - t, a = i - n;
124
+ c.center = {
125
+ x: t,
126
+ y: n
127
+ }, c.outerRadius = Math.hypot(e, a);
128
+ } else e?.center !== void 0 && (c.center = e.center), e?.outerRadius !== void 0 && (c.outerRadius = e.outerRadius);
129
+ return c;
130
+ }
131
+ case "pencil": return {
132
+ kind: "pencil",
133
+ samples: e?.samples ?? a ?? []
134
+ };
135
+ default: return {
136
+ ...e ?? {},
137
+ kind: o
138
+ };
139
+ }
140
+ }
141
+ var y = o({
142
+ id: "insert",
143
+ label: "Insert",
144
+ group: "insert",
145
+ eligible: { capability: "creates-shapes" },
146
+ requires: [
147
+ "insert",
148
+ "selection",
149
+ "snap",
150
+ "textEdit",
151
+ "scene",
152
+ "applyOps",
153
+ "view"
154
+ ],
155
+ invoker: {
156
+ timing: "ongoing",
157
+ start(o, s) {
158
+ let m = o.deps.insert;
159
+ if (!m) return {};
160
+ let y = o.deps.selection;
161
+ y && y.get().length > 0 && y.clear();
162
+ let S = o.deps.snap, C = S ? (e) => S.point(e) : (e) => e, w = s?.behaviors ?? [], T = t(o.deps), E = e(o.deps), D = C({
163
+ x: o.world.x,
164
+ y: o.world.y
165
+ }), O = {
166
+ draggedIds: [h],
167
+ origin: /* @__PURE__ */ new Map([[h, D]]),
168
+ current: /* @__PURE__ */ new Map([[h, D]]),
169
+ snap: null,
170
+ modifiers: { ...o.modifiers },
171
+ pointer: {
172
+ worldX: o.world.x,
173
+ worldY: o.world.y,
174
+ clientX: 0,
175
+ clientY: 0
176
+ },
177
+ view: T(),
178
+ plane: E(),
179
+ adapter: void 0,
180
+ scratch: {}
181
+ };
182
+ for (let e of w) e.onStart?.(O);
183
+ let k = O.origin.get(h), A = {
184
+ dep: m,
185
+ textEdit: o.deps.textEdit,
186
+ snap: C,
187
+ opts: s,
188
+ behaviors: w,
189
+ gestureCtx: O,
190
+ readView: T,
191
+ readPlane: E,
192
+ shaped: {
193
+ start: k,
194
+ current: k
195
+ },
196
+ scene: o.deps.scene,
197
+ applyOps: o.deps.applyOps,
198
+ selection: y,
199
+ startX: o.world.x,
200
+ startY: o.world.y,
201
+ currentX: o.world.x,
202
+ currentY: o.world.y,
203
+ points: o.drag?.points ?? null,
204
+ altHeld: o.modifiers.alt,
205
+ shiftHeld: o.modifiers.shift,
206
+ open: !0,
207
+ userRotation: 0
208
+ };
209
+ return d = A, {
210
+ kind: "insert",
211
+ onMove(e) {
212
+ A.currentX = e.world.x, A.currentY = e.world.y, A.shiftHeld = e.modifiers.shift, A.altHeld = e.modifiers.alt, e.drag?.points && (A.points = e.drag.points), g(A, e.modifiers);
213
+ },
214
+ overlay() {
215
+ if (!A.open) return null;
216
+ let e = u(A.opts?.params), t = e?.kind ?? "rect";
217
+ if (!l(t)?.insertPreview) return null;
218
+ let n = f(e?.originMode, A.altHeld), r = _(A, t, n), i = p(r.startX, r.startY, r.currentX, r.currentY, n), a = v({
219
+ ...e ?? {},
220
+ originMode: n
221
+ }, r.startX, r.startY, r.currentX, r.currentY, A.points);
222
+ return x(a, A.userRotation), {
223
+ kind: "insertPreview",
224
+ shape: a.kind,
225
+ bounds: i,
226
+ extras: a,
227
+ anchorPoint: {
228
+ x: r.startX,
229
+ y: r.startY
230
+ }
231
+ };
232
+ },
233
+ onEnd(e, t) {
234
+ if (A.open = !1, d === A && (d = null), t === "cancel") {
235
+ a(A.behaviors, A.gestureCtx);
236
+ return;
237
+ }
238
+ let { dep: o, opts: s } = A, l = e.drag?.points ?? A.points, m = u(s?.params);
239
+ if (A.behaviors.length > 0) {
240
+ let e = i(A.behaviors, A.gestureCtx);
241
+ if (e === null) return;
242
+ if (e !== void 0) {
243
+ A.scene && n({
244
+ scene: A.scene,
245
+ applyOps: A.applyOps,
246
+ adapter: c(A.scene, A.selection?.adapterMethods)
247
+ }, r(m, "Insert", A.behaviors), e);
248
+ return;
249
+ }
250
+ }
251
+ let h = m?.kind ?? "rect", g = f(m?.originMode, A.altHeld), { startX: y, startY: S, currentX: C, currentY: w } = _(A, h, g), T = p(y, S, C, w, g), E = v({
252
+ ...m ?? {},
253
+ originMode: g
254
+ }, y, S, C, w, l);
255
+ if (x(E, A.userRotation), !b(T, E.kind)) return;
256
+ let D = o.commit(T, E);
257
+ D !== null && E.kind === "text" && A.textEdit?.startEdit(String(D), { caret: 0 });
258
+ }
259
+ };
260
+ }
261
+ },
262
+ enabled: () => !0
263
+ }, s);
264
+ function b(e, t) {
265
+ return t === "pencil" ? !0 : t === "line" ? e.width !== 0 || e.height !== 0 : e.width !== 0 && e.height !== 0;
266
+ }
267
+ function x(e, t) {
268
+ t !== 0 && (e.kind === "star" || e.kind === "polygon") && (e.rotation += t);
269
+ }
270
+ var S = Math.PI / 720, C = {
271
+ id: "insert.adjustRotation",
272
+ label: "Insert — rotate",
273
+ group: "insert",
274
+ eligible: { capability: "creates-shapes" },
275
+ invoker: {
276
+ timing: "immediate",
277
+ run: (e, t) => {
278
+ let n = d;
279
+ if (!n || !n.open) return;
280
+ let r = t?.deltaY ?? 0;
281
+ r !== 0 && (n.userRotation += r * S);
282
+ }
283
+ }
284
+ };
285
+ //#endregion
286
+ export { y as insertAction, C as insertRotateAction };
287
+
288
+ //# sourceMappingURL=insert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert.js","names":["liveInsertScratch","effectiveOriginMode","nominal","paramsOrigin","altHeld","computeBounds","originMode","dx","currentX","startX","dy","currentY","startY","snapTo15Degrees","end","start","len","step","snapped","GESTURE_KEY","shapeEndpoints","resolved","resolveParams","scratch","kind","\"kind\"","gctx","current","modifiers","mode","\"originMode\"","b","bounds","r","resolveEndpoints","buildExtras","params","sides","\"sides\"","dragAngle","extras","\"rotation\"","\"center\"","\"radius\"","pts","\"points\"","ir","\"innerRadiusRatio\"","\"outerRadius\"","\"samples\"","points","insertAction","inPlane","dep","ctx","selection","snapDep","snap","p","behaviors","opts","readView","gestureViewReader","readPlane","gesturePlaneReader","origin","gestureCtx","startPoint","moveCtx","shapeKindInfo","effectiveExtras","applyUserRotation","reason","d","o","endCtx","reduceBehaviorEnd","commitGestureOps","defaultCommitAdapter","readGestureLifecycle","isCommittableExtent","id","insertLayer","userRotation","ROTATION_SENSITIVITY","insertRotateAction","deltaY"],"sources":["../../../../src/interactions/actions/defaults/insert.ts"],"sourcesContent":["/**\n * `insertAction` — ongoing Action descriptor for drag-to-insert.\n *\n * ## Status: REAL\n *\n * Implements the drag-rect insert logic from `useInsert`:\n * - `start`: validates the `insert` dep and records the drag start point.\n * - `onMove`: tracks the live drag bounds (no scene writes).\n * - `onEnd('commit')`: derives final bounds from drag.start + drag.current;\n * calls `deps.insert.commit(bounds, kind)` to materialise the new node.\n * `kind` comes from `opts.params.kind` (set by the active tool's binding).\n * - `onEnd('cancel')`: no-op.\n *\n * ## Dependencies\n *\n * Requires `insert` dep from DepSchema:\n * `{ commit(bounds, kind): NodeId | null }`\n *\n * `<SceneCanvas>` / `<StandardActionsRegistrar>` should source this dep by\n * delegating to the scene's `add()` with a sensible default data payload for\n * the given `kind`. Override per-consumer for custom node factories.\n *\n * ## Modifiers and snapping\n *\n * Grid snapping comes from the optional `snap` dep, applied to the drag's\n * start and current point (never to freehand pencil samples). The `line`\n * kind additionally honors Shift (constrain to 15°) and reads Alt/center as\n * \"mirror the start around the pointer\" rather than \"grow a symmetric AABB\".\n * Behaviors from the binding's `opts.behaviors` (`InsertBehavior[]` — e.g.\n * `@weasel-js/guides`' `snapToGrid` and `alignInsertBehavior`) run over the two\n * points after those, the way `moveAction` runs its own: `onStart` on the\n * start point, `onMove` on each frame's proposal, `onEnd` on release, where\n * the first answer wins (`null` aborts, `Op[]` commits in place of the\n * insert). `shapeEndpoints` folds them each pump event and `resolveEndpoints`\n * reads the result, so the live preview and the committed node can't\n * disagree.\n *\n * ## What this does NOT wire (vs `useInsert`)\n *\n * - `pointInsert` fallback for click / sub-threshold drags — not wired; a\n * sub-threshold drag produces no insert.\n * - `clickOnly` mode — not applicable to the descriptor model.\n *\n * ## Live preview\n *\n * Insert produces a brand-new node that has no scene id until commit, so\n * the preview-ghost layer (`usePreviewGhostLayer`, keyed by node id) can't\n * paint a silhouette for it. Instead, the action exposes its in-flight\n * geometry via the `overlay()` surface with `kind: 'insertPreview'`. The\n * canvas's `useDispatcherOverlayLayer` rebuilds the shape using the same\n * path builders the commit-time factory uses (`rectPath`, `ellipsePath`,\n * `linePath`, `regularPolygonPath`, `starPath`, polyline / `polygonFromPoints`),\n * so the preview is geometry-faithful to the eventual node.\n *\n * Consumer-defined insert kinds (kinds the kit doesn't know how to draw)\n * skip the preview but still commit normally on release.\n *\n * ## Relationship to `useInsert`\n *\n * `useInsert` calls `adapter.commitInsert(bounds)` which returns a node and\n * dispatches a `createInsertOp`. This descriptor delegates to `deps.insert.commit`\n * which encapsulates both factory + op dispatch in one call. This keeps the\n * dep contract thin and avoids importing `createInsertOp` into the descriptor.\n */\n\nimport type { Action } from '@weasel-js/routing';\nimport type { InvocationCtx, OngoingHandle, BindingOpts, OngoingOverlay, DragSample } from '@weasel-js/routing';\nimport { resolveParams } from '@weasel-js/routing';\nimport type { InsertDep, InsertExtras, SnapDep } from '../depSchema';\nimport type { Op } from 'core/ops/types';\nimport type { Scene } from 'core/scene/types';\nimport type { GestureContext, InsertBehavior, InsertPoint } from '../../gestures/types';\nimport { gesturePlaneReader, gestureViewReader } from '../../gestures/shared/screenTolerance';\nimport type { View } from 'core/viewport/view';\nimport { commitGestureOps, readGestureLifecycle, reduceBehaviorEnd, runBehaviorCancel } from '../gestureLifecycle';\nimport { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport type { TextEditDep } from '../depSchema';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport { shapeKindInfo } from 'core/shapeKinds';\nimport type { KitInsertShape } from 'core/shapeKinds';\nimport { inPlane, insertLayer } from '../planeInput';\nimport type { PlaneMap } from 'core/viewport/parallax';\n\n// ---------------------------------------------------------------------------\n// Internal scratch\n// ---------------------------------------------------------------------------\n\ninterface InsertScratch {\n dep: InsertDep;\n /** Text-edit dep captured at gesture start, for the text kind's\n * drop-into-the-caret step. Stashed rather than read at commit because\n * the dispatcher only builds the deps bag once, on `start` — every later\n * pump event carries `deps: {}`. */\n textEdit: TextEditDep | undefined;\n /** World-space point snapper from the `snap` dep, or identity when the\n * dep isn't registered. Applied to the drag's start and current point so\n * the live preview and the committed geometry agree. Freehand pencil\n * samples are deliberately NOT snapped — a grid-quantized freehand trail\n * is a staircase, not a stroke. */\n snap: (p: { x: number; y: number }) => { x: number; y: number };\n /** The active binding's opts — re-resolved at commit time so thunked\n * params see the latest tool state (e.g. polygon `sides` after ArrowUp). */\n opts: BindingOpts | undefined;\n /** RAW (unsnapped) drag endpoints in world space. `shapeEndpoints`\n * constrains the angle first, THEN aligns the endpoint to the grid, so\n * the documented modifier ordering holds for the preview and the commit. */\n startX: number;\n startY: number;\n currentX: number;\n currentY: number;\n /** Pointer trail accumulated by the dispatcher in world space. Same array\n * reference as `ctx.drag.points`; pencil-kind commits read from this. */\n points: ReadonlyArray<DragSample> | null;\n /** Live Alt-key state from the most recent pump event. Alt INVERTS the\n * binding's nominal `originMode` (corner → center and vice versa), so\n * the user can press / release Alt mid-drag and the preview/commit\n * flip without needing the dispatcher to re-route to a different\n * binding. Captured per-onMove from `ctx.modifiers.alt`. */\n altHeld: boolean;\n /** Live Shift-key state from the most recent pump event. Constrains the\n * `line` kind to 15° increments (the modifier the line tool documents).\n * Captured per-onMove from `ctx.modifiers.shift`. */\n shiftHeld: boolean;\n /** Cleared once `onEnd` runs so subsequent `overlay()` calls report no\n * in-flight preview (mirrors the areaSelect/lasso convention). */\n open: boolean;\n /** Behaviors from `opts.behaviors`; empty when none were bound. */\n behaviors: InsertBehavior<unknown>[];\n /** Reused gesture context handed to behaviors. Its `origin` holds the\n * start point under {@link GESTURE_KEY}, after `onStart` shaped it. */\n gestureCtx: GestureContext<unknown>;\n readView: () => View | null;\n readPlane: () => PlaneMap | null;\n /** The endpoints after Shift-constrain, the `snap` dep and the behaviors,\n * recomputed on every pump event so each behavior runs once per frame. */\n shaped: { start: InsertPoint; current: InsertPoint };\n /** Captured at `start` for committing a behavior's `Op[]`. */\n scene: Scene<unknown, string, unknown> | undefined;\n applyOps: ((ops: Op[], label: string) => void) | undefined;\n selection: SelectionApi | undefined;\n /** Accumulated user-driven rotation (radians) layered on top of any\n * drag-direction / params rotation. Driven by `insert.adjustRotation`\n * (Shift+wheel during engaged phase). Only consulted for kinds that\n * carry a `rotation` field on their extras (star / polygon today). */\n userRotation: number;\n}\n\n// Module-scoped pointer to the in-flight insert scratch. There is at most\n// one insert gesture at a time (single primary pointer) so a single ref\n// is sufficient. `insert.adjustRotation` reads this to mutate the live\n// scratch without needing handle-passing plumbing through the dispatcher.\nlet liveInsertScratch: InsertScratch | null = null;\n\n/** Resolve the effective origin mode from the binding's nominal opt\n * and live Alt state. Alt inverts: `corner` ⇄ `center`. Applies to\n * every shape kind — radial shapes (polygon/star) included; the\n * overlay paints an `anchorPoint` dot at the click so corner mode\n * reads as anchored even though no polygon vertex sits there.\n */\nfunction effectiveOriginMode(\n paramsOrigin: unknown,\n altHeld: boolean,\n): 'corner' | 'center' {\n const nominal: 'corner' | 'center' = paramsOrigin === 'center' ? 'center' : 'corner';\n if (!altHeld) return nominal;\n return nominal === 'center' ? 'corner' : 'center';\n}\n\n/** Compute the insert AABB from drag endpoints.\n * - `'corner'` (default): bounds = drag rect (top-left → bottom-right of cursor sweep).\n * - `'center'`: bounds = symmetric AABB anchored on the start point.\n * Used when the tool's Alt-modifier binding passes\n * `originMode: 'center'` (Illustrator/Figma convention). */\nfunction computeBounds(\n startX: number, startY: number,\n currentX: number, currentY: number,\n originMode: 'corner' | 'center',\n): { x: number; y: number; width: number; height: number } {\n if (originMode === 'center') {\n const dx = Math.abs(currentX - startX);\n const dy = Math.abs(currentY - startY);\n return { x: startX - dx, y: startY - dy, width: dx * 2, height: dy * 2 };\n }\n return {\n x: Math.min(startX, currentX),\n y: Math.min(startY, currentY),\n width: Math.abs(currentX - startX),\n height: Math.abs(currentY - startY),\n };\n}\n\n/** Constrain `end` to the nearest 15° increment around `start`, preserving\n * the drag length. The line tool's documented Shift behavior. */\nfunction snapTo15Degrees(\n start: { x: number; y: number },\n end: { x: number; y: number },\n): { x: number; y: number } {\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n const len = Math.hypot(dx, dy);\n if (len === 0) return end;\n const step = Math.PI / 12; // 15°\n const snapped = Math.round(Math.atan2(dy, dx) / step) * step;\n return { x: start.x + len * Math.cos(snapped), y: start.y + len * Math.sin(snapped) };\n}\n\n/** The key an insert's single gesture point rides under in the behaviors'\n * `draggedIds` / `origin` / `current` — insert has no node id yet. */\nconst GESTURE_KEY = 'gesture';\n\n/**\n * Shape the raw drag endpoints, in order: the line tool's Shift-constrain\n * (on raw coords, so the locked angle survives), the `snap` dep, then each\n * behavior's `onMove`, each seeing the points the one before it returned.\n * Stored on `scratch.shaped`; `resolveEndpoints` reads it.\n */\nfunction shapeEndpoints(scratch: InsertScratch, modifiers: GestureContext<unknown>['modifiers']): void {\n const resolved = resolveParams(scratch.opts?.params);\n const kind = (resolved?.['kind'] as string | undefined) ?? 'rect';\n const gctx = scratch.gestureCtx;\n let start = gctx.origin.get(GESTURE_KEY) as InsertPoint;\n let current = { x: scratch.currentX, y: scratch.currentY };\n if (kind === 'line' && scratch.shiftHeld) {\n current = snapTo15Degrees({ x: scratch.startX, y: scratch.startY }, current);\n }\n current = scratch.snap(current);\n\n if (scratch.behaviors.length > 0) {\n gctx.modifiers = { ...modifiers };\n gctx.pointer = { worldX: scratch.currentX, worldY: scratch.currentY, clientX: 0, clientY: 0 };\n gctx.view = scratch.readView();\n gctx.plane = scratch.readPlane();\n gctx.current.set(GESTURE_KEY, current);\n const mode = effectiveOriginMode(resolved?.['originMode'], scratch.altHeld);\n for (const b of scratch.behaviors) {\n const bounds = computeBounds(start.x, start.y, current.x, current.y, mode);\n const r = b.onMove?.(gctx, { start, current, bounds, pose: bounds });\n if (!r) continue;\n if (r.start) start = r.start;\n if (r.current) current = r.current;\n }\n gctx.current.set(GESTURE_KEY, current);\n }\n scratch.shaped = { start, current };\n}\n\n/**\n * The effective endpoints: `scratch.shaped`, plus — for the `line` kind\n * only — the alt/center reading as \"mirror the start around the pointer\"\n * rather than \"grow a symmetric AABB\".\n *\n * Every geometry consumer (bounds, extras, preview) goes through this, so\n * the live overlay and the committed node can't disagree.\n */\nfunction resolveEndpoints(\n scratch: InsertScratch,\n kind: string,\n mode: 'corner' | 'center',\n): { startX: number; startY: number; currentX: number; currentY: number } {\n let { start } = scratch.shaped;\n const { current } = scratch.shaped;\n\n // A line has no area, so \"from center\" means the drag is a half-line:\n // mirror the start to the far side of the pointer.\n if (kind === 'line' && mode === 'center') {\n start = { x: start.x - (current.x - start.x), y: start.y - (current.y - start.y) };\n }\n\n return { startX: start.x, startY: start.y, currentX: current.x, currentY: current.y };\n}\n\n/** Build a typed `InsertExtras` from the static params + gesture context.\n * Kit-built-in kinds (line / polygon / star / pencil) read kind-specific\n * fields; unknown kinds pass the raw params through as `{ kind, ... }`. */\nfunction buildExtras(\n params: Record<string, unknown> | undefined,\n startX: number,\n startY: number,\n currentX: number,\n currentY: number,\n points: ReadonlyArray<DragSample> | null,\n): InsertExtras {\n const kind = ((params?.['kind'] as string | undefined) ?? 'rect');\n switch (kind) {\n case 'rect':\n case 'ellipse':\n return { kind } as InsertExtras;\n case 'line':\n // Use the live drag endpoints (not AABB) so the line preserves the\n // user's drag direction — drag from bottom-left to top-right makes a\n // line that slopes up, not the bounds diagonal.\n return { kind: 'line', a: { x: startX, y: startY }, b: { x: currentX, y: currentY } };\n case 'polygon': {\n const sides = Number(params?.['sides'] ?? 6);\n // When the tool omits rotation, point the first vertex along the\n // drag vector so dragging in a direction orients the shape that\n // way. Sub-pixel drags (no direction yet) fall back to 0.\n const dragAngle = (currentX === startX && currentY === startY)\n ? 0\n : Math.atan2(currentY - startY, currentX - startX);\n const rotation = params?.['rotation'] !== undefined\n ? Number(params['rotation'])\n : dragAngle;\n const extras: InsertExtras = { kind: 'polygon', sides, rotation };\n // Drag-from-center: tool's Alt binding passes `originMode:'center'`.\n // Compute polygon center + radius from the drag vector so the shape\n // anchors on the click point. Without this, the dep falls back to\n // inscribing in the AABB (drag-from-corner default).\n if (params?.['originMode'] === 'center') {\n const dx = currentX - startX;\n const dy = currentY - startY;\n (extras as { center?: unknown }).center = { x: startX, y: startY };\n (extras as { radius?: unknown }).radius = Math.hypot(dx, dy);\n } else {\n if (params?.['center'] !== undefined) (extras as { center?: unknown }).center = params['center'];\n if (params?.['radius'] !== undefined) (extras as { radius?: unknown }).radius = params['radius'];\n }\n return extras;\n }\n case 'star': {\n const pts = Number(params?.['points'] ?? 5);\n const ir = Number(params?.['innerRadiusRatio'] ?? 0.5);\n const dragAngle = (currentX === startX && currentY === startY)\n ? 0\n : Math.atan2(currentY - startY, currentX - startX);\n const rotation = params?.['rotation'] !== undefined\n ? Number(params['rotation'])\n : dragAngle;\n const extras: InsertExtras = { kind: 'star', points: pts, innerRadiusRatio: ir, rotation };\n if (params?.['originMode'] === 'center') {\n const dx = currentX - startX;\n const dy = currentY - startY;\n (extras as { center?: unknown }).center = { x: startX, y: startY };\n (extras as { outerRadius?: unknown }).outerRadius = Math.hypot(dx, dy);\n } else {\n if (params?.['center'] !== undefined) (extras as { center?: unknown }).center = params['center'];\n if (params?.['outerRadius'] !== undefined) (extras as { outerRadius?: unknown }).outerRadius = params['outerRadius'];\n }\n return extras;\n }\n case 'pencil':\n // Prefer tool-supplied samples (param) when present — pencil tools may\n // capture richer per-sample data (pressure/tilt). Fall back to the\n // dispatcher's accumulated pointer trail.\n return {\n kind: 'pencil',\n samples: (params?.['samples'] as ReadonlyArray<DragSample> | undefined)\n ?? points\n ?? [],\n };\n default:\n // Consumer-defined kind: pass everything through so a custom insert\n // dep can read its own fields.\n return { ...(params ?? {}), kind } as InsertExtras;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Descriptor\n// ---------------------------------------------------------------------------\n\n/**\n * @experimental\n * Static descriptor for the `insert` Action.\n *\n * Requires dep-schema entry: `insert`.\n * Node `kind` is read from `opts.params.kind`; defaults to `'rect'` when absent.\n *\n * @see useInsert — the React hook this descriptor mirrors for the simple case.\n */\nexport const insertAction: Action & { requires: string[] } = inPlane({\n id: 'insert',\n label: 'Insert',\n group: 'insert',\n eligible: { capability: 'creates-shapes' },\n requires: ['insert', 'selection', 'snap', 'textEdit', 'scene', 'applyOps', 'view'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts?: BindingOpts): OngoingHandle {\n const dep = ctx.deps.insert as InsertDep | undefined;\n if (!dep) return {};\n\n // Starting a draw retires any prior selection — the lingering halo\n // around an unrelated node while the user is drawing a new shape is\n // just visual noise, and it primes the UX bug where a drag that\n // continues over the selected node would otherwise drive the move\n // action via fall-through. The clear is unconditional: the user has\n // committed to \"I'm making a new thing\" by engaging a creation tool.\n const selection = ctx.deps.selection as SelectionApi | undefined;\n if (selection && selection.get().length > 0) {\n selection.clear();\n }\n\n const snapDep = ctx.deps.snap as SnapDep | undefined;\n const snap = snapDep\n ? (p: { x: number; y: number }) => snapDep.point(p)\n : (p: { x: number; y: number }) => p;\n const behaviors = (opts?.behaviors ?? []) as InsertBehavior<unknown>[];\n const readView = gestureViewReader(ctx.deps);\n const readPlane = gesturePlaneReader(ctx.deps);\n const origin = snap({ x: ctx.world.x, y: ctx.world.y });\n const gestureCtx: GestureContext<unknown> = {\n draggedIds: [GESTURE_KEY],\n origin: new Map<string, unknown>([[GESTURE_KEY, origin]]),\n current: new Map<string, unknown>([[GESTURE_KEY, origin]]),\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 // No node exists to adapt until commit; insert behaviors read points.\n adapter: undefined as unknown as GestureContext<unknown>['adapter'],\n scratch: {},\n };\n for (const b of behaviors) b.onStart?.(gestureCtx);\n const startPoint = gestureCtx.origin.get(GESTURE_KEY) as InsertPoint;\n\n const scratch: InsertScratch = {\n dep,\n textEdit: ctx.deps.textEdit as TextEditDep | undefined,\n snap,\n opts,\n behaviors,\n gestureCtx,\n readView,\n readPlane,\n shaped: { start: startPoint, current: startPoint },\n scene: ctx.deps.scene as Scene<unknown, string, unknown> | undefined,\n applyOps: ctx.deps.applyOps as ((ops: Op[], label: string) => void) | undefined,\n selection,\n startX: ctx.world.x,\n startY: ctx.world.y,\n currentX: ctx.world.x,\n currentY: ctx.world.y,\n points: ctx.drag?.points ?? null,\n altHeld: ctx.modifiers.alt,\n shiftHeld: ctx.modifiers.shift,\n open: true,\n userRotation: 0,\n };\n liveInsertScratch = scratch;\n\n return {\n kind: 'insert',\n onMove(moveCtx: InvocationCtx): void {\n scratch.currentX = moveCtx.world.x;\n scratch.currentY = moveCtx.world.y;\n scratch.shiftHeld = moveCtx.modifiers.shift;\n // Track live Alt state for the corner ⇄ center toggle. Each\n // pointermove carries fresh modifier state from the dispatcher;\n // releasing / pressing Alt mid-drag flips the bounds mode on\n // the next move tick (true modifier-only events don't fire\n // without a cursor change).\n scratch.altHeld = moveCtx.modifiers.alt;\n // The dispatcher mutates its own per-gesture trail in place but\n // attaches the array reference to each InvocationCtx.drag — keep\n // the latest reference in case the dispatcher swaps it.\n if (moveCtx.drag?.points) scratch.points = moveCtx.drag.points;\n shapeEndpoints(scratch, moveCtx.modifiers);\n },\n overlay(): OngoingOverlay | null {\n if (!scratch.open) return null;\n // Resolve params on every overlay() so thunked params (polygon\n // sides ticking via ArrowUp mid-drag) reflect in the live preview.\n const resolved = resolveParams(scratch.opts?.params);\n const kind = (resolved?.['kind'] as string | undefined) ?? 'rect';\n // Consumer-defined kinds aren't renderable by the kit overlay —\n // skip the preview rather than emit something half-faithful.\n if (!shapeKindInfo(kind)?.insertPreview) return null;\n const mode = effectiveOriginMode(resolved?.['originMode'], scratch.altHeld);\n const pts = resolveEndpoints(scratch, kind, mode);\n const bounds = computeBounds(\n pts.startX, pts.startY, pts.currentX, pts.currentY, mode,\n );\n // Derive extras with the *effective* mode so polygon/star\n // center+radius reflect the live Alt toggle, not the binding's\n // nominal originMode.\n const effectiveExtras = buildExtras(\n { ...(resolved ?? {}), originMode: mode },\n pts.startX, pts.startY, pts.currentX, pts.currentY,\n scratch.points,\n );\n applyUserRotation(effectiveExtras, scratch.userRotation);\n return {\n kind: 'insertPreview',\n shape: effectiveExtras.kind as KitInsertShape,\n bounds,\n extras: effectiveExtras,\n // Anchor dot at the click point — chrome that sells \"this\n // is where the drag started.\" Useful for radial shapes\n // (no vertex at click) and for center mode (dot marks the\n // growth axis).\n anchorPoint: { x: pts.startX, y: pts.startY },\n };\n },\n onEnd(endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n scratch.open = false;\n if (liveInsertScratch === scratch) liveInsertScratch = null;\n if (reason === 'cancel') {\n runBehaviorCancel(scratch.behaviors, scratch.gestureCtx);\n return;\n }\n\n const { dep: d, opts: o } = scratch;\n const points = endCtx.drag?.points ?? scratch.points;\n\n // Resolve params at commit time so thunked params (polygon\n // `sides` adjusted mid-drag, etc.) see the latest tool state.\n const resolved = resolveParams(o?.params);\n\n if (scratch.behaviors.length > 0) {\n const r = reduceBehaviorEnd(scratch.behaviors, scratch.gestureCtx);\n if (r === null) return;\n if (r !== undefined) {\n if (scratch.scene) {\n commitGestureOps(\n {\n scene: scratch.scene,\n applyOps: scratch.applyOps,\n adapter: defaultCommitAdapter(scratch.scene, scratch.selection?.adapterMethods),\n },\n readGestureLifecycle(resolved, 'Insert', scratch.behaviors),\n r,\n );\n }\n return;\n }\n }\n\n const kind = (resolved?.['kind'] as string | undefined) ?? 'rect';\n const mode = effectiveOriginMode(resolved?.['originMode'], scratch.altHeld);\n const { startX, startY, currentX, currentY } = resolveEndpoints(scratch, kind, mode);\n const bounds = computeBounds(startX, startY, currentX, currentY, mode);\n const extras = buildExtras(\n { ...(resolved ?? {}), originMode: mode },\n startX, startY, currentX, currentY, points,\n );\n applyUserRotation(extras, scratch.userRotation);\n\n // Sub-threshold drag — no insert. The test is kind-aware because\n // \"zero size\" isn't one shape:\n // - pencil: a sample trail can be meaningful even when start ≈ end\n // (a closed loop), so no guard at all.\n // - line: has no area by construction. An axis-aligned line has a\n // zero-height (or zero-width) AABB and is perfectly valid — only\n // a zero-LENGTH drag is degenerate. (Shift-constrain makes\n // axis-aligned the common case, which is how this surfaced.)\n // - everything else: a zero extent in either axis is degenerate.\n if (!isCommittableExtent(bounds, extras.kind)) return;\n\n const id = d.commit(bounds, extras);\n\n // A freshly dragged text box is empty, so it draws nothing and the\n // tool's own `click on selected body → enterTextEdit` binding has\n // nothing visible to click. Drop straight into the caret instead —\n // which is also what every other editor does with a text tool.\n // `textEdit` is optional: without it the box is still committed,\n // exactly as before.\n //\n // Read from the scratch, not `endCtx.deps`: the dispatcher builds\n // the deps bag once, at `start`, and passes `deps: {}` on every\n // later pump event. Same reason the insert dep itself is stashed.\n if (id !== null && extras.kind === 'text') {\n scratch.textEdit?.startEdit(String(id), { caret: 0 });\n }\n },\n };\n },\n },\n /**\n * Insert is always available — no selection required. Returns `true` so the\n * dispatcher allows the action through on every drag-on-empty gesture.\n *\n * Fixed from the stale `ActionDisabledReason.SelectionRequired`\n * placeholder that was silently blocking all dispatcher-routed inserts.\n */\n enabled: () => true as const,\n}, insertLayer);\n\n/** Whether a drag produced enough extent to be worth committing, per kind.\n * See the call site in `onEnd` for why this isn't one uniform test. */\nfunction isCommittableExtent(\n bounds: { width: number; height: number },\n kind: string,\n): boolean {\n if (kind === 'pencil') return true;\n if (kind === 'line') return bounds.width !== 0 || bounds.height !== 0;\n return bounds.width !== 0 && bounds.height !== 0;\n}\n\n/** Add a user-driven rotation offset onto kinds that carry rotation. Rect\n * / ellipse / line / pencil don't expose a rotation field on their\n * extras today, so they ignore the offset. */\nfunction applyUserRotation(extras: InsertExtras, userRotation: number): void {\n if (userRotation === 0) return;\n if (extras.kind === 'star' || extras.kind === 'polygon') {\n (extras as { rotation: number }).rotation += userRotation;\n }\n}\n\n/** Radians per unit of wheel deltaY. Tuned so a typical mouse-wheel click\n * (deltaY ≈ 100) yields ~25°, while a trackpad event (deltaY ≈ 1–10)\n * yields a smooth 0.25–2.5° increment. */\nconst ROTATION_SENSITIVITY = Math.PI / 720;\n\n/**\n * @experimental\n * Companion to `insertAction` — adjusts the live insert gesture's\n * `userRotation` based on wheel deltaY. Intended to be bound to\n * Shift+wheel during the insert tool's engaged phase. No-op when no\n * insert is in flight.\n */\nexport const insertRotateAction: Action = {\n id: 'insert.adjustRotation',\n label: 'Insert — rotate',\n group: 'insert',\n eligible: { capability: 'creates-shapes' },\n invoker: {\n timing: 'immediate' as const,\n run: (_deps, params) => {\n const scratch = liveInsertScratch;\n if (!scratch || !scratch.open) return;\n const deltaY = (params as { deltaY?: number } | undefined)?.deltaY ?? 0;\n if (deltaY === 0) return;\n scratch.userRotation += deltaY * ROTATION_SENSITIVITY;\n },\n },\n};\n"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { editingLayer as e, inPlane as t } from "../planeInput.js";
2
+ import { pathToAnchors as n } from "../../../features/paths/anchors.js";
3
+ import { editAnchorSet as r, insertAnchorOnSegment as i, segmentAt as a } from "../../../features/paths/anchorEdits.js";
4
+ import { ActionDisabledReason as o } from "@weasel-js/routing";
5
+ //#region src/interactions/actions/defaults/insertPathAnchor.ts
6
+ var s = 8, c = {
7
+ glyph: "penPlus",
8
+ fallback: "crosshair"
9
+ };
10
+ function l(e, t, r) {
11
+ let i = e?.editAnchors;
12
+ if (!i?.editingId) return null;
13
+ let o = i.getEditablePath(i.editingId);
14
+ if (!o || o.kind !== "polygon") return null;
15
+ let c = (e?.view)?.get().scale, l = a(n(o), t, r, {
16
+ tolerancePx: s,
17
+ ...c ? { scale: c } : {}
18
+ });
19
+ return l ? {
20
+ dep: i,
21
+ hit: l
22
+ } : null;
23
+ }
24
+ var u = t({
25
+ id: "insertPathAnchor",
26
+ label: "Insert anchor",
27
+ defaultBinding: {
28
+ kind: "click",
29
+ mods: { alt: !0 }
30
+ },
31
+ cursor: c,
32
+ eligible: { capability: "edits-anchors" },
33
+ requires: ["editAnchors", "view"],
34
+ invoker: {
35
+ timing: "immediate",
36
+ run(e, t) {
37
+ let n = t?.worldX, a = t?.worldY;
38
+ if (typeof n != "number" || typeof a != "number") return;
39
+ let o = l(e, n, a);
40
+ if (!o) return;
41
+ let { dep: s, hit: c } = o, u = s.getEditablePath(s.editingId), d = -1, f = r(u, (e) => (d = i(e, c), d !== -1));
42
+ f && (s.applyEdit(s.editingId, f, "Insert anchor"), s.setSelectedAnchors([d]));
43
+ }
44
+ },
45
+ enabled: (e, t) => !e?.editAnchors?.editingId || t && !l(e, t.x, t.y) ? o.NotApplicable : !0
46
+ }, e);
47
+ //#endregion
48
+ export { u as insertPathAnchorAction };
49
+
50
+ //# sourceMappingURL=insertPathAnchor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insertPathAnchor.js","names":["SEGMENT_HIT_PX","INSERT_CURSOR","segmentUnder","dep","deps","path","scale","hit","segmentAt","pathToAnchors","x","y","insertPathAnchorAction","inPlane","wx","params","wy","under","inserted","next","editAnchorSet","insertAnchorOnSegment","set","at","ActionDisabledReason","editingLayer"],"sources":["../../../../src/interactions/actions/defaults/insertPathAnchor.ts"],"sourcesContent":["/**\n * `insertPathAnchorAction` — Alt+click on a segment of the path being\n * edited inserts a new anchor there, without changing the path's shape.\n *\n * Alt+click because plain click already belongs to `selectAnchorAction`\n * (select an anchor, or clear the anchor selection on a miss), and\n * Alt+Shift+click to `cutPathAtAnchorAction`.\n *\n * The segment test lives in `enabled`, which the dispatcher hands the\n * event's world point: a click off every segment (or on an anchor) reports\n * not-applicable, so the dispatcher falls through to whatever else the\n * click could mean, and the hover pump shows `cursor` only where a click\n * would insert.\n */\n\nimport type { Action, ActionDeps, ImmediateInvoker } from '@weasel-js/routing';\nimport { ActionDisabledReason } from '@weasel-js/routing';\nimport type { CursorSpec } from '@weasel-js/cursor';\nimport type { EditAnchorsDep, ViewApi } from '../depSchema';\nimport type { PolygonPath } from '@weasel-js/geom';\nimport { pathToAnchors } from 'features/paths/anchors';\nimport {\n editAnchorSet,\n insertAnchorOnSegment,\n segmentAt,\n type AnchorSet,\n type SegmentHit,\n} from 'features/paths/anchorEdits';\nimport { inPlane, editingLayer } from '../planeInput';\n\n/** Screen-px reach of a segment, and the radius around each anchor that\n * stays the anchor's. Matches the path-anchor affordance's default hit\n * radius, so the two regions meet without a gap. */\nconst SEGMENT_HIT_PX = 8;\n\nconst INSERT_CURSOR: CursorSpec = { glyph: 'penPlus', fallback: 'crosshair' };\n\nfunction segmentUnder(\n deps: ActionDeps | undefined,\n x: number,\n y: number,\n): { dep: EditAnchorsDep; hit: SegmentHit } | null {\n const dep = deps?.editAnchors as EditAnchorsDep | undefined;\n if (!dep?.editingId) return null;\n const path = dep.getEditablePath(dep.editingId) as PolygonPath | null | undefined;\n if (!path || path.kind !== 'polygon') return null;\n const scale = (deps?.view as ViewApi | undefined)?.get().scale;\n const hit = segmentAt(pathToAnchors(path) as AnchorSet, x, y, {\n tolerancePx: SEGMENT_HIT_PX,\n ...(scale ? { scale } : {}),\n });\n return hit ? { dep, hit } : null;\n}\n\nexport const insertPathAnchorAction: Action & { requires: string[] } = inPlane({\n id: 'insertPathAnchor',\n label: 'Insert anchor',\n defaultBinding: { kind: 'click', mods: { alt: true } },\n cursor: INSERT_CURSOR,\n eligible: { capability: 'edits-anchors' },\n requires: ['editAnchors', 'view'],\n invoker: {\n timing: 'immediate',\n run(deps, params) {\n const wx = params?.worldX as number | undefined;\n const wy = params?.worldY as number | undefined;\n if (typeof wx !== 'number' || typeof wy !== 'number') return;\n const under = segmentUnder(deps, wx, wy);\n if (!under) return;\n const { dep, hit } = under;\n const path = dep.getEditablePath(dep.editingId) as PolygonPath;\n let inserted = -1;\n const next = editAnchorSet(path, (set) => {\n inserted = insertAnchorOnSegment(set, hit);\n return inserted !== -1;\n });\n if (!next) return;\n dep.applyEdit(dep.editingId, next, 'Insert anchor');\n dep.setSelectedAnchors([inserted]);\n },\n } as ImmediateInvoker,\n enabled: (deps, at) => {\n const dep = deps?.editAnchors as EditAnchorsDep | undefined;\n if (!dep?.editingId) return ActionDisabledReason.NotApplicable;\n if (at && !segmentUnder(deps, at.x, at.y)) return ActionDisabledReason.NotApplicable;\n return true;\n },\n}, editingLayer);\n"],"mappings":";;;;;AAiCA,IAAMA,IAAiB,GAEjBC,IAA4B;CAAE,OAAO;CAAW,UAAU;AAAY;AAE5E,SAASC,EACP,GACA,GACA,GACiD;CACjD,IAAMC,IAAMC,GAAM;CAClB,IAAI,CAACD,GAAK,WAAW,OAAO;CAC5B,IAAME,IAAOF,EAAI,gBAAgBA,EAAI,SAAS;CAC9C,IAAI,CAACE,KAAQA,EAAK,SAAS,WAAW,OAAO;CAC7C,IAAMC,KAASF,GAAM,KAAA,EAA8B,IAAI,CAAC,CAAC,OACnDG,IAAMC,EAAUC,EAAcJ,CAAI,GAAgBK,GAAGC,GAAG;EAC5D,aAAaX;EACb,GAAIM,IAAQ,EAAE,SAAM,IAAI,CAAC;CAC3B,CAAC;CACD,OAAOC,IAAM;EAAE;EAAK;CAAI,IAAI;AAC9B;AAEA,IAAaK,IAA0DC,EAAQ;CAC7E,IAAI;CACJ,OAAO;CACP,gBAAgB;EAAE,MAAM;EAAS,MAAM,EAAE,KAAK,GAAK;CAAE;CACrD,QAAQZ;CACR,UAAU,EAAE,YAAY,gBAAgB;CACxC,UAAU,CAAC,eAAe,MAAM;CAChC,SAAS;EACP,QAAQ;EACR,IAAI,GAAM,GAAQ;GAChB,IAAMa,IAAKC,GAAQ,QACbC,IAAKD,GAAQ;GACnB,IAAI,OAAOD,KAAO,YAAY,OAAOE,KAAO,UAAU;GACtD,IAAMC,IAAQf,EAAaE,GAAMU,GAAIE,CAAE;GACvC,IAAI,CAACC,GAAO;GACZ,IAAM,EAAE,QAAK,WAAQA,GACfZ,IAAOF,EAAI,gBAAgBA,EAAI,SAAS,GAC1Ce,IAAW,IACTC,IAAOC,EAAcf,IAAO,OAChC,IAAWgB,EAAsBC,GAAKf,CAAG,GAClCW,MAAa,GACrB;GACD,AAAKC,MACLhB,EAAI,UAAUA,EAAI,WAAWgB,GAAM,eAAe,GAClDhB,EAAI,mBAAmB,CAACe,CAAQ,CAAC;EACnC;CACF;CACA,UAAU,GAAM,MAEV,CADQd,GAAM,aACR,aACNmB,KAAM,CAACrB,EAAaE,GAAMmB,EAAG,GAAGA,EAAG,CAAC,IAAUC,EAAqB,gBAChE;AAEX,GAAGC,CAAY"}
@@ -0,0 +1,156 @@
1
+ import { gestureViewReader as e } from "../../gestures/shared/screenTolerance.js";
2
+ import { reduceBehaviorEnd as t, runBehaviorCancel as n } from "../gestureLifecycle.js";
3
+ import { applyOpsTo as r } from "../../../core/applyOps.js";
4
+ import { LASSO_VERTICES as i } from "../lasso-select/behaviors/selectFromLasso.js";
5
+ import { resolveParams as a, setScratch as o } from "@weasel-js/routing";
6
+ //#region src/interactions/actions/defaults/lassoSelect.ts
7
+ function s(e) {
8
+ if (e.length === 0) return null;
9
+ let t = e[0].x, n = e[0].y, r = e[0].x, i = e[0].y;
10
+ for (let a of e) a.x < t && (t = a.x), a.y < n && (n = a.y), a.x > r && (r = a.x), a.y > i && (i = a.y);
11
+ return {
12
+ x: t,
13
+ y: n,
14
+ width: r - t,
15
+ height: i - n
16
+ };
17
+ }
18
+ function c(e, t, n, r) {
19
+ if (e.hitTestLasso) return e.hitTestLasso(t, n, r);
20
+ let i = s(t);
21
+ return i ? e.hitTestArea(i, r) : [];
22
+ }
23
+ function l(e, t) {
24
+ let n = {
25
+ getSelection: () => e.getSelection(),
26
+ setSelection: (t) => e.setSelection(t),
27
+ hitTestArea: (n) => e.hitTestArea(n, t),
28
+ hitTestLasso: (n, r) => c(e, n, r, t),
29
+ applyOps: (e) => r(n, e)
30
+ };
31
+ return n;
32
+ }
33
+ var u = 2, d = {
34
+ id: "lassoSelect",
35
+ label: "Lasso Select",
36
+ eligible: { capability: "creates-selection" },
37
+ requires: ["lassoSelect", "view"],
38
+ invoker: {
39
+ timing: "ongoing",
40
+ start(r, s) {
41
+ let d = r.deps.lassoSelect;
42
+ if (!d) return {};
43
+ let f = a(s?.params), p = r.deps.view, m = [{
44
+ x: r.world.x,
45
+ y: r.world.y
46
+ }], h = s?.behaviors ?? [], g = null, _ = e(r.deps);
47
+ if (h.length > 0) {
48
+ let e = {
49
+ worldX: r.world.x,
50
+ worldY: r.world.y,
51
+ shiftHeld: r.modifiers.shift
52
+ };
53
+ g = {
54
+ draggedIds: ["gesture"],
55
+ origin: /* @__PURE__ */ new Map([["gesture", e]]),
56
+ current: /* @__PURE__ */ new Map([["gesture", { ...e }]]),
57
+ snap: null,
58
+ modifiers: { ...r.modifiers },
59
+ pointer: {
60
+ worldX: r.world.x,
61
+ worldY: r.world.y,
62
+ clientX: 0,
63
+ clientY: 0
64
+ },
65
+ view: _(),
66
+ adapter: l(d, p),
67
+ scratch: {}
68
+ }, o(g.scratch, i, m);
69
+ for (let e of h) e.onStart?.(g);
70
+ }
71
+ let v = {
72
+ dep: d,
73
+ mode: f?.mode ?? "intersect",
74
+ minVertexSpacing: f?.minVertexSpacing ?? u,
75
+ view: p,
76
+ vertices: m,
77
+ shiftHeld: r.modifiers.shift,
78
+ currentX: r.world.x,
79
+ currentY: r.world.y,
80
+ open: !0,
81
+ behaviors: h,
82
+ gesture: g
83
+ };
84
+ return {
85
+ kind: "lasso",
86
+ onMove(e) {
87
+ let { x: t, y: n } = e.world;
88
+ v.currentX = t, v.currentY = n;
89
+ let r = v.vertices[v.vertices.length - 1], i = t - r.x, a = n - r.y, o = v.minVertexSpacing;
90
+ i * i + a * a >= o * o && v.vertices.push({
91
+ x: t,
92
+ y: n
93
+ });
94
+ let s = v.gesture;
95
+ if (s) {
96
+ s.modifiers = { ...e.modifiers }, s.pointer = {
97
+ worldX: t,
98
+ worldY: n,
99
+ clientX: 0,
100
+ clientY: 0
101
+ }, s.view = _(), s.current.set("gesture", {
102
+ worldX: t,
103
+ worldY: n,
104
+ shiftHeld: v.shiftHeld
105
+ });
106
+ let r = {
107
+ vertices: v.vertices,
108
+ shiftHeld: v.shiftHeld
109
+ };
110
+ for (let e of v.behaviors) e.onMove?.(s, r);
111
+ }
112
+ },
113
+ overlay() {
114
+ return v.open ? {
115
+ kind: "lasso",
116
+ vertices: v.vertices,
117
+ current: {
118
+ x: v.currentX,
119
+ y: v.currentY
120
+ },
121
+ shiftHeld: v.shiftHeld
122
+ } : null;
123
+ },
124
+ onEnd(e, r) {
125
+ if (v.open = !1, r === "cancel") {
126
+ v.gesture && n(v.behaviors, v.gesture);
127
+ return;
128
+ }
129
+ let { dep: i, mode: a, view: o, vertices: s, shiftHeld: l, gesture: u } = v;
130
+ if (u) {
131
+ let e = t(v.behaviors, u);
132
+ if (e !== void 0) {
133
+ e !== null && u.adapter.applyOps(e);
134
+ return;
135
+ }
136
+ }
137
+ if (s.length < 3) {
138
+ l || i.setSelection([]);
139
+ return;
140
+ }
141
+ let d = c(i, s, a, o);
142
+ if (l) {
143
+ let e = [...i.getSelection()];
144
+ for (let t of d) e.includes(t) || e.push(t);
145
+ i.setSelection(e);
146
+ } else i.setSelection(d);
147
+ }
148
+ };
149
+ }
150
+ },
151
+ enabled: () => !0
152
+ };
153
+ //#endregion
154
+ export { d as lassoSelectAction };
155
+
156
+ //# sourceMappingURL=lassoSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lassoSelect.js","names":["polygonAABB","pts","minX","minY","maxX","maxY","p","hitTestPolygon","dep","vertices","mode","view","aabb","behaviorAdapter","adapter","ids","rect","polygon","applyOpsTo","ops","DEFAULT_MIN_VERTEX_SPACING","lassoSelectAction","ctx","params","resolveParams","opts","behaviors","gesture","readView","gestureViewReader","pose","setScratch","LASSO_VERTICES","b","scratch","moveCtx","x","y","last","dx","dy","min","g","proposed","reason","runBehaviorCancel","d","r","reduceBehaviorEnd","shiftHeld","hits","merged","id"],"sources":["../../../../src/interactions/actions/defaults/lassoSelect.ts"],"sourcesContent":["/**\n * `lassoSelectAction` — ongoing Action descriptor for polygon lasso selection.\n *\n * ## Status: REAL\n *\n * Implements lasso-select via the full pointermove stream (accumulated in\n * `InvocationCtx.drag.points` by the dispatcher extension):\n * - `start`: initializes vertex list from the drag-start world point.\n * - `onMove`: appends the current world point, skipping one closer than\n * the binding's `params.minVertexSpacing` (default 2 world-px) to the\n * last vertex.\n * - `onEnd('commit')`: performs hit-testing against the accumulated polygon.\n * Uses `dep.hitTestLasso(polygon, mode)` when available — `mode` from the\n * binding's `params.mode`, default `'intersect'` — otherwise falls back to\n * the polygon's AABB via `dep.hitTestArea(bounds)`.\n * Extends selection with shift, replaces otherwise.\n * - `onEnd('cancel')`: no-op.\n *\n * ## Behaviors\n *\n * `opts.behaviors` (`LassoSelectBehavior[]`) run over a `GestureContext`\n * whose `origin.get('gesture')` is the start pose, whose scratch holds the\n * vertices under `LASSO_VERTICES`, and whose adapter answers selection and\n * hit-testing from the `lassoSelect` dep. `onEnd` is first-non-undefined-wins:\n * `Op[]` is applied in place of the default selection, `null` aborts, and\n * all-`undefined` falls through to it.\n *\n * ## Dep\n *\n * Requires `lassoSelect` dep from DepSchema:\n * `{ hitTestLasso?(...), hitTestArea(...), getSelection(), setSelection(ids) }`\n *\n * ## What this does NOT wire\n *\n * - Committed history — always transient (no undo entry); a behavior's ops\n * are applied the same way.\n * - Debug sink recording.\n */\n\nimport { gestureViewReader } from '../../gestures/shared/screenTolerance';\nimport { resolveParams, setScratch, type Action } from '@weasel-js/routing';\nimport type { InvocationCtx, OngoingHandle, OngoingOverlay, Point2 } from '@weasel-js/routing';\nimport type { LassoSelectDep, ViewApi } from '../depSchema';\nimport type { LassoHitMode, LassoSelectAdapter } from 'core/adapters/types';\nimport type { Op } from 'core/ops/types';\nimport { applyOpsTo } from 'core/applyOps';\nimport type { GestureContext, LassoSelectBehavior, LassoSelectPose } from '../../gestures/types';\nimport { LASSO_VERTICES } from '../lasso-select/behaviors/selectFromLasso';\nimport { reduceBehaviorEnd, runBehaviorCancel } from '../gestureLifecycle';\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\n/** Compute AABB of a polygon (for fallback hit-test when hitTestLasso is absent). */\nfunction polygonAABB(\n pts: Point2[],\n): { x: number; y: number; width: number; height: number } | null {\n if (pts.length === 0) return null;\n let minX = pts[0].x, minY = pts[0].y, maxX = pts[0].x, maxY = pts[0].y;\n for (const p of pts) {\n if (p.x < minX) minX = p.x;\n if (p.y < minY) minY = p.y;\n if (p.x > maxX) maxX = p.x;\n if (p.y > maxY) maxY = p.y;\n }\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\n\n/** The dep's polygon test, or its rect test over the polygon's AABB when it\n * has none. What both the default commit and a behavior's adapter ask. */\nfunction hitTestPolygon(\n dep: LassoSelectDep,\n vertices: ReadonlyArray<Point2>,\n mode: LassoHitMode,\n view: ViewApi | undefined,\n): string[] {\n if (dep.hitTestLasso) return dep.hitTestLasso(vertices, mode, view);\n const aabb = polygonAABB(vertices as Point2[]);\n return aabb ? dep.hitTestArea(aabb, view) : [];\n}\n\n/** The adapter a behavior sees: selection and hit-testing from the dep,\n * scoped to the view the lasso started in. */\nfunction behaviorAdapter(dep: LassoSelectDep, view: ViewApi | undefined): LassoSelectAdapter {\n const adapter: LassoSelectAdapter = {\n getSelection: () => dep.getSelection(),\n setSelection: (ids) => dep.setSelection(ids),\n hitTestArea: (rect) => dep.hitTestArea(rect, view),\n hitTestLasso: (polygon, mode) => hitTestPolygon(dep, polygon, mode, view),\n applyOps: (ops: Op[]) => applyOpsTo(adapter, ops),\n };\n return adapter;\n}\n\n// ---------------------------------------------------------------------------\n// Internal scratch\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_MIN_VERTEX_SPACING = 2; // world-px\n\ninterface LassoScratch {\n dep: LassoSelectDep;\n mode: LassoHitMode;\n minVertexSpacing: number;\n /** The view the lasso started in: what it does not paint is not taken. */\n view: ViewApi | undefined;\n vertices: Point2[];\n shiftHeld: boolean;\n /** Current pointer position — paint the live \"close-line\" from the last\n * vertex back to the start while the gesture is open. Tracked separately\n * from `vertices` because we throttle vertex insertion. */\n currentX: number;\n currentY: number;\n /** Cleared by `onEnd` so post-commit `overlay()` returns null. */\n open: boolean;\n behaviors: LassoSelectBehavior[];\n /** Built only when there are behaviors to hand it to. */\n gesture: GestureContext<LassoSelectPose> | null;\n}\n\n// ---------------------------------------------------------------------------\n// Descriptor\n// ---------------------------------------------------------------------------\n\n/**\n * @experimental\n * Static descriptor for the `lassoSelect` Action.\n *\n * Requires dep-schema entry: `lassoSelect`.\n *\n * The invoker accumulates pointermove vertices via `InvocationCtx.drag.points`\n * (dispatcher extension) and commits a polygon hit-test at drag end.\n *\n * @see useLassoSelect — the React hook this descriptor mirrors for the default case.\n */\nexport const lassoSelectAction: Action & { requires: string[] } = {\n id: 'lassoSelect',\n label: 'Lasso Select',\n eligible: { capability: 'creates-selection' },\n requires: ['lassoSelect', 'view'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts): OngoingHandle {\n const dep = ctx.deps.lassoSelect as LassoSelectDep | undefined;\n if (!dep) return {};\n\n const params = resolveParams(opts?.params) as\n { mode?: LassoHitMode; minVertexSpacing?: number } | undefined;\n const view = ctx.deps.view as ViewApi | undefined;\n const vertices: Point2[] = [{ x: ctx.world.x, y: ctx.world.y }];\n const behaviors = (opts?.behaviors ?? []) as LassoSelectBehavior[];\n let gesture: GestureContext<LassoSelectPose> | null = null;\n const readView = gestureViewReader(ctx.deps);\n if (behaviors.length > 0) {\n const pose: LassoSelectPose = {\n worldX: ctx.world.x, worldY: ctx.world.y, shiftHeld: ctx.modifiers.shift,\n };\n gesture = {\n draggedIds: ['gesture'],\n origin: new Map([['gesture', pose]]),\n current: new Map([['gesture', { ...pose }]]),\n snap: null,\n modifiers: { ...ctx.modifiers },\n pointer: { worldX: ctx.world.x, worldY: ctx.world.y, clientX: 0, clientY: 0 },\n view: readView(),\n adapter: behaviorAdapter(dep, view) as unknown as GestureContext<LassoSelectPose>['adapter'],\n scratch: {},\n };\n // The live array, so a behavior reads every vertex added since.\n setScratch(gesture.scratch, LASSO_VERTICES, vertices);\n for (const b of behaviors) b.onStart?.(gesture);\n }\n const scratch: LassoScratch = {\n dep,\n mode: params?.mode ?? 'intersect',\n minVertexSpacing: params?.minVertexSpacing ?? DEFAULT_MIN_VERTEX_SPACING,\n view,\n vertices,\n shiftHeld: ctx.modifiers.shift,\n currentX: ctx.world.x,\n currentY: ctx.world.y,\n open: true,\n behaviors,\n gesture,\n };\n\n return {\n kind: 'lasso',\n onMove(moveCtx: InvocationCtx): void {\n const { x, y } = moveCtx.world;\n scratch.currentX = x;\n scratch.currentY = y;\n const last = scratch.vertices[scratch.vertices.length - 1];\n const dx = x - last.x;\n const dy = y - last.y;\n const min = scratch.minVertexSpacing;\n if (dx * dx + dy * dy >= min * min) {\n scratch.vertices.push({ x, y });\n }\n const g = scratch.gesture;\n if (g) {\n g.modifiers = { ...moveCtx.modifiers };\n g.pointer = { worldX: x, worldY: y, clientX: 0, clientY: 0 };\n g.view = readView();\n g.current.set('gesture', { worldX: x, worldY: y, shiftHeld: scratch.shiftHeld });\n const proposed = { vertices: scratch.vertices, shiftHeld: scratch.shiftHeld };\n for (const b of scratch.behaviors) b.onMove?.(g, proposed);\n }\n },\n overlay(): OngoingOverlay | null {\n if (!scratch.open) return null;\n return {\n kind: 'lasso',\n vertices: scratch.vertices,\n current: { x: scratch.currentX, y: scratch.currentY },\n shiftHeld: scratch.shiftHeld,\n };\n },\n onEnd(_endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n scratch.open = false;\n if (reason === 'cancel') {\n if (scratch.gesture) runBehaviorCancel(scratch.behaviors, scratch.gesture);\n return;\n }\n\n const { dep: d, mode, view, vertices, shiftHeld, gesture: g } = scratch;\n\n if (g) {\n const r = reduceBehaviorEnd(scratch.behaviors, g);\n if (r !== undefined) {\n if (r !== null) (g.adapter as unknown as LassoSelectAdapter).applyOps!(r);\n return;\n }\n }\n\n // Need at least 3 vertices for a meaningful polygon; otherwise no-op.\n if (vertices.length < 3) {\n if (!shiftHeld) d.setSelection([]);\n return;\n }\n\n const hits = hitTestPolygon(d, vertices, mode, view);\n\n if (shiftHeld) {\n // Extend: merge current + hits (deduplicated).\n const current = d.getSelection();\n const merged = [...current];\n for (const id of hits) {\n if (!merged.includes(id)) merged.push(id);\n }\n d.setSelection(merged);\n } else {\n d.setSelection(hits);\n }\n },\n };\n },\n },\n enabled: () => true,\n};\n"],"mappings":"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"}