@weasel-js/core 1.10.1 → 1.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1501) hide show
  1. package/CHANGELOG.md +1014 -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 +45 -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 +41 -39
  64. package/dist/barrel/paint.js +12 -11
  65. package/dist/barrel/paths.js +39 -13
  66. package/dist/barrel/renderer.js +25 -14
  67. package/dist/barrel/routing.js +64 -58
  68. package/dist/barrel/scene.js +51 -37
  69. package/dist/barrel/text.js +10 -9
  70. package/dist/barrel/viewport.js +48 -45
  71. package/dist/canvas/Canvas.js +191 -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 +124 -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/builtinToolSets.js +30 -0
  102. package/dist/canvas/SceneCanvas/builtinToolSets.js.map +1 -0
  103. package/dist/canvas/SceneCanvas/canvasPassThrough.js +73 -0
  104. package/dist/canvas/SceneCanvas/canvasPassThrough.js.map +1 -0
  105. package/dist/canvas/SceneCanvas/contributionFrameHooks.js +54 -32
  106. package/dist/canvas/SceneCanvas/contributionFrameHooks.js.map +1 -1
  107. package/dist/canvas/SceneCanvas/coordTrace.js +26 -30
  108. package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
  109. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +323 -159
  110. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
  111. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +39 -13
  112. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
  113. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +83 -47
  114. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
  115. package/dist/canvas/SceneCanvas/features.js +123 -106
  116. package/dist/canvas/SceneCanvas/features.js.map +1 -1
  117. package/dist/canvas/SceneCanvas/insertPreviewCommands.js +80 -62
  118. package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -1
  119. package/dist/canvas/SceneCanvas/mergeLayers.js +43 -0
  120. package/dist/canvas/SceneCanvas/mergeLayers.js.map +1 -0
  121. package/dist/canvas/SceneCanvas/namedPresets.js +56 -0
  122. package/dist/canvas/SceneCanvas/namedPresets.js.map +1 -0
  123. package/dist/canvas/SceneCanvas/poseGeometry.js +66 -31
  124. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
  125. package/dist/canvas/SceneCanvas/poseRegistrars.js +18 -8
  126. package/dist/canvas/SceneCanvas/poseRegistrars.js.map +1 -1
  127. package/dist/canvas/SceneCanvas/presets/arrange.js +27 -0
  128. package/dist/canvas/SceneCanvas/presets/arrange.js.map +1 -0
  129. package/dist/canvas/SceneCanvas/presets/chrome.js +14 -0
  130. package/dist/canvas/SceneCanvas/presets/chrome.js.map +1 -0
  131. package/dist/canvas/SceneCanvas/presets/edit.js +59 -0
  132. package/dist/canvas/SceneCanvas/presets/edit.js.map +1 -0
  133. package/dist/canvas/SceneCanvas/presets/ingest.js +13 -0
  134. package/dist/canvas/SceneCanvas/presets/ingest.js.map +1 -0
  135. package/dist/canvas/SceneCanvas/presets/paths.js +67 -0
  136. package/dist/canvas/SceneCanvas/presets/paths.js.map +1 -0
  137. package/dist/canvas/SceneCanvas/presets/select.js +19 -0
  138. package/dist/canvas/SceneCanvas/presets/select.js.map +1 -0
  139. package/dist/canvas/SceneCanvas/presets/toolDriven.js +20 -0
  140. package/dist/canvas/SceneCanvas/presets/toolDriven.js.map +1 -0
  141. package/dist/canvas/SceneCanvas/presets/transform.js +41 -0
  142. package/dist/canvas/SceneCanvas/presets/transform.js.map +1 -0
  143. package/dist/canvas/SceneCanvas/presets/view.js +14 -0
  144. package/dist/canvas/SceneCanvas/presets/view.js.map +1 -0
  145. package/dist/canvas/SceneCanvas/props.js +9 -35
  146. package/dist/canvas/SceneCanvas/props.js.map +1 -1
  147. package/dist/canvas/SceneCanvas/scenePointQuery.js +43 -35
  148. package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -1
  149. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +22 -15
  150. package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -1
  151. package/dist/canvas/SceneCanvas/toolRegistry.js +34 -15
  152. package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -1
  153. package/dist/canvas/SceneCanvas/useActionTunings.js +14 -11
  154. package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -1
  155. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +59 -36
  156. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
  157. package/dist/canvas/SceneCanvas/useBakedScene.js +17 -0
  158. package/dist/canvas/SceneCanvas/useBakedScene.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 +22 -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/useCanvasDevtoolsRoot.js +93 -0
  166. package/dist/canvas/SceneCanvas/useCanvasDevtoolsRoot.js.map +1 -0
  167. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +24 -14
  168. package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -1
  169. package/dist/canvas/SceneCanvas/useCanvasSelection.js +35 -12
  170. package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -1
  171. package/dist/canvas/SceneCanvas/useCanvasTools.js +112 -53
  172. package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -1
  173. package/dist/canvas/SceneCanvas/useChromeAffordances.js +31 -0
  174. package/dist/canvas/SceneCanvas/useChromeAffordances.js.map +1 -0
  175. package/dist/canvas/SceneCanvas/useContributionRoles.js +107 -56
  176. package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -1
  177. package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js +64 -0
  178. package/dist/canvas/SceneCanvas/useDepartureGhostLayer.js.map +1 -0
  179. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +104 -71
  180. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
  181. package/dist/canvas/SceneCanvas/useHeldModifiers.js +21 -14
  182. package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -1
  183. package/dist/canvas/SceneCanvas/useNodeAtPoint.js +21 -19
  184. package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -1
  185. package/dist/canvas/SceneCanvas/useNodeKinds.js +28 -19
  186. package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -1
  187. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +91 -59
  188. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
  189. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +62 -35
  190. package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -1
  191. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +121 -50
  192. package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -1
  193. package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js +30 -0
  194. package/dist/canvas/SceneCanvas/useSceneCanvasPathEdit.js.map +1 -0
  195. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js +38 -0
  196. package/dist/canvas/SceneCanvas/useSceneCanvasTools.js.map +1 -0
  197. package/dist/canvas/SceneCanvas/useSceneChrome.js +99 -44
  198. package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -1
  199. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js +165 -0
  200. package/dist/canvas/SceneCanvas/useSceneGestureDispatcher.js.map +1 -0
  201. package/dist/canvas/SceneCanvas/useScenePicking.js +68 -0
  202. package/dist/canvas/SceneCanvas/useScenePicking.js.map +1 -0
  203. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +28 -17
  204. package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -1
  205. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +160 -80
  206. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
  207. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +38 -26
  208. package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -1
  209. package/dist/canvas/SceneCanvas/useSceneStandardActions.js +107 -0
  210. package/dist/canvas/SceneCanvas/useSceneStandardActions.js.map +1 -0
  211. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +40 -27
  212. package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -1
  213. package/dist/canvas/SceneCanvas/useSurfaceRouting.js +29 -0
  214. package/dist/canvas/SceneCanvas/useSurfaceRouting.js.map +1 -0
  215. package/dist/canvas/SceneCanvas/useSurfaceViewInputs.js +44 -0
  216. package/dist/canvas/SceneCanvas/useSurfaceViewInputs.js.map +1 -0
  217. package/dist/canvas/SceneCanvas/useToolKeybindings.js +28 -0
  218. package/dist/canvas/SceneCanvas/useToolKeybindings.js.map +1 -0
  219. package/dist/canvas/SceneCanvas/useViewportActions.js +52 -28
  220. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
  221. package/dist/canvas/SceneCanvas/worldPointAt.js +10 -4
  222. package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -1
  223. package/dist/canvas/SceneCanvas.js +276 -312
  224. package/dist/canvas/SceneCanvas.js.map +1 -1
  225. package/dist/canvas/SceneViewCanvas.js +68 -42
  226. package/dist/canvas/SceneViewCanvas.js.map +1 -1
  227. package/dist/canvas/SurfaceCanvas.js +38 -33
  228. package/dist/canvas/SurfaceCanvas.js.map +1 -1
  229. package/dist/canvas/accentColor.js +8 -5
  230. package/dist/canvas/accentColor.js.map +1 -1
  231. package/dist/canvas/adapterDerivedPath.js +33 -18
  232. package/dist/canvas/adapterDerivedPath.js.map +1 -1
  233. package/dist/canvas/adapterPickSource.js +49 -23
  234. package/dist/canvas/adapterPickSource.js.map +1 -1
  235. package/dist/canvas/affordanceAt.js +106 -50
  236. package/dist/canvas/affordanceAt.js.map +1 -1
  237. package/dist/canvas/buildSceneLayer.js +111 -80
  238. package/dist/canvas/buildSceneLayer.js.map +1 -1
  239. package/dist/canvas/buildSceneTree.js +101 -59
  240. package/dist/canvas/buildSceneTree.js.map +1 -1
  241. package/dist/canvas/canvasRenderer.js +161 -72
  242. package/dist/canvas/canvasRenderer.js.map +1 -1
  243. package/dist/canvas/colorOverrides.js +18 -10
  244. package/dist/canvas/colorOverrides.js.map +1 -1
  245. package/dist/canvas/contextAttributes.js +14 -0
  246. package/dist/canvas/contextAttributes.js.map +1 -0
  247. package/dist/canvas/copiesAbove.js +24 -14
  248. package/dist/canvas/copiesAbove.js.map +1 -1
  249. package/dist/canvas/defaultDrawOne.js +55 -31
  250. package/dist/canvas/defaultDrawOne.js.map +1 -1
  251. package/dist/canvas/deps/areaSelect.js +30 -12
  252. package/dist/canvas/deps/areaSelect.js.map +1 -1
  253. package/dist/canvas/deps/booleans.js +104 -0
  254. package/dist/canvas/deps/booleans.js.map +1 -0
  255. package/dist/canvas/deps/changes.js +17 -9
  256. package/dist/canvas/deps/changes.js.map +1 -1
  257. package/dist/canvas/deps/debug.js +12 -5
  258. package/dist/canvas/deps/debug.js.map +1 -1
  259. package/dist/canvas/deps/dispatchSources.js +27 -0
  260. package/dist/canvas/deps/dispatchSources.js.map +1 -0
  261. package/dist/canvas/deps/dispatcher.js +18 -7
  262. package/dist/canvas/deps/dispatcher.js.map +1 -1
  263. package/dist/canvas/deps/editAnchors.js +150 -64
  264. package/dist/canvas/deps/editAnchors.js.map +1 -1
  265. package/dist/canvas/deps/geometryProjection.js +13 -7
  266. package/dist/canvas/deps/geometryProjection.js.map +1 -1
  267. package/dist/canvas/deps/hitTestArea.js +78 -53
  268. package/dist/canvas/deps/hitTestArea.js.map +1 -1
  269. package/dist/canvas/deps/ingestion.js +18 -13
  270. package/dist/canvas/deps/ingestion.js.map +1 -1
  271. package/dist/canvas/deps/insert.js +178 -116
  272. package/dist/canvas/deps/insert.js.map +1 -1
  273. package/dist/canvas/deps/kitSettings.js +16 -0
  274. package/dist/canvas/deps/kitSettings.js.map +1 -0
  275. package/dist/canvas/deps/lassoSelect.js +25 -13
  276. package/dist/canvas/deps/lassoSelect.js.map +1 -1
  277. package/dist/canvas/deps/layout.js +32 -20
  278. package/dist/canvas/deps/layout.js.map +1 -1
  279. package/dist/canvas/deps/nodeAtPoint.js +28 -14
  280. package/dist/canvas/deps/nodeAtPoint.js.map +1 -1
  281. package/dist/canvas/deps/pathEditCommits.js +193 -0
  282. package/dist/canvas/deps/pathEditCommits.js.map +1 -0
  283. package/dist/canvas/deps/pathLeaf.js +66 -0
  284. package/dist/canvas/deps/pathLeaf.js.map +1 -0
  285. package/dist/canvas/deps/pathLeafDeps.js +13 -0
  286. package/dist/canvas/deps/pathLeafDeps.js.map +1 -0
  287. package/dist/canvas/deps/poseDescriptor.js +10 -8
  288. package/dist/canvas/deps/poseDescriptor.js.map +1 -1
  289. package/dist/canvas/deps/previewPaths.js +44 -0
  290. package/dist/canvas/deps/previewPaths.js.map +1 -0
  291. package/dist/canvas/deps/resizePolicy.js +32 -25
  292. package/dist/canvas/deps/resizePolicy.js.map +1 -1
  293. package/dist/canvas/deps/slice.js +73 -87
  294. package/dist/canvas/deps/slice.js.map +1 -1
  295. package/dist/canvas/deps/snap.js +61 -7
  296. package/dist/canvas/deps/snap.js.map +1 -1
  297. package/dist/canvas/deps/surface.js +30 -0
  298. package/dist/canvas/deps/surface.js.map +1 -0
  299. package/dist/canvas/deps/textEdit.js +21 -13
  300. package/dist/canvas/deps/textEdit.js.map +1 -1
  301. package/dist/canvas/deps/transformFollowers.js +20 -0
  302. package/dist/canvas/deps/transformFollowers.js.map +1 -0
  303. package/dist/canvas/deps/view.js +46 -34
  304. package/dist/canvas/deps/view.js.map +1 -1
  305. package/dist/canvas/derivedPath.js +173 -70
  306. package/dist/canvas/derivedPath.js.map +1 -1
  307. package/dist/canvas/doubleClickTarget.js +20 -0
  308. package/dist/canvas/doubleClickTarget.js.map +1 -0
  309. package/dist/canvas/drawEnvelope.js +26 -17
  310. package/dist/canvas/drawEnvelope.js.map +1 -1
  311. package/dist/canvas/drawnBounds.js +142 -0
  312. package/dist/canvas/drawnBounds.js.map +1 -0
  313. package/dist/canvas/getNodeAtPoint.js +11 -8
  314. package/dist/canvas/getNodeAtPoint.js.map +1 -1
  315. package/dist/canvas/hostAnchor.js +35 -18
  316. package/dist/canvas/hostAnchor.js.map +1 -1
  317. package/dist/canvas/hud.module.js +25 -14
  318. package/dist/canvas/hud.module.js.map +1 -1
  319. package/dist/canvas/insertPreviewExtent.js +82 -61
  320. package/dist/canvas/insertPreviewExtent.js.map +1 -1
  321. package/dist/canvas/kitRequirements.js +154 -115
  322. package/dist/canvas/kitRequirements.js.map +1 -1
  323. package/dist/canvas/layerHover.js +28 -0
  324. package/dist/canvas/layerHover.js.map +1 -0
  325. package/dist/canvas/layerOrder.js +107 -57
  326. package/dist/canvas/layerOrder.js.map +1 -1
  327. package/dist/canvas/layerSlots.js +16 -9
  328. package/dist/canvas/layerSlots.js.map +1 -1
  329. package/dist/canvas/mountedCanvases.js +23 -13
  330. package/dist/canvas/mountedCanvases.js.map +1 -1
  331. package/dist/canvas/nodeShapes/derivedPainter.js +73 -25
  332. package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
  333. package/dist/canvas/nodeShapes/imagePainter.js +69 -53
  334. package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
  335. package/dist/canvas/nodeShapes/measurePainter.js +58 -0
  336. package/dist/canvas/nodeShapes/measurePainter.js.map +1 -0
  337. package/dist/canvas/nodeShapes/memo.js +16 -5
  338. package/dist/canvas/nodeShapes/memo.js.map +1 -1
  339. package/dist/canvas/nodeShapes/nodePaint.js +125 -46
  340. package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
  341. package/dist/canvas/nodeShapes/pathPainter.js +42 -27
  342. package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
  343. package/dist/canvas/nodeShapes/poseBox.js +20 -13
  344. package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
  345. package/dist/canvas/nodeShapes/rectFallbackPainter.js +26 -22
  346. package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
  347. package/dist/canvas/nodeShapes/shapePainter.js +67 -46
  348. package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
  349. package/dist/canvas/nodeShapes/strokedBounds.js +177 -0
  350. package/dist/canvas/nodeShapes/strokedBounds.js.map +1 -0
  351. package/dist/canvas/nodeShapes/textPainter.js +170 -37
  352. package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
  353. package/dist/canvas/overChildren.js +29 -18
  354. package/dist/canvas/overChildren.js.map +1 -1
  355. package/dist/canvas/overlayRoleStrokes.js +32 -3
  356. package/dist/canvas/overlayRoleStrokes.js.map +1 -1
  357. package/dist/canvas/paintCull.js +24 -12
  358. package/dist/canvas/paintCull.js.map +1 -1
  359. package/dist/canvas/paintedCursorLayer.js +59 -35
  360. package/dist/canvas/paintedCursorLayer.js.map +1 -1
  361. package/dist/canvas/pathOverlay.js +83 -0
  362. package/dist/canvas/pathOverlay.js.map +1 -0
  363. package/dist/canvas/pickReach.js +34 -17
  364. package/dist/canvas/pickReach.js.map +1 -1
  365. package/dist/canvas/pickWalk.js +151 -102
  366. package/dist/canvas/pickWalk.js.map +1 -1
  367. package/dist/canvas/planeClips.js +39 -22
  368. package/dist/canvas/planeClips.js.map +1 -1
  369. package/dist/canvas/poseCascade.js +51 -27
  370. package/dist/canvas/poseCascade.js.map +1 -1
  371. package/dist/canvas/poseRotation.js +24 -14
  372. package/dist/canvas/poseRotation.js.map +1 -1
  373. package/dist/canvas/rasterReadback.js +23 -15
  374. package/dist/canvas/rasterReadback.js.map +1 -1
  375. package/dist/canvas/rasterToPng.js +21 -15
  376. package/dist/canvas/rasterToPng.js.map +1 -1
  377. package/dist/canvas/renderDebugSnapshot.js +37 -19
  378. package/dist/canvas/renderDebugSnapshot.js.map +1 -1
  379. package/dist/canvas/renderNeeds.js +33 -18
  380. package/dist/canvas/renderNeeds.js.map +1 -1
  381. package/dist/canvas/renderSceneToPixels.js +203 -87
  382. package/dist/canvas/renderSceneToPixels.js.map +1 -1
  383. package/dist/canvas/sceneAdapter.js +96 -75
  384. package/dist/canvas/sceneAdapter.js.map +1 -1
  385. package/dist/canvas/sceneClipboard.js +141 -92
  386. package/dist/canvas/sceneClipboard.js.map +1 -1
  387. package/dist/canvas/sceneLayerPaint.js +56 -27
  388. package/dist/canvas/sceneLayerPaint.js.map +1 -1
  389. package/dist/canvas/sceneSlotWiring.js +24 -14
  390. package/dist/canvas/sceneSlotWiring.js.map +1 -1
  391. package/dist/canvas/sceneViewRender.js +85 -49
  392. package/dist/canvas/sceneViewRender.js.map +1 -1
  393. package/dist/canvas/slopsDebugLayer.js +58 -49
  394. package/dist/canvas/slopsDebugLayer.js.map +1 -1
  395. package/dist/canvas/surfaceContribution.js +22 -10
  396. package/dist/canvas/surfaceContribution.js.map +1 -1
  397. package/dist/canvas/useCanvasElements.js +31 -0
  398. package/dist/canvas/useCanvasElements.js.map +1 -0
  399. package/dist/canvas/useCanvasHandle.js +69 -0
  400. package/dist/canvas/useCanvasHandle.js.map +1 -0
  401. package/dist/canvas/useCanvasPaint.js +92 -0
  402. package/dist/canvas/useCanvasPaint.js.map +1 -0
  403. package/dist/canvas/useCanvasRenderer.js +45 -23
  404. package/dist/canvas/useCanvasRenderer.js.map +1 -1
  405. package/dist/canvas/useCanvasSurface.js +41 -23
  406. package/dist/canvas/useCanvasSurface.js.map +1 -1
  407. package/dist/canvas/useCanvasView.js +80 -48
  408. package/dist/canvas/useCanvasView.js.map +1 -1
  409. package/dist/canvas/useClientToWorld.js +27 -0
  410. package/dist/canvas/useClientToWorld.js.map +1 -0
  411. package/dist/canvas/useExtraLayers.js +45 -0
  412. package/dist/canvas/useExtraLayers.js.map +1 -0
  413. package/dist/canvas/useFrameLoop.js +109 -49
  414. package/dist/canvas/useFrameLoop.js.map +1 -1
  415. package/dist/canvas/useHitObserver.js +22 -15
  416. package/dist/canvas/useHitObserver.js.map +1 -1
  417. package/dist/canvas/useHostAnchor.js +83 -53
  418. package/dist/canvas/useHostAnchor.js.map +1 -1
  419. package/dist/canvas/useInFlightBounds.js +52 -0
  420. package/dist/canvas/useInFlightBounds.js.map +1 -0
  421. package/dist/canvas/useLateContentRedraw.js +21 -14
  422. package/dist/canvas/useLateContentRedraw.js.map +1 -1
  423. package/dist/canvas/useLayerStack.js +72 -0
  424. package/dist/canvas/useLayerStack.js.map +1 -0
  425. package/dist/canvas/usePaintedCursor.js +28 -0
  426. package/dist/canvas/usePaintedCursor.js.map +1 -0
  427. package/dist/canvas/useRedrawOn.js +24 -14
  428. package/dist/canvas/useRedrawOn.js.map +1 -1
  429. package/dist/canvas/useSceneAdapter.js +21 -16
  430. package/dist/canvas/useSceneAdapter.js.map +1 -1
  431. package/dist/canvas/useSceneLayerList.js +15 -7
  432. package/dist/canvas/useSceneLayerList.js.map +1 -1
  433. package/dist/canvas/useSurfaceInput.js +46 -27
  434. package/dist/canvas/useSurfaceInput.js.map +1 -1
  435. package/dist/canvas/useSurfaceSize.js +43 -0
  436. package/dist/canvas/useSurfaceSize.js.map +1 -0
  437. package/dist/canvas/useToolCursor.js +30 -21
  438. package/dist/canvas/useToolCursor.js.map +1 -1
  439. package/dist/canvas/useViewHelpers.js +110 -61
  440. package/dist/canvas/useViewHelpers.js.map +1 -1
  441. package/dist/canvas/useViewLayerGate.js +29 -0
  442. package/dist/canvas/useViewLayerGate.js.map +1 -0
  443. package/dist/canvas/useViewNesting.js +104 -0
  444. package/dist/canvas/useViewNesting.js.map +1 -0
  445. package/dist/canvas/useViewRegistrySurface.js +44 -0
  446. package/dist/canvas/useViewRegistrySurface.js.map +1 -0
  447. package/dist/canvas/viewInputs.js +14 -11
  448. package/dist/canvas/viewInputs.js.map +1 -1
  449. package/dist/canvas/viewRegistry.js +140 -42
  450. package/dist/canvas/viewRegistry.js.map +1 -1
  451. package/dist/canvas/watchElementMove.js +71 -33
  452. package/dist/canvas/watchElementMove.js.map +1 -1
  453. package/dist/canvas/wrapNodeOutput.js +20 -13
  454. package/dist/canvas/wrapNodeOutput.js.map +1 -1
  455. package/dist/clipboard.d.ts +9 -4
  456. package/dist/clipboard.js +4 -3
  457. package/dist/{clone-C0eADtS0.d.ts → clone-C3e0OTuF.d.ts} +27 -73
  458. package/dist/clone.d.ts +7 -5
  459. package/dist/core/adapters/testing/rootsTree.js +17 -0
  460. package/dist/core/adapters/testing/rootsTree.js.map +1 -0
  461. package/dist/core/applyOps.js +23 -7
  462. package/dist/core/applyOps.js.map +1 -1
  463. package/dist/core/device/index.js +6 -5
  464. package/dist/core/device/targets.js +29 -8
  465. package/dist/core/device/targets.js.map +1 -1
  466. package/dist/core/device/useDeviceProfile.js +86 -52
  467. package/dist/core/device/useDeviceProfile.js.map +1 -1
  468. package/dist/core/device/useTargetBasePx.js +23 -0
  469. package/dist/core/device/useTargetBasePx.js.map +1 -0
  470. package/dist/core/device/watchDevicePixelRatio.js +27 -10
  471. package/dist/core/device/watchDevicePixelRatio.js.map +1 -1
  472. package/dist/core/geometry/autoPoseDescriptor.js +38 -24
  473. package/dist/core/geometry/autoPoseDescriptor.js.map +1 -1
  474. package/dist/core/geometry/inkExtents.js +60 -0
  475. package/dist/core/geometry/inkExtents.js.map +1 -0
  476. package/dist/core/geometry/pathPoseDescriptor.js +101 -76
  477. package/dist/core/geometry/pathPoseDescriptor.js.map +1 -1
  478. package/dist/core/geometry/poseDescriptor.js +199 -136
  479. package/dist/core/geometry/poseDescriptor.js.map +1 -1
  480. package/dist/core/geometry/regionHit.js +127 -79
  481. package/dist/core/geometry/regionHit.js.map +1 -1
  482. package/dist/core/geometry/targetFrame.js +84 -60
  483. package/dist/core/geometry/targetFrame.js.map +1 -1
  484. package/dist/core/geometry/unionBounds.js +103 -48
  485. package/dist/core/geometry/unionBounds.js.map +1 -1
  486. package/dist/core/isPlainObject.js +3 -2
  487. package/dist/core/layers/backgroundFill.js +23 -15
  488. package/dist/core/layers/backgroundFill.js.map +1 -1
  489. package/dist/core/layers/children.js +16 -13
  490. package/dist/core/layers/children.js.map +1 -1
  491. package/dist/core/layers/gateLayer.js +24 -9
  492. package/dist/core/layers/gateLayer.js.map +1 -1
  493. package/dist/core/layers/layerGroup.js +42 -29
  494. package/dist/core/layers/layerGroup.js.map +1 -1
  495. package/dist/core/layers/redrawSource.js +15 -0
  496. package/dist/core/layers/redrawSource.js.map +1 -0
  497. package/dist/core/layers/render.js +183 -93
  498. package/dist/core/layers/render.js.map +1 -1
  499. package/dist/core/layers/retain.js +38 -0
  500. package/dist/core/layers/retain.js.map +1 -0
  501. package/dist/core/ops/arrange.js +30 -19
  502. package/dist/core/ops/arrange.js.map +1 -1
  503. package/dist/core/ops/create.js +32 -23
  504. package/dist/core/ops/create.js.map +1 -1
  505. package/dist/core/ops/createHistory.js +23 -14
  506. package/dist/core/ops/createHistory.js.map +1 -1
  507. package/dist/core/ops/delete.js +80 -53
  508. package/dist/core/ops/delete.js.map +1 -1
  509. package/dist/core/ops/nodeFlags.js +44 -0
  510. package/dist/core/ops/nodeFlags.js.map +1 -0
  511. package/dist/core/ops/registry.js +26 -11
  512. package/dist/core/ops/registry.js.map +1 -1
  513. package/dist/core/ops/reorder/algorithms.js +62 -38
  514. package/dist/core/ops/reorder/algorithms.js.map +1 -1
  515. package/dist/core/ops/reorder/index.js +124 -84
  516. package/dist/core/ops/reorder/index.js.map +1 -1
  517. package/dist/core/ops/reorder/setChildOrder.js +32 -23
  518. package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
  519. package/dist/core/ops/reparent.js +63 -37
  520. package/dist/core/ops/reparent.js.map +1 -1
  521. package/dist/core/ops/select.js +23 -20
  522. package/dist/core/ops/select.js.map +1 -1
  523. package/dist/core/ops/setData.js +23 -21
  524. package/dist/core/ops/setData.js.map +1 -1
  525. package/dist/core/ops/setDependsOn.js +37 -0
  526. package/dist/core/ops/setDependsOn.js.map +1 -0
  527. package/dist/core/ops/setLayer.js +26 -21
  528. package/dist/core/ops/setLayer.js.map +1 -1
  529. package/dist/core/ops/setLayout.js +27 -18
  530. package/dist/core/ops/setLayout.js.map +1 -1
  531. package/dist/core/ops/setPath.js +60 -41
  532. package/dist/core/ops/setPath.js.map +1 -1
  533. package/dist/core/ops/setText.js +26 -21
  534. package/dist/core/ops/setText.js.map +1 -1
  535. package/dist/core/ops/slot.js +36 -22
  536. package/dist/core/ops/slot.js.map +1 -1
  537. package/dist/core/ops/transform.js +35 -28
  538. package/dist/core/ops/transform.js.map +1 -1
  539. package/dist/core/ops/writtenBy.js +53 -0
  540. package/dist/core/ops/writtenBy.js.map +1 -0
  541. package/dist/core/pages/fitViewToPage.js +24 -11
  542. package/dist/core/pages/fitViewToPage.js.map +1 -1
  543. package/dist/core/pages/pageEdits.js +164 -0
  544. package/dist/core/pages/pageEdits.js.map +1 -0
  545. package/dist/core/pages/pages.js +102 -42
  546. package/dist/core/pages/pages.js.map +1 -1
  547. package/dist/core/pages/pagesLayer.js +19 -13
  548. package/dist/core/pages/pagesLayer.js.map +1 -1
  549. package/dist/core/paint/meshKind.js +16 -11
  550. package/dist/core/paint/meshKind.js.map +1 -1
  551. package/dist/core/paint/meshKindLazy.js +1 -1
  552. package/dist/core/paint/meshKindLazy.js.map +1 -1
  553. package/dist/core/paint/paintKindEntry.js +13 -4
  554. package/dist/core/paint/paintKindEntry.js.map +1 -1
  555. package/dist/core/paint/paintKinds.js +149 -88
  556. package/dist/core/paint/paintKinds.js.map +1 -1
  557. package/dist/core/paint/registerMesh.js +6 -4
  558. package/dist/core/paint/registerMesh.js.map +1 -1
  559. package/dist/core/scene/NodeProperties.js +15 -10
  560. package/dist/core/scene/NodeProperties.js.map +1 -1
  561. package/dist/core/scene/NodeRouting.js +22 -13
  562. package/dist/core/scene/NodeRouting.js.map +1 -1
  563. package/dist/core/scene/annotation.js +28 -0
  564. package/dist/core/scene/annotation.js.map +1 -0
  565. package/dist/core/scene/appliedLog.js +31 -23
  566. package/dist/core/scene/appliedLog.js.map +1 -1
  567. package/dist/core/scene/arrivalWindow.js +120 -75
  568. package/dist/core/scene/arrivalWindow.js.map +1 -1
  569. package/dist/core/scene/arrivals.js +17 -6
  570. package/dist/core/scene/arrivals.js.map +1 -1
  571. package/dist/core/scene/boundOps.js +42 -23
  572. package/dist/core/scene/boundOps.js.map +1 -1
  573. package/dist/core/scene/carryDescendants.js +51 -0
  574. package/dist/core/scene/carryDescendants.js.map +1 -0
  575. package/dist/core/scene/composeFrame.js +51 -21
  576. package/dist/core/scene/composeFrame.js.map +1 -1
  577. package/dist/core/scene/composePose.js +114 -62
  578. package/dist/core/scene/composePose.js.map +1 -1
  579. package/dist/core/scene/depFrame.js +94 -0
  580. package/dist/core/scene/depFrame.js.map +1 -0
  581. package/dist/core/scene/depMemo.js +44 -19
  582. package/dist/core/scene/depMemo.js.map +1 -1
  583. package/dist/core/scene/dependents.js +73 -45
  584. package/dist/core/scene/dependents.js.map +1 -1
  585. package/dist/core/scene/derivedParts.js +58 -0
  586. package/dist/core/scene/derivedParts.js.map +1 -0
  587. package/dist/core/scene/derivedPath.js +52 -22
  588. package/dist/core/scene/derivedPath.js.map +1 -1
  589. package/dist/core/scene/docValues.js +57 -0
  590. package/dist/core/scene/docValues.js.map +1 -0
  591. package/dist/core/scene/editMode.js +11 -11
  592. package/dist/core/scene/editMode.js.map +1 -1
  593. package/dist/core/scene/editPass.js +111 -0
  594. package/dist/core/scene/editPass.js.map +1 -0
  595. package/dist/core/scene/effectivePose.js +173 -51
  596. package/dist/core/scene/effectivePose.js.map +1 -1
  597. package/dist/core/scene/fieldEdits.js +98 -75
  598. package/dist/core/scene/fieldEdits.js.map +1 -1
  599. package/dist/core/scene/historyFacade.js +127 -87
  600. package/dist/core/scene/historyFacade.js.map +1 -1
  601. package/dist/core/scene/historyForm.js +7 -3
  602. package/dist/core/scene/historyForm.js.map +1 -1
  603. package/dist/core/scene/kitOps.js +203 -131
  604. package/dist/core/scene/kitOps.js.map +1 -1
  605. package/dist/core/scene/kitRegistry.js +49 -22
  606. package/dist/core/scene/kitRegistry.js.map +1 -1
  607. package/dist/core/scene/layerStack.js +123 -92
  608. package/dist/core/scene/layerStack.js.map +1 -1
  609. package/dist/core/scene/layoutPass.js +143 -72
  610. package/dist/core/scene/layoutPass.js.map +1 -1
  611. package/dist/core/scene/lockGuard.js +32 -24
  612. package/dist/core/scene/lockGuard.js.map +1 -1
  613. package/dist/core/scene/minSize.js +17 -0
  614. package/dist/core/scene/minSize.js.map +1 -0
  615. package/dist/core/scene/nestedHit.js +45 -31
  616. package/dist/core/scene/nestedHit.js.map +1 -1
  617. package/dist/core/scene/nodeFlags.js +43 -0
  618. package/dist/core/scene/nodeFlags.js.map +1 -0
  619. package/dist/core/scene/nodeFnFields.js +58 -41
  620. package/dist/core/scene/nodeFnFields.js.map +1 -1
  621. package/dist/core/scene/nodeGates.js +58 -0
  622. package/dist/core/scene/nodeGates.js.map +1 -0
  623. package/dist/core/scene/nodeMemo.js +92 -40
  624. package/dist/core/scene/nodeMemo.js.map +1 -1
  625. package/dist/core/scene/nodeStore.js +179 -99
  626. package/dist/core/scene/nodeStore.js.map +1 -1
  627. package/dist/core/scene/notifier.js +30 -19
  628. package/dist/core/scene/notifier.js.map +1 -1
  629. package/dist/core/scene/opTable.js +42 -36
  630. package/dist/core/scene/opTable.js.map +1 -1
  631. package/dist/core/scene/outerOps.js +49 -43
  632. package/dist/core/scene/outerOps.js.map +1 -1
  633. package/dist/core/scene/pathEffects/blend.js +80 -0
  634. package/dist/core/scene/pathEffects/blend.js.map +1 -0
  635. package/dist/core/scene/pathEffects/derive.js +112 -0
  636. package/dist/core/scene/pathEffects/derive.js.map +1 -0
  637. package/dist/core/scene/pathEffects/effects.js +40 -0
  638. package/dist/core/scene/pathEffects/effects.js.map +1 -0
  639. package/dist/core/scene/poseFeed.js +95 -60
  640. package/dist/core/scene/poseFeed.js.map +1 -1
  641. package/dist/core/scene/poseHold.js +33 -24
  642. package/dist/core/scene/poseHold.js.map +1 -1
  643. package/dist/core/scene/poseOverrides.js +86 -49
  644. package/dist/core/scene/poseOverrides.js.map +1 -1
  645. package/dist/core/scene/poseRemovals.js +58 -0
  646. package/dist/core/scene/poseRemovals.js.map +1 -0
  647. package/dist/core/scene/poseSnapshot.js +62 -41
  648. package/dist/core/scene/poseSnapshot.js.map +1 -1
  649. package/dist/core/scene/poseWrites.js +151 -0
  650. package/dist/core/scene/poseWrites.js.map +1 -0
  651. package/dist/core/scene/reconcileSpecs.js +63 -34
  652. package/dist/core/scene/reconcileSpecs.js.map +1 -1
  653. package/dist/core/scene/recorder.js +99 -57
  654. package/dist/core/scene/recorder.js.map +1 -1
  655. package/dist/core/scene/renderOrder.js +105 -59
  656. package/dist/core/scene/renderOrder.js.map +1 -1
  657. package/dist/core/scene/scene.js +139 -80
  658. package/dist/core/scene/scene.js.map +1 -1
  659. package/dist/core/scene/sceneChanges.js +13 -0
  660. package/dist/core/scene/sceneChanges.js.map +1 -0
  661. package/dist/core/scene/sceneEdits.js +69 -49
  662. package/dist/core/scene/sceneEdits.js.map +1 -1
  663. package/dist/core/scene/sceneMutators.js +45 -36
  664. package/dist/core/scene/sceneMutators.js.map +1 -1
  665. package/dist/core/scene/scenePoseAdapter.js +13 -9
  666. package/dist/core/scene/scenePoseAdapter.js.map +1 -1
  667. package/dist/core/scene/sceneRecording.js +106 -73
  668. package/dist/core/scene/sceneRecording.js.map +1 -1
  669. package/dist/core/scene/sceneSelection.js +26 -16
  670. package/dist/core/scene/sceneSelection.js.map +1 -1
  671. package/dist/core/scene/sceneState.js +61 -37
  672. package/dist/core/scene/sceneState.js.map +1 -1
  673. package/dist/core/scene/serialization.js +89 -50
  674. package/dist/core/scene/serialization.js.map +1 -1
  675. package/dist/core/scene/staleReplay.js +35 -26
  676. package/dist/core/scene/staleReplay.js.map +1 -1
  677. package/dist/core/scene/statedFields.js +10 -5
  678. package/dist/core/scene/statedFields.js.map +1 -1
  679. package/dist/core/scene/treeEdits.js +129 -98
  680. package/dist/core/scene/treeEdits.js.map +1 -1
  681. package/dist/core/scene/treeOrder.js +13 -8
  682. package/dist/core/scene/treeOrder.js.map +1 -1
  683. package/dist/core/scene/treeReads.js +25 -16
  684. package/dist/core/scene/treeReads.js.map +1 -1
  685. package/dist/core/scene/types.js +4 -3
  686. package/dist/core/scene/types.js.map +1 -1
  687. package/dist/core/scene/unionOfChildren.js +20 -10
  688. package/dist/core/scene/unionOfChildren.js.map +1 -1
  689. package/dist/core/scene/unitScopes.js +33 -8
  690. package/dist/core/scene/unitScopes.js.map +1 -1
  691. package/dist/core/scene/useScene.js +32 -24
  692. package/dist/core/scene/useScene.js.map +1 -1
  693. package/dist/core/selection/chromeState.js +41 -17
  694. package/dist/core/selection/chromeState.js.map +1 -1
  695. package/dist/core/selection/readOnlySelection.js +39 -24
  696. package/dist/core/selection/readOnlySelection.js.map +1 -1
  697. package/dist/core/selection/selectionTarget.js +14 -3
  698. package/dist/core/selection/selectionTarget.js.map +1 -1
  699. package/dist/core/selection/usePublishSceneSelection.js +20 -19
  700. package/dist/core/selection/usePublishSceneSelection.js.map +1 -1
  701. package/dist/core/selection/useSelection.js +90 -57
  702. package/dist/core/selection/useSelection.js.map +1 -1
  703. package/dist/core/shapeKinds.js +57 -28
  704. package/dist/core/shapeKinds.js.map +1 -1
  705. package/dist/core/stableStringify.js +5 -4
  706. package/dist/core/stableStringify.js.map +1 -1
  707. package/dist/core/stylus/stylus.js +49 -25
  708. package/dist/core/stylus/stylus.js.map +1 -1
  709. package/dist/core/stylus/usePointerStylus.js +61 -34
  710. package/dist/core/stylus/usePointerStylus.js.map +1 -1
  711. package/dist/core/usePaintKinds.js +21 -11
  712. package/dist/core/usePaintKinds.js.map +1 -1
  713. package/dist/core/viewport/clampView.js +31 -15
  714. package/dist/core/viewport/clampView.js.map +1 -1
  715. package/dist/core/viewport/clientToWorld.js +15 -4
  716. package/dist/core/viewport/clientToWorld.js.map +1 -1
  717. package/dist/core/viewport/createVelocityTracker.js +23 -19
  718. package/dist/core/viewport/createVelocityTracker.js.map +1 -1
  719. package/dist/core/viewport/fitToBounds.js +28 -11
  720. package/dist/core/viewport/fitToBounds.js.map +1 -1
  721. package/dist/core/viewport/fitViewToBounds.js +45 -19
  722. package/dist/core/viewport/fitViewToBounds.js.map +1 -1
  723. package/dist/core/viewport/interpolateView.js +40 -20
  724. package/dist/core/viewport/interpolateView.js.map +1 -1
  725. package/dist/core/viewport/parallax.js +89 -56
  726. package/dist/core/viewport/parallax.js.map +1 -1
  727. package/dist/core/viewport/sceneNodeClientRect.js +21 -12
  728. package/dist/core/viewport/sceneNodeClientRect.js.map +1 -1
  729. package/dist/core/viewport/screenSlop.js +40 -17
  730. package/dist/core/viewport/screenSlop.js.map +1 -1
  731. package/dist/core/viewport/useAutoCenter.js +36 -22
  732. package/dist/core/viewport/useAutoCenter.js.map +1 -1
  733. package/dist/core/viewport/useCanvasSize.js +43 -22
  734. package/dist/core/viewport/useCanvasSize.js.map +1 -1
  735. package/dist/core/viewport/useDecayLoop.js +120 -48
  736. package/dist/core/viewport/useDecayLoop.js.map +1 -1
  737. package/dist/core/viewport/useNodeOverlayFrame.js +93 -58
  738. package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -1
  739. package/dist/core/viewport/useVelocityTracker.js +9 -6
  740. package/dist/core/viewport/useVelocityTracker.js.map +1 -1
  741. package/dist/core/viewport/useViewAnimation.js +143 -84
  742. package/dist/core/viewport/useViewAnimation.js.map +1 -1
  743. package/dist/core/viewport/view.js +48 -24
  744. package/dist/core/viewport/view.js.map +1 -1
  745. package/dist/core/viewport/viewTransform.js +8 -6
  746. package/dist/core/viewport/viewTransform.js.map +1 -1
  747. package/dist/core/viewport/viewportWorldRect.js +15 -7
  748. package/dist/core/viewport/viewportWorldRect.js.map +1 -1
  749. package/dist/core/viewport/wheelHandler.js +31 -20
  750. package/dist/core/viewport/wheelHandler.js.map +1 -1
  751. package/dist/core/viewport/zoomAt.js +47 -19
  752. package/dist/core/viewport/zoomAt.js.map +1 -1
  753. package/dist/core/viewport/zoomBounds.js +33 -17
  754. package/dist/core/viewport/zoomBounds.js.map +1 -1
  755. package/dist/cornerHandles-BHuoMs1o.d.ts +169 -0
  756. package/dist/debug/createDebugOverlayLayer.js +251 -258
  757. package/dist/debug/createDebugOverlayLayer.js.map +1 -1
  758. package/dist/debug/createDebugSink.js +69 -47
  759. package/dist/debug/createDebugSink.js.map +1 -1
  760. package/dist/debug/defaultTheme.js +20 -6
  761. package/dist/debug/defaultTheme.js.map +1 -1
  762. package/dist/debug/features.js +17 -0
  763. package/dist/debug/features.js.map +1 -0
  764. package/dist/debug/flag.js +3 -2
  765. package/dist/debug/frameStats.js +11 -9
  766. package/dist/debug/frameStats.js.map +1 -1
  767. package/dist/debug/overlayPanels.js +117 -0
  768. package/dist/debug/overlayPanels.js.map +1 -0
  769. package/dist/debug/parseDebugFlags.js +26 -27
  770. package/dist/debug/parseDebugFlags.js.map +1 -1
  771. package/dist/debug/useDebugSink.js +52 -33
  772. package/dist/debug/useDebugSink.js.map +1 -1
  773. package/dist/depSchema-BpZNOv7q.d.ts +2803 -0
  774. package/dist/devtools/handlers.js +112 -0
  775. package/dist/devtools/handlers.js.map +1 -0
  776. package/dist/devtools/history.js +71 -0
  777. package/dist/devtools/history.js.map +1 -0
  778. package/dist/devtools/hook.js +74 -0
  779. package/dist/devtools/hook.js.map +1 -0
  780. package/dist/devtools/label.js +25 -0
  781. package/dist/devtools/label.js.map +1 -0
  782. package/dist/devtools/notices.js +58 -0
  783. package/dist/devtools/notices.js.map +1 -0
  784. package/dist/devtools/protocol.js +7 -0
  785. package/dist/devtools/protocol.js.map +1 -0
  786. package/dist/devtools/registry.js +90 -0
  787. package/dist/devtools/registry.js.map +1 -0
  788. package/dist/devtools/root.js +80 -0
  789. package/dist/devtools/root.js.map +1 -0
  790. package/dist/devtools/serialize.js +86 -0
  791. package/dist/devtools/serialize.js.map +1 -0
  792. package/dist/devtools/session.js +111 -0
  793. package/dist/devtools/session.js.map +1 -0
  794. package/dist/devtools/transport.js +67 -0
  795. package/dist/devtools/transport.js.map +1 -0
  796. package/dist/devtools/useDevtoolsRoot.js +81 -0
  797. package/dist/devtools/useDevtoolsRoot.js.map +1 -0
  798. package/dist/devtools-protocol.d.ts +435 -0
  799. package/dist/devtools-protocol.js +7 -0
  800. package/dist/devtools.d.ts +8 -0
  801. package/dist/devtools.js +12 -0
  802. package/dist/devtools.js.map +1 -0
  803. package/dist/features/chrome-caps/buildChromeCtx.js +12 -10
  804. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
  805. package/dist/features/chrome-caps/conditions.js +103 -25
  806. package/dist/features/chrome-caps/conditions.js.map +1 -1
  807. package/dist/features/chrome-caps/defaults.js +18 -10
  808. package/dist/features/chrome-caps/defaults.js.map +1 -1
  809. package/dist/features/chrome-caps/index.js +8 -7
  810. package/dist/features/chrome-caps/resolve.js +28 -16
  811. package/dist/features/chrome-caps/resolve.js.map +1 -1
  812. package/dist/features/chrome-caps/useChromeCaps.js +52 -44
  813. package/dist/features/chrome-caps/useChromeCaps.js.map +1 -1
  814. package/dist/features/chrome-caps/useHoverTracking.js +58 -26
  815. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
  816. package/dist/features/ingestion/contentHandlers.js +105 -36
  817. package/dist/features/ingestion/contentHandlers.js.map +1 -1
  818. package/dist/features/ingestion/imageHandler.js +49 -29
  819. package/dist/features/ingestion/imageHandler.js.map +1 -1
  820. package/dist/features/ingestion/openFilePicker.js +27 -9
  821. package/dist/features/ingestion/openFilePicker.js.map +1 -1
  822. package/dist/features/ingestion/placement.js +20 -11
  823. package/dist/features/ingestion/placement.js.map +1 -1
  824. package/dist/features/ingestion/registerKitHandlers.js +35 -18
  825. package/dist/features/ingestion/registerKitHandlers.js.map +1 -1
  826. package/dist/features/ingestion/svgHandler.js +60 -34
  827. package/dist/features/ingestion/svgHandler.js.map +1 -1
  828. package/dist/features/ingestion/textHandler.js +37 -16
  829. package/dist/features/ingestion/textHandler.js.map +1 -1
  830. package/dist/features/ingestion/useCanvasIngestion.js +57 -39
  831. package/dist/features/ingestion/useCanvasIngestion.js.map +1 -1
  832. package/dist/features/ingestion/weaselJsonHandler.js +38 -28
  833. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
  834. package/dist/features/longPress/longPressFeedback.js +110 -81
  835. package/dist/features/longPress/longPressFeedback.js.map +1 -1
  836. package/dist/features/measure/actionIds.js +22 -0
  837. package/dist/features/measure/actionIds.js.map +1 -0
  838. package/dist/features/measure/measureCommands.js +180 -0
  839. package/dist/features/measure/measureCommands.js.map +1 -0
  840. package/dist/features/measure/measureContribution.js +57 -0
  841. package/dist/features/measure/measureContribution.js.map +1 -0
  842. package/dist/features/measure/measureEdits.js +82 -0
  843. package/dist/features/measure/measureEdits.js.map +1 -0
  844. package/dist/features/measure/measureGestures.js +185 -0
  845. package/dist/features/measure/measureGestures.js.map +1 -0
  846. package/dist/features/measure/measureHit.js +80 -0
  847. package/dist/features/measure/measureHit.js.map +1 -0
  848. package/dist/features/measure/measureLayer.js +86 -0
  849. package/dist/features/measure/measureLayer.js.map +1 -0
  850. package/dist/features/measure/measurement.js +79 -0
  851. package/dist/features/measure/measurement.js.map +1 -0
  852. package/dist/features/measure/measurements.js +41 -0
  853. package/dist/features/measure/measurements.js.map +1 -0
  854. package/dist/features/modes/modeLayers.js +81 -55
  855. package/dist/features/modes/modeLayers.js.map +1 -1
  856. package/dist/features/modes/modeTriggers.js +66 -0
  857. package/dist/features/modes/modeTriggers.js.map +1 -0
  858. package/dist/features/pathEffects/index.js +35 -0
  859. package/dist/features/pathEffects/index.js.map +1 -0
  860. package/dist/features/pathEffects/readSource.js +46 -0
  861. package/dist/features/pathEffects/readSource.js.map +1 -0
  862. package/dist/features/paths/anchorData.js +65 -0
  863. package/dist/features/paths/anchorData.js.map +1 -0
  864. package/dist/features/paths/anchorMarkers.js +137 -0
  865. package/dist/features/paths/anchorMarkers.js.map +1 -0
  866. package/dist/features/paths/editablePath.js +149 -46
  867. package/dist/features/paths/editablePath.js.map +1 -1
  868. package/dist/features/paths/index.js +12 -9
  869. package/dist/features/paths/originProjection.js +16 -9
  870. package/dist/features/paths/originProjection.js.map +1 -1
  871. package/dist/features/paths/pathEditExtension.js +26 -0
  872. package/dist/features/paths/pathEditExtension.js.map +1 -0
  873. package/dist/features/paths/pathEditState.js +107 -26
  874. package/dist/features/paths/pathEditState.js.map +1 -1
  875. package/dist/features/paths/pathEditingOverlayLayer.js +58 -110
  876. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
  877. package/dist/features/paths/pathLayer.js +79 -29
  878. package/dist/features/paths/pathLayer.js.map +1 -1
  879. package/dist/features/paths/pathRepresentation.js +27 -0
  880. package/dist/features/paths/pathRepresentation.js.map +1 -0
  881. package/dist/features/paths/pathSnap/glyphs.js +39 -0
  882. package/dist/features/paths/pathSnap/glyphs.js.map +1 -0
  883. package/dist/features/paths/pathSnap/pathSnapSource.js +82 -0
  884. package/dist/features/paths/pathSnap/pathSnapSource.js.map +1 -0
  885. package/dist/features/paths/pathSnap/sceneIndex.js +85 -0
  886. package/dist/features/paths/pathSnap/sceneIndex.js.map +1 -0
  887. package/dist/features/paths/pathSnap/snapGeometry.js +47 -0
  888. package/dist/features/paths/pathSnap/snapGeometry.js.map +1 -0
  889. package/dist/features/paths/penPreviewLayer.js +135 -102
  890. package/dist/features/paths/penPreviewLayer.js.map +1 -1
  891. package/dist/features/paths/shapeGenerator.js +112 -60
  892. package/dist/features/paths/shapeGenerator.js.map +1 -1
  893. package/dist/features/paths/strokeOutline.js +15 -0
  894. package/dist/features/paths/strokeOutline.js.map +1 -0
  895. package/dist/features/paths/useAnchorFields.js +35 -0
  896. package/dist/features/paths/useAnchorFields.js.map +1 -0
  897. package/dist/features/paths/usePathEdit.js +58 -28
  898. package/dist/features/paths/usePathEdit.js.map +1 -1
  899. package/dist/features/poseRun/usePoseRun.js +110 -43
  900. package/dist/features/poseRun/usePoseRun.js.map +1 -1
  901. package/dist/features/selection/handleCommands.js +116 -0
  902. package/dist/features/selection/handleCommands.js.map +1 -0
  903. package/dist/features/selection/overlay.js +288 -328
  904. package/dist/features/selection/overlay.js.map +1 -1
  905. package/dist/features/selection/selectionPose.js +112 -0
  906. package/dist/features/selection/selectionPose.js.map +1 -0
  907. package/dist/features/snap/angle2d.js +158 -0
  908. package/dist/features/snap/angle2d.js.map +1 -0
  909. package/dist/features/snap/debugCandidates.js +27 -0
  910. package/dist/features/snap/debugCandidates.js.map +1 -0
  911. package/dist/features/snap/gather.js +79 -0
  912. package/dist/features/snap/gather.js.map +1 -0
  913. package/dist/features/snap/inputSubspace.js +46 -0
  914. package/dist/features/snap/inputSubspace.js.map +1 -0
  915. package/dist/features/snap/lazySession.js +17 -0
  916. package/dist/features/snap/lazySession.js.map +1 -0
  917. package/dist/features/snap/marks.js +29 -0
  918. package/dist/features/snap/marks.js.map +1 -0
  919. package/dist/features/snap/outcomeStore.js +25 -0
  920. package/dist/features/snap/outcomeStore.js.map +1 -0
  921. package/dist/features/snap/pointSnap.js +48 -0
  922. package/dist/features/snap/pointSnap.js.map +1 -0
  923. package/dist/features/snap/probes2d.js +99 -0
  924. package/dist/features/snap/probes2d.js.map +1 -0
  925. package/dist/features/snap/readoutDraw.js +93 -0
  926. package/dist/features/snap/readoutDraw.js.map +1 -0
  927. package/dist/features/snap/readoutLayer.js +49 -0
  928. package/dist/features/snap/readoutLayer.js.map +1 -0
  929. package/dist/features/snap/registry.js +27 -0
  930. package/dist/features/snap/registry.js.map +1 -0
  931. package/dist/features/snap/resizeBox.js +137 -0
  932. package/dist/features/snap/resizeBox.js.map +1 -0
  933. package/dist/features/snap/roles.js +32 -0
  934. package/dist/features/snap/roles.js.map +1 -0
  935. package/dist/features/snap/rotationSource.js +47 -0
  936. package/dist/features/snap/rotationSource.js.map +1 -0
  937. package/dist/features/snap/sceneReads.js +45 -0
  938. package/dist/features/snap/sceneReads.js.map +1 -0
  939. package/dist/features/snap/sceneSession2d.js +81 -0
  940. package/dist/features/snap/sceneSession2d.js.map +1 -0
  941. package/dist/features/snap/screen.js +23 -0
  942. package/dist/features/snap/screen.js.map +1 -0
  943. package/dist/features/snap/session2d.js +143 -0
  944. package/dist/features/snap/session2d.js.map +1 -0
  945. package/dist/features/snap/spanSnap.js +80 -0
  946. package/dist/features/snap/spanSnap.js.map +1 -0
  947. package/dist/features/snap/stepAngles.js +15 -0
  948. package/dist/features/snap/stepAngles.js.map +1 -0
  949. package/dist/features/text/editingDrawOne.js +32 -0
  950. package/dist/features/text/editingDrawOne.js.map +1 -0
  951. package/dist/features/text/index.js +7 -6
  952. package/dist/features/text/textHitAt.js +51 -0
  953. package/dist/features/text/textHitAt.js.map +1 -0
  954. package/dist/features/text/textLayer.js +21 -27
  955. package/dist/features/text/textLayer.js.map +1 -1
  956. package/dist/features/text/useSceneTextEdit.js +190 -128
  957. package/dist/features/text/useSceneTextEdit.js.map +1 -1
  958. package/dist/features/viewports/viewResolver.js +48 -39
  959. package/dist/features/viewports/viewResolver.js.map +1 -1
  960. package/dist/features/viewports/viewportLayer.js +60 -29
  961. package/dist/features/viewports/viewportLayer.js.map +1 -1
  962. package/dist/iconRegistry/IconRegistryProvider.js +73 -0
  963. package/dist/iconRegistry/IconRegistryProvider.js.map +1 -0
  964. package/dist/iconRegistry/useIconGlyph.js +14 -0
  965. package/dist/iconRegistry/useIconGlyph.js.map +1 -0
  966. package/dist/iconRegistry/useIconVariant.js +29 -0
  967. package/dist/iconRegistry/useIconVariant.js.map +1 -0
  968. package/dist/icons.d.ts +6 -0
  969. package/dist/icons.js +3 -0
  970. package/dist/icons.table.js +13 -0
  971. package/dist/icons.table.js.map +1 -0
  972. package/dist/icons.table.json +546 -0
  973. package/dist/icons2.table.js +9 -0
  974. package/dist/icons2.table.js.map +1 -0
  975. package/dist/index.d.ts +4856 -5666
  976. package/dist/index.js +346 -285
  977. package/dist/input/keyState.js +118 -54
  978. package/dist/input/keyState.js.map +1 -1
  979. package/dist/input/useKeyModifiers.js +13 -7
  980. package/dist/input/useKeyModifiers.js.map +1 -1
  981. package/dist/input/useKeyState.js +23 -16
  982. package/dist/input/useKeyState.js.map +1 -1
  983. package/dist/interactions/actions/align/action.js +78 -45
  984. package/dist/interactions/actions/align/action.js.map +1 -1
  985. package/dist/interactions/actions/align/align.js +86 -48
  986. package/dist/interactions/actions/align/align.js.map +1 -1
  987. package/dist/interactions/actions/booleans/action.js +73 -33
  988. package/dist/interactions/actions/booleans/action.js.map +1 -1
  989. package/dist/interactions/actions/booleans/booleans.js +77 -70
  990. package/dist/interactions/actions/booleans/booleans.js.map +1 -1
  991. package/dist/interactions/actions/booleans/commit.js +49 -0
  992. package/dist/interactions/actions/booleans/commit.js.map +1 -0
  993. package/dist/interactions/actions/booleans/custom.js +48 -0
  994. package/dist/interactions/actions/booleans/custom.js.map +1 -0
  995. package/dist/interactions/actions/booleans/operands.js +43 -32
  996. package/dist/interactions/actions/booleans/operands.js.map +1 -1
  997. package/dist/interactions/actions/booleans/pieces.js +29 -23
  998. package/dist/interactions/actions/booleans/pieces.js.map +1 -1
  999. package/dist/interactions/actions/booleans/placement.js +30 -17
  1000. package/dist/interactions/actions/booleans/placement.js.map +1 -1
  1001. package/dist/interactions/actions/booleans/useBooleans.js +30 -17
  1002. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
  1003. package/dist/interactions/actions/booleans/useBooleansAdapter.js +8 -5
  1004. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
  1005. package/dist/interactions/actions/clipboard/action.js +81 -40
  1006. package/dist/interactions/actions/clipboard/action.js.map +1 -1
  1007. package/dist/interactions/actions/clipboard/clipboardOps.js +100 -72
  1008. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
  1009. package/dist/interactions/actions/clipboard/materializePaste.js +38 -19
  1010. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -1
  1011. package/dist/interactions/actions/clipboard/wireFormat.js +66 -28
  1012. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
  1013. package/dist/interactions/actions/clone/action.js +102 -70
  1014. package/dist/interactions/actions/clone/action.js.map +1 -1
  1015. package/dist/interactions/actions/clone/behaviors.js +55 -38
  1016. package/dist/interactions/actions/clone/behaviors.js.map +1 -1
  1017. package/dist/interactions/actions/defaultCommitAdapter.js +32 -10
  1018. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
  1019. package/dist/interactions/actions/defaults/anchorEditing.js +252 -111
  1020. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
  1021. package/dist/interactions/actions/defaults/anchorFields.js +54 -0
  1022. package/dist/interactions/actions/defaults/anchorFields.js.map +1 -0
  1023. package/dist/interactions/actions/defaults/anchorHandles.js +31 -27
  1024. package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -1
  1025. package/dist/interactions/actions/defaults/anchorJoin.js +55 -37
  1026. package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -1
  1027. package/dist/interactions/actions/defaults/areaSelect.js +56 -40
  1028. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
  1029. package/dist/interactions/actions/defaults/bendSegment.js +67 -31
  1030. package/dist/interactions/actions/defaults/bendSegment.js.map +1 -1
  1031. package/dist/interactions/actions/defaults/cancelGesture.js +12 -5
  1032. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
  1033. package/dist/interactions/actions/defaults/clearSelection.js +22 -7
  1034. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
  1035. package/dist/interactions/actions/defaults/contextMenu.js +149 -0
  1036. package/dist/interactions/actions/defaults/contextMenu.js.map +1 -0
  1037. package/dist/interactions/actions/defaults/copySubtree.js +43 -29
  1038. package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
  1039. package/dist/interactions/actions/defaults/createPaintAction.js +79 -54
  1040. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
  1041. package/dist/interactions/actions/defaults/delete.js +92 -55
  1042. package/dist/interactions/actions/defaults/delete.js.map +1 -1
  1043. package/dist/interactions/actions/defaults/duplicate.js +60 -32
  1044. package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
  1045. package/dist/interactions/actions/defaults/enterPathEdit.js +22 -18
  1046. package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
  1047. package/dist/interactions/actions/defaults/enterTextEdit.js +20 -8
  1048. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
  1049. package/dist/interactions/actions/defaults/escape.js +16 -7
  1050. package/dist/interactions/actions/defaults/escape.js.map +1 -1
  1051. package/dist/interactions/actions/defaults/exitPathEdit.js +6 -6
  1052. package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -1
  1053. package/dist/interactions/actions/defaults/group.js +122 -73
  1054. package/dist/interactions/actions/defaults/group.js.map +1 -1
  1055. package/dist/interactions/actions/defaults/ingest.js +58 -39
  1056. package/dist/interactions/actions/defaults/ingest.js.map +1 -1
  1057. package/dist/interactions/actions/defaults/insertPathAnchor.js +43 -22
  1058. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
  1059. package/dist/interactions/actions/defaults/nudge.js +57 -55
  1060. package/dist/interactions/actions/defaults/nudge.js.map +1 -1
  1061. package/dist/interactions/actions/defaults/nudgeSteps.js +17 -12
  1062. package/dist/interactions/actions/defaults/nudgeSteps.js.map +1 -1
  1063. package/dist/interactions/actions/defaults/pathEditMarks.js +60 -0
  1064. package/dist/interactions/actions/defaults/pathEditMarks.js.map +1 -0
  1065. package/dist/interactions/actions/defaults/pathEditTools.js +57 -0
  1066. package/dist/interactions/actions/defaults/pathEditTools.js.map +1 -0
  1067. package/dist/interactions/actions/defaults/pinchZoom.js +55 -39
  1068. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
  1069. package/dist/interactions/actions/defaults/reorder.js +71 -40
  1070. package/dist/interactions/actions/defaults/reorder.js.map +1 -1
  1071. package/dist/interactions/actions/defaults/requiresSelection.js +13 -6
  1072. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
  1073. package/dist/interactions/actions/defaults/segmentUnder.js +24 -16
  1074. package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -1
  1075. package/dist/interactions/actions/defaults/selectAll.js +21 -7
  1076. package/dist/interactions/actions/defaults/selectAll.js.map +1 -1
  1077. package/dist/interactions/actions/defaults/setFill.js +37 -21
  1078. package/dist/interactions/actions/defaults/setFill.js.map +1 -1
  1079. package/dist/interactions/actions/defaults/setFillOpacity.js +19 -10
  1080. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
  1081. package/dist/interactions/actions/defaults/setStroke.js +46 -25
  1082. package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
  1083. package/dist/interactions/actions/defaults/setStrokeOpacity.js +19 -11
  1084. package/dist/interactions/actions/defaults/setStrokeOpacity.js.map +1 -1
  1085. package/dist/interactions/actions/defaults/slice.js +42 -17
  1086. package/dist/interactions/actions/defaults/slice.js.map +1 -1
  1087. package/dist/interactions/actions/defaults/sliceOps.js +63 -42
  1088. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
  1089. package/dist/interactions/actions/defaults/toolActivate.js +34 -16
  1090. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
  1091. package/dist/interactions/actions/defaults/toolResetToDefault.js +29 -10
  1092. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
  1093. package/dist/interactions/actions/defaults/undoRedo.js +26 -20
  1094. package/dist/interactions/actions/defaults/undoRedo.js.map +1 -1
  1095. package/dist/interactions/actions/defaults/viewportDragPan.js +91 -58
  1096. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
  1097. package/dist/interactions/actions/defaults/viewportWheelPan.js +42 -23
  1098. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
  1099. package/dist/interactions/actions/defaults/viewportZoom.js +107 -59
  1100. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
  1101. package/dist/interactions/actions/distribute/action.js +64 -39
  1102. package/dist/interactions/actions/distribute/action.js.map +1 -1
  1103. package/dist/interactions/actions/distribute/distribute.js +53 -34
  1104. package/dist/interactions/actions/distribute/distribute.js.map +1 -1
  1105. package/dist/interactions/actions/distribute/plan.js +40 -22
  1106. package/dist/interactions/actions/distribute/plan.js.map +1 -1
  1107. package/dist/interactions/actions/drawnBoxes.js +32 -0
  1108. package/dist/interactions/actions/drawnBoxes.js.map +1 -0
  1109. package/dist/interactions/actions/edit-anchors/action.js +245 -72
  1110. package/dist/interactions/actions/edit-anchors/action.js.map +1 -1
  1111. package/dist/interactions/actions/edit-anchors/extensionDrags.js +50 -0
  1112. package/dist/interactions/actions/edit-anchors/extensionDrags.js.map +1 -0
  1113. package/dist/interactions/actions/edit-anchors/geometry.js +74 -47
  1114. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
  1115. package/dist/interactions/actions/edit-anchors/handleDrag.js +101 -0
  1116. package/dist/interactions/actions/edit-anchors/handleDrag.js.map +1 -0
  1117. package/dist/interactions/actions/edit-anchors/handles.js +41 -27
  1118. package/dist/interactions/actions/edit-anchors/handles.js.map +1 -1
  1119. package/dist/interactions/actions/edit-anchors/params.js +12 -0
  1120. package/dist/interactions/actions/edit-anchors/params.js.map +1 -0
  1121. package/dist/interactions/actions/edit-anchors/preview.js +93 -18
  1122. package/dist/interactions/actions/edit-anchors/preview.js.map +1 -1
  1123. package/dist/interactions/actions/edit-anchors/symmetry.js +12 -7
  1124. package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -1
  1125. package/dist/interactions/actions/flip/action.js +121 -61
  1126. package/dist/interactions/actions/flip/action.js.map +1 -1
  1127. package/dist/interactions/actions/flip/helpers.js +69 -36
  1128. package/dist/interactions/actions/flip/helpers.js.map +1 -1
  1129. package/dist/interactions/actions/geometryProjection.js +17 -12
  1130. package/dist/interactions/actions/geometryProjection.js.map +1 -1
  1131. package/dist/interactions/actions/gestureFrames.js +20 -11
  1132. package/dist/interactions/actions/gestureFrames.js.map +1 -1
  1133. package/dist/interactions/actions/gestureLifecycle.js +96 -48
  1134. package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
  1135. package/dist/interactions/actions/hitSelection.js +6 -4
  1136. package/dist/interactions/actions/hitSelection.js.map +1 -1
  1137. package/dist/interactions/actions/insert/action.js +70 -42
  1138. package/dist/interactions/actions/insert/action.js.map +1 -1
  1139. package/dist/interactions/actions/insert/commit.js +44 -22
  1140. package/dist/interactions/actions/insert/commit.js.map +1 -1
  1141. package/dist/interactions/actions/insert/extras.js +60 -38
  1142. package/dist/interactions/actions/insert/extras.js.map +1 -1
  1143. package/dist/interactions/actions/insert/frame.js +58 -39
  1144. package/dist/interactions/actions/insert/frame.js.map +1 -1
  1145. package/dist/interactions/actions/insert/geometry.js +29 -25
  1146. package/dist/interactions/actions/insert/geometry.js.map +1 -1
  1147. package/dist/interactions/actions/insert/parent.js +11 -0
  1148. package/dist/interactions/actions/insert/parent.js.map +1 -0
  1149. package/dist/interactions/actions/insert/placeAction.js +113 -0
  1150. package/dist/interactions/actions/insert/placeAction.js.map +1 -0
  1151. package/dist/interactions/actions/insert/repositionAction.js +26 -11
  1152. package/dist/interactions/actions/insert/repositionAction.js.map +1 -1
  1153. package/dist/interactions/actions/insert/rotateAction.js +19 -8
  1154. package/dist/interactions/actions/insert/rotateAction.js.map +1 -1
  1155. package/dist/interactions/actions/insert/session.js +61 -41
  1156. package/dist/interactions/actions/insert/session.js.map +1 -1
  1157. package/dist/interactions/actions/insert/shape.js +83 -25
  1158. package/dist/interactions/actions/insert/shape.js.map +1 -1
  1159. package/dist/interactions/actions/lasso-select/action.js +160 -100
  1160. package/dist/interactions/actions/lasso-select/action.js.map +1 -1
  1161. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +44 -25
  1162. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -1
  1163. package/dist/interactions/actions/move/action.js +91 -52
  1164. package/dist/interactions/actions/move/action.js.map +1 -1
  1165. package/dist/interactions/actions/move/behaviors/layoutDrop.js +55 -36
  1166. package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -1
  1167. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +20 -10
  1168. package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -1
  1169. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +40 -24
  1170. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -1
  1171. package/dist/interactions/actions/move/behaviors/snapToContainer.js +102 -64
  1172. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
  1173. package/dist/interactions/actions/move/capture.js +103 -78
  1174. package/dist/interactions/actions/move/capture.js.map +1 -1
  1175. package/dist/interactions/actions/move/commit/index.js +41 -34
  1176. package/dist/interactions/actions/move/commit/index.js.map +1 -1
  1177. package/dist/interactions/actions/move/commit/layoutDrop.js +43 -32
  1178. package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -1
  1179. package/dist/interactions/actions/move/commit/layoutRelease.js +97 -77
  1180. package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -1
  1181. package/dist/interactions/actions/move/commit/rebase.js +16 -13
  1182. package/dist/interactions/actions/move/commit/rebase.js.map +1 -1
  1183. package/dist/interactions/actions/move/commit/reparent.js +89 -57
  1184. package/dist/interactions/actions/move/commit/reparent.js.map +1 -1
  1185. package/dist/interactions/actions/move/delta.js +58 -36
  1186. package/dist/interactions/actions/move/delta.js.map +1 -1
  1187. package/dist/interactions/actions/move/frame.js +66 -35
  1188. package/dist/interactions/actions/move/frame.js.map +1 -1
  1189. package/dist/interactions/actions/move/gestureAdapter.js +30 -20
  1190. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
  1191. package/dist/interactions/actions/move/landedDescendants.js +43 -25
  1192. package/dist/interactions/actions/move/landedDescendants.js.map +1 -1
  1193. package/dist/interactions/actions/move/layout/container.js +93 -72
  1194. package/dist/interactions/actions/move/layout/container.js.map +1 -1
  1195. package/dist/interactions/actions/move/layout/dragged.js +61 -39
  1196. package/dist/interactions/actions/move/layout/dragged.js.map +1 -1
  1197. package/dist/interactions/actions/move/layout/dropPass.js +153 -94
  1198. package/dist/interactions/actions/move/layout/dropPass.js.map +1 -1
  1199. package/dist/interactions/actions/move/layout/exits.js +58 -30
  1200. package/dist/interactions/actions/move/layout/exits.js.map +1 -1
  1201. package/dist/interactions/actions/move/layout/glide.js +55 -34
  1202. package/dist/interactions/actions/move/layout/glide.js.map +1 -1
  1203. package/dist/interactions/actions/move/session.js +96 -56
  1204. package/dist/interactions/actions/move/session.js.map +1 -1
  1205. package/dist/interactions/actions/move/translate.js +37 -51
  1206. package/dist/interactions/actions/move/translate.js.map +1 -1
  1207. package/dist/interactions/actions/moveNodes.js +87 -0
  1208. package/dist/interactions/actions/moveNodes.js.map +1 -0
  1209. package/dist/interactions/actions/outlines/createOutlines.js +28 -20
  1210. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
  1211. package/dist/interactions/actions/outlines/createOutlinesAction.js +43 -31
  1212. package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -1
  1213. package/dist/interactions/actions/outlines/outlineStroke.js +68 -45
  1214. package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -1
  1215. package/dist/interactions/actions/outlines/outlineStrokeAction.js +24 -19
  1216. package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -1
  1217. package/dist/interactions/actions/outlines/replaceWithPaths.js +57 -42
  1218. package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -1
  1219. package/dist/interactions/actions/outlines/strokeRegion.js +37 -22
  1220. package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -1
  1221. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +8 -5
  1222. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js.map +1 -1
  1223. package/dist/interactions/actions/pathCommands/cutJoin.js +119 -72
  1224. package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -1
  1225. package/dist/interactions/actions/pathCommands/livePathEdit.js +74 -40
  1226. package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -1
  1227. package/dist/interactions/actions/pathCommands/pathNodes.js +91 -82
  1228. package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -1
  1229. package/dist/interactions/actions/pathCommands/simplifyOffset.js +52 -28
  1230. package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -1
  1231. package/dist/interactions/actions/pathGestureTags.js +29 -0
  1232. package/dist/interactions/actions/pathGestureTags.js.map +1 -0
  1233. package/dist/interactions/actions/planeInput.js +198 -123
  1234. package/dist/interactions/actions/planeInput.js.map +1 -1
  1235. package/dist/interactions/actions/pointerState.js +12 -7
  1236. package/dist/interactions/actions/pointerState.js.map +1 -1
  1237. package/dist/interactions/actions/poseDescriptorDep.js +24 -14
  1238. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
  1239. package/dist/interactions/actions/poseFrame.js +45 -28
  1240. package/dist/interactions/actions/poseFrame.js.map +1 -1
  1241. package/dist/interactions/actions/resize/action.js +103 -63
  1242. package/dist/interactions/actions/resize/action.js.map +1 -1
  1243. package/dist/interactions/actions/resize/aspect.js +44 -0
  1244. package/dist/interactions/actions/resize/aspect.js.map +1 -0
  1245. package/dist/interactions/actions/resize/behaviors/clampMinSize.js +38 -13
  1246. package/dist/interactions/actions/resize/behaviors/clampMinSize.js.map +1 -1
  1247. package/dist/interactions/actions/resize/boxFrame.js +15 -11
  1248. package/dist/interactions/actions/resize/boxFrame.js.map +1 -1
  1249. package/dist/interactions/actions/resize/capture.js +105 -62
  1250. package/dist/interactions/actions/resize/capture.js.map +1 -1
  1251. package/dist/interactions/actions/resize/commit.js +76 -56
  1252. package/dist/interactions/actions/resize/commit.js.map +1 -1
  1253. package/dist/interactions/actions/resize/cornerHandles.js +154 -17
  1254. package/dist/interactions/actions/resize/cornerHandles.js.map +1 -1
  1255. package/dist/interactions/actions/resize/frame.js +133 -66
  1256. package/dist/interactions/actions/resize/frame.js.map +1 -1
  1257. package/dist/interactions/actions/resize/minimum.js +35 -0
  1258. package/dist/interactions/actions/resize/minimum.js.map +1 -0
  1259. package/dist/interactions/actions/resize/replay.js +40 -30
  1260. package/dist/interactions/actions/resize/replay.js.map +1 -1
  1261. package/dist/interactions/actions/resize/ruleBounds.js +8 -5
  1262. package/dist/interactions/actions/resize/ruleBounds.js.map +1 -1
  1263. package/dist/interactions/actions/resize/session.js +97 -50
  1264. package/dist/interactions/actions/resize/session.js.map +1 -1
  1265. package/dist/interactions/actions/resolveOverlays.js +48 -33
  1266. package/dist/interactions/actions/resolveOverlays.js.map +1 -1
  1267. package/dist/interactions/actions/resolvePreviews.js +63 -46
  1268. package/dist/interactions/actions/resolvePreviews.js.map +1 -1
  1269. package/dist/interactions/actions/rotate/action.js +71 -42
  1270. package/dist/interactions/actions/rotate/action.js.map +1 -1
  1271. package/dist/interactions/actions/rotate/commit.js +40 -31
  1272. package/dist/interactions/actions/rotate/commit.js.map +1 -1
  1273. package/dist/interactions/actions/rotate/frame.js +75 -47
  1274. package/dist/interactions/actions/rotate/frame.js.map +1 -1
  1275. package/dist/interactions/actions/rotate/geometry.js +36 -24
  1276. package/dist/interactions/actions/rotate/geometry.js.map +1 -1
  1277. package/dist/interactions/actions/rotate/handle.js +28 -15
  1278. package/dist/interactions/actions/rotate/handle.js.map +1 -1
  1279. package/dist/interactions/actions/rotate/replay.js +22 -18
  1280. package/dist/interactions/actions/rotate/replay.js.map +1 -1
  1281. package/dist/interactions/actions/rotate/session.js +117 -76
  1282. package/dist/interactions/actions/rotate/session.js.map +1 -1
  1283. package/dist/interactions/actions/selectionSubtree.js +135 -53
  1284. package/dist/interactions/actions/selectionSubtree.js.map +1 -1
  1285. package/dist/interactions/actions/spatialReference.js +33 -26
  1286. package/dist/interactions/actions/spatialReference.js.map +1 -1
  1287. package/dist/interactions/actions/testUtils.js +53 -0
  1288. package/dist/interactions/actions/testUtils.js.map +1 -0
  1289. package/dist/interactions/actions/transform-again/action.js +49 -35
  1290. package/dist/interactions/actions/transform-again/action.js.map +1 -1
  1291. package/dist/interactions/actions/transform-again/memory.js +32 -21
  1292. package/dist/interactions/actions/transform-again/memory.js.map +1 -1
  1293. package/dist/interactions/actions/transformFinish.js +106 -0
  1294. package/dist/interactions/actions/transformFinish.js.map +1 -0
  1295. package/dist/interactions/actions/useActionSet.js +83 -0
  1296. package/dist/interactions/actions/useActionSet.js.map +1 -0
  1297. package/dist/interactions/actions/useStandardActions.js +23 -165
  1298. package/dist/interactions/actions/useStandardActions.js.map +1 -1
  1299. package/dist/interactions/gestures/dragGesture/dragGesture.js +109 -68
  1300. package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -1
  1301. package/dist/interactions/gestures/dragGesture/dragPointOf.js +17 -10
  1302. package/dist/interactions/gestures/dragGesture/dragPointOf.js.map +1 -1
  1303. package/dist/interactions/gestures/dragRadial/dragRadial.js +129 -93
  1304. package/dist/interactions/gestures/dragRadial/dragRadial.js.map +1 -1
  1305. package/dist/interactions/gestures/dragRect/dragRect.js +155 -111
  1306. package/dist/interactions/gestures/dragRect/dragRect.js.map +1 -1
  1307. package/dist/interactions/gestures/handleDrag/handleDrag.js +52 -30
  1308. package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -1
  1309. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +168 -97
  1310. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
  1311. package/dist/interactions/gestures/shared/originProjection.js +32 -25
  1312. package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
  1313. package/dist/interactions/gestures/shared/screenTolerance.js +26 -17
  1314. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
  1315. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +39 -21
  1316. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -1
  1317. package/dist/kitSettingsSchema.js +76 -0
  1318. package/dist/kitSettingsSchema.js.map +1 -0
  1319. package/dist/{math-CYUjoyyU.d.ts → math-CrJULaZI.d.ts} +5 -6
  1320. package/dist/math.d.ts +4 -5
  1321. package/dist/math.js +7 -6
  1322. package/dist/mesh.js +3 -2
  1323. package/dist/move.d.ts +9 -7
  1324. package/dist/move.js +4 -3
  1325. package/dist/{originProjection-CoNVpITV.d.ts → options-DBxEryYq.d.ts} +4 -27
  1326. package/dist/originProjection-gY0jb4Wb.d.ts +24 -0
  1327. package/dist/patterns-builtin.js +3 -2
  1328. package/dist/{poseDescriptor-Bqk-11Rl.d.ts → poseDescriptor-DN2yfnq_.d.ts} +7 -7
  1329. package/dist/renderer.d.ts +1 -1
  1330. package/dist/renderer.js +3 -2
  1331. package/dist/resize.d.ts +11 -28
  1332. package/dist/resize.js +6 -7
  1333. package/dist/routing.d.ts +1 -1
  1334. package/dist/routing.js +3 -2
  1335. package/dist/style.css +88 -1
  1336. package/dist/test-hook/createTestHook.js +23 -20
  1337. package/dist/test-hook/createTestHook.js.map +1 -1
  1338. package/dist/test-hook/install.js +32 -13
  1339. package/dist/test-hook/install.js.map +1 -1
  1340. package/dist/test-hook/useTestHook.js +23 -16
  1341. package/dist/test-hook/useTestHook.js.map +1 -1
  1342. package/dist/test-seams.d.ts +168 -1
  1343. package/dist/test-seams.js +8 -3
  1344. package/dist/tools/builtin/ellipse/useEllipseTool.js +22 -17
  1345. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
  1346. package/dist/tools/builtin/eyedropper/useEyedropperTool.js +44 -28
  1347. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
  1348. package/dist/tools/builtin/hand/dragPanContribution.js +12 -7
  1349. package/dist/tools/builtin/hand/dragPanContribution.js.map +1 -1
  1350. package/dist/tools/builtin/hand/useHandTool.js +21 -13
  1351. package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
  1352. package/dist/tools/builtin/image/useImageTool.js +28 -19
  1353. package/dist/tools/builtin/image/useImageTool.js.map +1 -1
  1354. package/dist/tools/builtin/lasso/useLassoTool.js +48 -36
  1355. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
  1356. package/dist/tools/builtin/line/useLineTool.js +24 -17
  1357. package/dist/tools/builtin/line/useLineTool.js.map +1 -1
  1358. package/dist/tools/builtin/measure/useMeasureTool.js +84 -0
  1359. package/dist/tools/builtin/measure/useMeasureTool.js.map +1 -0
  1360. package/dist/tools/builtin/pen/penHandle.js +58 -0
  1361. package/dist/tools/builtin/pen/penHandle.js.map +1 -0
  1362. package/dist/tools/builtin/pen/usePenTool.js +461 -303
  1363. package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
  1364. package/dist/tools/builtin/pencil/usePencilTool.js +20 -15
  1365. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
  1366. package/dist/tools/builtin/pickTopMostHit.js +51 -31
  1367. package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
  1368. package/dist/tools/builtin/polygon/usePolygonTool.js +45 -28
  1369. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
  1370. package/dist/tools/builtin/rect/useRectTool.js +24 -16
  1371. package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
  1372. package/dist/tools/builtin/select/adapterPointQuery.js +47 -30
  1373. package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -1
  1374. package/dist/tools/builtin/select/selectionContributions.js +94 -56
  1375. package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
  1376. package/dist/tools/builtin/select/useSelectTool.js +155 -108
  1377. package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
  1378. package/dist/tools/builtin/shared/insertToolOptions.js +5 -4
  1379. package/dist/tools/builtin/shared/insertToolOptions.js.map +1 -1
  1380. package/dist/tools/builtin/shared/pointerFollower.js +15 -8
  1381. package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
  1382. package/dist/tools/builtin/slice/useSliceTool.js +148 -101
  1383. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
  1384. package/dist/tools/builtin/star/useStarTool.js +48 -31
  1385. package/dist/tools/builtin/star/useStarTool.js.map +1 -1
  1386. package/dist/tools/builtin/sticky/stickyNode.js +49 -0
  1387. package/dist/tools/builtin/sticky/stickyNode.js.map +1 -0
  1388. package/dist/tools/builtin/sticky/useStickyTool.js +86 -0
  1389. package/dist/tools/builtin/sticky/useStickyTool.js.map +1 -0
  1390. package/dist/tools/builtin/text/useTextTool.js +59 -34
  1391. package/dist/tools/builtin/text/useTextTool.js.map +1 -1
  1392. package/dist/tools/index.js +26 -0
  1393. package/dist/tools/overlayBinding.js +7 -5
  1394. package/dist/tools/overlayBinding.js.map +1 -1
  1395. package/dist/tools/useKeybindings.js +62 -46
  1396. package/dist/tools/useKeybindings.js.map +1 -1
  1397. package/dist/{types-DBbbCy0i.d.ts → types-7puAuVD2.d.ts} +5 -264
  1398. package/dist/types-BN9hbdMI.d.ts +184 -0
  1399. package/dist/types-CniVctmk.d.ts +949 -0
  1400. package/dist/types-oFeQ5VjV.d.ts +264 -0
  1401. package/dist/util/color.js +39 -18
  1402. package/dist/util/color.js.map +1 -1
  1403. package/dist/util/paint.js +93 -38
  1404. package/dist/util/paint.js.map +1 -1
  1405. package/dist/version.js +11 -3
  1406. package/dist/version.js.map +1 -1
  1407. package/package.json +46 -24
  1408. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +0 -126
  1409. package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +0 -1
  1410. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +0 -55
  1411. package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +0 -1
  1412. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +0 -16
  1413. package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +0 -1
  1414. package/dist/canvas/SceneCanvas/isDev.js +0 -12
  1415. package/dist/canvas/SceneCanvas/isDev.js.map +0 -1
  1416. package/dist/canvas/SceneCanvas/useViewLayerGate.js +0 -20
  1417. package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +0 -1
  1418. package/dist/cornerHandles-BSKbyuvQ.d.ts +0 -104
  1419. package/dist/icons/ArrowIcon.js +0 -23
  1420. package/dist/icons/ArrowIcon.js.map +0 -1
  1421. package/dist/icons/EllipseIcon.js +0 -21
  1422. package/dist/icons/EllipseIcon.js.map +0 -1
  1423. package/dist/icons/EyedropperIcon.js +0 -49
  1424. package/dist/icons/EyedropperIcon.js.map +0 -1
  1425. package/dist/icons/HandIcon.js +0 -59
  1426. package/dist/icons/HandIcon.js.map +0 -1
  1427. package/dist/icons/ImageIcon.js +0 -34
  1428. package/dist/icons/ImageIcon.js.map +0 -1
  1429. package/dist/icons/LassoIcon.js +0 -22
  1430. package/dist/icons/LassoIcon.js.map +0 -1
  1431. package/dist/icons/LineIcon.js +0 -22
  1432. package/dist/icons/LineIcon.js.map +0 -1
  1433. package/dist/icons/PenIcon.js +0 -36
  1434. package/dist/icons/PenIcon.js.map +0 -1
  1435. package/dist/icons/PencilIcon.js +0 -25
  1436. package/dist/icons/PencilIcon.js.map +0 -1
  1437. package/dist/icons/PolygonIcon.js +0 -19
  1438. package/dist/icons/PolygonIcon.js.map +0 -1
  1439. package/dist/icons/RectIcon.js +0 -37
  1440. package/dist/icons/RectIcon.js.map +0 -1
  1441. package/dist/icons/SelectIcon.js +0 -20
  1442. package/dist/icons/SelectIcon.js.map +0 -1
  1443. package/dist/icons/SliceIcon.js +0 -24
  1444. package/dist/icons/SliceIcon.js.map +0 -1
  1445. package/dist/icons/StarIcon.js +0 -19
  1446. package/dist/icons/StarIcon.js.map +0 -1
  1447. package/dist/icons/TextIcon.js +0 -19
  1448. package/dist/icons/TextIcon.js.map +0 -1
  1449. package/dist/icons/UnknownIcon.js +0 -33
  1450. package/dist/icons/UnknownIcon.js.map +0 -1
  1451. package/dist/icons/_base.js +0 -12
  1452. package/dist/icons/_base.js.map +0 -1
  1453. package/dist/interactions/actions/actionShortcuts.js +0 -32
  1454. package/dist/interactions/actions/actionShortcuts.js.map +0 -1
  1455. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js +0 -40
  1456. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js.map +0 -1
  1457. package/dist/interactions/actions/defaults/icons/actionGlyphs.js +0 -10
  1458. package/dist/interactions/actions/defaults/icons/actionGlyphs.js.map +0 -1
  1459. package/dist/interactions/actions/defaults/icons/alignIcons.js +0 -173
  1460. package/dist/interactions/actions/defaults/icons/alignIcons.js.map +0 -1
  1461. package/dist/interactions/actions/defaults/icons/anchorIcons.js +0 -75
  1462. package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +0 -1
  1463. package/dist/interactions/actions/defaults/icons/booleanIcons.js +0 -194
  1464. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +0 -1
  1465. package/dist/interactions/actions/defaults/icons/distributeIcons.js +0 -63
  1466. package/dist/interactions/actions/defaults/icons/distributeIcons.js.map +0 -1
  1467. package/dist/interactions/actions/defaults/icons/editIcons.js +0 -307
  1468. package/dist/interactions/actions/defaults/icons/editIcons.js.map +0 -1
  1469. package/dist/interactions/actions/defaults/icons/outlineIcons.js +0 -91
  1470. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +0 -1
  1471. package/dist/interactions/actions/resize/behaviors/index.js +0 -8
  1472. package/dist/interactions/actions/resize/behaviors/index.js.map +0 -1
  1473. package/dist/interactions/actions/resize/behaviors/lockAspect.js +0 -24
  1474. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +0 -1
  1475. package/dist/interactions/actions/resize/pointSnap.js +0 -111
  1476. package/dist/interactions/actions/resize/pointSnap.js.map +0 -1
  1477. package/dist/interactions/actions/rotate/behaviors/index.js +0 -7
  1478. package/dist/interactions/actions/rotate/behaviors/index.js.map +0 -1
  1479. package/dist/interactions/actions/rotate/behaviors/snapRotation.js +0 -12
  1480. package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +0 -1
  1481. package/dist/interactions/gestures/shared/snap.js +0 -24
  1482. package/dist/interactions/gestures/shared/snap.js.map +0 -1
  1483. package/dist/test-seams-D0pyV3pR.d.ts +0 -149
  1484. package/dist/tools/builtin/bone/boneActions.js +0 -130
  1485. package/dist/tools/builtin/bone/boneActions.js.map +0 -1
  1486. package/dist/tools/builtin/bone/boneOverlay.js +0 -58
  1487. package/dist/tools/builtin/bone/boneOverlay.js.map +0 -1
  1488. package/dist/tools/builtin/bone/placedRig.js +0 -24
  1489. package/dist/tools/builtin/bone/placedRig.js.map +0 -1
  1490. package/dist/tools/builtin/bone/rigEditState.js +0 -21
  1491. package/dist/tools/builtin/bone/rigEditState.js.map +0 -1
  1492. package/dist/tools/builtin/bone/useBoneTool.js +0 -98
  1493. package/dist/tools/builtin/bone/useBoneTool.js.map +0 -1
  1494. package/dist/tools/builtin/weight/useWeightTool.js +0 -77
  1495. package/dist/tools/builtin/weight/useWeightTool.js.map +0 -1
  1496. package/dist/tools/builtin/weight/weightActions.js +0 -112
  1497. package/dist/tools/builtin/weight/weightActions.js.map +0 -1
  1498. package/dist/tools/builtin/weight/weightOverlay.js +0 -61
  1499. package/dist/tools/builtin/weight/weightOverlay.js.map +0 -1
  1500. package/dist/util/constrainTo45.js +0 -17
  1501. package/dist/util/constrainTo45.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"selectAll.js","names":["selectAllAction","scene","deps","view","skipped","l","all","n"],"sources":["../../../../src/interactions/actions/defaults/selectAll.ts"],"sourcesContent":["import type { NodeId } from 'core/scene/types';\nimport type { Action } from '@weasel-js/routing';\n\n/**\n * @experimental\n * Static descriptor for the `selectAll` Action. Selects every scene node the\n * user can see and reach — nodes on a hidden or locked layer, or on a layer\n * the asking view does not paint, are left out, so Cmd+A then Delete cannot\n * take content that is off screen or locked.\n */\nexport const selectAllAction: Action & { requires: string[] } = {\n id: 'selectAll',\n label: 'Select All',\n defaultBinding: { kind: 'key', key: 'a', mods: { mod: true } },\n eligible: { capability: 'creates-selection' },\n requires: ['scene', 'selection', 'view'],\n invoker: {\n timing: 'immediate',\n run: (deps) => {\n const scene = deps.scene;\n const view = deps.view;\n const skipped = new Set(\n (scene?.layers ?? []).filter((l) => !l.visible || l.locked === true).map((l) => l.id),\n );\n // Scene exposes `renderOrder()` (bottom→top iterable of NodeIds), not\n // the never-implemented `listAll()`. The node walk is the same sequence\n // and carries the layer each id sits on, which the id walk cannot.\n const filtered = skipped.size > 0 || view?.layerIsPainted !== undefined;\n const all: NodeId[] = !filtered || !scene?.renderOrderNodes\n ? (scene?.renderOrder ? [...scene.renderOrder()] : [])\n : scene.renderOrderNodes()\n .filter((n) => !skipped.has(n.layer)\n && view?.layerIsPainted?.(n.layer) !== false\n && scene.isLocked?.(n.id) !== true)\n .map((n) => n.id);\n if (all.length === 0) return;\n deps.selection?.set(all);\n },\n },\n};\n"],"mappings":";AAUA,IAAaA,IAAmD;CAC9D,IAAI;CACJ,OAAO;CACP,gBAAgB;EAAE,MAAM;EAAO,KAAK;EAAK,MAAM,EAAE,KAAK,GAAK;CAAE;CAC7D,UAAU,EAAE,YAAY,oBAAoB;CAC5C,UAAU;EAAC;EAAS;EAAa;CAAM;CACvC,SAAS;EACP,QAAQ;EACR,MAAM,MAAS;GACb,IAAMC,IAAQC,EAAK,OACbC,IAAOD,EAAK,MACZE,IAAU,IAAI,KACjBH,GAAO,UAAU,CAAC,EAAA,CAAG,QAAQ,MAAM,CAACI,EAAE,WAAWA,EAAE,WAAW,EAAI,CAAC,CAAC,KAAK,MAAMA,EAAE,EAAE,CACtF,GAKMC,IAAgB,EADLF,EAAQ,OAAO,KAAKD,GAAM,mBAAmB,KAAA,MAC3B,CAACF,GAAO,mBACtCA,GAAO,cAAc,CAAC,GAAGA,EAAM,YAAY,CAAC,IAAI,CAAC,IAClDA,EAAM,iBAAiB,CAAC,CACvB,QAAQ,MAAM,CAACG,EAAQ,IAAIG,EAAE,KAAK,KAC9BJ,GAAM,iBAAiBI,EAAE,KAAK,MAAM,MACpCN,EAAM,WAAWM,EAAE,EAAE,MAAM,EAAI,CAAC,CACpC,KAAK,MAAMA,EAAE,EAAE;GACpB,AAAID,EAAI,WAAW,KACnBJ,EAAK,WAAW,IAAII,CAAG;EACzB;CACF;AACF"}
