@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,43 +1,81 @@
1
- import { dwarn as e } from "../../../debug/flag.js";
1
+ import { dwarn } from "../../../debug/flag.js";
2
+
2
3
  //#region src/interactions/actions/clipboard/wireFormat.ts
3
- var t = "application/x-weasel-clipboard+json", n = `web ${t}`;
4
- function r(e, t) {
4
+ /** MIME type the kit writes its full-fidelity clipboard payload under, so a
5
+ * copy/paste between two weasel canvases round-trips scene nodes rather than
6
+ * the SVG or text flavors other apps read. */
7
+ var WEASEL_CLIPBOARD_MIME = "application/x-weasel-clipboard+json";
8
+ /** Chromium's async-clipboard spelling for custom formats. */
9
+ var WEASEL_CLIPBOARD_MIME_WEB = `web ${WEASEL_CLIPBOARD_MIME}`;
10
+ /** Serialize snapshot items into the versioned wire text.
11
+ *
12
+ * JSON drops a function-valued field (a container's `clipFromPose`, a
13
+ * node's `derivePath`). A scene adapter's snapshot also carries each one's
14
+ * `SceneRegistry` key (`clipFromPoseKey`, `derivePathKey`, …), which does
15
+ * cross, and its paste restores the function from the pasting scene's
16
+ * registry. A function that is not registered does not survive. */
17
+ function buildWeaselClipboardText(items, replacer) {
5
18
  return JSON.stringify({
6
19
  weaselClipboard: 1,
7
- nodes: e
8
- }, t);
20
+ nodes: items
21
+ }, replacer);
9
22
  }
