@weasel-js/core 1.6.1 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1005) hide show
  1. package/CHANGELOG.md +1006 -0
  2. package/README.md +28 -9
  3. package/dist/WeaselProvider.js +15 -0
  4. package/dist/WeaselProvider.js.map +1 -0
  5. package/dist/affordances/composeAffordanceLayer.js +224 -0
  6. package/dist/affordances/composeAffordanceLayer.js.map +1 -0
  7. package/dist/affordances/cornerResize.js +69 -0
  8. package/dist/affordances/cornerResize.js.map +1 -0
  9. package/dist/affordances/hitAffordanceRegions.js +138 -0
  10. package/dist/affordances/hitAffordanceRegions.js.map +1 -0
  11. package/dist/affordances/pathAnchors.js +66 -0
  12. package/dist/affordances/pathAnchors.js.map +1 -0
  13. package/dist/affordances/rotationHandle.js +103 -0
  14. package/dist/affordances/rotationHandle.js.map +1 -0
  15. package/dist/animation/behaviors/momentum.js +118 -0
  16. package/dist/animation/behaviors/momentum.js.map +1 -0
  17. package/dist/animation/colorHelpers.js +135 -0
  18. package/dist/animation/colorHelpers.js.map +1 -0
  19. package/dist/animation/colorRegistry.js +37 -0
  20. package/dist/animation/colorRegistry.js.map +1 -0
  21. package/dist/animation/index.js +20 -0
  22. package/dist/animation/loop.js +62 -0
  23. package/dist/animation/loop.js.map +1 -0
  24. package/dist/animation/observe.js +23 -0
  25. package/dist/animation/observe.js.map +1 -0
  26. package/dist/animation/poseHelpers.js +50 -0
  27. package/dist/animation/poseHelpers.js.map +1 -0
  28. package/dist/animation/reflow.js +121 -0
  29. package/dist/animation/reflow.js.map +1 -0
  30. package/dist/animation/rig/bindRig.js +74 -0
  31. package/dist/animation/rig/bindRig.js.map +1 -0
  32. package/dist/animation/rig/blendPoses.js +43 -0
  33. package/dist/animation/rig/blendPoses.js.map +1 -0
  34. package/dist/animation/rig/mirrorPose.js +19 -0
  35. package/dist/animation/rig/mirrorPose.js.map +1 -0
  36. package/dist/animation/rig/resolveSkeleton.js +33 -0
  37. package/dist/animation/rig/resolveSkeleton.js.map +1 -0
  38. package/dist/animation/rig/solveIk.js +103 -0
  39. package/dist/animation/rig/solveIk.js.map +1 -0
  40. package/dist/animation/rig/types.js +12 -0
  41. package/dist/animation/rig/types.js.map +1 -0
  42. package/dist/animation/rig/useRig.js +23 -0
  43. package/dist/animation/rig/useRig.js.map +1 -0
  44. package/dist/animation/slew.js +27 -0
  45. package/dist/animation/slew.js.map +1 -0
  46. package/dist/animation/stagger.js +138 -0
  47. package/dist/animation/stagger.js.map +1 -0
  48. package/dist/animation/timeline/booking.js +106 -0
  49. package/dist/animation/timeline/booking.js.map +1 -0
  50. package/dist/animation/timeline/createTimeline.js +116 -0
  51. package/dist/animation/timeline/createTimeline.js.map +1 -0
  52. package/dist/animation/timeline/sampleTrack.js +29 -0
  53. package/dist/animation/timeline/sampleTrack.js.map +1 -0
  54. package/dist/animation/useAnimator.js +329 -0
  55. package/dist/animation/useAnimator.js.map +1 -0
  56. package/dist/animation/wrappers/animateLifecycle.js +40 -0
  57. package/dist/animation/wrappers/animateLifecycle.js.map +1 -0
  58. package/dist/animation/wrappers/animateOnSetPose.js +44 -0
  59. package/dist/animation/wrappers/animateOnSetPose.js.map +1 -0
  60. package/dist/{autoPoseDescriptor-_XOyF7t4.d.ts → autoPoseDescriptor-BT_vp9FO.d.ts} +2 -2
  61. package/dist/{builtins-HWyuLzE-.d.ts → builtins-BSUfH8nU.d.ts} +1301 -508
  62. package/dist/canvas/Canvas.js +608 -0
  63. package/dist/canvas/Canvas.js.map +1 -0
  64. package/dist/canvas/CanvasView.js +255 -0
  65. package/dist/canvas/CanvasView.js.map +1 -0
  66. package/dist/canvas/CursorCoordsHud.js +75 -0
  67. package/dist/canvas/CursorCoordsHud.js.map +1 -0
  68. package/dist/canvas/DrawCanvas.js +67 -0
  69. package/dist/canvas/DrawCanvas.js.map +1 -0
  70. package/dist/canvas/MinimapCanvas.js +139 -0
  71. package/dist/canvas/MinimapCanvas.js.map +1 -0
  72. package/dist/canvas/ModalityHud.js +66 -0
  73. package/dist/canvas/ModalityHud.js.map +1 -0
  74. package/dist/canvas/NodeShape.js +391 -0
  75. package/dist/canvas/NodeShape.js.map +1 -0
  76. package/dist/canvas/PickHud.js +93 -0
  77. package/dist/canvas/PickHud.js.map +1 -0
  78. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js +10 -0
  79. package/dist/canvas/SceneCanvas/ActionsProviderIfRoot.js.map +1 -0
  80. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js +10 -0
  81. package/dist/canvas/SceneCanvas/DepRegistryProviderIfRoot.js.map +1 -0
  82. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +51 -0
  83. package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -0
  84. package/dist/canvas/SceneCanvas/contributionFrameHooks.js +42 -0
  85. package/dist/canvas/SceneCanvas/contributionFrameHooks.js.map +1 -0
  86. package/dist/canvas/SceneCanvas/defaultNodeProperties.js +549 -0
  87. package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -0
  88. package/dist/canvas/SceneCanvas/defaultNodeRouting.js +26 -0
  89. package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -0
  90. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js +69 -0
  91. package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -0
  92. package/dist/canvas/SceneCanvas/features.js +97 -0
  93. package/dist/canvas/SceneCanvas/features.js.map +1 -0
  94. package/dist/canvas/SceneCanvas/poseGeometry.js +46 -0
  95. package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -0
  96. package/dist/canvas/SceneCanvas/useActionsPropResolver.js +48 -0
  97. package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -0
  98. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js +70 -0
  99. package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -0
  100. package/dist/canvas/SceneCanvas/useContributionRoles.js +75 -0
  101. package/dist/canvas/SceneCanvas/useContributionRoles.js.map +1 -0
  102. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +172 -0
  103. package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -0
  104. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +69 -0
  105. package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -0
  106. package/dist/canvas/SceneCanvas/useSceneSelectTool.js +127 -0
  107. package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -0
  108. package/dist/canvas/SceneCanvas/useViewportActions.js +30 -0
  109. package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -0
  110. package/dist/canvas/SceneCanvas.js +992 -0
  111. package/dist/canvas/SceneCanvas.js.map +1 -0
  112. package/dist/canvas/SceneViewCanvas.js +54 -0
  113. package/dist/canvas/SceneViewCanvas.js.map +1 -0
  114. package/dist/canvas/accentColor.js +9 -0
  115. package/dist/canvas/accentColor.js.map +1 -0
  116. package/dist/canvas/affordanceAt.js +63 -0
  117. package/dist/canvas/affordanceAt.js.map +1 -0
  118. package/dist/canvas/buildSceneTree.js +65 -0
  119. package/dist/canvas/buildSceneTree.js.map +1 -0
  120. package/dist/canvas/canvasRenderer.js +89 -0
  121. package/dist/canvas/canvasRenderer.js.map +1 -0
  122. package/dist/canvas/colorOverrides.js +16 -0
  123. package/dist/canvas/colorOverrides.js.map +1 -0
  124. package/dist/canvas/defaultDrawOne.js +43 -0
  125. package/dist/canvas/defaultDrawOne.js.map +1 -0
  126. package/dist/canvas/deps/areaSelect.js +19 -0
  127. package/dist/canvas/deps/areaSelect.js.map +1 -0
  128. package/dist/canvas/deps/debug.js +9 -0
  129. package/dist/canvas/deps/debug.js.map +1 -0
  130. package/dist/canvas/deps/dispatcher.js +11 -0
  131. package/dist/canvas/deps/dispatcher.js.map +1 -0
  132. package/dist/canvas/deps/editAnchors.js +101 -0
  133. package/dist/canvas/deps/editAnchors.js.map +1 -0
  134. package/dist/canvas/deps/geometryProjection.js +11 -0
  135. package/dist/canvas/deps/geometryProjection.js.map +1 -0
  136. package/dist/canvas/deps/hitTestArea.js +51 -0
  137. package/dist/canvas/deps/hitTestArea.js.map +1 -0
  138. package/dist/canvas/deps/ingestion.js +31 -0
  139. package/dist/canvas/deps/ingestion.js.map +1 -0
  140. package/dist/canvas/deps/insert.js +116 -0
  141. package/dist/canvas/deps/insert.js.map +1 -0
  142. package/dist/canvas/deps/lassoSelect.js +20 -0
  143. package/dist/canvas/deps/lassoSelect.js.map +1 -0
  144. package/dist/canvas/deps/layout.js +34 -0
  145. package/dist/canvas/deps/layout.js.map +1 -0
  146. package/dist/canvas/deps/nodeAtPoint.js +19 -0
  147. package/dist/canvas/deps/nodeAtPoint.js.map +1 -0
  148. package/dist/canvas/deps/poseComposition.js +11 -0
  149. package/dist/canvas/deps/poseComposition.js.map +1 -0
  150. package/dist/canvas/deps/poseDescriptor.js +12 -0
  151. package/dist/canvas/deps/poseDescriptor.js.map +1 -0
  152. package/dist/canvas/deps/resizePolicy.js +35 -0
  153. package/dist/canvas/deps/resizePolicy.js.map +1 -0
  154. package/dist/canvas/deps/slice.js +99 -0
  155. package/dist/canvas/deps/slice.js.map +1 -0
  156. package/dist/canvas/deps/snap.js +11 -0
  157. package/dist/canvas/deps/snap.js.map +1 -0
  158. package/dist/canvas/deps/textEdit.js +21 -0
  159. package/dist/canvas/deps/textEdit.js.map +1 -0
  160. package/dist/canvas/deps/view.js +43 -0
  161. package/dist/canvas/deps/view.js.map +1 -0
  162. package/dist/canvas/derivedPath.js +47 -0
  163. package/dist/canvas/derivedPath.js.map +1 -0
  164. package/dist/canvas/drawEnvelope.js +22 -0
  165. package/dist/canvas/drawEnvelope.js.map +1 -0
  166. package/dist/canvas/getNodeAtPoint.js +18 -0
  167. package/dist/canvas/getNodeAtPoint.js.map +1 -0
  168. package/dist/canvas/hostAnchor.js +29 -0
  169. package/dist/canvas/hostAnchor.js.map +1 -0
  170. package/dist/canvas/hud.module.js +18 -0
  171. package/dist/canvas/hud.module.js.map +1 -0
  172. package/dist/canvas/insertPreviewExtent.js +103 -0
  173. package/dist/canvas/insertPreviewExtent.js.map +1 -0
  174. package/dist/canvas/kitRequirements.js +177 -0
  175. package/dist/canvas/kitRequirements.js.map +1 -0
  176. package/dist/canvas/layerOrder.js +66 -0
  177. package/dist/canvas/layerOrder.js.map +1 -0
  178. package/dist/canvas/layerSlots.js +14 -0
  179. package/dist/canvas/layerSlots.js.map +1 -0
  180. package/dist/canvas/minimapMath.js +80 -0
  181. package/dist/canvas/minimapMath.js.map +1 -0
  182. package/dist/canvas/mountedCanvases.js +20 -0
  183. package/dist/canvas/mountedCanvases.js.map +1 -0
  184. package/dist/canvas/overlayRoleStrokes.js +17 -0
  185. package/dist/canvas/overlayRoleStrokes.js.map +1 -0
  186. package/dist/canvas/paintCull.js +20 -0
  187. package/dist/canvas/paintCull.js.map +1 -0
  188. package/dist/canvas/pickWalk.js +158 -0
  189. package/dist/canvas/pickWalk.js.map +1 -0
  190. package/dist/canvas/planeClips.js +30 -0
  191. package/dist/canvas/planeClips.js.map +1 -0
  192. package/dist/canvas/poseRotation.js +35 -0
  193. package/dist/canvas/poseRotation.js.map +1 -0
  194. package/dist/canvas/rasterToPng.js +21 -0
  195. package/dist/canvas/rasterToPng.js.map +1 -0
  196. package/dist/canvas/renderDebugSnapshot.js +32 -0
  197. package/dist/canvas/renderDebugSnapshot.js.map +1 -0
  198. package/dist/canvas/renderNeeds.js +25 -0
  199. package/dist/canvas/renderNeeds.js.map +1 -0
  200. package/dist/canvas/renderSceneToPixels.js +143 -0
  201. package/dist/canvas/renderSceneToPixels.js.map +1 -0
  202. package/dist/canvas/sceneAdapter.js +270 -0
  203. package/dist/canvas/sceneAdapter.js.map +1 -0
  204. package/dist/canvas/sceneLayerPaint.js +37 -0
  205. package/dist/canvas/sceneLayerPaint.js.map +1 -0
  206. package/dist/canvas/sceneSlotWiring.js +20 -0
  207. package/dist/canvas/sceneSlotWiring.js.map +1 -0
  208. package/dist/canvas/sceneViewRender.js +72 -0
  209. package/dist/canvas/sceneViewRender.js.map +1 -0
  210. package/dist/canvas/slopsDebugLayer.js +61 -0
  211. package/dist/canvas/slopsDebugLayer.js.map +1 -0
  212. package/dist/canvas/surfaceContribution.js +15 -0
  213. package/dist/canvas/surfaceContribution.js.map +1 -0
  214. package/dist/canvas/toolPreview.js +39 -0
  215. package/dist/canvas/toolPreview.js.map +1 -0
  216. package/dist/canvas/useCanvasRenderer.js +11 -0
  217. package/dist/canvas/useCanvasRenderer.js.map +1 -0
  218. package/dist/canvas/useFrameLoop.js +60 -0
  219. package/dist/canvas/useFrameLoop.js.map +1 -0
  220. package/dist/canvas/useHostAnchor.js +71 -0
  221. package/dist/canvas/useHostAnchor.js.map +1 -0
  222. package/dist/canvas/useLateContentRedraw.js +21 -0
  223. package/dist/canvas/useLateContentRedraw.js.map +1 -0
  224. package/dist/canvas/useRedrawOn.js +21 -0
  225. package/dist/canvas/useRedrawOn.js.map +1 -0
  226. package/dist/canvas/useViewHelpers.js +120 -0
  227. package/dist/canvas/useViewHelpers.js.map +1 -0
  228. package/dist/canvas/viewInputs.js +17 -0
  229. package/dist/canvas/viewInputs.js.map +1 -0
  230. package/dist/canvas/viewRegistry.js +61 -0
  231. package/dist/canvas/viewRegistry.js.map +1 -0
  232. package/dist/canvas/wrapNodeOutput.js +14 -0
  233. package/dist/canvas/wrapNodeOutput.js.map +1 -0
  234. package/dist/clipboard.d.ts +10 -5
  235. package/dist/clipboard.js +3 -5
  236. package/dist/clone.d.ts +3 -3
  237. package/dist/clone.js +2 -5
  238. package/dist/core/adapters/arrayAdapter.js +85 -0
  239. package/dist/core/adapters/arrayAdapter.js.map +1 -0
  240. package/dist/core/adapters/useArrayAdapter.js +13 -0
  241. package/dist/core/adapters/useArrayAdapter.js.map +1 -0
  242. package/dist/core/applyOps.js +12 -0
  243. package/dist/core/applyOps.js.map +1 -0
  244. package/dist/core/device/index.js +4 -0
  245. package/dist/core/device/targets.js +17 -0
  246. package/dist/core/device/targets.js.map +1 -0
  247. package/dist/core/device/useDeviceProfile.js +75 -0
  248. package/dist/core/device/useDeviceProfile.js.map +1 -0
  249. package/dist/core/fillInPoseFrame.js +102 -0
  250. package/dist/core/fillInPoseFrame.js.map +1 -0
  251. package/dist/core/geometry/poseDescriptor.js +98 -0
  252. package/dist/core/geometry/poseDescriptor.js.map +1 -0
  253. package/dist/core/geometry/poseRotation.js +58 -0
  254. package/dist/core/geometry/poseRotation.js.map +1 -0
  255. package/dist/core/geometry/regionHit.js +102 -0
  256. package/dist/core/geometry/regionHit.js.map +1 -0
  257. package/dist/core/geometry/unionBounds.js +60 -0
  258. package/dist/core/geometry/unionBounds.js.map +1 -0
  259. package/dist/core/gradient.js +136 -0
  260. package/dist/core/gradient.js.map +1 -0
  261. package/dist/core/isPlainObject.js +11 -0
  262. package/dist/core/isPlainObject.js.map +1 -0
  263. package/dist/core/layers/render.js +150 -0
  264. package/dist/core/layers/render.js.map +1 -0
  265. package/dist/core/markerInset.js +24 -0
  266. package/dist/core/markerInset.js.map +1 -0
  267. package/dist/core/mixed.js +6 -0
  268. package/dist/core/mixed.js.map +1 -0
  269. package/dist/core/ops/arrange.js +31 -0
  270. package/dist/core/ops/arrange.js.map +1 -0
  271. package/dist/core/ops/create.js +32 -0
  272. package/dist/core/ops/create.js.map +1 -0
  273. package/dist/core/ops/createHistory.js +20 -0
  274. package/dist/core/ops/createHistory.js.map +1 -0
  275. package/dist/core/ops/delete.js +89 -0
  276. package/dist/core/ops/delete.js.map +1 -0
  277. package/dist/core/ops/registry.js +17 -0
  278. package/dist/core/ops/registry.js.map +1 -0
  279. package/dist/core/ops/reorder/algorithms.js +55 -0
  280. package/dist/core/ops/reorder/algorithms.js.map +1 -0
  281. package/dist/core/ops/reorder/index.js +140 -0
  282. package/dist/core/ops/reorder/index.js.map +1 -0
  283. package/dist/core/ops/reparent.js +52 -0
  284. package/dist/core/ops/reparent.js.map +1 -0
  285. package/dist/core/ops/select.js +34 -0
  286. package/dist/core/ops/select.js.map +1 -0
  287. package/dist/core/ops/setData.js +34 -0
  288. package/dist/core/ops/setData.js.map +1 -0
  289. package/dist/core/ops/setLayer.js +34 -0
  290. package/dist/core/ops/setLayer.js.map +1 -0
  291. package/dist/core/ops/setLayout.js +31 -0
  292. package/dist/core/ops/setLayout.js.map +1 -0
  293. package/dist/core/ops/setPath.js +57 -0
  294. package/dist/core/ops/setPath.js.map +1 -0
  295. package/dist/core/ops/setText.js +34 -0
  296. package/dist/core/ops/setText.js.map +1 -0
  297. package/dist/core/ops/slot.js +37 -0
  298. package/dist/core/ops/slot.js.map +1 -0
  299. package/dist/core/ops/transform.js +42 -0
  300. package/dist/core/ops/transform.js.map +1 -0
  301. package/dist/core/paintKinds.js +156 -0
  302. package/dist/core/paintKinds.js.map +1 -0
  303. package/dist/core/scene/NodeProperties.js +20 -0
  304. package/dist/core/scene/NodeProperties.js.map +1 -0
  305. package/dist/core/scene/NodeRouting.js +24 -0
  306. package/dist/core/scene/NodeRouting.js.map +1 -0
  307. package/dist/core/scene/arrivals.js +12 -0
  308. package/dist/core/scene/arrivals.js.map +1 -0
  309. package/dist/core/scene/composeFrame.js +29 -0
  310. package/dist/core/scene/composeFrame.js.map +1 -0
  311. package/dist/core/scene/depMemo.js +18 -0
  312. package/dist/core/scene/depMemo.js.map +1 -0
  313. package/dist/core/scene/dependents.js +66 -0
  314. package/dist/core/scene/dependents.js.map +1 -0
  315. package/dist/core/scene/derivedPath.js +31 -0
  316. package/dist/core/scene/derivedPath.js.map +1 -0
  317. package/dist/core/scene/effectivePose.js +78 -0
  318. package/dist/core/scene/effectivePose.js.map +1 -0
  319. package/dist/core/scene/kitRegistry.js +33 -0
  320. package/dist/core/scene/kitRegistry.js.map +1 -0
  321. package/dist/core/scene/layoutPass.js +96 -0
  322. package/dist/core/scene/layoutPass.js.map +1 -0
  323. package/dist/core/scene/nodeFnFields.js +83 -0
  324. package/dist/core/scene/nodeFnFields.js.map +1 -0
  325. package/dist/core/scene/nodeMemo.js +28 -0
  326. package/dist/core/scene/nodeMemo.js.map +1 -0
  327. package/dist/core/scene/poseFeed.js +87 -0
  328. package/dist/core/scene/poseFeed.js.map +1 -0
  329. package/dist/core/scene/poseOverrides.js +52 -0
  330. package/dist/core/scene/poseOverrides.js.map +1 -0
  331. package/dist/core/scene/poseSnapshot.js +54 -0
  332. package/dist/core/scene/poseSnapshot.js.map +1 -0
  333. package/dist/core/scene/scene.js +1271 -0
  334. package/dist/core/scene/scene.js.map +1 -0
  335. package/dist/core/scene/types.js +6 -0
  336. package/dist/core/scene/types.js.map +1 -0
  337. package/dist/core/scene/useScene.js +32 -0
  338. package/dist/core/scene/useScene.js.map +1 -0
  339. package/dist/core/selection/chromeState.js +31 -0
  340. package/dist/core/selection/chromeState.js.map +1 -0
  341. package/dist/core/selection/selectionTarget.js +6 -0
  342. package/dist/core/selection/selectionTarget.js.map +1 -0
  343. package/dist/core/selection/useSelection.js +71 -0
  344. package/dist/core/selection/useSelection.js.map +1 -0
  345. package/dist/core/shapeKinds.js +54 -0
  346. package/dist/core/shapeKinds.js.map +1 -0
  347. package/dist/core/strokeMarkerShapes.js +139 -0
  348. package/dist/core/strokeMarkerShapes.js.map +1 -0
  349. package/dist/core/strokeMarkers.js +28 -0
  350. package/dist/core/strokeMarkers.js.map +1 -0
  351. package/dist/core/stylus/stylus.js +39 -0
  352. package/dist/core/stylus/stylus.js.map +1 -0
  353. package/dist/core/stylus/usePointerStylus.js +51 -0
  354. package/dist/core/stylus/usePointerStylus.js.map +1 -0
  355. package/dist/core/usePaintKinds.js +17 -0
  356. package/dist/core/usePaintKinds.js.map +1 -0
  357. package/dist/core/viewport/clampView.js +24 -0
  358. package/dist/core/viewport/clampView.js.map +1 -0
  359. package/dist/core/viewport/clientToWorld.js +8 -0
  360. package/dist/core/viewport/clientToWorld.js.map +1 -0
  361. package/dist/core/viewport/createVelocityTracker.js +39 -0
  362. package/dist/core/viewport/createVelocityTracker.js.map +1 -0
  363. package/dist/core/viewport/fitToBounds.js +18 -0
  364. package/dist/core/viewport/fitToBounds.js.map +1 -0
  365. package/dist/core/viewport/fitViewToBounds.js +36 -0
  366. package/dist/core/viewport/fitViewToBounds.js.map +1 -0
  367. package/dist/core/viewport/interpolateView.js +34 -0
  368. package/dist/core/viewport/interpolateView.js.map +1 -0
  369. package/dist/core/viewport/meanScale.js +8 -0
  370. package/dist/core/viewport/meanScale.js.map +1 -0
  371. package/dist/core/viewport/parallax.js +111 -0
  372. package/dist/core/viewport/parallax.js.map +1 -0
  373. package/dist/core/viewport/pxExtent.js +42 -0
  374. package/dist/core/viewport/pxExtent.js.map +1 -0
  375. package/dist/core/viewport/sceneNodeClientRect.js +18 -0
  376. package/dist/core/viewport/sceneNodeClientRect.js.map +1 -0
  377. package/dist/core/viewport/screenSlop.js +27 -0
  378. package/dist/core/viewport/screenSlop.js.map +1 -0
  379. package/dist/core/viewport/useAutoCenter.js +32 -0
  380. package/dist/core/viewport/useAutoCenter.js.map +1 -0
  381. package/dist/core/viewport/useCanvasSize.js +29 -0
  382. package/dist/core/viewport/useCanvasSize.js.map +1 -0
  383. package/dist/core/viewport/useDecayLoop.js +63 -0
  384. package/dist/core/viewport/useDecayLoop.js.map +1 -0
  385. package/dist/core/viewport/useVelocityTracker.js +10 -0
  386. package/dist/core/viewport/useVelocityTracker.js.map +1 -0
  387. package/dist/core/viewport/useViewAnimation.js +63 -0
  388. package/dist/core/viewport/useViewAnimation.js.map +1 -0
  389. package/dist/core/viewport/view.js +37 -0
  390. package/dist/core/viewport/view.js.map +1 -0
  391. package/dist/core/viewport/viewTransform.js +11 -0
  392. package/dist/core/viewport/viewTransform.js.map +1 -0
  393. package/dist/core/viewport/viewportWorldRect.js +13 -0
  394. package/dist/core/viewport/viewportWorldRect.js.map +1 -0
  395. package/dist/core/viewport/wheelHandler.js +30 -0
  396. package/dist/core/viewport/wheelHandler.js.map +1 -0
  397. package/dist/core/viewport/zoomAt.js +22 -0
  398. package/dist/core/viewport/zoomAt.js.map +1 -0
  399. package/dist/core/viewport/zoomBounds.js +20 -0
  400. package/dist/core/viewport/zoomBounds.js.map +1 -0
  401. package/dist/{pointSnapToGrid-7mCcm6qG.d.ts → cornerHandles-CDcZOV8h.d.ts} +54 -71
  402. package/dist/debug/createDebugOverlayLayer.js +358 -0
  403. package/dist/debug/createDebugOverlayLayer.js.map +1 -0
  404. package/dist/debug/createDebugSink.js +83 -0
  405. package/dist/debug/createDebugSink.js.map +1 -0
  406. package/dist/debug/defaultTheme.js +31 -0
  407. package/dist/debug/defaultTheme.js.map +1 -0
  408. package/dist/debug/flag.js +41 -0
  409. package/dist/debug/flag.js.map +1 -0
  410. package/dist/debug/frameStats.js +16 -0
  411. package/dist/debug/frameStats.js.map +1 -0
  412. package/dist/debug/parseDebugFlags.js +32 -0
  413. package/dist/debug/parseDebugFlags.js.map +1 -0
  414. package/dist/features/chrome-caps/buildChromeCtx.js +16 -0
  415. package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -0
  416. package/dist/features/chrome-caps/conditions.js +36 -0
  417. package/dist/features/chrome-caps/conditions.js.map +1 -0
  418. package/dist/features/chrome-caps/defaults.js +26 -0
  419. package/dist/features/chrome-caps/defaults.js.map +1 -0
  420. package/dist/features/chrome-caps/index.js +7 -0
  421. package/dist/features/chrome-caps/resolve.js +23 -0
  422. package/dist/features/chrome-caps/resolve.js.map +1 -0
  423. package/dist/features/chrome-caps/useHoverTracking.js +27 -0
  424. package/dist/features/chrome-caps/useHoverTracking.js.map +1 -0
  425. package/dist/features/cursor/paintedCursorLayer.js +60 -0
  426. package/dist/features/cursor/paintedCursorLayer.js.map +1 -0
  427. package/dist/features/focus/gateLayer.js +14 -0
  428. package/dist/features/focus/gateLayer.js.map +1 -0
  429. package/dist/features/focus/useCanvasFocus.js +29 -0
  430. package/dist/features/focus/useCanvasFocus.js.map +1 -0
  431. package/dist/features/groups/children.js +23 -0
  432. package/dist/features/groups/children.js.map +1 -0
  433. package/dist/features/groups/composePose.js +67 -0
  434. package/dist/features/groups/composePose.js.map +1 -0
  435. package/dist/features/groups/nestedHit.js +40 -0
  436. package/dist/features/groups/nestedHit.js.map +1 -0
  437. package/dist/features/groups/unionOfChildren.js +15 -0
  438. package/dist/features/groups/unionOfChildren.js.map +1 -0
  439. package/dist/features/images/imageCache.js +94 -0
  440. package/dist/features/images/imageCache.js.map +1 -0
  441. package/dist/features/ingestion/contentHandlers.js +37 -0
  442. package/dist/features/ingestion/contentHandlers.js.map +1 -0
  443. package/dist/features/ingestion/imageHandler.js +45 -0
  444. package/dist/features/ingestion/imageHandler.js.map +1 -0
  445. package/dist/features/ingestion/index.js +8 -0
  446. package/dist/features/ingestion/openFilePicker.js +15 -0
  447. package/dist/features/ingestion/openFilePicker.js.map +1 -0
  448. package/dist/features/ingestion/registerKitHandlers.js +26 -0
  449. package/dist/features/ingestion/registerKitHandlers.js.map +1 -0
  450. package/dist/features/ingestion/svgHandler.js +58 -0
  451. package/dist/features/ingestion/svgHandler.js.map +1 -0
  452. package/dist/features/ingestion/weaselJsonHandler.js +39 -0
  453. package/dist/features/ingestion/weaselJsonHandler.js.map +1 -0
  454. package/dist/features/longPress/longPressFeedback.js +96 -0
  455. package/dist/features/longPress/longPressFeedback.js.map +1 -0
  456. package/dist/features/meshPaint/bake.js +79 -0
  457. package/dist/features/meshPaint/bake.js.map +1 -0
  458. package/dist/features/meshPaint/bakeCache.js +59 -0
  459. package/dist/features/meshPaint/bakeCache.js.map +1 -0
  460. package/dist/features/meshPaint/handles.js +86 -0
  461. package/dist/features/meshPaint/handles.js.map +1 -0
  462. package/dist/features/meshPaint/lazyKind.js +1298 -0
  463. package/dist/features/meshPaint/lazyKind.js.map +1 -0
  464. package/dist/features/meshPaint/meshPaint.js +236 -0
  465. package/dist/features/meshPaint/meshPaint.js.map +1 -0
  466. package/dist/features/meshPaint/meshShader.js +6 -0
  467. package/dist/features/meshPaint/meshShader.js.map +1 -0
  468. package/dist/features/meshPaint/register.js +7 -0
  469. package/dist/features/meshPaint/register.js.map +1 -0
  470. package/dist/features/meshPaint/surface.js +110 -0
  471. package/dist/features/meshPaint/surface.js.map +1 -0
  472. package/dist/features/minimap/actions.js +53 -0
  473. package/dist/features/minimap/actions.js.map +1 -0
  474. package/dist/features/minimap/createMinimapContribution.js +96 -0
  475. package/dist/features/minimap/createMinimapContribution.js.map +1 -0
  476. package/dist/features/minimap/layers.js +103 -0
  477. package/dist/features/minimap/layers.js.map +1 -0
  478. package/dist/features/modes/modeLayers.js +113 -0
  479. package/dist/features/modes/modeLayers.js.map +1 -0
  480. package/dist/features/overlays/useNodeOverlayFrame.js +103 -0
  481. package/dist/features/overlays/useNodeOverlayFrame.js.map +1 -0
  482. package/dist/features/parallax/createParallaxLayer.js +26 -0
  483. package/dist/features/parallax/createParallaxLayer.js.map +1 -0
  484. package/dist/features/parallax/createParallaxPlane.js +26 -0
  485. package/dist/features/parallax/createParallaxPlane.js.map +1 -0
  486. package/dist/features/paths/anchorEdits.js +156 -0
  487. package/dist/features/paths/anchorEdits.js.map +1 -0
  488. package/dist/features/paths/anchors.js +154 -0
  489. package/dist/features/paths/anchors.js.map +1 -0
  490. package/dist/features/paths/booleans.js +2 -0
  491. package/dist/features/paths/index.js +15 -0
  492. package/dist/features/paths/markerCommands.js +116 -0
  493. package/dist/features/paths/markerCommands.js.map +1 -0
  494. package/dist/features/paths/markerSites.js +59 -0
  495. package/dist/features/paths/markerSites.js.map +1 -0
  496. package/dist/features/paths/markers.js +95 -0
  497. package/dist/features/paths/markers.js.map +1 -0
  498. package/dist/features/paths/nearestAnchor.js +36 -0
  499. package/dist/features/paths/nearestAnchor.js.map +1 -0
  500. package/dist/features/paths/originProjection.js +16 -0
  501. package/dist/features/paths/originProjection.js.map +1 -0
  502. package/dist/features/paths/pathEditingOverlayLayer.js +137 -0
  503. package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -0
  504. package/dist/features/paths/pathInWorld.js +41 -0
  505. package/dist/features/paths/pathInWorld.js.map +1 -0
  506. package/dist/features/paths/pathLayer.js +44 -0
  507. package/dist/features/paths/pathLayer.js.map +1 -0
  508. package/dist/features/paths/penPreviewLayer.js +220 -0
  509. package/dist/features/paths/penPreviewLayer.js.map +1 -0
  510. package/dist/features/paths/poseDescriptor.js +44 -0
  511. package/dist/features/paths/poseDescriptor.js.map +1 -0
  512. package/dist/features/paths/tessellate/stroke.js +230 -0
  513. package/dist/features/paths/tessellate/stroke.js.map +1 -0
  514. package/dist/features/patterns/index.js +23 -0
  515. package/dist/features/patterns/index.js.map +1 -0
  516. package/dist/features/patterns/patterns-builtin.js +38 -0
  517. package/dist/features/patterns/patterns-builtin.js.map +1 -0
  518. package/dist/features/patterns/resolveSpec.js +57 -0
  519. package/dist/features/patterns/resolveSpec.js.map +1 -0
  520. package/dist/features/patterns/tileGeometry.js +158 -0
  521. package/dist/features/patterns/tileGeometry.js.map +1 -0
  522. package/dist/features/pointer/PointerContext.js +45 -0
  523. package/dist/features/pointer/PointerContext.js.map +1 -0
  524. package/dist/features/poseRun/usePoseRun.js +70 -0
  525. package/dist/features/poseRun/usePoseRun.js.map +1 -0
  526. package/dist/features/selection/SelectionContext.js +46 -0
  527. package/dist/features/selection/SelectionContext.js.map +1 -0
  528. package/dist/features/selection/overlay.js +442 -0
  529. package/dist/features/selection/overlay.js.map +1 -0
  530. package/dist/features/simulation/createSimulation.js +61 -0
  531. package/dist/features/simulation/createSimulation.js.map +1 -0
  532. package/dist/features/simulation/types.js +6 -0
  533. package/dist/features/simulation/types.js.map +1 -0
  534. package/dist/features/simulation/useSimulation.js +74 -0
  535. package/dist/features/simulation/useSimulation.js.map +1 -0
  536. package/dist/features/text/domRuns.js +258 -0
  537. package/dist/features/text/domRuns.js.map +1 -0
  538. package/dist/features/text/fitTextPose.js +38 -0
  539. package/dist/features/text/fitTextPose.js.map +1 -0
  540. package/dist/features/text/hitTest.js +45 -0
  541. package/dist/features/text/hitTest.js.map +1 -0
  542. package/dist/features/text/renderLabel.js +14 -0
  543. package/dist/features/text/renderLabel.js.map +1 -0
  544. package/dist/features/text/runs/effectiveRangeStyle.js +66 -0
  545. package/dist/features/text/runs/effectiveRangeStyle.js.map +1 -0
  546. package/dist/features/text/runs/flagRange.js +53 -0
  547. package/dist/features/text/runs/flagRange.js.map +1 -0
  548. package/dist/features/text/runs/rangeStyle.js +135 -0
  549. package/dist/features/text/runs/rangeStyle.js.map +1 -0
  550. package/dist/features/text/textCommand.js +59 -0
  551. package/dist/features/text/textCommand.js.map +1 -0
  552. package/dist/features/text/textLayer.js +35 -0
  553. package/dist/features/text/textLayer.js.map +1 -0
  554. package/dist/features/text/textToPath.js +181 -0
  555. package/dist/features/text/textToPath.js.map +1 -0
  556. package/dist/features/text/useSceneTextEdit.js +138 -0
  557. package/dist/features/text/useSceneTextEdit.js.map +1 -0
  558. package/dist/features/text/useTextEdit.js +465 -0
  559. package/dist/features/text/useTextEdit.js.map +1 -0
  560. package/dist/features/tiling/createTiledLayer.js +63 -0
  561. package/dist/features/tiling/createTiledLayer.js.map +1 -0
  562. package/dist/features/tiling/tiledProject.js +14 -0
  563. package/dist/features/tiling/tiledProject.js.map +1 -0
  564. package/dist/features/viewports/viewResolver.js +59 -0
  565. package/dist/features/viewports/viewResolver.js.map +1 -0
  566. package/dist/features/viewports/viewportLayer.js +58 -0
  567. package/dist/features/viewports/viewportLayer.js.map +1 -0
  568. package/dist/icons/ArrowIcon.js +23 -0
  569. package/dist/icons/ArrowIcon.js.map +1 -0
  570. package/dist/icons/EllipseIcon.js +21 -0
  571. package/dist/icons/EllipseIcon.js.map +1 -0
  572. package/dist/icons/EyedropperIcon.js +49 -0
  573. package/dist/icons/EyedropperIcon.js.map +1 -0
  574. package/dist/icons/HandIcon.js +59 -0
  575. package/dist/icons/HandIcon.js.map +1 -0
  576. package/dist/icons/ImageIcon.js +34 -0
  577. package/dist/icons/ImageIcon.js.map +1 -0
  578. package/dist/icons/LassoIcon.js +22 -0
  579. package/dist/icons/LassoIcon.js.map +1 -0
  580. package/dist/icons/LineIcon.js +22 -0
  581. package/dist/icons/LineIcon.js.map +1 -0
  582. package/dist/icons/PenIcon.js +36 -0
  583. package/dist/icons/PenIcon.js.map +1 -0
  584. package/dist/icons/PencilIcon.js +25 -0
  585. package/dist/icons/PencilIcon.js.map +1 -0
  586. package/dist/icons/PolygonIcon.js +19 -0
  587. package/dist/icons/PolygonIcon.js.map +1 -0
  588. package/dist/icons/RectIcon.js +37 -0
  589. package/dist/icons/RectIcon.js.map +1 -0
  590. package/dist/icons/SelectIcon.js +20 -0
  591. package/dist/icons/SelectIcon.js.map +1 -0
  592. package/dist/icons/StarIcon.js +19 -0
  593. package/dist/icons/StarIcon.js.map +1 -0
  594. package/dist/icons/TextIcon.js +19 -0
  595. package/dist/icons/TextIcon.js.map +1 -0
  596. package/dist/icons/UnknownIcon.js +33 -0
  597. package/dist/icons/UnknownIcon.js.map +1 -0
  598. package/dist/icons/_base.js +12 -0
  599. package/dist/icons/_base.js.map +1 -0
  600. package/dist/index.css +2 -86
  601. package/dist/index.d.ts +2349 -2609
  602. package/dist/index.js +312 -13
  603. package/dist/input/keyState.js +76 -0
  604. package/dist/input/keyState.js.map +1 -0
  605. package/dist/input/useKeyState.js +22 -0
  606. package/dist/input/useKeyState.js.map +1 -0
  607. package/dist/interactions/actions/actionShortcuts.js +32 -0
  608. package/dist/interactions/actions/actionShortcuts.js.map +1 -0
  609. package/dist/interactions/actions/align/align.js +81 -0
  610. package/dist/interactions/actions/align/align.js.map +1 -0
  611. package/dist/interactions/actions/booleans/booleans.js +120 -0
  612. package/dist/interactions/actions/booleans/booleans.js.map +1 -0
  613. package/dist/interactions/actions/booleans/useBooleans.js +20 -0
  614. package/dist/interactions/actions/booleans/useBooleans.js.map +1 -0
  615. package/dist/interactions/actions/booleans/useBooleansAdapter.js +9 -0
  616. package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -0
  617. package/dist/interactions/actions/clipboard/clipboardOps.js +94 -0
  618. package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -0
  619. package/dist/interactions/actions/clipboard/materializePaste.js +25 -0
  620. package/dist/interactions/actions/clipboard/materializePaste.js.map +1 -0
  621. package/dist/interactions/actions/clipboard/wireFormat.js +43 -0
  622. package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -0
  623. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +26 -0
  624. package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +1 -0
  625. package/dist/interactions/actions/defaultCommitAdapter.js +42 -0
  626. package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -0
  627. package/dist/interactions/actions/defaults/align.js +71 -0
  628. package/dist/interactions/actions/defaults/align.js.map +1 -0
  629. package/dist/interactions/actions/defaults/anchorEditing.js +235 -0
  630. package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -0
  631. package/dist/interactions/actions/defaults/areaSelect.js +75 -0
  632. package/dist/interactions/actions/defaults/areaSelect.js.map +1 -0
  633. package/dist/interactions/actions/defaults/booleans.js +52 -0
  634. package/dist/interactions/actions/defaults/booleans.js.map +1 -0
  635. package/dist/interactions/actions/defaults/cancelGesture.js +24 -0
  636. package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -0
  637. package/dist/interactions/actions/defaults/clearSelection.js +19 -0
  638. package/dist/interactions/actions/defaults/clearSelection.js.map +1 -0
  639. package/dist/interactions/actions/defaults/clipboard.js +78 -0
  640. package/dist/interactions/actions/defaults/clipboard.js.map +1 -0
  641. package/dist/interactions/actions/defaults/clone.js +96 -0
  642. package/dist/interactions/actions/defaults/clone.js.map +1 -0
  643. package/dist/interactions/actions/defaults/createOutlines.js +47 -0
  644. package/dist/interactions/actions/defaults/createOutlines.js.map +1 -0
  645. package/dist/interactions/actions/defaults/createPaintAction.js +85 -0
  646. package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -0
  647. package/dist/interactions/actions/defaults/delete.js +61 -0
  648. package/dist/interactions/actions/defaults/delete.js.map +1 -0
  649. package/dist/interactions/actions/defaults/distribute.js +66 -0
  650. package/dist/interactions/actions/defaults/distribute.js.map +1 -0
  651. package/dist/interactions/actions/defaults/duplicate.js +83 -0
  652. package/dist/interactions/actions/defaults/duplicate.js.map +1 -0
  653. package/dist/interactions/actions/defaults/editAnchors.js +100 -0
  654. package/dist/interactions/actions/defaults/editAnchors.js.map +1 -0
  655. package/dist/interactions/actions/defaults/enterPathEdit.js +29 -0
  656. package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -0
  657. package/dist/interactions/actions/defaults/enterTextEdit.js +20 -0
  658. package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -0
  659. package/dist/interactions/actions/defaults/escape.js +26 -0
  660. package/dist/interactions/actions/defaults/escape.js.map +1 -0
  661. package/dist/interactions/actions/defaults/exitPathEdit.js +22 -0
  662. package/dist/interactions/actions/defaults/exitPathEdit.js.map +1 -0
  663. package/dist/interactions/actions/defaults/flip.js +119 -0
  664. package/dist/interactions/actions/defaults/flip.js.map +1 -0
  665. package/dist/interactions/actions/defaults/freshNodeId.js +10 -0
  666. package/dist/interactions/actions/defaults/freshNodeId.js.map +1 -0
  667. package/dist/interactions/actions/defaults/group.js +131 -0
  668. package/dist/interactions/actions/defaults/group.js.map +1 -0
  669. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js +40 -0
  670. package/dist/interactions/actions/defaults/icons/actionGlyphIcons.js.map +1 -0
  671. package/dist/interactions/actions/defaults/icons/actionGlyphs.js +10 -0
  672. package/dist/interactions/actions/defaults/icons/actionGlyphs.js.map +1 -0
  673. package/dist/interactions/actions/defaults/icons/alignIcons.js +173 -0
  674. package/dist/interactions/actions/defaults/icons/alignIcons.js.map +1 -0
  675. package/dist/interactions/actions/defaults/icons/booleanIcons.js +171 -0
  676. package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -0
  677. package/dist/interactions/actions/defaults/icons/distributeIcons.js +63 -0
  678. package/dist/interactions/actions/defaults/icons/distributeIcons.js.map +1 -0
  679. package/dist/interactions/actions/defaults/icons/editIcons.js +280 -0
  680. package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -0
  681. package/dist/interactions/actions/defaults/icons/outlineIcons.js +53 -0
  682. package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -0
  683. package/dist/interactions/actions/defaults/ingest.js +58 -0
  684. package/dist/interactions/actions/defaults/ingest.js.map +1 -0
  685. package/dist/interactions/actions/defaults/insert.js +288 -0
  686. package/dist/interactions/actions/defaults/insert.js.map +1 -0
  687. package/dist/interactions/actions/defaults/insertPathAnchor.js +50 -0
  688. package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -0
  689. package/dist/interactions/actions/defaults/lassoSelect.js +156 -0
  690. package/dist/interactions/actions/defaults/lassoSelect.js.map +1 -0
  691. package/dist/interactions/actions/defaults/move.js +656 -0
  692. package/dist/interactions/actions/defaults/move.js.map +1 -0
  693. package/dist/interactions/actions/defaults/nudge.js +110 -0
  694. package/dist/interactions/actions/defaults/nudge.js.map +1 -0
  695. package/dist/interactions/actions/defaults/pinchZoom.js +63 -0
  696. package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -0
  697. package/dist/interactions/actions/defaults/reorder.js +143 -0
  698. package/dist/interactions/actions/defaults/reorder.js.map +1 -0
  699. package/dist/interactions/actions/defaults/requiresSelection.js +10 -0
  700. package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -0
  701. package/dist/interactions/actions/defaults/resize.js +332 -0
  702. package/dist/interactions/actions/defaults/resize.js.map +1 -0
  703. package/dist/interactions/actions/defaults/rotate.js +181 -0
  704. package/dist/interactions/actions/defaults/rotate.js.map +1 -0
  705. package/dist/interactions/actions/defaults/selectAll.js +27 -0
  706. package/dist/interactions/actions/defaults/selectAll.js.map +1 -0
  707. package/dist/interactions/actions/defaults/setFill.js +27 -0
  708. package/dist/interactions/actions/defaults/setFill.js.map +1 -0
  709. package/dist/interactions/actions/defaults/setFillOpacity.js +15 -0
  710. package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -0
  711. package/dist/interactions/actions/defaults/setStroke.js +36 -0
  712. package/dist/interactions/actions/defaults/setStroke.js.map +1 -0
  713. package/dist/interactions/actions/defaults/setStrokeOpacity.js +21 -0
  714. package/dist/interactions/actions/defaults/setStrokeOpacity.js.map +1 -0
  715. package/dist/interactions/actions/defaults/slice.js +39 -0
  716. package/dist/interactions/actions/defaults/slice.js.map +1 -0
  717. package/dist/interactions/actions/defaults/sliceOps.js +60 -0
  718. package/dist/interactions/actions/defaults/sliceOps.js.map +1 -0
  719. package/dist/interactions/actions/defaults/toolActivate.js +35 -0
  720. package/dist/interactions/actions/defaults/toolActivate.js.map +1 -0
  721. package/dist/interactions/actions/defaults/toolResetToDefault.js +26 -0
  722. package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -0
  723. package/dist/interactions/actions/defaults/undoRedo.js +51 -0
  724. package/dist/interactions/actions/defaults/undoRedo.js.map +1 -0
  725. package/dist/interactions/actions/defaults/viewportDragPan.js +88 -0
  726. package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -0
  727. package/dist/interactions/actions/defaults/viewportWheelPan.js +57 -0
  728. package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -0
  729. package/dist/interactions/actions/defaults/viewportZoom.js +143 -0
  730. package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -0
  731. package/dist/interactions/actions/distribute/distribute.js +42 -0
  732. package/dist/interactions/actions/distribute/distribute.js.map +1 -0
  733. package/dist/interactions/actions/distribute/plan.js +29 -0
  734. package/dist/interactions/actions/distribute/plan.js.map +1 -0
  735. package/dist/interactions/actions/edit-anchors/geometry.js +61 -0
  736. package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -0
  737. package/dist/interactions/actions/edit-anchors/handles.js +43 -0
  738. package/dist/interactions/actions/edit-anchors/handles.js.map +1 -0
  739. package/dist/interactions/actions/flip/helpers.js +35 -0
  740. package/dist/interactions/actions/flip/helpers.js.map +1 -0
  741. package/dist/interactions/actions/geometryProjection.js +18 -0
  742. package/dist/interactions/actions/geometryProjection.js.map +1 -0
  743. package/dist/interactions/actions/gestureLifecycle.js +44 -0
  744. package/dist/interactions/actions/gestureLifecycle.js.map +1 -0
  745. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js +39 -0
  746. package/dist/interactions/actions/lasso-select/behaviors/selectFromLasso.js.map +1 -0
  747. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js +36 -0
  748. package/dist/interactions/actions/move/behaviors/snapBackOrDelete.js.map +1 -0
  749. package/dist/interactions/actions/move/behaviors/snapToContainer.js +67 -0
  750. package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -0
  751. package/dist/interactions/actions/move/gestureAdapter.js +37 -0
  752. package/dist/interactions/actions/move/gestureAdapter.js.map +1 -0
  753. package/dist/interactions/actions/outlines/createOutlines.js +84 -0
  754. package/dist/interactions/actions/outlines/createOutlines.js.map +1 -0
  755. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js +9 -0
  756. package/dist/interactions/actions/outlines/useCreateOutlinesAdapter.js.map +1 -0
  757. package/dist/interactions/actions/planeInput.js +168 -0
  758. package/dist/interactions/actions/planeInput.js.map +1 -0
  759. package/dist/interactions/actions/poseDescriptorDep.js +9 -0
  760. package/dist/interactions/actions/poseDescriptorDep.js.map +1 -0
  761. package/dist/interactions/actions/poseFrame.js +38 -0
  762. package/dist/interactions/actions/poseFrame.js.map +1 -0
  763. package/dist/interactions/actions/previewOverrides.js +25 -0
  764. package/dist/interactions/actions/previewOverrides.js.map +1 -0
  765. package/dist/interactions/actions/resize/autoPoseDescriptor.js +32 -0
  766. package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +1 -0
  767. package/dist/interactions/actions/resize/behaviors/clampMinSize.js +18 -0
  768. package/dist/interactions/actions/resize/behaviors/clampMinSize.js.map +1 -0
  769. package/dist/interactions/actions/resize/behaviors/index.js +8 -0
  770. package/dist/interactions/actions/resize/behaviors/index.js.map +1 -0
  771. package/dist/interactions/actions/resize/behaviors/lockAspect.js +24 -0
  772. package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -0
  773. package/dist/interactions/actions/resize/cornerHandles.js +72 -0
  774. package/dist/interactions/actions/resize/cornerHandles.js.map +1 -0
  775. package/dist/interactions/actions/resolveOverlays.js +60 -0
  776. package/dist/interactions/actions/resolveOverlays.js.map +1 -0
  777. package/dist/interactions/actions/resolvePreviews.js +61 -0
  778. package/dist/interactions/actions/resolvePreviews.js.map +1 -0
  779. package/dist/interactions/actions/rotate/geometry.js +46 -0
  780. package/dist/interactions/actions/rotate/geometry.js.map +1 -0
  781. package/dist/interactions/actions/rotate/handle.js +27 -0
  782. package/dist/interactions/actions/rotate/handle.js.map +1 -0
  783. package/dist/interactions/actions/spatialReference.js +42 -0
  784. package/dist/interactions/actions/spatialReference.js.map +1 -0
  785. package/dist/interactions/actions/useStandardActions.js +142 -0
  786. package/dist/interactions/actions/useStandardActions.js.map +1 -0
  787. package/dist/interactions/gestures/dragGesture/dragGesture.js +111 -0
  788. package/dist/interactions/gestures/dragGesture/dragGesture.js.map +1 -0
  789. package/dist/interactions/gestures/dragRadial/dragRadial.js +117 -0
  790. package/dist/interactions/gestures/dragRadial/dragRadial.js.map +1 -0
  791. package/dist/interactions/gestures/dragRect/dragRect.js +164 -0
  792. package/dist/interactions/gestures/dragRect/dragRect.js.map +1 -0
  793. package/dist/interactions/gestures/handleDrag/handleDrag.js +46 -0
  794. package/dist/interactions/gestures/handleDrag/handleDrag.js.map +1 -0
  795. package/dist/interactions/gestures/pointerDrag/pointerDrag.js +118 -0
  796. package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -0
  797. package/dist/interactions/gestures/shared/originProjection.js +42 -0
  798. package/dist/interactions/gestures/shared/originProjection.js.map +1 -0
  799. package/dist/interactions/gestures/shared/screenTolerance.js +21 -0
  800. package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -0
  801. package/dist/interactions/gestures/shared/snap.js +24 -0
  802. package/dist/interactions/gestures/shared/snap.js.map +1 -0
  803. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js +30 -0
  804. package/dist/interactions/gestures/thresholdDrag/thresholdDrag.js.map +1 -0
  805. package/dist/layout/arrivals.js +36 -0
  806. package/dist/layout/arrivals.js.map +1 -0
  807. package/dist/{math-MCQcf_gc.d.ts → math-CUMxmZzn.d.ts} +8 -116
  808. package/dist/math.d.ts +4 -5
  809. package/dist/math.js +6 -4
  810. package/dist/mesh.d.ts +268 -0
  811. package/dist/mesh.js +7 -0
  812. package/dist/move.d.ts +7 -48
  813. package/dist/move.js +3 -142
  814. package/dist/originProjection-BSn4xiEy.d.ts +57 -0
  815. package/dist/patterns-builtin.js +3 -3
  816. package/dist/{poseDescriptor-rZa9W5hJ.d.ts → poseDescriptor-CjSXMf8X.d.ts} +3 -3
  817. package/dist/registerProgram-ateHDGjw.d.ts +193 -0
  818. package/dist/renderer/DrawCommand.js +6 -0
  819. package/dist/renderer/DrawCommand.js.map +1 -0
  820. package/dist/renderer/WeaselRenderer.js +328 -0
  821. package/dist/renderer/WeaselRenderer.js.map +1 -0
  822. package/dist/renderer/cache/GLImageCache.js +64 -0
  823. package/dist/renderer/cache/GLImageCache.js.map +1 -0
  824. package/dist/renderer/cache/GLMeshCache.js +102 -0
  825. package/dist/renderer/cache/GLMeshCache.js.map +1 -0
  826. package/dist/renderer/cache/GLTextureCache.js +51 -0
  827. package/dist/renderer/cache/GLTextureCache.js.map +1 -0
  828. package/dist/renderer/cache/GradientRampAtlas.js +82 -0
  829. package/dist/renderer/cache/GradientRampAtlas.js.map +1 -0
  830. package/dist/renderer/cache/cache.js +13 -0
  831. package/dist/renderer/cache/cache.js.map +1 -0
  832. package/dist/renderer/cache/markerCommandCache.js +59 -0
  833. package/dist/renderer/cache/markerCommandCache.js.map +1 -0
  834. package/dist/renderer/cache/outlineMeshCache.js +15 -0
  835. package/dist/renderer/cache/outlineMeshCache.js.map +1 -0
  836. package/dist/renderer/cache/outlineStrokeMeshCache.js +31 -0
  837. package/dist/renderer/cache/outlineStrokeMeshCache.js.map +1 -0
  838. package/dist/renderer/cache/strokeMeshCache.js +44 -0
  839. package/dist/renderer/cache/strokeMeshCache.js.map +1 -0
  840. package/dist/renderer/cullDrawCommands.js +89 -0
  841. package/dist/renderer/cullDrawCommands.js.map +1 -0
  842. package/dist/renderer/draw.js +1109 -0
  843. package/dist/renderer/draw.js.map +1 -0
  844. package/dist/renderer/drawBatch.js +168 -0
  845. package/dist/renderer/drawBatch.js.map +1 -0
  846. package/dist/renderer/effects/EffectTargets.js +45 -0
  847. package/dist/renderer/effects/EffectTargets.js.map +1 -0
  848. package/dist/renderer/effects/builtins.js +31 -0
  849. package/dist/renderer/effects/builtins.js.map +1 -0
  850. package/dist/renderer/effects/composite.js +9 -0
  851. package/dist/renderer/effects/composite.js.map +1 -0
  852. package/dist/renderer/effects/effectPrelude.js +10 -0
  853. package/dist/renderer/effects/effectPrelude.js.map +1 -0
  854. package/dist/renderer/effects/types.js +10 -0
  855. package/dist/renderer/effects/types.js.map +1 -0
  856. package/dist/renderer/index.js +19 -0
  857. package/dist/renderer/math/color.js +341 -0
  858. package/dist/renderer/math/color.js.map +1 -0
  859. package/dist/renderer/math/mat3.js +71 -0
  860. package/dist/renderer/math/mat3.js.map +1 -0
  861. package/dist/renderer/math/patternSpace.js +22 -0
  862. package/dist/renderer/math/patternSpace.js.map +1 -0
  863. package/dist/renderer/math/viewToMat3.js +19 -0
  864. package/dist/renderer/math/viewToMat3.js.map +1 -0
  865. package/dist/renderer/paintResources.js +18 -0
  866. package/dist/renderer/paintResources.js.map +1 -0
  867. package/dist/renderer/paintScratch.js +37 -0
  868. package/dist/renderer/paintScratch.js.map +1 -0
  869. package/dist/renderer/shaders/ShaderProgram.js +74 -0
  870. package/dist/renderer/shaders/ShaderProgram.js.map +1 -0
  871. package/dist/renderer/shaders/batchFill.js +118 -0
  872. package/dist/renderer/shaders/batchFill.js.map +1 -0
  873. package/dist/renderer/shaders/customPrelude.js +34 -0
  874. package/dist/renderer/shaders/customPrelude.js.map +1 -0
  875. package/dist/renderer/shaders/extractUniformNames.js +184 -0
  876. package/dist/renderer/shaders/extractUniformNames.js.map +1 -0
  877. package/dist/renderer/shaders/glyphPaint.js +61 -0
  878. package/dist/renderer/shaders/glyphPaint.js.map +1 -0
  879. package/dist/renderer/shaders/gradFill.js +30 -0
  880. package/dist/renderer/shaders/gradFill.js.map +1 -0
  881. package/dist/renderer/shaders/imageFill.js +14 -0
  882. package/dist/renderer/shaders/imageFill.js.map +1 -0
  883. package/dist/renderer/shaders/pathFill.js +13 -0
  884. package/dist/renderer/shaders/pathFill.js.map +1 -0
  885. package/dist/renderer/shaders/patternFill.js +24 -0
  886. package/dist/renderer/shaders/patternFill.js.map +1 -0
  887. package/dist/renderer/shaders/registerProgram.js +18 -0
  888. package/dist/renderer/shaders/registerProgram.js.map +1 -0
  889. package/dist/renderer/spriteSheet.js +14 -0
  890. package/dist/renderer/spriteSheet.js.map +1 -0
  891. package/dist/renderer/state/GroupState.js +77 -0
  892. package/dist/renderer/state/GroupState.js.map +1 -0
  893. package/dist/renderer/syntheticItalic.js +6 -0
  894. package/dist/renderer/syntheticItalic.js.map +1 -0
  895. package/dist/renderer/textures/registerTexture.js +14 -0
  896. package/dist/renderer/textures/registerTexture.js.map +1 -0
  897. package/dist/renderer.d.ts +18 -20
  898. package/dist/renderer.js +18 -13
  899. package/dist/resize.d.ts +10 -46
  900. package/dist/resize.js +7 -5
  901. package/dist/routing.d.ts +1 -1
  902. package/dist/routing.js +2 -3
  903. package/dist/scheduling/useVisibleRaf.js +69 -0
  904. package/dist/scheduling/useVisibleRaf.js.map +1 -0
  905. package/dist/test-hook/createTestHook.js +39 -0
  906. package/dist/test-hook/createTestHook.js.map +1 -0
  907. package/dist/test-hook/install.js +12 -0
  908. package/dist/test-hook/install.js.map +1 -0
  909. package/dist/test-seams-fYf6m5pu.d.ts +356 -0
  910. package/dist/test-seams.d.ts +6 -0
  911. package/dist/test-seams.js +3 -0
  912. package/dist/tools/builtin/ellipse/useEllipseTool.js +33 -0
  913. package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -0
  914. package/dist/tools/builtin/eyedropper/useEyedropperTool.js +55 -0
  915. package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -0
  916. package/dist/tools/builtin/hand/dragPanContribution.js +17 -0
  917. package/dist/tools/builtin/hand/dragPanContribution.js.map +1 -0
  918. package/dist/tools/builtin/hand/useHandTool.js +31 -0
  919. package/dist/tools/builtin/hand/useHandTool.js.map +1 -0
  920. package/dist/tools/builtin/image/useImageTool.js +41 -0
  921. package/dist/tools/builtin/image/useImageTool.js.map +1 -0
  922. package/dist/tools/builtin/lasso/useLassoTool.js +42 -0
  923. package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -0
  924. package/dist/tools/builtin/line/useLineTool.js +33 -0
  925. package/dist/tools/builtin/line/useLineTool.js.map +1 -0
  926. package/dist/tools/builtin/pen/usePenTool.js +414 -0
  927. package/dist/tools/builtin/pen/usePenTool.js.map +1 -0
  928. package/dist/tools/builtin/pencil/usePencilTool.js +36 -0
  929. package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -0
  930. package/dist/tools/builtin/pickTopMostHit.js +45 -0
  931. package/dist/tools/builtin/pickTopMostHit.js.map +1 -0
  932. package/dist/tools/builtin/polygon/usePolygonTool.js +81 -0
  933. package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -0
  934. package/dist/tools/builtin/rect/useRectTool.js +32 -0
  935. package/dist/tools/builtin/rect/useRectTool.js.map +1 -0
  936. package/dist/tools/builtin/select/selectionContributions.js +109 -0
  937. package/dist/tools/builtin/select/selectionContributions.js.map +1 -0
  938. package/dist/tools/builtin/select/useSelectTool.js +162 -0
  939. package/dist/tools/builtin/select/useSelectTool.js.map +1 -0
  940. package/dist/tools/builtin/shared/insertToolOptions.js +8 -0
  941. package/dist/tools/builtin/shared/insertToolOptions.js.map +1 -0
  942. package/dist/tools/builtin/slice/useSliceTool.js +263 -0
  943. package/dist/tools/builtin/slice/useSliceTool.js.map +1 -0
  944. package/dist/tools/builtin/star/useStarTool.js +82 -0
  945. package/dist/tools/builtin/star/useStarTool.js.map +1 -0
  946. package/dist/tools/builtin/text/useTextTool.js +177 -0
  947. package/dist/tools/builtin/text/useTextTool.js.map +1 -0
  948. package/dist/tools/overlayBinding.js +8 -0
  949. package/dist/tools/overlayBinding.js.map +1 -0
  950. package/dist/tools/prefs.js +47 -0
  951. package/dist/tools/prefs.js.map +1 -0
  952. package/dist/tools/useKeybindings.js +66 -0
  953. package/dist/tools/useKeybindings.js.map +1 -0
  954. package/dist/{types-CxC8P6W0.d.ts → types-CA54-mAZ.d.ts} +188 -17
  955. package/dist/{types-D_74YlWs.d.ts → types-DSjd6W3n.d.ts} +35 -12
  956. package/dist/util/color.js +26 -0
  957. package/dist/util/color.js.map +1 -0
  958. package/dist/util/constrainTo45.js +17 -0
  959. package/dist/util/constrainTo45.js.map +1 -0
  960. package/dist/util/paint.js +72 -0
  961. package/dist/util/paint.js.map +1 -0
  962. package/dist/version.js +6 -0
  963. package/dist/version.js.map +1 -0
  964. package/package.json +31 -18
  965. package/dist/chunk-44EWMJV2.js +0 -128
  966. package/dist/chunk-44EWMJV2.js.map +0 -1
  967. package/dist/chunk-4RJP2N2L.js +0 -143
  968. package/dist/chunk-4RJP2N2L.js.map +0 -1
  969. package/dist/chunk-BJN5ZRIJ.js +0 -167
  970. package/dist/chunk-BJN5ZRIJ.js.map +0 -1
  971. package/dist/chunk-D4AAWR64.js +0 -28
  972. package/dist/chunk-D4AAWR64.js.map +0 -1
  973. package/dist/chunk-DOBSZOPR.js +0 -29
  974. package/dist/chunk-DOBSZOPR.js.map +0 -1
  975. package/dist/chunk-H6N2JSZ3.js +0 -248
  976. package/dist/chunk-H6N2JSZ3.js.map +0 -1
  977. package/dist/chunk-HPFJUUTF.js +0 -167
  978. package/dist/chunk-HPFJUUTF.js.map +0 -1
  979. package/dist/chunk-L5YNZYEG.js +0 -648
  980. package/dist/chunk-L5YNZYEG.js.map +0 -1
  981. package/dist/chunk-MZAIDI6D.js +0 -32492
  982. package/dist/chunk-MZAIDI6D.js.map +0 -1
  983. package/dist/chunk-PNNZSYRD.js +0 -318
  984. package/dist/chunk-PNNZSYRD.js.map +0 -1
  985. package/dist/chunk-RMR4QMM6.js +0 -250
  986. package/dist/chunk-RMR4QMM6.js.map +0 -1
  987. package/dist/clipboard.js.map +0 -1
  988. package/dist/clone.js.map +0 -1
  989. package/dist/grid-BXdz8GF2.d.ts +0 -158
  990. package/dist/index.css.map +0 -1
  991. package/dist/index.js.map +0 -1
  992. package/dist/insert.d.ts +0 -37
  993. package/dist/insert.js +0 -81
  994. package/dist/insert.js.map +0 -1
  995. package/dist/math.js.map +0 -1
  996. package/dist/move.js.map +0 -1
  997. package/dist/options-CzjxFoYZ.d.ts +0 -67
  998. package/dist/path-JEV2c5If.d.ts +0 -48
  999. package/dist/patterns-builtin.js.map +0 -1
  1000. package/dist/renderer.css +0 -86
  1001. package/dist/renderer.css.map +0 -1
  1002. package/dist/renderer.js.map +0 -1
  1003. package/dist/resize.js.map +0 -1
  1004. package/dist/routing.js.map +0 -1
  1005. package/dist/types-D2tTKEU0.d.ts +0 -18
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","names":["indexIn","a","parentId","id","captureCascade","getChildren","getNode","closure","rootId","taken","node","walk","kid","detachRoots","p","parentOf","n","l","r","out","emitSubtree","entry","kids","i","child","createDeleteOp","args","slot","slotFromIndex","argsForSerial","captured","adapter","observed","captureSlot","snapshot","cascaded","restoredSlot","reinsertRoot","createInsertOp","registerOpFactory"],"sources":["../../../src/core/ops/delete.ts"],"sourcesContent":["import type { Op } from './types';\nimport { createInsertOp } from './create';\nimport { registerOpFactory } from './registry';\nimport { captureSlot, parentOf, slotFromIndex, type OrderedReader, type SiblingSlot } from './slot';\n\ninterface DeleteAdapter<TNode> extends OrderedReader {\n removeNode(id: string): void;\n /** Subtree reads, used to snapshot the cascade before it runs. Optional\n * — a flat adapter has neither, and a delete there is a single node. */\n getNode?(id: string): TNode | undefined;\n /** Every id `removeNode` would take with this one. Optional: a store whose\n * removal cascades along nothing but the subtree needs no such answer, and\n * `getChildren` is enough. A store that cascades further — the kit's scene\n * takes a deleted node's dependents too — must answer here, or the nodes it\n * cascades away are absent from the snapshot and undo brings back the named\n * node alone. */\n getRemovalClosure?(ids: readonly string[]): readonly string[];\n}\n\ninterface InsertAdapter<TNode> {\n insertNode(node: TNode, index?: number): void;\n getNode?(id: string): TNode | undefined;\n}\n\n/** A captured node plus its slot in its own parent's child list. */\nexport interface PlacedNode<TNode> {\n node: TNode;\n index: number;\n}\n\n/** Arguments to {@link createDeleteOp}: the node to remove, plus what undo needs to put it back. */\nexport interface DeleteArgs<TNode extends { id: string }> {\n node: TNode;\n label?: string;\n /** Sibling ordinal the node occupies at the moment of delete. Sugar for\n * `slot: { index }`, and only a seed: `apply` re-observes the node's full\n * slot through the adapter and that observation supersedes this. Kept\n * because it is the whole story for a flat adapter with no `getChildren`,\n * where nothing can be observed. */\n index?: number;\n /** Full slot, anchor included. Written by `apply`; supersedes `index`. */\n slot?: SiblingSlot;\n /** Everything `removeNode` takes, `node` itself included — its subtree, and\n * whatever else the adapter cascades. An inverse that re-inserts `node`\n * alone brings a container back empty and leaves every dependent deleted.\n * Ordered so a node's parent precedes it, which is the order they have to\n * be re-inserted in. Captured on apply; mirrored into the serialized args so\n * a rebuilt op can invert without having run. */\n cascaded?: PlacedNode<TNode>[];\n}\n\n/** `id`'s ordinal among `parentId`'s children, or `-1` when unobservable. */\nfunction indexIn(a: OrderedReader, parentId: string | null, id: string): number {\n return a.getChildren?.(parentId)?.indexOf(id) ?? -1;\n}\n\n/**\n * Snapshot everything removing `rootId` takes with it, `rootId` included.\n *\n * Returns `null` when the adapter can't enumerate, which leaves any previously\n * captured snapshot in place rather than clobbering it with an empty one.\n *\n * The order is the whole point. A cascade unlinks several disjoint subtrees, so\n * the captured set is walked as a forest: a node whose parent is not also going\n * is a detach root, and each one is emitted — ascending sibling index first, so\n * every slot still means what it meant — followed by its captured descendants\n * preorder. The closure's own order will not do: it reaches a dependent before\n * the parent it sits under whenever that parent is in the closure as a\n * dependent too, and re-inserting a child under a parent that is not back yet\n * puts it in the wrong place.\n */\nfunction captureCascade<TNode extends { id: string }>(\n a: DeleteAdapter<TNode>,\n rootId: string,\n): PlacedNode<TNode>[] | null {\n const { getChildren, getNode } = a;\n if (!getChildren || !getNode) return null;\n\n const closure = a.getRemovalClosure?.([rootId]);\n const taken = new Map<string, TNode>();\n if (closure) {\n for (const id of closure) {\n const node = getNode.call(a, id);\n if (node) taken.set(id, node);\n }\n } else {\n // No closure read: the cascade is the subtree, discovered here.\n const walk = (id: string): void => {\n const node = getNode.call(a, id);\n if (!node) return;\n taken.set(id, node);\n for (const kid of getChildren.call(a, id)) walk(kid);\n };\n walk(rootId);\n }\n\n const detachRoots = [...taken.values()]\n .filter((n) => { const p = parentOf(n); return p === null || !taken.has(p); })\n .map((n) => ({ node: n, index: indexIn(a, parentOf(n), n.id) }))\n .sort((l, r) => l.index - r.index);\n\n const out: PlacedNode<TNode>[] = [];\n const emitSubtree = (entry: PlacedNode<TNode>): void => {\n out.push(entry);\n const kids = getChildren.call(a, entry.node.id);\n for (let i = 0; i < kids.length; i++) {\n const child = taken.get(kids[i]!);\n if (child) emitSubtree({ node: child, index: i });\n }\n };\n for (const entry of detachRoots) emitSubtree(entry);\n return out;\n}\n\n/** Op: remove `node` and everything the adapter cascades with it; inverts to a\n * re-insert of the whole set at its captured slots. */\nexport function createDeleteOp<TNode extends { id: string }>(args: DeleteArgs<TNode>): Op {\n const { node, label } = args;\n let slot: SiblingSlot = args.slot ?? slotFromIndex(args.index);\n const argsForSerial: DeleteArgs<TNode> = { node, label, slot, cascaded: args.cascaded };\n let captured: PlacedNode<TNode>[] = args.cascaded ?? [];\n return {\n name: 'delete',\n args: argsForSerial,\n label,\n apply(adapter) {\n const a = adapter as DeleteAdapter<TNode>;\n const observed = captureSlot(a, parentOf(node), node.id);\n if (observed) {\n slot = observed;\n argsForSerial.slot = observed;\n }\n const snapshot = captureCascade(a, node.id);\n if (snapshot) {\n captured = snapshot;\n argsForSerial.cascaded = snapshot;\n }\n a.removeNode(node.id);\n },\n invert() {\n const cascaded = captured;\n const restoredSlot = slot;\n // The root's own placement keeps the anchor-bearing slot; the rest have\n // only an ordinal, which is all `getChildren` can observe of them.\n const reinsertRoot = createInsertOp<TNode>({ node, label, slot: restoredSlot });\n if (cascaded.length === 0) return reinsertRoot;\n return {\n label,\n apply(adapter) {\n const a = adapter as InsertAdapter<TNode>;\n for (const entry of cascaded) {\n // A flat adapter's removeNode doesn't cascade, so its children\n // were never gone — re-inserting them would duplicate them.\n if (a.getNode?.(entry.node.id)) continue;\n if (entry.node.id === node.id) reinsertRoot.apply(adapter);\n else a.insertNode(entry.node, entry.index);\n }\n },\n invert: () =>\n createDeleteOp<TNode>({ node, label, slot: restoredSlot, cascaded }),\n };\n },\n };\n}\n\nregisterOpFactory<DeleteArgs<{ id: string }>>('delete', (args) => createDeleteOp(args));\n"],"mappings":";;;;AAoDA,SAASA,EAAQ,GAAkB,GAAyB,GAAoB;CAC9E,OAAOC,EAAE,cAAcC,CAAQ,CAAC,EAAE,QAAQC,CAAE,KAAK;AACnD;AAiBA,SAASC,EACP,GACA,GAC4B;CAC5B,IAAM,EAAE,gBAAa,eAAYH;CACjC,IAAI,CAACI,KAAe,CAACC,GAAS,OAAO;CAErC,IAAMC,IAAUN,EAAE,oBAAoB,CAACO,CAAM,CAAC,GACxCC,oBAAQ,IAAI,IAAmB;CACrC,IAAIF,GACF,KAAK,IAAMJ,KAAMI,GAAS;EACxB,IAAMG,IAAOJ,EAAQ,KAAKL,GAAGE,CAAE;EAC/B,AAAIO,KAAMD,EAAM,IAAIN,GAAIO,CAAI;CAC9B;MACK;EAEL,IAAMC,KAAQ,MAAqB;GACjC,IAAMD,IAAOJ,EAAQ,KAAKL,GAAGE,CAAE;GAC/B,IAAKO,GACL;MAAM,IAAIP,GAAIO,CAAI;IAClB,KAAK,IAAME,KAAOP,EAAY,KAAKJ,GAAGE,CAAE,GAAG,EAAKS,CAAG;GADjC;EAEpB;EACA,EAAKJ,CAAM;CACb;CAEA,IAAMK,IAAc,CAAC,GAAGJ,EAAM,OAAO,CAAC,CAAC,CACpC,QAAQ,MAAM;EAAE,IAAMK,IAAIC,EAASC,CAAC;EAAG,OAAOF,MAAM,QAAQ,CAACL,EAAM,IAAIK,CAAC;CAAG,CAAC,CAAC,CAC7E,KAAK,OAAO;EAAE,MAAME;EAAG,OAAOhB,EAAQC,GAAGc,EAASC,CAAC,GAAGA,EAAE,EAAE;CAAE,EAAE,CAAC,CAC/D,MAAM,GAAG,MAAMC,EAAE,QAAQC,EAAE,KAAK,GAE7BC,IAA2B,CAAC,GAC5BC,KAAe,MAAmC;EACtD,EAAI,KAAKC,CAAK;EACd,IAAMC,IAAOjB,EAAY,KAAKJ,GAAGoB,EAAM,KAAK,EAAE;EAC9C,KAAK,IAAIE,IAAI,GAAGA,IAAID,EAAK,QAAQ,KAAK;GACpC,IAAME,IAAQf,EAAM,IAAIa,EAAKC,EAAG;GAChC,AAAIC,KAAOJ,EAAY;IAAE,MAAMI;IAAO,OAAOD;GAAE,CAAC;EAClD;CACF;CACA,KAAK,IAAMF,KAASR,GAAa,EAAYQ,CAAK;CAClD,OAAOF;AACT;AAIA,SAAgBM,EAA6C,GAA6B;CACxF,IAAM,EAAE,SAAM,aAAUC,GACpBC,IAAoBD,EAAK,QAAQE,EAAcF,EAAK,KAAK,GACvDG,IAAmC;EAAE;EAAM;EAAO;EAAM,UAAUH,EAAK;CAAS,GAClFI,IAAgCJ,EAAK,YAAY,CAAC;CACtD,OAAO;EACL,MAAM;EACN,MAAMG;EACN;EACA,MAAM,GAAS;GACb,IAAM5B,IAAI8B,GACJC,IAAWC,EAAYhC,GAAGc,EAASL,CAAI,GAAGA,EAAK,EAAE;GACvD,AAAIsB,MACF,IAAOA,GACP,EAAc,OAAOA;GAEvB,IAAME,IAAW9B,EAAeH,GAAGS,EAAK,EAAE;GAK1C,AAJIwB,MACF,IAAWA,GACX,EAAc,WAAWA,IAE3BjC,EAAE,WAAWS,EAAK,EAAE;EACtB;EACA,SAAS;GACP,IAAMyB,IAAWL,GACXM,IAAeT,GAGfU,IAAeC,EAAsB;IAAE;IAAM;IAAO,MAAMF;GAAa,CAAC;GAE9E,OADID,EAAS,WAAW,IAAUE,IAC3B;IACL;IACA,MAAM,GAAS;KACb,IAAMpC,IAAI8B;KACV,KAAK,IAAMV,KAASc,GAGlB,AAAIlC,EAAE,UAAUoB,EAAM,KAAK,EAAE,MACzBA,EAAM,KAAK,OAAOX,EAAK,KAAI2B,EAAa,MAAMN,CAAO,IACpD9B,EAAE,WAAWoB,EAAM,MAAMA,EAAM,KAAK;IAE7C;IACA,cACEI,EAAsB;KAAE;KAAM;KAAO,MAAMW;KAAc;IAAS,CAAC;GACvE;EACF;CACF;AACF;AAEAG,EAA8C,WAAW,MAASd,EAAeC,CAAI,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { createReflectable as e } from "@weasel-js/registry";
2
+ //#region src/core/ops/registry.ts
3
+ var t = e(), n = t.reflection;
4
+ function r(e, n) {
5
+ t.set(e, n);
6
+ }
7
+ function i(e, n) {
8
+ let r = t.get(e);
9
+ return r ? r(n) : null;
10
+ }
11
+ function a() {
12
+ return t.entries().map((e) => e.key);
13
+ }
14
+ //#endregion
15
+ export { n as opFactoryRegistry, i as rebuildOp, r as registerOpFactory, a as registeredOpNames };
16
+
17
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","names":["FACTORIES","createReflectable","opFactoryRegistry","registerOpFactory","name","build","rebuildOp","f","args","registeredOpNames"],"sources":["../../../src/core/ops/registry.ts"],"sourcesContent":["// Op-factory registry — pairs a stable `name` (stamped onto each op by its\n// factory) with a `(args) => Op` rebuilder so a `{ name, args }` snapshot\n// can be reconstituted into a live `Op` whose `apply`/`invert` closures\n// behave identically to the original.\n//\n// The kit calls `registerOpFactory` at module-init time for every built-in\n// factory (see `./create.ts`, `./delete.ts`, `./transform.ts`, etc.).\n// Consumers wanting their custom ops to survive `History.serialize()` /\n// `History.restore()` register their factories at app bootstrap, before\n// `createHistory` is called.\n\nimport { createReflectable, type Reflection } from '@weasel-js/registry';\nimport type { Op } from './types';\n\n/** Rebuilds an op from its serialized `args`. */\nexport type OpFactory = (args: unknown) => Op;\n\nconst FACTORIES = createReflectable<OpFactory>();\n\n/** Every registered op factory, keyed by op name, in registration order. */\nexport const opFactoryRegistry: Reflection<OpFactory> = FACTORIES.reflection;\n\n/** Register an op-factory builder under a stable name. The builder receives\n * the serialized `args` and must return an `Op` equivalent to one freshly\n * constructed at the original call site (`apply` and `invert` behave the\n * same). Idempotent on the same `(name, build)` pair; a second registration\n * with a different builder silently overwrites — kit modules import each\n * factory exactly once at init, so this never races in practice. */\nexport function registerOpFactory<A>(name: string, build: (args: A) => Op): void {\n FACTORIES.set(name, build as OpFactory);\n}\n\n/** Rebuild an op from its serialized `(name, args)`. Returns `null` when\n * `name` isn't registered — callers handle this (typically by substituting\n * a no-op placeholder so stack ordering survives across kit version skew). */\nexport function rebuildOp(name: string, args: unknown): Op | null {\n const f = FACTORIES.get(name);\n return f ? f(args) : null;\n}\n\n/** Test-only: drop all registrations. Not exported from the kit barrel — the\n * built-in factories self-register at module init, so production code never\n * needs to clear the table. Exposed for unit tests that want to assert the\n * unknown-name fallback path. */\nexport function _clearOpFactoriesForTest(): void {\n FACTORIES.clear();\n}\n\n/** Every op name currently registered, in registration order. The kit's\n * built-ins self-register at module init, so importing the barrel is enough\n * to see all of them; consumer factories appear once their module has run. */\nexport function registeredOpNames(): readonly string[] {\n return FACTORIES.entries().map((e) => e.key);\n}\n"],"mappings":";;AAiBA,IAAMA,IAAYC,EAA6B,GAGlCC,IAA2CF,EAAU;AAQlE,SAAgBG,EAAqB,GAAc,GAA8B;CAC/E,EAAU,IAAIC,GAAMC,CAAkB;AACxC;AAKA,SAAgBC,EAAU,GAAc,GAA0B;CAChE,IAAMC,IAAIP,EAAU,IAAII,CAAI;CAC5B,OAAOG,IAAIA,EAAEC,CAAI,IAAI;AACvB;AAaA,SAAgBC,IAAuC;CACrD,OAAOT,EAAU,QAAQ,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG;AAC7C"}
@@ -0,0 +1,55 @@
1
+ //#region src/core/ops/reorder/algorithms.ts
2
+ function e(e, t) {
3
+ let n = new Set(t), r = [], i = [];
4
+ for (let t of e) n.has(t) ? i.push(t) : r.push(t);
5
+ return {
6
+ kept: r,
7
+ movedInOrder: i
8
+ };
9
+ }
10
+ function t(e, t) {
11
+ let n = new Set(t), r = e.slice();
12
+ for (let e = r.length - 2; e >= 0; e--) if (n.has(r[e]) && !n.has(r[e + 1])) {
13
+ let t = r[e];
14
+ r[e] = r[e + 1], r[e + 1] = t;
15
+ }
16
+ return r;
17
+ }
18
+ function n(e, t) {
19
+ let n = new Set(t), r = e.slice();
20
+ for (let e = 1; e < r.length; e++) if (n.has(r[e]) && !n.has(r[e - 1])) {
21
+ let t = r[e];
22
+ r[e] = r[e - 1], r[e - 1] = t;
23
+ }
24
+ return r;
25
+ }
26
+ function r(t, n) {
27
+ let { kept: r, movedInOrder: i } = e(t, n);
28
+ return [...r, ...i];
29
+ }
30
+ function i(t, n) {
31
+ let { kept: r, movedInOrder: i } = e(t, n);
32
+ return [...i, ...r];
33
+ }
34
+ function a(t, n, r) {
35
+ let { kept: i, movedInOrder: a } = e(t, n), o = Math.max(0, Math.min(i.length, r));
36
+ return [
37
+ ...i.slice(0, o),
38
+ ...a,
39
+ ...i.slice(o)
40
+ ];
41
+ }
42
+ function o(e, t) {
43
+ let n = new Set(t);
44
+ for (let t = 0; t < e.length - 1; t++) if (n.has(e[t]) && !n.has(e[t + 1])) return !0;
45
+ return !1;
46
+ }
47
+ function s(e, t) {
48
+ let n = new Set(t);
49
+ for (let t = 1; t < e.length; t++) if (n.has(e[t]) && !n.has(e[t - 1])) return !0;
50
+ return !1;
51
+ }
52
+ //#endregion
53
+ export { t as bringForward, r as bringToFront, o as canBringForward, s as canSendBackward, a as moveToIndex, n as sendBackward, i as sendToBack };
54
+
55
+ //# sourceMappingURL=algorithms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"algorithms.js","names":["partition","movingSet","moving","kept","movedInOrder","id","list","bringForward","ids","out","i","tmp","sendBackward","bringToFront","sendToBack","moveToIndex","clamped","index","canBringForward","canSendBackward"],"sources":["../../../../src/core/ops/reorder/algorithms.ts"],"sourcesContent":["/**\n * Pure reorder primitives. All operate on a flat ordered id list (z-order:\n * index 0 = bottom, last = top) and return a new list. Stable: relative\n * order of moved ids is preserved.\n */\n\nfunction partition(list: string[], moving: string[]): { kept: string[]; movedInOrder: string[] } {\n const movingSet = new Set(moving);\n const kept: string[] = [];\n const movedInOrder: string[] = [];\n for (const id of list) {\n if (movingSet.has(id)) movedInOrder.push(id);\n else kept.push(id);\n }\n return { kept, movedInOrder };\n}\n\nexport function bringForward(list: string[], ids: string[]): string[] {\n const movingSet = new Set(ids);\n const out = list.slice();\n // Walk from top down; each moving id swaps up by one if its upper neighbor\n // is not also moving (prevents block from running into itself).\n for (let i = out.length - 2; i >= 0; i--) {\n if (movingSet.has(out[i]) && !movingSet.has(out[i + 1])) {\n const tmp = out[i];\n out[i] = out[i + 1];\n out[i + 1] = tmp;\n }\n }\n return out;\n}\n\nexport function sendBackward(list: string[], ids: string[]): string[] {\n const movingSet = new Set(ids);\n const out = list.slice();\n for (let i = 1; i < out.length; i++) {\n if (movingSet.has(out[i]) && !movingSet.has(out[i - 1])) {\n const tmp = out[i];\n out[i] = out[i - 1];\n out[i - 1] = tmp;\n }\n }\n return out;\n}\n\nexport function bringToFront(list: string[], ids: string[]): string[] {\n const { kept, movedInOrder } = partition(list, ids);\n return [...kept, ...movedInOrder];\n}\n\nexport function sendToBack(list: string[], ids: string[]): string[] {\n const { kept, movedInOrder } = partition(list, ids);\n return [...movedInOrder, ...kept];\n}\n\nexport function moveToIndex(list: string[], ids: string[], index: number): string[] {\n const { kept, movedInOrder } = partition(list, ids);\n const clamped = Math.max(0, Math.min(kept.length, index));\n return [...kept.slice(0, clamped), ...movedInOrder, ...kept.slice(clamped)];\n}\n\n/**\n * True iff `bringForward(list, ids)` would change `list` — i.e. at least one\n * id in `ids` is present in `list` AND has a non-moving (non-`ids`) neighbor\n * above it. Mirrors the swap rule in `bringForward`: a moving id only swaps\n * up when its upper neighbor isn't also moving, so a contiguous block at the\n * top is correctly reported as \"can't move forward\".\n *\n * Use this to drive button-disabled state in toolbars / menus so the user\n * never fires a no-op reorder onto the undo stack.\n */\nexport function canBringForward(list: string[], ids: string[]): boolean {\n const movingSet = new Set(ids);\n for (let i = 0; i < list.length - 1; i++) {\n if (movingSet.has(list[i]) && !movingSet.has(list[i + 1])) return true;\n }\n return false;\n}\n\n/** Symmetric to `canBringForward` — see that docstring. */\nexport function canSendBackward(list: string[], ids: string[]): boolean {\n const movingSet = new Set(ids);\n for (let i = 1; i < list.length; i++) {\n if (movingSet.has(list[i]) && !movingSet.has(list[i - 1])) return true;\n }\n return false;\n}\n"],"mappings":";AAMA,SAASA,EAAU,GAAgB,GAA8D;CAC/F,IAAMC,IAAY,IAAI,IAAIC,CAAM,GAC1BC,IAAiB,CAAC,GAClBC,IAAyB,CAAC;CAChC,KAAK,IAAMC,KAAMC,GACf,AAAIL,EAAU,IAAII,CAAE,IAAGD,EAAa,KAAKC,CAAE,IACtCF,EAAK,KAAKE,CAAE;CAEnB,OAAO;EAAE;EAAM;CAAa;AAC9B;AAEA,SAAgBE,EAAa,GAAgB,GAAyB;CACpE,IAAMN,IAAY,IAAI,IAAIO,CAAG,GACvBC,IAAMH,EAAK,MAAM;CAGvB,KAAK,IAAII,IAAID,EAAI,SAAS,GAAGC,KAAK,GAAG,KACnC,IAAIT,EAAU,IAAIQ,EAAIC,EAAE,KAAK,CAACT,EAAU,IAAIQ,EAAIC,IAAI,EAAE,GAAG;EACvD,IAAMC,IAAMF,EAAIC;EAEhB,AADA,EAAIA,KAAKD,EAAIC,IAAI,IACjB,EAAIA,IAAI,KAAKC;CACf;CAEF,OAAOF;AACT;AAEA,SAAgBG,EAAa,GAAgB,GAAyB;CACpE,IAAMX,IAAY,IAAI,IAAIO,CAAG,GACvBC,IAAMH,EAAK,MAAM;CACvB,KAAK,IAAII,IAAI,GAAGA,IAAID,EAAI,QAAQ,KAC9B,IAAIR,EAAU,IAAIQ,EAAIC,EAAE,KAAK,CAACT,EAAU,IAAIQ,EAAIC,IAAI,EAAE,GAAG;EACvD,IAAMC,IAAMF,EAAIC;EAEhB,AADA,EAAIA,KAAKD,EAAIC,IAAI,IACjB,EAAIA,IAAI,KAAKC;CACf;CAEF,OAAOF;AACT;AAEA,SAAgBI,EAAa,GAAgB,GAAyB;CACpE,IAAM,EAAE,SAAM,oBAAiBb,EAAUM,GAAME,CAAG;CAClD,OAAO,CAAC,GAAGL,GAAM,GAAGC,CAAY;AAClC;AAEA,SAAgBU,EAAW,GAAgB,GAAyB;CAClE,IAAM,EAAE,SAAM,oBAAiBd,EAAUM,GAAME,CAAG;CAClD,OAAO,CAAC,GAAGJ,GAAc,GAAGD,CAAI;AAClC;AAEA,SAAgBY,EAAY,GAAgB,GAAe,GAAyB;CAClF,IAAM,EAAE,SAAM,oBAAiBf,EAAUM,GAAME,CAAG,GAC5CQ,IAAU,KAAK,IAAI,GAAG,KAAK,IAAIb,EAAK,QAAQc,CAAK,CAAC;CACxD,OAAO;EAAC,GAAGd,EAAK,MAAM,GAAGa,CAAO;EAAG,GAAGZ;EAAc,GAAGD,EAAK,MAAMa,CAAO;CAAC;AAC5E;AAYA,SAAgBE,EAAgB,GAAgB,GAAwB;CACtE,IAAMjB,IAAY,IAAI,IAAIO,CAAG;CAC7B,KAAK,IAAIE,IAAI,GAAGA,IAAIJ,EAAK,SAAS,GAAG,KACnC,IAAIL,EAAU,IAAIK,EAAKI,EAAE,KAAK,CAACT,EAAU,IAAIK,EAAKI,IAAI,EAAE,GAAG,OAAO;CAEpE,OAAO;AACT;AAGA,SAAgBS,EAAgB,GAAgB,GAAwB;CACtE,IAAMlB,IAAY,IAAI,IAAIO,CAAG;CAC7B,KAAK,IAAIE,IAAI,GAAGA,IAAIJ,EAAK,QAAQ,KAC/B,IAAIL,EAAU,IAAIK,EAAKI,EAAE,KAAK,CAACT,EAAU,IAAIK,EAAKI,IAAI,EAAE,GAAG,OAAO;CAEpE,OAAO;AACT"}
@@ -0,0 +1,140 @@
1
+ import { registerOpFactory as e } from "../registry.js";
2
+ import { bringForward as t, bringToFront as n, canBringForward as r, canSendBackward as i, moveToIndex as a, sendBackward as o, sendToBack as s } from "./algorithms.js";
3
+ //#region src/core/ops/reorder/index.ts
4
+ function c(e, t) {
5
+ if (e.length !== t.length) return !1;
6
+ for (let n = 0; n < e.length; n++) if (e[n] !== t[n]) return !1;
7
+ return !0;
8
+ }
9
+ function l(e) {
10
+ let { ids: t, direction: n, fn: r, label: i, prevOrders: a } = e, o = {
11
+ ids: t,
12
+ direction: n,
13
+ label: i,
14
+ prevOrders: a ? a.map((e) => ({
15
+ ...e,
16
+ before: e.before.slice()
17
+ })) : void 0
18
+ }, s = a ? a.map((e) => ({
19
+ ...e,
20
+ before: e.before.slice()
21
+ })) : null;
22
+ return {
23
+ name: "reorder",
24
+ args: o,
25
+ label: i,
26
+ apply(e) {
27
+ let n = e;
28
+ if (!n.getChildren || !n.setChildOrder) return !1;
29
+ let i = /* @__PURE__ */ new Map();
30
+ for (let e of t) {
31
+ let t = n.getParent ? n.getParent(e) : null, r = i.get(t) ?? [];
32
+ r.push(e), i.set(t, r);
33
+ }
34
+ let a = [], l = !1;
35
+ for (let [e, t] of i) {
36
+ let i = n.getChildren(e), o = r(i, t);
37
+ c(i, o) || (a.push({
38
+ parentId: e,
39
+ before: i.slice()
40
+ }), n.setChildOrder(e, o), l = !0);
41
+ }
42
+ return s = a, o.prevOrders = a.map((e) => ({
43
+ ...e,
44
+ before: e.before.slice()
45
+ })), l;
46
+ },
47
+ invert() {
48
+ let e = s;
49
+ return {
50
+ label: i,
51
+ apply(t) {
52
+ if (!e) return;
53
+ let n = t;
54
+ if (n.setChildOrder) for (let t of e) n.setChildOrder(t.parentId, t.before.slice());
55
+ },
56
+ invert() {
57
+ return {
58
+ apply() {},
59
+ invert() {
60
+ return this;
61
+ }
62
+ };
63
+ }
64
+ };
65
+ }
66
+ };
67
+ }
68
+ var u = {
69
+ forward: {
70
+ fn: t,
71
+ defaultLabel: "Bring forward"
72
+ },
73
+ backward: {
74
+ fn: o,
75
+ defaultLabel: "Send backward"
76
+ },
77
+ front: {
78
+ fn: n,
79
+ defaultLabel: "Bring to front"
80
+ },
81
+ back: {
82
+ fn: s,
83
+ defaultLabel: "Send to back"
84
+ }
85
+ };
86
+ function d(e) {
87
+ let { ids: t, direction: n, label: r, prevOrders: i } = e, { fn: a, defaultLabel: o } = u[n];
88
+ return l({
89
+ ids: t,
90
+ direction: n,
91
+ fn: a,
92
+ label: r ?? o,
93
+ prevOrders: i
94
+ });
95
+ }
96
+ e("reorder", (e) => d(e));
97
+ function f(e) {
98
+ let { ids: t, parentId: n, index: r, label: i } = e, o = {
99
+ ids: t,
100
+ parentId: n,
101
+ index: r,
102
+ label: i,
103
+ prevPositions: e.prevPositions ? e.prevPositions.slice() : void 0
104
+ }, s = e.prevPositions ? e.prevPositions.slice() : null;
105
+ return {
106
+ name: "moveToIndex",
107
+ args: o,
108
+ label: i ?? "Move to index",
109
+ apply(e) {
110
+ let i = e;
111
+ if (!i.getChildren || !i.setChildOrder) return;
112
+ let c = t.filter((e) => (i.getParent ? i.getParent(e) : null) === n), l = i.getChildren(n);
113
+ s === null && (s = l.slice(), o.prevPositions = s.slice());
114
+ let u = a(l, c, r);
115
+ i.setChildOrder(n, u);
116
+ },
117
+ invert() {
118
+ let e = s;
119
+ return {
120
+ label: i,
121
+ apply(t) {
122
+ e && t.setChildOrder?.(n, e.slice());
123
+ },
124
+ invert() {
125
+ return {
126
+ apply() {},
127
+ invert() {
128
+ return this;
129
+ }
130
+ };
131
+ }
132
+ };
133
+ }
134
+ };
135
+ }
136
+ e("moveToIndex", (e) => f(e));
137
+ //#endregion
138
+ export { r as canBringForward, i as canSendBackward, f as createMoveToIndexOp, d as createReorderOp };
139
+
140
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["arraysEqual","a","b","i","createPartitionedReorderOp","args","argsForSerial","prevOrders","restore","adapter","byParent","id","ids","parent","list","snapshots","mutated","parentId","parentIds","before","after","fn","captured","entry","REORDER_DIRECTIONS","bringForward","sendBackward","bringToFront","sendToBack","createReorderOp","direction","label","defaultLabel","registerOpFactory","createMoveToIndexOp","eligible","current","moveToIndex","index","canBringForward","canSendBackward"],"sources":["../../../../src/core/ops/reorder/index.ts"],"sourcesContent":["import type { Op } from '../types';\nimport { registerOpFactory } from '../registry';\nimport {\n bringForward,\n sendBackward,\n bringToFront,\n sendToBack,\n moveToIndex,\n} from './algorithms';\n\nexport { canBringForward, canSendBackward } from './algorithms';\n\ninterface ReorderAdapter {\n getParent?(id: string): string | null;\n getChildren?(parentId: string | null): string[];\n setChildOrder?(parentId: string | null, ids: string[]): void;\n}\n\ntype ReorderFn = (list: string[], ids: string[]) => string[];\n\nfunction arraysEqual(a: readonly string[], b: readonly string[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n\n/** One parent's child order before a reorder, kept so undo can restore it. */\nexport interface ReorderRestoreEntry {\n parentId: string | null;\n before: string[];\n}\n\n/** Arguments to {@link createReorderOp}: move `ids` in paint order, one step or to the front/back. */\nexport interface ReorderArgs {\n ids: string[];\n direction: ReorderDirection;\n label?: string;\n /** Pre-mutation child order per touched parent. Filled in on first apply;\n * arrives populated when the op is rebuilt from a snapshot. */\n prevOrders?: ReorderRestoreEntry[];\n}\n\n/**\n * Build an op that, on apply, partitions `ids` by their current parent,\n * runs `fn(currentChildren, idsForParent)` per parent, and writes the\n * result back via setChildOrder. Records before-state per parent so invert\n * is exact.\n *\n * `prevOrders` is that before-state, mirrored into the op's serialized args\n * on first apply. A deserialized op has never run its own `apply`, so its\n * invert has nothing to capture — reading it back from the args is what lets\n * a reorder survive a reload, the same trick `createMoveToIndexOp` uses.\n */\nfunction createPartitionedReorderOp(args: {\n ids: string[];\n direction: ReorderDirection;\n fn: ReorderFn;\n label?: string;\n prevOrders?: ReorderRestoreEntry[];\n}): Op {\n const { ids, direction, fn, label, prevOrders } = args;\n const argsForSerial: ReorderArgs = {\n ids,\n direction,\n label,\n prevOrders: prevOrders ? prevOrders.map((e) => ({ ...e, before: e.before.slice() })) : undefined,\n };\n let restore: ReorderRestoreEntry[] | null =\n prevOrders ? prevOrders.map((e) => ({ ...e, before: e.before.slice() })) : null;\n\n return {\n name: 'reorder',\n args: argsForSerial,\n label,\n apply(adapter) {\n const a = adapter as ReorderAdapter;\n if (!a.getChildren || !a.setChildOrder) return false; // graceful no-op\n // Partition ids by current parent.\n const byParent = new Map<string | null, string[]>();\n for (const id of ids) {\n const parent = a.getParent ? a.getParent(id) : null;\n const list = byParent.get(parent) ?? [];\n list.push(id);\n byParent.set(parent, list);\n }\n const snapshots: ReorderRestoreEntry[] = [];\n let mutated = false;\n for (const [parentId, parentIds] of byParent) {\n const before = a.getChildren(parentId);\n const after = fn(before, parentIds);\n if (arraysEqual(before, after)) continue; // already at the desired order\n snapshots.push({ parentId, before: before.slice() });\n a.setChildOrder(parentId, after);\n mutated = true;\n }\n restore = snapshots;\n argsForSerial.prevOrders = snapshots.map((e) => ({ ...e, before: e.before.slice() }));\n return mutated;\n },\n invert() {\n const captured = restore;\n return {\n label,\n apply(adapter) {\n if (!captured) return;\n const a = adapter as ReorderAdapter;\n if (!a.setChildOrder) return;\n for (const entry of captured) {\n a.setChildOrder(entry.parentId, entry.before.slice());\n }\n },\n invert() {\n // Inverting twice should reapply the original; we don't support\n // this round-trip beyond two levels — the kit's history layer\n // doesn't need it. Return a no-op for safety.\n return { apply() {}, invert() { return this; } };\n },\n };\n },\n };\n}\n\n/** Direction of a sibling z-order reorder. */\nexport type ReorderDirection = 'forward' | 'backward' | 'front' | 'back';\n\nconst REORDER_DIRECTIONS: Record<ReorderDirection, { fn: ReorderFn; defaultLabel: string }> = {\n forward: { fn: bringForward, defaultLabel: 'Bring forward' },\n backward: { fn: sendBackward, defaultLabel: 'Send backward' },\n front: { fn: bringToFront, defaultLabel: 'Bring to front' },\n back: { fn: sendToBack, defaultLabel: 'Send to back' },\n};\n\n/**\n * Op: shift each id within its parent's child order per `direction`:\n * - `'forward'` — bump one step toward the top\n * - `'backward'` — bump one step toward the bottom\n * - `'front'` — move to the top, preserving relative order\n * - `'back'` — move to the bottom, preserving relative order\n */\nexport function createReorderOp(args: ReorderArgs): Op {\n const { ids, direction, label, prevOrders } = args;\n const { fn, defaultLabel } = REORDER_DIRECTIONS[direction];\n return createPartitionedReorderOp({\n ids, direction, fn, label: label ?? defaultLabel, prevOrders,\n });\n}\n\nregisterOpFactory<ReorderArgs>('reorder', (args) => createReorderOp(args));\n\n/** Arguments to {@link createMoveToIndexOp}: move `ids` to `index` under `parentId`. */\nexport interface MoveToIndexArgs {\n ids: string[];\n parentId: string | null;\n index: number;\n label?: string;\n /** Optional pre-mutation child order for the parent. When present, the op\n * uses it as the invert target instead of capturing at apply time — this\n * is how a deserialized op (whose original `apply` already ran in a prior\n * session) restores its invert behavior across an IDB round-trip. */\n prevPositions?: string[];\n}\n\n/** Op: move all `ids` to a contiguous block starting at `index` within `parentId`'s child order. */\nexport function createMoveToIndexOp(args: MoveToIndexArgs): Op {\n const { ids, parentId, index, label } = args;\n // Outer args record we'll mutate so the captured `before` lands in the\n // serialized form. `prevPositions` arrives populated when reconstructed\n // from a snapshot; otherwise it's filled in on first apply.\n const argsForSerial: MoveToIndexArgs = {\n ids,\n parentId,\n index,\n label,\n prevPositions: args.prevPositions ? args.prevPositions.slice() : undefined,\n };\n let before: string[] | null = args.prevPositions ? args.prevPositions.slice() : null;\n\n return {\n name: 'moveToIndex',\n args: argsForSerial,\n label: label ?? 'Move to index',\n apply(adapter) {\n const a = adapter as ReorderAdapter;\n if (!a.getChildren || !a.setChildOrder) return;\n // Filter to ids whose current parent matches target parent.\n const eligible = ids.filter((id) => {\n const p = a.getParent ? a.getParent(id) : null;\n return p === parentId;\n });\n const current = a.getChildren(parentId);\n // Only overwrite `before` the first time we apply; redo (a second\n // apply) must not clobber the originally-captured order, otherwise\n // invert would replay the post-move state and undo nothing.\n if (before === null) {\n before = current.slice();\n argsForSerial.prevPositions = before.slice();\n }\n const after = moveToIndex(current, eligible, index);\n a.setChildOrder(parentId, after);\n },\n invert() {\n const captured = before;\n return {\n label,\n apply(adapter) {\n if (!captured) return;\n const a = adapter as ReorderAdapter;\n a.setChildOrder?.(parentId, captured.slice());\n },\n invert() { return { apply() {}, invert() { return this; } }; },\n };\n },\n };\n}\n\nregisterOpFactory<MoveToIndexArgs>('moveToIndex', (args) => createMoveToIndexOp(args));\n"],"mappings":";;;AAoBA,SAASA,EAAY,GAAsB,GAA+B;CACxE,IAAIC,EAAE,WAAWC,EAAE,QAAQ,OAAO;CAClC,KAAK,IAAIC,IAAI,GAAGA,IAAIF,EAAE,QAAQ,KAAK,IAAIA,EAAEE,OAAOD,EAAEC,IAAI,OAAO;CAC7D,OAAO;AACT;AA6BA,SAASC,EAA2B,GAM7B;CACL,IAAM,EAAE,QAAK,cAAW,OAAI,UAAO,kBAAeC,GAC5CC,IAA6B;EACjC;EACA;EACA;EACA,YAAYC,IAAaA,EAAW,KAAK,OAAO;GAAE,GAAG;GAAG,QAAQ,EAAE,OAAO,MAAM;EAAE,EAAE,IAAI,KAAA;CACzF,GACIC,IACFD,IAAaA,EAAW,KAAK,OAAO;EAAE,GAAG;EAAG,QAAQ,EAAE,OAAO,MAAM;CAAE,EAAE,IAAI;CAE7E,OAAO;EACL,MAAM;EACN,MAAMD;EACN;EACA,MAAM,GAAS;GACb,IAAML,IAAIQ;GACV,IAAI,CAACR,EAAE,eAAe,CAACA,EAAE,eAAe,OAAO;GAE/C,IAAMS,oBAAW,IAAI,IAA6B;GAClD,KAAK,IAAMC,KAAMC,GAAK;IACpB,IAAMC,IAASZ,EAAE,YAAYA,EAAE,UAAUU,CAAE,IAAI,MACzCG,IAAOJ,EAAS,IAAIG,CAAM,KAAK,CAAC;IAEtC,AADAC,EAAK,KAAKH,CAAE,GACZD,EAAS,IAAIG,GAAQC,CAAI;GAC3B;GACA,IAAMC,IAAmC,CAAC,GACtCC,IAAU;GACd,KAAK,IAAM,CAACC,GAAUC,MAAcR,GAAU;IAC5C,IAAMS,IAASlB,EAAE,YAAYgB,CAAQ,GAC/BG,IAAQC,EAAGF,GAAQD,CAAS;IAClC,AAAIlB,EAAYmB,GAAQC,CAAK,MAC7BL,EAAU,KAAK;KAAE;KAAU,QAAQI,EAAO,MAAM;IAAE,CAAC,GACnDlB,EAAE,cAAcgB,GAAUG,CAAK,GAC/B,IAAU;GACZ;GAGA,OAFA,IAAUL,GACV,EAAc,aAAaA,EAAU,KAAK,OAAO;IAAE,GAAG;IAAG,QAAQ,EAAE,OAAO,MAAM;GAAE,EAAE,GAC7EC;EACT;EACA,SAAS;GACP,IAAMM,IAAWd;GACjB,OAAO;IACL;IACA,MAAM,GAAS;KACb,IAAI,CAACc,GAAU;KACf,IAAMrB,IAAIQ;KACV,IAAKR,EAAE,eACP,KAAK,IAAMsB,KAASD,GAClB,EAAE,cAAcC,EAAM,UAAUA,EAAM,OAAO,MAAM,CAAC;IAExD;IACA,SAAS;KAIP,OAAO;MAAE,QAAQ,CAAC;MAAG,SAAS;OAAE,OAAO;MAAM;KAAE;IACjD;GACF;EACF;CACF;AACF;AAKA,IAAMC,IAAwF;CAC5F,SAAU;EAAE,IAAIC;EAAe,cAAc;CAAgB;CAC7D,UAAU;EAAE,IAAIC;EAAe,cAAc;CAAgB;CAC7D,OAAU;EAAE,IAAIC;EAAe,cAAc;CAAiB;CAC9D,MAAU;EAAE,IAAIC;EAAe,cAAc;CAAe;AAC9D;AASA,SAAgBC,EAAgB,GAAuB;CACrD,IAAM,EAAE,QAAK,cAAW,UAAO,kBAAexB,GACxC,EAAE,OAAI,oBAAiBmB,EAAmBM;CAChD,OAAO1B,EAA2B;EAChC;EAAK;EAAW;EAAI,OAAO2B,KAASC;EAAc;CACpD,CAAC;AACH;AAEAC,EAA+B,YAAY,MAASJ,EAAgBxB,CAAI,CAAC;AAgBzE,SAAgB6B,EAAoB,GAA2B;CAC7D,IAAM,EAAE,QAAK,aAAU,UAAO,aAAU7B,GAIlCC,IAAiC;EACrC;EACA;EACA;EACA;EACA,eAAeD,EAAK,gBAAgBA,EAAK,cAAc,MAAM,IAAI,KAAA;CACnE,GACIc,IAA0Bd,EAAK,gBAAgBA,EAAK,cAAc,MAAM,IAAI;CAEhF,OAAO;EACL,MAAM;EACN,MAAMC;EACN,OAAOyB,KAAS;EAChB,MAAM,GAAS;GACb,IAAM9B,IAAIQ;GACV,IAAI,CAACR,EAAE,eAAe,CAACA,EAAE,eAAe;GAExC,IAAMkC,IAAWvB,EAAI,QAAQ,OACjBX,EAAE,YAAYA,EAAE,UAAUU,CAAE,IAAI,UAC7BM,CACd,GACKmB,IAAUnC,EAAE,YAAYgB,CAAQ;GAItC,AAAIE,MAAW,SACb,IAASiB,EAAQ,MAAM,GACvB,EAAc,gBAAgBjB,EAAO,MAAM;GAE7C,IAAMC,IAAQiB,EAAYD,GAASD,GAAUG,CAAK;GAClD,EAAE,cAAcrB,GAAUG,CAAK;EACjC;EACA,SAAS;GACP,IAAME,IAAWH;GACjB,OAAO;IACL;IACA,MAAM,GAAS;KACb,AAAKG,KAELb,EAAE,gBAAgBQ,GAAUK,EAAS,MAAM,CAAC;IAC9C;IACA,SAAS;KAAE,OAAO;MAAE,QAAQ,CAAC;MAAG,SAAS;OAAE,OAAO;MAAM;KAAE;IAAG;GAC/D;EACF;CACF;AACF;AAEAW,EAAmC,gBAAgB,MAASC,EAAoB7B,CAAI,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { registerOpFactory as e } from "./registry.js";
2
+ import { captureSlot as t, resolveSlot as n, slotFromIndex as r } from "./slot.js";
3
+ //#region src/core/ops/reparent.ts
4
+ function i(e, t, r, i) {
5
+ if (!e.getChildren || !e.setChildOrder) return;
6
+ let a = e.getChildren(t), o = a.indexOf(r);
7
+ if (o < 0) return;
8
+ let s = a.slice();
9
+ s.splice(o, 1);
10
+ let c = n(s, i), l = c === void 0 ? s.length : Math.max(0, Math.min(c, s.length));
11
+ o !== l && (s.splice(l, 0, r), e.setChildOrder(t, s));
12
+ }
13
+ function a(e, t) {
14
+ return e || (t === void 0 ? void 0 : r(t));
15
+ }
16
+ function o(e) {
17
+ let { id: n, fromParentId: r, toParentId: s, label: c = "Reparent", coalesceKey: l = `reparent:${n}` } = e, u = a(e.fromSlot, e.fromIndex), d = a(e.toSlot, e.toIndex), f = {
18
+ id: n,
19
+ fromParentId: r,
20
+ toParentId: s,
21
+ fromSlot: u,
22
+ toSlot: d,
23
+ label: c,
24
+ coalesceKey: l
25
+ };
26
+ return {
27
+ name: "reparent",
28
+ args: f,
29
+ label: c,
30
+ coalesceKey: l,
31
+ apply(e) {
32
+ let a = e, o = t(a, r, n);
33
+ o && (u = o, f.fromSlot = o), a.setParent(n, s), d && i(a, s, n, d);
34
+ },
35
+ invert() {
36
+ return o({
37
+ id: n,
38
+ fromParentId: s,
39
+ toParentId: r,
40
+ fromSlot: d,
41
+ toSlot: u,
42
+ label: c,
43
+ coalesceKey: l
44
+ });
45
+ }
46
+ };
47
+ }
48
+ e("reparent", (e) => o(e));
49
+ //#endregion
50
+ export { o as createReparentOp };
51
+
52
+ //# sourceMappingURL=reparent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reparent.js","names":["placeAt","a","current","parentId","from","id","next","resolved","resolveSlot","slot","to","optionalSlot","index","slotFromIndex","createReparentOp","args","fromSlot","toSlot","argsForSerial","adapter","observed","captureSlot","fromParentId","toParentId","registerOpFactory"],"sources":["../../../src/core/ops/reparent.ts"],"sourcesContent":["import type { Op } from './types';\nimport { registerOpFactory } from './registry';\nimport { captureSlot, resolveSlot, slotFromIndex, type OrderedReader, type SiblingSlot } from './slot';\n\ninterface ReparentAdapter extends OrderedReader {\n setParent(id: string, parentId: string | null): void;\n /** Sibling-order write, paired with `getChildren`. Optional: an adapter\n * without both silently ignores slots and appends. */\n setChildOrder?(parentId: string | null, ids: string[]): void;\n}\n\n/** Arguments to {@link createReparentOp}: move node `id` from one parent to another. */\nexport interface ReparentArgs {\n id: string;\n fromParentId: string | null;\n toParentId: string | null;\n /** Sibling ordinal under the old parent. Sugar for `fromSlot: { index }`,\n * and only a seed: `apply` re-observes the node's full slot through the\n * adapter and that observation supersedes this. */\n fromIndex?: number;\n /** Sibling ordinal under the new parent. Sugar for `toSlot: { index }`.\n * Omit to append. */\n toIndex?: number;\n /** Slot under the old parent, anchor included. `invert()` forwards it as\n * the destination slot; without it undo re-parents with no position and\n * the node lands last, quietly changing paint order. */\n fromSlot?: SiblingSlot;\n /** Slot under the new parent, anchor included. Omit to append. */\n toSlot?: SiblingSlot;\n label?: string;\n coalesceKey?: string;\n}\n\n/** Move `id` to `slot` among `parentId`'s children. No-op when the adapter\n * has no ordering seam, when `id` isn't there, or when it's already in\n * place. */\nfunction placeAt(\n a: ReparentAdapter,\n parentId: string | null,\n id: string,\n slot: SiblingSlot,\n): void {\n if (!a.getChildren || !a.setChildOrder) return;\n const current = a.getChildren(parentId);\n const from = current.indexOf(id);\n if (from < 0) return;\n const next = current.slice();\n next.splice(from, 1);\n const resolved = resolveSlot(next, slot);\n const to = resolved === undefined ? next.length : Math.max(0, Math.min(resolved, next.length));\n if (from === to) return;\n next.splice(to, 0, id);\n a.setChildOrder(parentId, next);\n}\n\n/** Present when the caller named a destination at all; `undefined` leaves\n * placement to the adapter. */\nfunction optionalSlot(slot: SiblingSlot | undefined, index: number | undefined): SiblingSlot | undefined {\n if (slot) return slot;\n return index === undefined ? undefined : slotFromIndex(index);\n}\n\n/**\n * Op: change `id`'s parent and sibling slot, inverting back to the prior\n * parent and slot.\n *\n * `coalesceKey` defaults to `reparent:${id}` so successive reparents of the\n * same id batch-merge cleanly.\n */\nexport function createReparentOp(args: ReparentArgs): Op {\n const {\n id, fromParentId, toParentId,\n label = 'Reparent', coalesceKey = `reparent:${id}`,\n } = args;\n let fromSlot = optionalSlot(args.fromSlot, args.fromIndex);\n const toSlot = optionalSlot(args.toSlot, args.toIndex);\n const argsForSerial: ReparentArgs = {\n id, fromParentId, toParentId, fromSlot, toSlot, label, coalesceKey,\n };\n return {\n name: 'reparent',\n args: argsForSerial,\n label,\n coalesceKey,\n apply(adapter) {\n const a = adapter as ReparentAdapter;\n const observed = captureSlot(a, fromParentId, id);\n if (observed) {\n fromSlot = observed;\n argsForSerial.fromSlot = observed;\n }\n a.setParent(id, toParentId);\n if (toSlot) placeAt(a, toParentId, id, toSlot);\n },\n invert() {\n return createReparentOp({\n id,\n fromParentId: toParentId,\n toParentId: fromParentId,\n fromSlot: toSlot,\n toSlot: fromSlot,\n label,\n coalesceKey,\n });\n },\n };\n}\n\nregisterOpFactory<ReparentArgs>('reparent', (args) => createReparentOp(args));\n"],"mappings":";;;AAoCA,SAASA,EACP,GACA,GACA,GACA,GACM;CACN,IAAI,CAACC,EAAE,eAAe,CAACA,EAAE,eAAe;CACxC,IAAMC,IAAUD,EAAE,YAAYE,CAAQ,GAChCC,IAAOF,EAAQ,QAAQG,CAAE;CAC/B,IAAID,IAAO,GAAG;CACd,IAAME,IAAOJ,EAAQ,MAAM;CAC3B,EAAK,OAAOE,GAAM,CAAC;CACnB,IAAMG,IAAWC,EAAYF,GAAMG,CAAI,GACjCC,IAAKH,MAAa,KAAA,IAAYD,EAAK,SAAS,KAAK,IAAI,GAAG,KAAK,IAAIC,GAAUD,EAAK,MAAM,CAAC;CAC7F,AAAIF,MAASM,MACbJ,EAAK,OAAOI,GAAI,GAAGL,CAAE,GACrBJ,EAAE,cAAcE,GAAUG,CAAI;AAChC;AAIA,SAASK,EAAa,GAA+B,GAAoD;CAEvG,OADIF,MACGG,MAAU,KAAA,IAAY,KAAA,IAAYC,EAAcD,CAAK;AAC9D;AASA,SAAgBE,EAAiB,GAAwB;CACvD,IAAM,EACJ,OAAI,iBAAc,eAClB,WAAQ,YAAY,iBAAc,YAAYT,QAC5CU,GACAC,IAAWL,EAAaI,EAAK,UAAUA,EAAK,SAAS,GACnDE,IAASN,EAAaI,EAAK,QAAQA,EAAK,OAAO,GAC/CG,IAA8B;EAClC;EAAI;EAAc;EAAY;EAAU;EAAQ;EAAO;CACzD;CACA,OAAO;EACL,MAAM;EACN,MAAMA;EACN;EACA;EACA,MAAM,GAAS;GACb,IAAM,IAAIC,GACJC,IAAWC,EAAY,GAAGC,GAAcjB,CAAE;GAMhD,AALIe,MACF,IAAWA,GACX,EAAc,WAAWA,IAE3B,EAAE,UAAUf,GAAIkB,CAAU,GACtBN,KAAQjB,EAAQ,GAAGuB,GAAYlB,GAAIY,CAAM;EAC/C;EACA,SAAS;GACP,OAAOH,EAAiB;IACtB;IACA,cAAcS;IACd,YAAYD;IACZ,UAAUL;IACV,QAAQD;IACR;IACA;GACF,CAAC;EACH;CACF;AACF;AAEAQ,EAAgC,aAAa,MAASV,EAAiBC,CAAI,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { registerOpFactory as e } from "./registry.js";
2
+ //#region src/core/ops/select.ts
3
+ function t(e) {
4
+ let { from: r, to: i, label: a } = e;
5
+ return {
6
+ name: "setSelection",
7
+ args: {
8
+ from: r,
9
+ to: i,
10
+ label: a
11
+ },
12
+ label: a,
13
+ apply(e) {
14
+ if (e.setSelection([...i]), n(r, i)) return !1;
15
+ },
16
+ invert() {
17
+ return t({
18
+ from: i,
19
+ to: r,
20
+ label: a
21
+ });
22
+ }
23
+ };
24
+ }
25
+ e("setSelection", (e) => t(e));
26
+ function n(e, t) {
27
+ if (e.length !== t.length) return !1;
28
+ for (let n = 0; n < e.length; n++) if (e[n] !== t[n]) return !1;
29
+ return !0;
30
+ }
31
+ //#endregion
32
+ export { t as createSetSelectionOp };
33
+
34
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","names":["createSetSelectionOp","args","adapter","to","sequenceEqual","from","registerOpFactory","a","b","i"],"sources":["../../../src/core/ops/select.ts"],"sourcesContent":["import type { NodeId } from '../scene/types';\nimport type { Op } from './types';\nimport { registerOpFactory } from './registry';\n\ninterface SelectionAdapter {\n setSelection(ids: NodeId[]): void;\n}\n\n/** Arguments to {@link createSetSelectionOp}: replace the selection `from` → `to`. */\nexport interface SetSelectionArgs {\n from: readonly NodeId[];\n to: readonly NodeId[];\n label?: string;\n}\n\n/** Op: replace the current selection with `to`; inverts back to `from`. */\nexport function createSetSelectionOp(args: SetSelectionArgs): Op {\n const { from, to, label } = args;\n return {\n name: 'setSelection',\n args: { from, to, label },\n label,\n apply(adapter) {\n // Always call setSelection so consumers that inspect op behavior\n // (tests, overlays) see a consistent \"this op writes `to`\" signal.\n // When from and to are sequence-equal, additionally report a no-op\n // to history so the entry can be skipped from the undo stack.\n // setSelection with the same value is idempotent.\n (adapter as SelectionAdapter).setSelection([...to]);\n if (sequenceEqual(from, to)) return false;\n return undefined;\n },\n invert() {\n return createSetSelectionOp({ from: to, to: from, label });\n },\n };\n}\n\nregisterOpFactory<SetSelectionArgs>('setSelection', (args) => createSetSelectionOp(args));\n\nfunction sequenceEqual(a: readonly NodeId[], b: readonly NodeId[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\n return true;\n}\n"],"mappings":";;AAgBA,SAAgBA,EAAqB,GAA4B;CAC/D,IAAM,EAAE,SAAM,OAAI,aAAUC;CAC5B,OAAO;EACL,MAAM;EACN,MAAM;GAAE;GAAM;GAAI;EAAM;EACxB;EACA,MAAM,GAAS;GAOb,IADAC,EAA8B,aAAa,CAAC,GAAGC,CAAE,CAAC,GAC9CC,EAAcC,GAAMF,CAAE,GAAG,OAAO;EAEtC;EACA,SAAS;GACP,OAAOH,EAAqB;IAAE,MAAMG;IAAI,IAAIE;IAAM;GAAM,CAAC;EAC3D;CACF;AACF;AAEAC,EAAoC,iBAAiB,MAASN,EAAqBC,CAAI,CAAC;AAExF,SAASG,EAAc,GAAsB,GAA+B;CAC1E,IAAIG,EAAE,WAAWC,EAAE,QAAQ,OAAO;CAClC,KAAK,IAAIC,IAAI,GAAGA,IAAIF,EAAE,QAAQ,KAAK,IAAIA,EAAEE,OAAOD,EAAEC,IAAI,OAAO;CAC7D,OAAO;AACT"}
@@ -0,0 +1,34 @@
1
+ import { registerOpFactory as e } from "./registry.js";
2
+ //#region src/core/ops/setData.ts
3
+ function t(e) {
4
+ let { id: n, from: r, to: i, label: a, coalesceKey: o } = e;
5
+ return {
6
+ name: "setData",
7
+ args: {
8
+ id: n,
9
+ from: r,
10
+ to: i,
11
+ label: a,
12
+ coalesceKey: o
13
+ },
14
+ label: a,
15
+ coalesceKey: o,
16
+ apply(e) {
17
+ e.setData(n, i);
18
+ },
19
+ invert() {
20
+ return t({
21
+ id: n,
22
+ from: i,
23
+ to: r,
24
+ label: a,
25
+ coalesceKey: o
26
+ });
27
+ }
28
+ };
29
+ }
30
+ e("setData", (e) => t(e));
31
+ //#endregion
32
+ export { t as createSetDataOp };
33
+
34
+ //# sourceMappingURL=setData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setData.js","names":["createSetDataOp","args","id","to","from","registerOpFactory"],"sources":["../../../src/core/ops/setData.ts"],"sourcesContent":["import type { Op } from './types';\nimport { registerOpFactory } from './registry';\n\ninterface SetDataAdapter<TData> {\n setData(id: string, data: TData): void;\n}\n\n/** Arguments to {@link createSetDataOp}: replace node `id`'s data `from` → `to`. */\nexport interface SetDataArgs<TData> {\n id: string;\n from: TData;\n to: TData;\n label?: string;\n coalesceKey?: string;\n}\n\n/** Op: set a node's app-defined `data` payload, inverting back to `from`. */\nexport function createSetDataOp<TData>(args: SetDataArgs<TData>): Op {\n const { id, from, to, label, coalesceKey } = args;\n return {\n name: 'setData',\n args: { id, from, to, label, coalesceKey },\n label,\n coalesceKey,\n apply(adapter) {\n (adapter as SetDataAdapter<TData>).setData(id, to);\n },\n invert() {\n return createSetDataOp<TData>({ id, from: to, to: from, label, coalesceKey });\n },\n };\n}\n\nregisterOpFactory<SetDataArgs<unknown>>('setData', (args) => createSetDataOp(args));\n"],"mappings":";;AAiBA,SAAgBA,EAAuB,GAA8B;CACnE,IAAM,EAAE,OAAI,SAAM,OAAI,UAAO,mBAAgBC;CAC7C,OAAO;EACL,MAAM;EACN,MAAM;GAAE;GAAI;GAAM;GAAI;GAAO;EAAY;EACzC;EACA;EACA,MAAM,GAAS;GACb,EAAmC,QAAQC,GAAIC,CAAE;EACnD;EACA,SAAS;GACP,OAAOH,EAAuB;IAAE;IAAI,MAAMG;IAAI,IAAIC;IAAM;IAAO;GAAY,CAAC;EAC9E;CACF;AACF;AAEAC,EAAwC,YAAY,MAASL,EAAgBC,CAAI,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { registerOpFactory as e } from "./registry.js";
2
+ //#region src/core/ops/setLayer.ts
3
+ function t(e) {
4
+ let { id: n, from: r, to: i, label: a, coalesceKey: o = `setLayer:${n}` } = e;
5
+ return {
6
+ name: "setLayer",
7
+ args: {
8
+ id: n,
9
+ from: r,
10
+ to: i,
11
+ label: a,
12
+ coalesceKey: o
13
+ },
14
+ label: a,
15
+ coalesceKey: o,
16
+ apply(e) {
17
+ e.setLayer(n, i);
18
+ },
19
+ invert() {
20
+ return t({
21
+ id: n,
22
+ from: i,
23
+ to: r,
24
+ label: a,
25
+ coalesceKey: o
26
+ });
27
+ }
28
+ };
29
+ }
30
+ e("setLayer", (e) => t(e));
31
+ //#endregion
32
+ export { t as createSetLayerOp };
33
+
34
+ //# sourceMappingURL=setLayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setLayer.js","names":["createSetLayerOp","id","args","to","from","registerOpFactory"],"sources":["../../../src/core/ops/setLayer.ts"],"sourcesContent":["import type { Op } from './types';\nimport { registerOpFactory } from './registry';\n\ninterface SetLayerAdapter {\n setLayer(id: string, layer: string): void;\n}\n\n/** Arguments to {@link createSetLayerOp}: move node `id` from layer `from` to layer `to`. */\nexport interface SetLayerArgs {\n id: string;\n from: string;\n to: string;\n label?: string;\n coalesceKey?: string;\n}\n\n/** Op: set a node's `layer` tag, inverting back to `from`. `coalesceKey`\n * defaults to `setLayer:${id}` so successive layer changes to the same node\n * merge into one undo entry within the history's coalesce window. Pass an\n * explicit key to opt out. */\nexport function createSetLayerOp(args: SetLayerArgs): Op {\n const { id, from, to, label, coalesceKey = `setLayer:${id}` } = args;\n return {\n name: 'setLayer',\n args: { id, from, to, label, coalesceKey },\n label,\n coalesceKey,\n apply(adapter) {\n (adapter as SetLayerAdapter).setLayer(id, to);\n },\n invert() {\n return createSetLayerOp({ id, from: to, to: from, label, coalesceKey });\n },\n };\n}\n\nregisterOpFactory<SetLayerArgs>('setLayer', (args) => createSetLayerOp(args));\n"],"mappings":";;AAoBA,SAAgBA,EAAiB,GAAwB;CACvD,IAAM,EAAE,OAAI,SAAM,OAAI,UAAO,iBAAc,YAAYC,QAASC;CAChE,OAAO;EACL,MAAM;EACN,MAAM;GAAE;GAAI;GAAM;GAAI;GAAO;EAAY;EACzC;EACA;EACA,MAAM,GAAS;GACb,EAA6B,SAASD,GAAIE,CAAE;EAC9C;EACA,SAAS;GACP,OAAOH,EAAiB;IAAE;IAAI,MAAMG;IAAI,IAAIC;IAAM;IAAO;GAAY,CAAC;EACxE;CACF;AACF;AAEAC,EAAgC,aAAa,MAASL,EAAiBE,CAAI,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { registerOpFactory as e } from "./registry.js";
2
+ //#region src/core/ops/setLayout.ts
3
+ function t(e) {
4
+ let { id: n, from: r, to: i, label: a } = e;
5
+ return {
6
+ name: "setLayout",
7
+ args: {
8
+ id: n,
9
+ from: r,
10
+ to: i,
11
+ label: a
12
+ },
13
+ label: a ?? "Set layout",
14
+ apply(e) {
15
+ e.setLayout(n, i);
16
+ },
17
+ invert() {
18
+ return t({
19
+ id: n,
20
+ from: i,
21
+ to: r,
22
+ label: a
23
+ });
24
+ }
25
+ };
26
+ }
27
+ e("setLayout", (e) => t(e));
28
+ //#endregion
29
+ export { t as createSetLayoutOp };
30
+
31
+ //# sourceMappingURL=setLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setLayout.js","names":["createSetLayoutOp","args","label","id","to","from","registerOpFactory"],"sources":["../../../src/core/ops/setLayout.ts"],"sourcesContent":["import type { Op } from './types';\nimport type { LayoutStrategy } from '../../layout/types';\nimport { registerOpFactory } from './registry';\n\n/** A container's layout as an op names it: the strategy itself, its key in\n * the scene's `SceneRegistry.layout`, or `null` for none. */\nexport type LayoutRef<TPose = unknown> = LayoutStrategy<TPose> | string | null;\n\ninterface SetLayoutAdapter<TPose> {\n setLayout(id: string, layout: LayoutRef<TPose>): void;\n}\n\n/** Arguments to {@link createSetLayoutOp}: swap container `id`'s layout\n * `from` → `to`. */\nexport interface SetLayoutArgs<TPose = unknown> {\n id: string;\n from: LayoutRef<TPose>;\n to: LayoutRef<TPose>;\n label?: string;\n}\n\n/**\n * Op: give a container a different layout, inverting back to `from`. Applied\n * through a scene adapter (`adapter.setLayout`), the scene re-arranges the\n * container under the new layout in the same undo step.\n *\n * A strategy object cannot be serialized, so an op that has to survive a\n * persisted history names its layouts by registry key.\n */\nexport function createSetLayoutOp<TPose = unknown>(args: SetLayoutArgs<TPose>): Op {\n const { id, from, to, label } = args;\n return {\n name: 'setLayout',\n args: { id, from, to, label },\n label: label ?? 'Set layout',\n apply(adapter) {\n (adapter as SetLayoutAdapter<TPose>).setLayout(id, to);\n },\n invert() {\n return createSetLayoutOp<TPose>({ id, from: to, to: from, label });\n },\n };\n}\n\nregisterOpFactory<SetLayoutArgs>('setLayout', (args) => createSetLayoutOp(args));\n"],"mappings":";;AA6BA,SAAgBA,EAAmC,GAAgC;CACjF,IAAM,EAAE,OAAI,SAAM,OAAI,aAAUC;CAChC,OAAO;EACL,MAAM;EACN,MAAM;GAAE;GAAI;GAAM;GAAI;EAAM;EAC5B,OAAOC,KAAS;EAChB,MAAM,GAAS;GACb,EAAqC,UAAUC,GAAIC,CAAE;EACvD;EACA,SAAS;GACP,OAAOJ,EAAyB;IAAE;IAAI,MAAMI;IAAI,IAAIC;IAAM;GAAM,CAAC;EACnE;CACF;AACF;AAEAC,EAAiC,cAAc,MAASN,EAAkBC,CAAI,CAAC"}
@@ -0,0 +1,57 @@
1
+ import { registerOpFactory as e } from "./registry.js";
2
+ //#region src/core/ops/setPath.ts
3
+ function t(e) {
4
+ let { id: r, from: i, to: a, label: o, coalesceKey: s = `setPath:${r}` } = e;
5
+ return {
6
+ name: "setPath",
7
+ args: {
8
+ id: r,
9
+ from: i,
10
+ to: a,
11
+ label: o,
12
+ coalesceKey: s
13
+ },
14
+ label: o,
15
+ coalesceKey: s,
16
+ apply(e) {
17
+ if (e.setPath(r, a), n(i, a)) return !1;
18
+ },
19
+ invert() {
20
+ return t({
21
+ id: r,
22
+ from: a,
23
+ to: i,
24
+ label: o,
25
+ coalesceKey: s
26
+ });
27
+ }
28
+ };
29
+ }
30
+ e("setPath", (e) => t(e));
31
+ function n(e, t) {
32
+ return e === t ? !0 : e.closed !== t.closed || !i(e.params, t.params) ? !1 : r(e.path, t.path);
33
+ }
34
+ function r(e, t) {
35
+ if (e === t) return !0;
36
+ if (typeof e != "object" || typeof t != "object" || e === null || t === null) return !1;
37
+ let n = e, r = t;
38
+ if (n.kind !== r.kind) return !1;
39
+ if (n.kind === "rect") return i(e, t);
40
+ let a = e, o = t;
41
+ if (a.commands.length !== o.commands.length || a.coords.length !== o.coords.length) return !1;
42
+ for (let e = 0; e < a.commands.length; e++) if (a.commands[e] !== o.commands[e]) return !1;
43
+ for (let e = 0; e < a.coords.length; e++) if (a.coords[e] !== o.coords[e]) return !1;
44
+ return !0;
45
+ }
46
+ function i(e, t) {
47
+ if (e === t) return !0;
48
+ if (e == null || t == null || typeof e != "object" || typeof t != "object") return !1;
49
+ let n = Object.keys(e), r = Object.keys(t);
50
+ if (n.length !== r.length) return !1;
51
+ for (let r of n) if (e[r] !== t[r]) return !1;
52
+ return !0;
53
+ }
54
+ //#endregion
55
+ export { t as createSetPathOp };
56
+
57
+ //# sourceMappingURL=setPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setPath.js","names":["createSetPathOp","id","args","adapter","to","fieldsEqual","from","registerOpFactory","a","b","shallowEqual","pathEqual","ao","bo","aa","bb","i","ka","kb","k"],"sources":["../../../src/core/ops/setPath.ts"],"sourcesContent":["import type { Op } from './types';\nimport { registerOpFactory } from './registry';\n\n/** The geometry fields a `setPath` op replaces together — the path itself,\n * whether it is closed, and the parameters it was generated from. They move\n * as one so a parametric shape and its baked path never disagree. */\nexport interface SetPathFields {\n path: unknown; // Path | RectPath; left unknown so kit doesn't depend on features/paths/types here\n closed: boolean;\n params: unknown;\n}\n\ninterface SetPathAdapter {\n setPath(id: string, fields: SetPathFields): void;\n}\n\n/** Arguments to {@link createSetPathOp}: replace a path node's geometry fields `from` → `to`. */\nexport interface SetPathArgs {\n id: string;\n from: SetPathFields;\n to: SetPathFields;\n label?: string;\n coalesceKey?: string;\n}\n\n/**\n * Op: atomically replace a PathObj's geometric fields (path + closed + params).\n * Used for pen-edit anchor mutations and parametric-shape trapdoor conversions.\n * Reports no-op when `from` and `to` are structurally equal (same path bytes,\n * closed, params), letting history skip the entry.\n *\n * `coalesceKey` defaults to `setPath:${id}` so successive geometry writes to\n * the same node (dragging a bezier anchor) merge into one undo entry within the\n * history's coalesce window. Pass an explicit key to opt out.\n */\nexport function createSetPathOp(args: SetPathArgs): Op {\n const { id, from, to, label, coalesceKey = `setPath:${id}` } = args;\n return {\n name: 'setPath',\n args: { id, from, to, label, coalesceKey },\n label,\n coalesceKey,\n apply(adapter) {\n // Always call setPath so consumers that inspect op behavior see a\n // consistent \"this op writes (id, to)\" signal. When from and to\n // are field-equal, additionally report a no-op to history so the\n // entry can be skipped from the undo stack. setPath with the same\n // value is idempotent.\n (adapter as SetPathAdapter).setPath(id, to);\n if (fieldsEqual(from, to)) return false;\n return undefined;\n },\n invert() {\n return createSetPathOp({ id, from: to, to: from, label, coalesceKey });\n },\n };\n}\n\nregisterOpFactory<SetPathArgs>('setPath', (args) => createSetPathOp(args));\n\nfunction fieldsEqual(a: SetPathFields, b: SetPathFields): boolean {\n if (a === b) return true;\n if (a.closed !== b.closed) return false;\n if (!shallowEqual(a.params, b.params)) return false;\n return pathEqual(a.path, b.path);\n}\n\nfunction pathEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) return false;\n const ao = a as { kind?: string };\n const bo = b as { kind?: string };\n if (ao.kind !== bo.kind) return false;\n if (ao.kind === 'rect') return shallowEqual(a, b);\n // polygon: compare commands + coords arrays\n const aa = a as { commands: ArrayLike<number>; coords: ArrayLike<number> };\n const bb = b as { commands: ArrayLike<number>; coords: ArrayLike<number> };\n if (aa.commands.length !== bb.commands.length) return false;\n if (aa.coords.length !== bb.coords.length) return false;\n for (let i = 0; i < aa.commands.length; i++) if (aa.commands[i] !== bb.commands[i]) return false;\n for (let i = 0; i < aa.coords.length; i++) if (aa.coords[i] !== bb.coords[i]) return false;\n return true;\n}\n\nfunction shallowEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a == null || b == null || typeof a !== 'object' || typeof b !== 'object') return false;\n const ka = Object.keys(a as object);\n const kb = Object.keys(b as object);\n if (ka.length !== kb.length) return false;\n for (const k of ka) {\n if ((a as Record<string, unknown>)[k] !== (b as Record<string, unknown>)[k]) return false;\n }\n return true;\n}\n"],"mappings":";;AAmCA,SAAgBA,EAAgB,GAAuB;CACrD,IAAM,EAAE,OAAI,SAAM,OAAI,UAAO,iBAAc,WAAWC,QAASC;CAC/D,OAAO;EACL,MAAM;EACN,MAAM;GAAE;GAAI;GAAM;GAAI;GAAO;EAAY;EACzC;EACA;EACA,MAAM,GAAS;GAOb,IADAC,EAA4B,QAAQF,GAAIG,CAAE,GACtCC,EAAYC,GAAMF,CAAE,GAAG,OAAO;EAEpC;EACA,SAAS;GACP,OAAOJ,EAAgB;IAAE;IAAI,MAAMI;IAAI,IAAIE;IAAM;IAAO;GAAY,CAAC;EACvE;CACF;AACF;AAEAC,EAA+B,YAAY,MAASP,EAAgBE,CAAI,CAAC;AAEzE,SAASG,EAAY,GAAkB,GAA2B;CAIhE,OAHIG,MAAMC,IAAU,KAChBD,EAAE,WAAWC,EAAE,UACf,CAACC,EAAaF,EAAE,QAAQC,EAAE,MAAM,IAAU,KACvCE,EAAUH,EAAE,MAAMC,EAAE,IAAI;AACjC;AAEA,SAASE,EAAU,GAAY,GAAqB;CAClD,IAAIH,MAAMC,GAAG,OAAO;CACpB,IAAI,OAAOD,KAAM,YAAY,OAAOC,KAAM,YAAYD,MAAM,QAAQC,MAAM,MAAM,OAAO;CACvF,IAAMG,IAAKJ,GACLK,IAAKJ;CACX,IAAIG,EAAG,SAASC,EAAG,MAAM,OAAO;CAChC,IAAID,EAAG,SAAS,QAAQ,OAAOF,EAAaF,GAAGC,CAAC;CAEhD,IAAMK,IAAKN,GACLO,IAAKN;CAEX,IADIK,EAAG,SAAS,WAAWC,EAAG,SAAS,UACnCD,EAAG,OAAO,WAAWC,EAAG,OAAO,QAAQ,OAAO;CAClD,KAAK,IAAIC,IAAI,GAAGA,IAAIF,EAAG,SAAS,QAAQ,KAAK,IAAIA,EAAG,SAASE,OAAOD,EAAG,SAASC,IAAI,OAAO;CAC3F,KAAK,IAAIA,IAAI,GAAGA,IAAIF,EAAG,OAAO,QAAQ,KAAK,IAAIA,EAAG,OAAOE,OAAOD,EAAG,OAAOC,IAAI,OAAO;CACrF,OAAO;AACT;AAEA,SAASN,EAAa,GAAY,GAAqB;CACrD,IAAIF,MAAMC,GAAG,OAAO;CACpB,IAAID,KAAK,QAAQC,KAAK,QAAQ,OAAOD,KAAM,YAAY,OAAOC,KAAM,UAAU,OAAO;CACrF,IAAMQ,IAAK,OAAO,KAAKT,CAAW,GAC5BU,IAAK,OAAO,KAAKT,CAAW;CAClC,IAAIQ,EAAG,WAAWC,EAAG,QAAQ,OAAO;CACpC,KAAK,IAAMC,KAAKF,GACd,IAAKT,EAA8BW,OAAQV,EAA8BU,IAAI,OAAO;CAEtF,OAAO;AACT"}
@@ -0,0 +1,34 @@
1
+ import { registerOpFactory as e } from "./registry.js";
2
+ //#region src/core/ops/setText.ts
3
+ function t(e) {
4
+ let { id: n, from: r, to: i, label: a, coalesceKey: o = `setText:${n}` } = e;
5
+ return {
6
+ name: "setText",
7
+ args: {
8
+ id: n,
9
+ from: r,
10
+ to: i,
11
+ label: a,
12
+ coalesceKey: o
13
+ },
14
+ label: a,
15
+ coalesceKey: o,
16
+ apply(e) {
17
+ e.setText(n, i);
18
+ },
19
+ invert() {
20
+ return t({
21
+ id: n,
22
+ from: i,
23
+ to: r,
24
+ label: a,
25
+ coalesceKey: o
26
+ });
27
+ }
28
+ };
29
+ }
30
+ e("setText", (e) => t(e));
31
+ //#endregion
32
+ export { t as createSetTextOp };
33
+
34
+ //# sourceMappingURL=setText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setText.js","names":["createSetTextOp","id","args","to","from","registerOpFactory"],"sources":["../../../src/core/ops/setText.ts"],"sourcesContent":["import type { Op } from './types';\nimport { registerOpFactory } from './registry';\n\ninterface SetTextAdapter {\n setText(id: string, text: string): void;\n}\n\n/** Arguments to {@link createSetTextOp}: replace node `id`'s text `from` → `to`. */\nexport interface SetTextArgs {\n id: string;\n from: string;\n to: string;\n label?: string;\n coalesceKey?: string;\n}\n\n/** Op: set a text node's text content, inverting back to `from`. `coalesceKey`\n * defaults to `setText:${id}` so successive edits to the same node (typing)\n * merge into one undo entry within the history's coalesce window. Pass an\n * explicit key to opt out. */\nexport function createSetTextOp(args: SetTextArgs): Op {\n const { id, from, to, label, coalesceKey = `setText:${id}` } = args;\n return {\n name: 'setText',\n args: { id, from, to, label, coalesceKey },\n label,\n coalesceKey,\n apply(adapter) {\n (adapter as SetTextAdapter).setText(id, to);\n },\n invert() {\n return createSetTextOp({ id, from: to, to: from, label, coalesceKey });\n },\n };\n}\n\nregisterOpFactory<SetTextArgs>('setText', (args) => createSetTextOp(args));\n"],"mappings":";;AAoBA,SAAgBA,EAAgB,GAAuB;CACrD,IAAM,EAAE,OAAI,SAAM,OAAI,UAAO,iBAAc,WAAWC,QAASC;CAC/D,OAAO;EACL,MAAM;EACN,MAAM;GAAE;GAAI;GAAM;GAAI;GAAO;EAAY;EACzC;EACA;EACA,MAAM,GAAS;GACb,EAA4B,QAAQD,GAAIE,CAAE;EAC5C;EACA,SAAS;GACP,OAAOH,EAAgB;IAAE;IAAI,MAAMG;IAAI,IAAIC;IAAM;IAAO;GAAY,CAAC;EACvE;CACF;AACF;AAEAC,EAA+B,YAAY,MAASL,EAAgBE,CAAI,CAAC"}