@weasel-js/core 1.10.1 → 1.11.0

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 (1431) hide show
  1. package/CHANGELOG.md +587 -0
  2. package/README.md +16 -15
  3. package/dist/WeaselProvider.js +25 -9
  4. package/dist/WeaselProvider.js.map +1 -1
  5. package/dist/affordances/composeAffordanceLayer.js +217 -140
  6. package/dist/affordances/composeAffordanceLayer.js.map +1 -1
  7. package/dist/affordances/cornerResize.js +92 -50
  8. package/dist/affordances/cornerResize.js.map +1 -1
  9. package/dist/affordances/hitAffordanceRegions.js +147 -84
  10. package/dist/affordances/hitAffordanceRegions.js.map +1 -1
  11. package/dist/affordances/pathAnchors.js +140 -65
  12. package/dist/affordances/pathAnchors.js.map +1 -1
  13. package/dist/affordances/rotateCursor.js +10 -4
  14. package/dist/affordances/rotateCursor.js.map +1 -1
  15. package/dist/affordances/rotationHandle.js +83 -60
  16. package/dist/affordances/rotationHandle.js.map +1 -1
  17. package/dist/animation/behaviors/coast.js +20 -14
  18. package/dist/animation/behaviors/coast.js.map +1 -1
  19. package/dist/animation/behaviors/coastByWrite.js +98 -70
  20. package/dist/animation/behaviors/coastByWrite.js.map +1 -1
  21. package/dist/animation/behaviors/coastOnTargets.js +115 -67
  22. package/dist/animation/behaviors/coastOnTargets.js.map +1 -1
  23. package/dist/animation/behaviors/momentum.js +88 -53
  24. package/dist/animation/behaviors/momentum.js.map +1 -1
  25. package/dist/animation/clipTargets.js +14 -7
  26. package/dist/animation/clipTargets.js.map +1 -1
  27. package/dist/animation/departures.js +116 -0
  28. package/dist/animation/departures.js.map +1 -0
  29. package/dist/animation/index.js +18 -15
  30. package/dist/animation/poseHelpers.js +147 -107
  31. package/dist/animation/poseHelpers.js.map +1 -1
  32. package/dist/animation/poseTarget.js +158 -85
  33. package/dist/animation/poseTarget.js.map +1 -1
  34. package/dist/animation/poseTransition.js +64 -0
  35. package/dist/animation/poseTransition.js.map +1 -0
  36. package/dist/animation/reflow.js +208 -120
  37. package/dist/animation/reflow.js.map +1 -1
  38. package/dist/animation/rewind.js +76 -45
  39. package/dist/animation/rewind.js.map +1 -1
  40. package/dist/animation/rig/bindRig.js +135 -82
  41. package/dist/animation/rig/bindRig.js.map +1 -1
  42. package/dist/animation/rig/rigNode.js +120 -75
  43. package/dist/animation/rig/rigNode.js.map +1 -1
  44. package/dist/animation/rig/rigSeat.js +61 -41
  45. package/dist/animation/rig/rigSeat.js.map +1 -1
  46. package/dist/animation/rig/skinBinding.js +57 -45
  47. package/dist/animation/rig/skinBinding.js.map +1 -1
  48. package/dist/animation/rig/useRig.js +44 -30
  49. package/dist/animation/rig/useRig.js.map +1 -1
  50. package/dist/animation/wrappers/animateLifecycle.js +51 -35
  51. package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
  52. package/dist/animation/wrappers/animateOnSetPose.js +55 -32
  53. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
  54. package/dist/animation/wrappers/instantPose.js +13 -8
  55. package/dist/animation/wrappers/instantPose.js.map +1 -1
  56. package/dist/animation/writtenPoseTarget.js +44 -22
  57. package/dist/animation/writtenPoseTarget.js.map +1 -1
  58. package/dist/{autoPoseDescriptor-DHg5KqaJ.d.ts → autoPoseDescriptor-CZ1eXbzY.d.ts} +1 -1
  59. package/dist/barrel/canvas.js +41 -32
  60. package/dist/barrel/chrome.js +19 -16
  61. package/dist/barrel/icons.js +6 -0
  62. package/dist/barrel/input.js +19 -18
  63. package/dist/barrel/interactions.js +40 -39
  64. package/dist/barrel/paint.js +12 -11
  65. package/dist/barrel/paths.js +39 -13
  66. package/dist/barrel/renderer.js +24 -14
  67. package/dist/barrel/routing.js +69 -58
  68. package/dist/barrel/scene.js +48 -37
  69. package/dist/barrel/text.js +10 -9
  70. package/dist/barrel/viewport.js +47 -45
  71. package/dist/canvas/Canvas.js +189 -306
  72. package/dist/canvas/Canvas.js.map +1 -1
  73. package/dist/canvas/CanvasView.js +273 -199
  74. package/dist/canvas/CanvasView.js.map +1 -1
  75. package/dist/canvas/CursorCoordsHud.js +103 -64
  76. package/dist/canvas/CursorCoordsHud.js.map +1 -1
  77. package/dist/canvas/DrawCanvas.js +68 -41
  78. package/dist/canvas/DrawCanvas.js.map +1 -1
  79. package/dist/canvas/LeanSceneCanvas.js +23 -0
  80. package/dist/canvas/LeanSceneCanvas.js.map +1 -0
  81. package/dist/canvas/ModalityHud.js +58 -43
  82. package/dist/canvas/ModalityHud.js.map +1 -1
  83. package/dist/canvas/NodeShape.js +137 -60
  84. package/dist/canvas/NodeShape.js.map +1 -1
  85. package/dist/canvas/PickHud.js +77 -59
  86. package/dist/canvas/PickHud.js.map +1 -1
  87. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +9 -6
  88. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js.map +1 -1
  89. package/dist/canvas/SceneCanvas/CanvasKitProviders.js +25 -0
  90. package/dist/canvas/SceneCanvas/CanvasKitProviders.js.map +1 -0
  91. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +10 -6
  92. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js.map +1 -1
  93. package/dist/canvas/SceneCanvas/DevHuds.js +47 -32
  94. package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -1
  95. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +72 -37
  96. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
  97. package/dist/canvas/SceneCanvas/SceneCanvasInput.js +110 -0
  98. package/dist/canvas/SceneCanvas/SceneCanvasInput.js.map +1 -0
  99. package/dist/canvas/SceneCanvas/brushOverlay.js +36 -0
  100. package/dist/canvas/SceneCanvas/brushOverlay.js.map +1 -0
  101. package/dist/canvas/SceneCanvas/canvasPassThrough.js +72 -0
  102. package/dist/canvas/SceneCanvas/canvasPassThrough.js.map +1 -0
  103. package/dist/canvas/SceneCanvas/contributionFrameHooks.js +54 -32
  104. package/dist/canvas/SceneCanvas/contributionFrameHooks.js.map +1 -1
  105. package/dist/canvas/SceneCanvas/coordTrace.js +36 -29
  106. package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
  107. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +318 -159
  108. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  109. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +39 -13
  110. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
  111. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +83 -47
  112. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
  113. package/dist/canvas/SceneCanvas/features.js +83 -106
  114. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  115. package/dist/canvas/SceneCanvas/insertPreviewCommands.js +80 -62
  116. package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -1
  117. package/dist/canvas/SceneCanvas/mergeLayers.js +43 -0
  118. package/dist/canvas/SceneCanvas/mergeLayers.js.map +1 -0
  119. package/dist/canvas/SceneCanvas/namedPresets.js +56 -0
  120. package/dist/canvas/SceneCanvas/namedPresets.js.map +1 -0
  121. package/dist/canvas/SceneCanvas/poseGeometry.js +66 -31
  122. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
  123. package/dist/canvas/SceneCanvas/poseRegistrars.js +18 -8
  124. package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -1
  125. package/dist/canvas/SceneCanvas/presets/arrange.js +27 -0
  126. package/dist/canvas/SceneCanvas/presets/arrange.js.map +1 -0
  127. package/dist/canvas/SceneCanvas/presets/chrome.js +14 -0
  128. package/dist/canvas/SceneCanvas/presets/chrome.js.map +1 -0
  129. package/dist/canvas/SceneCanvas/presets/edit.js +59 -0
  130. package/dist/canvas/SceneCanvas/presets/edit.js.map +1 -0
  131. package/dist/canvas/SceneCanvas/presets/ingest.js +13 -0
  132. package/dist/canvas/SceneCanvas/presets/ingest.js.map +1 -0
  133. package/dist/canvas/SceneCanvas/presets/paths.js +67 -0
  134. package/dist/canvas/SceneCanvas/presets/paths.js.map +1 -0
  135. package/dist/canvas/SceneCanvas/presets/select.js +19 -0
  136. package/dist/canvas/SceneCanvas/presets/select.js.map +1 -0
  137. package/dist/canvas/SceneCanvas/presets/toolDriven.js +20 -0
  138. package/dist/canvas/SceneCanvas/presets/toolDriven.js.map +1 -0
  139. package/dist/canvas/SceneCanvas/presets/transform.js +41 -0
  140. package/dist/canvas/SceneCanvas/presets/transform.js.map +1 -0
  141. package/dist/canvas/SceneCanvas/presets/view.js +14 -0
  142. package/dist/canvas/SceneCanvas/presets/view.js.map +1 -0
  143. package/dist/canvas/SceneCanvas/props.js +19 -35
  144. package/dist/canvas/SceneCanvas/props.js.map +1 -1
  145. package/dist/canvas/SceneCanvas/scenePointQuery.js +43 -35
  146. package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -1
  147. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +22 -15
  148. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -1
  149. package/dist/canvas/SceneCanvas/toolRegistry.js +30 -15
  150. package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -1
  151. package/dist/canvas/SceneCanvas/useActionTunings.js +14 -11
  152. package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -1
  153. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +68 -35
  154. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
  155. package/dist/canvas/SceneCanvas/useBakedScene.js +17 -0
  156. package/dist/canvas/SceneCanvas/useBakedScene.js.map +1 -0
  157. package/dist/canvas/SceneCanvas/useBuiltinRigTools.js +65 -0
  158. package/dist/canvas/SceneCanvas/useBuiltinRigTools.js.map +1 -0
  159. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +47 -23
  160. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
  161. package/dist/canvas/SceneCanvas/useBuiltinTools.js +29 -14
  162. package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -1
  163. package/dist/canvas/SceneCanvas/useCanvasCamera.js +53 -38
  164. package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -1
  165. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +24 -14
  166. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -1
  167. package/dist/canvas/SceneCanvas/useCanvasSelection.js +30 -12
  168. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -1
  169. package/dist/canvas/SceneCanvas/useCanvasTools.js +112 -53
  170. package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -1
  171. package/dist/canvas/SceneCanvas/useChromeAffordances.js +31 -0
  172. package/dist/canvas/SceneCanvas/useChromeAffordances.js.map +1 -0
  173. package/dist/canvas/SceneCanvas/useContributionRoles.js +107 -56
  174. package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -1
  175. package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js +64 -0
  176. package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js.map +1 -0
  177. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +104 -71
  178. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
  179. package/dist/canvas/SceneCanvas/useHeldModifiers.js +21 -14
  180. package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -1
  181. package/dist/canvas/SceneCanvas/useNodeAtPoint.js +21 -19
  182. package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -1
  183. package/dist/canvas/SceneCanvas/useNodeKinds.js +28 -19
  184. package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -1
  185. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +91 -59
  186. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
  187. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +62 -35
  188. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -1
  189. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +110 -50
  190. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -1
  191. package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js +30 -0
  192. package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js.map +1 -0
  193. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +40 -0
  194. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js.map +1 -0
  195. package/dist/canvas/SceneCanvas/useSceneChrome.js +100 -44
  196. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -1
  197. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +163 -0
  198. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js.map +1 -0
  199. package/dist/canvas/SceneCanvas/useScenePicking.js +69 -0
  200. package/dist/canvas/SceneCanvas/useScenePicking.js.map +1 -0
  201. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +28 -17
  202. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -1
  203. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +159 -80
  204. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  205. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +38 -26
  206. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -1
  207. package/dist/canvas/SceneCanvas/useSceneStandardActions.js +108 -0
  208. package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -0
  209. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +40 -27
  210. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -1
  211. package/dist/canvas/SceneCanvas/useSurfaceRouting.js +29 -0
  212. package/dist/canvas/SceneCanvas/useSurfaceRouting.js.map +1 -0
  213. package/dist/canvas/SceneCanvas/useSurfaceViewInputs.js +44 -0
  214. package/dist/canvas/SceneCanvas/useSurfaceViewInputs.js.map +1 -0
  215. package/dist/canvas/SceneCanvas/useToolKeybindings.js +28 -0
  216. package/dist/canvas/SceneCanvas/useToolKeybindings.js.map +1 -0
  217. package/dist/canvas/SceneCanvas/useViewportActions.js +52 -28
  218. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
  219. package/dist/canvas/SceneCanvas/worldPointAt.js +10 -4
  220. package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -1
  221. package/dist/canvas/SceneCanvas.js +274 -312
  222. package/dist/canvas/SceneCanvas.js.map +1 -1
  223. package/dist/canvas/SceneViewCanvas.js +68 -42
  224. package/dist/canvas/SceneViewCanvas.js.map +1 -1
  225. package/dist/canvas/SurfaceCanvas.js +53 -31
  226. package/dist/canvas/SurfaceCanvas.js.map +1 -1
  227. package/dist/canvas/accentColor.js +8 -5
  228. package/dist/canvas/accentColor.js.map +1 -1
  229. package/dist/canvas/adapterDerivedPath.js +33 -18
  230. package/dist/canvas/adapterDerivedPath.js.map +1 -1
  231. package/dist/canvas/adapterPickSource.js +49 -23
  232. package/dist/canvas/adapterPickSource.js.map +1 -1
  233. package/dist/canvas/affordanceAt.js +106 -50
  234. package/dist/canvas/affordanceAt.js.map +1 -1
  235. package/dist/canvas/buildSceneLayer.js +111 -80
  236. package/dist/canvas/buildSceneLayer.js.map +1 -1
  237. package/dist/canvas/buildSceneTree.js +101 -59
  238. package/dist/canvas/buildSceneTree.js.map +1 -1
  239. package/dist/canvas/canvasRenderer.js +156 -71
  240. package/dist/canvas/canvasRenderer.js.map +1 -1
  241. package/dist/canvas/colorOverrides.js +18 -10
  242. package/dist/canvas/colorOverrides.js.map +1 -1
  243. package/dist/canvas/copiesAbove.js +24 -14
  244. package/dist/canvas/copiesAbove.js.map +1 -1
  245. package/dist/canvas/defaultDrawOne.js +55 -31
  246. package/dist/canvas/defaultDrawOne.js.map +1 -1
  247. package/dist/canvas/deps/areaSelect.js +30 -12
  248. package/dist/canvas/deps/areaSelect.js.map +1 -1
  249. package/dist/canvas/deps/booleans.js +104 -0
  250. package/dist/canvas/deps/booleans.js.map +1 -0
  251. package/dist/canvas/deps/changes.js +17 -9
  252. package/dist/canvas/deps/changes.js.map +1 -1
  253. package/dist/canvas/deps/debug.js +12 -5
  254. package/dist/canvas/deps/debug.js.map +1 -1
  255. package/dist/canvas/deps/dispatchSources.js +27 -0
  256. package/dist/canvas/deps/dispatchSources.js.map +1 -0
  257. package/dist/canvas/deps/dispatcher.js +18 -7
  258. package/dist/canvas/deps/dispatcher.js.map +1 -1
  259. package/dist/canvas/deps/editAnchors.js +253 -63
  260. package/dist/canvas/deps/editAnchors.js.map +1 -1
  261. package/dist/canvas/deps/geometryProjection.js +13 -7
  262. package/dist/canvas/deps/geometryProjection.js.map +1 -1
  263. package/dist/canvas/deps/hitTestArea.js +78 -53
  264. package/dist/canvas/deps/hitTestArea.js.map +1 -1
  265. package/dist/canvas/deps/ingestion.js +18 -13
  266. package/dist/canvas/deps/ingestion.js.map +1 -1
  267. package/dist/canvas/deps/insert.js +176 -116
  268. package/dist/canvas/deps/insert.js.map +1 -1
  269. package/dist/canvas/deps/kitSettings.js +16 -0
  270. package/dist/canvas/deps/kitSettings.js.map +1 -0
  271. package/dist/canvas/deps/lassoSelect.js +25 -13
  272. package/dist/canvas/deps/lassoSelect.js.map +1 -1
  273. package/dist/canvas/deps/layout.js +32 -20
  274. package/dist/canvas/deps/layout.js.map +1 -1
  275. package/dist/canvas/deps/nodeAtPoint.js +28 -14
  276. package/dist/canvas/deps/nodeAtPoint.js.map +1 -1
  277. package/dist/canvas/deps/pathLeaf.js +66 -0
  278. package/dist/canvas/deps/pathLeaf.js.map +1 -0
  279. package/dist/canvas/deps/pathLeafDeps.js +13 -0
  280. package/dist/canvas/deps/pathLeafDeps.js.map +1 -0
  281. package/dist/canvas/deps/poseDescriptor.js +10 -8
  282. package/dist/canvas/deps/poseDescriptor.js.map +1 -1
  283. package/dist/canvas/deps/previewPaths.js +44 -0
  284. package/dist/canvas/deps/previewPaths.js.map +1 -0
  285. package/dist/canvas/deps/resizePolicy.js +32 -25
  286. package/dist/canvas/deps/resizePolicy.js.map +1 -1
  287. package/dist/canvas/deps/slice.js +73 -87
  288. package/dist/canvas/deps/slice.js.map +1 -1
  289. package/dist/canvas/deps/snap.js +58 -7
  290. package/dist/canvas/deps/snap.js.map +1 -1
  291. package/dist/canvas/deps/surface.js +30 -0
  292. package/dist/canvas/deps/surface.js.map +1 -0
  293. package/dist/canvas/deps/textEdit.js +21 -13
  294. package/dist/canvas/deps/textEdit.js.map +1 -1
  295. package/dist/canvas/deps/view.js +46 -34
  296. package/dist/canvas/deps/view.js.map +1 -1
  297. package/dist/canvas/derivedPath.js +154 -70
  298. package/dist/canvas/derivedPath.js.map +1 -1
  299. package/dist/canvas/doubleClickTarget.js +20 -0
  300. package/dist/canvas/doubleClickTarget.js.map +1 -0
  301. package/dist/canvas/drawEnvelope.js +26 -17
  302. package/dist/canvas/drawEnvelope.js.map +1 -1
  303. package/dist/canvas/drawnBounds.js +116 -0
  304. package/dist/canvas/drawnBounds.js.map +1 -0
  305. package/dist/canvas/getNodeAtPoint.js +11 -8
  306. package/dist/canvas/getNodeAtPoint.js.map +1 -1
  307. package/dist/canvas/hostAnchor.js +35 -18
  308. package/dist/canvas/hostAnchor.js.map +1 -1
  309. package/dist/canvas/hud.module.js +25 -14
  310. package/dist/canvas/hud.module.js.map +1 -1
  311. package/dist/canvas/insertPreviewExtent.js +82 -61
  312. package/dist/canvas/insertPreviewExtent.js.map +1 -1
  313. package/dist/canvas/kitRequirements.js +154 -115
  314. package/dist/canvas/kitRequirements.js.map +1 -1
  315. package/dist/canvas/layerHover.js +28 -0
  316. package/dist/canvas/layerHover.js.map +1 -0
  317. package/dist/canvas/layerOrder.js +107 -57
  318. package/dist/canvas/layerOrder.js.map +1 -1
  319. package/dist/canvas/layerSlots.js +16 -9
  320. package/dist/canvas/layerSlots.js.map +1 -1
  321. package/dist/canvas/mountedCanvases.js +23 -13
  322. package/dist/canvas/mountedCanvases.js.map +1 -1
  323. package/dist/canvas/nodeShapes/derivedPainter.js +65 -25
  324. package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
  325. package/dist/canvas/nodeShapes/imagePainter.js +69 -53
  326. package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
  327. package/dist/canvas/nodeShapes/measurePainter.js +58 -0
  328. package/dist/canvas/nodeShapes/measurePainter.js.map +1 -0
  329. package/dist/canvas/nodeShapes/memo.js +16 -5
  330. package/dist/canvas/nodeShapes/memo.js.map +1 -1
  331. package/dist/canvas/nodeShapes/nodePaint.js +125 -46
  332. package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
  333. package/dist/canvas/nodeShapes/pathPainter.js +41 -27
  334. package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
  335. package/dist/canvas/nodeShapes/poseBox.js +20 -13
  336. package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
  337. package/dist/canvas/nodeShapes/rectFallbackPainter.js +26 -22
  338. package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
  339. package/dist/canvas/nodeShapes/shapePainter.js +67 -46
  340. package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
  341. package/dist/canvas/nodeShapes/strokedBounds.js +177 -0
  342. package/dist/canvas/nodeShapes/strokedBounds.js.map +1 -0
  343. package/dist/canvas/nodeShapes/textPainter.js +170 -37
  344. package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
  345. package/dist/canvas/overChildren.js +29 -18
  346. package/dist/canvas/overChildren.js.map +1 -1
  347. package/dist/canvas/overlayRoleStrokes.js +20 -3
  348. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  349. package/dist/canvas/paintCull.js +24 -12
  350. package/dist/canvas/paintCull.js.map +1 -1
  351. package/dist/canvas/paintedCursorLayer.js +59 -35
  352. package/dist/canvas/paintedCursorLayer.js.map +1 -1
  353. package/dist/canvas/pathOverlay.js +63 -0
  354. package/dist/canvas/pathOverlay.js.map +1 -0
  355. package/dist/canvas/pickReach.js +34 -17
  356. package/dist/canvas/pickReach.js.map +1 -1
  357. package/dist/canvas/pickWalk.js +151 -102
  358. package/dist/canvas/pickWalk.js.map +1 -1
  359. package/dist/canvas/planeClips.js +39 -22
  360. package/dist/canvas/planeClips.js.map +1 -1
  361. package/dist/canvas/poseCascade.js +51 -27
  362. package/dist/canvas/poseCascade.js.map +1 -1
  363. package/dist/canvas/poseRotation.js +24 -14
  364. package/dist/canvas/poseRotation.js.map +1 -1
  365. package/dist/canvas/rasterReadback.js +23 -15
  366. package/dist/canvas/rasterReadback.js.map +1 -1
  367. package/dist/canvas/rasterToPng.js +21 -15
  368. package/dist/canvas/rasterToPng.js.map +1 -1
  369. package/dist/canvas/renderDebugSnapshot.js +36 -19
  370. package/dist/canvas/renderDebugSnapshot.js.map +1 -1
  371. package/dist/canvas/renderNeeds.js +33 -18
  372. package/dist/canvas/renderNeeds.js.map +1 -1
  373. package/dist/canvas/renderSceneToPixels.js +202 -87
  374. package/dist/canvas/renderSceneToPixels.js.map +1 -1
  375. package/dist/canvas/sceneAdapter.js +96 -75
  376. package/dist/canvas/sceneAdapter.js.map +1 -1
  377. package/dist/canvas/sceneClipboard.js +141 -92
  378. package/dist/canvas/sceneClipboard.js.map +1 -1
  379. package/dist/canvas/sceneLayerPaint.js +56 -27
  380. package/dist/canvas/sceneLayerPaint.js.map +1 -1
  381. package/dist/canvas/sceneSlotWiring.js +24 -14
  382. package/dist/canvas/sceneSlotWiring.js.map +1 -1
  383. package/dist/canvas/sceneViewRender.js +85 -49
  384. package/dist/canvas/sceneViewRender.js.map +1 -1
  385. package/dist/canvas/slopsDebugLayer.js +58 -49
  386. package/dist/canvas/slopsDebugLayer.js.map +1 -1
  387. package/dist/canvas/surfaceContribution.js +22 -10
  388. package/dist/canvas/surfaceContribution.js.map +1 -1
  389. package/dist/canvas/useCanvasElements.js +31 -0
  390. package/dist/canvas/useCanvasElements.js.map +1 -0
  391. package/dist/canvas/useCanvasHandle.js +69 -0
  392. package/dist/canvas/useCanvasHandle.js.map +1 -0
  393. package/dist/canvas/useCanvasPaint.js +91 -0
  394. package/dist/canvas/useCanvasPaint.js.map +1 -0
  395. package/dist/canvas/useCanvasRenderer.js +45 -23
  396. package/dist/canvas/useCanvasRenderer.js.map +1 -1
  397. package/dist/canvas/useCanvasSurface.js +41 -23
  398. package/dist/canvas/useCanvasSurface.js.map +1 -1
  399. package/dist/canvas/useCanvasView.js +80 -48
  400. package/dist/canvas/useCanvasView.js.map +1 -1
  401. package/dist/canvas/useClientToWorld.js +27 -0
  402. package/dist/canvas/useClientToWorld.js.map +1 -0
  403. package/dist/canvas/useExtraLayers.js +45 -0
  404. package/dist/canvas/useExtraLayers.js.map +1 -0
  405. package/dist/canvas/useFrameLoop.js +109 -49
  406. package/dist/canvas/useFrameLoop.js.map +1 -1
  407. package/dist/canvas/useHitObserver.js +22 -15
  408. package/dist/canvas/useHitObserver.js.map +1 -1
  409. package/dist/canvas/useHostAnchor.js +83 -53
  410. package/dist/canvas/useHostAnchor.js.map +1 -1
  411. package/dist/canvas/useLateContentRedraw.js +21 -14
  412. package/dist/canvas/useLateContentRedraw.js.map +1 -1
  413. package/dist/canvas/useLayerStack.js +72 -0
  414. package/dist/canvas/useLayerStack.js.map +1 -0
  415. package/dist/canvas/usePaintedCursor.js +28 -0
  416. package/dist/canvas/usePaintedCursor.js.map +1 -0
  417. package/dist/canvas/useRedrawOn.js +24 -14
  418. package/dist/canvas/useRedrawOn.js.map +1 -1
  419. package/dist/canvas/useSceneAdapter.js +21 -16
  420. package/dist/canvas/useSceneAdapter.js.map +1 -1
  421. package/dist/canvas/useSceneLayerList.js +15 -7
  422. package/dist/canvas/useSceneLayerList.js.map +1 -1
  423. package/dist/canvas/useSurfaceInput.js +46 -27
  424. package/dist/canvas/useSurfaceInput.js.map +1 -1
  425. package/dist/canvas/useSurfaceSize.js +43 -0
  426. package/dist/canvas/useSurfaceSize.js.map +1 -0
  427. package/dist/canvas/useToolCursor.js +30 -21
  428. package/dist/canvas/useToolCursor.js.map +1 -1
  429. package/dist/canvas/useViewHelpers.js +112 -61
  430. package/dist/canvas/useViewHelpers.js.map +1 -1
  431. package/dist/canvas/useViewLayerGate.js +29 -0
  432. package/dist/canvas/useViewLayerGate.js.map +1 -0
  433. package/dist/canvas/useViewNesting.js +104 -0
  434. package/dist/canvas/useViewNesting.js.map +1 -0
  435. package/dist/canvas/useViewRegistrySurface.js +44 -0
  436. package/dist/canvas/useViewRegistrySurface.js.map +1 -0
  437. package/dist/canvas/viewInputs.js +14 -11
  438. package/dist/canvas/viewInputs.js.map +1 -1
  439. package/dist/canvas/viewRegistry.js +140 -42
  440. package/dist/canvas/viewRegistry.js.map +1 -1
  441. package/dist/canvas/watchElementMove.js +71 -33
  442. package/dist/canvas/watchElementMove.js.map +1 -1
  443. package/dist/canvas/wrapNodeOutput.js +20 -13
  444. package/dist/canvas/wrapNodeOutput.js.map +1 -1
  445. package/dist/clipboard.d.ts +7 -3
  446. package/dist/clipboard.js +4 -3
  447. package/dist/{clone-C0eADtS0.d.ts → clone-DZDrfIlU.d.ts} +20 -53
  448. package/dist/clone.d.ts +5 -4
  449. package/dist/core/adapters/testing/rootsTree.js +17 -0
  450. package/dist/core/adapters/testing/rootsTree.js.map +1 -0
  451. package/dist/core/applyOps.js +23 -7
  452. package/dist/core/applyOps.js.map +1 -1
  453. package/dist/core/device/index.js +6 -5
  454. package/dist/core/device/targets.js +29 -8
  455. package/dist/core/device/targets.js.map +1 -1
  456. package/dist/core/device/useDeviceProfile.js +86 -52
  457. package/dist/core/device/useDeviceProfile.js.map +1 -1
  458. package/dist/core/device/useTargetBasePx.js +23 -0
  459. package/dist/core/device/useTargetBasePx.js.map +1 -0
  460. package/dist/core/device/watchDevicePixelRatio.js +27 -10
  461. package/dist/core/device/watchDevicePixelRatio.js.map +1 -1
  462. package/dist/core/geometry/autoPoseDescriptor.js +38 -24
  463. package/dist/core/geometry/autoPoseDescriptor.js.map +1 -1
  464. package/dist/core/geometry/inkExtents.js +60 -0
  465. package/dist/core/geometry/inkExtents.js.map +1 -0
  466. package/dist/core/geometry/pathPoseDescriptor.js +101 -76
  467. package/dist/core/geometry/pathPoseDescriptor.js.map +1 -1
  468. package/dist/core/geometry/poseDescriptor.js +199 -136
  469. package/dist/core/geometry/poseDescriptor.js.map +1 -1
  470. package/dist/core/geometry/regionHit.js +127 -79
  471. package/dist/core/geometry/regionHit.js.map +1 -1
  472. package/dist/core/geometry/targetFrame.js +84 -60
  473. package/dist/core/geometry/targetFrame.js.map +1 -1
  474. package/dist/core/geometry/unionBounds.js +103 -48
  475. package/dist/core/geometry/unionBounds.js.map +1 -1
  476. package/dist/core/isPlainObject.js +3 -2
  477. package/dist/core/layers/backgroundFill.js +23 -15
  478. package/dist/core/layers/backgroundFill.js.map +1 -1
  479. package/dist/core/layers/children.js +16 -13
  480. package/dist/core/layers/children.js.map +1 -1
  481. package/dist/core/layers/gateLayer.js +24 -9
  482. package/dist/core/layers/gateLayer.js.map +1 -1
  483. package/dist/core/layers/layerGroup.js +42 -29
  484. package/dist/core/layers/layerGroup.js.map +1 -1
  485. package/dist/core/layers/redrawSource.js +15 -0
  486. package/dist/core/layers/redrawSource.js.map +1 -0
  487. package/dist/core/layers/render.js +183 -93
  488. package/dist/core/layers/render.js.map +1 -1
  489. package/dist/core/layers/retain.js +38 -0
  490. package/dist/core/layers/retain.js.map +1 -0
  491. package/dist/core/ops/arrange.js +30 -19
  492. package/dist/core/ops/arrange.js.map +1 -1
  493. package/dist/core/ops/create.js +32 -23
  494. package/dist/core/ops/create.js.map +1 -1
  495. package/dist/core/ops/createHistory.js +23 -14
  496. package/dist/core/ops/createHistory.js.map +1 -1
  497. package/dist/core/ops/delete.js +80 -53
  498. package/dist/core/ops/delete.js.map +1 -1
  499. package/dist/core/ops/nodeFlags.js +44 -0
  500. package/dist/core/ops/nodeFlags.js.map +1 -0
  501. package/dist/core/ops/registry.js +26 -11
  502. package/dist/core/ops/registry.js.map +1 -1
  503. package/dist/core/ops/reorder/algorithms.js +62 -38
  504. package/dist/core/ops/reorder/algorithms.js.map +1 -1
  505. package/dist/core/ops/reorder/index.js +124 -84
  506. package/dist/core/ops/reorder/index.js.map +1 -1
  507. package/dist/core/ops/reorder/setChildOrder.js +32 -23
  508. package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
  509. package/dist/core/ops/reparent.js +63 -37
  510. package/dist/core/ops/reparent.js.map +1 -1
  511. package/dist/core/ops/select.js +23 -20
  512. package/dist/core/ops/select.js.map +1 -1
  513. package/dist/core/ops/setData.js +23 -21
  514. package/dist/core/ops/setData.js.map +1 -1
  515. package/dist/core/ops/setLayer.js +26 -21
  516. package/dist/core/ops/setLayer.js.map +1 -1
  517. package/dist/core/ops/setLayout.js +27 -18
  518. package/dist/core/ops/setLayout.js.map +1 -1
  519. package/dist/core/ops/setPath.js +60 -41
  520. package/dist/core/ops/setPath.js.map +1 -1
  521. package/dist/core/ops/setText.js +26 -21
  522. package/dist/core/ops/setText.js.map +1 -1
  523. package/dist/core/ops/slot.js +36 -22
  524. package/dist/core/ops/slot.js.map +1 -1
  525. package/dist/core/ops/transform.js +35 -28
  526. package/dist/core/ops/transform.js.map +1 -1
  527. package/dist/core/pages/fitViewToPage.js +13 -11
  528. package/dist/core/pages/fitViewToPage.js.map +1 -1
  529. package/dist/core/pages/pages.js +73 -42
  530. package/dist/core/pages/pages.js.map +1 -1
  531. package/dist/core/pages/pagesLayer.js +19 -13
  532. package/dist/core/pages/pagesLayer.js.map +1 -1
  533. package/dist/core/paint/meshKind.js +16 -11
  534. package/dist/core/paint/meshKind.js.map +1 -1
  535. package/dist/core/paint/meshKindLazy.js +1 -1
  536. package/dist/core/paint/meshKindLazy.js.map +1 -1
  537. package/dist/core/paint/paintKindEntry.js +13 -4
  538. package/dist/core/paint/paintKindEntry.js.map +1 -1
  539. package/dist/core/paint/paintKinds.js +149 -88
  540. package/dist/core/paint/paintKinds.js.map +1 -1
  541. package/dist/core/paint/registerMesh.js +6 -4
  542. package/dist/core/paint/registerMesh.js.map +1 -1
  543. package/dist/core/scene/NodeProperties.js +15 -10
  544. package/dist/core/scene/NodeProperties.js.map +1 -1
  545. package/dist/core/scene/NodeRouting.js +16 -12
  546. package/dist/core/scene/NodeRouting.js.map +1 -1
  547. package/dist/core/scene/annotation.js +28 -0
  548. package/dist/core/scene/annotation.js.map +1 -0
  549. package/dist/core/scene/appliedLog.js +31 -23
  550. package/dist/core/scene/appliedLog.js.map +1 -1
  551. package/dist/core/scene/arrivalWindow.js +120 -75
  552. package/dist/core/scene/arrivalWindow.js.map +1 -1
  553. package/dist/core/scene/arrivals.js +17 -6
  554. package/dist/core/scene/arrivals.js.map +1 -1
  555. package/dist/core/scene/boundOps.js +42 -23
  556. package/dist/core/scene/boundOps.js.map +1 -1
  557. package/dist/core/scene/composeFrame.js +51 -21
  558. package/dist/core/scene/composeFrame.js.map +1 -1
  559. package/dist/core/scene/composePose.js +114 -62
  560. package/dist/core/scene/composePose.js.map +1 -1
  561. package/dist/core/scene/depFrame.js +94 -0
  562. package/dist/core/scene/depFrame.js.map +1 -0
  563. package/dist/core/scene/depMemo.js +44 -19
  564. package/dist/core/scene/depMemo.js.map +1 -1
  565. package/dist/core/scene/dependents.js +73 -45
  566. package/dist/core/scene/dependents.js.map +1 -1
  567. package/dist/core/scene/derivedParts.js +58 -0
  568. package/dist/core/scene/derivedParts.js.map +1 -0
  569. package/dist/core/scene/derivedPath.js +52 -22
  570. package/dist/core/scene/derivedPath.js.map +1 -1
  571. package/dist/core/scene/editMode.js +11 -11
  572. package/dist/core/scene/editMode.js.map +1 -1
  573. package/dist/core/scene/effectivePose.js +167 -51
  574. package/dist/core/scene/effectivePose.js.map +1 -1
  575. package/dist/core/scene/fieldEdits.js +95 -75
  576. package/dist/core/scene/fieldEdits.js.map +1 -1
  577. package/dist/core/scene/historyFacade.js +126 -87
  578. package/dist/core/scene/historyFacade.js.map +1 -1
  579. package/dist/core/scene/historyForm.js +7 -3
  580. package/dist/core/scene/historyForm.js.map +1 -1
  581. package/dist/core/scene/kitOps.js +203 -131
  582. package/dist/core/scene/kitOps.js.map +1 -1
  583. package/dist/core/scene/kitRegistry.js +49 -22
  584. package/dist/core/scene/kitRegistry.js.map +1 -1
  585. package/dist/core/scene/layerStack.js +123 -92
  586. package/dist/core/scene/layerStack.js.map +1 -1
  587. package/dist/core/scene/layoutPass.js +118 -72
  588. package/dist/core/scene/layoutPass.js.map +1 -1
  589. package/dist/core/scene/lockGuard.js +32 -24
  590. package/dist/core/scene/lockGuard.js.map +1 -1
  591. package/dist/core/scene/minSize.js +17 -0
  592. package/dist/core/scene/minSize.js.map +1 -0
  593. package/dist/core/scene/nestedHit.js +45 -31
  594. package/dist/core/scene/nestedHit.js.map +1 -1
  595. package/dist/core/scene/nodeFlags.js +43 -0
  596. package/dist/core/scene/nodeFlags.js.map +1 -0
  597. package/dist/core/scene/nodeFnFields.js +58 -41
  598. package/dist/core/scene/nodeFnFields.js.map +1 -1
  599. package/dist/core/scene/nodeGates.js +58 -0
  600. package/dist/core/scene/nodeGates.js.map +1 -0
  601. package/dist/core/scene/nodeMemo.js +92 -40
  602. package/dist/core/scene/nodeMemo.js.map +1 -1
  603. package/dist/core/scene/nodeStore.js +179 -99
  604. package/dist/core/scene/nodeStore.js.map +1 -1
  605. package/dist/core/scene/notifier.js +30 -19
  606. package/dist/core/scene/notifier.js.map +1 -1
  607. package/dist/core/scene/opTable.js +42 -36
  608. package/dist/core/scene/opTable.js.map +1 -1
  609. package/dist/core/scene/outerOps.js +49 -43
  610. package/dist/core/scene/outerOps.js.map +1 -1
  611. package/dist/core/scene/pathEffects/blend.js +80 -0
  612. package/dist/core/scene/pathEffects/blend.js.map +1 -0
  613. package/dist/core/scene/pathEffects/derive.js +112 -0
  614. package/dist/core/scene/pathEffects/derive.js.map +1 -0
  615. package/dist/core/scene/pathEffects/effects.js +40 -0
  616. package/dist/core/scene/pathEffects/effects.js.map +1 -0
  617. package/dist/core/scene/poseFeed.js +95 -60
  618. package/dist/core/scene/poseFeed.js.map +1 -1
  619. package/dist/core/scene/poseHold.js +33 -24
  620. package/dist/core/scene/poseHold.js.map +1 -1
  621. package/dist/core/scene/poseOverrides.js +86 -49
  622. package/dist/core/scene/poseOverrides.js.map +1 -1
  623. package/dist/core/scene/poseRemovals.js +58 -0
  624. package/dist/core/scene/poseRemovals.js.map +1 -0
  625. package/dist/core/scene/poseSnapshot.js +62 -41
  626. package/dist/core/scene/poseSnapshot.js.map +1 -1
  627. package/dist/core/scene/poseWrites.js +151 -0
  628. package/dist/core/scene/poseWrites.js.map +1 -0
  629. package/dist/core/scene/reconcileSpecs.js +63 -34
  630. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  631. package/dist/core/scene/recorder.js +90 -57
  632. package/dist/core/scene/recorder.js.map +1 -1
  633. package/dist/core/scene/renderOrder.js +105 -59
  634. package/dist/core/scene/renderOrder.js.map +1 -1
  635. package/dist/core/scene/scene.js +133 -80
  636. package/dist/core/scene/scene.js.map +1 -1
  637. package/dist/core/scene/sceneEdits.js +62 -49
  638. package/dist/core/scene/sceneEdits.js.map +1 -1
  639. package/dist/core/scene/sceneMutators.js +44 -36
  640. package/dist/core/scene/sceneMutators.js.map +1 -1
  641. package/dist/core/scene/scenePoseAdapter.js +13 -9
  642. package/dist/core/scene/scenePoseAdapter.js.map +1 -1
  643. package/dist/core/scene/sceneRecording.js +89 -73
  644. package/dist/core/scene/sceneRecording.js.map +1 -1
  645. package/dist/core/scene/sceneSelection.js +23 -16
  646. package/dist/core/scene/sceneSelection.js.map +1 -1
  647. package/dist/core/scene/sceneState.js +54 -36
  648. package/dist/core/scene/sceneState.js.map +1 -1
  649. package/dist/core/scene/serialization.js +87 -50
  650. package/dist/core/scene/serialization.js.map +1 -1
  651. package/dist/core/scene/staleReplay.js +35 -26
  652. package/dist/core/scene/staleReplay.js.map +1 -1
  653. package/dist/core/scene/statedFields.js +10 -5
  654. package/dist/core/scene/statedFields.js.map +1 -1
  655. package/dist/core/scene/treeEdits.js +129 -98
  656. package/dist/core/scene/treeEdits.js.map +1 -1
  657. package/dist/core/scene/treeOrder.js +13 -8
  658. package/dist/core/scene/treeOrder.js.map +1 -1
  659. package/dist/core/scene/treeReads.js +25 -16
  660. package/dist/core/scene/treeReads.js.map +1 -1
  661. package/dist/core/scene/types.js +4 -3
  662. package/dist/core/scene/types.js.map +1 -1
  663. package/dist/core/scene/unionOfChildren.js +20 -10
  664. package/dist/core/scene/unionOfChildren.js.map +1 -1
  665. package/dist/core/scene/unitScopes.js +15 -8
  666. package/dist/core/scene/unitScopes.js.map +1 -1
  667. package/dist/core/scene/useScene.js +32 -24
  668. package/dist/core/scene/useScene.js.map +1 -1
  669. package/dist/core/selection/chromeState.js +41 -17
  670. package/dist/core/selection/chromeState.js.map +1 -1
  671. package/dist/core/selection/readOnlySelection.js +39 -24
  672. package/dist/core/selection/readOnlySelection.js.map +1 -1
  673. package/dist/core/selection/selectionTarget.js +14 -3
  674. package/dist/core/selection/selectionTarget.js.map +1 -1
  675. package/dist/core/selection/usePublishSceneSelection.js +25 -18
  676. package/dist/core/selection/usePublishSceneSelection.js.map +1 -1
  677. package/dist/core/selection/useSelection.js +90 -57
  678. package/dist/core/selection/useSelection.js.map +1 -1
  679. package/dist/core/shapeKinds.js +43 -28
  680. package/dist/core/shapeKinds.js.map +1 -1
  681. package/dist/core/stableStringify.js +5 -4
  682. package/dist/core/stableStringify.js.map +1 -1
  683. package/dist/core/stylus/stylus.js +49 -25
  684. package/dist/core/stylus/stylus.js.map +1 -1
  685. package/dist/core/stylus/usePointerStylus.js +61 -34
  686. package/dist/core/stylus/usePointerStylus.js.map +1 -1
  687. package/dist/core/usePaintKinds.js +21 -11
  688. package/dist/core/usePaintKinds.js.map +1 -1
  689. package/dist/core/viewport/clampView.js +31 -15
  690. package/dist/core/viewport/clampView.js.map +1 -1
  691. package/dist/core/viewport/clientToWorld.js +15 -4
  692. package/dist/core/viewport/clientToWorld.js.map +1 -1
  693. package/dist/core/viewport/createVelocityTracker.js +23 -19
  694. package/dist/core/viewport/createVelocityTracker.js.map +1 -1
  695. package/dist/core/viewport/fitToBounds.js +28 -11
  696. package/dist/core/viewport/fitToBounds.js.map +1 -1
  697. package/dist/core/viewport/fitViewToBounds.js +45 -19
  698. package/dist/core/viewport/fitViewToBounds.js.map +1 -1
  699. package/dist/core/viewport/interpolateView.js +40 -20
  700. package/dist/core/viewport/interpolateView.js.map +1 -1
  701. package/dist/core/viewport/parallax.js +89 -56
  702. package/dist/core/viewport/parallax.js.map +1 -1
  703. package/dist/core/viewport/sceneNodeClientRect.js +21 -12
  704. package/dist/core/viewport/sceneNodeClientRect.js.map +1 -1
  705. package/dist/core/viewport/screenSlop.js +40 -17
  706. package/dist/core/viewport/screenSlop.js.map +1 -1
  707. package/dist/core/viewport/useAutoCenter.js +36 -22
  708. package/dist/core/viewport/useAutoCenter.js.map +1 -1
  709. package/dist/core/viewport/useCanvasSize.js +43 -22
  710. package/dist/core/viewport/useCanvasSize.js.map +1 -1
  711. package/dist/core/viewport/useDecayLoop.js +120 -48
  712. package/dist/core/viewport/useDecayLoop.js.map +1 -1
  713. package/dist/core/viewport/useNodeOverlayFrame.js +93 -58
  714. package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -1
  715. package/dist/core/viewport/useVelocityTracker.js +9 -6
  716. package/dist/core/viewport/useVelocityTracker.js.map +1 -1
  717. package/dist/core/viewport/useViewAnimation.js +143 -84
  718. package/dist/core/viewport/useViewAnimation.js.map +1 -1
  719. package/dist/core/viewport/view.js +48 -24
  720. package/dist/core/viewport/view.js.map +1 -1
  721. package/dist/core/viewport/viewTransform.js +8 -6
  722. package/dist/core/viewport/viewTransform.js.map +1 -1
  723. package/dist/core/viewport/viewportWorldRect.js +15 -7
  724. package/dist/core/viewport/viewportWorldRect.js.map +1 -1
  725. package/dist/core/viewport/wheelHandler.js +31 -20
  726. package/dist/core/viewport/wheelHandler.js.map +1 -1
  727. package/dist/core/viewport/zoomAt.js +47 -19
  728. package/dist/core/viewport/zoomAt.js.map +1 -1
  729. package/dist/core/viewport/zoomBounds.js +33 -17
  730. package/dist/core/viewport/zoomBounds.js.map +1 -1
  731. package/dist/cornerHandles-Camw_yeu.d.ts +169 -0
  732. package/dist/debug/createDebugOverlayLayer.js +303 -215
  733. package/dist/debug/createDebugOverlayLayer.js.map +1 -1
  734. package/dist/debug/createDebugSink.js +68 -47
  735. package/dist/debug/createDebugSink.js.map +1 -1
  736. package/dist/debug/defaultTheme.js +16 -4
  737. package/dist/debug/defaultTheme.js.map +1 -1
  738. package/dist/debug/flag.js +3 -2
  739. package/dist/debug/frameStats.js +11 -9
  740. package/dist/debug/frameStats.js.map +1 -1
  741. package/dist/debug/parseDebugFlags.js +25 -17
  742. package/dist/debug/parseDebugFlags.js.map +1 -1
  743. package/dist/debug/useDebugSink.js +52 -33
  744. package/dist/debug/useDebugSink.js.map +1 -1
  745. package/dist/depSchema-Cgfu_G9s.d.ts +3581 -0
  746. package/dist/features/chrome-caps/buildChromeCtx.js +12 -10
  747. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
  748. package/dist/features/chrome-caps/conditions.js +103 -25
  749. package/dist/features/chrome-caps/conditions.js.map +1 -1
  750. package/dist/features/chrome-caps/defaults.js +18 -10
  751. package/dist/features/chrome-caps/defaults.js.map +1 -1
  752. package/dist/features/chrome-caps/index.js +8 -7
  753. package/dist/features/chrome-caps/resolve.js +28 -16
  754. package/dist/features/chrome-caps/resolve.js.map +1 -1
  755. package/dist/features/chrome-caps/useChromeCaps.js +52 -44
  756. package/dist/features/chrome-caps/useChromeCaps.js.map +1 -1
  757. package/dist/features/chrome-caps/useHoverTracking.js +52 -26
  758. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
  759. package/dist/features/ingestion/contentHandlers.js +80 -34
  760. package/dist/features/ingestion/contentHandlers.js.map +1 -1
  761. package/dist/features/ingestion/imageHandler.js +49 -29
  762. package/dist/features/ingestion/imageHandler.js.map +1 -1
  763. package/dist/features/ingestion/openFilePicker.js +27 -9
  764. package/dist/features/ingestion/openFilePicker.js.map +1 -1
  765. package/dist/features/ingestion/placement.js +20 -11
  766. package/dist/features/ingestion/placement.js.map +1 -1
  767. package/dist/features/ingestion/registerKitHandlers.js +35 -18
  768. package/dist/features/ingestion/registerKitHandlers.js.map +1 -1
  769. package/dist/features/ingestion/svgHandler.js +60 -34
  770. package/dist/features/ingestion/svgHandler.js.map +1 -1
  771. package/dist/features/ingestion/textHandler.js +37 -16
  772. package/dist/features/ingestion/textHandler.js.map +1 -1
  773. package/dist/features/ingestion/useCanvasIngestion.js +57 -39
  774. package/dist/features/ingestion/useCanvasIngestion.js.map +1 -1
  775. package/dist/features/ingestion/weaselJsonHandler.js +38 -28
  776. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
  777. package/dist/features/longPress/longPressFeedback.js +110 -81
  778. package/dist/features/longPress/longPressFeedback.js.map +1 -1
  779. package/dist/features/measure/actionIds.js +22 -0
  780. package/dist/features/measure/actionIds.js.map +1 -0
  781. package/dist/features/measure/measureCommands.js +178 -0
  782. package/dist/features/measure/measureCommands.js.map +1 -0
  783. package/dist/features/measure/measureContribution.js +57 -0
  784. package/dist/features/measure/measureContribution.js.map +1 -0
  785. package/dist/features/measure/measureEdits.js +82 -0
  786. package/dist/features/measure/measureEdits.js.map +1 -0
  787. package/dist/features/measure/measureGestures.js +185 -0
  788. package/dist/features/measure/measureGestures.js.map +1 -0
  789. package/dist/features/measure/measureHit.js +80 -0
  790. package/dist/features/measure/measureHit.js.map +1 -0
  791. package/dist/features/measure/measureLayer.js +86 -0
  792. package/dist/features/measure/measureLayer.js.map +1 -0
  793. package/dist/features/measure/measurement.js +79 -0
  794. package/dist/features/measure/measurement.js.map +1 -0
  795. package/dist/features/measure/measurements.js +41 -0
  796. package/dist/features/measure/measurements.js.map +1 -0
  797. package/dist/features/modes/modeLayers.js +81 -55
  798. package/dist/features/modes/modeLayers.js.map +1 -1
  799. package/dist/features/modes/modeTriggers.js +66 -0
  800. package/dist/features/modes/modeTriggers.js.map +1 -0
  801. package/dist/features/pathEffects/index.js +35 -0
  802. package/dist/features/pathEffects/index.js.map +1 -0
  803. package/dist/features/pathEffects/readSource.js +46 -0
  804. package/dist/features/pathEffects/readSource.js.map +1 -0
  805. package/dist/features/paths/anchorData.js +65 -0
  806. package/dist/features/paths/anchorData.js.map +1 -0
  807. package/dist/features/paths/anchorMarkers.js +137 -0
  808. package/dist/features/paths/anchorMarkers.js.map +1 -0
  809. package/dist/features/paths/editablePath.js +149 -46
  810. package/dist/features/paths/editablePath.js.map +1 -1
  811. package/dist/features/paths/index.js +12 -9
  812. package/dist/features/paths/originProjection.js +16 -9
  813. package/dist/features/paths/originProjection.js.map +1 -1
  814. package/dist/features/paths/pathEditExtension.js +26 -0
  815. package/dist/features/paths/pathEditExtension.js.map +1 -0
  816. package/dist/features/paths/pathEditState.js +107 -26
  817. package/dist/features/paths/pathEditState.js.map +1 -1
  818. package/dist/features/paths/pathEditingOverlayLayer.js +58 -110
  819. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
  820. package/dist/features/paths/pathLayer.js +79 -29
  821. package/dist/features/paths/pathLayer.js.map +1 -1
  822. package/dist/features/paths/pathRepresentation.js +27 -0
  823. package/dist/features/paths/pathRepresentation.js.map +1 -0
  824. package/dist/features/paths/pathSnap/glyphs.js +39 -0
  825. package/dist/features/paths/pathSnap/glyphs.js.map +1 -0
  826. package/dist/features/paths/pathSnap/pathSnapSource.js +82 -0
  827. package/dist/features/paths/pathSnap/pathSnapSource.js.map +1 -0
  828. package/dist/features/paths/pathSnap/sceneIndex.js +78 -0
  829. package/dist/features/paths/pathSnap/sceneIndex.js.map +1 -0
  830. package/dist/features/paths/pathSnap/snapGeometry.js +47 -0
  831. package/dist/features/paths/pathSnap/snapGeometry.js.map +1 -0
  832. package/dist/features/paths/penPreviewLayer.js +135 -102
  833. package/dist/features/paths/penPreviewLayer.js.map +1 -1
  834. package/dist/features/paths/shapeGenerator.js +112 -60
  835. package/dist/features/paths/shapeGenerator.js.map +1 -1
  836. package/dist/features/paths/strokeOutline.js +15 -0
  837. package/dist/features/paths/strokeOutline.js.map +1 -0
  838. package/dist/features/paths/useAnchorFields.js +35 -0
  839. package/dist/features/paths/useAnchorFields.js.map +1 -0
  840. package/dist/features/paths/usePathEdit.js +58 -28
  841. package/dist/features/paths/usePathEdit.js.map +1 -1
  842. package/dist/features/poseRun/usePoseRun.js +110 -43
  843. package/dist/features/poseRun/usePoseRun.js.map +1 -1
  844. package/dist/features/selection/handleCommands.js +116 -0
  845. package/dist/features/selection/handleCommands.js.map +1 -0
  846. package/dist/features/selection/overlay.js +288 -328
  847. package/dist/features/selection/overlay.js.map +1 -1
  848. package/dist/features/selection/selectionPose.js +109 -0
  849. package/dist/features/selection/selectionPose.js.map +1 -0
  850. package/dist/features/snap/angle2d.js +158 -0
  851. package/dist/features/snap/angle2d.js.map +1 -0
  852. package/dist/features/snap/debugCandidates.js +27 -0
  853. package/dist/features/snap/debugCandidates.js.map +1 -0
  854. package/dist/features/snap/gather.js +71 -0
  855. package/dist/features/snap/gather.js.map +1 -0
  856. package/dist/features/snap/inputSubspace.js +46 -0
  857. package/dist/features/snap/inputSubspace.js.map +1 -0
  858. package/dist/features/snap/marks.js +29 -0
  859. package/dist/features/snap/marks.js.map +1 -0
  860. package/dist/features/snap/outcomeStore.js +25 -0
  861. package/dist/features/snap/outcomeStore.js.map +1 -0
  862. package/dist/features/snap/pointSnap.js +48 -0
  863. package/dist/features/snap/pointSnap.js.map +1 -0
  864. package/dist/features/snap/probes2d.js +91 -0
  865. package/dist/features/snap/probes2d.js.map +1 -0
  866. package/dist/features/snap/readoutDraw.js +93 -0
  867. package/dist/features/snap/readoutDraw.js.map +1 -0
  868. package/dist/features/snap/readoutLayer.js +49 -0
  869. package/dist/features/snap/readoutLayer.js.map +1 -0
  870. package/dist/features/snap/registry.js +27 -0
  871. package/dist/features/snap/registry.js.map +1 -0
  872. package/dist/features/snap/resizeBox.js +137 -0
  873. package/dist/features/snap/resizeBox.js.map +1 -0
  874. package/dist/features/snap/roles.js +31 -0
  875. package/dist/features/snap/roles.js.map +1 -0
  876. package/dist/features/snap/rotationSource.js +30 -0
  877. package/dist/features/snap/rotationSource.js.map +1 -0
  878. package/dist/features/snap/sceneReads.js +45 -0
  879. package/dist/features/snap/sceneReads.js.map +1 -0
  880. package/dist/features/snap/sceneSession2d.js +79 -0
  881. package/dist/features/snap/sceneSession2d.js.map +1 -0
  882. package/dist/features/snap/screen.js +23 -0
  883. package/dist/features/snap/screen.js.map +1 -0
  884. package/dist/features/snap/session2d.js +129 -0
  885. package/dist/features/snap/session2d.js.map +1 -0
  886. package/dist/features/snap/spanSnap.js +77 -0
  887. package/dist/features/snap/spanSnap.js.map +1 -0
  888. package/dist/features/snap/stepAngles.js +15 -0
  889. package/dist/features/snap/stepAngles.js.map +1 -0
  890. package/dist/features/text/editingDrawOne.js +32 -0
  891. package/dist/features/text/editingDrawOne.js.map +1 -0
  892. package/dist/features/text/index.js +7 -6
  893. package/dist/features/text/textHitAt.js +51 -0
  894. package/dist/features/text/textHitAt.js.map +1 -0
  895. package/dist/features/text/textLayer.js +21 -27
  896. package/dist/features/text/textLayer.js.map +1 -1
  897. package/dist/features/text/useSceneTextEdit.js +190 -128
  898. package/dist/features/text/useSceneTextEdit.js.map +1 -1
  899. package/dist/features/viewports/viewResolver.js +48 -39
  900. package/dist/features/viewports/viewResolver.js.map +1 -1
  901. package/dist/features/viewports/viewportLayer.js +60 -29
  902. package/dist/features/viewports/viewportLayer.js.map +1 -1
  903. package/dist/iconRegistry/IconRegistryProvider.js +73 -0
  904. package/dist/iconRegistry/IconRegistryProvider.js.map +1 -0
  905. package/dist/iconRegistry/useIconGlyph.js +14 -0
  906. package/dist/iconRegistry/useIconGlyph.js.map +1 -0
  907. package/dist/iconRegistry/useIconVariant.js +29 -0
  908. package/dist/iconRegistry/useIconVariant.js.map +1 -0
  909. package/dist/icons.d.ts +6 -0
  910. package/dist/icons.js +3 -0
  911. package/dist/icons.table.js +13 -0
  912. package/dist/icons.table.js.map +1 -0
  913. package/dist/icons.table.json +556 -0
  914. package/dist/icons2.table.js +9 -0
  915. package/dist/icons2.table.js.map +1 -0
  916. package/dist/index.d.ts +4259 -5074
  917. package/dist/index.js +340 -285
  918. package/dist/input/keyState.js +118 -54
  919. package/dist/input/keyState.js.map +1 -1
  920. package/dist/input/useKeyModifiers.js +13 -7
  921. package/dist/input/useKeyModifiers.js.map +1 -1
  922. package/dist/input/useKeyState.js +23 -16
  923. package/dist/input/useKeyState.js.map +1 -1
  924. package/dist/interactions/actions/align/action.js +76 -45
  925. package/dist/interactions/actions/align/action.js.map +1 -1
  926. package/dist/interactions/actions/align/align.js +86 -48
  927. package/dist/interactions/actions/align/align.js.map +1 -1
  928. package/dist/interactions/actions/booleans/action.js +67 -33
  929. package/dist/interactions/actions/booleans/action.js.map +1 -1
  930. package/dist/interactions/actions/booleans/booleans.js +77 -70
  931. package/dist/interactions/actions/booleans/booleans.js.map +1 -1
  932. package/dist/interactions/actions/booleans/commit.js +49 -0
  933. package/dist/interactions/actions/booleans/commit.js.map +1 -0
  934. package/dist/interactions/actions/booleans/custom.js +48 -0
  935. package/dist/interactions/actions/booleans/custom.js.map +1 -0
  936. package/dist/interactions/actions/booleans/operands.js +43 -32
  937. package/dist/interactions/actions/booleans/operands.js.map +1 -1
  938. package/dist/interactions/actions/booleans/pieces.js +29 -23
  939. package/dist/interactions/actions/booleans/pieces.js.map +1 -1
  940. package/dist/interactions/actions/booleans/placement.js +30 -17
  941. package/dist/interactions/actions/booleans/placement.js.map +1 -1
  942. package/dist/interactions/actions/booleans/useBooleans.js +30 -17
  943. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
  944. package/dist/interactions/actions/booleans/useBooleansAdapter.js +8 -5
  945. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
  946. package/dist/interactions/actions/clipboard/action.js +81 -40
  947. package/dist/interactions/actions/clipboard/action.js.map +1 -1
  948. package/dist/interactions/actions/clipboard/clipboardOps.js +100 -72
  949. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
  950. package/dist/interactions/actions/clipboard/materializePaste.js +38 -19
  951. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
  952. package/dist/interactions/actions/clipboard/wireFormat.js +66 -28
  953. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
  954. package/dist/interactions/actions/clone/action.js +102 -70
  955. package/dist/interactions/actions/clone/action.js.map +1 -1
  956. package/dist/interactions/actions/clone/behaviors.js +55 -38
  957. package/dist/interactions/actions/clone/behaviors.js.map +1 -1
  958. package/dist/interactions/actions/defaultCommitAdapter.js +32 -10
  959. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
  960. package/dist/interactions/actions/defaults/anchorEditing.js +252 -111
  961. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
  962. package/dist/interactions/actions/defaults/anchorFields.js +54 -0
  963. package/dist/interactions/actions/defaults/anchorFields.js.map +1 -0
  964. package/dist/interactions/actions/defaults/anchorHandles.js +31 -27
  965. package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -1
  966. package/dist/interactions/actions/defaults/anchorJoin.js +55 -37
  967. package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -1
  968. package/dist/interactions/actions/defaults/areaSelect.js +56 -40
  969. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  970. package/dist/interactions/actions/defaults/bendSegment.js +67 -31
  971. package/dist/interactions/actions/defaults/bendSegment.js.map +1 -1
  972. package/dist/interactions/actions/defaults/cancelGesture.js +12 -5
  973. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
  974. package/dist/interactions/actions/defaults/clearSelection.js +22 -7
  975. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
  976. package/dist/interactions/actions/defaults/contextMenu.js +149 -0
  977. package/dist/interactions/actions/defaults/contextMenu.js.map +1 -0
  978. package/dist/interactions/actions/defaults/copySubtree.js +43 -29
  979. package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
  980. package/dist/interactions/actions/defaults/createPaintAction.js +79 -54
  981. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
  982. package/dist/interactions/actions/defaults/delete.js +61 -33
  983. package/dist/interactions/actions/defaults/delete.js.map +1 -1
  984. package/dist/interactions/actions/defaults/duplicate.js +60 -32
  985. package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
  986. package/dist/interactions/actions/defaults/enterPathEdit.js +22 -18
  987. package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
  988. package/dist/interactions/actions/defaults/enterTextEdit.js +20 -8
  989. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
  990. package/dist/interactions/actions/defaults/escape.js +16 -7
  991. package/dist/interactions/actions/defaults/escape.js.map +1 -1
  992. package/dist/interactions/actions/defaults/exitPathEdit.js +6 -6
  993. package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -1
  994. package/dist/interactions/actions/defaults/group.js +122 -73
  995. package/dist/interactions/actions/defaults/group.js.map +1 -1
  996. package/dist/interactions/actions/defaults/ingest.js +52 -35
  997. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  998. package/dist/interactions/actions/defaults/insertPathAnchor.js +43 -22
  999. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
  1000. package/dist/interactions/actions/defaults/nudge.js +79 -52
  1001. package/dist/interactions/actions/defaults/nudge.js.map +1 -1
  1002. package/dist/interactions/actions/defaults/nudgeSteps.js +17 -12
  1003. package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -1
  1004. package/dist/interactions/actions/defaults/pathEditMarks.js +60 -0
  1005. package/dist/interactions/actions/defaults/pathEditMarks.js.map +1 -0
  1006. package/dist/interactions/actions/defaults/pathEditTools.js +57 -0
  1007. package/dist/interactions/actions/defaults/pathEditTools.js.map +1 -0
  1008. package/dist/interactions/actions/defaults/pinchZoom.js +55 -39
  1009. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
  1010. package/dist/interactions/actions/defaults/reorder.js +71 -40
  1011. package/dist/interactions/actions/defaults/reorder.js.map +1 -1
  1012. package/dist/interactions/actions/defaults/requiresSelection.js +13 -6
  1013. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
  1014. package/dist/interactions/actions/defaults/segmentUnder.js +24 -16
  1015. package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -1
  1016. package/dist/interactions/actions/defaults/selectAll.js +21 -7
  1017. package/dist/interactions/actions/defaults/selectAll.js.map +1 -1
  1018. package/dist/interactions/actions/defaults/setFill.js +37 -21
  1019. package/dist/interactions/actions/defaults/setFill.js.map +1 -1
  1020. package/dist/interactions/actions/defaults/setFillOpacity.js +19 -10
  1021. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
  1022. package/dist/interactions/actions/defaults/setStroke.js +46 -25
  1023. package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
  1024. package/dist/interactions/actions/defaults/setStrokeOpacity.js +19 -11
  1025. package/dist/interactions/actions/defaults/setStrokeOpacity.js.map +1 -1
  1026. package/dist/interactions/actions/defaults/slice.js +42 -17
  1027. package/dist/interactions/actions/defaults/slice.js.map +1 -1
  1028. package/dist/interactions/actions/defaults/sliceOps.js +63 -42
  1029. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
  1030. package/dist/interactions/actions/defaults/toolActivate.js +34 -16
  1031. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
  1032. package/dist/interactions/actions/defaults/toolResetToDefault.js +29 -10
  1033. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
  1034. package/dist/interactions/actions/defaults/undoRedo.js +26 -20
  1035. package/dist/interactions/actions/defaults/undoRedo.js.map +1 -1
  1036. package/dist/interactions/actions/defaults/viewportDragPan.js +91 -58
  1037. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
  1038. package/dist/interactions/actions/defaults/viewportWheelPan.js +42 -23
  1039. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
  1040. package/dist/interactions/actions/defaults/viewportZoom.js +107 -59
  1041. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
  1042. package/dist/interactions/actions/distribute/action.js +62 -39
  1043. package/dist/interactions/actions/distribute/action.js.map +1 -1
  1044. package/dist/interactions/actions/distribute/distribute.js +53 -34
  1045. package/dist/interactions/actions/distribute/distribute.js.map +1 -1
  1046. package/dist/interactions/actions/distribute/plan.js +40 -22
  1047. package/dist/interactions/actions/distribute/plan.js.map +1 -1
  1048. package/dist/interactions/actions/drawnBoxes.js +31 -0
  1049. package/dist/interactions/actions/drawnBoxes.js.map +1 -0
  1050. package/dist/interactions/actions/edit-anchors/action.js +248 -72
  1051. package/dist/interactions/actions/edit-anchors/action.js.map +1 -1
  1052. package/dist/interactions/actions/edit-anchors/extensionDrags.js +50 -0
  1053. package/dist/interactions/actions/edit-anchors/extensionDrags.js.map +1 -0
  1054. package/dist/interactions/actions/edit-anchors/geometry.js +74 -47
  1055. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
  1056. package/dist/interactions/actions/edit-anchors/handleDrag.js +101 -0
  1057. package/dist/interactions/actions/edit-anchors/handleDrag.js.map +1 -0
  1058. package/dist/interactions/actions/edit-anchors/handles.js +41 -27
  1059. package/dist/interactions/actions/edit-anchors/handles.js.map +1 -1
  1060. package/dist/interactions/actions/edit-anchors/params.js +12 -0
  1061. package/dist/interactions/actions/edit-anchors/params.js.map +1 -0
  1062. package/dist/interactions/actions/edit-anchors/preview.js +61 -19
  1063. package/dist/interactions/actions/edit-anchors/preview.js.map +1 -1
  1064. package/dist/interactions/actions/edit-anchors/symmetry.js +12 -7
  1065. package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -1
  1066. package/dist/interactions/actions/flip/action.js +119 -61
  1067. package/dist/interactions/actions/flip/action.js.map +1 -1
  1068. package/dist/interactions/actions/flip/helpers.js +69 -36
  1069. package/dist/interactions/actions/flip/helpers.js.map +1 -1
  1070. package/dist/interactions/actions/geometryProjection.js +17 -12
  1071. package/dist/interactions/actions/geometryProjection.js.map +1 -1
  1072. package/dist/interactions/actions/gestureFrames.js +20 -11
  1073. package/dist/interactions/actions/gestureFrames.js.map +1 -1
  1074. package/dist/interactions/actions/gestureLifecycle.js +93 -48
  1075. package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
  1076. package/dist/interactions/actions/hitSelection.js +6 -4
  1077. package/dist/interactions/actions/hitSelection.js.map +1 -1
  1078. package/dist/interactions/actions/insert/action.js +71 -42
  1079. package/dist/interactions/actions/insert/action.js.map +1 -1
  1080. package/dist/interactions/actions/insert/commit.js +44 -22
  1081. package/dist/interactions/actions/insert/commit.js.map +1 -1
  1082. package/dist/interactions/actions/insert/extras.js +60 -38
  1083. package/dist/interactions/actions/insert/extras.js.map +1 -1
  1084. package/dist/interactions/actions/insert/frame.js +58 -39
  1085. package/dist/interactions/actions/insert/frame.js.map +1 -1
  1086. package/dist/interactions/actions/insert/geometry.js +29 -25
  1087. package/dist/interactions/actions/insert/geometry.js.map +1 -1
  1088. package/dist/interactions/actions/insert/placeAction.js +108 -0
  1089. package/dist/interactions/actions/insert/placeAction.js.map +1 -0
  1090. package/dist/interactions/actions/insert/repositionAction.js +26 -11
  1091. package/dist/interactions/actions/insert/repositionAction.js.map +1 -1
  1092. package/dist/interactions/actions/insert/rotateAction.js +19 -8
  1093. package/dist/interactions/actions/insert/rotateAction.js.map +1 -1
  1094. package/dist/interactions/actions/insert/session.js +57 -41
  1095. package/dist/interactions/actions/insert/session.js.map +1 -1
  1096. package/dist/interactions/actions/insert/shape.js +83 -25
  1097. package/dist/interactions/actions/insert/shape.js.map +1 -1
  1098. package/dist/interactions/actions/lasso-select/action.js +160 -100
  1099. package/dist/interactions/actions/lasso-select/action.js.map +1 -1
  1100. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +44 -25
  1101. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
  1102. package/dist/interactions/actions/move/action.js +87 -52
  1103. package/dist/interactions/actions/move/action.js.map +1 -1
  1104. package/dist/interactions/actions/move/behaviors/layoutDrop.js +56 -36
  1105. package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -1
  1106. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +20 -10
  1107. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -1
  1108. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +40 -24
  1109. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
  1110. package/dist/interactions/actions/move/behaviors/snapToContainer.js +102 -64
  1111. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
  1112. package/dist/interactions/actions/move/capture.js +103 -78
  1113. package/dist/interactions/actions/move/capture.js.map +1 -1
  1114. package/dist/interactions/actions/move/commit/index.js +43 -34
  1115. package/dist/interactions/actions/move/commit/index.js.map +1 -1
  1116. package/dist/interactions/actions/move/commit/layoutDrop.js +43 -32
  1117. package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -1
  1118. package/dist/interactions/actions/move/commit/layoutRelease.js +97 -77
  1119. package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -1
  1120. package/dist/interactions/actions/move/commit/rebase.js +16 -13
  1121. package/dist/interactions/actions/move/commit/rebase.js.map +1 -1
  1122. package/dist/interactions/actions/move/commit/reparent.js +83 -57
  1123. package/dist/interactions/actions/move/commit/reparent.js.map +1 -1
  1124. package/dist/interactions/actions/move/delta.js +58 -36
  1125. package/dist/interactions/actions/move/delta.js.map +1 -1
  1126. package/dist/interactions/actions/move/frame.js +72 -35
  1127. package/dist/interactions/actions/move/frame.js.map +1 -1
  1128. package/dist/interactions/actions/move/gestureAdapter.js +30 -20
  1129. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
  1130. package/dist/interactions/actions/move/landedDescendants.js +40 -25
  1131. package/dist/interactions/actions/move/landedDescendants.js.map +1 -1
  1132. package/dist/interactions/actions/move/layout/container.js +92 -72
  1133. package/dist/interactions/actions/move/layout/container.js.map +1 -1
  1134. package/dist/interactions/actions/move/layout/dragged.js +61 -39
  1135. package/dist/interactions/actions/move/layout/dragged.js.map +1 -1
  1136. package/dist/interactions/actions/move/layout/dropPass.js +136 -94
  1137. package/dist/interactions/actions/move/layout/dropPass.js.map +1 -1
  1138. package/dist/interactions/actions/move/layout/exits.js +58 -30
  1139. package/dist/interactions/actions/move/layout/exits.js.map +1 -1
  1140. package/dist/interactions/actions/move/layout/glide.js +55 -34
  1141. package/dist/interactions/actions/move/layout/glide.js.map +1 -1
  1142. package/dist/interactions/actions/move/session.js +85 -56
  1143. package/dist/interactions/actions/move/session.js.map +1 -1
  1144. package/dist/interactions/actions/move/translate.js +58 -43
  1145. package/dist/interactions/actions/move/translate.js.map +1 -1
  1146. package/dist/interactions/actions/outlines/createOutlines.js +28 -20
  1147. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
  1148. package/dist/interactions/actions/outlines/createOutlinesAction.js +43 -31
  1149. package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -1
  1150. package/dist/interactions/actions/outlines/outlineStroke.js +68 -45
  1151. package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -1
  1152. package/dist/interactions/actions/outlines/outlineStrokeAction.js +24 -19
  1153. package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -1
  1154. package/dist/interactions/actions/outlines/replaceWithPaths.js +57 -42
  1155. package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -1
  1156. package/dist/interactions/actions/outlines/strokeRegion.js +37 -22
  1157. package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -1
  1158. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +8 -5
  1159. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js.map +1 -1
  1160. package/dist/interactions/actions/pathCommands/cutJoin.js +119 -72
  1161. package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -1
  1162. package/dist/interactions/actions/pathCommands/livePathEdit.js +74 -40
  1163. package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -1
  1164. package/dist/interactions/actions/pathCommands/pathNodes.js +91 -82
  1165. package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -1
  1166. package/dist/interactions/actions/pathCommands/simplifyOffset.js +52 -28
  1167. package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -1
  1168. package/dist/interactions/actions/pathGestureTags.js +29 -0
  1169. package/dist/interactions/actions/pathGestureTags.js.map +1 -0
  1170. package/dist/interactions/actions/planeInput.js +198 -123
  1171. package/dist/interactions/actions/planeInput.js.map +1 -1
  1172. package/dist/interactions/actions/pointerState.js +12 -7
  1173. package/dist/interactions/actions/pointerState.js.map +1 -1
  1174. package/dist/interactions/actions/poseDescriptorDep.js +24 -14
  1175. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
  1176. package/dist/interactions/actions/poseFrame.js +45 -28
  1177. package/dist/interactions/actions/poseFrame.js.map +1 -1
  1178. package/dist/interactions/actions/resize/action.js +68 -39
  1179. package/dist/interactions/actions/resize/action.js.map +1 -1
  1180. package/dist/interactions/actions/resize/aspect.js +44 -0
  1181. package/dist/interactions/actions/resize/aspect.js.map +1 -0
  1182. package/dist/interactions/actions/resize/behaviors/clampMinSize.js +38 -13
  1183. package/dist/interactions/actions/resize/behaviors/clampMinSize.js.map +1 -1
  1184. package/dist/interactions/actions/resize/boxFrame.js +15 -11
  1185. package/dist/interactions/actions/resize/boxFrame.js.map +1 -1
  1186. package/dist/interactions/actions/resize/capture.js +105 -62
  1187. package/dist/interactions/actions/resize/capture.js.map +1 -1
  1188. package/dist/interactions/actions/resize/commit.js +75 -56
  1189. package/dist/interactions/actions/resize/commit.js.map +1 -1
  1190. package/dist/interactions/actions/resize/cornerHandles.js +154 -17
  1191. package/dist/interactions/actions/resize/cornerHandles.js.map +1 -1
  1192. package/dist/interactions/actions/resize/frame.js +133 -66
  1193. package/dist/interactions/actions/resize/frame.js.map +1 -1
  1194. package/dist/interactions/actions/resize/minimum.js +35 -0
  1195. package/dist/interactions/actions/resize/minimum.js.map +1 -0
  1196. package/dist/interactions/actions/resize/replay.js +40 -30
  1197. package/dist/interactions/actions/resize/replay.js.map +1 -1
  1198. package/dist/interactions/actions/resize/ruleBounds.js +8 -5
  1199. package/dist/interactions/actions/resize/ruleBounds.js.map +1 -1
  1200. package/dist/interactions/actions/resize/session.js +95 -50
  1201. package/dist/interactions/actions/resize/session.js.map +1 -1
  1202. package/dist/interactions/actions/resolveOverlays.js +48 -33
  1203. package/dist/interactions/actions/resolveOverlays.js.map +1 -1
  1204. package/dist/interactions/actions/resolvePreviews.js +63 -46
  1205. package/dist/interactions/actions/resolvePreviews.js.map +1 -1
  1206. package/dist/interactions/actions/rotate/action.js +68 -42
  1207. package/dist/interactions/actions/rotate/action.js.map +1 -1
  1208. package/dist/interactions/actions/rotate/commit.js +39 -31
  1209. package/dist/interactions/actions/rotate/commit.js.map +1 -1
  1210. package/dist/interactions/actions/rotate/frame.js +75 -47
  1211. package/dist/interactions/actions/rotate/frame.js.map +1 -1
  1212. package/dist/interactions/actions/rotate/geometry.js +36 -24
  1213. package/dist/interactions/actions/rotate/geometry.js.map +1 -1
  1214. package/dist/interactions/actions/rotate/handle.js +28 -15
  1215. package/dist/interactions/actions/rotate/handle.js.map +1 -1
  1216. package/dist/interactions/actions/rotate/replay.js +22 -18
  1217. package/dist/interactions/actions/rotate/replay.js.map +1 -1
  1218. package/dist/interactions/actions/rotate/session.js +115 -76
  1219. package/dist/interactions/actions/rotate/session.js.map +1 -1
  1220. package/dist/interactions/actions/selectionSubtree.js +124 -53
  1221. package/dist/interactions/actions/selectionSubtree.js.map +1 -1
  1222. package/dist/interactions/actions/spatialReference.js +33 -26
  1223. package/dist/interactions/actions/spatialReference.js.map +1 -1
  1224. package/dist/interactions/actions/testUtils.js +53 -0
  1225. package/dist/interactions/actions/testUtils.js.map +1 -0
  1226. package/dist/interactions/actions/transform-again/action.js +50 -35
  1227. package/dist/interactions/actions/transform-again/action.js.map +1 -1
  1228. package/dist/interactions/actions/transform-again/memory.js +32 -21
  1229. package/dist/interactions/actions/transform-again/memory.js.map +1 -1
  1230. package/dist/interactions/actions/useActionSet.js +83 -0
  1231. package/dist/interactions/actions/useActionSet.js.map +1 -0
  1232. package/dist/interactions/actions/useStandardActions.js +23 -165
  1233. package/dist/interactions/actions/useStandardActions.js.map +1 -1
  1234. package/dist/interactions/gestures/dragGesture/dragGesture.js +109 -68
  1235. package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
  1236. package/dist/interactions/gestures/dragGesture/dragPointOf.js +17 -10
  1237. package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -1
  1238. package/dist/interactions/gestures/dragRadial/dragRadial.js +129 -93
  1239. package/dist/interactions/gestures/dragRadial/dragRadial.js.map +1 -1
  1240. package/dist/interactions/gestures/dragRect/dragRect.js +155 -111
  1241. package/dist/interactions/gestures/dragRect/dragRect.js.map +1 -1
  1242. package/dist/interactions/gestures/handleDrag/handleDrag.js +52 -30
  1243. package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
  1244. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +168 -97
  1245. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
  1246. package/dist/interactions/gestures/shared/originProjection.js +32 -25
  1247. package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
  1248. package/dist/interactions/gestures/shared/screenTolerance.js +26 -17
  1249. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
  1250. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +39 -21
  1251. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
  1252. package/dist/kitSettingsSchema.js +80 -0
  1253. package/dist/kitSettingsSchema.js.map +1 -0
  1254. package/dist/{math-CYUjoyyU.d.ts → math-CrJULaZI.d.ts} +5 -6
  1255. package/dist/math.d.ts +4 -5
  1256. package/dist/math.js +7 -6
  1257. package/dist/mesh.js +3 -2
  1258. package/dist/move.d.ts +7 -6
  1259. package/dist/move.js +4 -3
  1260. package/dist/{originProjection-CoNVpITV.d.ts → options-p9GZMXbY.d.ts} +4 -27
  1261. package/dist/originProjection-gY0jb4Wb.d.ts +24 -0
  1262. package/dist/patterns-builtin.js +3 -2
  1263. package/dist/{poseDescriptor-Bqk-11Rl.d.ts → poseDescriptor-DN2yfnq_.d.ts} +7 -7
  1264. package/dist/renderer.d.ts +1 -1
  1265. package/dist/renderer.js +3 -2
  1266. package/dist/resize.d.ts +10 -28
  1267. package/dist/resize.js +6 -7
  1268. package/dist/routing.js +3 -2
  1269. package/dist/style.css +88 -1
  1270. package/dist/test-hook/createTestHook.js +23 -20
  1271. package/dist/test-hook/createTestHook.js.map +1 -1
  1272. package/dist/test-hook/install.js +32 -13
  1273. package/dist/test-hook/install.js.map +1 -1
  1274. package/dist/test-hook/useTestHook.js +22 -16
  1275. package/dist/test-hook/useTestHook.js.map +1 -1
  1276. package/dist/test-seams.d.ts +164 -1
  1277. package/dist/test-seams.js +8 -3
  1278. package/dist/tools/builtin/bone/boneActions.js +96 -70
  1279. package/dist/tools/builtin/bone/boneActions.js.map +1 -1
  1280. package/dist/tools/builtin/bone/boneOverlay.js +49 -36
  1281. package/dist/tools/builtin/bone/boneOverlay.js.map +1 -1
  1282. package/dist/tools/builtin/bone/placedRig.js +18 -14
  1283. package/dist/tools/builtin/bone/placedRig.js.map +1 -1
  1284. package/dist/tools/builtin/bone/rigEditState.js +22 -13
  1285. package/dist/tools/builtin/bone/rigEditState.js.map +1 -1
  1286. package/dist/tools/builtin/bone/useBoneTool.js +68 -41
  1287. package/dist/tools/builtin/bone/useBoneTool.js.map +1 -1
  1288. package/dist/tools/builtin/ellipse/useEllipseTool.js +22 -17
  1289. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
  1290. package/dist/tools/builtin/eyedropper/useEyedropperTool.js +44 -28
  1291. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
  1292. package/dist/tools/builtin/hand/dragPanContribution.js +12 -7
  1293. package/dist/tools/builtin/hand/dragPanContribution.js.map +1 -1
  1294. package/dist/tools/builtin/hand/useHandTool.js +21 -13
  1295. package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
  1296. package/dist/tools/builtin/image/useImageTool.js +28 -19
  1297. package/dist/tools/builtin/image/useImageTool.js.map +1 -1
  1298. package/dist/tools/builtin/lasso/useLassoTool.js +48 -36
  1299. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
  1300. package/dist/tools/builtin/line/useLineTool.js +24 -17
  1301. package/dist/tools/builtin/line/useLineTool.js.map +1 -1
  1302. package/dist/tools/builtin/measure/useMeasureTool.js +84 -0
  1303. package/dist/tools/builtin/measure/useMeasureTool.js.map +1 -0
  1304. package/dist/tools/builtin/pen/penHandle.js +60 -0
  1305. package/dist/tools/builtin/pen/penHandle.js.map +1 -0
  1306. package/dist/tools/builtin/pen/usePenTool.js +461 -303
  1307. package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
  1308. package/dist/tools/builtin/pencil/usePencilTool.js +20 -15
  1309. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
  1310. package/dist/tools/builtin/pickTopMostHit.js +51 -31
  1311. package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
  1312. package/dist/tools/builtin/polygon/usePolygonTool.js +45 -28
  1313. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
  1314. package/dist/tools/builtin/rect/useRectTool.js +24 -16
  1315. package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
  1316. package/dist/tools/builtin/select/adapterPointQuery.js +47 -30
  1317. package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -1
  1318. package/dist/tools/builtin/select/selectionContributions.js +94 -56
  1319. package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
  1320. package/dist/tools/builtin/select/useSelectTool.js +155 -108
  1321. package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
  1322. package/dist/tools/builtin/shared/insertToolOptions.js +5 -4
  1323. package/dist/tools/builtin/shared/insertToolOptions.js.map +1 -1
  1324. package/dist/tools/builtin/shared/pointerFollower.js +15 -8
  1325. package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
  1326. package/dist/tools/builtin/slice/useSliceTool.js +148 -101
  1327. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
  1328. package/dist/tools/builtin/star/useStarTool.js +48 -31
  1329. package/dist/tools/builtin/star/useStarTool.js.map +1 -1
  1330. package/dist/tools/builtin/sticky/stickyNode.js +49 -0
  1331. package/dist/tools/builtin/sticky/stickyNode.js.map +1 -0
  1332. package/dist/tools/builtin/sticky/useStickyTool.js +86 -0
  1333. package/dist/tools/builtin/sticky/useStickyTool.js.map +1 -0
  1334. package/dist/tools/builtin/text/useTextTool.js +59 -34
  1335. package/dist/tools/builtin/text/useTextTool.js.map +1 -1
  1336. package/dist/tools/builtin/weight/useWeightTool.js +66 -42
  1337. package/dist/tools/builtin/weight/useWeightTool.js.map +1 -1
  1338. package/dist/tools/builtin/weight/weightActions.js +93 -65
  1339. package/dist/tools/builtin/weight/weightActions.js.map +1 -1
  1340. package/dist/tools/builtin/weight/weightOverlay.js +47 -30
  1341. package/dist/tools/builtin/weight/weightOverlay.js.map +1 -1
  1342. package/dist/tools/overlayBinding.js +7 -5
  1343. package/dist/tools/overlayBinding.js.map +1 -1
  1344. package/dist/tools/useKeybindings.js +62 -46
  1345. package/dist/tools/useKeybindings.js.map +1 -1
  1346. package/dist/{types-DBbbCy0i.d.ts → types-CHVXGfYm.d.ts} +5 -5
  1347. package/dist/util/color.js +39 -18
  1348. package/dist/util/color.js.map +1 -1
  1349. package/dist/util/paint.js +93 -38
  1350. package/dist/util/paint.js.map +1 -1
  1351. package/dist/version.js +11 -3
  1352. package/dist/version.js.map +1 -1
  1353. package/package.json +35 -23
  1354. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +0 -126
  1355. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +0 -1
  1356. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +0 -55
  1357. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +0 -1
  1358. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +0 -16
  1359. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +0 -1
  1360. package/dist/canvas/SceneCanvas/isDev.js +0 -12
  1361. package/dist/canvas/SceneCanvas/isDev.js.map +0 -1
  1362. package/dist/canvas/SceneCanvas/useViewLayerGate.js +0 -20
  1363. package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +0 -1
  1364. package/dist/cornerHandles-BSKbyuvQ.d.ts +0 -104
  1365. package/dist/icons/ArrowIcon.js +0 -23
  1366. package/dist/icons/ArrowIcon.js.map +0 -1
  1367. package/dist/icons/EllipseIcon.js +0 -21
  1368. package/dist/icons/EllipseIcon.js.map +0 -1
  1369. package/dist/icons/EyedropperIcon.js +0 -49
  1370. package/dist/icons/EyedropperIcon.js.map +0 -1
  1371. package/dist/icons/HandIcon.js +0 -59
  1372. package/dist/icons/HandIcon.js.map +0 -1
  1373. package/dist/icons/ImageIcon.js +0 -34
  1374. package/dist/icons/ImageIcon.js.map +0 -1
  1375. package/dist/icons/LassoIcon.js +0 -22
  1376. package/dist/icons/LassoIcon.js.map +0 -1
  1377. package/dist/icons/LineIcon.js +0 -22
  1378. package/dist/icons/LineIcon.js.map +0 -1
  1379. package/dist/icons/PenIcon.js +0 -36
  1380. package/dist/icons/PenIcon.js.map +0 -1
  1381. package/dist/icons/PencilIcon.js +0 -25
  1382. package/dist/icons/PencilIcon.js.map +0 -1
  1383. package/dist/icons/PolygonIcon.js +0 -19
  1384. package/dist/icons/PolygonIcon.js.map +0 -1
  1385. package/dist/icons/RectIcon.js +0 -37
  1386. package/dist/icons/RectIcon.js.map +0 -1
  1387. package/dist/icons/SelectIcon.js +0 -20
  1388. package/dist/icons/SelectIcon.js.map +0 -1
  1389. package/dist/icons/SliceIcon.js +0 -24
  1390. package/dist/icons/SliceIcon.js.map +0 -1
  1391. package/dist/icons/StarIcon.js +0 -19
  1392. package/dist/icons/StarIcon.js.map +0 -1
  1393. package/dist/icons/TextIcon.js +0 -19
  1394. package/dist/icons/TextIcon.js.map +0 -1
  1395. package/dist/icons/UnknownIcon.js +0 -33
  1396. package/dist/icons/UnknownIcon.js.map +0 -1
  1397. package/dist/icons/_base.js +0 -12
  1398. package/dist/icons/_base.js.map +0 -1
  1399. package/dist/interactions/actions/actionShortcuts.js +0 -32
  1400. package/dist/interactions/actions/actionShortcuts.js.map +0 -1
  1401. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js +0 -40
  1402. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js.map +0 -1
  1403. package/dist/interactions/actions/defaults/icons/actionGlyphs.js +0 -10
  1404. package/dist/interactions/actions/defaults/icons/actionGlyphs.js.map +0 -1
  1405. package/dist/interactions/actions/defaults/icons/alignIcons.js +0 -173
  1406. package/dist/interactions/actions/defaults/icons/alignIcons.js.map +0 -1
  1407. package/dist/interactions/actions/defaults/icons/anchorIcons.js +0 -75
  1408. package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +0 -1
  1409. package/dist/interactions/actions/defaults/icons/booleanIcons.js +0 -194
  1410. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +0 -1
  1411. package/dist/interactions/actions/defaults/icons/distributeIcons.js +0 -63
  1412. package/dist/interactions/actions/defaults/icons/distributeIcons.js.map +0 -1
  1413. package/dist/interactions/actions/defaults/icons/editIcons.js +0 -307
  1414. package/dist/interactions/actions/defaults/icons/editIcons.js.map +0 -1
  1415. package/dist/interactions/actions/defaults/icons/outlineIcons.js +0 -91
  1416. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +0 -1
  1417. package/dist/interactions/actions/resize/behaviors/index.js +0 -8
  1418. package/dist/interactions/actions/resize/behaviors/index.js.map +0 -1
  1419. package/dist/interactions/actions/resize/behaviors/lockAspect.js +0 -24
  1420. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +0 -1
  1421. package/dist/interactions/actions/resize/pointSnap.js +0 -111
  1422. package/dist/interactions/actions/resize/pointSnap.js.map +0 -1
  1423. package/dist/interactions/actions/rotate/behaviors/index.js +0 -7
  1424. package/dist/interactions/actions/rotate/behaviors/index.js.map +0 -1
  1425. package/dist/interactions/actions/rotate/behaviors/snapRotation.js +0 -12
  1426. package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +0 -1
  1427. package/dist/interactions/gestures/shared/snap.js +0 -24
  1428. package/dist/interactions/gestures/shared/snap.js.map +0 -1
  1429. package/dist/test-seams-D0pyV3pR.d.ts +0 -149
  1430. package/dist/util/constrainTo45.js +0 -17
  1431. package/dist/util/constrainTo45.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"booleans.js","names":["LABEL","planBooleanOp","resolved","sel","resolveOperand","adapter","id","opts","err","TextOutlinesError","entries","a","b","op","pieces","booleanPieces","i","paint","operand","previewBooleanOp","plan","piece","applyBooleanOp","slots","locateChild","made","newNodes","m","ops","captured","createDeleteOp","n","createInsertOp","placementOps","createSetSelectionOp","dispatchApplyBatch"],"sources":["../../../../src/interactions/actions/booleans/booleans.ts"],"sourcesContent":["/**\n * Pure action core for path boolean operations. Resolves the current\n * selection into z-ordered paths, runs the chosen op, and dispatches a\n * single batch of `Op`s (delete sources + insert results + set selection).\n */\nimport type { Affine, Path } from '@weasel-js/geom';\nimport { createInsertOp } from 'core/ops/create';\nimport { createDeleteOp } from 'core/ops/delete';\nimport { createSetSelectionOp } from 'core/ops/select';\nimport { locateChild } from 'core/ops/slot';\nimport type { Op } from 'core/ops/types';\nimport type { NodeId } from 'core/scene/types';\nimport { dispatchApplyBatch } from 'core/applyOps';\nimport { TextOutlinesError, type TextNodeSource } from '@weasel-js/text';\nimport type { PathPaint } from 'canvas/nodeShapes/nodePaint';\nimport { resolveOperand, type BooleanOpOptions, type BooleanOperand } from './operands';\nimport { booleanPieces, type ResultPiece } from './pieces';\nimport { placementOps } from './placement';\n\n/** Boolean op identifiers: the five Pathfinder primaries, and Crop, Trim, and Merge. */\nexport type BooleanOp = 'union' | 'intersect' | 'subtract' | 'exclude' | 'divide' | 'crop' | 'trim' | 'merge';\n\n/**\n * z-position descriptor for a path node. `parentId` is the direct parent\n * (or `null` for a top-level node); `index` is the position within that\n * parent's child order — never a global render index.\n */\n/** @internal */\nexport interface BooleanZOrder {\n parentId: string | null;\n index: number;\n}\n\n/** Adapter the hook and the pure core both consume. */\nexport interface BooleansAdapter {\n getSelection(): readonly NodeId[] | readonly string[];\n getWorldPath(id: NodeId): Path | undefined;\n /**\n * Optional: the text node behind `id`, for an id `getWorldPath` has no path\n * for. Its glyph outlines (`textToPath`) become the operand, so text can be\n * cut, united or intersected like any shape.\n */\n getTextSource?(id: NodeId): TextNodeSource | undefined;\n /**\n * Optional: the paint the path node behind `id` wears. An operation told to\n * count strokes (`BooleanOpOptions.strokes`) reads it to learn whether the\n * node is stroked and whether it is filled; without it every operand is its\n * path alone.\n */\n getPaint?(id: NodeId): PathPaint | undefined;\n /**\n * Optional: the frame the node behind `id` draws its stroke in, as the\n * matrix taking that frame to world (`poseFrameOf`); null or absent for a\n * node drawn straight. A counted world-width stroke is skewed and stretched\n * with it. Without it every stroke is outlined in world.\n */\n getStrokeFrame?(id: NodeId): Affine | null | undefined;\n compareZ(a: NodeId, b: NodeId): number;\n /**\n * Mint a new node from a boolean-op result `Path`. `producedBy` names the\n * op that synthesized it — adapters that store provenance (e.g. for a\n * layer-panel icon) record it; others ignore the arg. `sourceId` is the\n * source the result stands in for: the topmost, except that each piece of\n * a Divide, Crop, Trim, or Merge names the topmost source it was cut from. Give the\n * node that source's parent, or the kit's reorder cannot find it there.\n * `paint` is passed when that source's stroke went into the geometry, and\n * the node must wear it as given: wearing the source's stroke again would\n * draw it twice. Without `paint`, give it that source's paint. The kit never\n * reads a node's `data`: anything else the result should keep of its source,\n * a name say, is the adapter's to copy from `sourceId`.\n */\n createPathNode(path: Path, producedBy: BooleanOp, sourceId: NodeId, paint?: PathPaint): { id: string };\n /**\n * The full object for an id. The delete ops capture it, so their `invert`\n * (an insert) restores the complete object on undo.\n */\n getNode(id: NodeId): { id: string } | undefined | null;\n /**\n * The tree. The kit reads each source's slot among its siblings through\n * `getParent` and `getChildren`, and moves each result into the slot of\n * the topmost source in its own source's parent through `setChildOrder`.\n * `defaultCommitAdapter` supplies all three, and `getNode`.\n */\n getParent(id: string): string | null;\n getChildren(parentId: string | null): string[];\n setChildOrder(parentId: string | null, ids: string[]): void;\n applyOps?(ops: Op[], label?: string): void;\n setSelection?(ids: NodeId[]): void;\n insertNode?(node: { id: string }): void;\n removeNode?(id: string): void;\n}\n\n/** Outcome reported back to callers (lets the hook surface no-op signals). */\nexport type BooleanOpResult =\n | { kind: 'applied'; resultIds: string[] }\n | { kind: 'noop'; reason: 'no-paths' | 'too-few-for-subtract' | 'empty-result' }\n /** A text operand had no outline geometry. Nothing was changed: an op that\n * quietly dropped the operand would commit a different shape than asked. */\n | { kind: 'failed'; reason: 'text-outlines'; error: TextOutlinesError };\n\nconst LABEL: Record<BooleanOp, string> = {\n union: 'Union',\n intersect: 'Intersect',\n subtract: 'Subtract',\n exclude: 'Exclude',\n divide: 'Divide',\n crop: 'Crop',\n trim: 'Trim',\n merge: 'Merge',\n};\n\n/** One path a Boolean operation would make. */\nexport interface BooleanPreviewPiece {\n path: Path;\n /** The source the piece stands in for; see `BooleansAdapter.createPathNode`. */\n sourceId: NodeId;\n /** Set when that source's stroke went into `path`: the paint the piece wears. */\n paint?: PathPaint;\n}\n\n/** What {@link previewBooleanOp} answers: the pieces, or why there are none. */\nexport type BooleanOpPreview =\n | { kind: 'pieces'; pieces: BooleanPreviewPiece[] }\n | Exclude<BooleanOpResult, { kind: 'applied' }>;\n\ntype Entry = { id: NodeId; operand: BooleanOperand };\n\n/** The operands back to front and the pieces `op` makes of them, or the\n * result that says why it makes none. Reads the adapter and changes nothing. */\nfunction planBooleanOp(\n adapter: BooleansAdapter,\n sel: readonly NodeId[],\n op: BooleanOp,\n opts: BooleanOpOptions,\n): { entries: Entry[]; pieces: ResultPiece[] } | Exclude<BooleanOpResult, { kind: 'applied' }> {\n // Sorted ascending by `compareZ` so the first entry is the bottommost\n // (back) member. `subtract` relies on this: it computes `back − union(rest)`.\n let resolved: { id: NodeId; operand: BooleanOperand | undefined }[];\n try {\n resolved = sel.map((id) => ({ id, operand: resolveOperand(adapter, id, opts) }));\n } catch (err) {\n if (err instanceof TextOutlinesError) return { kind: 'failed', reason: 'text-outlines', error: err };\n throw err;\n }\n const entries = resolved\n .filter((e): e is Entry => e.operand != null)\n .sort((a, b) => adapter.compareZ(a.id, b.id));\n\n if (entries.length === 0) return { kind: 'noop', reason: 'no-paths' };\n if (op === 'subtract' && entries.length < 2) {\n return { kind: 'noop', reason: 'too-few-for-subtract' };\n }\n if (entries.length < 2) return { kind: 'noop', reason: 'no-paths' };\n\n // Merge unites the operands that wear one fill; one whose paint is unknown is united with nothing.\n const fillKey = (i: number): unknown => {\n const { id, operand } = entries[i]!;\n const paint = operand.paint ?? adapter.getPaint?.(id);\n return paint ? JSON.stringify(paint.fill ?? null) : i;\n };\n const pieces = booleanPieces(op, entries.map((e) => e.operand.path), fillKey);\n if (pieces.length === 0) return { kind: 'noop', reason: 'empty-result' };\n return { entries, pieces };\n}\n\n/**\n * What {@link applyBooleanOp} would make of the selection, without minting a\n * node or committing anything: for drawing an operation before it is applied.\n */\nexport function previewBooleanOp(\n adapter: BooleansAdapter,\n op: BooleanOp,\n opts: BooleanOpOptions = {},\n): BooleanOpPreview {\n const plan = planBooleanOp(adapter, [...adapter.getSelection()] as NodeId[], op, opts);\n if ('kind' in plan) return plan;\n return {\n kind: 'pieces',\n pieces: plan.pieces.map((piece) => {\n const { id, operand } = plan.entries[piece.source]!;\n return operand.paint ? { path: piece.path, sourceId: id, paint: operand.paint } : { path: piece.path, sourceId: id };\n }),\n };\n}\n\n/**\n * Run one Boolean operation over the selected paths and commit the result as a\n * single undoable batch.\n *\n * Operands are ordered back-to-front, which is what makes `subtract` mean\n * \"everything in front removed from the backmost shape\". Returns without\n * mutating anything when the selection holds no paths, or too few for the\n * requested operation. `opts.strokes` says what a stroked operand gives.\n */\nexport function applyBooleanOp(\n adapter: BooleansAdapter,\n op: BooleanOp,\n opts: BooleanOpOptions = {},\n): BooleanOpResult {\n const sel = [...adapter.getSelection()] as NodeId[];\n const plan = planBooleanOp(adapter, sel, op, opts);\n if ('kind' in plan) return plan;\n const { entries, pieces } = plan;\n // Every source's slot, read before the scene is mutated.\n const slots: (BooleanZOrder | undefined)[] =\n entries.map((e) => locateChild(adapter, e.id) ?? undefined);\n // A piece stands in for its own source: it is minted from that source, wears\n // the paint a stroke folded into that source left it, and takes its slot.\n const made = pieces.map((piece) => {\n const { id, operand } = entries[piece.source]!;\n return { node: adapter.createPathNode(piece.path, op, id, operand.paint), slot: slots[piece.source] };\n });\n const newNodes = made.map((m) => m.node);\n const ops: Op[] = [];\n // Capture the full node so the delete's `invert()` (an insert) restores\n // every field on undo. The index is -1 for a source its parent does not list.\n const captured = entries.map((e, i) => ({\n node: adapter.getNode(e.id) ?? { id: e.id },\n index: slots[i]?.index ?? -1,\n }));\n // Order by index DESC so reverse-then-invert (history's undo path)\n // re-inserts ASC — each splice lands on a correctly-sized array\n // instead of clamping high indices to a still-growing length.\n captured.sort((a, b) => b.index - a.index);\n for (const { node, index } of captured) ops.push(createDeleteOp({ node, index }));\n for (const n of newNodes) ops.push(createInsertOp({ node: n }));\n ops.push(...placementOps(made.map((m) => ({ id: m.node.id, slot: m.slot })), slots));\n ops.push(createSetSelectionOp({\n from: sel,\n to: newNodes.map((n) => n.id as NodeId),\n }));\n dispatchApplyBatch(adapter, ops, LABEL[op]);\n\n return { kind: 'applied', resultIds: newNodes.map((n) => n.id) };\n}\n"],"mappings":";;;;;;;;;;AAoGA,IAAMA,IAAmC;CACvC,OAAO;CACP,WAAW;CACX,UAAU;CACV,SAAS;CACT,QAAQ;CACR,MAAM;CACN,MAAM;CACN,OAAO;AACT;AAoBA,SAASC,EACP,GACA,GACA,GACA,GAC6F;CAG7F,IAAIC;CACJ,IAAI;EACF,IAAWC,EAAI,KAAK,OAAQ;GAAE;GAAI,SAASC,EAAeC,GAASC,GAAIC,CAAI;EAAE,EAAE;CACjF,SAASC,GAAK;EACZ,IAAIA,aAAeC,GAAmB,OAAO;GAAE,MAAM;GAAU,QAAQ;GAAiB,OAAOD;EAAI;EACnG,MAAMA;CACR;CACA,IAAME,IAAUR,EACb,QAAQ,MAAkB,EAAE,WAAW,IAAI,CAAC,CAC5C,MAAM,GAAG,MAAMG,EAAQ,SAASM,EAAE,IAAIC,EAAE,EAAE,CAAC;CAE9C,IAAIF,EAAQ,WAAW,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAW;CACpE,IAAIG,MAAO,cAAcH,EAAQ,SAAS,GACxC,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAuB;CAExD,IAAIA,EAAQ,SAAS,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAW;CAQlE,IAAMI,IAASC,EAAcF,GAAIH,EAAQ,KAAK,MAAM,EAAE,QAAQ,IAAI,IALjD,MAAuB;EACtC,IAAM,EAAE,OAAI,eAAYA,EAAQM,IAC1BC,IAAQC,EAAQ,SAASb,EAAQ,WAAWC,CAAE;EACpD,OAAOW,IAAQ,KAAK,UAAUA,EAAM,QAAQ,IAAI,IAAID;CACtD,CAC4E;CAE5E,OADIF,EAAO,WAAW,IAAU;EAAE,MAAM;EAAQ,QAAQ;CAAe,IAChE;EAAE;EAAS;CAAO;AAC3B;AAMA,SAAgBK,EACd,GACA,GACA,IAAyB,CAAC,GACR;CAClB,IAAMC,IAAOnB,EAAcI,GAAS,CAAC,GAAGA,EAAQ,aAAa,CAAC,GAAeQ,GAAIN,CAAI;CAErF,OADI,UAAUa,IAAaA,IACpB;EACL,MAAM;EACN,QAAQA,EAAK,OAAO,KAAK,MAAU;GACjC,IAAM,EAAE,OAAI,eAAYA,EAAK,QAAQC,EAAM;GAC3C,OAAOH,EAAQ,QAAQ;IAAE,MAAMG,EAAM;IAAM,UAAUf;IAAI,OAAOY,EAAQ;GAAM,IAAI;IAAE,MAAMG,EAAM;IAAM,UAAUf;GAAG;EACrH,CAAC;CACH;AACF;AAWA,SAAgBgB,EACd,GACA,GACA,IAAyB,CAAC,GACT;CACjB,IAAMnB,IAAM,CAAC,GAAGE,EAAQ,aAAa,CAAC,GAChCe,IAAOnB,EAAcI,GAASF,GAAKU,GAAIN,CAAI;CACjD,IAAI,UAAUa,GAAM,OAAOA;CAC3B,IAAM,EAAE,YAAS,cAAWA,GAEtBG,IACJb,EAAQ,KAAK,MAAMc,EAAYnB,GAAS,EAAE,EAAE,KAAK,KAAA,CAAS,GAGtDoB,IAAOX,EAAO,KAAK,MAAU;EACjC,IAAM,EAAE,OAAI,eAAYJ,EAAQW,EAAM;EACtC,OAAO;GAAE,MAAMhB,EAAQ,eAAegB,EAAM,MAAMR,GAAIP,GAAIY,EAAQ,KAAK;GAAG,MAAMK,EAAMF,EAAM;EAAQ;CACtG,CAAC,GACKK,IAAWD,EAAK,KAAK,MAAME,EAAE,IAAI,GACjCC,IAAY,CAAC,GAGbC,IAAWnB,EAAQ,KAAK,GAAG,OAAO;EACtC,MAAML,EAAQ,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG;EAC1C,OAAOkB,EAAMP,EAAE,EAAE,SAAS;CAC5B,EAAE;CAIF,EAAS,MAAM,GAAG,MAAMJ,EAAE,QAAQD,EAAE,KAAK;CACzC,KAAK,IAAM,EAAE,SAAM,cAAWkB,GAAU,EAAI,KAAKC,EAAe;EAAE;EAAM;CAAM,CAAC,CAAC;CAChF,KAAK,IAAMC,KAAKL,GAAU,EAAI,KAAKM,EAAe,EAAE,MAAMD,EAAE,CAAC,CAAC;CAQ9D,OAPAH,EAAI,KAAK,GAAGK,EAAaR,EAAK,KAAK,OAAO;EAAE,IAAIE,EAAE,KAAK;EAAI,MAAMA,EAAE;CAAK,EAAE,GAAGJ,CAAK,CAAC,GACnFK,EAAI,KAAKM,EAAqB;EAC5B,MAAM/B;EACN,IAAIuB,EAAS,KAAK,MAAMK,EAAE,EAAY;CACxC,CAAC,CAAC,GACFI,EAAmB9B,GAASuB,GAAK5B,EAAMa,EAAG,GAEnC;EAAE,MAAM;EAAW,WAAWa,EAAS,KAAK,MAAMK,EAAE,EAAE;CAAE;AACjE"}
