@weasel-js/core 1.9.3 → 1.9.4

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 (542) hide show
  1. package/CHANGELOG.md +356 -0
  2. package/README.md +2 -2
  3. package/dist/WeaselProvider.js +5 -5
  4. package/dist/affordances/composeAffordanceLayer.js +10 -20
  5. package/dist/affordances/composeAffordanceLayer.js.map +1 -1
  6. package/dist/affordances/cornerResize.js +25 -17
  7. package/dist/affordances/cornerResize.js.map +1 -1
  8. package/dist/affordances/hitAffordanceRegions.js +27 -20
  9. package/dist/affordances/hitAffordanceRegions.js.map +1 -1
  10. package/dist/affordances/rotationHandle.js +18 -18
  11. package/dist/affordances/rotationHandle.js.map +1 -1
  12. package/dist/animation/behaviors/momentum.js +93 -55
  13. package/dist/animation/behaviors/momentum.js.map +1 -1
  14. package/dist/animation/loop.js +10 -12
  15. package/dist/animation/loop.js.map +1 -1
  16. package/dist/animation/reflow.js +8 -8
  17. package/dist/animation/reflow.js.map +1 -1
  18. package/dist/animation/stagger.js +64 -56
  19. package/dist/animation/stagger.js.map +1 -1
  20. package/dist/animation/timeline/booking.js +62 -54
  21. package/dist/animation/timeline/booking.js.map +1 -1
  22. package/dist/animation/timeline/createTimeline.js +85 -76
  23. package/dist/animation/timeline/createTimeline.js.map +1 -1
  24. package/dist/animation/timeline/sampleTrack.js +13 -5
  25. package/dist/animation/timeline/sampleTrack.js.map +1 -1
  26. package/dist/animation/useAnimator.js +45 -35
  27. package/dist/animation/useAnimator.js.map +1 -1
  28. package/dist/animation/wrappers/animateLifecycle.js +31 -24
  29. package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
  30. package/dist/animation/wrappers/animateOnSetPose.js +28 -26
  31. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
  32. package/dist/animation/wrappers/instantPose.js +13 -0
  33. package/dist/animation/wrappers/instantPose.js.map +1 -0
  34. package/dist/{poseDescriptor-D-OH-tu5.d.ts → autoPoseDescriptor-Ct7yqivU.d.ts} +28 -3
  35. package/dist/barrel/chrome.js +16 -0
  36. package/dist/barrel/input.js +19 -0
  37. package/dist/barrel/interactions.js +42 -0
  38. package/dist/barrel/paint.js +18 -0
  39. package/dist/barrel/paths.js +19 -0
  40. package/dist/barrel/renderer.js +20 -0
  41. package/dist/barrel/routing.js +51 -0
  42. package/dist/barrel/text.js +18 -0
  43. package/dist/barrel/viewport.js +52 -0
  44. package/dist/builtins-DPcdghtB.d.ts +1223 -0
  45. package/dist/canvas/Canvas.js +363 -448
  46. package/dist/canvas/Canvas.js.map +1 -1
  47. package/dist/canvas/CanvasView.js +164 -165
  48. package/dist/canvas/CanvasView.js.map +1 -1
  49. package/dist/canvas/CursorCoordsHud.js +37 -32
  50. package/dist/canvas/CursorCoordsHud.js.map +1 -1
  51. package/dist/canvas/DrawCanvas.js +49 -43
  52. package/dist/canvas/DrawCanvas.js.map +1 -1
  53. package/dist/canvas/MinimapCanvas.js +26 -25
  54. package/dist/canvas/MinimapCanvas.js.map +1 -1
  55. package/dist/canvas/NodeShape.js +59 -377
  56. package/dist/canvas/NodeShape.js.map +1 -1
  57. package/dist/canvas/PickHud.js +50 -47
  58. package/dist/canvas/PickHud.js.map +1 -1
  59. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +167 -0
  60. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -0
  61. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +13 -13
  62. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +67 -0
  63. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -0
  64. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +16 -0
  65. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -0
  66. package/dist/canvas/SceneCanvas/coordTrace.js +10 -0
  67. package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -0
  68. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +112 -70
  69. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  70. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +9 -8
  71. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
  72. package/dist/canvas/SceneCanvas/features.js +1 -0
  73. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  74. package/dist/canvas/SceneCanvas/isDev.js +12 -0
  75. package/dist/canvas/SceneCanvas/isDev.js.map +1 -0
  76. package/dist/canvas/SceneCanvas/poseGeometry.js +29 -28
  77. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
  78. package/dist/canvas/SceneCanvas/poseRegistrars.js +13 -0
  79. package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -0
  80. package/dist/canvas/SceneCanvas/props.js +38 -0
  81. package/dist/canvas/SceneCanvas/props.js.map +1 -0
  82. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +21 -62
  83. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
  84. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
  85. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +46 -48
  86. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
  87. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +33 -33
  88. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  89. package/dist/canvas/SceneCanvas.js +534 -788
  90. package/dist/canvas/SceneCanvas.js.map +1 -1
  91. package/dist/canvas/SceneViewCanvas.js +45 -43
  92. package/dist/canvas/SceneViewCanvas.js.map +1 -1
  93. package/dist/canvas/buildSceneLayer.js +91 -0
  94. package/dist/canvas/buildSceneLayer.js.map +1 -0
  95. package/dist/canvas/buildSceneTree.js +16 -19
  96. package/dist/canvas/buildSceneTree.js.map +1 -1
  97. package/dist/canvas/canvasRenderer.js +68 -52
  98. package/dist/canvas/canvasRenderer.js.map +1 -1
  99. package/dist/canvas/deps/changes.js +13 -0
  100. package/dist/canvas/deps/changes.js.map +1 -0
  101. package/dist/canvas/deps/editAnchors.js +28 -28
  102. package/dist/canvas/deps/insert.js +119 -91
  103. package/dist/canvas/deps/insert.js.map +1 -1
  104. package/dist/canvas/deps/slice.js +46 -45
  105. package/dist/canvas/deps/slice.js.map +1 -1
  106. package/dist/canvas/deps/textEdit.js +10 -9
  107. package/dist/canvas/deps/textEdit.js.map +1 -1
  108. package/dist/canvas/derivedPath.js +46 -23
  109. package/dist/canvas/derivedPath.js.map +1 -1
  110. package/dist/canvas/getNodeAtPoint.js +7 -7
  111. package/dist/canvas/getNodeAtPoint.js.map +1 -1
  112. package/dist/canvas/hud.module.js +1 -1
  113. package/dist/canvas/hud.module.js.map +1 -1
  114. package/dist/canvas/kitRequirements.js +2 -2
  115. package/dist/canvas/kitRequirements.js.map +1 -1
  116. package/dist/canvas/layerOrder.js +13 -6
  117. package/dist/canvas/layerOrder.js.map +1 -1
  118. package/dist/canvas/minimapMath.js +12 -10
  119. package/dist/canvas/minimapMath.js.map +1 -1
  120. package/dist/canvas/nodeShapes/derivedPainter.js +34 -0
  121. package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -0
  122. package/dist/canvas/nodeShapes/imagePainter.js +87 -0
  123. package/dist/canvas/nodeShapes/imagePainter.js.map +1 -0
  124. package/dist/canvas/nodeShapes/memo.js +9 -0
  125. package/dist/canvas/nodeShapes/memo.js.map +1 -0
  126. package/dist/canvas/nodeShapes/nodePaint.js +57 -0
  127. package/dist/canvas/nodeShapes/nodePaint.js.map +1 -0
  128. package/dist/canvas/nodeShapes/pathPainter.js +38 -0
  129. package/dist/canvas/nodeShapes/pathPainter.js.map +1 -0
  130. package/dist/canvas/nodeShapes/poseBox.js +20 -0
  131. package/dist/canvas/nodeShapes/poseBox.js.map +1 -0
  132. package/dist/canvas/nodeShapes/rectFallbackPainter.js +38 -0
  133. package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -0
  134. package/dist/canvas/nodeShapes/shapePainter.js +72 -0
  135. package/dist/canvas/nodeShapes/shapePainter.js.map +1 -0
  136. package/dist/canvas/nodeShapes/textPainter.js +55 -0
  137. package/dist/canvas/nodeShapes/textPainter.js.map +1 -0
  138. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  139. package/dist/canvas/paintCull.js +10 -11
  140. package/dist/canvas/paintCull.js.map +1 -1
  141. package/dist/canvas/pickWalk.js +52 -63
  142. package/dist/canvas/pickWalk.js.map +1 -1
  143. package/dist/canvas/poseRotation.js +11 -23
  144. package/dist/canvas/poseRotation.js.map +1 -1
  145. package/dist/canvas/renderDebugSnapshot.js +5 -5
  146. package/dist/canvas/renderSceneToPixels.js +3 -1
  147. package/dist/canvas/renderSceneToPixels.js.map +1 -1
  148. package/dist/canvas/sceneAdapter.js +66 -148
  149. package/dist/canvas/sceneAdapter.js.map +1 -1
  150. package/dist/canvas/sceneClipboard.js +112 -0
  151. package/dist/canvas/sceneClipboard.js.map +1 -0
  152. package/dist/canvas/sceneSlotWiring.js +4 -4
  153. package/dist/canvas/sceneSlotWiring.js.map +1 -1
  154. package/dist/canvas/sceneViewRender.js +39 -40
  155. package/dist/canvas/sceneViewRender.js.map +1 -1
  156. package/dist/canvas/useCanvasRenderer.js +14 -6
  157. package/dist/canvas/useCanvasRenderer.js.map +1 -1
  158. package/dist/canvas/useCanvasView.js +58 -0
  159. package/dist/canvas/useCanvasView.js.map +1 -0
  160. package/dist/canvas/useFrameLoop.js +35 -26
  161. package/dist/canvas/useFrameLoop.js.map +1 -1
  162. package/dist/canvas/useSceneLayerList.js +21 -0
  163. package/dist/canvas/useSceneLayerList.js.map +1 -0
  164. package/dist/clipboard.d.ts +10 -6
  165. package/dist/clone.d.ts +4 -3
  166. package/dist/core/adapters/arrayAdapter.js +48 -39
  167. package/dist/core/adapters/arrayAdapter.js.map +1 -1
  168. package/dist/core/device/index.js +5 -4
  169. package/dist/core/device/useDeviceProfile.js +38 -44
  170. package/dist/core/device/useDeviceProfile.js.map +1 -1
  171. package/dist/core/device/watchDevicePixelRatio.js +17 -0
  172. package/dist/core/device/watchDevicePixelRatio.js.map +1 -0
  173. package/dist/core/fillInPoseFrame.js.map +1 -1
  174. package/dist/core/geometry/poseDescriptor.js +21 -19
  175. package/dist/core/geometry/poseDescriptor.js.map +1 -1
  176. package/dist/core/geometry/poseFrame.js +44 -0
  177. package/dist/core/geometry/poseFrame.js.map +1 -0
  178. package/dist/core/geometry/poseRotation.js.map +1 -1
  179. package/dist/core/geometry/regionHit.js +9 -10
  180. package/dist/core/geometry/regionHit.js.map +1 -1
  181. package/dist/core/geometry/unionBounds.js +31 -29
  182. package/dist/core/geometry/unionBounds.js.map +1 -1
  183. package/dist/core/isPlainObject.js +2 -11
  184. package/dist/core/ops/arrange.js +1 -0
  185. package/dist/core/ops/arrange.js.map +1 -1
  186. package/dist/core/ops/create.js +10 -5
  187. package/dist/core/ops/create.js.map +1 -1
  188. package/dist/core/ops/delete.js +12 -24
  189. package/dist/core/ops/delete.js.map +1 -1
  190. package/dist/core/ops/reorder/index.js +43 -40
  191. package/dist/core/ops/reorder/index.js.map +1 -1
  192. package/dist/core/ops/reorder/setChildOrder.js +34 -0
  193. package/dist/core/ops/reorder/setChildOrder.js.map +1 -0
  194. package/dist/core/paintKinds.js +5 -5
  195. package/dist/core/paintKinds.js.map +1 -1
  196. package/dist/core/scene/NodeProperties.js.map +1 -1
  197. package/dist/core/scene/appliedLog.js +37 -0
  198. package/dist/core/scene/appliedLog.js.map +1 -0
  199. package/dist/core/scene/arrivalWindow.js +101 -0
  200. package/dist/core/scene/arrivalWindow.js.map +1 -0
  201. package/dist/core/scene/derivedPath.js.map +1 -1
  202. package/dist/core/scene/historyFacade.js +84 -0
  203. package/dist/core/scene/historyFacade.js.map +1 -0
  204. package/dist/core/scene/kitOps.js +173 -0
  205. package/dist/core/scene/kitOps.js.map +1 -0
  206. package/dist/core/scene/layerStack.js +38 -0
  207. package/dist/core/scene/layerStack.js.map +1 -0
  208. package/dist/core/scene/lockGuard.js +37 -0
  209. package/dist/core/scene/lockGuard.js.map +1 -0
  210. package/dist/core/scene/nodeFnFields.js +5 -6
  211. package/dist/core/scene/nodeFnFields.js.map +1 -1
  212. package/dist/core/scene/nodeMemo.js +45 -19
  213. package/dist/core/scene/nodeMemo.js.map +1 -1
  214. package/dist/core/scene/nodeStore.js +126 -0
  215. package/dist/core/scene/nodeStore.js.map +1 -0
  216. package/dist/core/scene/pickability.js +6 -0
  217. package/dist/core/scene/pickability.js.map +1 -0
  218. package/dist/core/scene/poseFeed.js +38 -38
  219. package/dist/core/scene/poseFeed.js.map +1 -1
  220. package/dist/core/scene/poseOverrides.js +34 -38
  221. package/dist/core/scene/poseOverrides.js.map +1 -1
  222. package/dist/core/scene/renderOrder.js +84 -0
  223. package/dist/core/scene/renderOrder.js.map +1 -0
  224. package/dist/core/scene/scene.js +289 -866
  225. package/dist/core/scene/scene.js.map +1 -1
  226. package/dist/core/scene/serialization.js +68 -0
  227. package/dist/core/scene/serialization.js.map +1 -0
  228. package/dist/core/scene/treeOrder.js +13 -0
  229. package/dist/core/scene/treeOrder.js.map +1 -0
  230. package/dist/core/scene/types.js.map +1 -1
  231. package/dist/core/viewport/meanScale.js +1 -1
  232. package/dist/core/viewport/meanScale.js.map +1 -1
  233. package/dist/core/viewport/view.js +12 -12
  234. package/dist/core/viewport/view.js.map +1 -1
  235. package/dist/core/viewport/zoomBounds.js +10 -8
  236. package/dist/core/viewport/zoomBounds.js.map +1 -1
  237. package/dist/{cornerHandles-BCrDp_mH.d.ts → cornerHandles-CtCb8a3G.d.ts} +1 -1
  238. package/dist/debug/createDebugOverlayLayer.js +14 -14
  239. package/dist/debug/createDebugOverlayLayer.js.map +1 -1
  240. package/dist/debug/flag.js +2 -41
  241. package/dist/features/chrome-caps/useHoverTracking.js +22 -17
  242. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
  243. package/dist/features/focus/gateLayer.js +3 -4
  244. package/dist/features/focus/gateLayer.js.map +1 -1
  245. package/dist/features/images/imageCache.js +19 -9
  246. package/dist/features/images/imageCache.js.map +1 -1
  247. package/dist/features/ingestion/contentHandlers.js +14 -11
  248. package/dist/features/ingestion/contentHandlers.js.map +1 -1
  249. package/dist/features/ingestion/index.js +1 -1
  250. package/dist/features/ingestion/registerKitHandlers.js +7 -7
  251. package/dist/features/ingestion/weaselJsonHandler.js +17 -14
  252. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
  253. package/dist/features/meshPaint/lazyKind.js +201 -35
  254. package/dist/features/meshPaint/lazyKind.js.map +1 -1
  255. package/dist/features/meshPaint/meshPaint.js +82 -79
  256. package/dist/features/meshPaint/meshPaint.js.map +1 -1
  257. package/dist/features/minimap/createMinimapContribution.js +42 -42
  258. package/dist/features/minimap/layers.js +44 -62
  259. package/dist/features/minimap/layers.js.map +1 -1
  260. package/dist/features/parallax/createParallaxPlane.js +10 -14
  261. package/dist/features/parallax/createParallaxPlane.js.map +1 -1
  262. package/dist/features/paths/anchorEdits.js +19 -8
  263. package/dist/features/paths/anchorEdits.js.map +1 -1
  264. package/dist/features/paths/anchors.js +31 -26
  265. package/dist/features/paths/anchors.js.map +1 -1
  266. package/dist/features/paths/booleans.js +2 -2
  267. package/dist/features/paths/index.js +13 -11
  268. package/dist/features/paths/markerCommands.js +37 -36
  269. package/dist/features/paths/markerCommands.js.map +1 -1
  270. package/dist/features/paths/pathInWorld.js +19 -19
  271. package/dist/features/paths/pathInWorld.js.map +1 -1
  272. package/dist/features/paths/pathLayer.js.map +1 -1
  273. package/dist/features/paths/strokeToPath.js +40 -0
  274. package/dist/features/paths/strokeToPath.js.map +1 -0
  275. package/dist/features/paths/tessellate/stroke.js.map +1 -1
  276. package/dist/features/patterns/commandPaint.js +18 -0
  277. package/dist/features/patterns/commandPaint.js.map +1 -0
  278. package/dist/features/patterns/index.js +5 -17
  279. package/dist/features/patterns/index.js.map +1 -1
  280. package/dist/features/patterns/rasterizeTile.js +17 -0
  281. package/dist/features/patterns/rasterizeTile.js.map +1 -0
  282. package/dist/features/patterns/resolveSpec.js +52 -44
  283. package/dist/features/patterns/resolveSpec.js.map +1 -1
  284. package/dist/features/poseRun/usePoseRun.js +8 -3
  285. package/dist/features/poseRun/usePoseRun.js.map +1 -1
  286. package/dist/features/selection/SelectionContext.js +5 -0
  287. package/dist/features/selection/SelectionContext.js.map +1 -1
  288. package/dist/features/selection/overlay.js +18 -18
  289. package/dist/features/selection/overlay.js.map +1 -1
  290. package/dist/features/text/domOffsets.js +82 -0
  291. package/dist/features/text/domOffsets.js.map +1 -0
  292. package/dist/features/text/domRuns.js +103 -131
  293. package/dist/features/text/domRuns.js.map +1 -1
  294. package/dist/features/text/hitTest.js +5 -2
  295. package/dist/features/text/hitTest.js.map +1 -1
  296. package/dist/features/text/isTextData.js +8 -0
  297. package/dist/features/text/isTextData.js.map +1 -0
  298. package/dist/features/text/overlayDirection.js +15 -0
  299. package/dist/features/text/overlayDirection.js.map +1 -0
  300. package/dist/features/text/runs/rangeStyle.js +32 -34
  301. package/dist/features/text/runs/rangeStyle.js.map +1 -1
  302. package/dist/features/text/textCommand.js +34 -33
  303. package/dist/features/text/textCommand.js.map +1 -1
  304. package/dist/features/text/textToPath.js +40 -40
  305. package/dist/features/text/textToPath.js.map +1 -1
  306. package/dist/features/text/useSceneTextEdit.js +76 -82
  307. package/dist/features/text/useSceneTextEdit.js.map +1 -1
  308. package/dist/features/text/useTextEdit.js +184 -160
  309. package/dist/features/text/useTextEdit.js.map +1 -1
  310. package/dist/features/tiling/createTiledLayer.js +24 -22
  311. package/dist/features/tiling/createTiledLayer.js.map +1 -1
  312. package/dist/index.d.ts +11033 -7749
  313. package/dist/index.js +316 -309
  314. package/dist/input/keyState.js +42 -43
  315. package/dist/input/keyState.js.map +1 -1
  316. package/dist/input/useKeyModifiers.js +11 -0
  317. package/dist/input/useKeyModifiers.js.map +1 -0
  318. package/dist/interactions/actions/align/align.js +8 -8
  319. package/dist/interactions/actions/clipboard/clipboardOps.js +34 -32
  320. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
  321. package/dist/interactions/actions/clipboard/materializePaste.js +10 -7
  322. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
  323. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
  324. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +1 -1
  325. package/dist/interactions/actions/defaultCommitAdapter.js +20 -18
  326. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
  327. package/dist/interactions/actions/defaults/align.js +9 -10
  328. package/dist/interactions/actions/defaults/align.js.map +1 -1
  329. package/dist/interactions/actions/defaults/anchorEditing.js +59 -81
  330. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
  331. package/dist/interactions/actions/defaults/areaSelect.js +35 -38
  332. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  333. package/dist/interactions/actions/defaults/clipboard.js +26 -10
  334. package/dist/interactions/actions/defaults/clipboard.js.map +1 -1
  335. package/dist/interactions/actions/defaults/clone.js +44 -60
  336. package/dist/interactions/actions/defaults/clone.js.map +1 -1
  337. package/dist/interactions/actions/defaults/copySubtree.js +40 -0
  338. package/dist/interactions/actions/defaults/copySubtree.js.map +1 -0
  339. package/dist/interactions/actions/defaults/distribute.js +14 -13
  340. package/dist/interactions/actions/defaults/distribute.js.map +1 -1
  341. package/dist/interactions/actions/defaults/duplicate.js +17 -57
  342. package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
  343. package/dist/interactions/actions/defaults/editAnchors.js +18 -18
  344. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
  345. package/dist/interactions/actions/defaults/flip.js +52 -46
  346. package/dist/interactions/actions/defaults/flip.js.map +1 -1
  347. package/dist/interactions/actions/defaults/group.js +43 -48
  348. package/dist/interactions/actions/defaults/group.js.map +1 -1
  349. package/dist/interactions/actions/defaults/ingest.js +35 -33
  350. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  351. package/dist/interactions/actions/defaults/insert.js +50 -51
  352. package/dist/interactions/actions/defaults/insert.js.map +1 -1
  353. package/dist/interactions/actions/defaults/insertPathAnchor.js +7 -7
  354. package/dist/interactions/actions/defaults/lassoSelect.js +67 -70
  355. package/dist/interactions/actions/defaults/lassoSelect.js.map +1 -1
  356. package/dist/interactions/actions/defaults/move.js +267 -249
  357. package/dist/interactions/actions/defaults/move.js.map +1 -1
  358. package/dist/interactions/actions/defaults/nudge.js +40 -68
  359. package/dist/interactions/actions/defaults/nudge.js.map +1 -1
  360. package/dist/interactions/actions/defaults/nudgeSteps.js +37 -0
  361. package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -0
  362. package/dist/interactions/actions/defaults/reorder.js +2 -0
  363. package/dist/interactions/actions/defaults/reorder.js.map +1 -1
  364. package/dist/interactions/actions/defaults/resize.js +104 -98
  365. package/dist/interactions/actions/defaults/resize.js.map +1 -1
  366. package/dist/interactions/actions/defaults/rotate.js +111 -110
  367. package/dist/interactions/actions/defaults/rotate.js.map +1 -1
  368. package/dist/interactions/actions/defaults/setFill.js +7 -7
  369. package/dist/interactions/actions/defaults/setFillOpacity.js +4 -4
  370. package/dist/interactions/actions/defaults/setStroke.js +12 -12
  371. package/dist/interactions/actions/defaults/setStrokeOpacity.js +6 -6
  372. package/dist/interactions/actions/defaults/sliceOps.js +19 -19
  373. package/dist/interactions/actions/defaults/viewportDragPan.js +37 -26
  374. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
  375. package/dist/interactions/actions/edit-anchors/geometry.js +28 -23
  376. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
  377. package/dist/interactions/actions/flip/helpers.js +30 -17
  378. package/dist/interactions/actions/flip/helpers.js.map +1 -1
  379. package/dist/interactions/actions/hitSelection.js +8 -0
  380. package/dist/interactions/actions/hitSelection.js.map +1 -0
  381. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +14 -18
  382. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
  383. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +5 -5
  384. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
  385. package/dist/interactions/actions/move/behaviors/snapToContainer.js +32 -21
  386. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
  387. package/dist/interactions/actions/move/gestureAdapter.js +32 -15
  388. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
  389. package/dist/interactions/actions/move/landedDescendants.js +33 -0
  390. package/dist/interactions/actions/move/landedDescendants.js.map +1 -0
  391. package/dist/interactions/actions/outlines/createOutlines.js +18 -18
  392. package/dist/interactions/actions/poseDescriptorDep.js +16 -4
  393. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
  394. package/dist/interactions/actions/poseFrame.js +11 -6
  395. package/dist/interactions/actions/poseFrame.js.map +1 -1
  396. package/dist/interactions/actions/previewOverrides.js +5 -5
  397. package/dist/interactions/actions/previewOverrides.js.map +1 -1
  398. package/dist/interactions/actions/selectionSubtree.js +69 -0
  399. package/dist/interactions/actions/selectionSubtree.js.map +1 -0
  400. package/dist/interactions/actions/useStandardActions.js +66 -62
  401. package/dist/interactions/actions/useStandardActions.js.map +1 -1
  402. package/dist/interactions/gestures/dragGesture/dragGesture.js +4 -7
  403. package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
  404. package/dist/interactions/gestures/dragGesture/dragPointOf.js +23 -0
  405. package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -0
  406. package/dist/interactions/gestures/handleDrag/handleDrag.js +21 -26
  407. package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
  408. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +8 -6
  409. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
  410. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +8 -4
  411. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
  412. package/dist/{math-Drrw4ewZ.d.ts → math-J-ACHyEg.d.ts} +1 -2
  413. package/dist/math.d.ts +2 -3
  414. package/dist/move.d.ts +12 -11
  415. package/dist/{originProjection-DEklpDc_.d.ts → originProjection-gHnOup4e.d.ts} +1 -1
  416. package/dist/{registerProgram-BMZRDgrh.d.ts → registerProgram-T9S_PfAX.d.ts} +18 -7
  417. package/dist/renderer/DrawCommand.js.map +1 -1
  418. package/dist/renderer/WeaselRenderer.js +75 -73
  419. package/dist/renderer/WeaselRenderer.js.map +1 -1
  420. package/dist/renderer/cache/GLImageCache.js +15 -5
  421. package/dist/renderer/cache/GLImageCache.js.map +1 -1
  422. package/dist/renderer/cache/GLMeshCache.js +23 -23
  423. package/dist/renderer/cache/GLMeshCache.js.map +1 -1
  424. package/dist/renderer/cache/GLTextureCache.js +18 -1
  425. package/dist/renderer/cache/GLTextureCache.js.map +1 -1
  426. package/dist/renderer/cache/cache.js.map +1 -1
  427. package/dist/renderer/cache/markerCommandCache.js.map +1 -1
  428. package/dist/renderer/cache/strokeMeshCache.js.map +1 -1
  429. package/dist/renderer/cullDrawCommands.js +11 -11
  430. package/dist/renderer/draw/batch.js +133 -0
  431. package/dist/renderer/draw/batch.js.map +1 -0
  432. package/dist/renderer/draw/clip.js +89 -0
  433. package/dist/renderer/draw/clip.js.map +1 -0
  434. package/dist/renderer/draw/customShader.js +230 -0
  435. package/dist/renderer/draw/customShader.js.map +1 -0
  436. package/dist/renderer/draw/drawTriangles.js +8 -0
  437. package/dist/renderer/draw/drawTriangles.js.map +1 -0
  438. package/dist/renderer/draw/effects.js +28 -0
  439. package/dist/renderer/draw/effects.js.map +1 -0
  440. package/dist/renderer/draw/flushBatch.js +35 -0
  441. package/dist/renderer/draw/flushBatch.js.map +1 -0
  442. package/dist/renderer/draw/gradient.js +90 -0
  443. package/dist/renderer/draw/gradient.js.map +1 -0
  444. package/dist/renderer/draw/image.js +38 -0
  445. package/dist/renderer/draw/image.js.map +1 -0
  446. package/dist/renderer/draw/mesh.js +16 -0
  447. package/dist/renderer/draw/mesh.js.map +1 -0
  448. package/dist/renderer/draw/paintBind.js +70 -0
  449. package/dist/renderer/draw/paintBind.js.map +1 -0
  450. package/dist/renderer/draw/pathPaint.js +142 -0
  451. package/dist/renderer/draw/pathPaint.js.map +1 -0
  452. package/dist/renderer/draw/scratchPass.js +83 -0
  453. package/dist/renderer/draw/scratchPass.js.map +1 -0
  454. package/dist/renderer/draw/stencil.js +28 -0
  455. package/dist/renderer/draw/stencil.js.map +1 -0
  456. package/dist/renderer/draw/text.js +167 -0
  457. package/dist/renderer/draw/text.js.map +1 -0
  458. package/dist/renderer/draw/uniforms.js +77 -0
  459. package/dist/renderer/draw/uniforms.js.map +1 -0
  460. package/dist/renderer/draw.js +60 -1116
  461. package/dist/renderer/draw.js.map +1 -1
  462. package/dist/renderer/effects/EffectTargets.js +3 -0
  463. package/dist/renderer/effects/EffectTargets.js.map +1 -1
  464. package/dist/renderer/effects/composite.js +7 -5
  465. package/dist/renderer/effects/composite.js.map +1 -1
  466. package/dist/renderer/index.js +18 -17
  467. package/dist/renderer/math/color.js +63 -83
  468. package/dist/renderer/math/color.js.map +1 -1
  469. package/dist/renderer/math/mat3.js +15 -11
  470. package/dist/renderer/math/mat3.js.map +1 -1
  471. package/dist/renderer/math/viewToMat3.js +1 -1
  472. package/dist/renderer/math/viewToMat3.js.map +1 -1
  473. package/dist/renderer/shaders/ShaderProgram.js +13 -13
  474. package/dist/renderer/shaders/ShaderProgram.js.map +1 -1
  475. package/dist/renderer/shaders/glyphPaint.js +3 -3
  476. package/dist/renderer/shaders/glyphPaint.js.map +1 -1
  477. package/dist/renderer/shaders/gradFill.js +2 -1
  478. package/dist/renderer/shaders/gradFill.js.map +1 -1
  479. package/dist/renderer/shaders/pathFill.js +2 -1
  480. package/dist/renderer/shaders/pathFill.js.map +1 -1
  481. package/dist/renderer/shaders/patternFill.js +2 -1
  482. package/dist/renderer/shaders/patternFill.js.map +1 -1
  483. package/dist/renderer/shaders/registerProgram.js.map +1 -1
  484. package/dist/renderer/strokeLengths.js.map +1 -1
  485. package/dist/renderer/textures/registerTexture.js +25 -5
  486. package/dist/renderer/textures/registerTexture.js.map +1 -1
  487. package/dist/renderer.d.ts +16 -15
  488. package/dist/renderer.js +17 -16
  489. package/dist/resize.d.ts +5 -6
  490. package/dist/resize.js +5 -5
  491. package/dist/style.css +1 -1
  492. package/dist/test-hook/install.js +12 -6
  493. package/dist/test-hook/install.js.map +1 -1
  494. package/dist/{test-seams-CuIxe0xY.d.ts → test-seams-DM2B87-g.d.ts} +4 -4
  495. package/dist/test-seams.d.ts +2 -2
  496. package/dist/tools/builtin/ellipse/useEllipseTool.js +1 -0
  497. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
  498. package/dist/tools/builtin/hand/useHandTool.js +1 -0
  499. package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
  500. package/dist/tools/builtin/lasso/useLassoTool.js +11 -11
  501. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
  502. package/dist/tools/builtin/line/useLineTool.js +1 -0
  503. package/dist/tools/builtin/line/useLineTool.js.map +1 -1
  504. package/dist/tools/builtin/pen/usePenTool.js +153 -103
  505. package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
  506. package/dist/tools/builtin/pencil/usePencilTool.js +1 -0
  507. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
  508. package/dist/tools/builtin/polygon/usePolygonTool.js +13 -8
  509. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
  510. package/dist/tools/builtin/rect/useRectTool.js +1 -0
  511. package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
  512. package/dist/tools/builtin/select/selectionContributions.js +24 -23
  513. package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
  514. package/dist/tools/builtin/select/useSelectTool.js +51 -48
  515. package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
  516. package/dist/tools/builtin/shared/pointerFollower.js +17 -0
  517. package/dist/tools/builtin/shared/pointerFollower.js.map +1 -0
  518. package/dist/tools/builtin/slice/useSliceTool.js +49 -54
  519. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
  520. package/dist/tools/builtin/star/useStarTool.js +22 -16
  521. package/dist/tools/builtin/star/useStarTool.js.map +1 -1
  522. package/dist/tools/builtin/text/useTextTool.js +1 -0
  523. package/dist/tools/builtin/text/useTextTool.js.map +1 -1
  524. package/dist/tools/useKeybindings.js +14 -30
  525. package/dist/tools/useKeybindings.js.map +1 -1
  526. package/dist/{types-B_9g6hMM.d.ts → types-B4iJRHC3.d.ts} +5 -1
  527. package/dist/{types-A37hYkeR.d.ts → types-k-5Oqh-U.d.ts} +31 -7
  528. package/dist/util/color.js +3 -3
  529. package/dist/util/color.js.map +1 -1
  530. package/dist/util/paint.js.map +1 -1
  531. package/dist/version.js +1 -1
  532. package/package.json +20 -18
  533. package/dist/autoPoseDescriptor-vCdt55xm.d.ts +0 -27
  534. package/dist/builtins-C-VgUlWI.d.ts +0 -4514
  535. package/dist/core/isPlainObject.js.map +0 -1
  536. package/dist/debug/flag.js.map +0 -1
  537. package/dist/interactions/actions/defaults/freshNodeId.js +0 -10
  538. package/dist/interactions/actions/defaults/freshNodeId.js.map +0 -1
  539. package/dist/renderer/shaders/imageFill.js +0 -14
  540. package/dist/renderer/shaders/imageFill.js.map +0 -1
  541. package/dist/tools/prefs.js +0 -62
  542. package/dist/tools/prefs.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useLineTool.js","names":["LineIcon","useLineTool","options","useMemo","defineTool","cursorFor","insertBindingBehaviors","behaviors"],"sources":["../../../../src/tools/builtin/line/useLineTool.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { defineTool } from '../../overlayBinding';\nimport { LineIcon } from '../../../icons';\nimport type { Tool } from '../../overlayBinding';\nimport { insertBindingBehaviors, type InsertToolOptions } from '../shared/insertToolOptions';\nimport { cursorFor } from '@weasel-js/cursor';\n\n/** An endpoint of a line, in world coordinates. */\nexport interface LinePoint { x: number; y: number }\n\n/**\n * Click-down → drag → release line tool. The `drag` binding routes to\n * `insertAction`, which owns the live preview and commits through the\n * `insert` dep with `{ kind: 'line', a, b }` endpoints (not the AABB\n * diagonal), so the drag direction is preserved.\n *\n * Modifiers are applied by `insertAction`:\n * - shift: constrain to 15° increments\n * - alt: mirror the end around the start (the drag is treated as a\n * half-line) — the line-specific reading of the action's\n * corner ⇄ center origin toggle\n */\nexport function useLineTool(options: InsertToolOptions = {}): Tool<null> {\n const { behaviors } = options;\n return useMemo(\n () =>\n defineTool<null>({\n id: 'line',\n capabilities: ['creates-shapes'],\n hookName: 'useLineTool',\n cursor: cursorFor('crosshairLine', { fallback: 'crosshair' }),\n presentation: {\n label: 'Line',\n group: 'shape',\n icon: <LineIcon />,\n },\n bindings: [\n {\n spec: { kind: 'drag' },\n actionId: 'insert',\n opts: { params: { kind: 'line' } , ...insertBindingBehaviors(behaviors) },\n },\n ],\n }),\n [behaviors],\n );\n}\n"],"mappings":";;;;;;;AAsBA,SAAgBC,EAAY,IAA6B,CAAC,GAAe;CACvE,IAAM,EAAE,iBAAcC;CACtB,OAAOC,QAEHC,EAAiB;EACf,IAAI;EACJ,cAAc,CAAC,gBAAgB;EAC/B,UAAU;EACV,QAAQC,EAAU,iBAAiB,EAAE,UAAU,YAAY,CAAC;EAC5D,cAAc;GACZ,OAAO;GACP,OAAO;GACP,MAAM,kBAACL,GAAD,CAAW,CAAA;EACnB;EACA,UAAU,CACR;GACE,MAAM,EAAE,MAAM,OAAO;GACrB,UAAU;GACV,MAAM;IAAE,QAAQ,EAAE,MAAM,OAAO;IAAI,GAAGM,EAAuBC,CAAS;GAAE;EAC1E,CACF;CACF,CAAC,GACH,CAACA,CAAS,CACZ;AACF"}