10
- function i(e) {
11
- if (!e.includes("\"weaselClipboard\"")) return !1;
23
+ /** Cheap check: could this text be a weasel clipboard payload? Substring
24
+ * pre-check, then a guarded parse + marker/version test. */
25
+ function sniffWeaselClipboardText(text) {
26
+ if (!text.includes("\"weaselClipboard\"")) return false;
12
27
  try {
13
- let t = JSON.parse(e);
14
- return !!t && t.weaselClipboard === 1;
28
+ const parsed = JSON.parse(text);
29
+ return !!parsed && parsed.weaselClipboard === 1;
15
30
  } catch {
16
- return !1;
31
+ return false;
17
32
  }
18
33
  }
19
- var a = /<svg(?:\s[^>]*)?>/i;
20
- function o(t, n) {
21
- let r = a.exec(t);
22
- if (!r) return e("clipboard", "embedWeaselMetadataInSvg: no <svg ...> open tag found — returning input unchanged"), t;
23
- let i = `<![CDATA[${n.replaceAll("]]>", "]]]]><![CDATA[>")}]]>`, o = r.index + r[0].length;
24
- return `${t.slice(0, o)}<metadata>${i}</metadata>${t.slice(o)}`;
34
+ var SVG_OPEN_TAG = /<svg(?:\s[^>]*)?>/i;
35
+ /**
36
+ * Embed a weasel clipboard payload in an SVG document as a `<metadata>`
37
+ * child of the root — legal SVG 1.1, ignored by external tools — so one
38
+ * `text/plain` flavor serves both audiences.
39
+ *
40
+ * Intended for OUR serializer's output only (`serializeSvg` — single
41
+ * `<svg ...>` open tag, XML-escaped attributes). When no open tag is found
42
+ * the input is returned unchanged with a debug warning.
43
+ */
44
+ function embedWeaselMetadataInSvg(svgText, payloadText) {
45
+ const open = SVG_OPEN_TAG.exec(svgText);
46
+ if (!open) {
47
+ dwarn("clipboard", "embedWeaselMetadataInSvg: no <svg ...> open tag found — returning input unchanged");
48
+ return svgText;
49
+ }
50
+ const cdata = `<![CDATA[${payloadText.replaceAll("]]>", "]]]]><![CDATA[>")}]]>`;
51
+ const at = open.index + open[0].length;
52
+ return `${svgText.slice(0, at)}<metadata>${cdata}</metadata>${svgText.slice(at)}`;
25
53
  }
26
- function s(e) {
27
- let t = /<metadata(?:\s[^>]*)?>([\s\S]*?)<\/metadata>/i.exec(e);
28
- if (!t) return null;
29
- let n = t[1], r = n.includes("<![CDATA[") ? Array.from(n.matchAll(/<!\[CDATA\[([\s\S]*?)\]\]>/g), (e) => e[1]).join("") : n;
30
- return i(r) ? r : null;
54
+ /**
55
+ * The weasel clipboard payload embedded in SVG text by
56
+ * {@link embedWeaselMetadataInSvg}, or null when the first `<metadata>` block
57
+ * is absent or not the weasel wire format. A text scan, not an XML parse.
58
+ */
59
+ function extractWeaselClipboardFromSvg(svgText) {
60
+ const block = /<metadata(?:\s[^>]*)?>([\s\S]*?)<\/metadata>/i.exec(svgText);
61
+ if (!block) return null;
62
+ const inner = block[1];
63
+ const payload = inner.includes("<![CDATA[") ? Array.from(inner.matchAll(/<!\[CDATA\[([\s\S]*?)\]\]>/g), (m) => m[1]).join("") : inner;
64
+ return sniffWeaselClipboardText(payload) ? payload : null;
31
65
  }
32
- function c(t, n) {
66
+ /** Parse wire text to snapshot items, or null when malformed/mismatched
67
+ * (callers decline to the next content handler). */
68
+ function parseWeaselClipboardText(text, reviver) {
33
69
  try {
34
- let e = JSON.parse(t, n);
35
- return !e || e.weaselClipboard !== 1 || !Array.isArray(e.nodes) ? null : e.nodes;
36
- } catch (t) {
37
- return e("clipboard", `weasel payload failed to parse: ${String(t)}`), null;
70
+ const parsed = JSON.parse(text, reviver);
71
+ if (!parsed || parsed.weaselClipboard !== 1 || !Array.isArray(parsed.nodes)) return null;
72
+ return parsed.nodes;
73
+ } catch (err) {
74
+ dwarn("clipboard", `weasel payload failed to parse: ${String(err)}`);
75
+ return null;
38
76
  }
39
77
  }
40
- //#endregion
41
- export { t as WEASEL_CLIPBOARD_MIME, n as WEASEL_CLIPBOARD_MIME_WEB, r as buildWeaselClipboardText, o as embedWeaselMetadataInSvg, s as extractWeaselClipboardFromSvg, c as parseWeaselClipboardText, i as sniffWeaselClipboardText };
42
78
 
79
+ //#endregion
80
+ export { WEASEL_CLIPBOARD_MIME, WEASEL_CLIPBOARD_MIME_WEB, buildWeaselClipboardText, embedWeaselMetadataInSvg, extractWeaselClipboardFromSvg, parseWeaselClipboardText, sniffWeaselClipboardText };
43
81
  //# sourceMappingURL=wireFormat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wireFormat.js","names":["WEASEL_CLIPBOARD_MIME","WEASEL_CLIPBOARD_MIME_WEB","buildWeaselClipboardText","items","replacer","sniffWeaselClipboardText","text","parsed","SVG_OPEN_TAG","embedWeaselMetadataInSvg","open","svgText","dwarn","cdata","payloadText","at","extractWeaselClipboardFromSvg","block","inner","payload","m","parseWeaselClipboardText","reviver","err"],"sources":["../../../../src/interactions/actions/clipboard/wireFormat.ts"],"sourcesContent":["import { dwarn } from 'debug/flag';\n\n/** MIME type the kit writes its full-fidelity clipboard payload under, so a\n * copy/paste between two weasel canvases round-trips scene nodes rather than\n * the SVG or text flavors other apps read. */\nexport const WEASEL_CLIPBOARD_MIME = 'application/x-weasel-clipboard+json';\n/** Chromium's async-clipboard spelling for custom formats. */\nexport const WEASEL_CLIPBOARD_MIME_WEB = `web ${WEASEL_CLIPBOARD_MIME}`;\n\ninterface WeaselClipboardPayload { weaselClipboard: 1; nodes: unknown[] }\n\ntype Replacer = (key: string, value: unknown) => unknown;\ntype Reviver = (key: string, value: unknown) => unknown;\n\n/** Serialize snapshot items into the versioned wire text.\n *\n * JSON drops a function-valued field (a container's `clipFromPose`, a\n * node's `derivePath`). A scene adapter's snapshot also carries each one's\n * `SceneRegistry` key (`clipFromPoseKey`, `derivePathKey`, …), which does\n * cross, and its paste restores the function from the pasting scene's\n * registry. A function that is not registered does not survive. */\nexport function buildWeaselClipboardText(items: unknown[], replacer?: Replacer): string {\n const payload: WeaselClipboardPayload = { weaselClipboard: 1, nodes: items };\n return JSON.stringify(payload, replacer as Parameters<typeof JSON.stringify>[1]);\n}\n\n/** Cheap check: could this text be a weasel clipboard payload? Substring\n * pre-check, then a guarded parse + marker/version test. */\nexport function sniffWeaselClipboardText(text: string): boolean {\n if (!text.includes('\"weaselClipboard\"')) return false;\n try {\n const parsed = JSON.parse(text) as Partial<WeaselClipboardPayload> | null;\n return !!parsed && parsed.weaselClipboard === 1;\n } catch {\n return false;\n }\n}\n\n// `[^>]*` is safe for OUR serializer's output only: attribute values are\n// XML-escaped, so no raw `>` can appear inside the tag.\nconst SVG_OPEN_TAG = /<svg(?:\\s[^>]*)?>/i;\n\n/**\n * Embed a weasel clipboard payload in an SVG document as a `<metadata>`\n * child of the root — legal SVG 1.1, ignored by external tools — so one\n * `text/plain` flavor serves both audiences.\n *\n * Intended for OUR serializer's output only (`serializeSvg` — single\n * `<svg ...>` open tag, XML-escaped attributes). When no open tag is found\n * the input is returned unchanged with a debug warning.\n */\nexport function embedWeaselMetadataInSvg(svgText: string, payloadText: string): string {\n const open = SVG_OPEN_TAG.exec(svgText);\n if (!open) {\n dwarn('clipboard', 'embedWeaselMetadataInSvg: no <svg ...> open tag found — returning input unchanged');\n return svgText;\n }\n const cdata = `<![CDATA[${payloadText.replaceAll(']]>', ']]]]><![CDATA[>')}]]>`;\n const at = open.index + open[0].length;\n return `${svgText.slice(0, at)}<metadata>${cdata}</metadata>${svgText.slice(at)}`;\n}\n\n/**\n * The weasel clipboard payload embedded in SVG text by\n * {@link embedWeaselMetadataInSvg}, or null when the first `<metadata>` block\n * is absent or not the weasel wire format. A text scan, not an XML parse.\n */\nexport function extractWeaselClipboardFromSvg(svgText: string): string | null {\n const block = /<metadata(?:\\s[^>]*)?>([\\s\\S]*?)<\\/metadata>/i.exec(svgText);\n if (!block) return null;\n const inner = block[1];\n const payload = inner.includes('<![CDATA[')\n ? Array.from(inner.matchAll(/<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/g), (m) => m[1]).join('')\n : inner;\n return sniffWeaselClipboardText(payload) ? payload : null;\n}\n\n/** Parse wire text to snapshot items, or null when malformed/mismatched\n * (callers decline to the next content handler). */\nexport function parseWeaselClipboardText(text: string, reviver?: Reviver): unknown[] | null {\n try {\n const parsed = JSON.parse(text, reviver as Parameters<typeof JSON.parse>[1]) as\n Partial<WeaselClipboardPayload> | null;\n if (!parsed || parsed.weaselClipboard !== 1 || !Array.isArray(parsed.nodes)) return null;\n return parsed.nodes;\n } catch (err) {\n dwarn('clipboard', `weasel payload failed to parse: ${String(err)}`);\n return null;\n }\n}\n"],"mappings":";;AAKA,IAAaA,IAAwB,uCAExBC,IAA4B,OAAOD;AAchD,SAAgBE,EAAyB,GAAkB,GAA6B;CAEtF,OAAO,KAAK,UAAU;EADoB,iBAAiB;EAAG,OAAOC;CAC/C,GAASC,CAAgD;AACjF;AAIA,SAAgBC,EAAyB,GAAuB;CAC9D,IAAI,CAACC,EAAK,SAAS,qBAAmB,GAAG,OAAO;CAChD,IAAI;EACF,IAAMC,IAAS,KAAK,MAAMD,CAAI;EAC9B,OAAO,CAAC,CAACC,KAAUA,EAAO,oBAAoB;CAChD,QAAQ;EACN,OAAO;CACT;AACF;AAIA,IAAMC,IAAe;AAWrB,SAAgBC,EAAyB,GAAiB,GAA6B;CACrF,IAAMC,IAAOF,EAAa,KAAKG,CAAO;CACtC,IAAI,CAACD,GAEH,OADAE,EAAM,aAAa,mFAAmF,GAC/FD;CAET,IAAME,IAAQ,YAAYC,EAAY,WAAW,OAAO,iBAAiB,EAAE,MACrEC,IAAKL,EAAK,QAAQA,EAAK,EAAE,CAAC;CAChC,OAAO,GAAGC,EAAQ,MAAM,GAAGI,CAAE,EAAE,YAAYF,EAAM,aAAaF,EAAQ,MAAMI,CAAE;AAChF;AAOA,SAAgBC,EAA8B,GAAgC;CAC5E,IAAMC,IAAQ,gDAAgD,KAAKN,CAAO;CAC1E,IAAI,CAACM,GAAO,OAAO;CACnB,IAAMC,IAAQD,EAAM,IACdE,IAAUD,EAAM,SAAS,WAAW,IACtC,MAAM,KAAKA,EAAM,SAAS,6BAA6B,IAAI,MAAME,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAC9EF;CACJ,OAAOb,EAAyBc,CAAO,IAAIA,IAAU;AACvD;AAIA,SAAgBE,EAAyB,GAAc,GAAqC;CAC1F,IAAI;EACF,IAAMd,IAAS,KAAK,MAAMD,GAAMgB,CAA2C;EAG3E,OADI,CAACf,KAAUA,EAAO,oBAAoB,KAAK,CAAC,MAAM,QAAQA,EAAO,KAAK,IAAU,OAC7EA,EAAO;CAChB,SAASgB,GAAK;EAEZ,OADAX,EAAM,aAAa,mCAAmC,OAAOW,CAAG,GAAG,GAC5D;CACT;AACF"}
1
+ {"version":3,"file":"wireFormat.js","names":[],"sources":["../../../../src/interactions/actions/clipboard/wireFormat.ts"],"sourcesContent":["import { dwarn } from 'debug/flag';\n\n/** MIME type the kit writes its full-fidelity clipboard payload under, so a\n * copy/paste between two weasel canvases round-trips scene nodes rather than\n * the SVG or text flavors other apps read. */\nexport const WEASEL_CLIPBOARD_MIME = 'application/x-weasel-clipboard+json';\n/** Chromium's async-clipboard spelling for custom formats. */\nexport const WEASEL_CLIPBOARD_MIME_WEB = `web ${WEASEL_CLIPBOARD_MIME}`;\n\ninterface WeaselClipboardPayload { weaselClipboard: 1; nodes: unknown[] }\n\ntype Replacer = (key: string, value: unknown) => unknown;\ntype Reviver = (key: string, value: unknown) => unknown;\n\n/** Serialize snapshot items into the versioned wire text.\n *\n * JSON drops a function-valued field (a container's `clipFromPose`, a\n * node's `derivePath`). A scene adapter's snapshot also carries each one's\n * `SceneRegistry` key (`clipFromPoseKey`, `derivePathKey`, …), which does\n * cross, and its paste restores the function from the pasting scene's\n * registry. A function that is not registered does not survive. */\nexport function buildWeaselClipboardText(items: unknown[], replacer?: Replacer): string {\n const payload: WeaselClipboardPayload = { weaselClipboard: 1, nodes: items };\n return JSON.stringify(payload, replacer as Parameters<typeof JSON.stringify>[1]);\n}\n\n/** Cheap check: could this text be a weasel clipboard payload? Substring\n * pre-check, then a guarded parse + marker/version test. */\nexport function sniffWeaselClipboardText(text: string): boolean {\n if (!text.includes('\"weaselClipboard\"')) return false;\n try {\n const parsed = JSON.parse(text) as Partial<WeaselClipboardPayload> | null;\n return !!parsed && parsed.weaselClipboard === 1;\n } catch {\n return false;\n }\n}\n\n// `[^>]*` is safe for OUR serializer's output only: attribute values are\n// XML-escaped, so no raw `>` can appear inside the tag.\nconst SVG_OPEN_TAG = /<svg(?:\\s[^>]*)?>/i;\n\n/**\n * Embed a weasel clipboard payload in an SVG document as a `<metadata>`\n * child of the root — legal SVG 1.1, ignored by external tools — so one\n * `text/plain` flavor serves both audiences.\n *\n * Intended for OUR serializer's output only (`serializeSvg` — single\n * `<svg ...>` open tag, XML-escaped attributes). When no open tag is found\n * the input is returned unchanged with a debug warning.\n */\nexport function embedWeaselMetadataInSvg(svgText: string, payloadText: string): string {\n const open = SVG_OPEN_TAG.exec(svgText);\n if (!open) {\n dwarn('clipboard', 'embedWeaselMetadataInSvg: no <svg ...> open tag found — returning input unchanged');\n return svgText;\n }\n const cdata = `<![CDATA[${payloadText.replaceAll(']]>', ']]]]><![CDATA[>')}]]>`;\n const at = open.index + open[0].length;\n return `${svgText.slice(0, at)}<metadata>${cdata}</metadata>${svgText.slice(at)}`;\n}\n\n/**\n * The weasel clipboard payload embedded in SVG text by\n * {@link embedWeaselMetadataInSvg}, or null when the first `<metadata>` block\n * is absent or not the weasel wire format. A text scan, not an XML parse.\n */\nexport function extractWeaselClipboardFromSvg(svgText: string): string | null {\n const block = /<metadata(?:\\s[^>]*)?>([\\s\\S]*?)<\\/metadata>/i.exec(svgText);\n if (!block) return null;\n const inner = block[1];\n const payload = inner.includes('<![CDATA[')\n ? Array.from(inner.matchAll(/<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/g), (m) => m[1]).join('')\n : inner;\n return sniffWeaselClipboardText(payload) ? payload : null;\n}\n\n/** Parse wire text to snapshot items, or null when malformed/mismatched\n * (callers decline to the next content handler). */\nexport function parseWeaselClipboardText(text: string, reviver?: Reviver): unknown[] | null {\n try {\n const parsed = JSON.parse(text, reviver as Parameters<typeof JSON.parse>[1]) as\n Partial<WeaselClipboardPayload> | null;\n if (!parsed || parsed.weaselClipboard !== 1 || !Array.isArray(parsed.nodes)) return null;\n return parsed.nodes;\n } catch (err) {\n dwarn('clipboard', `weasel payload failed to parse: ${String(err)}`);\n return null;\n }\n}\n"],"mappings":";;;;;;AAKA,IAAa,wBAAwB;;AAErC,IAAa,4BAA4B,OAAO;;;;;;;;AAchD,SAAgB,yBAAyB,OAAkB,UAA6B;CAEtF,OAAO,KAAK,UAAU;EADoB,iBAAiB;EAAG,OAAO;CAC/C,GAAS,QAAgD;AACjF;;;AAIA,SAAgB,yBAAyB,MAAuB;CAC9D,IAAI,CAAC,KAAK,SAAS,qBAAmB,GAAG,OAAO;CAChD,IAAI;EACF,MAAM,SAAS,KAAK,MAAM,IAAI;EAC9B,OAAO,CAAC,CAAC,UAAU,OAAO,oBAAoB;CAChD,QAAQ;EACN,OAAO;CACT;AACF;AAIA,IAAM,eAAe;;;;;;;;;;AAWrB,SAAgB,yBAAyB,SAAiB,aAA6B;CACrF,MAAM,OAAO,aAAa,KAAK,OAAO;CACtC,IAAI,CAAC,MAAM;EACT,MAAM,aAAa,mFAAmF;EACtG,OAAO;CACT;CACA,MAAM,QAAQ,YAAY,YAAY,WAAW,OAAO,iBAAiB,EAAE;CAC3E,MAAM,KAAK,KAAK,QAAQ,KAAK,EAAE,CAAC;CAChC,OAAO,GAAG,QAAQ,MAAM,GAAG,EAAE,EAAE,YAAY,MAAM,aAAa,QAAQ,MAAM,EAAE;AAChF;;;;;;AAOA,SAAgB,8BAA8B,SAAgC;CAC5E,MAAM,QAAQ,gDAAgD,KAAK,OAAO;CAC1E,IAAI,CAAC,OAAO,OAAO;CACnB,MAAM,QAAQ,MAAM;CACpB,MAAM,UAAU,MAAM,SAAS,WAAW,IACtC,MAAM,KAAK,MAAM,SAAS,6BAA6B,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAC9E;CACJ,OAAO,yBAAyB,OAAO,IAAI,UAAU;AACvD;;;AAIA,SAAgB,yBAAyB,MAAc,SAAqC;CAC1F,IAAI;EACF,MAAM,SAAS,KAAK,MAAM,MAAM,OAA2C;EAE3E,IAAI,CAAC,UAAU,OAAO,oBAAoB,KAAK,CAAC,MAAM,QAAQ,OAAO,KAAK,GAAG,OAAO;EACpF,OAAO,OAAO;CAChB,SAAS,KAAK;EACZ,MAAM,aAAa,mCAAmC,OAAO,GAAG,GAAG;EACnE,OAAO;CACT;AACF"}
@@ -1,30 +1,49 @@
1
- import { translatePoseViaDescriptor as e } from "../../../core/geometry/poseDescriptor.js";
2
- import { runBehaviorCancel as t, runBehaviorSettled as n } from "../gestureLifecycle.js";
3
- import { carryPose as r, inPlane as i, invertPlane as a, planeOf as o, selectionLayer as s } from "../planeInput.js";
4
- import { nodeDescriptors as c, poseDescriptorOf as l } from "../poseDescriptorDep.js";
5
- import { selectedRoots as u, translateTargets as d } from "../selectionSubtree.js";
6
- import { scenePoseFrame as f } from "../poseFrame.js";
7
- import { defaultCommitAdapter as p } from "../defaultCommitAdapter.js";
8
- import { recordTransform as m } from "../transform-again/memory.js";
9
- import { startCloneBehaviors as h } from "./behaviors.js";
10
- import { copySelection as g } from "../defaults/copySubtree.js";
1
+ import { translatePoseViaDescriptor } from "../../../core/geometry/poseDescriptor.js";
2
+ import { scenePoseFrame } from "../poseFrame.js";
3
+ import { nodeDescriptors, poseDescriptorOf } from "../poseDescriptorDep.js";
4
+ import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
5
+ import { runBehaviorCancel, runBehaviorSettled } from "../gestureLifecycle.js";
6
+ import { carryPose, inPlane, invertPlane, planeOf, selectionLayer } from "../planeInput.js";
7
+ import { selectedRoots, translateTargets } from "../selectionSubtree.js";
8
+ import { recordTransform } from "../transform-again/memory.js";
9
+ import { startCloneBehaviors } from "./behaviors.js";
10
+ import { copySelection } from "../defaults/copySubtree.js";
11
+
11
12
  //#region src/interactions/actions/clone/action.ts
12
- function _(t, n, i, a) {
13
- let s = t.originPoses.get(n), c = t.scene.get(n);
14
- if (s === void 0 || !c) return;
15
- let l = t.descriptorOf(n), u = e(s, i, a, l);
16
- return t.frame.local(n, r(l, u, o(t.view, c.layer)));
13
+ /** Where the copy of `id` lands for a drag of `(dx, dy)`, as stored. */
14
+ function landed(scratch, id, dx, dy) {
15
+ const origin = scratch.originPoses.get(id);
16
+ const node = scratch.scene.get(id);
17
+ if (origin === void 0 || !node) return void 0;
18
+ const d = scratch.descriptorOf(id);
19
+ const moved = translatePoseViaDescriptor(origin, dx, dy, d);
20
+ return scratch.frame.local(id, carryPose(d, moved, planeOf(scratch.view, node.layer)));
17
21
  }
18
- function v(e, t, n) {
19
- let { dx: r, dy: i } = e.currentDelta, a = (t) => {
20
- e.applyOps ? e.applyOps(t, "Clone") : e.scene.applyBatch(t, "Clone", p(e.scene, n.adapterMethods));
21
- }, o = t.end(e.currentDelta);
22
- if (o === null) return !1;
23
- if (o !== void 0) return o.length > 0 && a(o), !0;
24
- let { ops: s, copies: c } = g(e.scene, e.ids, (t, n) => e.originPoses.has(t) ? _(e, t, r, i) : n.pose, "Clone");
25
- return s.length !== 0 && (a(s), n.set(c), !0);
22
+ /** Commit the drag: a behavior's ops when one claims it, else the copies,
23
+ * which become the selection. Returns whether anything was committed. */
24
+ function commitClone(scratch, behaviors, selection) {
25
+ const { dx, dy } = scratch.currentDelta;
26
+ const apply = (ops) => {
27
+ if (scratch.applyOps) scratch.applyOps(ops, "Clone");
28
+ else scratch.scene.applyBatch(ops, "Clone", defaultCommitAdapter(scratch.scene, selection.adapterMethods));
29
+ };
30
+ const answer = behaviors.end(scratch.currentDelta);
31
+ if (answer === null) return false;
32
+ if (answer !== void 0) {
33
+ if (answer.length > 0) apply(answer);
34
+ return true;
35
+ }
36
+ const { ops, copies } = copySelection(scratch.scene, scratch.ids, (id, node) => scratch.originPoses.has(id) ? landed(scratch, id, dx, dy) : node.pose, "Clone");
37
+ if (ops.length === 0) return false;
38
+ apply(ops);
39
+ selection.set(copies);
40
+ return true;
26
41
  }
27
- var y = i({
42
+ /**
43
+ * Static descriptor for the `clone` Action. Copies each selected node, with
44
+ * its subtree, to where the drag left it. One undo entry.
45
+ */
46
+ var cloneAction = inPlane({
28
47
  id: "clone",
29
48
  label: "Clone",
30
49
  cursor: "copy",
@@ -34,70 +53,83 @@ var y = i({
34
53
  "selection",
35
54
  "scene",
36
55
  "applyOps",
37
- "poseDescriptor"
56
+ "poseDescriptor",
57
+ "boundsIncludeStroke",
58
+ "kitSettings"
38
59
  ],
39
60
  invoker: {
40
61
  timing: "ongoing",
41
- start(e, i) {
42
- let s = e.deps.selection, p = e.deps.scene, g = e.deps.applyOps;
43
- if (!s || !p) return {};
44
- let y = s.get();
45
- if (y.length === 0) return {};
46
- let b = f(p), x = /* @__PURE__ */ new Map(), S = c(p, l(e.deps.poseDescriptor));
47
- for (let t of d(p, b, y)) {
48
- let n = p.get(t);
49
- if (n === void 0) continue;
50
- let i = a(o(e.deps.view, n.layer));
51
- x.set(t, r(S(t), b.world(t), i));
62
+ start(ctx, opts) {
63
+ const selection = ctx.deps.selection;
64
+ const scene = ctx.deps.scene;
65
+ const applyOps = ctx.deps.applyOps;
66
+ if (!selection || !scene) return {};
67
+ const ids = selection.get();
68
+ if (ids.length === 0) return {};
69
+ const frame = scenePoseFrame(scene);
70
+ const originPoses = /* @__PURE__ */ new Map();
71
+ const descriptorOf = nodeDescriptors(scene, poseDescriptorOf(ctx.deps.poseDescriptor));
72
+ for (const id of translateTargets(scene, frame, ids)) {
73
+ const node = scene.get(id);
74
+ if (node === void 0) continue;
75
+ const toEdited = invertPlane(planeOf(ctx.deps.view, node.layer));
76
+ originPoses.set(id, carryPose(descriptorOf(id), frame.world(id), toEdited));
52
77
  }
53
- if (x.size === 0) return {};
54
- let C = {
55
- ids: u(p, y),
56
- scene: p,
57
- descriptorOf: S,
58
- frame: b,
59
- originPoses: x,
60
- view: e.deps.view,
78
+ if (originPoses.size === 0) return {};
79
+ const scratch = {
80
+ ids: selectedRoots(scene, ids),
81
+ scene,
82
+ descriptorOf,
83
+ frame,
84
+ originPoses,
85
+ view: ctx.deps.view,
61
86
  currentDelta: {
62
87
  dx: 0,
63
88
  dy: 0
64
89
  },
65
90
  previews: /* @__PURE__ */ new Map(),
66
- applyOps: g
67
- }, w = h(e, i, p, C.ids, x, S);
91
+ applyOps
92
+ };
93
+ const behaviors = startCloneBehaviors(ctx, opts, scene, scratch.ids, originPoses, descriptorOf);
68
94
  return {
69
95
  kind: "clone",
70
- previewHidesSource: !1,
71
- onMove(e) {
72
- if (!e.drag) return;
73
- C.currentDelta = w.shape(e, {
74
- dx: e.drag.delta.x,
75
- dy: e.drag.delta.y
76
- }), C.previews.clear();
77
- let { dx: t, dy: n } = C.currentDelta;
78
- if (t !== 0 || n !== 0) for (let e of C.originPoses.keys()) C.previews.set(e, _(C, e, t, n));
96
+ previewHidesSource: false,
97
+ onMove(moveCtx) {
98
+ if (!moveCtx.drag) return;
99
+ scratch.currentDelta = behaviors.shape(moveCtx, {
100
+ dx: moveCtx.drag.delta.x,
101
+ dy: moveCtx.drag.delta.y
102
+ });
103
+ scratch.previews.clear();
104
+ const { dx, dy } = scratch.currentDelta;
105
+ if (dx === 0 && dy === 0) return;
106
+ for (const id of scratch.originPoses.keys()) scratch.previews.set(id, landed(scratch, id, dx, dy));
79
107
  },
80
- onEnd(e, r) {
81
- let i = !1;
108
+ onEnd(_endCtx, reason) {
109
+ let committed = false;
82
110
  try {
83
- let { dx: e, dy: n } = C.currentDelta;
84
- r === "commit" && (e !== 0 || n !== 0) ? (i = v(C, w, s), i && m(p, {
85
- kind: "duplicate",
86
- dx: e,
87
- dy: n
88
- }, s.get())) : t(w.list, w.gctx);
111
+ const { dx, dy } = scratch.currentDelta;
112
+ if (reason === "commit" && (dx !== 0 || dy !== 0)) {
113
+ committed = commitClone(scratch, behaviors, selection);
114
+ if (committed) recordTransform(scene, {
115
+ kind: "duplicate",
116
+ dx,
117
+ dy
118
+ }, selection.get());
119
+ } else runBehaviorCancel(behaviors.list, behaviors.gctx);
89
120
  } finally {
90
- C.previews.clear(), n(w.list, w.gctx, i);
121
+ scratch.previews.clear();
122
+ runBehaviorSettled(behaviors.list, behaviors.gctx, committed);
91
123
  }
92
124
  },
93
- previewIds: () => C.previews.keys(),
94
- previewPose: (e) => C.previews.get(e) ?? null
125
+ previewIds: () => scratch.previews.keys(),
126
+ previewPose: (id) => scratch.previews.get(id) ?? null
95
127
  };
96
128
  }
97
129
  },
98
- enabled: () => !0
99
- }, s);
100
- //#endregion
101
- export { y as cloneAction };
130
+ enabled: () => true
131
+ }, selectionLayer);
102
132
 
133
+ //#endregion
134
+ export { cloneAction };
103
135
  //# sourceMappingURL=action.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"action.js","names":["landed","origin","scratch","id","node","d","moved","translatePoseViaDescriptor","dx","dy","carryPose","planeOf","commitClone","apply","ops","defaultCommitAdapter","selection","answer","behaviors","copySelection","copies","cloneAction","inPlane","ctx","scene","applyOps","ids","frame","scenePoseFrame","originPoses","descriptorOf","nodeDescriptors","poseDescriptorOf","translateTargets","toEdited","invertPlane","selectedRoots","startCloneBehaviors","opts","moveCtx","committed","reason","recordTransform","runBehaviorCancel","runBehaviorSettled","selectionLayer"],"sources":["../../../../src/interactions/actions/clone/action.ts"],"sourcesContent":["/**\n * `cloneAction` — ongoing Action descriptor for alt-drag clone. Nothing is\n * written before the commit, so a cancel only clears the preview.\n *\n * The action does not gate on a modifier: it runs whenever the dispatcher\n * routes to it, and the binding that names it carries the `alt` requirement.\n */\n\nimport type { Action } from '@weasel-js/routing';\nimport type { BindingOpts, InvocationCtx, OngoingHandle } from '@weasel-js/routing';\nimport type { Scene, NodeId } from 'core/scene/types';\nimport type { Op } from 'core/ops/types';\nimport { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport { runBehaviorCancel, runBehaviorSettled } from '../gestureLifecycle';\nimport { startCloneBehaviors, type CloneBehaviors } from './behaviors';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport { copySelection } from '../defaults/copySubtree';\nimport { selectedRoots, translateTargets } from '../selectionSubtree';\nimport { nodeDescriptors, poseDescriptorOf } from '../poseDescriptorDep';\nimport { translatePoseViaDescriptor, type PoseDescriptor } from '../resize/geometry';\nimport { scenePoseFrame, type PoseFrame } from '../poseFrame';\nimport { carryPose, invertPlane, inPlane, planeOf, selectionLayer } from '../planeInput';\nimport { recordTransform } from '../transform-again/memory';\n\ninterface CloneScratch {\n /** The selected ids a copy starts from; each brings its subtree. */\n ids: NodeId[];\n scene: Scene<unknown, string, unknown>;\n descriptorOf: (id: NodeId) => PoseDescriptor<unknown>;\n /** World reads and local writes over the scene's composition strategy. */\n frame: PoseFrame<unknown>;\n /** Origin poses captured at drag start, in world — the frame the drag\n * delta is expressed in, and the plane the edit is measured in. The copy\n * keeps its source's parent and layer, so each translated result is\n * carried back to that layer's plane and stored in that same frame.\n * Holds every node the copy moves itself: a node stored in a copied frame\n * is absent, because the copy of that frame carries it. */\n originPoses: Map<NodeId, unknown>;\n /** The view the invocation started with, read for `planeOf`. */\n view: unknown;\n /** Running drag delta — updated each onMove, applied once at commit. */\n currentDelta: { dx: number; dy: number };\n /** Preview poses keyed by the original's id: the copies have no ids yet. */\n previews: Map<NodeId, unknown>;\n /** Optional consumer commit hook captured at gesture start. When present,\n * the insert ops route through it instead of `scene.applyBatch`. */\n applyOps?: (ops: Op[], label: string) => void;\n}\n\n/** Where the copy of `id` lands for a drag of `(dx, dy)`, as stored. */\nfunction landed(scratch: CloneScratch, id: NodeId, dx: number, dy: number): unknown {\n const origin = scratch.originPoses.get(id);\n const node = scratch.scene.get(id);\n if (origin === undefined || !node) return undefined;\n const d = scratch.descriptorOf(id);\n const moved = translatePoseViaDescriptor(origin, dx, dy, d);\n return scratch.frame.local(id, carryPose(d, moved, planeOf(scratch.view, node.layer)));\n}\n\n/** Commit the drag: a behavior's ops when one claims it, else the copies,\n * which become the selection. Returns whether anything was committed. */\nfunction commitClone(scratch: CloneScratch, behaviors: CloneBehaviors, selection: SelectionApi): boolean {\n const { dx, dy } = scratch.currentDelta;\n const apply = (ops: Op[]): void => {\n if (scratch.applyOps) scratch.applyOps(ops, 'Clone');\n else scratch.scene.applyBatch(ops, 'Clone', defaultCommitAdapter(scratch.scene, selection.adapterMethods));\n };\n const answer = behaviors.end(scratch.currentDelta);\n if (answer === null) return false;\n if (answer !== undefined) {\n if (answer.length > 0) apply(answer);\n return true;\n }\n const { ops, copies } = copySelection(\n scratch.scene,\n scratch.ids,\n (id, node) => (scratch.originPoses.has(id) ? landed(scratch, id, dx, dy) : node.pose),\n 'Clone',\n );\n if (ops.length === 0) return false;\n apply(ops);\n selection.set(copies);\n return true;\n}\n\n/**\n * @experimental\n * Static descriptor for the `clone` Action. Copies each selected node, with\n * its subtree, to where the drag left it. One undo entry.\n */\nexport const cloneAction: Action & { requires: string[] } = inPlane({\n id: 'clone',\n label: 'Clone',\n // No default binding: a bare `{ kind: 'drag' }` would clone a non-empty\n // selection on any drag no tool claimed. Alt-drag on a body binds it\n // (`selectionMoveBindings`, the `move` preset).\n // The platform's duplicate cursor. The select tool binds clone behind\n // `mods: { alt: true }`, so the pump shows this only while Alt is down.\n cursor: 'copy',\n activeCursor: 'copy',\n eligible: { capability: ['edits-page', 'creates-selection'] },\n requires: ['selection', 'scene', 'applyOps', 'poseDescriptor'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts?: BindingOpts): OngoingHandle {\n const selection = ctx.deps.selection;\n const scene = ctx.deps.scene;\n const applyOps = ctx.deps.applyOps;\n\n if (!selection || !scene) return {};\n\n const ids = selection.get() as NodeId[];\n if (ids.length === 0) return {};\n\n // Capture origin poses once at drag start.\n const frame = scenePoseFrame(scene);\n const originPoses = new Map<NodeId, unknown>();\n const descriptorOf = nodeDescriptors(scene, poseDescriptorOf(ctx.deps.poseDescriptor));\n for (const id of translateTargets(scene, frame, ids)) {\n const node = scene.get(id);\n if (node === undefined) continue;\n const toEdited = invertPlane(planeOf(ctx.deps.view, node.layer));\n originPoses.set(id, carryPose(descriptorOf(id), frame.world(id), toEdited));\n }\n\n if (originPoses.size === 0) return {};\n\n const scratch: CloneScratch = {\n ids: selectedRoots(scene, ids),\n scene,\n descriptorOf,\n frame,\n originPoses,\n view: ctx.deps.view,\n currentDelta: { dx: 0, dy: 0 },\n previews: new Map<NodeId, unknown>(),\n applyOps,\n };\n const behaviors = startCloneBehaviors(ctx, opts, scene, scratch.ids, originPoses, descriptorOf);\n\n return {\n kind: 'clone',\n // The source stays visible at its committed pose; the ghost appears\n // at the drag target.\n previewHidesSource: false,\n onMove(moveCtx: InvocationCtx): void {\n if (!moveCtx.drag) return;\n scratch.currentDelta = behaviors.shape(moveCtx, { dx: moveCtx.drag.delta.x, dy: moveCtx.drag.delta.y });\n scratch.previews.clear();\n const { dx, dy } = scratch.currentDelta;\n if (dx === 0 && dy === 0) return;\n for (const id of scratch.originPoses.keys()) scratch.previews.set(id, landed(scratch, id, dx, dy)!);\n },\n onEnd(_endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n let committed = false;\n try {\n const { dx, dy } = scratch.currentDelta;\n // A zero-delta drag makes no clone, so its behaviors are canceled.\n if (reason === 'commit' && (dx !== 0 || dy !== 0)) {\n committed = commitClone(scratch, behaviors, selection);\n if (committed) recordTransform(scene, { kind: 'duplicate', dx, dy }, selection.get());\n } else runBehaviorCancel(behaviors.list, behaviors.gctx);\n } finally {\n scratch.previews.clear();\n runBehaviorSettled(behaviors.list, behaviors.gctx, committed);\n }\n },\n previewIds: () => scratch.previews.keys(),\n previewPose: (id: string) => scratch.previews.get(id as NodeId) ?? null,\n };\n },\n },\n enabled: () => true,\n}, selectionLayer);\n"],"mappings":";;;;;;;;;;;AAkDA,SAASA,EAAO,GAAuB,GAAY,GAAY,GAAqB;CAClF,IAAMC,IAASC,EAAQ,YAAY,IAAIC,CAAE,GACnCC,IAAOF,EAAQ,MAAM,IAAIC,CAAE;CACjC,IAAIF,MAAW,KAAA,KAAa,CAACG,GAAM;CACnC,IAAMC,IAAIH,EAAQ,aAAaC,CAAE,GAC3BG,IAAQC,EAA2BN,GAAQO,GAAIC,GAAIJ,CAAC;CAC1D,OAAOH,EAAQ,MAAM,MAAMC,GAAIO,EAAUL,GAAGC,GAAOK,EAAQT,EAAQ,MAAME,EAAK,KAAK,CAAC,CAAC;AACvF;AAIA,SAASQ,EAAY,GAAuB,GAA2B,GAAkC;CACvG,IAAM,EAAE,OAAI,UAAOV,EAAQ,cACrBW,KAAS,MAAoB;EACjC,AAAIX,EAAQ,WAAUA,EAAQ,SAASY,GAAK,OAAO,IAC9CZ,EAAQ,MAAM,WAAWY,GAAK,SAASC,EAAqBb,EAAQ,OAAOc,EAAU,cAAc,CAAC;CAC3G,GACMC,IAASC,EAAU,IAAIhB,EAAQ,YAAY;CACjD,IAAIe,MAAW,MAAM,OAAO;CAC5B,IAAIA,MAAW,KAAA,GAEb,OADIA,EAAO,SAAS,KAAGJ,EAAMI,CAAM,GAC5B;CAET,IAAM,EAAE,QAAK,cAAWE,EACtBjB,EAAQ,OACRA,EAAQ,MACP,GAAI,MAAUA,EAAQ,YAAY,IAAIC,CAAE,IAAIH,EAAOE,GAASC,GAAIK,GAAIC,CAAE,IAAIL,EAAK,MAChF,OACF;CAIA,OAHIU,EAAI,WAAW,MACnBD,EAAMC,CAAG,GACTE,EAAU,IAAII,CAAM,GACb;AACT;AAOA,IAAaC,IAA+CC,EAAQ;CAClE,IAAI;CACJ,OAAO;CAMP,QAAQ;CACR,cAAc;CACd,UAAU,EAAE,YAAY,CAAC,cAAc,mBAAmB,EAAE;CAC5D,UAAU;EAAC;EAAa;EAAS;EAAY;CAAgB;CAC7D,SAAS;EACP,QAAQ;EACR,MAAM,GAAoB,GAAmC;GAC3D,IAAMN,IAAYO,EAAI,KAAK,WACrBC,IAAQD,EAAI,KAAK,OACjBE,IAAWF,EAAI,KAAK;GAE1B,IAAI,CAACP,KAAa,CAACQ,GAAO,OAAO,CAAC;GAElC,IAAME,IAAMV,EAAU,IAAI;GAC1B,IAAIU,EAAI,WAAW,GAAG,OAAO,CAAC;GAG9B,IAAMC,IAAQC,EAAeJ,CAAK,GAC5BK,oBAAc,IAAI,IAAqB,GACvCC,IAAeC,EAAgBP,GAAOQ,EAAiBT,EAAI,KAAK,cAAc,CAAC;GACrF,KAAK,IAAMpB,KAAM8B,EAAiBT,GAAOG,GAAOD,CAAG,GAAG;IACpD,IAAMtB,IAAOoB,EAAM,IAAIrB,CAAE;IACzB,IAAIC,MAAS,KAAA,GAAW;IACxB,IAAM8B,IAAWC,EAAYxB,EAAQY,EAAI,KAAK,MAAMnB,EAAK,KAAK,CAAC;IAC/D,EAAY,IAAID,GAAIO,EAAUoB,EAAa3B,CAAE,GAAGwB,EAAM,MAAMxB,CAAE,GAAG+B,CAAQ,CAAC;GAC5E;GAEA,IAAIL,EAAY,SAAS,GAAG,OAAO,CAAC;GAEpC,IAAM3B,IAAwB;IAC5B,KAAKkC,EAAcZ,GAAOE,CAAG;IAC7B;IACA;IACA;IACA;IACA,MAAMH,EAAI,KAAK;IACf,cAAc;KAAE,IAAI;KAAG,IAAI;IAAE;IAC7B,0BAAU,IAAI,IAAqB;IACnC;GACF,GACML,IAAYmB,EAAoBd,GAAKe,GAAMd,GAAOtB,EAAQ,KAAK2B,GAAaC,CAAY;GAE9F,OAAO;IACL,MAAM;IAGN,oBAAoB;IACpB,OAAO,GAA8B;KACnC,IAAI,CAACS,EAAQ,MAAM;KAEnB,AADA,EAAQ,eAAerB,EAAU,MAAMqB,GAAS;MAAE,IAAIA,EAAQ,KAAK,MAAM;MAAG,IAAIA,EAAQ,KAAK,MAAM;KAAE,CAAC,GACtGrC,EAAQ,SAAS,MAAM;KACvB,IAAM,EAAE,OAAI,UAAOA,EAAQ;KAC3B,IAAIM,MAAO,KAAKC,MAAO,GACvB,KAAK,IAAMN,KAAMD,EAAQ,YAAY,KAAK,GAAG,EAAQ,SAAS,IAAIC,GAAIH,EAAOE,GAASC,GAAIK,GAAIC,CAAE,CAAE;IACpG;IACA,MAAM,GAAwB,GAAmC;KAC/D,IAAI+B,IAAY;KAChB,IAAI;MACF,IAAM,EAAE,OAAI,UAAOtC,EAAQ;MAE3B,AAAIuC,MAAW,aAAajC,MAAO,KAAKC,MAAO,MAC7C,IAAYG,EAAYV,GAASgB,GAAWF,CAAS,GACjDwB,KAAWE,EAAgBlB,GAAO;OAAE,MAAM;OAAa;OAAI;MAAG,GAAGR,EAAU,IAAI,CAAC,KAC/E2B,EAAkBzB,EAAU,MAAMA,EAAU,IAAI;KACzD,UAAU;MAER,AADAhB,EAAQ,SAAS,MAAM,GACvB0C,EAAmB1B,EAAU,MAAMA,EAAU,MAAMsB,CAAS;KAC9D;IACF;IACA,kBAAkBtC,EAAQ,SAAS,KAAK;IACxC,cAAc,MAAeA,EAAQ,SAAS,IAAIC,CAAY,KAAK;GACrE;EACF;CACF;CACA,eAAe;AACjB,GAAG0C,CAAc"}
1
+ {"version":3,"file":"action.js","names":[],"sources":["../../../../src/interactions/actions/clone/action.ts"],"sourcesContent":["/**\n * `cloneAction` — ongoing Action descriptor for alt-drag clone. Nothing is\n * written before the commit, so a cancel only clears the preview.\n *\n * The action does not gate on a modifier: it runs whenever the dispatcher\n * routes to it, and the binding that names it carries the `alt` requirement.\n */\n\nimport type { Action } from '@weasel-js/routing';\nimport type { BindingOpts, InvocationCtx, OngoingHandle } from '@weasel-js/routing';\nimport type { Scene, NodeId } from 'core/scene/types';\nimport type { Op } from 'core/ops/types';\nimport { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport { runBehaviorCancel, runBehaviorSettled } from '../gestureLifecycle';\nimport { startCloneBehaviors, type CloneBehaviors } from './behaviors';\nimport type { SelectionApi } from 'core/selection/useSelection';\nimport { copySelection } from '../defaults/copySubtree';\nimport { selectedRoots, translateTargets } from '../selectionSubtree';\nimport { nodeDescriptors, poseDescriptorOf } from '../poseDescriptorDep';\nimport { translatePoseViaDescriptor, type PoseDescriptor } from '../resize/geometry';\nimport { scenePoseFrame, type PoseFrame } from '../poseFrame';\nimport { carryPose, invertPlane, inPlane, planeOf, selectionLayer } from '../planeInput';\nimport { recordTransform } from '../transform-again/memory';\n\ninterface CloneScratch {\n /** The selected ids a copy starts from; each brings its subtree. */\n ids: NodeId[];\n scene: Scene<unknown, string, unknown>;\n descriptorOf: (id: NodeId) => PoseDescriptor<unknown>;\n /** World reads and local writes over the scene's composition strategy. */\n frame: PoseFrame<unknown>;\n /** Origin poses captured at drag start, in world — the frame the drag\n * delta is expressed in, and the plane the edit is measured in. The copy\n * keeps its source's parent and layer, so each translated result is\n * carried back to that layer's plane and stored in that same frame.\n * Holds every node the copy moves itself: a node stored in a copied frame\n * is absent, because the copy of that frame carries it. */\n originPoses: Map<NodeId, unknown>;\n /** The view the invocation started with, read for `planeOf`. */\n view: unknown;\n /** Running drag delta — updated each onMove, applied once at commit. */\n currentDelta: { dx: number; dy: number };\n /** Preview poses keyed by the original's id: the copies have no ids yet. */\n previews: Map<NodeId, unknown>;\n /** Optional consumer commit hook captured at gesture start. When present,\n * the insert ops route through it instead of `scene.applyBatch`. */\n applyOps?: (ops: Op[], label: string) => void;\n}\n\n/** Where the copy of `id` lands for a drag of `(dx, dy)`, as stored. */\nfunction landed(scratch: CloneScratch, id: NodeId, dx: number, dy: number): unknown {\n const origin = scratch.originPoses.get(id);\n const node = scratch.scene.get(id);\n if (origin === undefined || !node) return undefined;\n const d = scratch.descriptorOf(id);\n const moved = translatePoseViaDescriptor(origin, dx, dy, d);\n return scratch.frame.local(id, carryPose(d, moved, planeOf(scratch.view, node.layer)));\n}\n\n/** Commit the drag: a behavior's ops when one claims it, else the copies,\n * which become the selection. Returns whether anything was committed. */\nfunction commitClone(scratch: CloneScratch, behaviors: CloneBehaviors, selection: SelectionApi): boolean {\n const { dx, dy } = scratch.currentDelta;\n const apply = (ops: Op[]): void => {\n if (scratch.applyOps) scratch.applyOps(ops, 'Clone');\n else scratch.scene.applyBatch(ops, 'Clone', defaultCommitAdapter(scratch.scene, selection.adapterMethods));\n };\n const answer = behaviors.end(scratch.currentDelta);\n if (answer === null) return false;\n if (answer !== undefined) {\n if (answer.length > 0) apply(answer);\n return true;\n }\n const { ops, copies } = copySelection(\n scratch.scene,\n scratch.ids,\n (id, node) => (scratch.originPoses.has(id) ? landed(scratch, id, dx, dy) : node.pose),\n 'Clone',\n );\n if (ops.length === 0) return false;\n apply(ops);\n selection.set(copies);\n return true;\n}\n\n/**\n * Static descriptor for the `clone` Action. Copies each selected node, with\n * its subtree, to where the drag left it. One undo entry.\n */\nexport const cloneAction: Action & { requires: string[] } = inPlane({\n id: 'clone',\n label: 'Clone',\n // No default binding: a bare `{ kind: 'drag' }` would clone a non-empty\n // selection on any drag no tool claimed. Alt-drag on a body binds it\n // (`selectionMoveBindings`, the `move` preset).\n // The platform's duplicate cursor. The select tool binds clone behind\n // `mods: { alt: true }`, so the pump shows this only while Alt is down.\n cursor: 'copy',\n activeCursor: 'copy',\n eligible: { capability: ['edits-page', 'creates-selection'] },\n requires: ['selection', 'scene', 'applyOps', 'poseDescriptor', 'boundsIncludeStroke', 'kitSettings'],\n invoker: {\n timing: 'ongoing',\n start(ctx: InvocationCtx, opts?: BindingOpts): OngoingHandle {\n const selection = ctx.deps.selection;\n const scene = ctx.deps.scene;\n const applyOps = ctx.deps.applyOps;\n\n if (!selection || !scene) return {};\n\n const ids = selection.get() as NodeId[];\n if (ids.length === 0) return {};\n\n // Capture origin poses once at drag start.\n const frame = scenePoseFrame(scene);\n const originPoses = new Map<NodeId, unknown>();\n const descriptorOf = nodeDescriptors(scene, poseDescriptorOf(ctx.deps.poseDescriptor));\n for (const id of translateTargets(scene, frame, ids)) {\n const node = scene.get(id);\n if (node === undefined) continue;\n const toEdited = invertPlane(planeOf(ctx.deps.view, node.layer));\n originPoses.set(id, carryPose(descriptorOf(id), frame.world(id), toEdited));\n }\n\n if (originPoses.size === 0) return {};\n\n const scratch: CloneScratch = {\n ids: selectedRoots(scene, ids),\n scene,\n descriptorOf,\n frame,\n originPoses,\n view: ctx.deps.view,\n currentDelta: { dx: 0, dy: 0 },\n previews: new Map<NodeId, unknown>(),\n applyOps,\n };\n const behaviors = startCloneBehaviors(ctx, opts, scene, scratch.ids, originPoses, descriptorOf);\n\n return {\n kind: 'clone',\n // The source stays visible at its committed pose; the ghost appears\n // at the drag target.\n previewHidesSource: false,\n onMove(moveCtx: InvocationCtx): void {\n if (!moveCtx.drag) return;\n scratch.currentDelta = behaviors.shape(moveCtx, { dx: moveCtx.drag.delta.x, dy: moveCtx.drag.delta.y });\n scratch.previews.clear();\n const { dx, dy } = scratch.currentDelta;\n if (dx === 0 && dy === 0) return;\n for (const id of scratch.originPoses.keys()) scratch.previews.set(id, landed(scratch, id, dx, dy)!);\n },\n onEnd(_endCtx: InvocationCtx, reason: 'commit' | 'cancel'): void {\n let committed = false;\n try {\n const { dx, dy } = scratch.currentDelta;\n // A zero-delta drag makes no clone, so its behaviors are canceled.\n if (reason === 'commit' && (dx !== 0 || dy !== 0)) {\n committed = commitClone(scratch, behaviors, selection);\n if (committed) recordTransform(scene, { kind: 'duplicate', dx, dy }, selection.get());\n } else runBehaviorCancel(behaviors.list, behaviors.gctx);\n } finally {\n scratch.previews.clear();\n runBehaviorSettled(behaviors.list, behaviors.gctx, committed);\n }\n },\n previewIds: () => scratch.previews.keys(),\n previewPose: (id: string) => scratch.previews.get(id as NodeId) ?? null,\n };\n },\n },\n enabled: () => true,\n}, selectionLayer);\n"],"mappings":";;;;;;;;;;;;;AAkDA,SAAS,OAAO,SAAuB,IAAY,IAAY,IAAqB;CAClF,MAAM,SAAS,QAAQ,YAAY,IAAI,EAAE;CACzC,MAAM,OAAO,QAAQ,MAAM,IAAI,EAAE;CACjC,IAAI,WAAW,UAAa,CAAC,MAAM,OAAO;CAC1C,MAAM,IAAI,QAAQ,aAAa,EAAE;CACjC,MAAM,QAAQ,2BAA2B,QAAQ,IAAI,IAAI,CAAC;CAC1D,OAAO,QAAQ,MAAM,MAAM,IAAI,UAAU,GAAG,OAAO,QAAQ,QAAQ,MAAM,KAAK,KAAK,CAAC,CAAC;AACvF;;;AAIA,SAAS,YAAY,SAAuB,WAA2B,WAAkC;CACvG,MAAM,EAAE,IAAI,OAAO,QAAQ;CAC3B,MAAM,SAAS,QAAoB;EACjC,IAAI,QAAQ,UAAU,QAAQ,SAAS,KAAK,OAAO;OAC9C,QAAQ,MAAM,WAAW,KAAK,SAAS,qBAAqB,QAAQ,OAAO,UAAU,cAAc,CAAC;CAC3G;CACA,MAAM,SAAS,UAAU,IAAI,QAAQ,YAAY;CACjD,IAAI,WAAW,MAAM,OAAO;CAC5B,IAAI,WAAW,QAAW;EACxB,IAAI,OAAO,SAAS,GAAG,MAAM,MAAM;EACnC,OAAO;CACT;CACA,MAAM,EAAE,KAAK,WAAW,cACtB,QAAQ,OACR,QAAQ,MACP,IAAI,SAAU,QAAQ,YAAY,IAAI,EAAE,IAAI,OAAO,SAAS,IAAI,IAAI,EAAE,IAAI,KAAK,MAChF,OACF;CACA,IAAI,IAAI,WAAW,GAAG,OAAO;CAC7B,MAAM,GAAG;CACT,UAAU,IAAI,MAAM;CACpB,OAAO;AACT;;;;;AAMA,IAAa,cAA+C,QAAQ;CAClE,IAAI;CACJ,OAAO;CAMP,QAAQ;CACR,cAAc;CACd,UAAU,EAAE,YAAY,CAAC,cAAc,mBAAmB,EAAE;CAC5D,UAAU;EAAC;EAAa;EAAS;EAAY;EAAkB;EAAuB;CAAa;CACnG,SAAS;EACP,QAAQ;EACR,MAAM,KAAoB,MAAmC;GAC3D,MAAM,YAAY,IAAI,KAAK;GAC3B,MAAM,QAAQ,IAAI,KAAK;GACvB,MAAM,WAAW,IAAI,KAAK;GAE1B,IAAI,CAAC,aAAa,CAAC,OAAO,OAAO,CAAC;GAElC,MAAM,MAAM,UAAU,IAAI;GAC1B,IAAI,IAAI,WAAW,GAAG,OAAO,CAAC;GAG9B,MAAM,QAAQ,eAAe,KAAK;GAClC,MAAM,8BAAc,IAAI,IAAqB;GAC7C,MAAM,eAAe,gBAAgB,OAAO,iBAAiB,IAAI,KAAK,cAAc,CAAC;GACrF,KAAK,MAAM,MAAM,iBAAiB,OAAO,OAAO,GAAG,GAAG;IACpD,MAAM,OAAO,MAAM,IAAI,EAAE;IACzB,IAAI,SAAS,QAAW;IACxB,MAAM,WAAW,YAAY,QAAQ,IAAI,KAAK,MAAM,KAAK,KAAK,CAAC;IAC/D,YAAY,IAAI,IAAI,UAAU,aAAa,EAAE,GAAG,MAAM,MAAM,EAAE,GAAG,QAAQ,CAAC;GAC5E;GAEA,IAAI,YAAY,SAAS,GAAG,OAAO,CAAC;GAEpC,MAAM,UAAwB;IAC5B,KAAK,cAAc,OAAO,GAAG;IAC7B;IACA;IACA;IACA;IACA,MAAM,IAAI,KAAK;IACf,cAAc;KAAE,IAAI;KAAG,IAAI;IAAE;IAC7B,0BAAU,IAAI,IAAqB;IACnC;GACF;GACA,MAAM,YAAY,oBAAoB,KAAK,MAAM,OAAO,QAAQ,KAAK,aAAa,YAAY;GAE9F,OAAO;IACL,MAAM;IAGN,oBAAoB;IACpB,OAAO,SAA8B;KACnC,IAAI,CAAC,QAAQ,MAAM;KACnB,QAAQ,eAAe,UAAU,MAAM,SAAS;MAAE,IAAI,QAAQ,KAAK,MAAM;MAAG,IAAI,QAAQ,KAAK,MAAM;KAAE,CAAC;KACtG,QAAQ,SAAS,MAAM;KACvB,MAAM,EAAE,IAAI,OAAO,QAAQ;KAC3B,IAAI,OAAO,KAAK,OAAO,GAAG;KAC1B,KAAK,MAAM,MAAM,QAAQ,YAAY,KAAK,GAAG,QAAQ,SAAS,IAAI,IAAI,OAAO,SAAS,IAAI,IAAI,EAAE,CAAE;IACpG;IACA,MAAM,SAAwB,QAAmC;KAC/D,IAAI,YAAY;KAChB,IAAI;MACF,MAAM,EAAE,IAAI,OAAO,QAAQ;MAE3B,IAAI,WAAW,aAAa,OAAO,KAAK,OAAO,IAAI;OACjD,YAAY,YAAY,SAAS,WAAW,SAAS;OACrD,IAAI,WAAW,gBAAgB,OAAO;QAAE,MAAM;QAAa;QAAI;OAAG,GAAG,UAAU,IAAI,CAAC;MACtF,OAAO,kBAAkB,UAAU,MAAM,UAAU,IAAI;KACzD,UAAU;MACR,QAAQ,SAAS,MAAM;MACvB,mBAAmB,UAAU,MAAM,UAAU,MAAM,SAAS;KAC9D;IACF;IACA,kBAAkB,QAAQ,SAAS,KAAK;IACxC,cAAc,OAAe,QAAQ,SAAS,IAAI,EAAY,KAAK;GACrE;EACF;CACF;CACA,eAAe;AACjB,GAAG,cAAc"}
@@ -1,52 +1,69 @@
1
- import { translatePoseViaDescriptor as e } from "../../../core/geometry/poseDescriptor.js";
2
- import { reduceBehaviorEnd as t } from "../gestureLifecycle.js";
3
- import { gestureReaders as n } from "../../gestures/shared/screenTolerance.js";
4
- import { pointerStateOf as r } from "../pointerState.js";
5
- import { sceneGestureFrames as i } from "../gestureFrames.js";
6
- import { defaultCommitAdapter as a } from "../defaultCommitAdapter.js";
1
+ import { translatePoseViaDescriptor } from "../../../core/geometry/poseDescriptor.js";
2
+ import { defaultCommitAdapter } from "../defaultCommitAdapter.js";
3
+ import { reduceBehaviorEnd } from "../gestureLifecycle.js";
4
+ import { gestureReaders } from "../../gestures/shared/screenTolerance.js";
5
+ import { pointerStateOf } from "../pointerState.js";
6
+ import { sceneGestureFrames } from "../gestureFrames.js";
7
+
7
8
  //#region src/interactions/actions/clone/behaviors.ts
8
- function o(o, s, c, l, u, d) {
9
- let f = s?.behaviors ?? [], p = n(o.deps), m = new Map(u), h = {
10
- draggedIds: l,
11
- origin: m,
12
- current: new Map(m),
9
+ /**
10
+ * Start the binding's behaviors over the poses the copies are measured from:
11
+ * `origins`, in world, keyed by the original's id.
12
+ */
13
+ function startCloneBehaviors(ctx, opts, scene, roots, origins, descriptorOf) {
14
+ const list = opts?.behaviors ?? [];
15
+ const readers = gestureReaders(ctx.deps);
16
+ const origin = new Map(origins);
17
+ const gctx = {
18
+ draggedIds: roots,
19
+ origin,
20
+ current: new Map(origin),
13
21
  snap: null,
14
- modifiers: { ...o.modifiers },
15
- pointer: r(o.world, o),
16
- view: p.view(),
17
- plane: p.plane(),
18
- frames: i(c, o.deps.view),
19
- adapter: a(c, o.deps.selection?.adapterMethods),
22
+ modifiers: { ...ctx.modifiers },
23
+ pointer: pointerStateOf(ctx.world, ctx),
24
+ view: readers.view(),
25
+ plane: readers.plane(),
26
+ kitSettings: readers.kitSettings,
27
+ frames: sceneGestureFrames(scene, ctx.deps),
28
+ adapter: defaultCommitAdapter(scene, ctx.deps.selection?.adapterMethods),
20
29
  scratch: {}
21
- }, g = ({ dx: t, dy: n }) => {
22
- for (let [r, i] of u) h.current.set(r, e(i, t, n, d(r)));
23
30
  };
24
- for (let e of f) e.onStart?.(h);
31
+ const place = ({ dx, dy }) => {
32
+ for (const [id, pose] of origins) gctx.current.set(id, translatePoseViaDescriptor(pose, dx, dy, descriptorOf(id)));
33
+ };
34
+ for (const b of list) b.onStart?.(gctx);
25
35
  return {
26
- list: f,
27
- gctx: h,
28
- shape(e, t) {
29
- if (f.length === 0) return t;
30
- h.modifiers = { ...e.modifiers }, h.pointer = r(e.world, e), h.view = p.view(), h.plane = p.plane(), g(t);
31
- let n = {
36
+ list,
37
+ gctx,
38
+ shape(moveCtx, raw) {
39
+ if (list.length === 0) return raw;
40
+ gctx.modifiers = { ...moveCtx.modifiers };
41
+ gctx.pointer = pointerStateOf(moveCtx.world, moveCtx);
42
+ gctx.view = readers.view();
43
+ gctx.plane = readers.plane();
44
+ place(raw);
45
+ let transform = {
32
46
  kind: "translate",
33
- ...t
47
+ ...raw
34
48
  };
35
- for (let e of f) {
36
- let t = e.onMove?.(h, n);
37
- t && (t.transform?.kind === "translate" && (n = t.transform), t.snap !== void 0 && (h.snap = t.snap));
49
+ for (const b of list) {
50
+ const r = b.onMove?.(gctx, transform);
51
+ if (!r) continue;
52
+ if (r.transform) transform = r.transform;
53
+ if (r.snap !== void 0) gctx.snap = r.snap;
38
54
  }
39
- return n.kind === "translate" ? {
40
- dx: n.dx,
41
- dy: n.dy
42
- } : t;
55
+ return {
56
+ dx: transform.dx,
57
+ dy: transform.dy
58
+ };
43
59
  },
44
- end(e) {
45
- return g(e), t(f, h);
60
+ end(delta) {
61
+ place(delta);
62
+ return reduceBehaviorEnd(list, gctx);
46
63
  }
47
64
  };
48
65
  }
49
- //#endregion
50
- export { o as startCloneBehaviors };
51
66
 
67
+ //#endregion
68
+ export { startCloneBehaviors };
52
69
  //# sourceMappingURL=behaviors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"behaviors.js","names":["startCloneBehaviors","list","opts","readers","gestureReaders","ctx","origin","origins","gctx","roots","pointerStateOf","sceneGestureFrames","scene","defaultCommitAdapter","place","id","pose","translatePoseViaDescriptor","dx","dy","descriptorOf","b","raw","moveCtx","transform","r","delta","reduceBehaviorEnd"],"sources":["../../../../src/interactions/actions/clone/behaviors.ts"],"sourcesContent":["import type { ActionDeps, BindingOpts, InvocationCtx } from '@weasel-js/routing';\nimport type { Op } from 'core/ops/types';\nimport type { NodeId, Scene } from 'core/scene/types';\nimport { gestureReaders, type GestureReaders } from '../../gestures/shared/screenTolerance';\nimport type { CloneBehavior, CloneBehaviorResult, GestureContext, GroupTransform } from '../../gestures/types';\nimport { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport { sceneGestureFrames } from '../gestureFrames';\nimport { reduceBehaviorEnd } from '../gestureLifecycle';\nimport { pointerStateOf } from '../pointerState';\nimport { translatePoseViaDescriptor, type PoseDescriptor } from '../resize/geometry';\n\ntype Delta = { dx: number; dy: number };\n\n/** A clone drag's behaviors and the context they are told. */\nexport interface CloneBehaviors {\n readonly list: readonly CloneBehavior<unknown>[];\n readonly gctx: GestureContext<unknown>;\n /** The drag's delta as the behaviors reshape it, each seeing the one before. */\n shape(moveCtx: InvocationCtx, raw: Delta): Delta;\n /** What the behaviors answer for the commit; see `reduceBehaviorEnd`. */\n end(delta: Delta): Op[] | null | undefined;\n}\n\n/**\n * Start the binding's behaviors over the poses the copies are measured from:\n * `origins`, in world, keyed by the original's id.\n */\nexport function startCloneBehaviors(\n ctx: InvocationCtx,\n opts: BindingOpts | undefined,\n scene: Scene<unknown, string, unknown>,\n roots: readonly NodeId[],\n origins: ReadonlyMap<NodeId, unknown>,\n descriptorOf: (id: NodeId) => PoseDescriptor<unknown>,\n): CloneBehaviors {\n const list = (opts?.behaviors ?? []) as CloneBehavior<unknown>[];\n const readers: GestureReaders = gestureReaders(ctx.deps as Pick<ActionDeps, 'view'>);\n const origin = new Map<string, unknown>(origins as ReadonlyMap<string, unknown>);\n const gctx: GestureContext<unknown> = {\n draggedIds: roots as unknown as string[],\n origin,\n current: new Map(origin),\n snap: null,\n modifiers: { ...ctx.modifiers },\n pointer: pointerStateOf(ctx.world, ctx),\n view: readers.view(),\n plane: readers.plane(),\n frames: sceneGestureFrames(scene, ctx.deps.view),\n adapter: defaultCommitAdapter(scene, ctx.deps.selection?.adapterMethods) as unknown as GestureContext<unknown>['adapter'],\n scratch: {},\n };\n const place = ({ dx, dy }: Delta): void => {\n for (const [id, pose] of origins) {\n gctx.current.set(id as string, translatePoseViaDescriptor(pose, dx, dy, descriptorOf(id)));\n }\n };\n for (const b of list) b.onStart?.(gctx);\n return {\n list,\n gctx,\n shape(moveCtx, raw) {\n if (list.length === 0) return raw;\n gctx.modifiers = { ...moveCtx.modifiers };\n gctx.pointer = pointerStateOf(moveCtx.world, moveCtx);\n gctx.view = readers.view();\n gctx.plane = readers.plane();\n place(raw);\n let transform: GroupTransform = { kind: 'translate', ...raw };\n for (const b of list) {\n const r: CloneBehaviorResult<unknown> | void = b.onMove?.(gctx, transform);\n if (!r) continue;\n if (r.transform?.kind === 'translate') transform = r.transform;\n if (r.snap !== undefined) gctx.snap = r.snap;\n }\n return transform.kind === 'translate' ? { dx: transform.dx, dy: transform.dy } : raw;\n },\n end(delta) {\n place(delta);\n return reduceBehaviorEnd(list, gctx);\n },\n };\n}\n"],"mappings":";;;;;;;AA2BA,SAAgBA,EACd,GACA,GACA,GACA,GACA,GACA,GACgB;CAChB,IAAMC,IAAQC,GAAM,aAAa,CAAC,GAC5BC,IAA0BC,EAAeC,EAAI,IAAgC,GAC7EC,IAAS,IAAI,IAAqBC,CAAuC,GACzEC,IAAgC;EACpC,YAAYC;EACZ;EACA,SAAS,IAAI,IAAIH,CAAM;EACvB,MAAM;EACN,WAAW,EAAE,GAAGD,EAAI,UAAU;EAC9B,SAASK,EAAeL,EAAI,OAAOA,CAAG;EACtC,MAAMF,EAAQ,KAAK;EACnB,OAAOA,EAAQ,MAAM;EACrB,QAAQQ,EAAmBC,GAAOP,EAAI,KAAK,IAAI;EAC/C,SAASQ,EAAqBD,GAAOP,EAAI,KAAK,WAAW,cAAc;EACvE,SAAS,CAAC;CACZ,GACMS,KAAS,EAAE,OAAI,YAAsB;EACzC,KAAK,IAAM,CAACC,GAAIC,MAAST,GACvB,EAAK,QAAQ,IAAIQ,GAAcE,EAA2BD,GAAME,GAAIC,GAAIC,EAAaL,CAAE,CAAC,CAAC;CAE7F;CACA,KAAK,IAAMM,KAAKpB,GAAM,EAAE,UAAUO,CAAI;CACtC,OAAO;EACL;EACA;EACA,MAAM,GAAS,GAAK;GAClB,IAAIP,EAAK,WAAW,GAAG,OAAOqB;GAK9B,AAJA,EAAK,YAAY,EAAE,GAAGC,EAAQ,UAAU,GACxC,EAAK,UAAUb,EAAea,EAAQ,OAAOA,CAAO,GACpD,EAAK,OAAOpB,EAAQ,KAAK,GACzB,EAAK,QAAQA,EAAQ,MAAM,GAC3BW,EAAMQ,CAAG;GACT,IAAIE,IAA4B;IAAE,MAAM;IAAa,GAAGF;GAAI;GAC5D,KAAK,IAAMD,KAAKpB,GAAM;IACpB,IAAMwB,IAAyCJ,EAAE,SAASb,GAAMgB,CAAS;IACzE,AAAKC,MACDA,EAAE,WAAW,SAAS,gBAAa,IAAYA,EAAE,YACjDA,EAAE,SAAS,KAAA,MAAW,EAAK,OAAOA,EAAE;GAC1C;GACA,OAAOD,EAAU,SAAS,cAAc;IAAE,IAAIA,EAAU;IAAI,IAAIA,EAAU;GAAG,IAAIF;EACnF;EACA,IAAI,GAAO;GAET,OADAR,EAAMY,CAAK,GACJC,EAAkB1B,GAAMO,CAAI;EACrC;CACF;AACF"}
1
+ {"version":3,"file":"behaviors.js","names":[],"sources":["../../../../src/interactions/actions/clone/behaviors.ts"],"sourcesContent":["import type { ActionDeps, BindingOpts, InvocationCtx } from '@weasel-js/routing';\nimport type { Op } from 'core/ops/types';\nimport type { NodeId, Scene } from 'core/scene/types';\nimport { gestureReaders, type GestureReaders } from '../../gestures/shared/screenTolerance';\nimport type { CloneBehavior, CloneBehaviorResult, GestureContext, GroupTransform } from '../../gestures/types';\nimport { defaultCommitAdapter } from '../defaultCommitAdapter';\nimport { sceneGestureFrames } from '../gestureFrames';\nimport { reduceBehaviorEnd } from '../gestureLifecycle';\nimport { pointerStateOf } from '../pointerState';\nimport { translatePoseViaDescriptor, type PoseDescriptor } from '../resize/geometry';\n\ntype Delta = { dx: number; dy: number };\n\n/** A clone drag's behaviors and the context they are told. */\nexport interface CloneBehaviors {\n readonly list: readonly CloneBehavior<unknown>[];\n readonly gctx: GestureContext<unknown>;\n /** The drag's delta as the behaviors reshape it, each seeing the one before. */\n shape(moveCtx: InvocationCtx, raw: Delta): Delta;\n /** What the behaviors answer for the commit; see `reduceBehaviorEnd`. */\n end(delta: Delta): Op[] | null | undefined;\n}\n\n/**\n * Start the binding's behaviors over the poses the copies are measured from:\n * `origins`, in world, keyed by the original's id.\n */\nexport function startCloneBehaviors(\n ctx: InvocationCtx,\n opts: BindingOpts | undefined,\n scene: Scene<unknown, string, unknown>,\n roots: readonly NodeId[],\n origins: ReadonlyMap<NodeId, unknown>,\n descriptorOf: (id: NodeId) => PoseDescriptor<unknown>,\n): CloneBehaviors {\n const list = (opts?.behaviors ?? []) as CloneBehavior<unknown>[];\n const readers: GestureReaders = gestureReaders(ctx.deps as Pick<ActionDeps, 'view' | 'kitSettings'>);\n const origin = new Map<string, unknown>(origins as ReadonlyMap<string, unknown>);\n const gctx: GestureContext<unknown> = {\n draggedIds: roots as unknown as string[],\n origin,\n current: new Map(origin),\n snap: null,\n modifiers: { ...ctx.modifiers },\n pointer: pointerStateOf(ctx.world, ctx),\n view: readers.view(),\n plane: readers.plane(),\n kitSettings: readers.kitSettings,\n frames: sceneGestureFrames(scene, ctx.deps),\n adapter: defaultCommitAdapter(scene, ctx.deps.selection?.adapterMethods) as unknown as GestureContext<unknown>['adapter'],\n scratch: {},\n };\n const place = ({ dx, dy }: Delta): void => {\n for (const [id, pose] of origins) {\n gctx.current.set(id as string, translatePoseViaDescriptor(pose, dx, dy, descriptorOf(id)));\n }\n };\n for (const b of list) b.onStart?.(gctx);\n return {\n list,\n gctx,\n shape(moveCtx, raw) {\n if (list.length === 0) return raw;\n gctx.modifiers = { ...moveCtx.modifiers };\n gctx.pointer = pointerStateOf(moveCtx.world, moveCtx);\n gctx.view = readers.view();\n gctx.plane = readers.plane();\n place(raw);\n let transform: GroupTransform = { kind: 'translate', ...raw };\n for (const b of list) {\n const r: CloneBehaviorResult<unknown> | void = b.onMove?.(gctx, transform);\n if (!r) continue;\n if (r.transform) transform = r.transform;\n if (r.snap !== undefined) gctx.snap = r.snap;\n }\n return { dx: transform.dx, dy: transform.dy };\n },\n end(delta) {\n place(delta);\n return reduceBehaviorEnd(list, gctx);\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;AA2BA,SAAgB,oBACd,KACA,MACA,OACA,OACA,SACA,cACgB;CAChB,MAAM,OAAQ,MAAM,aAAa,CAAC;CAClC,MAAM,UAA0B,eAAe,IAAI,IAAgD;CACnG,MAAM,SAAS,IAAI,IAAqB,OAAuC;CAC/E,MAAM,OAAgC;EACpC,YAAY;EACZ;EACA,SAAS,IAAI,IAAI,MAAM;EACvB,MAAM;EACN,WAAW,EAAE,GAAG,IAAI,UAAU;EAC9B,SAAS,eAAe,IAAI,OAAO,GAAG;EACtC,MAAM,QAAQ,KAAK;EACnB,OAAO,QAAQ,MAAM;EACrB,aAAa,QAAQ;EACrB,QAAQ,mBAAmB,OAAO,IAAI,IAAI;EAC1C,SAAS,qBAAqB,OAAO,IAAI,KAAK,WAAW,cAAc;EACvE,SAAS,CAAC;CACZ;CACA,MAAM,SAAS,EAAE,IAAI,SAAsB;EACzC,KAAK,MAAM,CAAC,IAAI,SAAS,SACvB,KAAK,QAAQ,IAAI,IAAc,2BAA2B,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC,CAAC;CAE7F;CACA,KAAK,MAAM,KAAK,MAAM,EAAE,UAAU,IAAI;CACtC,OAAO;EACL;EACA;EACA,MAAM,SAAS,KAAK;GAClB,IAAI,KAAK,WAAW,GAAG,OAAO;GAC9B,KAAK,YAAY,EAAE,GAAG,QAAQ,UAAU;GACxC,KAAK,UAAU,eAAe,QAAQ,OAAO,OAAO;GACpD,KAAK,OAAO,QAAQ,KAAK;GACzB,KAAK,QAAQ,QAAQ,MAAM;GAC3B,MAAM,GAAG;GACT,IAAI,YAA4B;IAAE,MAAM;IAAa,GAAG;GAAI;GAC5D,KAAK,MAAM,KAAK,MAAM;IACpB,MAAM,IAAyC,EAAE,SAAS,MAAM,SAAS;IACzE,IAAI,CAAC,GAAG;IACR,IAAI,EAAE,WAAW,YAAY,EAAE;IAC/B,IAAI,EAAE,SAAS,QAAW,KAAK,OAAO,EAAE;GAC1C;GACA,OAAO;IAAE,IAAI,UAAU;IAAI,IAAI,UAAU;GAAG;EAC9C;EACA,IAAI,OAAO;GACT,MAAM,KAAK;GACX,OAAO,kBAAkB,MAAM,IAAI;EACrC;CACF;AACF"}
@@ -1,17 +1,39 @@
1
- import { asNodeId as e } from "../../core/scene/types.js";
2
- import { documentReads as t, sceneMutators as n } from "../../core/scene/sceneMutators.js";
1
+ import { asNodeId } from "../../core/scene/types.js";
2
+ import { documentReads, sceneMutators } from "../../core/scene/sceneMutators.js";
3
+
3
4
  //#region src/interactions/actions/defaultCommitAdapter.ts
4
- function r(r, i) {
5
+ /** Build the adapter the default actions commit through when the consumer
6
+ * supplies no `applyOps` hook of its own — it applies ops straight to the
7
+ * scene. Path and text ops are not covered; those surfaces belong to their
8
+ * own owners.
9
+ *
10
+ * Pass `selection` (a `SelectionApi`'s `adapterMethods`) and selection reads
11
+ * and writes go through it rather than the scene, so a canvas that gates its
12
+ * selection — `selectable={false}` — gates what these batches select too. */
13
+ function defaultCommitAdapter(scene, selection) {
5
14
  return {
6
- ...n(r),
7
- ...t(r),
8
- getSelection: () => [...i ? i.getSelection() : r.getSelection()],
9
- setSelection: (t) => {
10
- i ? i.setSelection(t.map(e)) : r.setSelection(t.map(e));
15
+ ...sceneMutators(scene),
16
+ ...documentReads(scene),
17
+ getSelection: () => [...selection ? selection.getSelection() : scene.getSelection()],
18
+ setSelection: (ids) => {
19
+ if (selection) selection.setSelection(ids.map(asNodeId));
20
+ else scene.setSelection(ids.map(asNodeId));
11
21
  }
12
22
  };
13
23
  }
14
- //#endregion
15
- export { r as defaultCommitAdapter };
24
+ /** Commit `ops` as one undo entry, through the consumer's `applyOps` when
25
+ * there is one, else straight to the `scene` dep. */
26
+ function commitOps(deps, ops, label) {
27
+ if (ops.length === 0) return;
28
+ if (deps.applyOps) {
29
+ deps.applyOps(ops, label);
30
+ return;
31
+ }
32
+ const scene = deps.scene;
33
+ if (!scene) return;
34
+ scene.applyBatch(ops, label, defaultCommitAdapter(scene, deps.selection?.adapterMethods));
35
+ }
16
36
 
37
+ //#endregion
38
+ export { commitOps, defaultCommitAdapter };
17
39
  //# sourceMappingURL=defaultCommitAdapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaultCommitAdapter.js","names":["defaultCommitAdapter","sceneMutators","scene","documentReads","selection","ids","asNodeId"],"sources":["../../../src/interactions/actions/defaultCommitAdapter.ts"],"sourcesContent":["/**\n * Shared scene-backed commit adapter for default actions.\n *\n * Default actions route data/layer/pose/parent mutations through the\n * consumer's `applyOps` commit hook when one is present; when it isn't, they\n * fall back to applying the committed ops directly against the scene through\n * this adapter: the scene's mutators (`core/scene/sceneMutators.ts`), the\n * document's poses and nodes, and the selection. Known exclusions from the op\n * factory roster — surfaces the scene doesn't own: `setPath` and `setText`.\n */\nimport { documentReads, sceneMutators } from 'core/scene/sceneMutators';\nimport type { Scene } from 'core/scene/types';\nimport { asNodeId } from 'core/scene/types';\nimport type { SelectionApi } from 'core/selection/useSelection';\n\n/** Build the adapter the default actions commit through when the consumer\n * supplies no `applyOps` hook of its own — it applies ops straight to the\n * scene. Path and text ops are not covered; those surfaces belong to their\n * own owners.\n *\n * Pass `selection` (a `SelectionApi`'s `adapterMethods`) and selection reads\n * and writes go through it rather than the scene, so a canvas that gates its\n * selection — `selectable={false}` — gates what these batches select too. */\nexport function defaultCommitAdapter<TPose>(\n scene: Scene<unknown, string, TPose>,\n selection?: SelectionApi['adapterMethods'],\n) {\n return {\n ...sceneMutators(scene),\n ...documentReads(scene),\n getSelection: (): string[] => [...(selection ? selection.getSelection() : scene.getSelection())],\n setSelection: (ids: string[]) => {\n if (selection) selection.setSelection(ids.map(asNodeId));\n else scene.setSelection(ids.map(asNodeId));\n },\n };\n}\n"],"mappings":";;;AAuBA,SAAgBA,EACd,GACA,GACA;CACA,OAAO;EACL,GAAGC,EAAcC,CAAK;EACtB,GAAGC,EAAcD,CAAK;EACtB,oBAA8B,CAAC,GAAIE,IAAYA,EAAU,aAAa,IAAIF,EAAM,aAAa,CAAE;EAC/F,eAAe,MAAkB;GAC/B,AAAIE,IAAWA,EAAU,aAAaC,EAAI,IAAIC,CAAQ,CAAC,IAClDJ,EAAM,aAAaG,EAAI,IAAIC,CAAQ,CAAC;EAC3C;CACF;AACF"}
1
+ {"version":3,"file":"defaultCommitAdapter.js","names":[],"sources":["../../../src/interactions/actions/defaultCommitAdapter.ts"],"sourcesContent":["/**\n * Shared scene-backed commit adapter for default actions.\n *\n * Default actions route data/layer/pose/parent mutations through the\n * consumer's `applyOps` commit hook when one is present; when it isn't, they\n * fall back to applying the committed ops directly against the scene through\n * this adapter: the scene's mutators (`core/scene/sceneMutators.ts`), the\n * document's poses and nodes, and the selection. Known exclusions from the op\n * factory roster — surfaces the scene doesn't own: `setPath` and `setText`.\n */\nimport type { ActionDeps } from '@weasel-js/routing';\nimport type { Op } from 'core/ops/types';\nimport { documentReads, sceneMutators } from 'core/scene/sceneMutators';\nimport type { Scene } from 'core/scene/types';\nimport { asNodeId } from 'core/scene/types';\nimport type { SelectionApi } from 'core/selection/useSelection';\n\n/** Build the adapter the default actions commit through when the consumer\n * supplies no `applyOps` hook of its own — it applies ops straight to the\n * scene. Path and text ops are not covered; those surfaces belong to their\n * own owners.\n *\n * Pass `selection` (a `SelectionApi`'s `adapterMethods`) and selection reads\n * and writes go through it rather than the scene, so a canvas that gates its\n * selection — `selectable={false}` — gates what these batches select too. */\nexport function defaultCommitAdapter<TPose>(\n scene: Scene<unknown, string, TPose>,\n selection?: SelectionApi['adapterMethods'],\n) {\n return {\n ...sceneMutators(scene),\n ...documentReads(scene),\n getSelection: (): string[] => [...(selection ? selection.getSelection() : scene.getSelection())],\n setSelection: (ids: string[]) => {\n if (selection) selection.setSelection(ids.map(asNodeId));\n else scene.setSelection(ids.map(asNodeId));\n },\n };\n}\n\n/** Commit `ops` as one undo entry, through the consumer's `applyOps` when\n * there is one, else straight to the `scene` dep. */\nexport function commitOps(deps: ActionDeps, ops: Op[], label: string): void {\n if (ops.length === 0) return;\n if (deps.applyOps) {\n deps.applyOps(ops, label);\n return;\n }\n const scene = deps.scene as Scene<unknown, string, unknown> | undefined;\n if (!scene) return;\n scene.applyBatch(ops, label, defaultCommitAdapter(scene, deps.selection?.adapterMethods));\n}\n"],"mappings":";;;;;;;;;;;;AAyBA,SAAgB,qBACd,OACA,WACA;CACA,OAAO;EACL,GAAG,cAAc,KAAK;EACtB,GAAG,cAAc,KAAK;EACtB,oBAA8B,CAAC,GAAI,YAAY,UAAU,aAAa,IAAI,MAAM,aAAa,CAAE;EAC/F,eAAe,QAAkB;GAC/B,IAAI,WAAW,UAAU,aAAa,IAAI,IAAI,QAAQ,CAAC;QAClD,MAAM,aAAa,IAAI,IAAI,QAAQ,CAAC;EAC3C;CACF;AACF;;;AAIA,SAAgB,UAAU,MAAkB,KAAW,OAAqB;CAC1E,IAAI,IAAI,WAAW,GAAG;CACtB,IAAI,KAAK,UAAU;EACjB,KAAK,SAAS,KAAK,KAAK;EACxB;CACF;CACA,MAAM,QAAQ,KAAK;CACnB,IAAI,CAAC,OAAO;CACZ,MAAM,WAAW,KAAK,OAAO,qBAAqB,OAAO,KAAK,WAAW,cAAc,CAAC;AAC1F"}