1
+ {"version":3,"file":"booleans.js","names":[],"sources":["../../../../src/interactions/actions/booleans/booleans.ts"],"sourcesContent":["/**\n * Pure action core for path boolean operations. Resolves the current\n * selection into z-ordered paths, runs the chosen op, and dispatches a\n * single batch of `Op`s (delete sources + insert results + set selection).\n */\nimport type { Affine, Path } from '@weasel-js/geom';\nimport type { Op } from 'core/ops/types';\nimport type { NodeId } from 'core/scene/types';\nimport { TextOutlinesError, type TextNodeSource } from '@weasel-js/text';\nimport type { PathPaint } from 'canvas/nodeShapes/nodePaint';\nimport { resolveOperand, type BooleanOpOptions, type BooleanOperand } from './operands';\nimport { booleanPieces, type ResultPiece } from './pieces';\nimport { commitPieces } from './commit';\n\n/** Boolean op identifiers: the five Pathfinder primaries, and Crop, Trim, and Merge. */\nexport type BooleanOp = 'union' | 'intersect' | 'subtract' | 'exclude' | 'divide' | 'crop' | 'trim' | 'merge';\n\n/**\n * z-position descriptor for a path node. `parentId` is the direct parent\n * (or `null` for a top-level node); `index` is the position within that\n * parent's child order — never a global render index.\n */\n/** @internal */\nexport interface BooleanZOrder {\n parentId: string | null;\n index: number;\n}\n\n/** Adapter the hook and the pure core both consume. */\nexport interface BooleansAdapter {\n getSelection(): readonly NodeId[] | readonly string[];\n getWorldPath(id: NodeId): Path | undefined;\n /**\n * Optional: the text node behind `id`, for an id `getWorldPath` has no path\n * for. Its glyph outlines (`textToPath`) become the operand, so text can be\n * cut, united or intersected like any shape.\n */\n getTextSource?(id: NodeId): TextNodeSource | undefined;\n /**\n * Optional: the paint the path node behind `id` wears. An operation told to\n * count strokes (`BooleanOpOptions.strokes`) reads it to learn whether the\n * node is stroked and whether it is filled; without it every operand is its\n * path alone.\n */\n getPaint?(id: NodeId): PathPaint | undefined;\n /**\n * Optional: the frame the node behind `id` draws its stroke in, as the\n * matrix taking that frame to world (`poseFrameOf`); null or absent for a\n * node drawn straight. A counted world-width stroke is skewed and stretched\n * with it. Without it every stroke is outlined in world.\n */\n getStrokeFrame?(id: NodeId): Affine | null | undefined;\n compareZ(a: NodeId, b: NodeId): number;\n /**\n * Mint a new node from a boolean-op result `Path`. `producedBy` names the\n * op that synthesized it — adapters that store provenance (e.g. for a\n * layer-panel icon) record it; others ignore the arg. `sourceId` is the\n * source the result stands in for: the topmost, except that each piece of\n * a Divide, Crop, Trim, or Merge names the topmost source it was cut from. Give the\n * node that source's parent, or the kit's reorder cannot find it there.\n * `paint` is passed when that source's stroke went into the geometry, and\n * the node must wear it as given: wearing the source's stroke again would\n * draw it twice. Without `paint`, give it that source's paint. The kit never\n * reads a node's `data`: anything else the result should keep of its source,\n * a name say, is the adapter's to copy from `sourceId`.\n */\n createPathNode(path: Path, producedBy: BooleanOp, sourceId: NodeId, paint?: PathPaint): { id: string };\n /**\n * The full object for an id. The delete ops capture it, so their `invert`\n * (an insert) restores the complete object on undo.\n */\n getNode(id: NodeId): { id: string } | undefined | null;\n /**\n * The tree. The kit reads each source's slot among its siblings through\n * `getParent` and `getChildren`, and moves each result into the slot of\n * the topmost source in its own source's parent through `setChildOrder`.\n * `defaultCommitAdapter` supplies all three, and `getNode`.\n */\n getParent(id: string): string | null;\n getChildren(parentId: string | null): string[];\n setChildOrder(parentId: string | null, ids: string[]): void;\n applyOps?(ops: Op[], label?: string): void;\n setSelection?(ids: NodeId[]): void;\n insertNode?(node: { id: string }): void;\n removeNode?(id: string): void;\n}\n\n/** Outcome reported back to callers (lets the hook surface no-op signals). */\nexport type BooleanOpResult =\n | { kind: 'applied'; resultIds: string[] }\n | { kind: 'noop'; reason: 'no-paths' | 'too-few-for-subtract' | 'empty-result' }\n /** A text operand had no outline geometry. Nothing was changed: an op that\n * quietly dropped the operand would commit a different shape than asked. */\n | { kind: 'failed'; reason: 'text-outlines'; error: TextOutlinesError };\n\nconst LABEL: Record<BooleanOp, string> = {\n union: 'Union',\n intersect: 'Intersect',\n subtract: 'Subtract',\n exclude: 'Exclude',\n divide: 'Divide',\n crop: 'Crop',\n trim: 'Trim',\n merge: 'Merge',\n};\n\n/** One path a Boolean operation would make. */\nexport interface BooleanPreviewPiece {\n path: Path;\n /** The source the piece stands in for; see `BooleansAdapter.createPathNode`. */\n sourceId: NodeId;\n /** Set when that source's stroke went into `path`: the paint the piece wears. */\n paint?: PathPaint;\n}\n\n/** What {@link previewBooleanOp} answers: the pieces, or why there are none. */\nexport type BooleanOpPreview =\n | { kind: 'pieces'; pieces: BooleanPreviewPiece[] }\n | Exclude<BooleanOpResult, { kind: 'applied' }>;\n\n/** @internal A selected node and the operand it gives. */\nexport type BooleanEntry = { id: NodeId; operand: BooleanOperand };\ntype Entry = BooleanEntry;\n\n/** @internal The operands behind `sel`, back to front, or the result that\n * says why there are too few. Reads the adapter and changes nothing. */\nexport function resolveEntries(\n adapter: BooleansAdapter,\n sel: readonly NodeId[],\n op: BooleanOp,\n opts: BooleanOpOptions,\n): Entry[] | Exclude<BooleanOpResult, { kind: 'applied' }> {\n // Sorted ascending by `compareZ` so the first entry is the bottommost\n // (back) member. `subtract` relies on this: it computes `back − union(rest)`.\n let resolved: { id: NodeId; operand: BooleanOperand | undefined }[];\n try {\n resolved = sel.map((id) => ({ id, operand: resolveOperand(adapter, id, opts) }));\n } catch (err) {\n if (err instanceof TextOutlinesError) return { kind: 'failed', reason: 'text-outlines', error: err };\n throw err;\n }\n const entries = resolved\n .filter((e): e is Entry => e.operand != null)\n .sort((a, b) => adapter.compareZ(a.id, b.id));\n\n if (entries.length === 0) return { kind: 'noop', reason: 'no-paths' };\n if (op === 'subtract' && entries.length < 2) {\n return { kind: 'noop', reason: 'too-few-for-subtract' };\n }\n if (entries.length < 2) return { kind: 'noop', reason: 'no-paths' };\n return entries;\n}\n\n/** The operands back to front and the pieces `op` makes of them, or the\n * result that says why it makes none. Reads the adapter and changes nothing. */\nfunction planBooleanOp(\n adapter: BooleansAdapter,\n sel: readonly NodeId[],\n op: BooleanOp,\n opts: BooleanOpOptions,\n): { entries: Entry[]; pieces: ResultPiece[] } | Exclude<BooleanOpResult, { kind: 'applied' }> {\n const entries = resolveEntries(adapter, sel, op, opts);\n if ('kind' in entries) return entries;\n // Merge unites the operands that wear one fill; one whose paint is unknown is united with nothing.\n const fillKey = (i: number): unknown => {\n const { id, operand } = entries[i]!;\n const paint = operand.paint ?? adapter.getPaint?.(id);\n return paint ? JSON.stringify(paint.fill ?? null) : i;\n };\n const pieces = booleanPieces(op, entries.map((e) => e.operand.path), fillKey);\n if (pieces.length === 0) return { kind: 'noop', reason: 'empty-result' };\n return { entries, pieces };\n}\n\n/**\n * What {@link applyBooleanOp} would make of the selection, without minting a\n * node or committing anything: for drawing an operation before it is applied.\n */\nexport function previewBooleanOp(\n adapter: BooleansAdapter,\n op: BooleanOp,\n opts: BooleanOpOptions = {},\n): BooleanOpPreview {\n const plan = planBooleanOp(adapter, [...adapter.getSelection()] as NodeId[], op, opts);\n if ('kind' in plan) return plan;\n return {\n kind: 'pieces',\n pieces: plan.pieces.map((piece) => {\n const { id, operand } = plan.entries[piece.source]!;\n return operand.paint ? { path: piece.path, sourceId: id, paint: operand.paint } : { path: piece.path, sourceId: id };\n }),\n };\n}\n\n/**\n * Run one Boolean operation over the selected paths and commit the result as a\n * single undoable batch.\n *\n * Operands are ordered back-to-front, which is what makes `subtract` mean\n * \"everything in front removed from the backmost shape\". Returns without\n * mutating anything when the selection holds no paths, or too few for the\n * requested operation. `opts.strokes` says what a stroked operand gives.\n */\nexport function applyBooleanOp(\n adapter: BooleansAdapter,\n op: BooleanOp,\n opts: BooleanOpOptions = {},\n): BooleanOpResult {\n const sel = [...adapter.getSelection()] as NodeId[];\n const plan = planBooleanOp(adapter, sel, op, opts);\n if ('kind' in plan) return plan;\n const { entries, pieces } = plan;\n const made = pieces.map((piece) => ({ path: piece.path, source: piece.source, producedBy: op }));\n return { kind: 'applied', resultIds: commitPieces(adapter, sel, entries, made, LABEL[op]) };\n}\n"],"mappings":";;;;;;AA+FA,IAAM,QAAmC;CACvC,OAAO;CACP,WAAW;CACX,UAAU;CACV,SAAS;CACT,QAAQ;CACR,MAAM;CACN,MAAM;CACN,OAAO;AACT;;;AAsBA,SAAgB,eACd,SACA,KACA,IACA,MACyD;CAGzD,IAAI;CACJ,IAAI;EACF,WAAW,IAAI,KAAK,QAAQ;GAAE;GAAI,SAAS,eAAe,SAAS,IAAI,IAAI;EAAE,EAAE;CACjF,SAAS,KAAK;EACZ,IAAI,eAAe,mBAAmB,OAAO;GAAE,MAAM;GAAU,QAAQ;GAAiB,OAAO;EAAI;EACnG,MAAM;CACR;CACA,MAAM,UAAU,SACb,QAAQ,MAAkB,EAAE,WAAW,IAAI,CAAC,CAC5C,MAAM,GAAG,MAAM,QAAQ,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;CAE9C,IAAI,QAAQ,WAAW,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAW;CACpE,IAAI,OAAO,cAAc,QAAQ,SAAS,GACxC,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAuB;CAExD,IAAI,QAAQ,SAAS,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAW;CAClE,OAAO;AACT;;;AAIA,SAAS,cACP,SACA,KACA,IACA,MAC6F;CAC7F,MAAM,UAAU,eAAe,SAAS,KAAK,IAAI,IAAI;CACrD,IAAI,UAAU,SAAS,OAAO;CAE9B,MAAM,WAAW,MAAuB;EACtC,MAAM,EAAE,IAAI,YAAY,QAAQ;EAChC,MAAM,QAAQ,QAAQ,SAAS,QAAQ,WAAW,EAAE;EACpD,OAAO,QAAQ,KAAK,UAAU,MAAM,QAAQ,IAAI,IAAI;CACtD;CACA,MAAM,SAAS,cAAc,IAAI,QAAQ,KAAK,MAAM,EAAE,QAAQ,IAAI,GAAG,OAAO;CAC5E,IAAI,OAAO,WAAW,GAAG,OAAO;EAAE,MAAM;EAAQ,QAAQ;CAAe;CACvE,OAAO;EAAE;EAAS;CAAO;AAC3B;;;;;AAMA,SAAgB,iBACd,SACA,IACA,OAAyB,CAAC,GACR;CAClB,MAAM,OAAO,cAAc,SAAS,CAAC,GAAG,QAAQ,aAAa,CAAC,GAAe,IAAI,IAAI;CACrF,IAAI,UAAU,MAAM,OAAO;CAC3B,OAAO;EACL,MAAM;EACN,QAAQ,KAAK,OAAO,KAAK,UAAU;GACjC,MAAM,EAAE,IAAI,YAAY,KAAK,QAAQ,MAAM;GAC3C,OAAO,QAAQ,QAAQ;IAAE,MAAM,MAAM;IAAM,UAAU;IAAI,OAAO,QAAQ;GAAM,IAAI;IAAE,MAAM,MAAM;IAAM,UAAU;GAAG;EACrH,CAAC;CACH;AACF;;;;;;;;;;AAWA,SAAgB,eACd,SACA,IACA,OAAyB,CAAC,GACT;CACjB,MAAM,MAAM,CAAC,GAAG,QAAQ,aAAa,CAAC;CACtC,MAAM,OAAO,cAAc,SAAS,KAAK,IAAI,IAAI;CACjD,IAAI,UAAU,MAAM,OAAO;CAC3B,MAAM,EAAE,SAAS,WAAW;CAC5B,MAAM,OAAO,OAAO,KAAK,WAAW;EAAE,MAAM,MAAM;EAAM,QAAQ,MAAM;EAAQ,YAAY;CAAG,EAAE;CAC/F,OAAO;EAAE,MAAM;EAAW,WAAW,aAAa,SAAS,KAAK,SAAS,MAAM,MAAM,GAAG;CAAE;AAC5F"}
@@ -0,0 +1,49 @@
1
+ import { dispatchApplyBatch } from "../../../core/applyOps.js";
2
+ import { locateChild } from "../../../core/ops/slot.js";
3
+ import { createDeleteOp } from "../../../core/ops/delete.js";
4
+ import { createInsertOp } from "../../../core/ops/create.js";
5
+ import { createSetSelectionOp } from "../../../core/ops/select.js";
6
+ import { placementOps } from "./placement.js";
7
+
8
+ //#region src/interactions/actions/booleans/commit.ts
9
+ /**
10
+ * Replace every entry with `pieces` as one undoable batch, and select what
11
+ * was made. Each piece is minted from its own source, wears the paint a stroke
12
+ * folded into that source left it, and takes its slot. Returns the new ids.
13
+ */
14
+ function commitPieces(adapter, sel, entries, pieces, label) {
15
+ const slots = entries.map((e) => locateChild(adapter, e.id) ?? void 0);
16
+ const made = pieces.map((piece) => {
17
+ const { id, operand } = entries[piece.source];
18
+ return {
19
+ node: adapter.createPathNode(piece.path, piece.producedBy, id, operand.paint),
20
+ slot: slots[piece.source]
21
+ };
22
+ });
23
+ const newNodes = made.map((m) => m.node);
24
+ const ops = [];
25
+ const captured = entries.map((e, i) => ({
26
+ node: adapter.getNode(e.id) ?? { id: e.id },
27
+ index: slots[i]?.index ?? -1
28
+ }));
29
+ captured.sort((a, b) => b.index - a.index);
30
+ for (const { node, index } of captured) ops.push(createDeleteOp({
31
+ node,
32
+ index
33
+ }));
34
+ for (const n of newNodes) ops.push(createInsertOp({ node: n }));
35
+ ops.push(...placementOps(made.map((m) => ({
36
+ id: m.node.id,
37
+ slot: m.slot
38
+ })), slots));
39
+ ops.push(createSetSelectionOp({
40
+ from: sel,
41
+ to: newNodes.map((n) => n.id)
42
+ }));
43
+ dispatchApplyBatch(adapter, ops, label);
44
+ return newNodes.map((n) => n.id);
45
+ }
46
+
47
+ //#endregion
48
+ export { commitPieces };
49
+ //# sourceMappingURL=commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commit.js","names":[],"sources":["../../../../src/interactions/actions/booleans/commit.ts"],"sourcesContent":["import type { Path } from '@weasel-js/geom';\nimport { createInsertOp } from 'core/ops/create';\nimport { createDeleteOp } from 'core/ops/delete';\nimport { createSetSelectionOp } from 'core/ops/select';\nimport { locateChild } from 'core/ops/slot';\nimport type { Op } from 'core/ops/types';\nimport type { NodeId } from 'core/scene/types';\nimport { dispatchApplyBatch } from 'core/applyOps';\nimport type { BooleanEntry, BooleanOp, BooleansAdapter, BooleanZOrder } from './booleans';\nimport { placementOps } from './placement';\n\n/** One path to mint: the index of the source it stands in for, and the op it\n * is recorded as made by. */\nexport interface BooleanCommitPiece {\n path: Path;\n source: number;\n producedBy: BooleanOp;\n}\n\n/**\n * Replace every entry with `pieces` as one undoable batch, and select what\n * was made. Each piece is minted from its own source, wears the paint a stroke\n * folded into that source left it, and takes its slot. Returns the new ids.\n */\nexport function commitPieces(\n adapter: BooleansAdapter,\n sel: readonly NodeId[],\n entries: readonly BooleanEntry[],\n pieces: readonly BooleanCommitPiece[],\n label: string,\n): string[] {\n // Every source's slot, read before the scene is mutated.\n const slots: (BooleanZOrder | undefined)[] =\n entries.map((e) => locateChild(adapter, e.id) ?? undefined);\n const made = pieces.map((piece) => {\n const { id, operand } = entries[piece.source]!;\n return { node: adapter.createPathNode(piece.path, piece.producedBy, id, operand.paint), slot: slots[piece.source] };\n });\n const newNodes = made.map((m) => m.node);\n const ops: Op[] = [];\n // Capture the full node so the delete's `invert()` (an insert) restores\n // every field on undo. The index is -1 for a source its parent does not list.\n const captured = entries.map((e, i) => ({\n node: adapter.getNode(e.id) ?? { id: e.id },\n index: slots[i]?.index ?? -1,\n }));\n // Order by index DESC so reverse-then-invert (history's undo path)\n // re-inserts ASC — each splice lands on a correctly-sized array\n // instead of clamping high indices to a still-growing length.\n captured.sort((a, b) => b.index - a.index);\n for (const { node, index } of captured) ops.push(createDeleteOp({ node, index }));\n for (const n of newNodes) ops.push(createInsertOp({ node: n }));\n ops.push(...placementOps(made.map((m) => ({ id: m.node.id, slot: m.slot })), slots));\n ops.push(createSetSelectionOp({ from: sel, to: newNodes.map((n) => n.id as NodeId) }));\n dispatchApplyBatch(adapter, ops, label);\n return newNodes.map((n) => n.id);\n}\n"],"mappings":";;;;;;;;;;;;;AAwBA,SAAgB,aACd,SACA,KACA,SACA,QACA,OACU;CAEV,MAAM,QACJ,QAAQ,KAAK,MAAM,YAAY,SAAS,EAAE,EAAE,KAAK,MAAS;CAC5D,MAAM,OAAO,OAAO,KAAK,UAAU;EACjC,MAAM,EAAE,IAAI,YAAY,QAAQ,MAAM;EACtC,OAAO;GAAE,MAAM,QAAQ,eAAe,MAAM,MAAM,MAAM,YAAY,IAAI,QAAQ,KAAK;GAAG,MAAM,MAAM,MAAM;EAAQ;CACpH,CAAC;CACD,MAAM,WAAW,KAAK,KAAK,MAAM,EAAE,IAAI;CACvC,MAAM,MAAY,CAAC;CAGnB,MAAM,WAAW,QAAQ,KAAK,GAAG,OAAO;EACtC,MAAM,QAAQ,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG;EAC1C,OAAO,MAAM,EAAE,EAAE,SAAS;CAC5B,EAAE;CAIF,SAAS,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;CACzC,KAAK,MAAM,EAAE,MAAM,WAAW,UAAU,IAAI,KAAK,eAAe;EAAE;EAAM;CAAM,CAAC,CAAC;CAChF,KAAK,MAAM,KAAK,UAAU,IAAI,KAAK,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9D,IAAI,KAAK,GAAG,aAAa,KAAK,KAAK,OAAO;EAAE,IAAI,EAAE,KAAK;EAAI,MAAM,EAAE;CAAK,EAAE,GAAG,KAAK,CAAC;CACnF,IAAI,KAAK,qBAAqB;EAAE,MAAM;EAAK,IAAI,SAAS,KAAK,MAAM,EAAE,EAAY;CAAE,CAAC,CAAC;CACrF,mBAAmB,SAAS,KAAK,KAAK;CACtC,OAAO,SAAS,KAAK,MAAM,EAAE,EAAE;AACjC"}
@@ -0,0 +1,48 @@
1
+ import { commitPieces } from "./commit.js";
2
+ import { resolveEntries } from "./booleans.js";
3
+
4
+ //#region src/interactions/actions/booleans/custom.ts
5
+ /**
6
+ * The operands the selected nodes give a Boolean operation, back to front, as
7
+ * the built-in operations resolve them; or why there are fewer than two.
8
+ * Reads the adapter and changes nothing.
9
+ */
10
+ function resolveBooleanOperands(adapter, opts = {}) {
11
+ const selection = [...adapter.getSelection()];
12
+ const entries = resolveEntries(adapter, selection, "divide", opts);
13
+ if ("kind" in entries) return entries;
14
+ return {
15
+ selection,
16
+ sources: entries.map(({ id, operand: { path, paint } }) => paint ? {
17
+ id,
18
+ path,
19
+ paint
20
+ } : {
21
+ id,
22
+ path
23
+ })
24
+ };
25
+ }
26
+ /**
27
+ * Replace `operands`' sources with `pieces` as one undo step named `label`,
28
+ * and select what was made. Each piece is minted from the source it names, as
29
+ * `BooleansAdapter.createPathNode` says, and stacks in that source's slot. An
30
+ * empty `pieces` deletes every source.
31
+ */
32
+ function commitBooleanPieces(adapter, operands, pieces, label) {
33
+ const entries = operands.sources.map(({ id, path, paint }) => ({
34
+ id,
35
+ operand: paint ? {
36
+ path,
37
+ paint
38
+ } : { path }
39
+ }));
40
+ return {
41
+ kind: "applied",
42
+ resultIds: commitPieces(adapter, operands.selection, entries, pieces, label)
43
+ };
44
+ }
45
+
46
+ //#endregion
47
+ export { commitBooleanPieces, resolveBooleanOperands };
48
+ //# sourceMappingURL=custom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom.js","names":[],"sources":["../../../../src/interactions/actions/booleans/custom.ts"],"sourcesContent":["/**\n * A Boolean operation of the caller's own over the selection: the operands the\n * kit resolves from it, and the commit that replaces them with the pieces the\n * caller cut from those operands, as one undo step.\n */\nimport type { Path } from '@weasel-js/geom';\nimport type { PathPaint } from 'canvas/nodeShapes/nodePaint';\nimport type { NodeId } from 'core/scene/types';\nimport { resolveEntries, type BooleanEntry, type BooleanOpResult, type BooleansAdapter } from './booleans';\nimport { commitPieces, type BooleanCommitPiece } from './commit';\nimport type { BooleanOpOptions } from './operands';\n\n/** One selected node's operand. */\nexport interface BooleanSource {\n id: NodeId;\n /** In world: its path, its glyph outlines, or the region its ink covers\n * once a stroke is counted. */\n path: Path;\n /** Set when a stroke went into `path`: what a piece standing in for this\n * source wears. */\n paint?: PathPaint;\n}\n\n/** What {@link resolveBooleanOperands} answers. */\nexport interface BooleanOperands {\n /** The selection the operands were read from. */\n selection: readonly NodeId[];\n /** Back to front. */\n sources: readonly BooleanSource[];\n}\n\n/**\n * The operands the selected nodes give a Boolean operation, back to front, as\n * the built-in operations resolve them; or why there are fewer than two.\n * Reads the adapter and changes nothing.\n */\nexport function resolveBooleanOperands(\n adapter: BooleansAdapter,\n opts: BooleanOpOptions = {},\n): BooleanOperands | Exclude<BooleanOpResult, { kind: 'applied' }> {\n const selection = [...adapter.getSelection()] as NodeId[];\n const entries = resolveEntries(adapter, selection, 'divide', opts);\n if ('kind' in entries) return entries;\n return {\n selection,\n sources: entries.map(({ id, operand: { path, paint } }) => (paint ? { id, path, paint } : { id, path })),\n };\n}\n\n/**\n * Replace `operands`' sources with `pieces` as one undo step named `label`,\n * and select what was made. Each piece is minted from the source it names, as\n * `BooleansAdapter.createPathNode` says, and stacks in that source's slot. An\n * empty `pieces` deletes every source.\n */\nexport function commitBooleanPieces(\n adapter: BooleansAdapter,\n operands: BooleanOperands,\n pieces: readonly BooleanCommitPiece[],\n label: string,\n): Extract<BooleanOpResult, { kind: 'applied' }> {\n const entries = operands.sources.map(({ id, path, paint }): BooleanEntry => ({\n id,\n operand: paint ? { path, paint } : { path },\n }));\n return { kind: 'applied', resultIds: commitPieces(adapter, operands.selection, entries, pieces, label) };\n}\n\nexport type { BooleanCommitPiece };\n"],"mappings":";;;;;;;;;AAoCA,SAAgB,uBACd,SACA,OAAyB,CAAC,GACuC;CACjE,MAAM,YAAY,CAAC,GAAG,QAAQ,aAAa,CAAC;CAC5C,MAAM,UAAU,eAAe,SAAS,WAAW,UAAU,IAAI;CACjE,IAAI,UAAU,SAAS,OAAO;CAC9B,OAAO;EACL;EACA,SAAS,QAAQ,KAAK,EAAE,IAAI,SAAS,EAAE,MAAM,cAAe,QAAQ;GAAE;GAAI;GAAM;EAAM,IAAI;GAAE;GAAI;EAAK,CAAE;CACzG;AACF;;;;;;;AAQA,SAAgB,oBACd,SACA,UACA,QACA,OAC+C;CAC/C,MAAM,UAAU,SAAS,QAAQ,KAAK,EAAE,IAAI,MAAM,aAA2B;EAC3E;EACA,SAAS,QAAQ;GAAE;GAAM;EAAM,IAAI,EAAE,KAAK;CAC5C,EAAE;CACF,OAAO;EAAE,MAAM;EAAW,WAAW,aAAa,SAAS,SAAS,WAAW,SAAS,QAAQ,KAAK;CAAE;AACzG"}
@@ -1,40 +1,51 @@
1
- import { strokeRegion as e } from "../outlines/strokeRegion.js";
2
- import { textToPath as t, textToPathsByPaint as n } from "@weasel-js/text";
3
- import { pathUnion as r } from "@weasel-js/geom/booleans";
1
+ import { strokeRegion } from "../outlines/strokeRegion.js";
2
+ import { textToPath, textToPathsByPaint } from "@weasel-js/text";
3
+ import { pathUnion } from "@weasel-js/geom/booleans";
4
+
4
5
  //#region src/interactions/actions/booleans/operands.ts