1
+ {"version":3,"file":"useLineTool.js","names":["LineIcon","useLineTool","options","useMemo","defineTool","cursorFor","insertBindingBehaviors","behaviors"],"sources":["../../../../src/tools/builtin/line/useLineTool.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { defineTool } from '../../overlayBinding';\nimport { LineIcon } from '../../../icons';\nimport type { Tool } from '../../overlayBinding';\nimport { insertBindingBehaviors, type InsertToolOptions } from '../shared/insertToolOptions';\nimport { cursorFor } from '@weasel-js/cursor';\n\n/** An endpoint of a line, in world coordinates. */\nexport interface LinePoint { x: number; y: number }\n\n/**\n * Click-down → drag → release line tool. The `drag` binding routes to\n * `insertAction`, which owns the live preview and commits through the\n * `insert` dep with `{ kind: 'line', a, b }` endpoints (not the AABB\n * diagonal), so the drag direction is preserved.\n *\n * Modifiers are applied by `insertAction`:\n * - shift: constrain to 15° increments\n * - alt: mirror the end around the start (the drag is treated as a\n * half-line) — the line-specific reading of the action's\n * corner ⇄ center origin toggle\n */\nexport function useLineTool(options: InsertToolOptions = {}): Tool<null> {\n const { behaviors } = options;\n return useMemo(\n () =>\n defineTool<null>({\n id: 'line',\n keybinding: { key: '\\\\' },\n capabilities: ['creates-shapes'],\n hookName: 'useLineTool',\n cursor: cursorFor('crosshairLine', { fallback: 'crosshair' }),\n presentation: {\n label: 'Line',\n group: 'shape',\n icon: <LineIcon />,\n },\n bindings: [\n {\n spec: { kind: 'drag' },\n actionId: 'insert',\n opts: { params: { kind: 'line' } , ...insertBindingBehaviors(behaviors) },\n },\n ],\n }),\n [behaviors],\n );\n}\n"],"mappings":";;;;;;;AAsBA,SAAgBC,EAAY,IAA6B,CAAC,GAAe;CACvE,IAAM,EAAE,iBAAcC;CACtB,OAAOC,QAEHC,EAAiB;EACf,IAAI;EACJ,YAAY,EAAE,KAAK,KAAK;EACxB,cAAc,CAAC,gBAAgB;EAC/B,UAAU;EACV,QAAQC,EAAU,iBAAiB,EAAE,UAAU,YAAY,CAAC;EAC5D,cAAc;GACZ,OAAO;GACP,OAAO;GACP,MAAM,kBAACL,GAAD,CAAW,CAAA;EACnB;EACA,UAAU,CACR;GACE,MAAM,EAAE,MAAM,OAAO;GACrB,UAAU;GACV,MAAM;IAAE,QAAQ,EAAE,MAAM,OAAO;IAAI,GAAGM,EAAuBC,CAAS;GAAE;EAC1E,CACF;CACF,CAAC,GACH,CAACA,CAAS,CACZ;AACF"}
@@ -1,18 +1,20 @@
1
1
  import { pxExtent as e, withinPxRadius as t } from "../../../core/viewport/pxExtent.js";