1
+ {"version":3,"file":"selectAll.js","names":[],"sources":["../../../../src/interactions/actions/defaults/selectAll.ts"],"sourcesContent":["import type { NodeId } from 'core/scene/types';\nimport type { Action } from '@weasel-js/routing';\nimport { isAnnotationLayer } from 'core/scene/annotation';\nimport { nodeGates } from 'core/scene/nodeGates';\n\n/**\n * Static descriptor for the `selectAll` Action. Selects every scene node the\n * user can see and reach — hidden and locked nodes (`nodeGates`), and nodes on\n * a layer the asking view does not paint, are left out, so Cmd+A then Delete cannot\n * take content that is off screen or locked.\n */\nexport const selectAllAction: Action & { requires: string[] } = {\n id: 'selectAll',\n label: 'Select All',\n defaultBinding: { kind: 'key', key: 'a', mods: { mod: true } },\n eligible: { capability: 'creates-selection' },\n requires: ['scene', 'selection', 'view'],\n invoker: {\n timing: 'immediate',\n run: (deps) => {\n const scene = deps.scene;\n const view = deps.view;\n if (!scene) return;\n // The node walk carries the layer each id sits on, which `view` gates.\n const gates = nodeGates(scene);\n const all: NodeId[] = scene.renderOrderNodes()\n .filter((n) => !isAnnotationLayer(scene.layers.find((l) => l.id === n.layer))\n && view?.layerIsPainted?.(n.layer) !== false\n && !gates.hidden(n.id)\n && !gates.locked(n.id))\n .map((n) => n.id);\n if (all.length === 0) return;\n deps.selection?.set(all);\n },\n },\n};\n"],"mappings":";;;;;;;;;;AAWA,IAAa,kBAAmD;CAC9D,IAAI;CACJ,OAAO;CACP,gBAAgB;EAAE,MAAM;EAAO,KAAK;EAAK,MAAM,EAAE,KAAK,KAAK;CAAE;CAC7D,UAAU,EAAE,YAAY,oBAAoB;CAC5C,UAAU;EAAC;EAAS;EAAa;CAAM;CACvC,SAAS;EACP,QAAQ;EACR,MAAM,SAAS;GACb,MAAM,QAAQ,KAAK;GACnB,MAAM,OAAO,KAAK;GAClB,IAAI,CAAC,OAAO;GAEZ,MAAM,QAAQ,UAAU,KAAK;GAC7B,MAAM,MAAgB,MAAM,iBAAiB,CAAC,CAC3C,QAAQ,MAAM,CAAC,kBAAkB,MAAM,OAAO,MAAM,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,KACvE,MAAM,iBAAiB,EAAE,KAAK,MAAM,SACpC,CAAC,MAAM,OAAO,EAAE,EAAE,KAClB,CAAC,MAAM,OAAO,EAAE,EAAE,CAAC,CAAC,CACxB,KAAK,MAAM,EAAE,EAAE;GAClB,IAAI,IAAI,WAAW,GAAG;GACtB,KAAK,WAAW,IAAI,GAAG;EACzB;CACF;AACF"}
@@ -1,33 +1,49 @@
1
- import { DEFAULT_FILL_COLOR as e, paintWithColor as t } from "../../../util/paint.js";
2
- import { createPaintAction as n } from "./createPaintAction.js";
1
+ import { DEFAULT_FILL_COLOR, paintWithColor } from "../../../util/paint.js";
2
+ import { createPaintAction } from "./createPaintAction.js";
3
+
3
4
  //#region src/interactions/actions/defaults/setFill.ts