5
- function i(t, n, i, a) {
6
- let { path: o, fill: s } = t, { stroke: c } = t, l = c?.paint;
7
- if (!c || l == null || n === "ignore" || n === "unfilled" && s !== null) return { path: o };
8
- let u = e(o, c, i, a === void 0 ? {} : { scale: a });
9
- return u.commands.length === 0 ? { path: o } : {
10
- path: s === null ? u : r(o, u),
11
- paint: { fill: s ?? { paint: l } }
6
+ function inkOf(source, strokes, frame, scale) {
7
+ const { path, fill } = source;
8
+ const { stroke } = source;
9
+ const strokePaint = stroke?.paint;
10
+ if (!stroke || strokePaint == null) return { path };
11
+ if (strokes === "ignore" || strokes === "unfilled" && fill !== null) return { path };
12
+ const ribbon = strokeRegion(path, stroke, frame, scale === void 0 ? {} : { scale });
13
+ if (ribbon.commands.length === 0) return { path };
14
+ return {
15
+ path: fill !== null ? pathUnion(path, ribbon) : ribbon,
16
+ paint: { fill: fill ?? { paint: strokePaint } }
12
17
  };
13
18
  }
14
- function a(e, a, { strokes: o = "ignore", scale: s }) {
15
- let c = e.getWorldPath(a);
16
- if (c) {
17
- let t = o === "ignore" ? void 0 : e.getPaint?.(a);
18
- return t ? i({
19
- path: c,
20
- ...t
21
- }, o, e.getStrokeFrame?.(a), s) : { path: c };
19
+ /**
20
+ * The operand behind `id`, or `undefined` for a node that is not one: a group,
21
+ * blank text, anything the adapter has neither a path nor text for. Throws
22
+ * `TextOutlinesError` for text whose face has no outlines.
23
+ */
24
+ function resolveOperand(adapter, id, { strokes = "ignore", scale }) {
25
+ const path = adapter.getWorldPath(id);
26
+ if (path) {
27
+ const paint = strokes === "ignore" ? void 0 : adapter.getPaint?.(id);
28
+ return paint ? inkOf({
29
+ path,
30
+ ...paint
31
+ }, strokes, adapter.getStrokeFrame?.(id), scale) : { path };
22
32
  }
23
- let l = e.getTextSource?.(a);
24
- if (!l) return;
25
- if (o === "ignore") {
26
- let e = t(l.data, l.pose);
27
- return e.commands.length > 0 ? { path: e } : void 0;
33
+ const text = adapter.getTextSource?.(id);
34
+ if (!text) return void 0;
35
+ if (strokes === "ignore") {
36
+ const glyphs = textToPath(text.data, text.pose);
37
+ return glyphs.commands.length > 0 ? { path: glyphs } : void 0;
28
38
  }
29
- let u = n(l.data, l.pose).map((t) => i(t, o, e.getStrokeFrame?.(a), s));
30
- if (u.length === 0) return;
31
- let d = u.find((e) => e.paint)?.paint, f = u.length === 1 ? u[0].path : r(...u.map((e) => e.path));
32
- return d ? {
33
- path: f,
34
- paint: d
35
- } : { path: f };
39
+ const inks = textToPathsByPaint(text.data, text.pose).map((p) => inkOf(p, strokes, adapter.getStrokeFrame?.(id), scale));
40
+ if (inks.length === 0) return void 0;
41
+ const paint = inks.find((ink) => ink.paint)?.paint;
42
+ const whole = inks.length === 1 ? inks[0].path : pathUnion(...inks.map((ink) => ink.path));
43
+ return paint ? {
44
+ path: whole,
45
+ paint
46
+ } : { path: whole };
36
47
  }
37
- //#endregion
38
- export { a as resolveOperand };
39
48
 
49
+ //#endregion
50
+ export { resolveOperand };
40
51
  //# sourceMappingURL=operands.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"operands.js","names":["inkOf","source","strokePaint","stroke","strokes","fill","ribbon","strokeRegion","path","frame","scale","pathUnion","resolveOperand","adapter","id","paint","text","glyphs","textToPath","inks","textToPathsByPaint","p","ink","whole"],"sources":["../../../../src/interactions/actions/booleans/operands.ts"],"sourcesContent":["/**\n * What each selected node gives a Boolean operation: its path, its glyph\n * outlines, or the region its ink covers once a stroke is counted.\n */\nimport type { Affine, Path, Scale2 } from '@weasel-js/geom';\nimport { pathUnion } from '@weasel-js/geom/booleans';\nimport { textToPath, textToPathsByPaint } from '@weasel-js/text';\nimport type { PathPaint } from 'canvas/nodeShapes/nodePaint';\nimport type { NodeId } from 'core/scene/types';\nimport type { PaintedPath } from '../outlines/replaceWithPaths';\nimport { strokeRegion } from '../outlines/strokeRegion';\nimport type { BooleansAdapter } from './booleans';\n\n/**\n * What a stroked operand gives a Boolean operation.\n *\n * - `'ignore'`: its path, as though it had no stroke.\n * - `'unfilled'`: the region its stroke covers when it has no fill, as a line\n * or an open pencil stroke has none; its path when it is filled.\n * - `'include'`: what it paints — its fill and its stroke together, or the\n * stroke alone when it has no fill.\n *\n * Any mode but `'ignore'` needs {@link BooleansAdapter.getPaint}.\n */\nexport type BooleanStrokes = 'ignore' | 'unfilled' | 'include';\n\n/** Options for `applyBooleanOp`. */\nexport interface BooleanOpOptions {\n /** Default `'ignore'`. */\n strokes?: BooleanStrokes;\n /** The view scale a `{ px }` stroke width resolves against: one number, or\n * the view's own scale per axis. Default 1. */\n scale?: number | Scale2;\n}\n\n/** @internal */\nexport interface BooleanOperand {\n path: Path;\n /** Set when a stroke went into `path`: what a result standing in for this\n * operand wears, the stroke being part of its shape now. */\n paint?: PathPaint;\n}\n\nfunction inkOf(\n source: PaintedPath,\n strokes: BooleanStrokes,\n frame: Affine | null | undefined,\n scale: number | Scale2 | undefined,\n): BooleanOperand {\n const { path, fill } = source;\n const { stroke } = source;\n const strokePaint = stroke?.paint;\n if (!stroke || strokePaint == null) return { path };\n if (strokes === 'ignore' || (strokes === 'unfilled' && fill !== null)) return { path };\n const ribbon = strokeRegion(path, stroke, frame, scale === undefined ? {} : { scale });\n if (ribbon.commands.length === 0) return { path };\n return { path: fill !== null ? pathUnion(path, ribbon) : ribbon, paint: { fill: fill ?? { paint: strokePaint } } };\n}\n\n/**\n * The operand behind `id`, or `undefined` for a node that is not one: a group,\n * blank text, anything the adapter has neither a path nor text for. Throws\n * `TextOutlinesError` for text whose face has no outlines.\n */\nexport function resolveOperand(\n adapter: BooleansAdapter,\n id: NodeId,\n { strokes = 'ignore', scale }: BooleanOpOptions,\n): BooleanOperand | undefined {\n const path = adapter.getWorldPath(id);\n if (path) {\n const paint = strokes === 'ignore' ? undefined : adapter.getPaint?.(id);\n return paint ? inkOf({ path, ...paint }, strokes, adapter.getStrokeFrame?.(id), scale) : { path };\n }\n const text = adapter.getTextSource?.(id);\n if (!text) return undefined;\n if (strokes === 'ignore') {\n const glyphs = textToPath(text.data, text.pose);\n return glyphs.commands.length > 0 ? { path: glyphs } : undefined;\n }\n const inks = textToPathsByPaint(text.data, text.pose).map((p) => inkOf(p, strokes, adapter.getStrokeFrame?.(id), scale));\n if (inks.length === 0) return undefined;\n const paint = inks.find((ink) => ink.paint)?.paint;\n const whole = inks.length === 1 ? inks[0]!.path : pathUnion(...inks.map((ink) => ink.path));\n return paint ? { path: whole, paint } : { path: whole };\n}\n"],"mappings":";;;;AA2CA,SAASA,EACP,GACA,GACA,GACA,GACgB;CAChB,IAAM,EAAE,SAAM,YAASC,GACjB,EAAE,cAAWA,GACbC,IAAcC,GAAQ;CAE5B,IADI,CAACA,KAAUD,KAAe,QAC1BE,MAAY,YAAaA,MAAY,cAAcC,MAAS,MAAO,OAAO,EAAE,QAAK;CACrF,IAAMC,IAASC,EAAaC,GAAML,GAAQM,GAAOC,MAAU,KAAA,IAAY,CAAC,IAAI,EAAE,SAAM,CAAC;CAErF,OADIJ,EAAO,SAAS,WAAW,IAAU,EAAE,QAAK,IACzC;EAAE,MAAMD,MAAS,OAAiCC,IAA1BK,EAAUH,GAAMF,CAAM;EAAY,OAAO,EAAE,MAAMD,KAAQ,EAAE,OAAOH,EAAY,EAAE;CAAE;AACnH;AAOA,SAAgBU,EACd,GACA,GACA,EAAE,aAAU,UAAU,YACM;CAC5B,IAAMJ,IAAOK,EAAQ,aAAaC,CAAE;CACpC,IAAIN,GAAM;EACR,IAAMO,IAAQX,MAAY,WAAW,KAAA,IAAYS,EAAQ,WAAWC,CAAE;EACtE,OAAOC,IAAQf,EAAM;GAAE;GAAM,GAAGe;EAAM,GAAGX,GAASS,EAAQ,iBAAiBC,CAAE,GAAGJ,CAAK,IAAI,EAAE,QAAK;CAClG;CACA,IAAMM,IAAOH,EAAQ,gBAAgBC,CAAE;CACvC,IAAI,CAACE,GAAM;CACX,IAAIZ,MAAY,UAAU;EACxB,IAAMa,IAASC,EAAWF,EAAK,MAAMA,EAAK,IAAI;EAC9C,OAAOC,EAAO,SAAS,SAAS,IAAI,EAAE,MAAMA,EAAO,IAAI,KAAA;CACzD;CACA,IAAME,IAAOC,EAAmBJ,EAAK,MAAMA,EAAK,IAAI,CAAC,CAAC,KAAK,MAAMhB,EAAMqB,GAAGjB,GAASS,EAAQ,iBAAiBC,CAAE,GAAGJ,CAAK,CAAC;CACvH,IAAIS,EAAK,WAAW,GAAG;CACvB,IAAMJ,IAAQI,EAAK,MAAM,MAAQG,EAAI,KAAK,CAAC,EAAE,OACvCC,IAAQJ,EAAK,WAAW,IAAIA,EAAK,EAAE,CAAE,OAAOR,EAAU,GAAGQ,EAAK,KAAK,MAAQG,EAAI,IAAI,CAAC;CAC1F,OAAOP,IAAQ;EAAE,MAAMQ;EAAO;CAAM,IAAI,EAAE,MAAMA,EAAM;AACxD"}
1
+ {"version":3,"file":"operands.js","names":[],"sources":["../../../../src/interactions/actions/booleans/operands.ts"],"sourcesContent":["/**\n * What each selected node gives a Boolean operation: its path, its glyph\n * outlines, or the region its ink covers once a stroke is counted.\n */\nimport type { Affine, Path, Scale2 } from '@weasel-js/geom';\nimport { pathUnion } from '@weasel-js/geom/booleans';\nimport { textToPath, textToPathsByPaint } from '@weasel-js/text';\nimport type { PathPaint } from 'canvas/nodeShapes/nodePaint';\nimport type { NodeId } from 'core/scene/types';\nimport type { PaintedPath } from '../outlines/replaceWithPaths';\nimport { strokeRegion } from '../outlines/strokeRegion';\nimport type { BooleansAdapter } from './booleans';\n\n/**\n * What a stroked operand gives a Boolean operation.\n *\n * - `'ignore'`: its path, as though it had no stroke.\n * - `'unfilled'`: the region its stroke covers when it has no fill, as a line\n * or an open pencil stroke has none; its path when it is filled.\n * - `'include'`: what it paints — its fill and its stroke together, or the\n * stroke alone when it has no fill.\n *\n * Any mode but `'ignore'` needs {@link BooleansAdapter.getPaint}.\n */\nexport type BooleanStrokes = 'ignore' | 'unfilled' | 'include';\n\n/** Options for `applyBooleanOp`. */\nexport interface BooleanOpOptions {\n /** Default `'ignore'`. */\n strokes?: BooleanStrokes;\n /** The view scale a `{ px }` stroke width resolves against: one number, or\n * the view's own scale per axis. Default 1. */\n scale?: number | Scale2;\n}\n\n/** @internal */\nexport interface BooleanOperand {\n path: Path;\n /** Set when a stroke went into `path`: what a result standing in for this\n * operand wears, the stroke being part of its shape now. */\n paint?: PathPaint;\n}\n\nfunction inkOf(\n source: PaintedPath,\n strokes: BooleanStrokes,\n frame: Affine | null | undefined,\n scale: number | Scale2 | undefined,\n): BooleanOperand {\n const { path, fill } = source;\n const { stroke } = source;\n const strokePaint = stroke?.paint;\n if (!stroke || strokePaint == null) return { path };\n if (strokes === 'ignore' || (strokes === 'unfilled' && fill !== null)) return { path };\n const ribbon = strokeRegion(path, stroke, frame, scale === undefined ? {} : { scale });\n if (ribbon.commands.length === 0) return { path };\n return { path: fill !== null ? pathUnion(path, ribbon) : ribbon, paint: { fill: fill ?? { paint: strokePaint } } };\n}\n\n/**\n * The operand behind `id`, or `undefined` for a node that is not one: a group,\n * blank text, anything the adapter has neither a path nor text for. Throws\n * `TextOutlinesError` for text whose face has no outlines.\n */\nexport function resolveOperand(\n adapter: BooleansAdapter,\n id: NodeId,\n { strokes = 'ignore', scale }: BooleanOpOptions,\n): BooleanOperand | undefined {\n const path = adapter.getWorldPath(id);\n if (path) {\n const paint = strokes === 'ignore' ? undefined : adapter.getPaint?.(id);\n return paint ? inkOf({ path, ...paint }, strokes, adapter.getStrokeFrame?.(id), scale) : { path };\n }\n const text = adapter.getTextSource?.(id);\n if (!text) return undefined;\n if (strokes === 'ignore') {\n const glyphs = textToPath(text.data, text.pose);\n return glyphs.commands.length > 0 ? { path: glyphs } : undefined;\n }\n const inks = textToPathsByPaint(text.data, text.pose).map((p) => inkOf(p, strokes, adapter.getStrokeFrame?.(id), scale));\n if (inks.length === 0) return undefined;\n const paint = inks.find((ink) => ink.paint)?.paint;\n const whole = inks.length === 1 ? inks[0]!.path : pathUnion(...inks.map((ink) => ink.path));\n return paint ? { path: whole, paint } : { path: whole };\n}\n"],"mappings":";;;;;AA2CA,SAAS,MACP,QACA,SACA,OACA,OACgB;CAChB,MAAM,EAAE,MAAM,SAAS;CACvB,MAAM,EAAE,WAAW;CACnB,MAAM,cAAc,QAAQ;CAC5B,IAAI,CAAC,UAAU,eAAe,MAAM,OAAO,EAAE,KAAK;CAClD,IAAI,YAAY,YAAa,YAAY,cAAc,SAAS,MAAO,OAAO,EAAE,KAAK;CACrF,MAAM,SAAS,aAAa,MAAM,QAAQ,OAAO,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM,CAAC;CACrF,IAAI,OAAO,SAAS,WAAW,GAAG,OAAO,EAAE,KAAK;CAChD,OAAO;EAAE,MAAM,SAAS,OAAO,UAAU,MAAM,MAAM,IAAI;EAAQ,OAAO,EAAE,MAAM,QAAQ,EAAE,OAAO,YAAY,EAAE;CAAE;AACnH;;;;;;AAOA,SAAgB,eACd,SACA,IACA,EAAE,UAAU,UAAU,SACM;CAC5B,MAAM,OAAO,QAAQ,aAAa,EAAE;CACpC,IAAI,MAAM;EACR,MAAM,QAAQ,YAAY,WAAW,SAAY,QAAQ,WAAW,EAAE;EACtE,OAAO,QAAQ,MAAM;GAAE;GAAM,GAAG;EAAM,GAAG,SAAS,QAAQ,iBAAiB,EAAE,GAAG,KAAK,IAAI,EAAE,KAAK;CAClG;CACA,MAAM,OAAO,QAAQ,gBAAgB,EAAE;CACvC,IAAI,CAAC,MAAM,OAAO;CAClB,IAAI,YAAY,UAAU;EACxB,MAAM,SAAS,WAAW,KAAK,MAAM,KAAK,IAAI;EAC9C,OAAO,OAAO,SAAS,SAAS,IAAI,EAAE,MAAM,OAAO,IAAI;CACzD;CACA,MAAM,OAAO,mBAAmB,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,KAAK,MAAM,MAAM,GAAG,SAAS,QAAQ,iBAAiB,EAAE,GAAG,KAAK,CAAC;CACvH,IAAI,KAAK,WAAW,GAAG,OAAO;CAC9B,MAAM,QAAQ,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,EAAE;CAC7C,MAAM,QAAQ,KAAK,WAAW,IAAI,KAAK,EAAE,CAAE,OAAO,UAAU,GAAG,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC;CAC1F,OAAO,QAAQ;EAAE,MAAM;EAAO;CAAM,IAAI,EAAE,MAAM,MAAM;AACxD"}
@@ -1,45 +1,51 @@
1
- import { pathCropPieces as e, pathDividePieces as t, pathExclude as n, pathIntersect as r, pathMerge as i, pathSubtract as a, pathTrim as o, pathUnion as s } from "@weasel-js/geom/booleans";
1
+ import { pathCropPieces, pathDividePieces, pathExclude, pathIntersect, pathMerge, pathSubtract, pathTrim, pathUnion } from "@weasel-js/geom/booleans";
2
+
2
3
  //#region src/interactions/actions/booleans/pieces.ts
3
- function c(e) {
4
- return e.map((e) => ({
5
- path: e.path,
6
- source: e.sources[e.sources.length - 1]
4
+ /** A piece stands in for the topmost input left in it. */
5
+ function bySource(pieces) {
6
+ return pieces.map((p) => ({
7
+ path: p.path,
8
+ source: p.sources[p.sources.length - 1]
7
9
  }));
8
10
  }
9
- function l(l, u, d) {
10
- let f = u.length - 1, p = (e) => [{
11
- path: e,
12
- source: f
13
- }], m;
14
- switch (l) {
11
+ /** Run `op` over `paths`, back to front, dropping empty results. `mergeKey`
12
+ * answers alike for the paths a Merge unites. */
13
+ function booleanPieces(op, paths, mergeKey) {
14
+ const top = paths.length - 1;
15
+ const whole = (path) => [{
16
+ path,
17
+ source: top
18
+ }];
19
+ let pieces;
20
+ switch (op) {
15
21
  case "union":
16
- m = p(s(...u));
22
+ pieces = whole(pathUnion(...paths));
17
23
  break;
18
24
  case "intersect":
19
- m = p(r(...u));
25
+ pieces = whole(pathIntersect(...paths));
20
26
  break;
21
27
  case "exclude":
22
- m = p(n(...u));
28
+ pieces = whole(pathExclude(...paths));
23
29
  break;
24
30
  case "subtract": {
25
- let e = u.length === 2 ? u[1] : s(...u.slice(1));
26
- m = p(a(u[0], e));
31
+ const front = paths.length === 2 ? paths[1] : pathUnion(...paths.slice(1));
32
+ pieces = whole(pathSubtract(paths[0], front));
27
33
  break;
28
34
  }
29
35
  case "divide":
30
- m = c(t(...u));
36
+ pieces = bySource(pathDividePieces(...paths));
31
37
  break;
32
38
  case "crop":
33
- m = c(e(...u));
39
+ pieces = bySource(pathCropPieces(...paths));
34
40
  break;
35
41
  case "trim":
36
- m = c(o(...u));
42
+ pieces = bySource(pathTrim(...paths));
37
43
  break;
38
- case "merge": m = c(i(u, d));
44
+ case "merge": pieces = bySource(pathMerge(paths, mergeKey));
39
45
  }
40
- return m.filter((e) => e.path.commands.length > 0);
46
+ return pieces.filter((p) => p.path.commands.length > 0);
41
47
  }
42
- //#endregion
43
- export { l as booleanPieces };
44
48
 
49
+ //#endregion
50
+ export { booleanPieces };
45
51
  //# sourceMappingURL=pieces.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pieces.js","names":["bySource","pieces","p","booleanPieces","top","paths","whole","op","pathUnion","pathIntersect","pathExclude","front","pathSubtract","pathDividePieces","pathCropPieces","pathTrim","pathMerge","mergeKey"],"sources":["../../../../src/interactions/actions/booleans/pieces.ts"],"sourcesContent":["import {\n pathUnion,\n pathIntersect,\n pathSubtract,\n pathExclude,\n pathDividePieces,\n pathCropPieces,\n pathTrim,\n pathMerge,\n type BooleanPiece,\n} from '@weasel-js/geom/booleans';\nimport type { Path, PolygonPath } from '@weasel-js/geom';\nimport type { BooleanOp } from './booleans';\n\n/** One result path, and the operand it stands in for: an index into the\n * operands, back to front. */\nexport interface ResultPiece {\n path: PolygonPath;\n source: number;\n}\n\n/** A piece stands in for the topmost input left in it. */\nfunction bySource(pieces: BooleanPiece[]): ResultPiece[] {\n return pieces.map((p) => ({ path: p.path, source: p.sources[p.sources.length - 1]! }));\n}\n\n/** Run `op` over `paths`, back to front, dropping empty results. `mergeKey`\n * answers alike for the paths a Merge unites. */\nexport function booleanPieces(op: BooleanOp, paths: Path[], mergeKey: (index: number) => unknown): ResultPiece[] {\n const top = paths.length - 1;\n const whole = (path: PolygonPath): ResultPiece[] => [{ path, source: top }];\n let pieces: ResultPiece[];\n switch (op) {\n case 'union': pieces = whole(pathUnion(...paths)); break;\n case 'intersect': pieces = whole(pathIntersect(...paths)); break;\n case 'exclude': pieces = whole(pathExclude(...paths)); break;\n case 'subtract': {\n // Illustrator \"Minus Front\": back − union(everything in front).\n const front = paths.length === 2 ? paths[1]! : pathUnion(...paths.slice(1));\n pieces = whole(pathSubtract(paths[0]!, front));\n break;\n }\n case 'divide': pieces = bySource(pathDividePieces(...paths)); break;\n // Illustrator \"Crop\": every source below the topmost, clipped to it; the\n // topmost is consumed as the mask.\n case 'crop': pieces = bySource(pathCropPieces(...paths)); break;\n case 'trim': pieces = bySource(pathTrim(...paths)); break;\n case 'merge': pieces = bySource(pathMerge(paths, mergeKey)); break;\n }\n return pieces.filter((p) => p.path.commands.length > 0);\n}\n"],"mappings":";;AAsBA,SAASA,EAAS,GAAuC;CACvD,OAAOC,EAAO,KAAK,OAAO;EAAE,MAAMC,EAAE;EAAM,QAAQA,EAAE,QAAQA,EAAE,QAAQ,SAAS;CAAI,EAAE;AACvF;AAIA,SAAgBC,EAAc,GAAe,GAAe,GAAqD;CAC/G,IAAMC,IAAMC,EAAM,SAAS,GACrBC,KAAS,MAAqC,CAAC;EAAE;EAAM,QAAQF;CAAI,CAAC,GACtEH;CACJ,QAAQM,GAAR;EACE,KAAK;GAAa,IAASD,EAAME,EAAU,GAAGH,CAAK,CAAC;GAAG;EACvD,KAAK;GAAa,IAASC,EAAMG,EAAc,GAAGJ,CAAK,CAAC;GAAG;EAC3D,KAAK;GAAa,IAASC,EAAMI,EAAY,GAAGL,CAAK,CAAC;GAAG;EACzD,KAAK,YAAY;GAEf,IAAMM,IAAQN,EAAM,WAAW,IAAIA,EAAM,KAAMG,EAAU,GAAGH,EAAM,MAAM,CAAC,CAAC;GAC1E,IAASC,EAAMM,EAAaP,EAAM,IAAKM,CAAK,CAAC;GAC7C;EACF;EACA,KAAK;GAAa,IAASX,EAASa,EAAiB,GAAGR,CAAK,CAAC;GAAG;EAGjE,KAAK;GAAa,IAASL,EAASc,EAAe,GAAGT,CAAK,CAAC;GAAG;EAC/D,KAAK;GAAa,IAASL,EAASe,EAAS,GAAGV,CAAK,CAAC;GAAG;EACzD,KAAK,SAAa,IAASL,EAASgB,EAAUX,GAAOY,CAAQ,CAAC;CAChE;CACA,OAAOhB,EAAO,QAAQ,MAAMC,EAAE,KAAK,SAAS,SAAS,CAAC;AACxD"}
1
+ {"version":3,"file":"pieces.js","names":[],"sources":["../../../../src/interactions/actions/booleans/pieces.ts"],"sourcesContent":["import {\n pathUnion,\n pathIntersect,\n pathSubtract,\n pathExclude,\n pathDividePieces,\n pathCropPieces,\n pathTrim,\n pathMerge,\n type BooleanPiece,\n} from '@weasel-js/geom/booleans';\nimport type { Path, PolygonPath } from '@weasel-js/geom';\nimport type { BooleanOp } from './booleans';\n\n/** One result path, and the operand it stands in for: an index into the\n * operands, back to front. */\nexport interface ResultPiece {\n path: PolygonPath;\n source: number;\n}\n\n/** A piece stands in for the topmost input left in it. */\nfunction bySource(pieces: BooleanPiece[]): ResultPiece[] {\n return pieces.map((p) => ({ path: p.path, source: p.sources[p.sources.length - 1]! }));\n}\n\n/** Run `op` over `paths`, back to front, dropping empty results. `mergeKey`\n * answers alike for the paths a Merge unites. */\nexport function booleanPieces(op: BooleanOp, paths: Path[], mergeKey: (index: number) => unknown): ResultPiece[] {\n const top = paths.length - 1;\n const whole = (path: PolygonPath): ResultPiece[] => [{ path, source: top }];\n let pieces: ResultPiece[];\n switch (op) {\n case 'union': pieces = whole(pathUnion(...paths)); break;\n case 'intersect': pieces = whole(pathIntersect(...paths)); break;\n case 'exclude': pieces = whole(pathExclude(...paths)); break;\n case 'subtract': {\n // Illustrator \"Minus Front\": back − union(everything in front).\n const front = paths.length === 2 ? paths[1]! : pathUnion(...paths.slice(1));\n pieces = whole(pathSubtract(paths[0]!, front));\n break;\n }\n case 'divide': pieces = bySource(pathDividePieces(...paths)); break;\n // Illustrator \"Crop\": every source below the topmost, clipped to it; the\n // topmost is consumed as the mask.\n case 'crop': pieces = bySource(pathCropPieces(...paths)); break;\n case 'trim': pieces = bySource(pathTrim(...paths)); break;\n case 'merge': pieces = bySource(pathMerge(paths, mergeKey)); break;\n }\n return pieces.filter((p) => p.path.commands.length > 0);\n}\n"],"mappings":";;;;AAsBA,SAAS,SAAS,QAAuC;CACvD,OAAO,OAAO,KAAK,OAAO;EAAE,MAAM,EAAE;EAAM,QAAQ,EAAE,QAAQ,EAAE,QAAQ,SAAS;CAAI,EAAE;AACvF;;;AAIA,SAAgB,cAAc,IAAe,OAAe,UAAqD;CAC/G,MAAM,MAAM,MAAM,SAAS;CAC3B,MAAM,SAAS,SAAqC,CAAC;EAAE;EAAM,QAAQ;CAAI,CAAC;CAC1E,IAAI;CACJ,QAAQ,IAAR;EACE,KAAK;GAAa,SAAS,MAAM,UAAU,GAAG,KAAK,CAAC;GAAG;EACvD,KAAK;GAAa,SAAS,MAAM,cAAc,GAAG,KAAK,CAAC;GAAG;EAC3D,KAAK;GAAa,SAAS,MAAM,YAAY,GAAG,KAAK,CAAC;GAAG;EACzD,KAAK,YAAY;GAEf,MAAM,QAAQ,MAAM,WAAW,IAAI,MAAM,KAAM,UAAU,GAAG,MAAM,MAAM,CAAC,CAAC;GAC1E,SAAS,MAAM,aAAa,MAAM,IAAK,KAAK,CAAC;GAC7C;EACF;EACA,KAAK;GAAa,SAAS,SAAS,iBAAiB,GAAG,KAAK,CAAC;GAAG;EAGjE,KAAK;GAAa,SAAS,SAAS,eAAe,GAAG,KAAK,CAAC;GAAG;EAC/D,KAAK;GAAa,SAAS,SAAS,SAAS,GAAG,KAAK,CAAC;GAAG;EACzD,KAAK,SAAa,SAAS,SAAS,UAAU,OAAO,QAAQ,CAAC;CAChE;CACA,OAAO,OAAO,QAAQ,MAAM,EAAE,KAAK,SAAS,SAAS,CAAC;AACxD"}
@@ -1,24 +1,37 @@
1
- import { createMoveToIndexOp as e } from "../../../core/ops/reorder/index.js";
1
+ import { createMoveToIndexOp } from "../../../core/ops/reorder/index.js";
2
+
2
3
  //#region src/interactions/actions/booleans/placement.ts
3
- function t(t, n) {
4
- let r = /* @__PURE__ */ new Map();
5
- for (let e of t) {
6
- if (!e.slot) continue;
7
- let t = r.get(e.slot.parentId);
8
- t ? t.push(e.id) : r.set(e.slot.parentId, [e.id]);
4
+ /**
5
+ * The ops that put each result where its source was. Results are grouped by
6
+ * their source's parent, and each group lands as one block, in result order,
7
+ * in the slot of the topmost source in that parent.
8
+ *
9
+ * `sourceSlots` holds every source's slot, read before anything is deleted.
10
+ * The sources below a slot in the same parent are deleted before the reorder
11
+ * runs, so the block goes that many places lower. A result whose source has
12
+ * no slot is left wherever the insert put it.
13
+ */
14
+ function placementOps(results, sourceSlots) {
15
+ const groups = /* @__PURE__ */ new Map();
16
+ for (const r of results) {
17
+ if (!r.slot) continue;
18
+ const group = groups.get(r.slot.parentId);
19
+ if (group) group.push(r.id);
20
+ else groups.set(r.slot.parentId, [r.id]);
9
21
  }
10
- let i = [];
11
- for (let [t, a] of r) {
12
- let r = n.flatMap((e) => e && e.parentId === t ? [e.index] : []), o = Math.max(...r);
13
- i.push(e({
14
- ids: a,
15
- parentId: t,
16
- index: o - (r.length - 1)
22
+ const ops = [];
23
+ for (const [parentId, ids] of groups) {
24
+ const indices = sourceSlots.flatMap((s) => s && s.parentId === parentId ? [s.index] : []);
25
+ const top = Math.max(...indices);
26
+ ops.push(createMoveToIndexOp({
27
+ ids,
28
+ parentId,
29
+ index: top - (indices.length - 1)
17
30
  }));
18
31
  }
19
- return i;
32
+ return ops;
20
33
  }
21
- //#endregion
22
- export { t as placementOps };
23
34
 
35
+ //#endregion
36
+ export { placementOps };
24
37
  //# sourceMappingURL=placement.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"placement.js","names":["placementOps","groups","r","results","group","ops","parentId","ids","indices","sourceSlots","s","top","createMoveToIndexOp"],"sources":["../../../../src/interactions/actions/booleans/placement.ts"],"sourcesContent":["import { createMoveToIndexOp } from 'core/ops/reorder';\nimport type { Op } from 'core/ops/types';\nimport type { BooleanZOrder } from './booleans';\n\n/**\n * The ops that put each result where its source was. Results are grouped by\n * their source's parent, and each group lands as one block, in result order,\n * in the slot of the topmost source in that parent.\n *\n * `sourceSlots` holds every source's slot, read before anything is deleted.\n * The sources below a slot in the same parent are deleted before the reorder\n * runs, so the block goes that many places lower. A result whose source has\n * no slot is left wherever the insert put it.\n */\nexport function placementOps(\n results: readonly { id: string; slot: BooleanZOrder | undefined }[],\n sourceSlots: readonly (BooleanZOrder | undefined)[],\n): Op[] {\n const groups = new Map<string | null, string[]>();\n for (const r of results) {\n if (!r.slot) continue;\n const group = groups.get(r.slot.parentId);\n if (group) group.push(r.id);\n else groups.set(r.slot.parentId, [r.id]);\n }\n const ops: Op[] = [];\n for (const [parentId, ids] of groups) {\n const indices = sourceSlots.flatMap((s) => (s && s.parentId === parentId ? [s.index] : []));\n const top = Math.max(...indices);\n ops.push(createMoveToIndexOp({ ids, parentId, index: top - (indices.length - 1) }));\n }\n return ops;\n}\n"],"mappings":";;AAcA,SAAgBA,EACd,GACA,GACM;CACN,IAAMC,oBAAS,IAAI,IAA6B;CAChD,KAAK,IAAMC,KAAKC,GAAS;EACvB,IAAI,CAACD,EAAE,MAAM;EACb,IAAME,IAAQH,EAAO,IAAIC,EAAE,KAAK,QAAQ;EACxC,AAAIE,IAAOA,EAAM,KAAKF,EAAE,EAAE,IACrBD,EAAO,IAAIC,EAAE,KAAK,UAAU,CAACA,EAAE,EAAE,CAAC;CACzC;CACA,IAAMG,IAAY,CAAC;CACnB,KAAK,IAAM,CAACC,GAAUC,MAAQN,GAAQ;EACpC,IAAMO,IAAUC,EAAY,SAAS,MAAOC,KAAKA,EAAE,aAAaJ,IAAW,CAACI,EAAE,KAAK,IAAI,CAAC,CAAE,GACpFC,IAAM,KAAK,IAAI,GAAGH,CAAO;EAC/B,EAAI,KAAKI,EAAoB;GAAE;GAAK;GAAU,OAAOD,KAAOH,EAAQ,SAAS;EAAG,CAAC,CAAC;CACpF;CACA,OAAOH;AACT"}
1
+ {"version":3,"file":"placement.js","names":[],"sources":["../../../../src/interactions/actions/booleans/placement.ts"],"sourcesContent":["import { createMoveToIndexOp } from 'core/ops/reorder';\nimport type { Op } from 'core/ops/types';\nimport type { BooleanZOrder } from './booleans';\n\n/**\n * The ops that put each result where its source was. Results are grouped by\n * their source's parent, and each group lands as one block, in result order,\n * in the slot of the topmost source in that parent.\n *\n * `sourceSlots` holds every source's slot, read before anything is deleted.\n * The sources below a slot in the same parent are deleted before the reorder\n * runs, so the block goes that many places lower. A result whose source has\n * no slot is left wherever the insert put it.\n */\nexport function placementOps(\n results: readonly { id: string; slot: BooleanZOrder | undefined }[],\n sourceSlots: readonly (BooleanZOrder | undefined)[],\n): Op[] {\n const groups = new Map<string | null, string[]>();\n for (const r of results) {\n if (!r.slot) continue;\n const group = groups.get(r.slot.parentId);\n if (group) group.push(r.id);\n else groups.set(r.slot.parentId, [r.id]);\n }\n const ops: Op[] = [];\n for (const [parentId, ids] of groups) {\n const indices = sourceSlots.flatMap((s) => (s && s.parentId === parentId ? [s.index] : []));\n const top = Math.max(...indices);\n ops.push(createMoveToIndexOp({ ids, parentId, index: top - (indices.length - 1) }));\n }\n return ops;\n}\n"],"mappings":";;;;;;;;;;;;;AAcA,SAAgB,aACd,SACA,aACM;CACN,MAAM,yBAAS,IAAI,IAA6B;CAChD,KAAK,MAAM,KAAK,SAAS;EACvB,IAAI,CAAC,EAAE,MAAM;EACb,MAAM,QAAQ,OAAO,IAAI,EAAE,KAAK,QAAQ;EACxC,IAAI,OAAO,MAAM,KAAK,EAAE,EAAE;OACrB,OAAO,IAAI,EAAE,KAAK,UAAU,CAAC,EAAE,EAAE,CAAC;CACzC;CACA,MAAM,MAAY,CAAC;CACnB,KAAK,MAAM,CAAC,UAAU,QAAQ,QAAQ;EACpC,MAAM,UAAU,YAAY,SAAS,MAAO,KAAK,EAAE,aAAa,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,CAAE;EAC1F,MAAM,MAAM,KAAK,IAAI,GAAG,OAAO;EAC/B,IAAI,KAAK,oBAAoB;GAAE;GAAK;GAAU,OAAO,OAAO,QAAQ,SAAS;EAAG,CAAC,CAAC;CACpF;CACA,OAAO;AACT"}
@@ -1,22 +1,35 @@
1
- import { applyBooleanOp as e } from "./booleans.js";
2
- import { useCallback as t } from "react";
3
- import { useLatest as n } from "@weasel-js/react";
4
- function r(r, i = {}) {
5
- let a = n(r), o = n(i), s = t((t) => {
6
- e(a.current, t, o.current);
7
- }, [a, o]);
1
+ import { applyBooleanOp } from "./booleans.js";
2
+ import { useCallback } from "react";
3
+ import { isDev, useLatest } from "@weasel-js/react";
4
+
5
+ //#region src/interactions/actions/booleans/useBooleans.ts
6
+ /**
7
+ * `useBooleans` — selection-driven Boolean ops on path layers. No-ops are
8
+ * silent in production; in dev, `subtract` with < 2 selected paths emits a
9
+ * `console.warn`.
10
+ */
11
+ var dev = isDev();
12
+ /** Bind the Boolean path operations to an adapter that knows how to read the
13
+ * selection, fetch world-space paths and mint result nodes. */
14
+ function useBooleans(adapter, options = {}) {
15
+ const adapterRef = useLatest(adapter);
16
+ const optionsRef = useLatest(options);
17
+ const run = useCallback((op) => {
18
+ const result = applyBooleanOp(adapterRef.current, op, optionsRef.current);
19
+ if (dev && result.kind === "noop" && result.reason === "too-few-for-subtract") console.warn("[useBooleans] subtract requires at least 2 selected paths");
20
+ }, [adapterRef, optionsRef]);
8
21
  return {
9
- union: t(() => s("union"), [s]),
10
- intersect: t(() => s("intersect"), [s]),
11
- subtract: t(() => s("subtract"), [s]),
12
- exclude: t(() => s("exclude"), [s]),
13
- divide: t(() => s("divide"), [s]),
14
- crop: t(() => s("crop"), [s]),
15
- trim: t(() => s("trim"), [s]),
16
- merge: t(() => s("merge"), [s])
22
+ union: useCallback(() => run("union"), [run]),
23
+ intersect: useCallback(() => run("intersect"), [run]),
24
+ subtract: useCallback(() => run("subtract"), [run]),
25
+ exclude: useCallback(() => run("exclude"), [run]),
26
+ divide: useCallback(() => run("divide"), [run]),
27
+ crop: useCallback(() => run("crop"), [run]),
28
+ trim: useCallback(() => run("trim"), [run]),
29
+ merge: useCallback(() => run("merge"), [run])
17
30
  };
18
31
  }
19
- //#endregion
20
- export { r as useBooleans };
21
32
 
33
+ //#endregion
34
+ export { useBooleans };
22
35
  //# sourceMappingURL=useBooleans.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBooleans.js","names":["useBooleans","adapterRef","useLatest","adapter","optionsRef","options","run","useCallback","op"],"sources":["../../../../src/interactions/actions/booleans/useBooleans.ts"],"sourcesContent":["/**\n * `useBooleans` — selection-driven Boolean ops on path layers. No-ops are\n * silent in production; in dev, `subtract` with < 2 selected paths emits a\n * `console.warn`.\n */\nimport { useCallback } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { applyBooleanOp, type BooleansAdapter, type BooleanOp } from './booleans';\nimport type { BooleanOpOptions } from './operands';\n\n/** The Boolean path operations, each acting on the current selection and\n * committing as one undo step. */\nexport interface UseBooleansReturn {\n union(): void;\n intersect(): void;\n subtract(): void;\n exclude(): void;\n divide(): void;\n crop(): void;\n trim(): void;\n merge(): void;\n}\n\n/** Options for `useBooleans`. */\nexport interface UseBooleansOptions extends BooleanOpOptions {\n /** No-op. Retained for source-compatibility; `useStandardActions`\n * registers the actions. */\n enableActions?: boolean;\n}\n\nconst isDev = typeof import.meta !== 'undefined'\n && (import.meta as { env?: { DEV?: boolean } }).env?.DEV;\n\n/** Bind the Boolean path operations to an adapter that knows how to read the\n * selection, fetch world-space paths and mint result nodes. */\nexport function useBooleans(\n adapter: BooleansAdapter,\n options: UseBooleansOptions = {},\n): UseBooleansReturn {\n const adapterRef = useLatest(adapter);\n const optionsRef = useLatest(options);\n\n const run = useCallback((op: BooleanOp) => {\n const result = applyBooleanOp(adapterRef.current, op, optionsRef.current);\n if (isDev && result.kind === 'noop' && result.reason === 'too-few-for-subtract') {\n console.warn('[useBooleans] subtract requires at least 2 selected paths');\n }\n }, [adapterRef, optionsRef]);\n\n return {\n union: useCallback(() => run('union'), [run]),\n intersect: useCallback(() => run('intersect'), [run]),\n subtract: useCallback(() => run('subtract'), [run]),\n exclude: useCallback(() => run('exclude'), [run]),\n divide: useCallback(() => run('divide'), [run]),\n crop: useCallback(() => run('crop'), [run]),\n trim: useCallback(() => run('trim'), [run]),\n merge: useCallback(() => run('merge'), [run]),\n };\n}\n"],"mappings":";;;AAmCA,SAAgBA,EACd,GACA,IAA8B,CAAC,GACZ;CACnB,IAAMC,IAAaC,EAAUC,CAAO,GAC9BC,IAAaF,EAAUG,CAAO,GAE9BC,IAAMC,GAAa,MAAkB;EAC1B,EAAeN,EAAW,SAASO,GAAIJ,EAAW,OAAO;CAI1E,GAAG,CAACH,GAAYG,CAAU,CAAC;CAE3B,OAAO;EACL,OAAOG,QAAkBD,EAAI,OAAO,GAAG,CAACA,CAAG,CAAC;EAC5C,WAAWC,QAAkBD,EAAI,WAAW,GAAG,CAACA,CAAG,CAAC;EACpD,UAAUC,QAAkBD,EAAI,UAAU,GAAG,CAACA,CAAG,CAAC;EAClD,SAASC,QAAkBD,EAAI,SAAS,GAAG,CAACA,CAAG,CAAC;EAChD,QAAQC,QAAkBD,EAAI,QAAQ,GAAG,CAACA,CAAG,CAAC;EAC9C,MAAMC,QAAkBD,EAAI,MAAM,GAAG,CAACA,CAAG,CAAC;EAC1C,MAAMC,QAAkBD,EAAI,MAAM,GAAG,CAACA,CAAG,CAAC;EAC1C,OAAOC,QAAkBD,EAAI,OAAO,GAAG,CAACA,CAAG,CAAC;CAC9C;AACF"}
1
+ {"version":3,"file":"useBooleans.js","names":[],"sources":["../../../../src/interactions/actions/booleans/useBooleans.ts"],"sourcesContent":["/**\n * `useBooleans` — selection-driven Boolean ops on path layers. No-ops are\n * silent in production; in dev, `subtract` with < 2 selected paths emits a\n * `console.warn`.\n */\nimport { useCallback } from 'react';\nimport { useLatest } from '@weasel-js/react';\nimport { applyBooleanOp, type BooleansAdapter, type BooleanOp } from './booleans';\nimport type { BooleanOpOptions } from './operands';\nimport { isDev } from '@weasel-js/react';\n\n/** The Boolean path operations, each acting on the current selection and\n * committing as one undo step. */\nexport interface UseBooleansReturn {\n union(): void;\n intersect(): void;\n subtract(): void;\n exclude(): void;\n divide(): void;\n crop(): void;\n trim(): void;\n merge(): void;\n}\n\n/** Options for `useBooleans`. */\nexport interface UseBooleansOptions extends BooleanOpOptions {\n /** No-op. Retained for source-compatibility; `useStandardActions`\n * registers the actions. */\n enableActions?: boolean;\n}\n\nconst dev = isDev();\n\n/** Bind the Boolean path operations to an adapter that knows how to read the\n * selection, fetch world-space paths and mint result nodes. */\nexport function useBooleans(\n adapter: BooleansAdapter,\n options: UseBooleansOptions = {},\n): UseBooleansReturn {\n const adapterRef = useLatest(adapter);\n const optionsRef = useLatest(options);\n\n const run = useCallback((op: BooleanOp) => {\n const result = applyBooleanOp(adapterRef.current, op, optionsRef.current);\n if (dev && result.kind === 'noop' && result.reason === 'too-few-for-subtract') {\n console.warn('[useBooleans] subtract requires at least 2 selected paths');\n }\n }, [adapterRef, optionsRef]);\n\n return {\n union: useCallback(() => run('union'), [run]),\n intersect: useCallback(() => run('intersect'), [run]),\n subtract: useCallback(() => run('subtract'), [run]),\n exclude: useCallback(() => run('exclude'), [run]),\n divide: useCallback(() => run('divide'), [run]),\n crop: useCallback(() => run('crop'), [run]),\n trim: useCallback(() => run('trim'), [run]),\n merge: useCallback(() => run('merge'), [run]),\n };\n}\n"],"mappings":";;;;;;;;;;AA+BA,IAAM,MAAM,MAAM;;;AAIlB,SAAgB,YACd,SACA,UAA8B,CAAC,GACZ;CACnB,MAAM,aAAa,UAAU,OAAO;CACpC,MAAM,aAAa,UAAU,OAAO;CAEpC,MAAM,MAAM,aAAa,OAAkB;EACzC,MAAM,SAAS,eAAe,WAAW,SAAS,IAAI,WAAW,OAAO;EACxE,IAAI,OAAO,OAAO,SAAS,UAAU,OAAO,WAAW,wBACrD,QAAQ,KAAK,2DAA2D;CAE5E,GAAG,CAAC,YAAY,UAAU,CAAC;CAE3B,OAAO;EACL,OAAO,kBAAkB,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC;EAC5C,WAAW,kBAAkB,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC;EACpD,UAAU,kBAAkB,IAAI,UAAU,GAAG,CAAC,GAAG,CAAC;EAClD,SAAS,kBAAkB,IAAI,SAAS,GAAG,CAAC,GAAG,CAAC;EAChD,QAAQ,kBAAkB,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC;EAC9C,MAAM,kBAAkB,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC;EAC1C,MAAM,kBAAkB,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC;EAC1C,OAAO,kBAAkB,IAAI,OAAO,GAAG,CAAC,GAAG,CAAC;CAC9C;AACF"}
@@ -1,9 +1,12 @@
1
- import { useDepSource as e } from "@weasel-js/routing/react";
1
+ import { useDepSource } from "@weasel-js/routing/react";
2
+
2
3
  //#region src/interactions/actions/booleans/useBooleansAdapter.ts
3
- function t(t) {
4
- e("booleansAdapter", () => t);
4
+ /** Publish a Boolean-ops adapter so the built-in Pathfinder actions can run.
5
+ * Silently does nothing outside a `<DepRegistryProvider>`. */
6
+ function useBooleansAdapter(adapter) {
7
+ useDepSource("booleansAdapter", () => adapter);
5
8
  }
6
- //#endregion
7
- export { t as useBooleansAdapter };
8
9
 
10
+ //#endregion
11
+ export { useBooleansAdapter };
9
12
  //# sourceMappingURL=useBooleansAdapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBooleansAdapter.js","names":["useBooleansAdapter","adapter"],"sources":["../../../../src/interactions/actions/booleans/useBooleansAdapter.ts"],"sourcesContent":["import { useDepSource } from '@weasel-js/routing/react';\nimport type { BooleansAdapter } from './booleans';\n\n/** Publish a Boolean-ops adapter so the built-in Pathfinder actions can run.\n * Silently does nothing outside a `<DepRegistryProvider>`. */\nexport function useBooleansAdapter(adapter: BooleansAdapter): void {\n useDepSource('booleansAdapter', () => adapter);\n}\n"],"mappings":";;AAKA,SAAgBA,EAAmB,GAAgC;CACjE,EAAa,yBAAyBC,CAAO;AAC/C"}
1
+ {"version":3,"file":"useBooleansAdapter.js","names":[],"sources":["../../../../src/interactions/actions/booleans/useBooleansAdapter.ts"],"sourcesContent":["import { useDepSource } from '@weasel-js/routing/react';\nimport type { BooleansAdapter } from './booleans';\n\n/** Publish a Boolean-ops adapter so the built-in Pathfinder actions can run.\n * Silently does nothing outside a `<DepRegistryProvider>`. */\nexport function useBooleansAdapter(adapter: BooleansAdapter): void {\n useDepSource('booleansAdapter', () => adapter);\n}\n"],"mappings":";;;;;AAKA,SAAgB,mBAAmB,SAAgC;CACjE,aAAa,yBAAyB,OAAO;AAC/C"}