2
- import { defaultCommitAdapter as n } from "../../../interactions/actions/defaultCommitAdapter.js";
3
- import { createDeleteOp as r } from "../../../core/ops/delete.js";
4
- import { createInsertOp as i } from "../../../core/ops/create.js";
5
- import { anchorsToPath as a, pathToAnchors as o } from "../../../features/paths/anchors.js";
2
+ import { anchorsToPath as n, pathToAnchors as r } from "../../../features/paths/anchors.js";
3
+ import { asNodeId as i } from "../../../core/scene/types.js";
4
+ import { defaultCommitAdapter as a } from "../../../interactions/actions/defaultCommitAdapter.js";
5
+ import { createDeleteOp as o } from "../../../core/ops/delete.js";
6
6
  import { defineTool as s } from "../../overlayBinding.js";
7
7
  import c from "../../../icons/PenIcon.js";
8
8
  import { nearestPathAnchor as l, reverseAnchors as u } from "../../../features/paths/nearestAnchor.js";
9
9
  import { constrainTo45 as d } from "../../../util/constrainTo45.js";
10
- import { createElement as f, useCallback as p, useMemo as m, useReducer as h, useRef as g } from "react";
11
- import { useLatest as _ } from "@weasel-js/react";
12
- import { ActionDisabledReason as v } from "@weasel-js/routing";
13
- import { cursorFor as y } from "@weasel-js/cursor";
10
+ import { createPointerFollower as f } from "../shared/pointerFollower.js";
11
+ import { boundsOfPath as p } from "@weasel-js/geom";
12
+ import { createElement as m, useCallback as h, useMemo as g, useReducer as _, useRef as v } from "react";
13
+ import { useLatest as y } from "@weasel-js/react";
14
+ import { ActionDisabledReason as b } from "@weasel-js/routing";
15
+ import { cursorFor as x } from "@weasel-js/cursor";
14
16
  //#region src/tools/builtin/pen/usePenTool.ts