4
- function r(e, n) {
5
- return n.paint === null ? null : {
6
- ...e,
7
- paint: n.paint ?? t(e?.paint, n.color)
5
+ /** Repaint a node's fill, keeping whatever else the fill carries. */
6
+ function repaint(prev, state) {
7
+ if (state.paint === null) return null;
8
+ return {
9
+ ...prev,
10
+ paint: state.paint ?? paintWithColor(prev?.paint, state.color)
8
11
  };
9
12
  }
10
- var i = n({
13
+ /**
14
+ * Static descriptor for the `setFill` Action.
15
+ *
16
+ * Takes either `color` (a hex string) or `paint` (a whole `Paint`, for
17
+ * gradients and patterns). `paint` wins when both are present.
18
+ *
19
+ * Alpha semantics: alpha lives on the paint's `opacity`. A 6-char (no-alpha)
20
+ * color adopts the alpha of the node's existing paint; an 8-char color states
21
+ * its own. A `paint` is written verbatim.
22
+ */
23
+ var setFillAction = createPaintAction({
11
24
  id: "setFill",
12
25
  label: "Set fill",
13
26
  dataKey: "fill",
14
- initialState: (t) => ({
15
- color: t("color") ?? e,
16
- paint: t("paint")
27
+ initialState: (pick) => ({
28
+ color: pick("color") ?? DEFAULT_FILL_COLOR,
29
+ paint: pick("paint")
17
30
  }),
18
- readParams: (e, t) => {
19
- let n = t?.color, r = t?.paint;
20
- return n === void 0 && r === void 0 ? null : n === void 0 ? {
21
- ...e,
22
- paint: r
23
- } : {
24
- color: n,
25
- paint: r
31
+ readParams: (prev, params) => {
32
+ const color = params?.color;
33
+ const paint = params?.paint;
34
+ if (color === void 0 && paint === void 0) return null;
35
+ if (color === void 0) return {
36
+ ...prev,
37
+ paint
38
+ };
39
+ return {
40
+ color,
41
+ paint
26
42
  };
27
43
  },
28
- merge: r
44
+ merge: repaint
29
45
  });
30
- //#endregion
31
- export { i as setFillAction };
32
46
 
47
+ //#endregion
48
+ export { setFillAction };
33
49
  //# sourceMappingURL=setFill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setFill.js","names":["repaint","state","prev","paintWithColor","setFillAction","createPaintAction","pick","DEFAULT_FILL_COLOR","color","params","paint"],"sources":["../../../../src/interactions/actions/defaults/setFill.ts"],"sourcesContent":["import type { Action } from '@weasel-js/routing';\nimport type { Fill, Paint } from '@weasel-js/paint';\nimport { createPaintAction } from './createPaintAction';\nimport { paintWithColor, DEFAULT_FILL_COLOR } from '../../../util/paint';\n\n/** `setFill`'s gesture state. A `paint` shadows the color until a later color\n * supersedes it. */\ninterface SetFillState {\n /** May be 6- or 8-char hex. Ignored while `paint` is set. */\n color: string;\n /** `null` is an explicit no-fill, distinct from `undefined`, which means\n * this gesture carries no paint and the color applies. */\n paint?: Paint | null;\n}\n\n/** Repaint a node's fill, keeping whatever else the fill carries. */\nfunction repaint(prev: Fill | null | undefined, state: SetFillState): Fill | null {\n // `??` would read an explicit no-fill as \"no paint given\" and repaint the\n // node with the state's color, so absence has to be tested for.\n if (state.paint === null) return null;\n return { ...prev, paint: state.paint ?? paintWithColor(prev?.paint, state.color) };\n}\n\n/**\n * Static descriptor for the `setFill` Action.\n *\n * Takes either `color` (a hex string) or `paint` (a whole `Paint`, for\n * gradients and patterns). `paint` wins when both are present.\n *\n * Alpha semantics: alpha lives on the paint's `opacity`. A 6-char (no-alpha)\n * color adopts the alpha of the node's existing paint; an 8-char color states\n * its own. A `paint` is written verbatim.\n */\nexport const setFillAction: Action & { requires: string[] } = createPaintAction<\n SetFillState,\n Fill,\n 'fill'\n>({\n id: 'setFill',\n label: 'Set fill',\n dataKey: 'fill',\n initialState: (pick) => ({\n color: pick<string>('color') ?? DEFAULT_FILL_COLOR,\n paint: pick<Paint | null>('paint'),\n }),\n readParams: (prev, params) => {\n const color = params?.color as string | undefined;\n const paint = params?.paint as Paint | null | undefined;\n if (color === undefined && paint === undefined) return null;\n if (color === undefined) return { ...prev, paint };\n // An explicit color supersedes a paint from an earlier tick; otherwise a\n // picker drag after a gradient would do nothing.\n return { color, paint };\n },\n merge: repaint,\n});\n"],"mappings":";;;AAgBA,SAASA,EAAQ,GAA+B,GAAkC;CAIhF,OADIC,EAAM,UAAU,OAAa,OAC1B;EAAE,GAAGC;EAAM,OAAOD,EAAM,SAASE,EAAeD,GAAM,OAAOD,EAAM,KAAK;CAAE;AACnF;AAYA,IAAaG,IAAiDC,EAI5D;CACA,IAAI;CACJ,OAAO;CACP,SAAS;CACT,eAAe,OAAU;EACvB,OAAOC,EAAa,OAAO,KAAKC;EAChC,OAAOD,EAAmB,OAAO;CACnC;CACA,aAAa,GAAM,MAAW;EAC5B,IAAME,IAAQC,GAAQ,OAChBC,IAAQD,GAAQ;EAKtB,OAJID,MAAU,KAAA,KAAaE,MAAU,KAAA,IAAkB,OACnDF,MAAU,KAAA,IAAkB;GAAE,GAAGN;GAAM;EAAM,IAG1C;GAAE;GAAO;EAAM;CACxB;CACA,OAAOF;AACT,CAAC"}
1
+ {"version":3,"file":"setFill.js","names":[],"sources":["../../../../src/interactions/actions/defaults/setFill.ts"],"sourcesContent":["import type { Action } from '@weasel-js/routing';\nimport type { Fill, Paint } from '@weasel-js/paint';\nimport { createPaintAction } from './createPaintAction';\nimport { paintWithColor, DEFAULT_FILL_COLOR } from '../../../util/paint';\n\n/** `setFill`'s gesture state. A `paint` shadows the color until a later color\n * supersedes it. */\ninterface SetFillState {\n /** May be 6- or 8-char hex. Ignored while `paint` is set. */\n color: string;\n /** `null` is an explicit no-fill, distinct from `undefined`, which means\n * this gesture carries no paint and the color applies. */\n paint?: Paint | null;\n}\n\n/** Repaint a node's fill, keeping whatever else the fill carries. */\nfunction repaint(prev: Fill | null | undefined, state: SetFillState): Fill | null {\n // `??` would read an explicit no-fill as \"no paint given\" and repaint the\n // node with the state's color, so absence has to be tested for.\n if (state.paint === null) return null;\n return { ...prev, paint: state.paint ?? paintWithColor(prev?.paint, state.color) };\n}\n\n/**\n * Static descriptor for the `setFill` Action.\n *\n * Takes either `color` (a hex string) or `paint` (a whole `Paint`, for\n * gradients and patterns). `paint` wins when both are present.\n *\n * Alpha semantics: alpha lives on the paint's `opacity`. A 6-char (no-alpha)\n * color adopts the alpha of the node's existing paint; an 8-char color states\n * its own. A `paint` is written verbatim.\n */\nexport const setFillAction: Action & { requires: string[] } = createPaintAction<\n SetFillState,\n Fill,\n 'fill'\n>({\n id: 'setFill',\n label: 'Set fill',\n dataKey: 'fill',\n initialState: (pick) => ({\n color: pick<string>('color') ?? DEFAULT_FILL_COLOR,\n paint: pick<Paint | null>('paint'),\n }),\n readParams: (prev, params) => {\n const color = params?.color as string | undefined;\n const paint = params?.paint as Paint | null | undefined;\n if (color === undefined && paint === undefined) return null;\n if (color === undefined) return { ...prev, paint };\n // An explicit color supersedes a paint from an earlier tick; otherwise a\n // picker drag after a gradient would do nothing.\n return { color, paint };\n },\n merge: repaint,\n});\n"],"mappings":";;;;;AAgBA,SAAS,QAAQ,MAA+B,OAAkC;CAGhF,IAAI,MAAM,UAAU,MAAM,OAAO;CACjC,OAAO;EAAE,GAAG;EAAM,OAAO,MAAM,SAAS,eAAe,MAAM,OAAO,MAAM,KAAK;CAAE;AACnF;;;;;;;;;;;AAYA,IAAa,gBAAiD,kBAI5D;CACA,IAAI;CACJ,OAAO;CACP,SAAS;CACT,eAAe,UAAU;EACvB,OAAO,KAAa,OAAO,KAAK;EAChC,OAAO,KAAmB,OAAO;CACnC;CACA,aAAa,MAAM,WAAW;EAC5B,MAAM,QAAQ,QAAQ;EACtB,MAAM,QAAQ,QAAQ;EACtB,IAAI,UAAU,UAAa,UAAU,QAAW,OAAO;EACvD,IAAI,UAAU,QAAW,OAAO;GAAE,GAAG;GAAM;EAAM;EAGjD,OAAO;GAAE;GAAO;EAAM;CACxB;CACA,OAAO;AACT,CAAC"}
@@ -1,18 +1,27 @@
1
- import { DEFAULT_FILL_COLOR as e, paintWithAlpha as t, solid as n } from "../../../util/paint.js";
2
- import { createPaintAction as r } from "./createPaintAction.js";
1
+ import { DEFAULT_FILL_COLOR, paintWithAlpha, solid } from "../../../util/paint.js";
2
+ import { createPaintAction } from "./createPaintAction.js";
3
+
3
4
  //#region src/interactions/actions/defaults/setFillOpacity.ts
4
- var i = r({
5
+ /**
6
+ * Static descriptor for the `setFillOpacity` Action.
7
+ *
8
+ * `params.alpha01` (0..1) becomes each node's fill paint `opacity`, leaving
9
+ * the rest of the paint — color, gradient stops, pattern — alone. That is the
10
+ * one alpha slot a gradient or a pattern has, so it is the slot all of them
11
+ * use. A node with no fill yet takes the kit's default one.
12
+ */
13
+ var setFillOpacityAction = createPaintAction({
5
14
  id: "setFillOpacity",
6
15
  label: "Set fill opacity",
7
16
  dataKey: "fill",
8
- initialState: (e) => e("alpha01") ?? 1,
9
- readParams: (e, t) => t?.alpha01 ?? null,
10
- merge: (r, i) => ({
11
- ...r,
12
- paint: t(r?.paint ?? n(e), i)
17
+ initialState: (pick) => pick("alpha01") ?? 1,
18
+ readParams: (_prev, params) => params?.alpha01 ?? null,
19
+ merge: (prev, alpha01) => ({
20
+ ...prev,
21
+ paint: paintWithAlpha(prev?.paint ?? solid(DEFAULT_FILL_COLOR), alpha01)
13
22
  })
14
23
  });
15
- //#endregion
16
- export { i as setFillOpacityAction };
17
24
 
25
+ //#endregion
26
+ export { setFillOpacityAction };
18
27
  //# sourceMappingURL=setFillOpacity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setFillOpacity.js","names":["setFillOpacityAction","createPaintAction","pick","params","prev","paintWithAlpha","solid","DEFAULT_FILL_COLOR","alpha01"],"sources":["../../../../src/interactions/actions/defaults/setFillOpacity.ts"],"sourcesContent":["import type { Action } from '@weasel-js/routing';\nimport type { Fill } from '@weasel-js/paint';\nimport { createPaintAction } from './createPaintAction';\nimport { paintWithAlpha, solid, DEFAULT_FILL_COLOR } from '../../../util/paint';\n\n/**\n * Static descriptor for the `setFillOpacity` Action.\n *\n * `params.alpha01` (0..1) becomes each node's fill paint `opacity`, leaving\n * the rest of the paint — color, gradient stops, pattern — alone. That is the\n * one alpha slot a gradient or a pattern has, so it is the slot all of them\n * use. A node with no fill yet takes the kit's default one.\n */\nexport const setFillOpacityAction: Action & { requires: string[] } = createPaintAction<\n number,\n Fill,\n 'fill'\n>({\n id: 'setFillOpacity',\n label: 'Set fill opacity',\n dataKey: 'fill',\n initialState: (pick) => pick<number>('alpha01') ?? 1,\n readParams: (_prev, params) => (params?.alpha01 as number | undefined) ?? null,\n merge: (prev, alpha01) => ({ ...prev, paint: paintWithAlpha(prev?.paint ?? solid(DEFAULT_FILL_COLOR), alpha01) }),\n});\n"],"mappings":";;;AAaA,IAAaA,IAAwDC,EAInE;CACA,IAAI;CACJ,OAAO;CACP,SAAS;CACT,eAAe,MAASC,EAAa,SAAS,KAAK;CACnD,aAAa,GAAO,MAAYC,GAAQ,WAAkC;CAC1E,QAAQ,GAAM,OAAa;EAAE,GAAGC;EAAM,OAAOC,EAAeD,GAAM,SAASE,EAAMC,CAAkB,GAAGC,CAAO;CAAE;AACjH,CAAC"}
1
+ {"version":3,"file":"setFillOpacity.js","names":[],"sources":["../../../../src/interactions/actions/defaults/setFillOpacity.ts"],"sourcesContent":["import type { Action } from '@weasel-js/routing';\nimport type { Fill } from '@weasel-js/paint';\nimport { createPaintAction } from './createPaintAction';\nimport { paintWithAlpha, solid, DEFAULT_FILL_COLOR } from '../../../util/paint';\n\n/**\n * Static descriptor for the `setFillOpacity` Action.\n *\n * `params.alpha01` (0..1) becomes each node's fill paint `opacity`, leaving\n * the rest of the paint — color, gradient stops, pattern — alone. That is the\n * one alpha slot a gradient or a pattern has, so it is the slot all of them\n * use. A node with no fill yet takes the kit's default one.\n */\nexport const setFillOpacityAction: Action & { requires: string[] } = createPaintAction<\n number,\n Fill,\n 'fill'\n>({\n id: 'setFillOpacity',\n label: 'Set fill opacity',\n dataKey: 'fill',\n initialState: (pick) => pick<number>('alpha01') ?? 1,\n readParams: (_prev, params) => (params?.alpha01 as number | undefined) ?? null,\n merge: (prev, alpha01) => ({ ...prev, paint: paintWithAlpha(prev?.paint ?? solid(DEFAULT_FILL_COLOR), alpha01) }),\n});\n"],"mappings":";;;;;;;;;;;;AAaA,IAAa,uBAAwD,kBAInE;CACA,IAAI;CACJ,OAAO;CACP,SAAS;CACT,eAAe,SAAS,KAAa,SAAS,KAAK;CACnD,aAAa,OAAO,WAAY,QAAQ,WAAkC;CAC1E,QAAQ,MAAM,aAAa;EAAE,GAAG;EAAM,OAAO,eAAe,MAAM,SAAS,MAAM,kBAAkB,GAAG,OAAO;CAAE;AACjH,CAAC"}
@@ -1,36 +1,57 @@
1
- import { DEFAULT_STROKE_COLOR as e, paintWithColor as t, strokeOf as n, strokeWith as r } from "../../../util/paint.js";
2
- import { createPaintAction as i } from "./createPaintAction.js";
1
+ import { DEFAULT_STROKE_COLOR, paintWithColor, strokeOf, strokeWith } from "../../../util/paint.js";
2
+ import { createPaintAction } from "./createPaintAction.js";
3
+
3
4
  //#region src/interactions/actions/defaults/setStroke.ts
4
- function a(e, i) {
5
- return i.paint === null ? null : i.paint ? e ? {
6
- ...e,
7
- paint: i.paint
8
- } : r(i.paint) : e ? {
9
- ...e,
10
- paint: t(e.paint, i.color)
11
- } : n(i.color);
5
+ /** Repaint a node's stroke, keeping its width, cap, join, dash and align, so
6
+ * picking a paint does not discard the rest of the stroke. A node with no
7
+ * stroke yet gets a hairline one. */
8
+ function repaint(prev, state) {
9
+ if (state.paint === null) return null;
10
+ if (state.paint) return prev ? {
11
+ ...prev,
12
+ paint: state.paint
13
+ } : strokeWith(state.paint);
14
+ if (!prev) return strokeOf(state.color);
15
+ return {
16
+ ...prev,
17
+ paint: paintWithColor(prev.paint, state.color)
18
+ };
12
19
  }
13
- var o = i({
20
+ /**
21
+ * Static descriptor for the `setStroke` Action.
22
+ *
23
+ * Takes either `color` (a hex string) or `paint` (a whole `Paint`, for
24
+ * gradients and patterns). `paint` wins when both are present. A stroke's
25
+ * width, cap, join, dash and align survive either.
26
+ *
27
+ * Alpha semantics: alpha lives on the stroke paint's `opacity`. A 6-char
28
+ * (no-alpha) color adopts the alpha of the node's existing stroke paint; an
29
+ * 8-char color states its own. A `paint` is written verbatim.
30
+ */
31
+ var setStrokeAction = createPaintAction({
14
32
  id: "setStroke",
15
33
  label: "Set stroke",
16
34
  dataKey: "stroke",
17
- initialState: (t) => ({
18
- color: t("color") ?? e,
19
- paint: t("paint")
35
+ initialState: (pick) => ({
36
+ color: pick("color") ?? DEFAULT_STROKE_COLOR,
37
+ paint: pick("paint")
20
38
  }),
21
- readParams: (e, t) => {
22
- let n = t?.color, r = t?.paint;
23
- return n === void 0 && r === void 0 ? null : n === void 0 ? {
24
- ...e,
25
- paint: r
26
- } : {
27
- color: n,
28
- paint: r
39
+ readParams: (prev, params) => {
40
+ const color = params?.color;
41
+ const paint = params?.paint;
42
+ if (color === void 0 && paint === void 0) return null;
43
+ if (color === void 0) return {
44
+ ...prev,
45
+ paint
46
+ };
47
+ return {
48
+ color,
49
+ paint
29
50
  };
30
51
  },
31
- merge: a
52
+ merge: repaint
32
53
  });
33
- //#endregion
34
- export { o as setStrokeAction };
35
54
 
55
+ //#endregion
56
+ export { setStrokeAction };
36
57
  //# sourceMappingURL=setStroke.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setStroke.js","names":["repaint","state","prev","strokeWith","paintWithColor","strokeOf","setStrokeAction","createPaintAction","pick","DEFAULT_STROKE_COLOR","color","params","paint"],"sources":["../../../../src/interactions/actions/defaults/setStroke.ts"],"sourcesContent":["import type { Action } from '@weasel-js/routing';\nimport type { Paint, Stroke } from '@weasel-js/paint';\nimport { createPaintAction } from './createPaintAction';\nimport { paintWithColor, strokeOf, strokeWith, DEFAULT_STROKE_COLOR } from '../../../util/paint';\n\n/** `setStroke`'s gesture state — `setFill`'s, against a stroke. */\ninterface SetStrokeState {\n /** May be 6- or 8-char hex. Ignored while `paint` is set. */\n color: string;\n /** `null` is an explicit no-stroke, distinct from `undefined`, which means\n * this gesture carries no paint and the color applies. */\n paint?: Paint | null;\n}\n\n/** Repaint a node's stroke, keeping its width, cap, join, dash and align, so\n * picking a paint does not discard the rest of the stroke. A node with no\n * stroke yet gets a hairline one. */\nfunction repaint(prev: Stroke | null | undefined, state: SetStrokeState): Stroke | null {\n // A stroke whose paint is none paints nothing, so the whole stroke goes\n // rather than being kept as a widthful thing that draws no ink.\n if (state.paint === null) return null;\n if (state.paint) return prev ? { ...prev, paint: state.paint } : strokeWith(state.paint);\n if (!prev) return strokeOf(state.color);\n return { ...prev, paint: paintWithColor(prev.paint, state.color) };\n}\n\n/**\n * Static descriptor for the `setStroke` Action.\n *\n * Takes either `color` (a hex string) or `paint` (a whole `Paint`, for\n * gradients and patterns). `paint` wins when both are present. A stroke's\n * width, cap, join, dash and align survive either.\n *\n * Alpha semantics: alpha lives on the stroke paint's `opacity`. A 6-char\n * (no-alpha) color adopts the alpha of the node's existing stroke paint; an\n * 8-char color states its own. A `paint` is written verbatim.\n */\nexport const setStrokeAction: Action & { requires: string[] } = createPaintAction<\n SetStrokeState,\n Stroke,\n 'stroke'\n>({\n id: 'setStroke',\n label: 'Set stroke',\n dataKey: 'stroke',\n initialState: (pick) => ({\n color: pick<string>('color') ?? DEFAULT_STROKE_COLOR,\n paint: pick<Paint | null>('paint'),\n }),\n readParams: (prev, params) => {\n const color = params?.color as string | undefined;\n const paint = params?.paint as Paint | null | undefined;\n if (color === undefined && paint === undefined) return null;\n if (color === undefined) return { ...prev, paint };\n // An explicit color supersedes a paint from an earlier tick; otherwise a\n // picker drag after a gradient would do nothing.\n return { color, paint };\n },\n merge: repaint,\n});\n"],"mappings":";;;AAiBA,SAASA,EAAQ,GAAiC,GAAsC;CAMtF,OAHIC,EAAM,UAAU,OAAa,OAC7BA,EAAM,QAAcC,IAAO;EAAE,GAAGA;EAAM,OAAOD,EAAM;CAAM,IAAIE,EAAWF,EAAM,KAAK,IAClFC,IACE;EAAE,GAAGA;EAAM,OAAOE,EAAeF,EAAK,OAAOD,EAAM,KAAK;CAAE,IAD/CI,EAASJ,EAAM,KAAK;AAExC;AAaA,IAAaK,IAAmDC,EAI9D;CACA,IAAI;CACJ,OAAO;CACP,SAAS;CACT,eAAe,OAAU;EACvB,OAAOC,EAAa,OAAO,KAAKC;EAChC,OAAOD,EAAmB,OAAO;CACnC;CACA,aAAa,GAAM,MAAW;EAC5B,IAAME,IAAQC,GAAQ,OAChBC,IAAQD,GAAQ;EAKtB,OAJID,MAAU,KAAA,KAAaE,MAAU,KAAA,IAAkB,OACnDF,MAAU,KAAA,IAAkB;GAAE,GAAGR;GAAM;EAAM,IAG1C;GAAE;GAAO;EAAM;CACxB;CACA,OAAOF;AACT,CAAC"}
1
+ {"version":3,"file":"setStroke.js","names":[],"sources":["../../../../src/interactions/actions/defaults/setStroke.ts"],"sourcesContent":["import type { Action } from '@weasel-js/routing';\nimport type { Paint, Stroke } from '@weasel-js/paint';\nimport { createPaintAction } from './createPaintAction';\nimport { paintWithColor, strokeOf, strokeWith, DEFAULT_STROKE_COLOR } from '../../../util/paint';\n\n/** `setStroke`'s gesture state — `setFill`'s, against a stroke. */\ninterface SetStrokeState {\n /** May be 6- or 8-char hex. Ignored while `paint` is set. */\n color: string;\n /** `null` is an explicit no-stroke, distinct from `undefined`, which means\n * this gesture carries no paint and the color applies. */\n paint?: Paint | null;\n}\n\n/** Repaint a node's stroke, keeping its width, cap, join, dash and align, so\n * picking a paint does not discard the rest of the stroke. A node with no\n * stroke yet gets a hairline one. */\nfunction repaint(prev: Stroke | null | undefined, state: SetStrokeState): Stroke | null {\n // A stroke whose paint is none paints nothing, so the whole stroke goes\n // rather than being kept as a widthful thing that draws no ink.\n if (state.paint === null) return null;\n if (state.paint) return prev ? { ...prev, paint: state.paint } : strokeWith(state.paint);\n if (!prev) return strokeOf(state.color);\n return { ...prev, paint: paintWithColor(prev.paint, state.color) };\n}\n\n/**\n * Static descriptor for the `setStroke` Action.\n *\n * Takes either `color` (a hex string) or `paint` (a whole `Paint`, for\n * gradients and patterns). `paint` wins when both are present. A stroke's\n * width, cap, join, dash and align survive either.\n *\n * Alpha semantics: alpha lives on the stroke paint's `opacity`. A 6-char\n * (no-alpha) color adopts the alpha of the node's existing stroke paint; an\n * 8-char color states its own. A `paint` is written verbatim.\n */\nexport const setStrokeAction: Action & { requires: string[] } = createPaintAction<\n SetStrokeState,\n Stroke,\n 'stroke'\n>({\n id: 'setStroke',\n label: 'Set stroke',\n dataKey: 'stroke',\n initialState: (pick) => ({\n color: pick<string>('color') ?? DEFAULT_STROKE_COLOR,\n paint: pick<Paint | null>('paint'),\n }),\n readParams: (prev, params) => {\n const color = params?.color as string | undefined;\n const paint = params?.paint as Paint | null | undefined;\n if (color === undefined && paint === undefined) return null;\n if (color === undefined) return { ...prev, paint };\n // An explicit color supersedes a paint from an earlier tick; otherwise a\n // picker drag after a gradient would do nothing.\n return { color, paint };\n },\n merge: repaint,\n});\n"],"mappings":";;;;;;;AAiBA,SAAS,QAAQ,MAAiC,OAAsC;CAGtF,IAAI,MAAM,UAAU,MAAM,OAAO;CACjC,IAAI,MAAM,OAAO,OAAO,OAAO;EAAE,GAAG;EAAM,OAAO,MAAM;CAAM,IAAI,WAAW,MAAM,KAAK;CACvF,IAAI,CAAC,MAAM,OAAO,SAAS,MAAM,KAAK;CACtC,OAAO;EAAE,GAAG;EAAM,OAAO,eAAe,KAAK,OAAO,MAAM,KAAK;CAAE;AACnE;;;;;;;;;;;;AAaA,IAAa,kBAAmD,kBAI9D;CACA,IAAI;CACJ,OAAO;CACP,SAAS;CACT,eAAe,UAAU;EACvB,OAAO,KAAa,OAAO,KAAK;EAChC,OAAO,KAAmB,OAAO;CACnC;CACA,aAAa,MAAM,WAAW;EAC5B,MAAM,QAAQ,QAAQ;EACtB,MAAM,QAAQ,QAAQ;EACtB,IAAI,UAAU,UAAa,UAAU,QAAW,OAAO;EACvD,IAAI,UAAU,QAAW,OAAO;GAAE,GAAG;GAAM;EAAM;EAGjD,OAAO;GAAE;GAAO;EAAM;CACxB;CACA,OAAO;AACT,CAAC"}
@@ -1,21 +1,29 @@
1
- import { DEFAULT_STROKE_COLOR as e, paintWithAlpha as t, solid as n, strokeOf as r } from "../../../util/paint.js";
2
- import { createPaintAction as i } from "./createPaintAction.js";
1
+ import { DEFAULT_STROKE_COLOR, paintWithAlpha, solid, strokeOf } from "../../../util/paint.js";
2
+ import { createPaintAction } from "./createPaintAction.js";
3
+
3
4
  //#region src/interactions/actions/defaults/setStrokeOpacity.ts
4
- var a = i({
5
+ /**
6
+ * Static descriptor for the `setStrokeOpacity` Action.
7
+ *
8
+ * `params.alpha01` (0..1) becomes each node's stroke paint `opacity`, leaving
9
+ * the rest of the stroke — color, width, cap, join, dash — alone. A node with
10
+ * no stroke yet gets a hairline one.
11
+ */
12
+ var setStrokeOpacityAction = createPaintAction({
5
13
  id: "setStrokeOpacity",
6
14
  label: "Set stroke opacity",
7
15
  dataKey: "stroke",
8
- initialState: (e) => e("alpha01") ?? 1,
9
- readParams: (e, t) => t?.alpha01 ?? null,
10
- merge: (i, a) => {
11
- let o = i ?? r(e);
16
+ initialState: (pick) => pick("alpha01") ?? 1,
17
+ readParams: (_prev, params) => params?.alpha01 ?? null,
18
+ merge: (prev, alpha01) => {
19
+ const base = prev ?? strokeOf(DEFAULT_STROKE_COLOR);
12
20
  return {
13
- ...o,
14
- paint: t(o.paint ?? n(e), a)
21
+ ...base,
22
+ paint: paintWithAlpha(base.paint ?? solid(DEFAULT_STROKE_COLOR), alpha01)
15
23
  };
16
24
  }
17
25
  });
18
- //#endregion
19
- export { a as setStrokeOpacityAction };
20
26
 
27
+ //#endregion
28
+ export { setStrokeOpacityAction };
21
29
  //# sourceMappingURL=setStrokeOpacity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setStrokeOpacity.js","names":["setStrokeOpacityAction","createPaintAction","pick","params","base","prev","strokeOf","DEFAULT_STROKE_COLOR","paintWithAlpha","solid","alpha01"],"sources":["../../../../src/interactions/actions/defaults/setStrokeOpacity.ts"],"sourcesContent":["import type { Action } from '@weasel-js/routing';\nimport type { Stroke } from '@weasel-js/paint';\nimport { createPaintAction } from './createPaintAction';\nimport { paintWithAlpha, solid, strokeOf, DEFAULT_STROKE_COLOR } from '../../../util/paint';\n\n/**\n * Static descriptor for the `setStrokeOpacity` Action.\n *\n * `params.alpha01` (0..1) becomes each node's stroke paint `opacity`, leaving\n * the rest of the stroke — color, width, cap, join, dash — alone. A node with\n * no stroke yet gets a hairline one.\n */\nexport const setStrokeOpacityAction: Action & { requires: string[] } = createPaintAction<\n number,\n Stroke,\n 'stroke'\n>({\n id: 'setStrokeOpacity',\n label: 'Set stroke opacity',\n dataKey: 'stroke',\n initialState: (pick) => pick<number>('alpha01') ?? 1,\n readParams: (_prev, params) => (params?.alpha01 as number | undefined) ?? null,\n merge: (prev, alpha01) => {\n const base = prev ?? strokeOf(DEFAULT_STROKE_COLOR);\n // A stroke with no paint has no opacity to set; seed the same default\n // colour a strokeless node gets, keeping the width and joins it has.\n return { ...base, paint: paintWithAlpha(base.paint ?? solid(DEFAULT_STROKE_COLOR), alpha01) };\n },\n});\n"],"mappings":";;;AAYA,IAAaA,IAA0DC,EAIrE;CACA,IAAI;CACJ,OAAO;CACP,SAAS;CACT,eAAe,MAASC,EAAa,SAAS,KAAK;CACnD,aAAa,GAAO,MAAYC,GAAQ,WAAkC;CAC1E,QAAQ,GAAM,MAAY;EACxB,IAAMC,IAAOC,KAAQC,EAASC,CAAoB;EAGlD,OAAO;GAAE,GAAGH;GAAM,OAAOI,EAAeJ,EAAK,SAASK,EAAMF,CAAoB,GAAGG,CAAO;EAAE;CAC9F;AACF,CAAC"}
1
+ {"version":3,"file":"setStrokeOpacity.js","names":[],"sources":["../../../../src/interactions/actions/defaults/setStrokeOpacity.ts"],"sourcesContent":["import type { Action } from '@weasel-js/routing';\nimport type { Stroke } from '@weasel-js/paint';\nimport { createPaintAction } from './createPaintAction';\nimport { paintWithAlpha, solid, strokeOf, DEFAULT_STROKE_COLOR } from '../../../util/paint';\n\n/**\n * Static descriptor for the `setStrokeOpacity` Action.\n *\n * `params.alpha01` (0..1) becomes each node's stroke paint `opacity`, leaving\n * the rest of the stroke — color, width, cap, join, dash — alone. A node with\n * no stroke yet gets a hairline one.\n */\nexport const setStrokeOpacityAction: Action & { requires: string[] } = createPaintAction<\n number,\n Stroke,\n 'stroke'\n>({\n id: 'setStrokeOpacity',\n label: 'Set stroke opacity',\n dataKey: 'stroke',\n initialState: (pick) => pick<number>('alpha01') ?? 1,\n readParams: (_prev, params) => (params?.alpha01 as number | undefined) ?? null,\n merge: (prev, alpha01) => {\n const base = prev ?? strokeOf(DEFAULT_STROKE_COLOR);\n // A stroke with no paint has no opacity to set; seed the same default\n // colour a strokeless node gets, keeping the width and joins it has.\n return { ...base, paint: paintWithAlpha(base.paint ?? solid(DEFAULT_STROKE_COLOR), alpha01) };\n },\n});\n"],"mappings":";;;;;;;;;;;AAYA,IAAa,yBAA0D,kBAIrE;CACA,IAAI;CACJ,OAAO;CACP,SAAS;CACT,eAAe,SAAS,KAAa,SAAS,KAAK;CACnD,aAAa,OAAO,WAAY,QAAQ,WAAkC;CAC1E,QAAQ,MAAM,YAAY;EACxB,MAAM,OAAO,QAAQ,SAAS,oBAAoB;EAGlD,OAAO;GAAE,GAAG;GAAM,OAAO,eAAe,KAAK,SAAS,MAAM,oBAAoB,GAAG,OAAO;EAAE;CAC9F;AACF,CAAC"}
@@ -1,39 +1,64 @@
1
- import { ActionDisabledReason as e, resolveParams as t } from "@weasel-js/routing";
1
+ import { pathOperationTags } from "../pathGestureTags.js";
2
+ import { ActionDisabledReason, resolveParams } from "@weasel-js/routing";
3
+
2
4
  //#region src/interactions/actions/defaults/slice.ts
3
- var n = {
5
+ /**
6
+ * Static descriptor for the `slice` Action.
7
+ *
8
+ * Ongoing drag invoker: tracks the cut while the gesture is in flight,
9
+ * publishes it as a `'cut'` overlay, and on commit hands it to
10
+ * `SliceDep.commit(cut)`. No-ops gracefully when the `slice` dep is absent.
11
+ *
12
+ * The cut is a straight line from drag start to the pointer by default. With
13
+ * the binding param `cut: 'freehand'` it is the whole drag trail instead.
14
+ */
15
+ var sliceAction = {
4
16
  id: "slice",
5
17
  label: "Slice",
18
+ tags: pathOperationTags("click"),
6
19
  group: "edit",
7
20
  eligible: { capability: "edits-page" },
8
21
  requires: ["slice"],
9
22
  invoker: {
10
23
  timing: "ongoing",
11
- start(e, n) {
12
- let r = e.deps.slice, i = e.drag?.start ?? e.world, a = e.drag?.current ?? e.world, o, s = !0, c = () => t(n?.params)?.cut === "freehand", l = () => c() && o && o.length >= 2 ? o.map((e) => ({
13
- x: e.x,
14
- y: e.y
15
- })) : [i, a];
24
+ start(ctx, opts) {
25
+ const dep = ctx.deps.slice;
26
+ const a = ctx.drag?.start ?? ctx.world;
27
+ let current = ctx.drag?.current ?? ctx.world;
28
+ let trail;
29
+ let open = true;
30
+ const freehand = () => resolveParams(opts?.params)?.["cut"] === "freehand";
31
+ const cut = () => freehand() && trail && trail.length >= 2 ? trail.map((p) => ({
32
+ x: p.x,
33
+ y: p.y
34
+ })) : [a, current];
16
35
  return {
17
36
  kind: "slice",
18
- onMove(e) {
19
- a = e.drag?.current ?? e.world, o = e.drag?.points;
37
+ onMove(moveCtx) {
38
+ current = moveCtx.drag?.current ?? moveCtx.world;
39
+ trail = moveCtx.drag?.points;
20
40
  },
21
41
  overlay() {
22
- return s ? {
42
+ if (!open) return null;
43
+ return {
23
44
  kind: "polyline",
24
- points: l(),
45
+ points: cut(),
25
46
  role: "cut"
26
- } : null;
47
+ };
27
48
  },
28
- onEnd(e, t) {
29
- s = !1, t !== "cancel" && r && (a = e.drag?.current ?? e.world, o = e.drag?.points ?? o, r.commit(l()));
49
+ onEnd(endCtx, reason) {
50
+ open = false;
51
+ if (reason === "cancel" || !dep) return;
52
+ current = endCtx.drag?.current ?? endCtx.world;
53
+ trail = endCtx.drag?.points ?? trail;
54
+ dep.commit(cut());
30
55
  }
31
56
  };
32
57
  }
33
58
  },
34
- enabled: (t) => t?.slice ? !0 : e.NotApplicable
59
+ enabled: (deps) => deps?.["slice"] ? true : ActionDisabledReason.NotApplicable
35
60
  };
36
- //#endregion
37
- export { n as sliceAction };
38
61
 
62
+ //#endregion
63
+ export { sliceAction };
39
64
  //# sourceMappingURL=slice.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slice.js","names":["sliceAction","dep","ctx","a","current","trail","open","freehand","resolveParams","opts","\"cut\"","cut","p","moveCtx","reason","endCtx","deps","\"slice\"","ActionDisabledReason"],"sources":["../../../../src/interactions/actions/defaults/slice.ts"],"sourcesContent":["import type { Action } from '@weasel-js/routing';\nimport { ActionDisabledReason, resolveParams } from '@weasel-js/routing';\nimport type { BindingOpts, InvocationCtx, OngoingHandle, OngoingOverlay, Point2 } from '@weasel-js/routing';\n\n/**\n * @experimental\n * Static descriptor for the `slice` Action.\n *\n * Ongoing drag invoker: tracks the cut while the gesture is in flight,\n * publishes it as a `'cut'` overlay, and on commit hands it to\n * `SliceDep.commit(cut)`. No-ops gracefully when the `slice` dep is absent.\n *\n * The cut is a straight line from drag start to the pointer by default. With\n * the binding param `cut: 'freehand'` it is the whole drag trail instead.\n */\nexport const sliceAction: Action & { requires: string[] } = {\n id: 'slice',\n label: 'Slice',\n group: 'edit',\n eligible: { capability: 'edits-page' },\n requires: ['slice'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts?: BindingOpts): OngoingHandle {\n const dep = ctx.deps.slice;\n const a: Point2 = ctx.drag?.start ?? ctx.world;\n let current: Point2 = ctx.drag?.current ?? ctx.world;\n let trail: ReadonlyArray<Point2> | undefined;\n let open = true;\n\n const freehand = () => resolveParams(opts?.params)?.['cut'] === 'freehand';\n const cut = (): Point2[] =>\n freehand() && trail && trail.length >= 2\n ? trail.map((p) => ({ x: p.x, y: p.y }))\n : [a, current];\n\n return {\n kind: 'slice',\n onMove(moveCtx: InvocationCtx): void {\n current = moveCtx.drag?.current ?? moveCtx.world;\n trail = moveCtx.drag?.points;\n },\n overlay(): OngoingOverlay | null {\n if (!open) return null;\n return { kind: 'polyline', points: cut(), role: 'cut' };\n },\n onEnd(endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n open = false;\n if (reason === 'cancel' || !dep) return;\n current = endCtx.drag?.current ?? endCtx.world;\n trail = endCtx.drag?.points ?? trail;\n dep.commit(cut());\n },\n };\n },\n },\n // Slice can only act when a `slice` dep is wired (its `onEnd` no-ops\n // otherwise), so reflect dep presence for any UI reading action-enabled\n // state. The dispatcher still self-guards via the empty-handle path.\n enabled: (deps) => (deps?.['slice'] ? true : ActionDisabledReason.NotApplicable),\n};\n"],"mappings":";;AAeA,IAAaA,IAA+C;CAC1D,IAAI;CACJ,OAAO;CACP,OAAO;CACP,UAAU,EAAE,YAAY,aAAa;CACrC,UAAU,CAAC,OAAO;CAClB,SAAS;EACP,QAAQ;EACR,MAAM,GAAoB,GAAmC;GAC3D,IAAMC,IAAMC,EAAI,KAAK,OACfC,IAAYD,EAAI,MAAM,SAASA,EAAI,OACrCE,IAAkBF,EAAI,MAAM,WAAWA,EAAI,OAC3CG,GACAC,IAAO,IAELC,UAAiBC,EAAcC,GAAM,MAAM,CAAC,EAAGC,QAAW,YAC1DC,UACJJ,EAAS,KAAKF,KAASA,EAAM,UAAU,IACnCA,EAAM,KAAK,OAAO;IAAE,GAAGO,EAAE;IAAG,GAAGA,EAAE;GAAE,EAAE,IACrC,CAACT,GAAGC,CAAO;GAEjB,OAAO;IACL,MAAM;IACN,OAAO,GAA8B;KAEnC,AADA,IAAUS,EAAQ,MAAM,WAAWA,EAAQ,OAC3C,IAAQA,EAAQ,MAAM;IACxB;IACA,UAAiC;KAE/B,OADKP,IACE;MAAE,MAAM;MAAY,QAAQK,EAAI;MAAG,MAAM;KAAM,IADpC;IAEpB;IACA,MAAM,GAAuB,GAAmC;KAE9D,AADA,IAAO,IACHG,MAAW,YAAab,MAC5B,IAAUc,EAAO,MAAM,WAAWA,EAAO,OACzC,IAAQA,EAAO,MAAM,UAAUV,GAC/BJ,EAAI,OAAOU,EAAI,CAAC;IAClB;GACF;EACF;CACF;CAIA,UAAU,MAAUK,GAAOC,QAAW,KAAOC,EAAqB;AACpE"}
1
+ {"version":3,"file":"slice.js","names":[],"sources":["../../../../src/interactions/actions/defaults/slice.ts"],"sourcesContent":["import type { Action } from '@weasel-js/routing';\nimport { ActionDisabledReason, resolveParams } from '@weasel-js/routing';\nimport type { BindingOpts, InvocationCtx, OngoingHandle, OngoingOverlay, Point2 } from '@weasel-js/routing';\nimport { pathOperationTags } from '../pathGestureTags';\n\n/**\n * Static descriptor for the `slice` Action.\n *\n * Ongoing drag invoker: tracks the cut while the gesture is in flight,\n * publishes it as a `'cut'` overlay, and on commit hands it to\n * `SliceDep.commit(cut)`. No-ops gracefully when the `slice` dep is absent.\n *\n * The cut is a straight line from drag start to the pointer by default. With\n * the binding param `cut: 'freehand'` it is the whole drag trail instead.\n */\nexport const sliceAction: Action & { requires: string[] } = {\n id: 'slice',\n label: 'Slice',\n tags: pathOperationTags('click'),\n group: 'edit',\n eligible: { capability: 'edits-page' },\n requires: ['slice'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts?: BindingOpts): OngoingHandle {\n const dep = ctx.deps.slice;\n const a: Point2 = ctx.drag?.start ?? ctx.world;\n let current: Point2 = ctx.drag?.current ?? ctx.world;\n let trail: ReadonlyArray<Point2> | undefined;\n let open = true;\n\n const freehand = () => resolveParams(opts?.params)?.['cut'] === 'freehand';\n const cut = (): Point2[] =>\n freehand() && trail && trail.length >= 2\n ? trail.map((p) => ({ x: p.x, y: p.y }))\n : [a, current];\n\n return {\n kind: 'slice',\n onMove(moveCtx: InvocationCtx): void {\n current = moveCtx.drag?.current ?? moveCtx.world;\n trail = moveCtx.drag?.points;\n },\n overlay(): OngoingOverlay | null {\n if (!open) return null;\n return { kind: 'polyline', points: cut(), role: 'cut' };\n },\n onEnd(endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n open = false;\n if (reason === 'cancel' || !dep) return;\n current = endCtx.drag?.current ?? endCtx.world;\n trail = endCtx.drag?.points ?? trail;\n dep.commit(cut());\n },\n };\n },\n },\n // Slice can only act when a `slice` dep is wired (its `onEnd` no-ops\n // otherwise), so reflect dep presence for any UI reading action-enabled\n // state. The dispatcher still self-guards via the empty-handle path.\n enabled: (deps) => (deps?.['slice'] ? true : ActionDisabledReason.NotApplicable),\n};\n"],"mappings":";;;;;;;;;;;;;;AAeA,IAAa,cAA+C;CAC1D,IAAI;CACJ,OAAO;CACP,MAAM,kBAAkB,OAAO;CAC/B,OAAO;CACP,UAAU,EAAE,YAAY,aAAa;CACrC,UAAU,CAAC,OAAO;CAClB,SAAS;EACP,QAAQ;EACR,MAAM,KAAoB,MAAmC;GAC3D,MAAM,MAAM,IAAI,KAAK;GACrB,MAAM,IAAY,IAAI,MAAM,SAAS,IAAI;GACzC,IAAI,UAAkB,IAAI,MAAM,WAAW,IAAI;GAC/C,IAAI;GACJ,IAAI,OAAO;GAEX,MAAM,iBAAiB,cAAc,MAAM,MAAM,CAAC,GAAG,WAAW;GAChE,MAAM,YACJ,SAAS,KAAK,SAAS,MAAM,UAAU,IACnC,MAAM,KAAK,OAAO;IAAE,GAAG,EAAE;IAAG,GAAG,EAAE;GAAE,EAAE,IACrC,CAAC,GAAG,OAAO;GAEjB,OAAO;IACL,MAAM;IACN,OAAO,SAA8B;KACnC,UAAU,QAAQ,MAAM,WAAW,QAAQ;KAC3C,QAAQ,QAAQ,MAAM;IACxB;IACA,UAAiC;KAC/B,IAAI,CAAC,MAAM,OAAO;KAClB,OAAO;MAAE,MAAM;MAAY,QAAQ,IAAI;MAAG,MAAM;KAAM;IACxD;IACA,MAAM,QAAuB,QAAmC;KAC9D,OAAO;KACP,IAAI,WAAW,YAAY,CAAC,KAAK;KACjC,UAAU,OAAO,MAAM,WAAW,OAAO;KACzC,QAAQ,OAAO,MAAM,UAAU;KAC/B,IAAI,OAAO,IAAI,CAAC;IAClB;GACF;EACF;CACF;CAIA,UAAU,SAAU,OAAO,WAAW,OAAO,qBAAqB;AACpE"}
@@ -1,58 +1,79 @@
1
- import { createDeleteOp as e } from "../../../core/ops/delete.js";
2
- import { createInsertOp as t } from "../../../core/ops/create.js";
3
- import { boundsOfPath as n, hasOpenSubpath as r } from "@weasel-js/geom";
4
- import { snipPathByPolyline as i, splitPathByPolyline as a } from "@weasel-js/geom/booleans";
1
+ import { createDeleteOp } from "../../../core/ops/delete.js";
2
+ import { createInsertOp } from "../../../core/ops/create.js";
3
+ import { boundsOfPath, hasOpenSubpath } from "@weasel-js/geom";
4
+ import { snipPathByPolyline, splitPathByPolyline } from "@weasel-js/geom/booleans";
5
+
5
6
  //#region src/interactions/actions/defaults/sliceOps.ts
6
- function o(o) {
7
- let { cut: c, nextId: l, selection: u } = o, d = o.placePiece ?? ((e, t) => ({
8
- pose: s(e.node.pose, n(t)),
9
- path: t
10
- })), f = [], p = new Set(u ?? []), m = /* @__PURE__ */ new Set(), h = [], g = o.leaves.map((e, t) => ({
11
- leaf: e,
12
- i: t
13
- })).sort((e, t) => t.leaf.index - e.leaf.index || e.i - t.i);
14
- for (let { leaf: n } of g) {
15
- let o = r(n.worldPath) ? i(n.worldPath, c) : a(n.worldPath, c);
16
- if (!o) continue;
17
- let s = n.node.id;
18
- m.add(s), f.push(e({
19
- node: n.node,
20
- index: n.index,
7
+ /**
8
+ * Cut `leaves` along `cut` and return the ops that swap each crossed leaf for
9
+ * its pieces.
10
+ *
11
+ * A path with an open subpath is snipped along its stroke
12
+ * (`snipPathByPolyline`); a closed one is knifed into closed pieces
13
+ * (`splitPathByPolyline`), which is also where a closed loop cuts out the
14
+ * region it encloses. Each piece copies its source's node with the piece as
15
+ * `data.path` and a fresh id. Leaves the cut misses produce nothing.
16
+ */
17
+ function computeSliceOps(args) {
18
+ const { cut, nextId, selection } = args;
19
+ const placePiece = args.placePiece ?? ((leaf, piece) => ({
20
+ pose: piecePose(leaf.node.pose, boundsOfPath(piece)),
21
+ path: piece
22
+ }));
23
+ const ops = [];
24
+ const selected = new Set(selection ?? []);
25
+ const cutIds = /* @__PURE__ */ new Set();
26
+ const inherited = [];
27
+ const ordered = args.leaves.map((leaf, i) => ({
28
+ leaf,
29
+ i
30
+ })).sort((a, b) => b.leaf.index - a.leaf.index || a.i - b.i);
31
+ for (const { leaf } of ordered) {
32
+ const pieces = hasOpenSubpath(leaf.worldPath) ? snipPathByPolyline(leaf.worldPath, cut) : splitPathByPolyline(leaf.worldPath, cut);
33
+ if (!pieces) continue;
34
+ const sourceId = leaf.node.id;
35
+ cutIds.add(sourceId);
36
+ ops.push(createDeleteOp({
37
+ node: leaf.node,
38
+ index: leaf.index,
21
39
  label: "Slice"
22
40
  }));
23
- for (let e of o) {
24
- let r = d(n, e), i = {
25
- ...n.node,
26
- id: l(),
27
- pose: r.pose,
41
+ for (const piece of pieces) {
42
+ const stored = placePiece(leaf, piece);
43
+ const node = {
44
+ ...leaf.node,
45
+ id: nextId(),
46
+ pose: stored.pose,
28
47
  data: {
29
- ...n.node.data,
30
- path: r.path
48
+ ...leaf.node.data,
49
+ path: stored.path
31
50
  }
32
51
  };
33
- f.push(t({
34
- node: i,
35
- index: n.index,
52
+ ops.push(createInsertOp({
53
+ node,
54
+ index: leaf.index,
36
55
  label: "Slice"
37
- })), p.has(s) && h.push(i.id);
56
+ }));
57
+ if (selected.has(sourceId)) inherited.push(node.id);
38
58
  }
39
59
  }
40
60
  return {
41
- ops: f,
42
- nextSelection: u && m.size > 0 ? [...u.filter((e) => !m.has(e)), ...h] : null
61
+ ops,
62
+ nextSelection: selection && cutIds.size > 0 ? [...selection.filter((id) => !cutIds.has(id)), ...inherited] : null
43
63
  };
44
64
  }
45
- function s(e, t) {
46
- let n = e && typeof e == "object" ? { ...e } : {};
47
- return delete n.rotation, {
48
- ...n,
49
- x: t.x,
50
- y: t.y,
51
- width: t.width,
52
- height: t.height
65
+ function piecePose(source, b) {
66
+ const rest = source && typeof source === "object" ? { ...source } : {};
67
+ delete rest["rotation"];
68
+ return {
69
+ ...rest,
70
+ x: b.x,
71
+ y: b.y,
72
+ width: b.width,
73
+ height: b.height
53
74
  };
54
75
  }
55
- //#endregion
56
- export { o as computeSliceOps };
57
76
 
77
+ //#endregion
78
+ export { computeSliceOps };
58
79
  //# sourceMappingURL=sliceOps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sliceOps.js","names":["computeSliceOps","args","placePiece","piecePose","leaf","boundsOfPath","piece","ops","selected","selection","cutIds","inherited","ordered","b","a","pieces","hasOpenSubpath","snipPathByPolyline","cut","splitPathByPolyline","sourceId","createDeleteOp","stored","node","nextId","createInsertOp","id","rest","source","\"rotation\""],"sources":["../../../../src/interactions/actions/defaults/sliceOps.ts"],"sourcesContent":["import { boundsOfPath, hasOpenSubpath, type Path } from '@weasel-js/geom';\nimport { splitPathByPolyline, snipPathByPolyline } from '@weasel-js/geom/booleans';\nimport type { Op } from 'core/ops/types';\nimport { createDeleteOp } from 'core/ops/delete';\nimport { createInsertOp } from 'core/ops/create';\n\n/** The fields a slice reads from and writes to a node. */\nexport interface SliceableNode {\n id: string;\n pose: unknown;\n data: unknown;\n}\n\n/** One scene leaf a cut is tested against. */\nexport interface SliceLeaf<TNode extends SliceableNode = SliceableNode> {\n /** The whole node, which the delete op carries so undo restores it intact. */\n node: TNode;\n /** Its ordinal among its siblings: where the delete's undo puts it back,\n * and where its pieces go in. */\n index: number;\n /** Its path with every pose above it baked in: the space the cut is in. */\n worldPath: Path;\n}\n\ninterface SliceBounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/** Arguments to {@link computeSliceOps}. */\nexport interface ComputeSliceOpsArgs<TNode extends SliceableNode = SliceableNode> {\n leaves: readonly SliceLeaf<TNode>[];\n /** The cut, a polyline in world space. A last point equal to the first\n * closes it into a loop. */\n cut: ReadonlyArray<{ x: number; y: number }>;\n /** Mints the id of each piece. */\n nextId: () => string;\n /** The selection before the cut. Given, the result carries the selection\n * after it; omitted, `nextSelection` is `null`. */\n selection?: readonly string[];\n /** How a piece, cut in world space, is stored on its node. By default the\n * pose is the source's with the piece's bounds and no rotation, and the\n * path is the world piece itself, so any rotation is baked into it. A\n * scene with rotated poses or parent frames maps the piece back into the\n * node's own frame here. */\n placePiece?: (leaf: SliceLeaf<TNode>, piece: Path) => SlicePiece;\n}\n\n/** One piece as it is stored: the node's pose and its `data.path`. */\nexport interface SlicePiece {\n pose: unknown;\n path: Path;\n}\n\n/** Result of {@link computeSliceOps}. */\nexport interface ComputeSliceResult {\n /** A delete per cut leaf followed by an insert per piece, as one batch. */\n ops: Op[];\n /**\n * The selection after the cut: the cut sources dropped, the pieces of each\n * selected one added, everything else kept. `null` when no selection was\n * given or nothing was cut. It is not an op, so the caller sets it after\n * the batch commits; undo restores the one before either way.\n */\n nextSelection: string[] | null;\n}\n\n/**\n * Cut `leaves` along `cut` and return the ops that swap each crossed leaf for\n * its pieces.\n *\n * A path with an open subpath is snipped along its stroke\n * (`snipPathByPolyline`); a closed one is knifed into closed pieces\n * (`splitPathByPolyline`), which is also where a closed loop cuts out the\n * region it encloses. Each piece copies its source's node with the piece as\n * `data.path` and a fresh id. Leaves the cut misses produce nothing.\n */\nexport function computeSliceOps<TNode extends SliceableNode>(\n args: ComputeSliceOpsArgs<TNode>,\n): ComputeSliceResult {\n const { cut, nextId, selection } = args;\n const placePiece = args.placePiece\n ?? ((leaf: SliceLeaf<TNode>, piece: Path): SlicePiece => ({ pose: piecePose(leaf.node.pose, boundsOfPath(piece)), path: piece }));\n const ops: Op[] = [];\n const selected = new Set(selection ?? []);\n const cutIds = new Set<string>();\n const inherited: string[] = [];\n\n // Highest slot first: swapping a leaf changes how many siblings sit below\n // the next one only when the next one is above it.\n const ordered = args.leaves.map((leaf, i) => ({ leaf, i })).sort((a, b) => b.leaf.index - a.leaf.index || a.i - b.i);\n\n for (const { leaf } of ordered) {\n const pieces = hasOpenSubpath(leaf.worldPath)\n ? snipPathByPolyline(leaf.worldPath, cut)\n : splitPathByPolyline(leaf.worldPath, cut);\n if (!pieces) continue;\n\n const sourceId = leaf.node.id;\n cutIds.add(sourceId);\n ops.push(createDeleteOp({ node: leaf.node, index: leaf.index, label: 'Slice' }));\n for (const piece of pieces) {\n const stored = placePiece(leaf, piece);\n const node = {\n ...leaf.node,\n id: nextId(),\n pose: stored.pose,\n data: { ...(leaf.node.data as object), path: stored.path },\n };\n ops.push(createInsertOp({ node, index: leaf.index, label: 'Slice' }));\n if (selected.has(sourceId)) inherited.push(node.id);\n }\n }\n\n const nextSelection = selection && cutIds.size > 0\n ? [...selection.filter((id) => !cutIds.has(id)), ...inherited]\n : null;\n return { ops, nextSelection };\n}\n\nfunction piecePose(source: unknown, b: SliceBounds): SliceBounds {\n const rest = source && typeof source === 'object' ? { ...(source as Record<string, unknown>) } : {};\n delete rest['rotation'];\n return { ...rest, x: b.x, y: b.y, width: b.width, height: b.height };\n}\n"],"mappings":";;;;;AA+EA,SAAgBA,EACd,GACoB;CACpB,IAAM,EAAE,QAAK,WAAQ,iBAAcC,GAC7BC,IAAaD,EAAK,gBACjB,GAAwB,OAA6B;EAAE,MAAME,EAAUC,EAAK,KAAK,MAAMC,EAAaC,CAAK,CAAC;EAAG,MAAMA;CAAM,KAC1HC,IAAY,CAAC,GACbC,IAAW,IAAI,IAAIC,KAAa,CAAC,CAAC,GAClCC,oBAAS,IAAI,IAAY,GACzBC,IAAsB,CAAC,GAIvBC,IAAUX,EAAK,OAAO,KAAK,GAAM,OAAO;EAAE;EAAM;CAAE,EAAE,CAAC,CAAC,MAAM,GAAG,MAAMY,EAAE,KAAK,QAAQC,EAAE,KAAK,SAASA,EAAE,IAAID,EAAE,CAAC;CAEnH,KAAK,IAAM,EAAE,aAAUD,GAAS;EAC9B,IAAMG,IAASC,EAAeZ,EAAK,SAAS,IACxCa,EAAmBb,EAAK,WAAWc,CAAG,IACtCC,EAAoBf,EAAK,WAAWc,CAAG;EAC3C,IAAI,CAACH,GAAQ;EAEb,IAAMK,IAAWhB,EAAK,KAAK;EAE3B,AADAM,EAAO,IAAIU,CAAQ,GACnBb,EAAI,KAAKc,EAAe;GAAE,MAAMjB,EAAK;GAAM,OAAOA,EAAK;GAAO,OAAO;EAAQ,CAAC,CAAC;EAC/E,KAAK,IAAME,KAASS,GAAQ;GAC1B,IAAMO,IAASpB,EAAWE,GAAME,CAAK,GAC/BiB,IAAO;IACX,GAAGnB,EAAK;IACR,IAAIoB,EAAO;IACX,MAAMF,EAAO;IACb,MAAM;KAAE,GAAIlB,EAAK,KAAK;KAAiB,MAAMkB,EAAO;IAAK;GAC3D;GAEA,AADAf,EAAI,KAAKkB,EAAe;IAAE;IAAM,OAAOrB,EAAK;IAAO,OAAO;GAAQ,CAAC,CAAC,GAChEI,EAAS,IAAIY,CAAQ,KAAGT,EAAU,KAAKY,EAAK,EAAE;EACpD;CACF;CAKA,OAAO;EAAE;EAAK,eAHQd,KAAaC,EAAO,OAAO,IAC7C,CAAC,GAAGD,EAAU,QAAQ,MAAO,CAACC,EAAO,IAAIgB,CAAE,CAAC,GAAG,GAAGf,CAAS,IAC3D;CACwB;AAC9B;AAEA,SAASR,EAAU,GAAiB,GAA6B;CAC/D,IAAMwB,IAAOC,KAAU,OAAOA,KAAW,WAAW,EAAE,GAAIA,EAAmC,IAAI,CAAC;CAElG,OADA,OAAOD,EAAKE,UACL;EAAE,GAAGF;EAAM,GAAGd,EAAE;EAAG,GAAGA,EAAE;EAAG,OAAOA,EAAE;EAAO,QAAQA,EAAE;CAAO;AACrE"}
1
+ {"version":3,"file":"sliceOps.js","names":[],"sources":["../../../../src/interactions/actions/defaults/sliceOps.ts"],"sourcesContent":["import { boundsOfPath, hasOpenSubpath, type Path } from '@weasel-js/geom';\nimport { splitPathByPolyline, snipPathByPolyline } from '@weasel-js/geom/booleans';\nimport type { Op } from 'core/ops/types';\nimport { createDeleteOp } from 'core/ops/delete';\nimport { createInsertOp } from 'core/ops/create';\n\n/** The fields a slice reads from and writes to a node. */\nexport interface SliceableNode {\n id: string;\n pose: unknown;\n data: unknown;\n}\n\n/** One scene leaf a cut is tested against. */\nexport interface SliceLeaf<TNode extends SliceableNode = SliceableNode> {\n /** The whole node, which the delete op carries so undo restores it intact. */\n node: TNode;\n /** Its ordinal among its siblings: where the delete's undo puts it back,\n * and where its pieces go in. */\n index: number;\n /** Its path with every pose above it baked in: the space the cut is in. */\n worldPath: Path;\n}\n\ninterface SliceBounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/** Arguments to {@link computeSliceOps}. */\nexport interface ComputeSliceOpsArgs<TNode extends SliceableNode = SliceableNode> {\n leaves: readonly SliceLeaf<TNode>[];\n /** The cut, a polyline in world space. A last point equal to the first\n * closes it into a loop. */\n cut: ReadonlyArray<{ x: number; y: number }>;\n /** Mints the id of each piece. */\n nextId: () => string;\n /** The selection before the cut. Given, the result carries the selection\n * after it; omitted, `nextSelection` is `null`. */\n selection?: readonly string[];\n /** How a piece, cut in world space, is stored on its node. By default the\n * pose is the source's with the piece's bounds and no rotation, and the\n * path is the world piece itself, so any rotation is baked into it. A\n * scene with rotated poses or parent frames maps the piece back into the\n * node's own frame here. */\n placePiece?: (leaf: SliceLeaf<TNode>, piece: Path) => SlicePiece;\n}\n\n/** One piece as it is stored: the node's pose and its `data.path`. */\nexport interface SlicePiece {\n pose: unknown;\n path: Path;\n}\n\n/** Result of {@link computeSliceOps}. */\nexport interface ComputeSliceResult {\n /** A delete per cut leaf followed by an insert per piece, as one batch. */\n ops: Op[];\n /**\n * The selection after the cut: the cut sources dropped, the pieces of each\n * selected one added, everything else kept. `null` when no selection was\n * given or nothing was cut. It is not an op, so the caller sets it after\n * the batch commits; undo restores the one before either way.\n */\n nextSelection: string[] | null;\n}\n\n/**\n * Cut `leaves` along `cut` and return the ops that swap each crossed leaf for\n * its pieces.\n *\n * A path with an open subpath is snipped along its stroke\n * (`snipPathByPolyline`); a closed one is knifed into closed pieces\n * (`splitPathByPolyline`), which is also where a closed loop cuts out the\n * region it encloses. Each piece copies its source's node with the piece as\n * `data.path` and a fresh id. Leaves the cut misses produce nothing.\n */\nexport function computeSliceOps<TNode extends SliceableNode>(\n args: ComputeSliceOpsArgs<TNode>,\n): ComputeSliceResult {\n const { cut, nextId, selection } = args;\n const placePiece = args.placePiece\n ?? ((leaf: SliceLeaf<TNode>, piece: Path): SlicePiece => ({ pose: piecePose(leaf.node.pose, boundsOfPath(piece)), path: piece }));\n const ops: Op[] = [];\n const selected = new Set(selection ?? []);\n const cutIds = new Set<string>();\n const inherited: string[] = [];\n\n // Highest slot first: swapping a leaf changes how many siblings sit below\n // the next one only when the next one is above it.\n const ordered = args.leaves.map((leaf, i) => ({ leaf, i })).sort((a, b) => b.leaf.index - a.leaf.index || a.i - b.i);\n\n for (const { leaf } of ordered) {\n const pieces = hasOpenSubpath(leaf.worldPath)\n ? snipPathByPolyline(leaf.worldPath, cut)\n : splitPathByPolyline(leaf.worldPath, cut);\n if (!pieces) continue;\n\n const sourceId = leaf.node.id;\n cutIds.add(sourceId);\n ops.push(createDeleteOp({ node: leaf.node, index: leaf.index, label: 'Slice' }));\n for (const piece of pieces) {\n const stored = placePiece(leaf, piece);\n const node = {\n ...leaf.node,\n id: nextId(),\n pose: stored.pose,\n data: { ...(leaf.node.data as object), path: stored.path },\n };\n ops.push(createInsertOp({ node, index: leaf.index, label: 'Slice' }));\n if (selected.has(sourceId)) inherited.push(node.id);\n }\n }\n\n const nextSelection = selection && cutIds.size > 0\n ? [...selection.filter((id) => !cutIds.has(id)), ...inherited]\n : null;\n return { ops, nextSelection };\n}\n\nfunction piecePose(source: unknown, b: SliceBounds): SliceBounds {\n const rest = source && typeof source === 'object' ? { ...(source as Record<string, unknown>) } : {};\n delete rest['rotation'];\n return { ...rest, x: b.x, y: b.y, width: b.width, height: b.height };\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA+EA,SAAgB,gBACd,MACoB;CACpB,MAAM,EAAE,KAAK,QAAQ,cAAc;CACnC,MAAM,aAAa,KAAK,gBACjB,MAAwB,WAA6B;EAAE,MAAM,UAAU,KAAK,KAAK,MAAM,aAAa,KAAK,CAAC;EAAG,MAAM;CAAM;CAChI,MAAM,MAAY,CAAC;CACnB,MAAM,WAAW,IAAI,IAAI,aAAa,CAAC,CAAC;CACxC,MAAM,yBAAS,IAAI,IAAY;CAC/B,MAAM,YAAsB,CAAC;CAI7B,MAAM,UAAU,KAAK,OAAO,KAAK,MAAM,OAAO;EAAE;EAAM;CAAE,EAAE,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,IAAI,EAAE,CAAC;CAEnH,KAAK,MAAM,EAAE,UAAU,SAAS;EAC9B,MAAM,SAAS,eAAe,KAAK,SAAS,IACxC,mBAAmB,KAAK,WAAW,GAAG,IACtC,oBAAoB,KAAK,WAAW,GAAG;EAC3C,IAAI,CAAC,QAAQ;EAEb,MAAM,WAAW,KAAK,KAAK;EAC3B,OAAO,IAAI,QAAQ;EACnB,IAAI,KAAK,eAAe;GAAE,MAAM,KAAK;GAAM,OAAO,KAAK;GAAO,OAAO;EAAQ,CAAC,CAAC;EAC/E,KAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,SAAS,WAAW,MAAM,KAAK;GACrC,MAAM,OAAO;IACX,GAAG,KAAK;IACR,IAAI,OAAO;IACX,MAAM,OAAO;IACb,MAAM;KAAE,GAAI,KAAK,KAAK;KAAiB,MAAM,OAAO;IAAK;GAC3D;GACA,IAAI,KAAK,eAAe;IAAE;IAAM,OAAO,KAAK;IAAO,OAAO;GAAQ,CAAC,CAAC;GACpE,IAAI,SAAS,IAAI,QAAQ,GAAG,UAAU,KAAK,KAAK,EAAE;EACpD;CACF;CAKA,OAAO;EAAE;EAAK,eAHQ,aAAa,OAAO,OAAO,IAC7C,CAAC,GAAG,UAAU,QAAQ,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,GAAG,GAAG,SAAS,IAC3D;CACwB;AAC9B;AAEA,SAAS,UAAU,QAAiB,GAA6B;CAC/D,MAAM,OAAO,UAAU,OAAO,WAAW,WAAW,EAAE,GAAI,OAAmC,IAAI,CAAC;CAClG,OAAO,KAAK;CACZ,OAAO;EAAE,GAAG;EAAM,GAAG,EAAE;EAAG,GAAG,EAAE;EAAG,OAAO,EAAE;EAAO,QAAQ,EAAE;CAAO;AACrE"}