15
- function b() {
17
+ function S() {
16
18
  return {
17
19
  finishedSubpaths: [],
18
20
  current: null,
@@ -22,99 +24,110 @@ function b() {
22
24
  continuing: null
23
25
  };
24
26
  }
25
- function x(e) {
27
+ function C(e) {
26
28
  e.finishedSubpaths = [], e.current = null, e.cursor = null, e.draggingHandleAt = null, e.closeHintActive = !1, e.continuing = null;
27
29
  }
28
- function S(e) {
30
+ function w(e) {
29
31
  return (e.current ? e.current.anchors.length : 0) + e.finishedSubpaths.reduce((e, t) => e + t.anchors.length, 0);
30
32
  }
31
- function C(e, t) {
32
- let n = [...e];
33
- return t && t.anchors.length > 0 && n.push(t), a(n.map((e) => e.anchors), n.map((e) => e.closed));
33
+ function T(e, t) {
34
+ let r = [...e];
35
+ return t && t.anchors.length > 0 && r.push(t), n(r.map((e) => e.anchors), r.map((e) => e.closed));
34
36
  }
35
- function w(e) {
36
- let { wrapPath: d, adapter: w, autoSelect: k = !0, autoCommitOnClose: A = !0, closeHitRadius: j = 8, anchorSnapRadius: M = 8, snapPoint: N } = e, P = g(null);
37
- P.current === null && (P.current = b());
38
- let F = _({
39
- wrapPath: d,
40
- adapter: w,
41
- autoSelect: k,
42
- autoCommitOnClose: A,
37
+ function E(e = {}) {
38
+ let { autoSelect: d = !0, autoCommitOnClose: E = !0, closeHitRadius: j = 8, anchorSnapRadius: M = 8, snapPoint: N } = e, P = v(null);
39
+ P.current === null && (P.current = S());
40
+ let F = y({
41
+ autoSelect: d,
42
+ autoCommitOnClose: E,
43
43
  closeHitRadius: j,
44
44
  anchorSnapRadius: M,
45
45
  snapPoint: N
46
- }), [, I] = h((e) => e + 1, 0), L = p((e, t, n) => {
47
- let r = e.continuing, i = [...e.finishedSubpaths, ...t ? [t] : []];
48
- if (!n || i.length === 0) return;
49
- let { anchors: s, closed: c } = o(C(i, null));
50
- r.reversed && (s[0] = u(s[0]));
51
- let l = o(r.original);
52
- l.anchors.splice(r.sub, 1, s[0]), l.closed.splice(r.sub, 1, c[0]), l.anchors.push(...s.slice(1)), l.closed.push(...c.slice(1));
53
- let d = {
54
- ...a(l.anchors, l.closed),
55
- fillRule: r.original.fillRule
46
+ }), [, I] = _((e) => e + 1, 0), L = h((e, t, a) => {
47
+ let o = a.editAnchors, s = e.continuing, c = [...e.finishedSubpaths, ...t ? [t] : []];
48
+ if (!o || c.length === 0) return;
49
+ let { anchors: l, closed: d } = r(T(c, null));
50
+ s.reversed && (l[0] = u(l[0]));
51
+ let f = r(s.original);
52
+ f.anchors.splice(s.sub, 1, l[0]), f.closed.splice(s.sub, 1, d[0]), f.anchors.push(...l.slice(1)), f.closed.push(...d.slice(1));
53
+ let p = {
54
+ ...n(f.anchors, f.closed),
55
+ fillRule: s.original.fillRule
56
56
  };
57
- O(d, r.original) || (n.applyEdit(r.id, d, "Continue path"), F.current.autoSelect && F.current.adapter.setSelection([r.id]));
58
- }, [F]), R = p((e, t) => {
57
+ A(p, s.original) || (o.applyEdit(s.id, p, "Continue path"), F.current.autoSelect && a.selection?.set([i(s.id)]));
58
+ }, [F]), R = h((e, t) => {
59
59
  let n = e.current && e.current.anchors.length > 0 ? e.current : null;
60
60
  if (e.continuing) {
61
- L(e, n, t.editAnchors), x(e);
61
+ L(e, n, t), C(e);
62
+ return;
63
+ }
64
+ let r = n && n.anchors.length >= 2 ? n : null;
65
+ if (e.finishedSubpaths.length === 0 && !r) {
66
+ C(e);
62
67
  return;
63
68
  }
64
- if (e.finishedSubpaths.length === 0 && !n) return;
65
- let r = e.finishedSubpaths.every((e) => e.closed) && (n === null || n.closed), i = C(e.finishedSubpaths, n), a = F.current.wrapPath(i, { closed: r }), o = F.current.adapter.addNode(a);
66
- F.current.autoSelect && F.current.adapter.setSelection([o]), x(e);
67
- }, [L, F]), z = p((e, t, n) => {
69
+ let i = e.finishedSubpaths.every((e) => e.closed) && (r === null || r.closed), a = T(e.finishedSubpaths, r), o = t.insert?.commit(p(a), {
70
+ kind: "path",
71
+ path: a,
72
+ closed: i
73
+ }) ?? null;
74
+ o !== null && F.current.autoSelect && t.selection?.set([o]), C(e);
75
+ }, [L, F]), z = h((e, t, n) => {
68
76
  if (!n || n.end === null || !e.current || e.current.anchors.length === 0) return !1;
69
77
  let r = e.continuing;
70
78
  if (r && n.id === r.id && n.sub === r.sub) return !1;
71
79
  let i = t.scene;
72
- return !i && !t.applyOps || !(r ? t.editAnchors?.editOps : F.current.adapter.makeNode) ? !1 : r?.id === n.id || i?.get(n.id) !== void 0;
73
- }, [F]), B = p((e, t, s) => {
74
- let c = t.editAnchors, l = t.scene, d = e.current, { anchors: f, closed: p } = o(C([...e.finishedSubpaths, d], null)), m = c.getEditablePath(s.id), h = o(m), g = s.end === "last" ? u(h.anchors[s.sub]) : h.anchors[s.sub], _ = f[f.length - 1], v = _[_.length - 1], y = d.anchors[d.anchors.length - 1].outHandle ?? g[0].outHandle;
75
- y && (v.outHandle = { ...y }), _.push(...g.slice(1));
76
- let b = e.continuing, S = b?.id === s.id, w = S ? {
80
+ return !i && !t.applyOps || !(r ? t.editAnchors?.editOps : t.insert?.build) ? !1 : r?.id === n.id || i?.get(n.id) !== void 0;
81
+ }, []), B = h((e, t, s) => {
82
+ let c = t.editAnchors, l = t.scene, d = e.current, { anchors: f, closed: m } = r(T([...e.finishedSubpaths, d], null)), h = c.getEditablePath(s.id), g = r(h), _ = s.end === "last" ? u(g.anchors[s.sub]) : g.anchors[s.sub], v = f[f.length - 1], y = v[v.length - 1], b = d.anchors[d.anchors.length - 1].outHandle ?? _[0].outHandle;
83
+ b && (y.outHandle = { ...b }), v.push(..._.slice(1));
84
+ let x = e.continuing, S = x?.id === s.id, w = S ? {
77
85
  anchors: [],
78
86
  closed: []
79
87
  } : {
80
- anchors: h.anchors.filter((e, t) => t !== s.sub),
81
- closed: h.closed.filter((e, t) => t !== s.sub)
82
- }, T = "Join paths", E = [], D;
83
- if (b) {
84
- b.reversed && (f[0] = u(f[0]));
85
- let e = o(b.original);
86
- e.anchors.splice(b.sub, 1, f[0]), e.closed.splice(b.sub, 1, p[0]), e.anchors.push(...f.slice(1), ...w.anchors), e.closed.push(...p.slice(1), ...w.closed), S && (e.anchors.splice(s.sub, 1), e.closed.splice(s.sub, 1));
88
+ anchors: g.anchors.filter((e, t) => t !== s.sub),
89
+ closed: g.closed.filter((e, t) => t !== s.sub)
90
+ }, E = "Join paths", D = [], O;
91
+ if (x) {
92
+ x.reversed && (f[0] = u(f[0]));
93
+ let e = r(x.original);
94
+ e.anchors.splice(x.sub, 1, f[0]), e.closed.splice(x.sub, 1, m[0]), e.anchors.push(...f.slice(1), ...w.anchors), e.closed.push(...m.slice(1), ...w.closed), S && (e.anchors.splice(s.sub, 1), e.closed.splice(s.sub, 1));
87
95
  let t = {
88
- ...a(e.anchors, e.closed),
89
- fillRule: b.original.fillRule
96
+ ...n(e.anchors, e.closed),
97
+ fillRule: x.original.fillRule
90
98
  };
91
- E.push(...c.editOps(b.id, t, T)), D = b.id;
99
+ D.push(...c.editOps(x.id, t, E)), O = x.id;
92
100
  } else {
93
- let e = a([...f, ...w.anchors], [...p, ...w.closed]), t = F.current.adapter.makeNode(F.current.wrapPath(e, { closed: !1 }));
94
- E.push(i({ node: t })), D = t.id;
101
+ let e = n([...f, ...w.anchors], [...m, ...w.closed]), r = t.insert.build(p(e), {
102
+ kind: "path",
103
+ path: e,
104
+ closed: !1
105
+ });
106
+ if (r === null) return;
107
+ D.push(...r.ops), O = r.id;
95
108
  }
96
- S || E.push(r({ node: l.get(s.id) }));
97
- let O = t.applyOps;
98
- O ? O(E, T) : l.applyBatch(E, T, n(l)), F.current.autoSelect && F.current.adapter.setSelection([D]), x(e);
99
- }, [F]), V = p((e, t, n) => {
100
- let r = P.current;
101
- if (r.current || r.finishedSubpaths.length > 0) return !1;
102
- let i = F.current.closeHitRadius, a = E(e), s = l(D(e, t, n, i), {
109
+ S || D.push(o({ node: l.get(s.id) }));
110
+ let k = t.applyOps;
111
+ k ? k(D, E) : l.applyBatch(D, E, a(l)), F.current.autoSelect && t.selection?.set([i(O)]), C(e);
112
+ }, [F]), V = h((e, t, n) => {
113
+ let i = P.current;
114
+ if (i.current || i.finishedSubpaths.length > 0) return !1;
115
+ let a = F.current.closeHitRadius, o = O(e), s = l(k(e, t, n, a), {
103
116
  x: t,
104
117
  y: n
105
- }, i, a, (e) => e.end !== null);
118
+ }, a, o, (e) => e.end !== null);
106
119
  if (!s) return !1;
107
- let c = e.editAnchors.getEditablePath(s.id), d = o(c).anchors[s.sub], f = s.end === "first" && d.length > 1;
108
- return r.current = {
120
+ let c = e.editAnchors.getEditablePath(s.id), d = r(c).anchors[s.sub], f = s.end === "first" && d.length > 1;
121
+ return i.current = {
109
122
  anchors: f ? u(d) : d,
110
123
  closed: !1
111
- }, r.continuing = {
124
+ }, i.continuing = {
112
125
  id: s.id,
113
126
  sub: s.sub,
114
127
  reversed: f,
115
128
  original: c
116
129
  }, !0;
117
- }, [F]), H = p((e, t) => {
130
+ }, [F]), H = h((e, t) => {
118
131
  let n = F.current.snapPoint;
119
132
  return n ? n({
120
133
  x: e,
@@ -123,13 +136,13 @@ function w(e) {
123
136
  x: e,
124
137
  y: t
125
138
  };
126
- }, [F]), U = p((e, t, n) => {
139
+ }, [F]), U = h((e, t, n) => {
127
140
  let r = F.current.anchorSnapRadius;
128
141
  if (r > 0) {
129
- let i = l(D(e, t, n, r), {
142
+ let i = l(k(e, t, n, r), {
130
143
  x: t,
131
144
  y: n
132
- }, r, E(e));
145
+ }, r, O(e));
133
146
  if (i) return {
134
147
  x: i.x,
135
148
  y: i.y,
@@ -140,7 +153,28 @@ function w(e) {
140
153
  ...H(t, n),
141
154
  hit: null
142
155
  };
143
- }, [H, F]), W = p((e, n, r, i, a) => t(n - i, r - a, F.current.closeHitRadius, E(e)), [F]), G = m(() => {
156
+ }, [H, F]), W = h((e, n, r, i, a) => t(n - i, r - a, F.current.closeHitRadius, O(e)), [F]), G = g(() => {
157
+ let e, n = f(() => r()), r = () => {
158
+ let r = P.current;
159
+ !r.current && r.finishedSubpaths.length === 0 && n.unfollow();
160
+ let i = r.current ? n.pointer()?.get() ?? null : null;
161
+ r.cursor = i ? H(i.worldX, i.worldY) : null;
162
+ let a = r.current && r.current.anchors.length >= 3 ? r.current.anchors[0] : null;
163
+ r.closeHintActive = a !== null && r.cursor !== null && t(a.x - r.cursor.x, a.y - r.cursor.y, F.current.closeHitRadius, e?.get().scale ?? {
164
+ x: 1,
165
+ y: 1
166
+ }), I();
167
+ };
168
+ return {
169
+ refresh: r,
170
+ update(t) {
171
+ e = t.view, n.follow(t.pointer), r();
172
+ },
173
+ stop() {
174
+ n.unfollow(), I();
175
+ }
176
+ };
177
+ }, [H, F]), K = g(() => {
144
178
  let e = () => P.current;
145
179
  return [
146
180
  {
@@ -149,10 +183,13 @@ function w(e) {
149
183
  eligible: { capability: "creates-paths" },
150
184
  requires: [
151
185
  "view",
186
+ "pointer",
152
187
  "areaSelect",
153
188
  "editAnchors",
154
189
  "scene",
155
- "applyOps"
190
+ "applyOps",
191
+ "insert",
192
+ "selection"
156
193
  ],
157
194
  invoker: {
158
195
  timing: "immediate",
@@ -160,14 +197,14 @@ function w(e) {
160
197
  let r = n;
161
198
  if (r?.pressX === void 0 || r.pressY === void 0) return;
162
199
  if (V(t, r.pressX, r.pressY)) {
163
- I();
200
+ G.update(t);
164
201
  return;
165
202
  }
166
203
  let { x: i, y: a, hit: o } = U(t, r.pressX, r.pressY), s = e();
167
204
  if (s.current && s.current.anchors.length >= 3) {
168
205
  let e = s.current.anchors[0];
169
206
  if (W(t, e.x, e.y, i, a)) {
170
- s.current.closed = !0, s.finishedSubpaths.push(s.current), s.current = null, s.closeHintActive = !1, F.current.autoCommitOnClose && R(s, t), I();
207
+ s.current.closed = !0, s.finishedSubpaths.push(s.current), s.current = null, s.closeHintActive = !1, F.current.autoCommitOnClose && R(s, t), G.update(t);
171
208
  return;
172
209
  }
173
210
  }
@@ -178,7 +215,7 @@ function w(e) {
178
215
  }, s.current.anchors.push({
179
216
  x: i,
180
217
  y: a
181
- }), c && B(s, t, o), I();
218
+ }), c && B(s, t, o), G.update(t);
182
219
  }
183
220
  }
184
221
  },
@@ -186,13 +223,17 @@ function w(e) {
186
223
  id: "pen.finishOpen",
187
224
  label: "Pen — finish open path",
188
225
  eligible: { capability: "creates-paths" },
189
- requires: ["editAnchors"],
190
- enabled: () => S(e()) >= 2 || v.NotApplicable,
226
+ requires: [
227
+ "editAnchors",
228
+ "insert",
229
+ "selection"
230
+ ],
231
+ enabled: () => w(e()) >= 2 || b.NotApplicable,
191
232
  invoker: {
192
233
  timing: "immediate",
193
234
  run: (t, n) => {
194
235
  let r = e();
195
- n?.viaDoubleClick && r.current && (r.current.anchors.pop(), r.current.anchors.length === 0 && (r.current = null)), R(r, t), I();
236
+ n?.viaDoubleClick && r.current && (r.current.anchors.pop(), r.current.anchors.length === 0 && (r.current = null)), R(r, t), G.refresh();
196
237
  }
197
238
  }
198
239
  },
@@ -202,10 +243,13 @@ function w(e) {
202
243
  eligible: { capability: "creates-paths" },
203
244
  requires: [
204
245
  "view",
246
+ "pointer",
205
247
  "areaSelect",
206
248
  "editAnchors",
207
249
  "scene",
208
- "applyOps"
250
+ "applyOps",
251
+ "insert",
252
+ "selection"
209
253
  ],
210
254
  invoker: {
211
255
  timing: "ongoing",
@@ -223,18 +267,18 @@ function w(e) {
223
267
  }
224
268
  n.draggingHandleAt = n.current.anchors.length - 1, t.modifiers.alt && (n.current.anchors[n.draggingHandleAt].altBroken = !0);
225
269
  let o = !i;
226
- return T(n, t.world, t.modifiers.shift, o, F.current.snapPoint), I(), {
270
+ return D(n, t.world, t.modifiers.shift, o, F.current.snapPoint), G.update(t.deps), {
227
271
  onMove: (t) => {
228
272
  let n = e();
229
- n.draggingHandleAt !== null && (t.modifiers.alt && n.current && (n.current.anchors[n.draggingHandleAt].altBroken = !0), T(n, t.world, t.modifiers.shift, o, F.current.snapPoint), I());
273
+ n.draggingHandleAt !== null && (t.modifiers.alt && n.current && (n.current.anchors[n.draggingHandleAt].altBroken = !0), D(n, t.world, t.modifiers.shift, o, F.current.snapPoint), I());
230
274
  },
231
275
  onEnd: (n, r) => {
232
276
  let s = e();
233
277
  if (r === "cancel") {
234
- i ? x(s) : s.current && s.draggingHandleAt === s.current.anchors.length - 1 && (s.current.anchors.pop(), s.current.anchors.length === 0 && (s.current = null)), s.draggingHandleAt = null, I();
278
+ i ? C(s) : s.current && s.draggingHandleAt === s.current.anchors.length - 1 && (s.current.anchors.pop(), s.current.anchors.length === 0 && (s.current = null)), s.draggingHandleAt = null, G.refresh();
235
279
  return;
236
280
  }
237
- s.draggingHandleAt !== null && (n.modifiers.alt && s.current && (s.current.anchors[s.draggingHandleAt].altBroken = !0), T(s, n.world, n.modifiers.shift, o, F.current.snapPoint), s.draggingHandleAt = null), a && s.current && B(s, t.deps, a), I();
281
+ s.draggingHandleAt !== null && (n.modifiers.alt && s.current && (s.current.anchors[s.draggingHandleAt].altBroken = !0), D(s, n.world, n.modifiers.shift, o, F.current.snapPoint), s.draggingHandleAt = null), a && s.current && B(s, t.deps, a), G.refresh();
238
282
  }
239
283
  };
240
284
  }
@@ -244,12 +288,16 @@ function w(e) {
244
288
  id: "pen.finish",
245
289
  label: "Pen — finish path",
246
290
  eligible: { capability: "creates-paths" },
247
- requires: ["editAnchors"],
248
- enabled: () => S(e()) > 0 || v.NotApplicable,
291
+ requires: [
292
+ "editAnchors",
293
+ "insert",
294
+ "selection"
295
+ ],
296
+ enabled: () => w(e()) > 0 || b.NotApplicable,
249
297
  invoker: {
250
298
  timing: "immediate",
251
299
  run: (t) => {
252
- R(e(), t), I();
300
+ R(e(), t), G.refresh();
253
301
  }
254
302
  }
255
303
  },
@@ -259,12 +307,12 @@ function w(e) {
259
307
  eligible: { capability: "creates-paths" },
260
308
  enabled: () => {
261
309
  let t = e();
262
- return t.current !== null || t.finishedSubpaths.length > 0 || v.NotApplicable;
310
+ return t.current !== null || t.finishedSubpaths.length > 0 || b.NotApplicable;
263
311
  },
264
312
  invoker: {
265
313
  timing: "immediate",
266
314
  run: () => {
267
- x(e()), I();
315
+ C(e()), G.refresh();
268
316
  }
269
317
  }
270
318
  }
@@ -276,22 +324,24 @@ function w(e) {
276
324
  V,
277
325
  z,
278
326
  B,
279
- F
327
+ F,
328
+ G
280
329
  ]);
281
- return m(() => s({
330
+ return g(() => s({
282
331
  id: "pen",
332
+ keybinding: { key: "P" },
283
333
  capabilities: ["creates-paths"],
284
334
  hookName: "usePenTool",
285
- cursor: () => P.current?.closeHintActive ? "pointer" : y("pen", { fallback: "crosshair" }),
335
+ cursor: () => P.current?.closeHintActive ? "pointer" : x("pen", { fallback: "crosshair" }),
286
336
  presentation: {
287
337
  label: "Pen",
288
- icon: f(c),
338
+ icon: m(c),
289
339
  group: "draw"
290
340
  },
291
341
  initScratch: () => P.current,
292
- actions: G,
342
+ actions: K,
293
343
  onDeactivate: () => {
294
- x(P.current), I();
344
+ C(P.current), G.stop();
295
345
  },
296
346
  bindings: [
297
347
  {
@@ -351,9 +401,9 @@ function w(e) {
351
401
  actionId: "pen.cancel"
352
402
  }
353
403
  ]
354
- }), [G]);
404
+ }), [K, G]);
355
405
  }
356
- w.prefs = {
406
+ E.prefs = {
357
407
  name: "Pen",
358
408
  description: "Pen-tool behavior.",
359
409
  children: { autoCommitOnClose: {
@@ -363,7 +413,7 @@ w.prefs = {
363
413
  default: !0
364
414
  } }
365
415
  };
366
- function T(e, t, n, r, i) {
416
+ function D(e, t, n, r, i) {
367
417
  if (e.current === null || e.draggingHandleAt === null) return;
368
418
  let a = e.current.anchors[e.draggingHandleAt], o = i ? i(t) : t, s = o.x - a.x, c = o.y - a.y;
369
419
  if (n) {
@@ -378,16 +428,16 @@ function T(e, t, n, r, i) {
378
428
  y: a.y - c
379
429
  });
380
430
  }
381
- function E(e) {
431
+ function O(e) {
382
432
  return e.view?.get().scale ?? {
383
433
  x: 1,
384
434
  y: 1
385
435
  };
386
436
  }
387
- function D(t, n, r, i) {
437
+ function k(t, n, r, i) {
388
438
  let a = t.areaSelect, o = t.editAnchors;
389
439
  if (!a || !o) return [];
390
- let s = t.view, c = e(i, E(t)), l = a.hitTestArea({
440
+ let s = t.view, c = e(i, O(t)), l = a.hitTestArea({
391
441
  x: n - c.x,
392
442
  y: r - c.y,
393
443
  width: 2 * c.x,
@@ -402,13 +452,13 @@ function D(t, n, r, i) {
402
452
  }
403
453
  return u;
404
454
  }
405
- function O(e, t) {
455
+ function A(e, t) {
406
456
  if (e.commands.length !== t.commands.length || e.coords.length !== t.coords.length) return !1;
407
457
  for (let n = 0; n < e.commands.length; n++) if (e.commands[n] !== t.commands[n]) return !1;
408
458
  for (let n = 0; n < e.coords.length; n++) if (e.coords[n] !== t.coords[n]) return !1;
409
459
  return !0;
410
460
  }
411
461
  //#endregion
412
- export { w as usePenTool };
462
+ export { E as usePenTool };
413
463
 
414
464
  //# sourceMappingURL=usePenTool.js.map