@yuzhouu/canvas-kit 0.1.12 → 0.1.14

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 (483) hide show
  1. package/README.md +52 -238
  2. package/_vendor/canvas-core/bindings/bindingManager.d.ts +33 -0
  3. package/_vendor/canvas-core/bindings/bindingUtil.d.ts +7 -6
  4. package/_vendor/canvas-core/bindings/terminalBinding.d.ts +1 -1
  5. package/_vendor/canvas-core/editor/clipboard.d.ts +1 -1
  6. package/_vendor/canvas-core/editor/clipboardAssets.d.ts +6 -0
  7. package/_vendor/canvas-core/editor/commands/assetCommands.d.ts +7 -0
  8. package/_vendor/canvas-core/editor/commands/bindingCommands.d.ts +12 -0
  9. package/_vendor/canvas-core/editor/{commands.d.ts → commands/commandTypes.d.ts} +4 -8
  10. package/_vendor/canvas-core/editor/commands/commands.d.ts +5 -0
  11. package/_vendor/canvas-core/editor/commands/documentCommands.d.ts +9 -0
  12. package/_vendor/canvas-core/editor/commands/sessionCommands.d.ts +13 -0
  13. package/_vendor/canvas-core/editor/commands/shapeCommands.d.ts +9 -0
  14. package/_vendor/canvas-core/editor/commands/shapeFlags.d.ts +10 -0
  15. package/_vendor/canvas-core/editor/commands/shapeRemoval.d.ts +10 -0
  16. package/_vendor/canvas-core/editor/commands/shapeRepair.d.ts +11 -0
  17. package/_vendor/canvas-core/editor/createEditor.d.ts +6 -0
  18. package/_vendor/canvas-core/editor/editor.d.ts +310 -538
  19. package/_vendor/canvas-core/editor/events/canvasNavigationInteraction.d.ts +2 -0
  20. package/_vendor/canvas-core/editor/events/eventRouter.d.ts +16 -0
  21. package/_vendor/canvas-core/editor/{events.d.ts → events/events.d.ts} +18 -8
  22. package/_vendor/canvas-core/editor/{managers → events}/inputsManager.d.ts +6 -4
  23. package/_vendor/canvas-core/editor/{interactions.d.ts → events/interactions.d.ts} +12 -12
  24. package/_vendor/canvas-core/editor/events/keyboardShortcuts.d.ts +23 -0
  25. package/_vendor/canvas-core/editor/events/pointerClickRecognizer.d.ts +11 -0
  26. package/_vendor/canvas-core/editor/history/historyManager.d.ts +40 -0
  27. package/_vendor/canvas-core/editor/{operationManager.d.ts → history/operationManager.d.ts} +21 -18
  28. package/_vendor/canvas-core/editor/queries/bindingQueryCache.d.ts +28 -0
  29. package/_vendor/canvas-core/editor/queries/bindingQueryState.d.ts +11 -0
  30. package/_vendor/canvas-core/editor/queries/draftBindingIndex.d.ts +19 -0
  31. package/_vendor/canvas-core/editor/queries/shapeGeometryQueryCache.d.ts +34 -0
  32. package/_vendor/canvas-core/editor/queries/shapeTransforms.d.ts +15 -19
  33. package/_vendor/canvas-core/editor/queries/shapeTreeIndex.d.ts +27 -0
  34. package/_vendor/canvas-core/editor/queries/shapeTreeIndexState.d.ts +11 -0
  35. package/_vendor/canvas-core/editor/{managers → queries}/spatialIndexManager.d.ts +5 -3
  36. package/_vendor/canvas-core/editor/records/documentSnapshots.d.ts +14 -0
  37. package/_vendor/canvas-core/editor/records/editorRecordFactory.d.ts +19 -0
  38. package/_vendor/canvas-core/editor/records/recordQueries.d.ts +3 -0
  39. package/_vendor/canvas-core/editor/{resizeGeometry.d.ts → selection/resizeGeometry.d.ts} +22 -2
  40. package/_vendor/canvas-core/editor/{selection.d.ts → selection/selection.d.ts} +4 -30
  41. package/_vendor/canvas-core/editor/{managers → selection}/selectionGeometry.d.ts +2 -2
  42. package/_vendor/canvas-core/editor/selection/selectionHandleHitTest.d.ts +8 -0
  43. package/_vendor/canvas-core/editor/selection/selectionLayout.d.ts +20 -0
  44. package/_vendor/canvas-core/editor/selection/selectionOverlay.d.ts +25 -0
  45. package/_vendor/canvas-core/editor/selection/selectionOverlayEquality.d.ts +8 -0
  46. package/_vendor/canvas-core/editor/selection/selectionOverlayManager.d.ts +34 -0
  47. package/_vendor/canvas-core/editor/{selectionResizeCapabilities.d.ts → selection/selectionResizeCapabilities.d.ts} +4 -2
  48. package/_vendor/canvas-core/editor/selection/selectionSet.d.ts +9 -0
  49. package/_vendor/canvas-core/editor/selection/selectionTargets.d.ts +10 -0
  50. package/_vendor/canvas-core/editor/selection/selectionTransforms.d.ts +6 -0
  51. package/_vendor/canvas-core/editor/shapes/shapeContainment.d.ts +14 -0
  52. package/_vendor/canvas-core/editor/{managers → shapes}/shapeEditingManager.d.ts +2 -2
  53. package/_vendor/canvas-core/editor/shapes/shapeExportTraversal.d.ts +3 -0
  54. package/_vendor/canvas-core/editor/shapes/shapeGeometry.d.ts +21 -0
  55. package/_vendor/canvas-core/editor/shapes/shapeGrouping.d.ts +22 -0
  56. package/_vendor/canvas-core/editor/{managers → shapes}/shapeOrder.d.ts +20 -2
  57. package/_vendor/canvas-core/editor/shapes/shapeReparenting.d.ts +21 -0
  58. package/_vendor/canvas-core/editor/shapes/shapeSignalManager.d.ts +35 -0
  59. package/_vendor/canvas-core/editor/{shapeTransformSpace.d.ts → shapes/shapeTransformSpace.d.ts} +3 -3
  60. package/_vendor/canvas-core/editor/shapes/shapeTreeQueries.d.ts +12 -0
  61. package/_vendor/canvas-core/editor/snapping/gapSnap.d.ts +6 -0
  62. package/_vendor/canvas-core/editor/snapping/pointSnap.d.ts +5 -0
  63. package/_vendor/canvas-core/editor/snapping/resizeSnap.d.ts +11 -0
  64. package/_vendor/canvas-core/editor/snapping/snapDecision.d.ts +2 -0
  65. package/_vendor/canvas-core/editor/{managers → snapping}/snapGeometry.d.ts +0 -1
  66. package/_vendor/canvas-core/editor/{managers → snapping}/snapIndicators.d.ts +2 -2
  67. package/_vendor/canvas-core/editor/{managers → snapping}/snapManager.d.ts +23 -5
  68. package/_vendor/canvas-core/editor/{managers/snapCalculations.d.ts → snapping/snapResults.d.ts} +2 -17
  69. package/_vendor/canvas-core/editor/{managers → snapping}/snapTypes.d.ts +1 -1
  70. package/_vendor/canvas-core/editor/state/editorReadModels.d.ts +34 -0
  71. package/_vendor/canvas-core/editor/state/editorSignals.d.ts +82 -0
  72. package/_vendor/canvas-core/editor/state/editorStateUtils.d.ts +9 -0
  73. package/_vendor/canvas-core/editor/{managers → state}/interactionTransientManager.d.ts +4 -4
  74. package/_vendor/canvas-core/editor/{managers → viewport}/cameraManager.d.ts +21 -4
  75. package/_vendor/canvas-core/editor/{cameraPanSession.d.ts → viewport/cameraPanSession.d.ts} +3 -3
  76. package/_vendor/canvas-core/editor/{edgeScroll.d.ts → viewport/edgeScroll.d.ts} +1 -1
  77. package/_vendor/canvas-core/editor/{renderWindow.d.ts → viewport/renderWindow.d.ts} +8 -8
  78. package/_vendor/canvas-core/editor/{managers → viewport}/renderWindowManager.d.ts +14 -6
  79. package/_vendor/canvas-core/geometry/box.d.ts +1 -0
  80. package/_vendor/canvas-core/geometry/mat.d.ts +2 -3
  81. package/_vendor/canvas-core/index.d.ts +33 -26
  82. package/_vendor/canvas-core/plugins/editorRuntimePlugin.d.ts +2 -5
  83. package/_vendor/canvas-core/plugins/editorRuntimeRegistry.d.ts +0 -4
  84. package/_vendor/canvas-core/plugins/index.d.ts +1 -1
  85. package/_vendor/canvas-core/reactivity.d.ts +2 -0
  86. package/_vendor/canvas-core/schema/records.d.ts +1 -2
  87. package/_vendor/canvas-core/schema/snapshots.d.ts +2 -2
  88. package/_vendor/canvas-core/shapes/childTransformPolicy.d.ts +16 -0
  89. package/_vendor/canvas-core/shapes/shapeUtil.d.ts +9 -8
  90. package/_vendor/canvas-core/shapes/shapeUtilGeometry.d.ts +6 -0
  91. package/_vendor/canvas-core/tools/hand/handTool.d.ts +1 -1
  92. package/_vendor/canvas-core/tools/select/selectTool.d.ts +1 -1
  93. package/_vendor/canvas-core/tools/select/selectToolHelpers.d.ts +11 -12
  94. package/_vendor/canvas-core/tools/select/states/brushingState.d.ts +2 -2
  95. package/_vendor/canvas-core/tools/select/states/draggingPluginInteractionState.d.ts +2 -3
  96. package/_vendor/canvas-core/tools/select/states/idleState.d.ts +2 -2
  97. package/_vendor/canvas-core/tools/select/states/pointingCanvasState.d.ts +2 -2
  98. package/_vendor/canvas-core/tools/select/states/pointingResizeHandleState.d.ts +1 -1
  99. package/_vendor/canvas-core/tools/select/states/pointingRotateHandleState.d.ts +1 -1
  100. package/_vendor/canvas-core/tools/select/states/pointingSelectionHandleInteractionState.d.ts +3 -3
  101. package/_vendor/canvas-core/tools/select/states/pointingShapeState.d.ts +3 -3
  102. package/_vendor/canvas-core/tools/select/states/resizingState.d.ts +3 -3
  103. package/_vendor/canvas-core/tools/select/states/rotatingState.d.ts +3 -3
  104. package/_vendor/canvas-core/tools/select/states/selectStateNode.d.ts +8 -12
  105. package/_vendor/canvas-core/tools/select/states/translatingState.d.ts +2 -3
  106. package/_vendor/canvas-core/tools/stateNode.d.ts +30 -0
  107. package/_vendor/canvas-core/tools/toolManager.d.ts +24 -0
  108. package/_vendor/canvas-core/utils/equality.d.ts +9 -0
  109. package/_vendor/canvas-extension-contracts/contributions.d.ts +92 -0
  110. package/_vendor/canvas-extension-contracts/index.d.ts +6 -0
  111. package/_vendor/canvas-extension-contracts/operations.d.ts +131 -0
  112. package/_vendor/canvas-extension-contracts/persistence.d.ts +16 -0
  113. package/_vendor/canvas-extension-contracts/plugin.d.ts +37 -0
  114. package/_vendor/canvas-extension-contracts/shape.d.ts +5 -0
  115. package/_vendor/canvas-extension-contracts/tokens.d.ts +12 -0
  116. package/_vendor/canvas-react/components/CanvasView.d.ts +3 -10
  117. package/_vendor/canvas-react/components/DefaultGrid.d.ts +1 -0
  118. package/_vendor/canvas-react/components/canvasKeyboardEvents.d.ts +2 -2
  119. package/_vendor/canvas-react/components/index.d.ts +1 -0
  120. package/_vendor/canvas-react/components/shape-layer/ShapeClipStack.d.ts +11 -0
  121. package/_vendor/canvas-react/components/shape-layer/ShapeDecorations.d.ts +2 -0
  122. package/_vendor/canvas-react/components/shape-layer/ShapeForegroundItem.d.ts +5 -0
  123. package/_vendor/canvas-react/components/shape-layer/ShapeItem.d.ts +5 -0
  124. package/_vendor/canvas-react/components/shape-layer/ShapeRenderList.d.ts +1 -0
  125. package/_vendor/canvas-react/components/shape-layer/ShapeRenderer.d.ts +12 -0
  126. package/_vendor/canvas-react/components/shape-layer/shapeFrame.d.ts +11 -0
  127. package/_vendor/canvas-react/components/useCanvasDomEvents.d.ts +2 -2
  128. package/_vendor/canvas-react/dom.d.ts +1 -1
  129. package/_vendor/canvas-react/host/canvasRenderBindings.d.ts +21 -0
  130. package/_vendor/canvas-react/host/canvasRenderBindingsContext.d.ts +5 -0
  131. package/_vendor/canvas-react/host/canvasRenderPlugin.d.ts +3 -12
  132. package/_vendor/canvas-react/host/index.d.ts +4 -7
  133. package/_vendor/canvas-react/index.d.ts +1 -1
  134. package/_vendor/signals/atom.d.ts +7 -5
  135. package/_vendor/signals/computed.d.ts +10 -8
  136. package/_vendor/signals/core.d.ts +32 -15
  137. package/_vendor/signals/effect.d.ts +2 -22
  138. package/_vendor/signals/index.d.ts +6 -7
  139. package/_vendor/signals/types.d.ts +14 -7
  140. package/_vendor/store/diff.d.ts +1 -1
  141. package/_vendor/store/history.d.ts +6 -21
  142. package/_vendor/store/index.d.ts +4 -4
  143. package/_vendor/store/store.d.ts +19 -17
  144. package/browser/indexedDb.d.ts +0 -4
  145. package/browser/persistence.d.ts +3 -3
  146. package/browser/persistenceFlushEvents.d.ts +2 -0
  147. package/chrome/floating/CanvasKitFloatingContent.d.ts +10 -0
  148. package/chrome/floating/CanvasKitFloatingPortal.d.ts +1 -0
  149. package/chrome/floating/useCanvasKitFloatingPosition.d.ts +5 -3
  150. package/chrome/toolbar/FloatingSelectionToolbarPageSpace.d.ts +7 -3
  151. package/index.css +1 -1
  152. package/index.d.ts +16 -45
  153. package/index.mjs +46 -88
  154. package/package.json +3 -15
  155. package/react/CanvasKitContext.d.ts +8 -0
  156. package/react/CanvasKitRoot.d.ts +2 -10
  157. package/react/canvasActions.d.ts +3 -0
  158. package/react/canvasKitRootContracts.d.ts +19 -0
  159. package/react/host/CanvasKitCanvasHost.d.ts +7 -0
  160. package/react/host/import/CanvasImportHost.d.ts +13 -0
  161. package/react/host/keyboard/useCanvasKeyboardShortcuts.d.ts +8 -0
  162. package/react/reportCanvasHostError.d.ts +1 -0
  163. package/react/useCanvasKitRootRuntime.d.ts +12 -0
  164. package/runtime/activateCanvasPlugins.d.ts +16 -0
  165. package/runtime/canvasExportController.d.ts +11 -0
  166. package/runtime/canvasKit.d.ts +3 -0
  167. package/runtime/canvasKitContracts.d.ts +192 -0
  168. package/runtime/canvasKitRootRuntime.d.ts +17 -0
  169. package/runtime/canvasPluginGraph.d.ts +5 -11
  170. package/runtime/canvasRuntimeInitialization.d.ts +12 -0
  171. package/runtime/canvasRuntimeOwner.d.ts +16 -0
  172. package/runtime/createCanvasKitEditor.d.ts +8 -0
  173. package/runtime/facade/canvasProductData.d.ts +14 -0
  174. package/runtime/facade/canvasReadable.d.ts +13 -0
  175. package/runtime/facade/createCanvasKitFacade.d.ts +17 -0
  176. package/runtime/facade/layerTree.d.ts +12 -0
  177. package/runtime/persistenceCoordinator.d.ts +22 -5
  178. package/runtime/registries/productApiRegistry.d.ts +12 -3
  179. package/_vendor/canvas-core/editor/bindingReactionScope.d.ts +0 -7
  180. package/_vendor/canvas-core/editor/canvasPanInteraction.d.ts +0 -2
  181. package/_vendor/canvas-core/editor/createEditorWithPlugins.d.ts +0 -6
  182. package/_vendor/canvas-core/editor/editorComputedHelpers.d.ts +0 -24
  183. package/_vendor/canvas-core/editor/editorSelectionTransforms.d.ts +0 -6
  184. package/_vendor/canvas-core/editor/historyManager.d.ts +0 -36
  185. package/_vendor/canvas-core/editor/index.d.ts +0 -11
  186. package/_vendor/canvas-core/editor/managers/bindingManager.d.ts +0 -23
  187. package/_vendor/canvas-core/editor/managers/clipboardManager.d.ts +0 -14
  188. package/_vendor/canvas-core/editor/managers/documentSnapshotManager.d.ts +0 -28
  189. package/_vendor/canvas-core/editor/managers/queryManager.d.ts +0 -102
  190. package/_vendor/canvas-core/editor/managers/queryState.d.ts +0 -18
  191. package/_vendor/canvas-core/editor/managers/selectionLayoutManager.d.ts +0 -34
  192. package/_vendor/canvas-core/editor/managers/selectionManager.d.ts +0 -21
  193. package/_vendor/canvas-core/editor/managers/selectionOverlayManager.d.ts +0 -25
  194. package/_vendor/canvas-core/editor/managers/shapeGeometryManager.d.ts +0 -43
  195. package/_vendor/canvas-core/editor/managers/shapeHierarchyManager.d.ts +0 -63
  196. package/_vendor/canvas-core/editor/managers/shapeReparenting.d.ts +0 -7
  197. package/_vendor/canvas-core/editor/managers/shortcutManager.d.ts +0 -56
  198. package/_vendor/canvas-core/editor/managers/sideEffectManager.d.ts +0 -23
  199. package/_vendor/canvas-core/editor/managers/toolManager.d.ts +0 -24
  200. package/_vendor/canvas-core/editor/selectionHandleInteractions.d.ts +0 -11
  201. package/_vendor/canvas-core/editor/selectionOverlay.d.ts +0 -35
  202. package/_vendor/canvas-core/editor/stateNode.d.ts +0 -31
  203. package/_vendor/canvas-core/shapes/capabilities.d.ts +0 -25
  204. package/_vendor/canvas-core/tools/index.d.ts +0 -2
  205. package/_vendor/canvas-plugin-sdk/capability.d.ts +0 -10
  206. package/_vendor/canvas-plugin-sdk/index.d.ts +0 -3
  207. package/_vendor/canvas-plugin-sdk/plugin.d.ts +0 -29
  208. package/_vendor/canvas-plugin-sdk/setupExtension.d.ts +0 -5
  209. package/_vendor/canvas-product-contracts/actionRegistry.d.ts +0 -4
  210. package/_vendor/canvas-product-contracts/actions.d.ts +0 -44
  211. package/_vendor/canvas-product-contracts/capability.d.ts +0 -8
  212. package/_vendor/canvas-product-contracts/chrome.d.ts +0 -53
  213. package/_vendor/canvas-product-contracts/chromeRegistry.d.ts +0 -9
  214. package/_vendor/canvas-product-contracts/contextMenu.d.ts +0 -63
  215. package/_vendor/canvas-product-contracts/contextMenuRegistry.d.ts +0 -4
  216. package/_vendor/canvas-product-contracts/exportRegistry.d.ts +0 -6
  217. package/_vendor/canvas-product-contracts/exports.d.ts +0 -27
  218. package/_vendor/canvas-product-contracts/importRegistry.d.ts +0 -7
  219. package/_vendor/canvas-product-contracts/imports.d.ts +0 -39
  220. package/_vendor/canvas-product-contracts/index.d.ts +0 -15
  221. package/_vendor/canvas-product-contracts/productApi.d.ts +0 -29
  222. package/_vendor/canvas-product-contracts/services.d.ts +0 -21
  223. package/_vendor/canvas-product-contracts/toolbar.d.ts +0 -146
  224. package/_vendor/canvas-product-contracts/toolbarRegistry.d.ts +0 -9
  225. package/_vendor/canvas-react/host/canvasOverlayRegistryContext.d.ts +0 -3
  226. package/_vendor/canvas-react/host/canvasRenderRuntime.d.ts +0 -13
  227. package/_vendor/canvas-react/host/canvasRendererRegistryContext.d.ts +0 -3
  228. package/_vendor/canvas-react/host/domEventGuards.d.ts +0 -11
  229. package/_vendor/canvas-react/host/overlayRegistry.d.ts +0 -18
  230. package/_vendor/canvas-react/host/rendererRegistry.d.ts +0 -15
  231. package/_vendor/plugin-arrow/api.d.ts +0 -33
  232. package/_vendor/plugin-arrow/arrowBindingAnchors.d.ts +0 -5
  233. package/_vendor/plugin-arrow/arrowBindingGeometry.d.ts +0 -28
  234. package/_vendor/plugin-arrow/arrowBindingTargets.d.ts +0 -3
  235. package/_vendor/plugin-arrow/arrowBindingUtil.d.ts +0 -27
  236. package/_vendor/plugin-arrow/arrowGeometry.d.ts +0 -77
  237. package/_vendor/plugin-arrow/arrowHeadGeometry.d.ts +0 -8
  238. package/_vendor/plugin-arrow/arrowShapeUtil.d.ts +0 -25
  239. package/_vendor/plugin-arrow/arrowTerminalBindingResolver.d.ts +0 -20
  240. package/_vendor/plugin-arrow/arrowTerminalCommands.d.ts +0 -13
  241. package/_vendor/plugin-arrow/arrowTool.d.ts +0 -4
  242. package/_vendor/plugin-arrow/canvasRender.d.ts +0 -2
  243. package/_vendor/plugin-arrow/editorRuntime.d.ts +0 -7
  244. package/_vendor/plugin-arrow/feature.d.ts +0 -2
  245. package/_vendor/plugin-arrow/index.d.ts +0 -15
  246. package/_vendor/plugin-arrow/productRuntime.d.ts +0 -2
  247. package/_vendor/plugin-arrow/selectionHandleInteractions.d.ts +0 -3
  248. package/_vendor/plugin-arrow/types.d.ts +0 -31
  249. package/_vendor/plugin-draw/DrawShapeRenderer.d.ts +0 -13
  250. package/_vendor/plugin-draw/canvasRender.d.ts +0 -2
  251. package/_vendor/plugin-draw/drawGeometry.d.ts +0 -42
  252. package/_vendor/plugin-draw/drawHitTest.d.ts +0 -11
  253. package/_vendor/plugin-draw/drawInterpolation.d.ts +0 -5
  254. package/_vendor/plugin-draw/drawPath.d.ts +0 -43
  255. package/_vendor/plugin-draw/drawSegments.d.ts +0 -11
  256. package/_vendor/plugin-draw/drawSelectionTransform.d.ts +0 -18
  257. package/_vendor/plugin-draw/drawShapeGeometry.d.ts +0 -33
  258. package/_vendor/plugin-draw/drawShapeUtil.d.ts +0 -22
  259. package/_vendor/plugin-draw/drawStrokeGeometry.d.ts +0 -17
  260. package/_vendor/plugin-draw/drawTool.d.ts +0 -6
  261. package/_vendor/plugin-draw/editorRuntime.d.ts +0 -7
  262. package/_vendor/plugin-draw/feature.d.ts +0 -2
  263. package/_vendor/plugin-draw/index.d.ts +0 -14
  264. package/_vendor/plugin-draw/productRuntime.d.ts +0 -2
  265. package/_vendor/plugin-draw/types.d.ts +0 -23
  266. package/_vendor/plugin-eraser/canvasRender.d.ts +0 -2
  267. package/_vendor/plugin-eraser/editorRuntime.d.ts +0 -2
  268. package/_vendor/plugin-eraser/eraserRuntime.d.ts +0 -12
  269. package/_vendor/plugin-eraser/eraserTool.d.ts +0 -5
  270. package/_vendor/plugin-eraser/feature.d.ts +0 -2
  271. package/_vendor/plugin-eraser/index.d.ts +0 -6
  272. package/_vendor/plugin-eraser/productRuntime.d.ts +0 -2
  273. package/_vendor/plugin-frame/api.d.ts +0 -19
  274. package/_vendor/plugin-frame/canvasRender.d.ts +0 -9
  275. package/_vendor/plugin-frame/editorRuntime.d.ts +0 -7
  276. package/_vendor/plugin-frame/feature.d.ts +0 -2
  277. package/_vendor/plugin-frame/frameShapeUtil.d.ts +0 -35
  278. package/_vendor/plugin-frame/frameTool.d.ts +0 -6
  279. package/_vendor/plugin-frame/index.d.ts +0 -9
  280. package/_vendor/plugin-frame/productRuntime.d.ts +0 -2
  281. package/_vendor/plugin-geo/api.d.ts +0 -27
  282. package/_vendor/plugin-geo/canvasRender.d.ts +0 -13
  283. package/_vendor/plugin-geo/editorRuntime.d.ts +0 -7
  284. package/_vendor/plugin-geo/feature.d.ts +0 -2
  285. package/_vendor/plugin-geo/geoGeometry.d.ts +0 -24
  286. package/_vendor/plugin-geo/geoShapeUtil.d.ts +0 -14
  287. package/_vendor/plugin-geo/geoStrokeStyle.d.ts +0 -2
  288. package/_vendor/plugin-geo/geoTools.d.ts +0 -27
  289. package/_vendor/plugin-geo/index.d.ts +0 -10
  290. package/_vendor/plugin-geo/productRuntime.d.ts +0 -2
  291. package/_vendor/plugin-geo/types.d.ts +0 -22
  292. package/_vendor/plugin-group/canvasRender.d.ts +0 -9
  293. package/_vendor/plugin-group/editorRuntime.d.ts +0 -7
  294. package/_vendor/plugin-group/feature.d.ts +0 -2
  295. package/_vendor/plugin-group/groupContributions.d.ts +0 -7
  296. package/_vendor/plugin-group/groupShapeUtil.d.ts +0 -35
  297. package/_vendor/plugin-group/index.d.ts +0 -7
  298. package/_vendor/plugin-group/productRuntime.d.ts +0 -2
  299. package/_vendor/plugin-image/actionIds.d.ts +0 -9
  300. package/_vendor/plugin-image/canvasRender.d.ts +0 -2
  301. package/_vendor/plugin-image/cornerRadius.d.ts +0 -6
  302. package/_vendor/plugin-image/crop.d.ts +0 -112
  303. package/_vendor/plugin-image/cropInteractions.d.ts +0 -3
  304. package/_vendor/plugin-image/cropRuntime.d.ts +0 -2
  305. package/_vendor/plugin-image/cropSession.d.ts +0 -6
  306. package/_vendor/plugin-image/editorRuntime.d.ts +0 -3
  307. package/_vendor/plugin-image/feature.d.ts +0 -2
  308. package/_vendor/plugin-image/imageHostActionContract.d.ts +0 -2
  309. package/_vendor/plugin-image/imageShapeUtil.d.ts +0 -13
  310. package/_vendor/plugin-image/imageSvgExporter.d.ts +0 -6
  311. package/_vendor/plugin-image/index.d.ts +0 -13
  312. package/_vendor/plugin-image/productRuntime.d.ts +0 -4
  313. package/_vendor/plugin-image/runtimeShared.d.ts +0 -5
  314. package/_vendor/plugin-image/smudge.d.ts +0 -67
  315. package/_vendor/plugin-image/smudgeInteractions.d.ts +0 -2
  316. package/_vendor/plugin-image/smudgeRuntime.d.ts +0 -2
  317. package/_vendor/plugin-image/styleRuntime.d.ts +0 -22
  318. package/_vendor/plugin-image/toolbarRuntime.d.ts +0 -3
  319. package/_vendor/plugin-image/types.d.ts +0 -53
  320. package/_vendor/plugin-laser/canvasRender.d.ts +0 -2
  321. package/_vendor/plugin-laser/editorRuntime.d.ts +0 -2
  322. package/_vendor/plugin-laser/feature.d.ts +0 -2
  323. package/_vendor/plugin-laser/index.d.ts +0 -6
  324. package/_vendor/plugin-laser/laserRuntime.d.ts +0 -18
  325. package/_vendor/plugin-laser/laserTool.d.ts +0 -4
  326. package/_vendor/plugin-laser/productRuntime.d.ts +0 -2
  327. package/_vendor/plugin-path/PathDraftOverlay.d.ts +0 -1
  328. package/_vendor/plugin-path/PathEditInsertPreviewOverlay.d.ts +0 -1
  329. package/_vendor/plugin-path/PathShapeRenderer.d.ts +0 -15
  330. package/_vendor/plugin-path/canvasRender.d.ts +0 -2
  331. package/_vendor/plugin-path/editorRuntime.d.ts +0 -7
  332. package/_vendor/plugin-path/feature.d.ts +0 -2
  333. package/_vendor/plugin-path/index.d.ts +0 -8
  334. package/_vendor/plugin-path/pathBoolean.d.ts +0 -13
  335. package/_vendor/plugin-path/pathDraft.d.ts +0 -10
  336. package/_vendor/plugin-path/pathEditPreview.d.ts +0 -11
  337. package/_vendor/plugin-path/pathEditSelection.d.ts +0 -24
  338. package/_vendor/plugin-path/pathEditSnap.d.ts +0 -6
  339. package/_vendor/plugin-path/pathGeometry.d.ts +0 -74
  340. package/_vendor/plugin-path/pathHandles.d.ts +0 -18
  341. package/_vendor/plugin-path/pathHistory.d.ts +0 -13
  342. package/_vendor/plugin-path/pathInteractions.d.ts +0 -7
  343. package/_vendor/plugin-path/pathShapeUtil.d.ts +0 -30
  344. package/_vendor/plugin-path/pathSvg.d.ts +0 -3
  345. package/_vendor/plugin-path/pathTool.d.ts +0 -42
  346. package/_vendor/plugin-path/productRuntime.d.ts +0 -15
  347. package/_vendor/plugin-path/types.d.ts +0 -36
  348. package/_vendor/plugin-runtime-clipboard/capability.d.ts +0 -1
  349. package/_vendor/plugin-runtime-clipboard/clipboardActions.d.ts +0 -6
  350. package/_vendor/plugin-runtime-clipboard/clipboardService.d.ts +0 -10
  351. package/_vendor/plugin-runtime-clipboard/index.d.ts +0 -4
  352. package/_vendor/plugin-runtime-clipboard/plugin.d.ts +0 -1
  353. package/_vendor/plugin-runtime-export/blobDataUrl.d.ts +0 -1
  354. package/_vendor/plugin-runtime-export/canvasExportApi.d.ts +0 -43
  355. package/_vendor/plugin-runtime-export/index.d.ts +0 -8
  356. package/_vendor/plugin-runtime-export/plugin.d.ts +0 -5
  357. package/_vendor/plugin-runtime-export/pngExport.d.ts +0 -15
  358. package/_vendor/plugin-runtime-export/svgExport.d.ts +0 -40
  359. package/_vendor/plugin-text/api.d.ts +0 -20
  360. package/_vendor/plugin-text/canvasRender.d.ts +0 -8
  361. package/_vendor/plugin-text/capabilities.d.ts +0 -2
  362. package/_vendor/plugin-text/editorRuntime.d.ts +0 -5
  363. package/_vendor/plugin-text/feature.d.ts +0 -4
  364. package/_vendor/plugin-text/geoLabelBindingUtil.d.ts +0 -48
  365. package/_vendor/plugin-text/host/RichTextEditingBox.d.ts +0 -10
  366. package/_vendor/plugin-text/host/TiptapTextEditor.d.ts +0 -29
  367. package/_vendor/plugin-text/host/initialTextBackground.d.ts +0 -2
  368. package/_vendor/plugin-text/host/richTextRendering.d.ts +0 -10
  369. package/_vendor/plugin-text/host/textDomSelection.d.ts +0 -7
  370. package/_vendor/plugin-text/host/textEditingBoxStyle.d.ts +0 -4
  371. package/_vendor/plugin-text/host/textEntryFocus.d.ts +0 -23
  372. package/_vendor/plugin-text/host/textFontLoader.d.ts +0 -3
  373. package/_vendor/plugin-text/host/textFormattingApi.d.ts +0 -16
  374. package/_vendor/plugin-text/host/textMeasurement.d.ts +0 -21
  375. package/_vendor/plugin-text/host/textMeasurementSync.d.ts +0 -11
  376. package/_vendor/plugin-text/host/textRangeSelection.d.ts +0 -14
  377. package/_vendor/plugin-text/host/textShapeRendererRuntime.d.ts +0 -11
  378. package/_vendor/plugin-text/host/textShapeSync.d.ts +0 -19
  379. package/_vendor/plugin-text/host/tiptapTextEditorController.d.ts +0 -38
  380. package/_vendor/plugin-text/index.d.ts +0 -15
  381. package/_vendor/plugin-text/pathLabelBindingUtil.d.ts +0 -55
  382. package/_vendor/plugin-text/productRuntime.d.ts +0 -6
  383. package/_vendor/plugin-text/richTextLinks.d.ts +0 -3
  384. package/_vendor/plugin-text/richTextUtils.d.ts +0 -26
  385. package/_vendor/plugin-text/shapeWideTextFormatting.d.ts +0 -12
  386. package/_vendor/plugin-text/textFonts.d.ts +0 -49
  387. package/_vendor/plugin-text/textFormatting.d.ts +0 -47
  388. package/_vendor/plugin-text/textFormattingSession.d.ts +0 -6
  389. package/_vendor/plugin-text/textInteractions.d.ts +0 -2
  390. package/_vendor/plugin-text/textLabelHelpers.d.ts +0 -70
  391. package/_vendor/plugin-text/textLinkPopoverPresentation.d.ts +0 -18
  392. package/_vendor/plugin-text/textShapeHelpers.d.ts +0 -22
  393. package/_vendor/plugin-text/textShapeSvgExporter.d.ts +0 -9
  394. package/_vendor/plugin-text/textShapeUtil.d.ts +0 -24
  395. package/_vendor/plugin-text/textStyle.d.ts +0 -18
  396. package/_vendor/plugin-text/textTool.d.ts +0 -4
  397. package/_vendor/plugin-text/textTypes.d.ts +0 -29
  398. package/chrome/toolbar/mergeToolbarGroups.d.ts +0 -8
  399. package/chrome/toolbar/toolbarLabels.d.ts +0 -8
  400. package/chrome/toolbar/useToolbarSurfaces.d.ts +0 -21
  401. package/chrome/types.d.ts +0 -72
  402. package/chrome/useCanvasKitChromeContext.d.ts +0 -18
  403. package/chrome/useCanvasKitLayerTree.d.ts +0 -5
  404. package/chrome/useChromeSurfaces.d.ts +0 -12
  405. package/chrome/useContextMenuSurface.d.ts +0 -12
  406. package/chrome/useHistoryControls.d.ts +0 -12
  407. package/chrome/usePageControls.d.ts +0 -16
  408. package/chrome/useZoomControls.d.ts +0 -9
  409. package/controller/canvasKitController.d.ts +0 -28
  410. package/core/index.d.ts +0 -7
  411. package/core/product-controller/canvasProductController.d.ts +0 -202
  412. package/core/product-controller/index.d.ts +0 -2
  413. package/core/product-controller/productLayerTree.d.ts +0 -10
  414. package/core/runtime/productAssets.d.ts +0 -20
  415. package/core/runtime/productEditor.d.ts +0 -3
  416. package/core/runtime/productServices.d.ts +0 -20
  417. package/core/runtime/runtimeContracts.d.ts +0 -17
  418. package/features/context-menu/contextMenuRuntime.d.ts +0 -13
  419. package/features/image/asset/imageAssetService.d.ts +0 -10
  420. package/features/image/asset/imageBlobStore.d.ts +0 -31
  421. package/features/image/asset/imageFileHelpers.d.ts +0 -43
  422. package/features/image/asset/svgImageAssetInliner.d.ts +0 -3
  423. package/features/image/controller/imageProductController.d.ts +0 -27
  424. package/features/image/imageHostPlugin.d.ts +0 -1
  425. package/features/image/import/ImageImportController.d.ts +0 -11
  426. package/features/image/index.d.ts +0 -15
  427. package/features/image/smudge/imageSmudgeHostActions.d.ts +0 -10
  428. package/features/image/smudge/imageSmudgeTypes.d.ts +0 -25
  429. package/features/image/toolbar/imageHostActions.d.ts +0 -79
  430. package/features/image/toolbar/imageToolbarHostBridge.d.ts +0 -14
  431. package/features/text/link/TextLinkHoverPopover.d.ts +0 -6
  432. package/features/text/textHostPlugin.d.ts +0 -5
  433. package/features/text/textSvgAssetInliner.d.ts +0 -3
  434. package/features/text/textSvgAssetPlugin.d.ts +0 -2
  435. package/plugins/runtime/import-host/CanvasImportHost.d.ts +0 -4
  436. package/plugins/runtime/import-host/capability.d.ts +0 -1
  437. package/plugins/runtime/import-host/index.d.ts +0 -2
  438. package/plugins/runtime/import-host/plugin.d.ts +0 -1
  439. package/plugins/runtime/keyboard-shortcuts/index.d.ts +0 -1
  440. package/plugins/runtime/keyboard-shortcuts/plugin.d.ts +0 -1
  441. package/plugins/runtime/keyboard-shortcuts/useCanvasKeyboardShortcuts.d.ts +0 -8
  442. package/plugins/runtime/tool-actions/capability.d.ts +0 -1
  443. package/plugins/runtime/tool-actions/index.d.ts +0 -2
  444. package/plugins/runtime/tool-actions/plugin.d.ts +0 -1
  445. package/plugins/runtime/tool-actions/toolActions.d.ts +0 -2
  446. package/plugins/standard/clipboard/chrome.d.ts +0 -2
  447. package/plugins/standard/clipboard/contextMenu.d.ts +0 -2
  448. package/plugins/standard/clipboard/plugin.d.ts +0 -1
  449. package/plugins/standard/clipboard/shortcuts.d.ts +0 -5
  450. package/plugins/standard/createStandardCanvasKitPlugins.d.ts +0 -15
  451. package/plugins/standard/selection/actions.d.ts +0 -21
  452. package/plugins/standard/selection/chrome.d.ts +0 -2
  453. package/plugins/standard/selection/contextMenu.d.ts +0 -2
  454. package/plugins/standard/selection/plugin.d.ts +0 -1
  455. package/plugins/standard/selection/toolbar.d.ts +0 -2
  456. package/plugins/standard/tool-ui/contextMenu.d.ts +0 -2
  457. package/plugins/standard/tool-ui/plugin.d.ts +0 -1
  458. package/plugins/standard/tool-ui/toolbar.d.ts +0 -2
  459. package/plugins/standard/view/actions.d.ts +0 -5
  460. package/plugins/standard/view/chrome.d.ts +0 -2
  461. package/plugins/standard/view/contextMenu.d.ts +0 -2
  462. package/plugins/standard/view/plugin.d.ts +0 -1
  463. package/react/useCanvasKitControllerLifecycle.d.ts +0 -8
  464. package/react/useCanvasKitRuntime.d.ts +0 -2
  465. package/runtime/canvasKitActionContext.d.ts +0 -17
  466. package/runtime/canvasKitCommandExecutor.d.ts +0 -13
  467. package/runtime/canvasKitPluginContracts.d.ts +0 -32
  468. package/runtime/canvasKitPluginLifecycle.d.ts +0 -32
  469. package/runtime/canvasKitPluginSetup.d.ts +0 -34
  470. package/runtime/canvasKitPluginUi.d.ts +0 -35
  471. package/runtime/canvasKitResourceScope.d.ts +0 -5
  472. package/runtime/canvasKitRuntime.d.ts +0 -50
  473. package/runtime/canvasKitRuntimeContracts.d.ts +0 -34
  474. package/runtime/registries/actionRegistry.d.ts +0 -5
  475. package/runtime/registries/chromeRegistry.d.ts +0 -2
  476. package/runtime/registries/contextMenuRegistry.d.ts +0 -5
  477. package/runtime/registries/exportRegistry.d.ts +0 -2
  478. package/runtime/registries/importRegistry.d.ts +0 -2
  479. package/runtime/registries/index.d.ts +0 -7
  480. package/runtime/registries/toolbarRegistry.d.ts +0 -5
  481. /package/_vendor/canvas-core/editor/{selectionBindingSegments.d.ts → selection/selectionBindingSegments.d.ts} +0 -0
  482. /package/_vendor/canvas-core/editor/{managers → snapping}/snapSnapshotBuilder.d.ts +0 -0
  483. /package/_vendor/canvas-core/editor/{camera.d.ts → viewport/camera.d.ts} +0 -0
package/index.mjs CHANGED
@@ -1,88 +1,46 @@
1
- function e(){return Qx}function t(){return++Qx}function n(e){if(Jx)return void e();const t={initialAtomValues:new Map};Jx=t;try{e(),s(t.initialAtomValues.keys())}catch(n){for(const[e,i]of t.initialAtomValues)e.__unsafe__setWithoutNotify(i);throw n}finally{Jx=null}}function i(e){eI={child:e,parentSet:new Set,below:eI}}function o(){if(!eI)throw new Error("Cannot stop dependency capture because no capture is active");const e=eI;return eI=e.below,e.parentSet}function r(e){eI&&(eI.parentSet.add(e),e.children.add(eI.child))}function s(e){function t(e){for(const o of e)if(!i.has(o))if(i.add(o),"effect"===o.type)n.add(o);else if("computed"===o.type){const e=o.source;e&&t(e.children)}}const n=new Set,i=new Set;for(const o of e)t(o.children);for(const o of n)o.notify()}function a(e,t,n){return new tI(e,t,n?.isEqual)}function l(e,t,n){return new iI(e,t,n?.isEqual)}function d(e){return{id:e}}function c(e={}){return{id:cI,typeName:"document",scope:"document",meta:{...e}}}function u(){return{id:uI,typeName:"page",scope:"document",name:"Page 1",index:"0001",meta:{}}}function h(e=uI){return{id:hI,typeName:"session",scope:"session",currentPageId:e,activeToolId:"select",isToolLocked:!1,editingShapeId:null,shapeEditingSession:null,pageCameraById:{[e]:{...pI}},pageSelectedShapeIdsById:{[e]:[]},meta:{}}}function p(e){return!!e&&"page"===e.typeName}function g(e){return!!e&&"document"===e.typeName}function f(e){return!!e&&"shape"===e.typeName}function m(e){return!!e&&"session"===e.typeName}function S(e){return!!e&&"binding"===e.typeName}function y(e){return!!e&&"asset"===e.typeName}function b(e){return"document"===e.scope}function x(e,t,n){return e.dist(((e,t,n)=>{const i=t.sub(e),o=n.sub(e),r=i.x*i.x+i.y*i.y;if(0===r)return e;const s=Math.max(0,Math.min(1,(o.x*i.x+o.y*i.y)/r));return new sI(e.x+i.x*s,e.y+i.y*s)})(t,n,e))}function I(e,t,n,i){const o=t.sub(e),r=i.sub(n),s=o.x*r.y-o.y*r.x;if(Math.abs(s)<1e-8)return!1;const a=n.sub(e),l=(a.x*r.y-a.y*r.x)/s,d=(a.x*o.y-a.y*o.x)/s;return l>=0&&l<=1&&d>=0&&d<=1}function w(e,t,n,i){return I(e,t,n,i)?0:Math.min(x(e,n,i),x(t,n,i),x(n,e,t),x(i,e,t))}function v(e){return e.length>=3&&e.every(e=>Number.isFinite(e.x)&&Number.isFinite(e.y))}function P(e){const t=e.filter(v).flatMap(e=>e);return t.length>0?aI.FromPoints(t):null}function k(e,t){if(!v(t))return!1;let n=!1;for(let i=0;i<t.length;i+=1){const o=t[i],r=t[(i+t.length-1)%t.length];if(x(e,r,o)<=1e-8)return!0;o.y>e.y!=r.y>e.y&&e.x<(r.x-o.x)*(e.y-o.y)/(r.y-o.y)+o.x&&(n=!n)}return n}function C(e,t){return t.some(t=>k(e,t))}function T(e,t,n,i=0){if(!v(n))return!1;if(k(e,n)||k(t,n))return!0;for(let o=0;o<n.length;o+=1)if(w(e,t,n[o],n[(o+1)%n.length])<=Math.max(0,i))return!0;return!1}function M(e){return{kind:"theme",slot:e}}function E(e){return{kind:"custom",value:e}}function A(e){return!!e&&"object"==typeof e&&"theme"===e.kind&&fI.includes(e.slot)}function B(e){return!!e&&"object"==typeof e&&"custom"===e.kind&&"string"==typeof e.value}function R(e){return A(e)||B(e)}function L(e){return mI[e]}function $(e,t){return R(e)?e:t}function F(e){return"custom"===e.kind?e.value:`var(${L(e.slot)}, ${SI[e.slot]})`}function U(e,t){if("custom"===e.kind)return e.value;const n=L(e.slot),i=SI[e.slot];return t?.(n,i)??i}function D(e){if("custom"!==e.kind)return!1;const t=e.value.trim().toLowerCase();return"transparent"===t||/^#[0-9a-f]{6}00$/.test(t)}function O(e,t){return e===t||!(!e||!t)&&e.kind===t.kind&&("theme"===e.kind?e.slot===t.slot:e.value===t.value)}function z(e,t,n){const i=new Set;let o=n.parentId;for(;o.startsWith("shape:");){const n=o;if(n===t)return!0;if(i.has(n))return!1;i.add(n);const r=e.getShape(n);if(!r)return!1;o=r.parentId}return!1}function N(e,t,n){let i=e.computeShapeExportPageBounds(t);if(!q(i))return i;for(const o of((e,t,n)=>{const i=[];for(const o of _(e,t,n)){const t=X(e,o);t&&q(t)&&i.push(t)}return i})(e,t,n)){const e=K(i,o);if(!e)return null;i=e}return i}function _(e,t,n){const i=[],o=new Set;let r=t.parentId;for(;r.startsWith("shape:");){const t=r;if(o.has(t))break;o.add(t);const s=e.getShape(t);if(!s)break;n.has(s.id)&&i.push(s),r=s.parentId}return i.reverse()}function W(e,t,n,i){if(n.has(t.id))return n.get(t.id)??null;const o=e.getShapeUtil(t),r=o.getChildExportClipLocalPolygons(t);if(!r||!P(r))return n.set(t.id,null),null;const s=e.computeShapeExportToPageTransform(t).toSvgString(),a=o.getChildExportClipLocalBounds(t),[l]=r,d=1===r.length&&l&&a&&((e,t)=>{const n=[new sI(t.minX,t.minY),new sI(t.maxX,t.minY),new sI(t.maxX,t.maxY),new sI(t.minX,t.maxY)];return e.length===n.length&&e.every((e,t)=>e.equals(n[t]))})(l,a)?[{tag:"rect",attrs:{x:a.x,y:a.y,width:a.w,height:a.h,transform:s}}]:r.map(e=>({tag:"path",attrs:{d:H(e),transform:s}})),c=i.addDef({tag:"clipPath",attrs:{clipPathUnits:"userSpaceOnUse"},children:d});return n.set(t.id,c),c}function X(e,t){const n=e.getShapeUtil(t).getChildExportClipLocalPolygons(t);if(!n||!P(n))return null;const i=e.computeShapeExportToPageTransform(t);return P(n.map(e=>e.map(e=>i.applyToPoint(e))))}function H(e){return e.map((e,t)=>`${0===t?"M":"L"} ${e.x} ${e.y}`).concat("Z").join(" ")}function K(e,t){const n=Math.max(e.minX,t.minX),i=Math.max(e.minY,t.minY),o=Math.min(e.maxX,t.maxX),r=Math.min(e.maxY,t.maxY);return o<n||r<i?null:new aI(n,i,o-n,r-i)}function Y(e){if("string"==typeof e)return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;");const t=(e=>{const t=[];for(const[n,i]of Object.entries(e))null!=i&&!1!==i&&t.push(`${n}="${j("number"==typeof i?V(i):String(i))}"`);return 0===t.length?"":` ${t.join(" ")}`})(e.attrs??{}),n=e.children?.map(Y).join("")??"";return n?`<${e.tag}${t}>${n}</${e.tag}>`:`<${e.tag}${t}/>`}function q(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.w)&&Number.isFinite(e.h)&&e.w>=0&&e.h>=0}function j(e){return e.replaceAll("&","&amp;").replaceAll('"',"&quot;").replaceAll("<","&lt;").replaceAll(">","&gt;")}function V(e){return Number.isFinite(e)?Number(e.toFixed(4)).toString():"0"}function G(e){return e[bI]}function Z({editor:e,exporters:t,shapeIds:n}){const i=Array.from(n),o=e.getShapeExportTraversalIds(i),r=[];for(const c of o){const n=e.getShape(c);n?(Q(e.computeShapeExportPageBounds(n))||r.push({kind:"missing-bounds",id:n.id,canRepair:!1}),t.get(n.type)||r.push({kind:"missing-exporter",id:n.id,canRepair:!1})):r.push({kind:"missing-shape",id:c,canRepair:!1})}const s=new Set(o),a=new Set;for(const c of G(e).getAll().filter(S)){if(!s.has(c.fromId)&&!s.has(c.toId))continue;const t=e.getShape(c.fromId),n=e.getShape(c.toId);t&&n?e.bindings.canBind(c)?(e.bindings.getConflictingBindings(c).some(e=>a.has(e.id))&&r.push({kind:"duplicate-exclusive-binding",id:c.id,canRepair:!0}),a.add(c.id)):r.push({kind:"invalid-binding",id:c.id,canRepair:!0}):r.push({kind:"missing-binding-endpoint",id:c.id,canRepair:!0})}const l=r.filter(e=>e.canRepair).length,d=r.length-l;return{requestedShapeIds:i,issues:r,repairableIssueCount:l,fatalIssueCount:d,canExport:0===d}}function Q(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.w)&&Number.isFinite(e.h)&&e.w>=0&&e.h>=0}function J(e){return e.added.length>0||e.updated.length>0||e.removed.length>0}function ee(e){return e instanceof Map?new Map(e):new Map(Array.from(e,e=>[e.id,e]))}function te(e,t){const n=ee(e),i=ee(t),o={added:[],updated:[],removed:[]};for(const[r,s]of n){const e=i.get(r);e?e!==s&&o.updated.push({before:s,after:e}):o.removed.push(s)}for(const[r,s]of i)n.has(r)||o.added.push(s);return o}function ne(e){return{added:[...e.removed],updated:e.updated.map(e=>({before:e.after,after:e.before})),removed:[...e.added]}}function ie(e,t){const n=new Map,i=new Map,o=new Map;for(const s of e.added)n.set(s.id,s);for(const s of e.updated)i.set(s.after.id,s);for(const s of e.removed)o.set(s.id,s);for(const s of t.added){const e=o.get(s.id);if(e){o.delete(s.id),i.set(s.id,{before:e,after:s});continue}const t=i.get(s.id);t?i.set(s.id,{before:t.before,after:s}):n.set(s.id,s)}for(const s of t.updated){if(n.get(s.after.id)){n.set(s.after.id,s.after);continue}const e=o.get(s.after.id);if(e){o.delete(s.after.id),i.set(s.after.id,{before:e,after:s.after});continue}const t=i.get(s.after.id);i.set(s.after.id,t?{before:t.before,after:s.after}:{before:s.before,after:s.after})}for(const s of t.removed){if(n.get(s.id)){n.delete(s.id);continue}const e=i.get(s.id);e?(i.delete(s.id),o.set(s.id,e.before)):o.set(s.id,s)}const r={added:[],updated:[],removed:[]};for(const s of n.values())r.added.push(s);for(const s of i.values())s.before!==s.after&&r.updated.push(s);for(const s of o.values())r.removed.push(s);return r}function oe(e,t){return{id:e.id,forward:ie(e.forward,t),parentIds:e.parentIds}}function re(e,t){return{forward:t,inverse:ne(t),label:e}}function se(e){return void 0!==e&&e<0?-1:1}function ae(e,t){if(void 0===t)return e;const n=2*Math.PI;return e+Math.round((t-e)/n)*n}function le(e,t){const n=2*Math.PI,i=((e-t+Math.PI)%n+n)%n-Math.PI;return Math.abs(i)}function de(e,t,n={}){if(!(e=>[e.a,e.b,e.c,e.d,e.e,e.f].every(Number.isFinite))(e)||![t.x,t.y,t.w,t.h].every(Number.isFinite))return null;const i=Number.isFinite(n.epsilon)?Math.max(0,n.epsilon??0):1e-8,o=Math.hypot(e.a,e.b),r=Math.hypot(e.c,e.d),s=e.determinant(),a=({rotation:n,skewX:i,scaleX:o,scaleY:r})=>{const s=t.center,a=e.applyToPoint(s),l={x:a.x-s.x,y:a.y-s.y,rotation:n,skewX:i,scaleX:o,scaleY:r};return Object.values(l).every(Number.isFinite)?l:null},l=i*Math.max(1,o,r),d=o<=l,c=r<=l;if(d||c){if(d&&c)return a({rotation:n.preferredRotation??0,skewX:0,scaleX:0,scaleY:0});if(d){const t=r*se(n.preferredScaleYSign);return a({rotation:ae(Math.atan2(-e.c/t,e.d/t),n.preferredRotation),skewX:0,scaleX:0,scaleY:t})}const t=o*se(n.preferredScaleXSign);return a({rotation:ae(Math.atan2(e.b/t,e.a/t),n.preferredRotation),skewX:0,scaleX:t,scaleY:0})}if(Math.abs(s)<=i*o*r)return null;const u=Math.atan2(e.b,e.a),h=Math.cos(u),p=Math.sin(u),g=h*e.a+p*e.b,f=-p*e.c+h*e.d,m=Math.atan((h*e.c+p*e.d)/f),S=[{rotation:ae(u,n.preferredRotation),scaleX:g,scaleY:f},{rotation:ae(u+Math.PI,n.preferredRotation),scaleX:-g,scaleY:-f}],y=se(n.preferredScaleXSign),b=se(n.preferredScaleYSign),x=e=>{let t=0;return void 0!==n.preferredScaleXSign&&se(e.scaleX)===y&&(t+=1),void 0!==n.preferredScaleYSign&&se(e.scaleY)===b&&(t+=1),{signMatches:t,rotationDistance:void 0===n.preferredRotation?0:le(e.rotation,n.preferredRotation)}},I=x(S[0]),w=x(S[1]),v=w.signMatches>I.signMatches||w.signMatches===I.signMatches&&w.rotationDistance<I.rotationDistance?S[1]:S[0];return((e,t,n,i,o,r)=>{const s=Math.cos(t),a=Math.sin(t),l=Math.tan(n),d=[s*i,a*i,(s*l-a)*o,(a*l+s)*o],c=[e.a,e.b,e.c,e.d],u=r*Math.max(1,...c.map(e=>Math.abs(e)));return c.every((e,t)=>Math.abs(e-(d[t]??e))<=u)})(e,v.rotation,m,v.scaleX,v.scaleY,i)?a({rotation:v.rotation,skewX:m,scaleX:v.scaleX,scaleY:v.scaleY}):null}function ce(e,t){return t.getExportBounds(e)}function ue(e,t,n=lI.Identity()){return n.compose(t.getLocalToPageTransform(e))}function he(e,t,n=lI.Identity()){const i=t.getLocalBounds(e).center,o=new sI(e.x+i.x,e.y+i.y),r=lI.Translate(o.x,o.y).compose(lI.Rotate(e.rotation)).compose(lI.SkewX(e.skewX)).compose(lI.Scale(e.scaleX,e.scaleY)).compose(lI.Translate(-o.x,-o.y));return n.compose(r)}function pe(e,t,n=lI.Identity()){return ue(e,t,n)}function ge(e,t,n=lI.Identity()){return ue(e,t,n).applyToPoint(t.getLocalBounds(e).center)}function fe(e,t,n,i=lI.Identity()){const o=he(e,n,i).tryInvert();if(o)return o.applyToPoint(t);const r=n.getLocalBounds(e).center,s=new sI(e.x+r.x,e.y+r.y),a=i.tryInvert();if(!a)return s;const l=a.applyToPoint(t).sub(s).rot(-e.rotation),d=Math.tan(e.skewX);return s.add(new sI(0===e.scaleX?0:(l.x-d*l.y)/e.scaleX,0===e.scaleY?0:l.y/e.scaleY))}function me(e,t,n=lI.Identity()){const i=he(e,t,n);return((e,t)=>t.getPositionedOutlineVertices(e))(e,t).map(e=>i.applyToPoint(e))}function Se(e,t,n=lI.Identity()){const i=me(e,t,n),o=((e,t,n=lI.Identity())=>{const i=t.getLocalBounds(e),o=ue(e,t,n);return[new sI(i.minX,i.minY),new sI(i.maxX,i.minY),new sI(i.maxX,i.maxY),new sI(i.minX,i.maxY)].map(e=>o.applyToPoint(e))})(e,t,n);return{bounds:aI.FromPoints(i),center:ge(e,t,n),corners:o,outlineVertices:i}}function ye(e,t,n){const i=n.startsWith("shape:")?e.getShape(n):null,o=(i?e.computeShapeLocalToPageTransform(i):lI.Identity()).tryInvert();if(!o)return null;const r=e.computeShapeLocalToPageTransform(t);return de(o.compose(r),e.computeShapeLocalBounds(t),{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY})}function be(e,t,n,...i){const o=vI.get(e),r=new Set(o?.suppressedBindingIds??wI),s=r.size;for(const a of t)r.add(a);if(r.size===s)return xe(n);vI.set(e,{suppressedBindingIds:r});try{return xe(n)}finally{o?vI.set(e,o):vI.delete(e)}}function xe(e){const t=e();if(("object"==typeof(n=t)&&null!==n||"function"==typeof n)&&"function"==typeof n.then)throw new Error("Binding reaction scope callbacks must be synchronous");var n;return t}function Ie(e){return e.map((e,t)=>({...e,index:String(t+1).padStart(4,"0")}))}function we(e,t,n){const i=e.getShape(t);if(!i)return;const o=e.getContainingParentIdForShapeRecord(i);o&&o!==i.parentId&&e.commands.reparentShapes({ids:[t],parentId:o},n)}function ve(e,t,n){const i=n?.source??"user";be(e,n?.suppressBindingIds??[],()=>((e,t,n)=>{G(e).atomic(()=>{const i=[],o=[];for(const n of t){const t=e.getShape(n.id);if(!t)continue;const r=n.x??t.x,s=n.y??t.y,a=n.rotation??t.rotation,l=n.skewX??t.skewX,d=n.scaleX??t.scaleX,c=n.scaleY??t.scaleY,u=void 0===n.opacity?t.opacity:Te(n.opacity,t.opacity),h=n.isHidden??t.isHidden,p=n.isLocked??t.isLocked,g=n.parentId??t.parentId,f=n.index??t.index,m=void 0===n.meta?t.meta:{...n.meta};if(!n.props&&void 0===n.meta&&r===t.x&&s===t.y&&a===t.rotation&&l===t.skewX&&d===t.scaleX&&c===t.scaleY&&u===t.opacity&&h===t.isHidden&&p===t.isLocked&&g===t.parentId&&f===t.index)continue;const S=e.shapeUtils.get(t.type),y={...t,x:r,y:s,rotation:a,skewX:l,scaleX:d,scaleY:c,opacity:u,isHidden:h,isLocked:p,parentId:g,index:f,props:n.props?S.validateProps({...t.props,...n.props}):t.props,meta:m};i.push(y),o.push({before:t,after:y})}0!==i.length&&(Pe(e,i),G(e).put(i,n),o.some(({before:e,after:t})=>e.parentId!==t.parentId)&&ke(e,n),e.bindings.handleShapeChanges(o,n),((e,t,n)=>{const i=new Set,o=new Set;for(const s of t)Be(e,s.before,i),Be(e,s.after,i),s.before.parentId!==s.after.parentId&&s.before.parentId.startsWith("shape:")&&o.add(s.before.parentId),e.getShapeUtil(s.after).shouldResizeDescendants(s.after)&&i.add(s.after.id);const r=new Set;Le(e,o,r,n),Me(e,i,n,r)})(e,o,n))},n)})(e,t,i))}function Pe(e,t){const n=new Set;for(const o of t){if(n.has(o.id))throw new Error(`Duplicate shape id ${o.id}`);n.add(o.id)}const i=new Map(G(e).getAll().filter(f).map(e=>[e.id,e]));for(const o of t)i.set(o.id,o);for(const o of t){const t=new Set([o.id]);let n=o;for(;n.parentId.startsWith("shape:");){const r=n.parentId;if(t.has(r))throw new Error(`Shape parent cycle includes ${o.id}`);t.add(r);const s=i.get(r);if(!s)throw new Error(`Missing parent ${r} for shape ${n.id}`);if(!e.getShapeUtil(s).canReceiveChild(s,n))throw new Error(`Shape ${r} cannot receive shape ${n.id}`);n=s}if(!e.getPage(n.parentId))throw new Error(`Missing page parent ${n.parentId} for shape ${n.id}`)}}function ke(e,t){const n=e.getSessionRecord();let i=!1;const o={};for(const[r,s]of Object.entries(n.pageSelectedShapeIdsById)){const t=r,n=s??[],a=Array.from(new Set(n)).filter(n=>Ce(e,n)===t&&!e.isShapeHidden(n)),l=new Set(a),d=a.filter(t=>{let n=e.getShape(t);const i=new Set([t]);for(;n?.parentId.startsWith("shape:");){const t=n.parentId;if(i.has(t))return!0;if(l.has(t))return!1;i.add(t),n=e.getShape(t)}return!0});o[t]=d,d.length!==n.length&&(i=!0)}i&&e.updateSession({pageSelectedShapeIdsById:o},t)}function Ce(e,t){let n=e.getShape(t);const i=new Set;for(;n?.parentId.startsWith("shape:");){const t=n.parentId;if(i.has(t))return null;i.add(t),n=e.getShape(t)}return n&&e.getPage(n.parentId)?n.parentId:null}function Te(e,t){return"number"==typeof e&&Number.isFinite(e)?Math.min(1,Math.max(0,e)):t}function Me(e,t,n,i=new Set){const o=[...t].sort((t,n)=>Ee(e,n)-Ee(e,t));for(const r of o){if(i.has(r))continue;const t=e.getShape(r);if(!t)continue;const o=e.getShapeUtil(t);if(!o.shouldResizeDescendants(t))continue;const s=Ae(e,t.id);if(0===s.length)continue;const a=s.flatMap(t=>e.getShapeUtil(t).getPositionedOutlineVertices(t).map(n=>he(t,e.getShapeUtil(t)).applyToPoint(n)));if(0===a.length)continue;const l=aI.FromPoints(a),d=o.getResizeToFitDescendantsProps(t,l);if(!d)continue;const c=o.validateProps(d),u={...t,props:c},h=de(o.getLocalToPageTransform(t).compose(lI.Translate(l.x,l.y)),o.getLocalBounds(u),{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY});if(!h)continue;const p=[...s.map(e=>({before:e,after:{...e,x:e.x-l.x,y:e.y-l.y}})),{before:t,after:{...t,...h,props:c}}].filter(({before:e,after:t})=>{return!((n=e).x===(i=t).x&&n.y===i.y&&n.rotation===i.rotation&&n.skewX===i.skewX&&n.scaleX===i.scaleX&&n.scaleY===i.scaleY&&((e,t)=>{if(e===t)return!0;const n=Object.entries(e),i=Object.entries(t);return n.length===i.length&&n.every(([e,n])=>Object.is(n,t[e]))})(n.props,i.props));var n,i});0!==p.length&&(G(e).put(p.map(e=>e.after),n),e.bindings.handleShapeChanges(p,n))}}function Ee(e,t){let n=0,i=e.getShape(t);const o=new Set;for(;i?.parentId.startsWith("shape:");){const t=i.parentId;if(o.has(t))break;o.add(t),n+=1,i=e.getShape(t)}return n}function Ae(e,t){return G(e).getAll().filter(f).filter(e=>e.parentId===t).sort((e,t)=>e.index.localeCompare(t.index))}function Be(e,t,n){const i=new Set([t.id]);let o=t.parentId;for(;o.startsWith("shape:");){const t=e.getShape(o);if(!t||i.has(t.id))return;i.add(t.id),e.getShapeUtil(t).shouldResizeDescendants(t)&&n.add(t.id),o=t.parentId}}function Re(e,t){const n=new Set;for(const i of t){const t=e.getShape(i);t&&Be(e,t,n)}return n}function Le(e,t,n,i){const o=[],r=[...t].sort((t,n)=>e.getDescendantShapeIds(n).length-e.getDescendantShapeIds(t).length);for(let s=0;s<r.length;s+=1){const t=r[s];if(!t||n.has(t))continue;const a=e.getShape(t);if(!a)continue;const l=e.getShapeUtil(a).getMinimumChildCount(a);if(l<=0)continue;const d=Ae(e,a.id).filter(e=>!n.has(e.id)),c=new Set(d.map(e=>e.id));if(new Set(d.map(t=>{const n=e.bindings.getShapeHierarchyRootId(t.id);return c.has(n)?n:t.id})).size>=l)continue;const u=Ae(e,a.parentId).filter(e=>!n.has(e.id)).flatMap(e=>e.id===a.id?d.map(e=>e.id):[e.id]),h=new Map(u.map((t,n)=>[t,e.createShapeIndex(n+1)])),p=[];let g=!0;for(const n of d){if(!e.canUseShapeParent(a.parentId,n.id)){g=!1;break}const t=ye(e,n,a.parentId);if(!t){g=!1;break}p.push({before:n,after:{...n,...t,parentId:a.parentId,index:h.get(n.id)??a.index}})}if(!g)continue;const f=new Set;Be(e,a,f);for(const e of f)r.push(e);const m=new Set(p.map(e=>e.after.id)),S=u.flatMap(t=>{if(m.has(t))return[];const n=e.getShape(t),i=h.get(t);return n&&i&&n.index!==i?[{before:n,after:{...n,index:i}}]:[]}),y=[...p,...S];y.length>0&&(G(e).put(y.map(e=>e.after),i),e.bindings.handleShapeChanges(y,i));const b=e.getSelectedShapeIds();if(b.includes(a.id)){const t=Array.from(new Set(p.map(t=>{const n=e.bindings.getShapeHierarchyRootId(t.after.id);return m.has(n)?n:t.after.id})));e.commands.setSelectedShapeIds(b.flatMap(e=>e===a.id?t:[e]),{source:i})}e.sideEffects.runBeforeDelete("shape",[a.id],i),G(e).remove([a.id],i),e.sideEffects.runAfterDelete("shape",[a.id],i),n.add(a.id),o.push(a.id)}return o}function $e(e,t,n){const i=((e,t)=>{const n=Array.from(new Set(t.ids)).map(t=>e.getShape(t)).filter(e=>!!e&&e.parentId!==t.parentId);if(0===n.length)return[];const i=Ae(e,t.parentId).reduce((e,t)=>{const n=Number.parseInt(t.index,10);return Number.isFinite(n)?Math.max(e,n):e},0),o=t.parentId.startsWith("shape:")?e.getShape(t.parentId):null,r=new Map;for(const s of n){if(!e.canUseShapeParent(t.parentId,s.id))return null;const n=ye(e,s,t.parentId);if(!n)return null;r.set(s.id,n)}return n.map((n,s)=>{const a=o?e.getShapeUtil(o).getChildPlacementMeta(o,n,{editor:e,reason:"reparent"}):n.meta;return{id:n.id,parentId:t.parentId,index:e.createShapeIndex(i+s+1),...r.get(n.id),meta:a===n.meta?void 0:a}})})(e,t);return!!i&&(0===i.length||ve(e,i,n),!0)}function Fe(e,t,n){const i=n?.source??"user",o=e.getShapeIdsIncludingDescendants(t),r=Re(e,o),s=new Set(o),a=e.getUnreferencedAssetIdsAfterShapeDelete(o);e.prepareShapeIdsForRemoval(o,i),G(e).atomic(()=>{e.sideEffects.runBeforeDelete("shape",o,i),G(e).remove(o,i),a.length>0&&G(e).remove(a,i),Le(e,r,s,i),Me(e,r,i,s),e.sideEffects.runAfterDelete("shape",o,i)},i)}function Ue(e,t){return e.bindings.canBind(t)}function De(e,t,n){for(const i of t){const t=e.getShape(i);t?.parentId.startsWith("shape:")&&n.add(t.parentId)}}function Oe(e){return{added:[...e.added],updated:e.updated.filter(({before:e,after:t})=>!ze(e,t)),removed:[...e.removed]}}function ze(e,t){if(Object.is(e,t))return!0;if(typeof e!=typeof t||null===e||null===t)return!1;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((e,n)=>ze(e,t[n]));if("object"!=typeof e||"object"!=typeof t)return!1;const n=e,i=t,o=Object.keys(n),r=Object.keys(i);return o.length===r.length&&o.every(e=>Object.prototype.hasOwnProperty.call(i,e)&&ze(n[e],i[e]))}function Ne(e){return JSON.parse(JSON.stringify(e))}function _e(e){return JSON.parse(JSON.stringify(e))}function We(e){const t=globalThis.reportError;"function"==typeof t&&t(e)}function Xe(e,t,n){const i=[...t].sort((e,t)=>e.id.localeCompare(t.id)),o=new Set([e]);let r=e;for(;;){let t=null;for(const e of i){if(e.fromId!==r&&e.toId!==r)continue;const i=n(e).getShapeHierarchyRootId?.(e,r);if(i&&i!==r){t=i;break}}if(!t)return r;if(o.has(t))return e;o.add(t),r=t}}function He({before:e,after:t}){return e.parentId!==t.parentId||e.x!==t.x||e.y!==t.y||e.rotation!==t.rotation||e.skewX!==t.skewX||e.scaleX!==t.scaleX||e.scaleY!==t.scaleY||e.props!==t.props}function Ke(e){return Math.min(8,Math.max(.1,e))}function Ye(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}function qe(e,t){return e.count===t.count&&e.singleShapeType===t.singleShapeType&&e.commonShapeType===t.commonShapeType&&e.canFlipSelection===t.canFlipSelection&&e.hasPointHandleSelection===t.hasPointHandleSelection&&e.hasFrameSelection===t.hasFrameSelection&&e.isMixedFrameAndPointHandleSelection===t.isMixedFrameAndPointHandleSelection&&e.canDragPointHandles===t.canDragPointHandles&&e.hasSelectionRotation===t.hasSelectionRotation&&e.hasMixedSelectionRotation===t.hasMixedSelectionRotation&&e.canResetSelectionRotation===t.canResetSelectionRotation}function je(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function Ve(e,t){return e===t||(e&&t?e.x===t.x&&e.y===t.y:e===t)}function Ge(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],o=t[n];if(!i||!o||i.x!==o.x||i.y!==o.y)return!1}return!0}function Ze(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],o=t[n];if(!i||!o||!Ge(i,o))return!1}return!0}function Qe(e,t){return e===t||(e&&t?e.x===t.x&&e.y===t.y&&e.w===t.w&&e.h===t.h:e===t)}function Je(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.w)&&Number.isFinite(e.h)&&e.w>=0&&e.h>=0}function et(e,t){return e.culledCount===t.culledCount&&e.visibleCount===t.visibleCount&&e.retainedCount===t.retainedCount&&e.retainedBaseCount===t.retainedBaseCount&&e.culledRangeCount===t.culledRangeCount&&e.culledRangeSpan===t.culledRangeSpan&&e.culledRangesSummary===t.culledRangesSummary&&e.retainedBaseRangeCount===t.retainedBaseRangeCount&&e.retainedBaseRangeSpan===t.retainedBaseRangeSpan&&e.retainedBaseRangesSummary===t.retainedBaseRangesSummary&&e.retainedRangeCount===t.retainedRangeCount&&e.retainedRangeSpan===t.retainedRangeSpan&&e.retainedRangesSummary===t.retainedRangesSummary&&e.retainedChangeCount===t.retainedChangeCount&&e.retainedAddedCount===t.retainedAddedCount&&e.retainedRemovedCount===t.retainedRemovedCount&&e.selectedOutsideCulledCount===t.selectedOutsideCulledCount}function tt(e,t){return e.selectionFrameActive===t.selectionFrameActive&&e.selectionHandlesActive===t.selectionHandlesActive&&e.bindingPreviewActive===t.bindingPreviewActive&&e.brushBoxActive===t.brushBoxActive&&e.selectionFrameChangeCount===t.selectionFrameChangeCount&&e.selectionHandlesChangeCount===t.selectionHandlesChangeCount&&e.resizeHandleCount===t.resizeHandleCount&&e.rotateHandleCount===t.rotateHandleCount&&e.terminalHandleCount===t.terminalHandleCount&&e.middleHandleCount===t.middleHandleCount&&e.customHandleCount===t.customHandleCount&&e.boundsSummary===t.boundsSummary&&e.rotation===t.rotation&&e.strokeWidth===t.strokeWidth}function nt(e,t,n){const i=new Set([e.id]);let o=e.parentId;for(;o.startsWith("shape:");){const e=o;if(i.has(e))return null;i.add(e);const n=t.get(e);if(!n)return null;o=n.parentId}return n.has(o)?o:null}function it(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],o=t[n];if(!i||!o)return!1;if(i.id!==o.id||i.shape!==o.shape||i.isSelected!==o.isSelected||!Qe(i.bounds,o.bounds))return!1}return!0}function ot(e,t){if(e===t)return!0;if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function rt(e){const t=e.props.assetId;return"string"==typeof t&&t.startsWith("asset:")?t:null}function st(e,t){if(Object.is(e,t))return!0;if(typeof e!=typeof t)return!1;if(!e||!t||"object"!=typeof e||"object"!=typeof t)return!1;if(Array.isArray(e)||Array.isArray(t))return!(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)&&e.every((e,n)=>st(e,t[n]));const n=e,i=t,o=Object.keys(n),r=Object.keys(i);return o.length===r.length&&o.every(e=>Object.prototype.hasOwnProperty.call(i,e)&&st(n[e],i[e]))}function at(e){const t=(e=>{const t=new Set(e.getSelectedShapeIds());return 0===t.size?[]:e.getCurrentPageShapeIds().filter(e=>t.has(e)).filter(n=>!((e,t,n)=>{const i=new Set([t]);let o=e.getShape(t);for(;o?.parentId.startsWith("shape:");){const t=o.parentId;if(n.has(t))return!0;if(i.has(t))return!1;i.add(t),o=e.getShape(t)}return!1})(e,n,t))})(e);if(0===t.length)return null;const n=((e,t)=>{const n=((e,t)=>{const n=e.getShapeIdsIncludingDescendants(t),i=new Set(n);for(let o=0;o<n.length;o+=1){const t=n[o];if(t)for(const o of e.getBindingsForShape(t)){const t=e.getBindingUtil(o).getExportShapeIds?.(e,o);for(const o of t??[])for(const t of e.getShapeIdsIncludingDescendants([o]))i.has(t)||(i.add(t),n.push(t))}}return n})(e,t),i=new Set(n);return e.getCurrentPageShapeIds().filter(e=>i.has(e))})(e,t),i=new Set(n),o=new Set;for(const d of n){const t=e.getShape(d);if(!(!t||t.parentId.startsWith("shape:")&&i.has(t.parentId)||dt(e,t,i))){o.add(t.id);for(const n of e.getDescendantShapeIds(t.id))o.add(n)}}const r=n.filter(e=>!o.has(e)),s=new Set(r),a=r.map(t=>e.getShape(t)).filter(e=>!!e).flatMap(t=>{const n=dt(e,t,s);return n?[n]:[]});if(0===a.length)return null;const l=t.filter(e=>s.has(e));return 0===l.length?null:{type:"land/clipboard",version:1,source:{app:"land"},rootShapeIds:l,records:{shapes:a,bindings:ct(e,a,s),assets:ut(e,a)},bounds:ht(e,r)}}function lt(e,t){const{payload:n}=t;if(!(e=>{if(!e||"object"!=typeof e)return!1;const t=e;return"land/clipboard"===t.type&&1===t.version&&!!t.records&&Array.isArray(t.rootShapeIds)&&Array.isArray(t.records.shapes)&&Array.isArray(t.records.bindings)&&Array.isArray(t.records.assets)})(n)||0===n.records.shapes.length)return[];const i=t.source??"user",o=e.getCurrentPageId(),r=(e=>{const t=e.payload.bounds;return e.pagePoint?e.pagePoint.sub(new sI(t.x+t.w/2,t.y+t.h/2)):e.offset??AI})(t),s=new Map,a=new Map,l=[],d=new Set(n.records.shapes.map(e=>e.id)),c=new Set(n.records.shapes.filter(e=>!e.parentId.startsWith("shape:")||!d.has(e.parentId)).map(e=>e.id));G(e).atomic(()=>{const t=n.records.assets.map(t=>{const n=e.createAssetRecord({type:t.type,props:St(t.props),meta:St(t.meta)});return s.set(t.id,n.id),n});t.length>0&&e.commands.createAssetsFromRecords(t,{source:i});const l=n.records.shapes.map(t=>{const n=((e,t)=>mt(e,t))(t.props,s),i=c.has(t.id),l=e.createShapeRecord({type:t.type,x:t.x+(i?r.x:0),y:t.y+(i?r.y:0),props:n,parentId:o,rotation:t.rotation,skewX:t.skewX,scaleX:t.scaleX,scaleY:t.scaleY,opacity:t.opacity,isHidden:t.isHidden,isLocked:t.isLocked,meta:St(t.meta)});return a.set(t.id,l.id),{original:t,draft:l}}).map(({original:e,draft:t})=>({...t,parentId:pt(e.parentId,a,o)}));l.length>0&&e.commands.createShapesFromRecords(l,{source:i});for(const o of n.records.bindings){const t=a.get(o.fromId),n=a.get(o.toId);t&&n&&e.commands.createBinding({type:o.type,fromId:t,toId:n,props:St(o.props),meta:St(o.meta)},{source:i})}},i);for(const u of n.rootShapeIds){const e=a.get(u);e&&l.push(e)}return l.length>0&&e.commands.setSelectedShapeIds(l,{source:i}),l}function dt(e,t,n){if(!e.getShapeUtil(t).canCopyToClipboard(t,{editor:e,copiedShapeIds:n}))return null;const i=yt(t);if(t.parentId.startsWith("shape:")&&n.has(t.parentId))return i;const o=e.computeShapeLocalBounds(t),r=de(e.computeShapeLocalToPageTransform(t),o,{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY});return r?{...i,parentId:e.getShapePageId(t.id)??i.parentId,...r}:null}function ct(e,t,n){const i=[],o=new Set;for(const r of t)for(const t of e.getBindingsForShape(r.id))o.has(t.id)||n.has(t.fromId)&&n.has(t.toId)&&(o.add(t.id),i.push(yt(t)));return i}function ut(e,t){const n=[],i=new Set;for(const o of t)for(const t of gt(o)){if(i.has(t))continue;const o=e.getAsset(t);o&&(i.add(t),n.push(yt(o)))}return n}function ht(e,t){const n=(e=>{if(0===e.length)return null;let t=1/0,n=1/0,i=-1/0,o=-1/0;for(const r of e)t=Math.min(t,r.minX),n=Math.min(n,r.minY),i=Math.max(i,r.maxX),o=Math.max(o,r.maxY);return new aI(t,n,i-t,o-n)})(t.map(t=>e.getShapePageBounds(t)).filter(e=>!!e))??new aI(0,0,0,0);return{x:n.x,y:n.y,w:n.w,h:n.h}}function pt(e,t,n){return e.startsWith("shape:")?t.get(e)??n:n}function gt(e){const t=[],n=new Set,i=rt(e);return i&&(n.add(i),t.push(i)),ft(e.props,n,t),t}function ft(e,t,n){if(bt(e))t.has(e)||(t.add(e),n.push(e));else if(Array.isArray(e))for(const i of e)ft(i,t,n);else if(e&&"object"==typeof e)for(const i of Object.values(e))ft(i,t,n)}function mt(e,t){if(bt(e))return t.get(e)??e;if(Array.isArray(e))return e.map(e=>mt(e,t));if(!e||"object"!=typeof e)return e;const n={};for(const[i,o]of Object.entries(e))n[i]=mt(o,t);return n}function St(e){return yt(e)}function yt(e){if(Array.isArray(e))return e.map(yt);if(!e||"object"!=typeof e)return e;const t={};for(const[n,i]of Object.entries(e))t[n]=yt(i);return t}function bt(e){return"string"==typeof e&&e.startsWith("asset:")}function xt(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function It(e,t){return"string"==typeof e?e:t}function wt(e,t){return"number"==typeof e&&Number.isFinite(e)?e:t}function vt(e,t){return"boolean"==typeof e?e:t}function Pt(e){return xt(e)?e:{}}function kt(e){return xt(e)?{x:wt(e.x,pI.x),y:wt(e.y,pI.y),z:Math.min(8,Math.max(.1,wt(e.z,pI.z)))}:null}function Ct(e){return Array.from(new Set((e=>Array.isArray(e)?e.filter(e=>"string"==typeof e):[])(e).filter(e=>e.startsWith("shape:"))))}function Tt(e,t){if(!xt(e))throw new RI(`Invalid ${t} snapshot: expected object`);const n=e.schemaVersion,i=wt(n,NaN),o="document"===t?2:1;if(i!==o)throw new RI(`Unsupported ${t} snapshot schema version: expected ${o}, received ${String(n)}`);if(!Array.isArray(e.records))throw new RI(`Invalid ${t} snapshot: records must be an array`);return{schemaVersion:i,records:e.records}}function Mt(e,t,n){const i=e.find(g)??c(),o=e.filter(e=>"page"===e.typeName),r=e.filter(e=>"shape"===e.typeName),s=e.filter(S),a=e.filter(y),l=(o.length>0?[...o].sort((e,t)=>e.index.localeCompare(t.index)):[u()]).map((e,t)=>({...e,index:String(t+1).padStart(4,"0")})),d=l[0]?.id??"page:default",h=new Set(l.map(e=>e.id)),p=[...r].sort((e,t)=>e.index.localeCompare(t.index)||e.id.localeCompare(t.id)),f=new Map(p.map(e=>[e.id,e])),m=new Map,b=new Set,x=((e,t,n,i)=>{const o=new Map(e.map(e=>[e.id,e])),r=t.filter(e=>{const t=o.get(e.fromId),n=o.get(e.toId);if(!t||!n)return!1;const r=i.get(e.type);return!!r.getShapeHierarchyRootId&&(r.canUseShapeHierarchy?.(e,{fromShape:t,toShape:n})??!1)});let s=!0;for(;s;){s=!1;for(const e of[...o.values()]){const t=n.get(e.type),a=t.getMinimumChildCount(e);if(a<=0)continue;const l=[...o.values()].filter(t=>t.parentId===e.id).sort((e,t)=>e.index.localeCompare(t.index)||e.id.localeCompare(t.id)),d=new Set(l.map(e=>e.id));if(new Set(l.map(e=>{const t=Xe(e.id,r,e=>i.get(e.type));return d.has(t)?t:e.id})).size>=a)continue;if(0===l.length){o.delete(e.id),s=!0;break}const c=[...o.values()].filter(t=>t.parentId===e.parentId).sort((e,t)=>e.index.localeCompare(t.index)||e.id.localeCompare(t.id)).flatMap(t=>t.id===e.id?l.map(e=>e.id):[t.id]),u=new Map(c.map((e,t)=>[e,String(t+1).padStart(6,"0")])),h=t.getLocalToPageTransform(e),p=[];for(const i of l){if(e.parentId.startsWith("shape:")&&!Et(o,n,e.parentId,i)){p.length=0;break}const t=n.get(i.type),r=de(h.compose(t.getLocalToPageTransform(i)),t.getLocalBounds(i),{preferredRotation:i.rotation,preferredScaleXSign:i.scaleX,preferredScaleYSign:i.scaleY});if(!r){p.length=0;break}p.push({...i,...r,parentId:e.parentId,index:u.get(i.id)??e.index})}if(p.length===l.length){for(const e of p)o.set(e.id,e);for(const e of c){const t=o.get(e),n=u.get(e);t&&n&&t.index!==n&&o.set(t.id,{...t,index:n})}o.delete(e.id),s=!0;break}}}return e.flatMap(e=>{const t=o.get(e.id);return t?[t]:[]})})(p.map((e,n)=>{const i=(e=>{const n=m.get(e.id);if(n)return n;const i=[{stage:"enter",shape:e}];for(;i.length>0;){const e=i[i.length-1];if("waiting-for-parent"===e.stage){m.set(e.shape.id,e.parent.id),b.delete(e.shape.id),i.pop();continue}const n=e.shape;if(m.has(n.id)){i.pop();continue}if(b.add(n.id),n.parentId.startsWith("page:")){m.set(n.id,h.has(n.parentId)?n.parentId:d),b.delete(n.id),i.pop();continue}const o=f.get(n.parentId);o&&!b.has(o.id)&&t.get(o.type).canReceiveChild(o,n)?(i[i.length-1]={stage:"waiting-for-parent",shape:n,parent:o},m.has(o.id)||i.push({stage:"enter",shape:o})):(m.set(n.id,d),b.delete(n.id),i.pop())}return m.get(e.id)??d})(e),o={...e,parentId:i,index:e.index||String(n+1).padStart(6,"0")};return t.get(o.type).repairLoadedShape(o)??o}),s,t,n),I=new Set(x.map(e=>e.id)),w=s.filter(e=>I.has(e.fromId)&&I.has(e.toId));return[i,...l,...a,...x,...w]}function Et(e,t,n,i){const o=e.get(n);return!!o&&t.get(o.type).canReceiveChild(o,i)}function At(e,t,n){const i=Tt(e,"document"),o=new Set,r=[];return i.records.forEach((e,i)=>{if(!xt(e))throw new RI("Invalid document record: expected object");if("string"!=typeof e.id)throw new RI("Invalid document record id");if(o.has(e.id))throw new RI(`Duplicate document record id: ${e.id}`);if(o.add(e.id),"document"!==e.typeName)if("page"!==e.typeName)if("shape"!==e.typeName)if("binding"!==e.typeName){if("asset"!==e.typeName)throw new RI(`Unsupported document record type: ${String(e.typeName)}`);r.push((e=>{if("string"!=typeof e.id||!e.id.startsWith("asset:"))throw new RI("Invalid asset record id");if("string"!=typeof e.type)throw new RI("Invalid asset record type");return{id:e.id,typeName:"asset",scope:"document",type:e.type,props:xt(e.props)?e.props:{},meta:Pt(e.meta)}})(e))}else r.push(((e,t)=>{if("string"!=typeof e.id||!e.id.startsWith("binding:"))throw new RI("Invalid binding record id");if("string"!=typeof e.type)throw new RI("Invalid binding record type");if("string"!=typeof e.fromId||!e.fromId.startsWith("shape:"))throw new RI(`Invalid from id for binding ${e.id}`);if("string"!=typeof e.toId||!e.toId.startsWith("shape:"))throw new RI(`Invalid to id for binding ${e.id}`);const n=e.type,i=t.get(n);return{id:e.id,typeName:"binding",scope:"document",type:n,fromId:e.fromId,toId:e.toId,props:i.validateProps(e.props),meta:Pt(e.meta)}})(e,n));else r.push(((e,t,n)=>{if("string"!=typeof e.id||!e.id.startsWith("shape:"))throw new RI("Invalid shape record id");if("string"!=typeof e.type)throw new RI("Invalid shape record type");if("string"!=typeof e.parentId||!e.parentId.startsWith("page:")&&!e.parentId.startsWith("shape:"))throw new RI(`Invalid parent id for shape ${e.id}`);return{id:e.id,typeName:"shape",scope:"document",parentId:e.parentId,index:It(e.index,String(n+1).padStart(6,"0")),x:wt(e.x,0),y:wt(e.y,0),rotation:wt(e.rotation,0),skewX:wt(e.skewX,0),scaleX:wt(e.scaleX,1),scaleY:wt(e.scaleY,1),opacity:Math.min(1,Math.max(0,wt(e.opacity,1))),isHidden:vt(e.isHidden,!1),isLocked:vt(e.isLocked,!1),meta:Pt(e.meta),type:e.type,props:t.get(e.type).validateProps(e.props)}})(e,t,i));else r.push(((e,t)=>{if("string"!=typeof e.id||!e.id.startsWith("page:"))throw new RI("Invalid page record id");return{id:e.id,typeName:"page",scope:"document",name:It(e.name,`Page ${t+1}`),index:It(e.index,String(t+1).padStart(4,"0")),meta:Pt(e.meta)}})(e,i));else r.push((e=>{if("document:main"!==e.id)throw new RI("Invalid document metadata record id");return{id:cI,typeName:"document",scope:"document",meta:Pt(e.meta)}})(e))}),{schemaVersion:2,records:Mt(r,t,n)}}function Bt(e){const t=Tt(e,"session").records[0];if(!xt(t))return{schemaVersion:1,records:[h()]};const n=h(),i="string"==typeof t.currentPageId&&t.currentPageId.startsWith("page:")?t.currentPageId:n.currentPageId,o=(e=>{if(!xt(e))return{};const t=Object.entries(e).filter(([e])=>e.startsWith("page:")).map(([e,t])=>[e,kt(t)]).filter(e=>null!==e[1]);return Object.fromEntries(t)})(t.pageCameraById),r=(e=>{if(!xt(e))return{};const t=Object.entries(e).filter(([e])=>e.startsWith("page:")).map(([e,t])=>[e,Ct(t)]);return Object.fromEntries(t)})(t.pageSelectedShapeIdsById);return{schemaVersion:1,records:[{...n,id:n.id,typeName:"session",scope:"session",currentPageId:i,activeToolId:It(t.activeToolId,n.activeToolId),isToolLocked:"boolean"==typeof t.isToolLocked?t.isToolLocked:n.isToolLocked,editingShapeId:null,shapeEditingSession:null,pageCameraById:Object.keys(o).length>0?o:n.pageCameraById,pageSelectedShapeIdsById:Object.keys(r).length>0?r:n.pageSelectedShapeIdsById,meta:Pt(t.meta)}]}}function Rt(){return sI.Zero()}function Lt(e,t,n){if(n<=0)return Rt();const i=t.x-e.x,o=t.y-e.y;return 0===i&&0===o?Rt():new sI(i/n,o/n)}function $t(e,t){return e.shiftKey===t.shiftKey&&e.altKey===t.altKey&&e.ctrlKey===t.ctrlKey&&e.metaKey===t.metaKey&&e.accelKey===t.accelKey}function Ft(e){return{...e,anchorPagePoint:e.anchorPagePoint.clone(),boundaryPagePoint:e.boundaryPagePoint.clone()}}function Ut(e,t){return e.terminal===t.terminal&&Ve(e.anchorPagePoint,t.anchorPagePoint)&&Ve(e.boundaryPagePoint,t.boundaryPagePoint)&&(e.guidePath??null)===(t.guidePath??null)}function Dt(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],o=t[n];if(!i||!o||!Ut(i,o))return!1}return!0}function Ot(e,t){return Ut(e,t)&&e.ownerShapeId===t.ownerShapeId&&(e.targetShapeId??null)===(t.targetShapeId??null)}function zt(e,t,n){const i=e.get(t);i?i.push(n):e.set(t,[n])}function Nt(e,t,n){const i=e.get(t);i?i.push(n):e.set(t,[n])}function _t(e,t,n){const i=e.get(t);if(!i)return!1;const o=i.indexOf(n);if(o<0)return!1;if(1===i.length)return e.delete(t),!0;const r=i.slice();return r.splice(o,1),e.set(t,r),!0}function Wt(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}function Xt(e,t){return e.fromId===t.fromId?e.id.localeCompare(t.id):e.fromId.localeCompare(t.fromId)}function Ht(e,t,n){return"to"===e?t.toId===n.toId?t.fromId===n.fromId?t.id.localeCompare(n.id):t.fromId.localeCompare(n.fromId):t.toId.localeCompare(n.toId):Xt(t,n)}function Kt(e,t,n,i,o){const r=e.get(t);if(!r)return e.set(t,[n.id]),!0;if(r.includes(n.id))return!1;const s=r.slice();return s.splice(((e,t,n,i)=>{for(let o=0;o<e.length;o+=1){const r=i(e[o]);if(r&&Ht(n,t,r)<0)return o}return e.length})(r,n,i,o),0,n.id),e.set(t,s),!0}function Yt(e,t,n,i){const o=e.get(t);if(!o)return void e.set(t,[n.id]);if(o.includes(n.id))return;let r=o.length;for(let a=0;a<o.length;a+=1){const e=i(o[a]);if(void 0!==e&&e.localeCompare(n.index)>0){r=a;break}}const s=o.slice();s.splice(r,0,n.id),e.set(t,s)}function qt(e,t,n){_t(e,t,n)}function jt(e){return f(e.before)&&f(e.after)}function Vt(e){return S(e.before)&&S(e.after)}function Gt(e,t){const n=de(e.computeShapeLocalToPageTransform(t),e.computeShapeLocalBounds(t),{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY});return n?{...t,...n}:null}function Zt(e,t,n,i){const o=e.getShapeUtil(t),r={...n,x:i.x??n.x,y:i.y??n.y,rotation:i.rotation??n.rotation,skewX:i.skewX??n.skewX,scaleX:i.scaleX??n.scaleX,scaleY:i.scaleY??n.scaleY,props:i.props?o.validateProps({...n.props,...i.props}):n.props},s=t.parentId.startsWith("shape:")?e.getShape(t.parentId):null,a=(s?e.computeShapeLocalToPageTransform(s):lI.Identity()).tryInvert();if(!a)return null;const l=de(a.compose(o.getLocalToPageTransform(r)),o.getLocalBounds(r),{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY});return l?{id:t.id,...l,props:i.props}:null}function Qt(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],o=t[n];if(!i||!o||!Ve(i,o))return!1}return!0}function Jt(e,t){return Qt(e.outlineVertices,t.outlineVertices)&&Qe(e.pageBounds,t.pageBounds)&&Qe(e.frameBounds,t.frameBounds)&&e.rotation===t.rotation&&Ve(e.rotationCenter,t.rotationCenter)&&Ve(e.selectionAnchorPagePoint,t.selectionAnchorPagePoint)&&e.hasRotation===t.hasRotation&&e.hasCompatibleRotation===t.hasCompatibleRotation}function en(e){let t=(e=>{let t=e;for(;t<=-Math.PI;)t+=2*Math.PI;for(;t>Math.PI;)t-=2*Math.PI;return t})(e);for(;t<=-Math.PI/2;)t+=Math.PI;for(;t>Math.PI/2;)t-=Math.PI;return Math.abs(t)<UI?0:t}function tn(e,t){const n=e.computeShapeLocalToPageTransform(t);return Math.atan2(n.b,n.a)}function nn(e,t){const n=e.selectedShapeIdsSignal.get();if(0===n.length)return{outlineVertices:[],pageBounds:null,frameBounds:null,rotation:0,rotationCenter:null,selectionAnchorPagePoint:null,hasRotation:!1,hasCompatibleRotation:!0};const i=[],o=[],r=[];let s=1/0,a=1/0,l=-1/0,d=-1/0;for(const S of n){const n=e.getShapeSignal(S).get();if(!n)continue;const c=e.getShapeUtil(n),u=Gt(e,n),h=u?c.getSelectionPagePoints(u):null;if(h&&o.push(...h),!c.contributesToSelectionFrame(n,{editor:e}))continue;r.push(n);const p=t(S);if(!p)continue;const g=c.getSelectionFramePositionedOutlineVertices(n,{editor:e}),f=g?(()=>{const t=e.computeShapePositionedToPageTransform(n);return g.map(e=>t.applyToPoint(e))})():p.outlineVertices;i.push(...f);for(const e of f)s=Math.min(s,e.x),a=Math.min(a,e.y),l=Math.max(l,e.x),d=Math.max(d,e.y)}const c=Number.isFinite(s)&&Number.isFinite(a)&&Number.isFinite(l)&&Number.isFinite(d)?new aI(s,a,l-s,d-a):null,u=!(r.length>0)||function(e,t){if(0===t.length)return!0;const n=t[0],i=en(n?tn(e,n):0);return t.every(t=>{return n=tn(e,t),o=i,Math.abs(en(n)-en(o))<UI;var n,o})}(e,r),h=((e,t,n)=>{if(0===t.length||!n)return 0;const i=t[0];return en(i?tn(e,i):0)})(e,r,u),p=((e,t)=>t.some(t=>Math.abs(en(tn(e,t)))>UI))(e,r),g=c?.center??null,f=0===i.length?null:Math.abs(h)<UI||!g?aI.FromPoints(i):aI.FromPoints(i.map(e=>sI.RotWith(e,g,-h))),m=o.length>0?aI.FromPoints(o):null;return{outlineVertices:i,pageBounds:c,frameBounds:f,rotation:h,rotationCenter:g,selectionAnchorPagePoint:f&&g?Math.abs(h)<UI?new sI(f.center.x,f.minY):sI.RotWith(new sI(f.center.x,f.minY),g,h):m?new sI(m.center.x,m.minY):null,hasRotation:p,hasCompatibleRotation:u}}function on(e,t){return e.length===t.length&&e.every((e,n)=>{const i=t[n];return!!i&&e.id===i.id&&e.parentId===i.parentId&&e.type===i.type})}function rn(e,t){return e===t||(e&&t?e.x===t.x&&e.y===t.y&&e.w===t.w&&e.h===t.h:e===t)}function sn(e,t){return e===t||(e&&t?e.x===t.x&&e.y===t.y:e===t)}function an(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],o=t[n];if(!i||!o||!sn(i,o))return!1}return!0}function ln(e,t){return e===t||e.length===t.length&&e.every((e,n)=>e===t[n])}function dn(e,t){return e===t||(e&&t?e.a===t.a&&e.b===t.b&&e.c===t.c&&e.d===t.d&&e.e===t.e&&e.f===t.f:e===t)}function cn(e,t){return e===t||(e&&t?rn(e.bounds,t.bounds)&&sn(e.center,t.center)&&an(e.corners,t.corners)&&an(e.outlineVertices,t.outlineVertices):e===t)}function un(e){return e?e.clone():e}function hn(e){return e?e.clone():e}function pn(e){return e?.map(e=>e.clone())}function gn(e){return e?new lI(e.a,e.b,e.c,e.d,e.e,e.f):void 0}function fn(e){if(0===e.length)return null;let t=1/0,n=1/0,i=-1/0,o=-1/0;for(const r of e)t=Math.min(t,r.minX),n=Math.min(n,r.minY),i=Math.max(i,r.maxX),o=Math.max(o,r.maxY);return new aI(t,n,i-t,o-n)}function mn(e,t){const n=Math.max(e.minX,t.minX),i=Math.max(e.minY,t.minY),o=Math.min(e.maxX,t.maxX),r=Math.min(e.maxY,t.maxY);return o<n||r<i?null:new aI(n,i,o-n,r-i)}function Sn(e,t){return t.canAutomaticallyReceiveChildren(e)}function yn(e,t,n,i){const o=t.sub(e),r=i.sub(n),s=o.x*r.y-o.y*r.x;if(Math.abs(s)<1e-8)return null;const a=n.sub(e),l=(a.x*r.y-a.y*r.x)/s,d=(a.x*o.y-a.y*o.x)/s;return l>=0&&l<=1&&d>=0&&d<=1?l:null}function bn(e,t,n){if(n.containsPoint(e)||n.containsPoint(t))return!0;const i=[new sI(n.minX,n.minY),new sI(n.maxX,n.minY),new sI(n.maxX,n.maxY),new sI(n.minX,n.maxY)];for(let o=0;o<i.length;o+=1){const n=i[o],r=i[(o+1)%i.length];if(n&&r&&null!==yn(e,t,n,r))return!0}return!1}function xn(e,t){return aI.FromPoints([new sI(e.minX,e.minY),new sI(e.maxX,e.minY),new sI(e.maxX,e.maxY),new sI(e.minX,e.maxY)].map(e=>t.applyToPoint(e)))}function In(e){return"top_left"===e||"left"===e||"bottom_left"===e}function wn(e){return"top_right"===e||"right"===e||"bottom_right"===e}function vn(e){return"top_left"===e||"top"===e||"top_right"===e}function Pn(e){return"bottom_left"===e||"bottom"===e||"bottom_right"===e}function kn({handleId:e,scaleX:t,scaleY:n}){const i=In(e)?t<0?"right":"left":wn(e)?t<0?"left":"right":null,o=vn(e)?n<0?"bottom":"top":Pn(e)?n<0?"top":"bottom":null;return"top"===o&&"left"===i?"top_left":"top"===o&&"right"===i?"top_right":"bottom"===o&&"right"===i?"bottom_right":"bottom"===o&&"left"===i?"bottom_left":o||i||e}function Cn({axis:e,startBounds:t,bounds:n,handleId:i,scale:o,isResizingFromCenter:r}){const s=Math.sign(o??1)||1;return r?s:"x"===e?In(i)?n.minX>=t.maxX?-1:1:wn(i)?n.maxX<=t.minX?-1:1:s:vn(i)?n.minY>=t.maxY?-1:1:Pn(i)?n.maxY<=t.minY?-1:1:s}function Tn({requestedBounds:e,handleId:t,actualWidth:n,actualHeight:i,scaleX:o,scaleY:r,isResizingFromCenter:s}){return new aI(s?e.center.x-n/2:In(t)?o<0?e.minX:e.maxX-n:wn(t)?o<0?e.maxX-n:e.minX:e.center.x-n/2,s?e.center.y-i/2:vn(t)?r<0?e.minY:e.maxY-i:Pn(t)?r<0?e.maxY-i:e.minY:e.center.y-i/2,n,i)}function Mn({bounds:e,startBounds:t,handleId:n,aspectRatio:i,isResizingFromCenter:o,scaleX:r,scaleY:s}){if(i<=0)return{bounds:e,scaleX:r??e.w/Math.max(1,t.w),scaleY:s??e.h/Math.max(1,t.h)};let a=e.w,l=e.h;const d=Math.sign(r??1)||1,c=Math.sign(s??1)||1;switch(n){case"left":case"right":l=a/i;break;case"top":case"bottom":a=l*i;break;default:{const e=a/Math.max(1,t.w),n=l/Math.max(1,t.h);Math.abs(e)>Math.abs(n)?l=a/i:a=l*i;break}}if(o){const e=t.center;return{bounds:new aI(e.x-a/2,e.y-l/2,a,l),scaleX:d*(a/Math.max(1,t.w)),scaleY:c*(l/Math.max(1,t.h))}}let u;switch(n){case"top_left":u=new aI(d<0?e.minX:e.maxX-a,c<0?e.minY:e.maxY-l,a,l);break;case"top_right":u=new aI(d<0?e.maxX-a:e.minX,c<0?e.minY:e.maxY-l,a,l);break;case"bottom_right":u=new aI(d<0?e.maxX-a:e.minX,c<0?e.maxY-l:e.minY,a,l);break;case"bottom_left":u=new aI(d<0?e.minX:e.maxX-a,c<0?e.maxY-l:e.minY,a,l);break;case"top":u=new aI(t.center.x-a/2,c<0?t.maxY:t.maxY-l,a,l);break;case"right":u=new aI(d<0?t.minX-a:t.minX,t.center.y-l/2,a,l);break;case"bottom":u=new aI(t.center.x-a/2,c<0?t.minY-l:t.minY,a,l);break;case"left":u=new aI(d<0?t.maxX:t.maxX-a,t.center.y-l/2,a,l)}return{bounds:u,scaleX:d*(a/Math.max(1,t.w)),scaleY:c*(l/Math.max(1,t.h))}}function En(e,t){return e.x===t.x&&e.y===t.y}function An(e){return[new sI(e.minX,e.minY),new sI(e.center.x,e.minY),new sI(e.maxX,e.minY),new sI(e.minX,e.center.y),e.center,new sI(e.maxX,e.center.y),new sI(e.minX,e.maxY),new sI(e.center.x,e.maxY),new sI(e.maxX,e.maxY)]}function Bn(e,t){return"x"===t?e.x:e.y}function Rn(e,t){return"x"===t?e.minX:e.minY}function Ln(e,t){return"x"===t?e.maxX:e.maxY}function $n(e,t){return"x"===t?[e.minY,e.maxY]:[e.minX,e.maxX]}function Fn(e,t){const n=Math.max(e[0],t[0]),i=Math.min(e[1],t[1]);return n<=i?[n,i]:null}function Un(e,t){return null!==Fn(e,t)}function Dn(e,t){return new aI(e.x+t.x,e.y+t.y,e.w,e.h)}function On(e,t,n){return Dn(e,((e,t)=>"x"===e?new sI(t,0):new sI(0,t))(t,n))}function zn(e){return[new sI(e.minX,e.minY),new sI(e.maxX,e.minY),new sI(e.maxX,e.maxY),new sI(e.minX,e.maxY)]}function Nn(e,t,n){const i=n.sub(t),o=i.len2();if(o<=1e-8)return e.dist2(t);const r=Math.max(0,Math.min(1,((e.x-t.x)*i.x+(e.y-t.y)*i.y)/o));return e.dist2(new sI(t.x+i.x*r,t.y+i.y*r))}function _n(e,t,n){const i=n.sub(t),o=i.len2();if(o<=1e-8)return t.clone();const r=Math.max(0,Math.min(1,((e.x-t.x)*i.x+(e.y-t.y)*i.y)/o));return new sI(t.x+i.x*r,t.y+i.y*r)}function Wn(e,t){if(0===t.length)return null;if(1===t.length){const n=t[0].clone();return{point:n,distanceSquared:e.dist2(n)}}let n=null,i=Number.POSITIVE_INFINITY;const o=2===t.length?1:t.length;for(let r=0;r<o;r+=1){const o=t[r],s=t[(r+1)%t.length];if(!o||!s)continue;const a=Nn(e,o,s);a>=i||(i=a,n=_n(e,o,s))}return n?{point:n,distanceSquared:i}:null}function Xn(e){const t=[],n=new Set;for(const i of e){const e=`${i.x.toFixed(8)}:${i.y.toFixed(8)}`;n.has(e)||(n.add(e),t.push(i))}return t}function Hn(e){const t=e.map(e=>({value:e.point.x,point:e})),n=e.map(e=>({value:e.point.y,point:e}));return t.sort(Kn),n.sort(Kn),{x:t,y:n}}function Kn(e,t){return e.value-t.value||e.point.id.localeCompare(t.point.id)}function Yn(e,t,n,i){const o=((e,t)=>"x"===t?e.x:e.y)(e,t),r=[];for(let s=((e,t)=>{let n=0,i=e.length;for(;n<i;){const o=Math.floor((n+i)/2),r=e[o];r&&r.value<t?n=o+1:i=o}return n})(o,n);s<o.length;s+=1){const e=o[s];if(!e||e.value>i)break;r.push(e.point)}return r}function qn(e){return e.weight??(e.kind?_I[e.kind]:0)}function jn(e,t){return`points:${e}:${[...t].sort().join("|")}`}function Vn(e,t,n){if(!t)return!0;const i=(e=>Math.min(.2*e,1.5))(n);return e.distance<t.distance-1e-8?!(t.weight>e.weight+1e-8&&t.distance-e.distance<=i):e.distance<=t.distance+i&&e.weight>t.weight+1e-8}function Gn(e,t,n,i,o={}){const r=o.releaseThreshold??i,s=Math.max(i,r),a=o.switchDistance??0;let l=null,d=null;for(const g of t){const t=Bn(g,e),a=Yn(n,e,t-s,t+s);o.stats&&(o.stats.candidatePointCount+=a.length);for(const n of a){const s=Bn(n.point,e)-t,a=Math.abs(s),c={offset:s,distance:a,weight:qn(n),fromPrevious:!1};if(a<=i&&Vn(c,l,i)&&(l=c),o.previousCandidatePointIds?.has(n.id)&&a<=r){const e={...c,fromPrevious:!0};Vn(e,d,r)&&(d=e)}}}const c=d&&(!l||l.distance+a>=d.distance)?d:l;if(!c)return null;const u=c.fromPrevious&&c.distance>i?r:i,h=[];for(const[g,f]of t.entries()){const t=Bn(f,e),i=Yn(n,e,t-u,t+u);for(const n of i){const i=Bn(n.point,e)-t;Math.abs(i)>u||Math.abs(i-c.offset)>1e-8||h.push({selectionPoint:f,selectionPointKind:o.selectionPointKinds?.[g],candidatePoint:n.point,candidatePointKind:n.kind,candidatePointId:n.id,candidateNodeId:n.nodeId})}}o.stats&&(o.stats.matchedPointCount+=h.length);const p=Array.from(new Set(h.map(e=>e.candidatePointId)));return h.length>0?{type:"points",id:jn(e,p),nudge:c.offset,distance:c.distance,weight:c.weight,candidatePointIds:p,pairs:h}:null}function Zn(e,t){const n=[];switch(e){case"top":case"left":case"top_left":case"any":n.push(new sI(t.minX,t.minY))}switch(e){case"top":case"right":case"top_right":case"any":n.push(new sI(t.maxX,t.minY))}switch(e){case"bottom":case"right":case"bottom_right":case"any":n.push(new sI(t.maxX,t.maxY))}switch(e){case"bottom":case"left":case"bottom_left":case"any":n.push(new sI(t.minX,t.maxY))}return n}function Qn(e,t){const n="x"===t?"horizontal":"vertical",i=[...e].sort((e,n)=>Rn(e.bounds,t)-Rn(n.bounds,t)),o=[];for(let r=0;r<i.length;r+=1){const e=i[r];if(!e)continue;let s=Number.POSITIVE_INFINITY;for(let a=r+1;a<i.length;a+=1){const r=i[a];if(!r)continue;const l=Ln(e.bounds,t),d=Rn(r.bounds,t);if(d>s+1e-8)break;if(l>=d)continue;const c=Fn($n(e.bounds,t),$n(r.bounds,t));c&&(s=d,o.push({direction:n,startNode:e,endNode:r,length:d-l,breadthIntersection:c}))}}return o}function Jn(e,t,n,i){const o=Fn($n(t.bounds,i),$n(n.bounds,i));return o?{direction:e,startNode:t,endNode:n,length:Rn(n.bounds,i)-Ln(t.bounds,i),breadthIntersection:o}:null}function ei(e,t){return[e,t.direction,t.startNode.id,t.endNode.id,t.length.toFixed(8)].join(":")}function ti(e,t,n,i,o={}){const r=$n(t,e),s=((e,t)=>"x"===t?e.w:e.h)(t,e),a=o.releaseThreshold??i,l=o.switchDistance??0;let d=i+1,c=null,u=null;const h=(e,t,n)=>{const r=Math.abs(e);0!==t.length&&(r<=i&&r<d-1e-8&&(d=r,c={type:"gaps",id:n,nudge:e,distance:r,gaps:t}),o.previousSnapId===n&&r<=a&&(!u||r<u.distance-1e-8)&&(u={type:"gaps",id:n,nudge:e,distance:r,gaps:t}))},p=n=>({id:"selection",bounds:On(t,e,n)});for(const g of n){if(s<=g.length&&Un(r,g.breadthIntersection)){const n=Ln(g.startNode.bounds,e)+(g.length-s)/2-Rn(t,e),i=p(n);h(n,[Jn(g.direction,g.startNode,i,e),Jn(g.direction,i,g.endNode,e)].filter(e=>null!==e),`${ei(e,g)}:center`)}const n=Ln(g.endNode.bounds,e)+g.length-Rn(t,e),i=p(n);if(Un($n(i.bounds,e),g.breadthIntersection)){const t=Jn(g.direction,g.endNode,i,e);h(n,t?[g,t]:[],`${ei(e,g)}:after`)}const o=Rn(g.startNode.bounds,e)-g.length-Ln(t,e),a=p(o);if(Un($n(a.bounds,e),g.breadthIntersection)){const t=Jn(g.direction,a,g.startNode,e);h(o,t?[t,g]:[],`${ei(e,g)}:before`)}}return u&&(!c||c.distance+l>=u.distance)?u:c}function ni(e,t,n={}){if(!e)return t;if(!t)return e;const i=n.switchDistance??0;return"points"===n.previousSnap?.type&&n.previousSnap.id===e.id?Math.abs(t.nudge)+i<Math.abs(e.nudge)?t:e:"gaps"===n.previousSnap?.type&&n.previousSnap.id===t.id?Math.abs(e.nudge)+i<Math.abs(t.nudge)?e:t:Math.abs(e.nudge)<=Math.abs(t.nudge)?e:t}function ii(e,t){return e===t||e.length===t.length&&e.every((e,n)=>{const i=t[n];return!(!i||e.type!==i.type)&&("points"===e.type&&"points"===i.type?((e,t)=>e.id===t.id&&e.axis===t.axis&&e.rotation===t.rotation&&En(e.rotationCenter,t.rotationCenter)&&En(e.line[0],t.line[0])&&En(e.line[1],t.line[1])&&e.points.length===t.points.length&&e.points.every((e,n)=>{const i=t.points[n];return!!i&&En(e,i)}))(e,i):"gaps"===e.type&&"gaps"===i.type&&function(e,t){return e.id===t.id&&e.direction===t.direction&&e.rotation===t.rotation&&En(e.rotationCenter,t.rotationCenter)&&e.gaps.length===t.gaps.length&&e.gaps.every((e,n)=>{const i=t.gaps[n];return!!i&&((e,t)=>En(e.startEdge[0],t.startEdge[0])&&En(e.startEdge[1],t.startEdge[1])&&En(e.endEdge[0],t.endEdge[0])&&En(e.endEdge[1],t.endEdge[1]))(e,i)})}(e,i))})}function oi(e){return"horizontal"===e.direction?{startEdge:[new sI(e.startNode.bounds.maxX,e.startNode.bounds.minY),new sI(e.startNode.bounds.maxX,e.startNode.bounds.maxY)],endEdge:[new sI(e.endNode.bounds.minX,e.endNode.bounds.minY),new sI(e.endNode.bounds.minX,e.endNode.bounds.maxY)]}:{startEdge:[new sI(e.startNode.bounds.minX,e.startNode.bounds.maxY),new sI(e.startNode.bounds.maxX,e.startNode.bounds.maxY)],endEdge:[new sI(e.endNode.bounds.minX,e.endNode.bounds.minY),new sI(e.endNode.bounds.maxX,e.endNode.bounds.minY)]}}function ri(e,t,n,i){const o=t.pairs.some(({candidatePointKind:e,selectionPointKind:t})=>"center"===e&&"center"===t),r=Xn([...t.pairs.map(({selectionPoint:e})=>e.add(n)),...t.pairs.map(({candidatePoint:e})=>e.clone())]),s=Xn([...t.pairs.filter(({selectionPointKind:e})=>"center"===e).map(({selectionPoint:e})=>e.add(n)),...t.pairs.filter(({candidatePointKind:e})=>"center"===e).map(({candidatePoint:e})=>e.clone())]),a=o?s:r,l=o?s:Xn([...t.pairs.filter(({selectionPointKind:e})=>"center"!==e&&"edge_midpoint"!==e).map(({selectionPoint:e})=>e.add(n)),...t.pairs.filter(({candidatePointKind:e})=>"center"!==e&&"edge_midpoint"!==e).map(({candidatePoint:e})=>e.clone())]),d=di(e,a);return{id:ci(e,d,l),type:"points",axis:e,line:d,points:l,rotation:i.rotation,rotationCenter:i.rotationCenter.clone()}}function si(e,t,n,i){return ai(e,t,n).map(t=>ri(e,t,n,i))}function ai(e,t,n){const i=new Map;for(const o of t.pairs){const t=Bn(o.selectionPoint.add(n),e).toFixed(8),r=i.get(t);r?r.push(o):i.set(t,[o])}return Array.from(i.values()).map(e=>({type:"points",id:t.id,nudge:t.nudge,distance:t.distance,weight:t.weight,candidatePointIds:Array.from(new Set(e.map(e=>e.candidatePointId))),pairs:e}))}function li(e,t,n){return"x"===e?[new sI(t,n.minY),new sI(t,n.maxY)]:[new sI(n.minX,t),new sI(n.maxX,t)]}function di(e,t){if(0===t.length)return[sI.Zero(),sI.Zero()];let n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,o=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY;for(const s of t)n=Math.min(n,s.x),i=Math.max(i,s.x),o=Math.min(o,s.y),r=Math.max(r,s.y);return"x"===e?[new sI(n,o),new sI(n,r)]:[new sI(n,o),new sI(i,o)]}function ci(e,t,n){return`points:${e}:line:${t.map(e=>`${e.x.toFixed(4)},${e.y.toFixed(4)}`).join("|")}:points:${n.map(e=>`${e.x.toFixed(4)},${e.y.toFixed(4)}`).join("|")}`}function ui(e,t,n,i,o,r){return ai(e,t,n).map(t=>((e,t,n,i,o,r)=>{const s=ri(e,t,n,i),a=t.pairs[0],l=Bn(a?.selectionPoint.add(n)??o.center,e),d=new Map(r.map(e=>[e.id,e.bounds])),c=[],u=new Set;for(const g of t.pairs){if(u.has(g.candidateNodeId))continue;u.add(g.candidateNodeId);const t=d.get(g.candidateNodeId);t&&c.push(...li(e,l,t))}const h=Xn([...s.points,...li(e,l,o),...c]),p=di(e,Xn([...li(e,l,o),...c]));return{...s,id:ci(e,p,h),line:p,points:h}})(e,t,n,i,o,r))}function hi(e,t,n){const i="x"===e?new sI(n.x,t.y):new sI(t.x,n.y),o=Xn([n.clone(),i]),r=di(e,o);return{id:ci(e,r,o),type:"points",axis:e,line:r,points:o,rotation:0,rotationCenter:sI.Zero()}}function pi(e,t,n){const i="horizontal"===e.gaps[0]?.direction?new sI(0,n.y):new sI(n.x,0),o=e.gaps.map(e=>({...e,startNode:"selection"===e.startNode.id?{...e.startNode,bounds:Dn(e.startNode.bounds,i)}:e.startNode,endNode:"selection"===e.endNode.id?{...e.endNode,bounds:Dn(e.endNode.bounds,i)}:e.endNode}));return{id:`gaps:${o.map(e=>`${e.startNode.id}:${e.endNode.id}:${e.length.toFixed(4)}`).join("|")}`,type:"gaps",direction:o[0]?.direction??"horizontal",gaps:o.map(oi),rotation:t.rotation,rotationCenter:t.rotationCenter.clone()}}function gi(e){return"points"===e.type?{...e,line:[e.line[0].clone(),e.line[1].clone()],points:e.points.map(e=>e.clone()),rotationCenter:e.rotationCenter.clone()}:{...e,gaps:e.gaps.map(e=>({startEdge:[e.startEdge[0].clone(),e.startEdge[1].clone()],endEdge:[e.endEdge[0].clone(),e.endEdge[1].clone()]})),rotationCenter:e.rotationCenter.clone()}}function fi(e,t){return 0===t.rotation?e.clone():sI.RotWith(e,t.rotationCenter,-t.rotation)}function mi(e,t){return 0===t.rotation?e.clone():sI.RotWith(e,t.rotationCenter,t.rotation)}function Si(e,t){return mi(e,t)}function yi(e,t,n,i,o){return 0===n?i:i+(e-t)/n*o}function bi({point:e,fromBounds:t,toBounds:n}){return new sI(yi(e.x,t.minX,t.w,n.minX,n.w),yi(e.y,t.minY,t.h,n.minY,n.h))}function xi({axis:e,bounds:t,point:n}){return"horizontal"===e?new sI(t.minX+t.maxX-n.x,n.y):new sI(n.x,t.minY+t.maxY-n.y)}function Ii({axis:e,bounds:t,selectionBounds:n}){return"horizontal"===e?new aI(n.minX+n.maxX-t.maxX,t.minY,t.w,t.h):new aI(t.minX,n.minY+n.maxY-t.maxY,t.w,t.h)}function wi(e){return{point:e.point,kind:e.kind??"custom",weight:e.weight}}function vi(e){const t=e.sourcePointOffsets;return t&&t.length>0?t.map(t=>e.pagePoint.add(t)):[e.pagePoint]}function Pi(e,t){return Number.isFinite(e)&&Number.isFinite(t)&&Math.abs(((e,t)=>{let n=(e-t)%Math.PI;return n<=-Math.PI/2&&(n+=Math.PI),n>Math.PI/2&&(n-=Math.PI),n})(e,t))<.001}function ki(e,t,n){return t.every(t=>{const i=e.computeShapeLocalToPageTransform(t);return Pi(Math.atan2(i.b,i.a),n)})}function Ci(e,t,n,i){const o=1===t.length,r=(s=t.map(t=>e.getShapeUtil(t).getAllowedSelectionResizeModes(t,{editor:e,handleId:n,isOnlyResizeTarget:o})),HI.filter(e=>s.every(t=>t.includes(e))));var s;return i?r:r.filter(e=>"free"!==e)}function Ti(e,t,n){if(0===t.length)return[];const i=1===t.length,o=t.map(t=>e.getShapeUtil(t).getSelectionResizeHandleIds(t,{editor:e,isOnlyResizeTarget:i})),r=ki(e,t,n);return WI.filter(n=>o.every(e=>e.includes(n))&&Ci(e,t,n,r).length>0)}function Mi(e,t){return e===t||(e&&t?e.x===t.x&&e.y===t.y:e===t)}function Ei(e,t){return e===t||(e&&t?e.x===t.x&&e.y===t.y&&e.w===t.w&&e.h===t.h:e===t)}function Ai(e,t){return e===t||(e&&t?e.localPath===t.localPath&&((e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]))(e.localDecorationPaths,t.localDecorationPaths)&&Ei(e.localBounds,t.localBounds)&&((e,t)=>e.a===t.a&&e.b===t.b&&e.c===t.c&&e.d===t.d&&e.e===t.e&&e.f===t.f)(e.localToPage,t.localToPage)&&e.strokeWidth===t.strokeWidth&&e.strokeDasharray===t.strokeDasharray:e===t)}function Bi(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],o=t[n];if(!i||!o)return!1;if(!(i.id===o.id&&i.usesSelectionPathOverlay===o.usesSelectionPathOverlay&&Mi(i.startPagePoint,o.startPagePoint)&&Mi(i.endPagePoint,o.endPagePoint)&&Mi(i.middlePagePoint,o.middlePagePoint)&&Ai(i.pathStyle,o.pathStyle)&&Dt(i.bindingSegments,o.bindingSegments)&&i.path===o.path&&i.pageClipPath===o.pageClipPath))return!1}return!0}function Ri(e,t){return e===t||(e&&t?Ei(e.bounds,t.bounds)&&e.rotation===t.rotation&&Mi(e.rotationCenter,t.rotationCenter)&&e.strokeWidth===t.strokeWidth&&e.cornerRadius===t.cornerRadius:e===t)}function Li(e,t){return e===t||(e&&t?Ei(e.bounds,t.bounds)&&e.rotation===t.rotation&&Mi(e.rotationCenter,t.rotationCenter):e===t)}function $i(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(!Li(e[n]??null,t[n]??null))return!1;return!0}function Fi(e,t){return e.strokeWidth===t.strokeWidth&&e.cornerRadius===t.cornerRadius}function Ui(e,t){return e.id===t.id&&Mi(e.point,t.point)&&Ei(e.bounds,t.bounds)}function Di(e,t){return e.id===t.id&&Mi(e.point,t.point)&&Ei(e.bounds,t.bounds)}function Oi(e,t){return e.terminal===t.terminal&&Mi(e.point,t.point)&&Ei(e.bounds,t.bounds)}function zi(e,t){return Mi(e.point,t.point)&&Ei(e.bounds,t.bounds)}function Ni(e,t){return e.type===t.type&&e.id===t.id&&e.cursor===t.cursor&&Mi(e.point,t.point)&&Ei(e.bounds,t.bounds)}function _i(e,t){return e.id===t.id&&Mi(e.point,t.point)}function Wi(e,t){return e.id===t.id&&Mi(e.point,t.point)}function Xi(e,t){return e.terminal===t.terminal&&Mi(e.point,t.point)}function Hi(e,t){return Mi(e.point,t.point)}function Ki(e,t){return e.type===t.type&&e.id===t.id&&e.cursor===t.cursor&&Mi(e.point,t.point)}function Yi(e,t,n){if(e===t)return!0;if(e.length!==t.length)return!1;for(let i=0;i<e.length;i+=1){const o=e[i],r=t[i];if(!o||!r||!n(o,r))return!1}return!0}function qi({bounds:e,rotateOffset:t,referenceRotation:n,frameRotation:i}){return((e,t)=>{const n=Math.round((e-t)/Math.PI);return 1===Math.abs(n%2)})(n,i)?new sI(e.maxX+t,e.minY-t):new sI(e.minX-t,e.maxY+t)}function ji(e,t){return e===t||(e&&t?e.strokeWidth===t.strokeWidth&&Yi(e.resizeHandles,t.resizeHandles,Ui)&&Yi(e.rotateHandles,t.rotateHandles,Di)&&Yi(e.terminalHandles,t.terminalHandles,Oi)&&Yi(e.middleHandles,t.middleHandles,zi)&&Yi(e.customHandles,t.customHandles,Ni):e===t)}function Vi(e,t){return e===t||(e&&t?Yi(e.resizeHandleAnchors,t.resizeHandleAnchors,_i)&&Yi(e.rotateHandleAnchors,t.rotateHandleAnchors,Wi)&&Yi(e.terminalHandleAnchors,t.terminalHandleAnchors,Xi)&&Yi(e.middleHandleAnchors,t.middleHandleAnchors,Hi)&&Yi(e.customHandleAnchors,t.customHandleAnchors,Ki):e===t)}function Gi(e,t){return e===t||(e&&t?e.resizeHandleCount===t.resizeHandleCount&&e.rotateHandleCount===t.rotateHandleCount&&e.terminalHandleCount===t.terminalHandleCount&&e.middleHandleCount===t.middleHandleCount&&e.customHandleCount===t.customHandleCount:e===t)}function Zi(e){return 1===e.length&&!!e[0]?.usesSelectionPathOverlay}function Qi(e,t,n,i,o,r,s){const a=e.map(e=>i(e)),l=e.every(e=>o(e)),d=e.every(e=>r(e)),c=new Set(s),u=a.flatMap(e=>e.terminalHandleAnchors),h=a.flatMap(e=>e.middleHandleAnchors),p=a.flatMap(e=>e.customHandleAnchors??[]),g=u.length>0||h.length>0||p.length>0;if(!t)return{resizeHandleAnchors:[],rotateHandleAnchors:[],terminalHandleAnchors:u,middleHandleAnchors:h,customHandleAnchors:p};const{bounds:f,rotation:m,rotationCenter:S,hasCompatibleRotation:y}=t,b=e[0]?.rotation??m,x=8/n,I=14/n,w=f.w<2*x,v=f.h<2*x,P=e=>0===m?e:sI.RotWith(e,S,m),k=new sI(f.minX,f.minY),C=new sI(f.center.x,f.minY),T=new sI(f.maxX,f.minY),M=new sI(f.maxX,f.center.y),E=new sI(f.maxX,f.maxY),A=new sI(f.center.x,f.maxY),B=new sI(f.minX,f.maxY),R=new sI(f.minX,f.center.y);return{resizeHandleAnchors:l&&!g&&y?[{kind:"resize",id:"top_left",point:P(k)},...w?[]:[{kind:"resize",id:"top",point:P(C)}],...w&&v?[]:[{kind:"resize",id:"top_right",point:P(T)}],...v?[]:[{kind:"resize",id:"right",point:P(M)}],...w||v?[]:[{kind:"resize",id:"bottom_right",point:P(E)}],...w?[]:[{kind:"resize",id:"bottom",point:P(A)}],...w||v?[]:[{kind:"resize",id:"bottom_left",point:P(B)}],...v?[]:[{kind:"resize",id:"left",point:P(R)}]].filter(e=>c.has(e.id)):[],rotateHandleAnchors:!d||g||!y||w||v?[]:[{kind:"rotate",id:"bottom_left_rotate",point:P(qi({bounds:f,rotateOffset:I,referenceRotation:b,frameRotation:m}))}],terminalHandleAnchors:u,middleHandleAnchors:h,customHandleAnchors:p}}function Ji(e,t){const n=8/t,i=n/2,o=e=>new aI(e.x-i,e.y-i,n,n);return{resizeHandles:e.resizeHandleAnchors.map(e=>({...e,bounds:o(e.point)})),rotateHandles:e.rotateHandleAnchors.map(e=>({...e,bounds:o(e.point)})),terminalHandles:e.terminalHandleAnchors.map(e=>({...e,bounds:o(e.point)})),middleHandles:e.middleHandleAnchors.map(e=>({...e,bounds:o(e.point)})),customHandles:e.customHandleAnchors.map(e=>({...e,bounds:o(e.point)}))}}function eo(e){const t=e.getSelectedShapes();if(0===t.length)return null;if(t.some(e=>e.isLocked))return null;const n=t[0]?.parentId;if(!n)return null;if(t.some(e=>e.parentId!==n))return null;const i=e.getChildShapes(n),o=new Set(t.map(e=>e.id)),r=i.map((e,t)=>o.has(e.id)?t:-1).filter(e=>e>=0);return r.length!==t.length?null:{parentId:n,selectedCount:t.length,count:i.length,canMoveBackward:r.some(e=>e>0&&!o.has(i[e-1].id)),canMoveForward:r.some(e=>e<i.length-1&&!o.has(i[e+1].id))}}function to(e){const t=e.getSelectedShapes();if(1!==t.length)return null;const[n]=t;if(!n||n.isLocked)return null;const i=e.getChildShapes(n.parentId),o=i.findIndex(e=>e.id===n.id);return o<0?null:{parentId:n.parentId,index:o,count:i.length,canMoveBackward:o>0,canMoveForward:o<i.length-1}}function no(e,t){const n=t.map(t=>e.getShape(t)).filter(e=>!!e);if(0===n.length)return null;if(n.some(t=>t.isLocked||e.isShapeHidden(t.id)))return null;const i=n[0]?.parentId;if(!i)return null;if(n.some(e=>e.parentId!==i))return null;const o=e.getChildShapes(i),r=new Set(n.map(e=>e.id)),s=o.map((e,t)=>r.has(e.id)?t:-1).filter(e=>e>=0);return s.length!==n.length?null:{parentId:i,selectedCount:n.length,count:o.length,canMoveBackward:s.some(e=>e>0&&!r.has(o[e-1].id)),canMoveForward:s.some(e=>e<o.length-1&&!r.has(o[e+1].id))}}function io(e,t,n,i="user"){const o=no(e,t);if(!o)return!1;const r=e.getChildShapes(o.parentId),s=new Set(t),a=[...r];let l=!1;if("backward"===n)for(let d=1;d<a.length;d+=1){const e=a[d],t=a[d-1];e&&t&&s.has(e.id)&&!s.has(t.id)&&(a[d-1]=e,a[d]=t,l=!0)}else for(let d=a.length-2;d>=0;d-=1){const e=a[d],t=a[d+1];e&&t&&s.has(e.id)&&!s.has(t.id)&&(a[d]=t,a[d+1]=e,l=!0)}return!!l&&(e.cancelInteractionForCommand(),e.commands.updateShapes(a.map((t,n)=>({id:t.id,index:e.createShapeIndex(n+1)})),{source:i}),!0)}function oo(e,t,n,i="user"){const o=no(e,t);if(!o)return!1;const r=e.getChildShapes(o.parentId),s=new Set(t),a=[],l=[];for(const c of r)s.has(c.id)?a.push(c):l.push(c);if(a.length!==s.size)return!1;if(!("back"===n?o.canMoveBackward:o.canMoveForward))return!1;const d="back"===n?[...a,...l]:[...l,...a];return e.cancelInteractionForCommand(),e.commands.updateShapes(d.map((t,n)=>({id:t.id,index:e.createShapeIndex(n+1)})),{source:i}),!0}function ro(e){const t="string"==typeof e?{key:e}:e;return{key:lo(t.key),altKey:t.altKey??!1,ctrlKey:t.ctrlKey,metaKey:t.metaKey,shiftKey:t.shiftKey??!1,accelKey:t.accelKey}}function so(e){const t=ro(e),n=[];var i;return t.accelKey?n.push("⌘"):(t.ctrlKey&&n.push("Ctrl"),t.metaKey&&n.push("Meta")),t.altKey&&n.push("Alt"),t.shiftKey&&n.push("Shift"),n.push(1===(i=t.key).length?i.toUpperCase():i),n.join("")}function ao(e,t){return!(lo(t.key)!==e.key||t.altKey!==e.altKey||t.shiftKey!==e.shiftKey||void 0!==e.accelKey&&t.accelKey!==e.accelKey||void 0!==e.ctrlKey&&t.ctrlKey!==e.ctrlKey||void 0!==e.metaKey&&t.metaKey!==e.metaKey||void 0===e.accelKey&&void 0===e.ctrlKey&&void 0===e.metaKey&&t.accelKey)}function lo(e){return e.toLowerCase()}function co(e){return[e.key,e.altKey?"alt":null,e.ctrlKey?"ctrl":null,e.metaKey?"meta":null,e.shiftKey?"shift":null,e.accelKey?"accel":null].filter(Boolean).join("+")}function uo(e,t,n){return Math.min(n,Math.max(t,e))}function ho(e){return 0===e.length?"none":e.map(e=>`${e.start}-${e.end-1}`).join(", ")}function po(e,t=0){if(0===e.length)return[];const n=[...e].sort((e,t)=>e.start-t.start),i=[];for(const o of n){const e=i[i.length-1];!e||o.start>e.end+t?i.push({...o}):e.end=Math.max(e.end,o.end)}return i}function go(e,t){if(!Number.isFinite(e))return t;const n=Math.max(0,Math.floor((e-3)/2));return Math.min(t,n)}function fo(e){return e.reduce((e,t)=>e+(t.end-t.start),0)}function mo(e,t,n=0){return po(e.map(e=>t.get(e)).filter(e=>void 0!==e).map(e=>({start:e,end:e+1})),n)}function So(e,t){const n=[];for(const i of t)n.push(...e.slice(i.start,i.end));return n}function yo(e,t,n){return{viewportReady:n?.viewportReady??!0,ranges:t.map(e=>({...e})),shapeIds:So(e,t)}}function bo(e,t){return{originScreenPoint:t.clone(),originCamera:e.getCurrentCamera()}}function xo(e,t,n){const i=n.sub(t.originScreenPoint),o=t.originCamera.z;e.setCamera({x:t.originCamera.x-i.x/o,y:t.originCamera.y-i.y/o},{source:"user"})}function Io(e){let t=null;for(const i of e.splice(0).reverse())try{i()}catch(n){t??=n}return t}function wo({outputBounds:e,cutoutLocalPolygons:t,localToOutput:n}){const i=t.filter(e=>e.length>=3);return 0===i.length?null:[vo((o=e.expand(100),[new sI(o.minX,o.minY),new sI(o.maxX,o.minY),new sI(o.maxX,o.maxY),new sI(o.minX,o.maxY)])),...i.map(e=>vo(e,n))].join(" ");var o}function vo(e,t){const n=t?e.map(e=>t.applyToPoint(e)):e,i=n[0];return i?[`M ${Po(i.x)} ${Po(i.y)}`,...n.slice(1).map(e=>`L ${Po(e.x)} ${Po(e.y)}`),"Z"].join(" "):""}function Po(e){return Number.isFinite(e)?Number(e.toFixed(3)).toString():"0"}function ko(e){return[new sI(e.minX,e.minY),new sI(e.maxX,e.minY),new sI(e.maxX,e.maxY),new sI(e.minX,e.maxY)]}function Co(e,t,n,i){const o=t.sub(e),r=i.sub(n),s=o.x*r.y-o.y*r.x;if(Math.abs(s)<1e-8)return null;const a=n.sub(e),l=(a.x*r.y-a.y*r.x)/s,d=(a.x*o.y-a.y*o.x)/s;return l>=0&&l<=1&&d>=0&&d<=1?l:null}function To(e,t,n){const i=e[t];return"number"==typeof i&&Number.isFinite(i)?i:n}function Mo(e){return Math.min(1,Math.max(0,(96-e)/96))}function Eo(e,t,n){if(t.w<=0||t.h<=0||n<=0)return sI.Zero();const i=Math.min(n,32),o=Mo(e.x),r=Mo(t.w-e.x),s=Mo(e.y),a=1.25*(r-o)*i,l=1.25*(Mo(t.h-e.y)-s)*i;return 0===a&&0===l?sI.Zero():new sI(a,l)}function Ao(e,t,n){const i=e.inputs.state.get();if("dragging"!==i.dragPhase||!i.currentPagePoint)return null;let o=i.currentPagePoint;if(!i.currentScreenPoint)return"apply_after_scroll"===n?null:{pagePoint:o,shiftKey:i.shiftKey,altKey:i.altKey,accelKey:i.accelKey,ctrlKey:i.ctrlKey};const r=Eo(i.currentScreenPoint,e.viewportScreenSizeSignal.get(),t.elapsed),s=0!==r.x||0!==r.y;return s||"always_apply"===n?(s&&(e.panCamera(r),o=e.screenToPage(i.currentScreenPoint)),{pagePoint:o,shiftKey:i.shiftKey,altKey:i.altKey,accelKey:i.accelKey,ctrlKey:i.ctrlKey}):null}function Bo(e,t){const n=(e=>{const t=e.inputs.state.get();return"dragging"===t.dragPhase&&t.currentPagePoint?{pagePoint:t.currentPagePoint,shiftKey:t.shiftKey,altKey:t.altKey,accelKey:t.accelKey,ctrlKey:t.ctrlKey}:null})(e);n&&t(n)}function Ro(e,t,n){const i=new Set(n);if(i.has(t))return t;const o=Lo(e,t);for(const s of o)if(i.has(s.ancestorId))return s.childId;const r=o[0]?.ancestorId;return r&&n.some(t=>((e,t)=>Lo(e,t)[0]?.ancestorId??null)(e,t)===r)?t:o[o.length-1]?.ancestorId??t}function Lo(e,t){const n=[];let i=e.getShape(t),o=t;const r=new Set([t]);for(;i?.parentId.startsWith("shape:");){const t=i.parentId;if(r.has(t))return n;r.add(t);const s=e.getShape(t);if(!s)return n;e.getShapeUtil(s).isSelectionTransformContainer(s)&&n.push({ancestorId:s.id,childId:o}),o=s.id,i=s}return n}function $o({shiftKey:e,accelKey:t}){return e||t}function Fo({ctrlKey:e}){return e}function Uo(e){let t=e;for(;t<=-Math.PI;)t+=2*Math.PI;for(;t>Math.PI;)t-=2*Math.PI;return t}function Do(e,t){return Math.round(e/t)*t}function Oo(e,t,n,i,o,r,s,a,l,d,c,u){const h=zo(d,c),p=(({bounds:e,fromBounds:t,toBounds:n})=>{const i=bi({point:new sI(e.minX,e.minY),fromBounds:t,toBounds:n}),o=bi({point:new sI(e.maxX,e.maxY),fromBounds:t,toBounds:n});return new aI(Math.min(i.x,o.x),Math.min(i.y,o.y),Math.abs(o.x-i.x),Math.abs(o.y-i.y))})({bounds:t.localBounds,fromBounds:n,toBounds:i}),g=mi(p.center,h),f=e.getShapeUtil(t.pageShape),m=Pi(t.pageShape.rotation,c),S=m?p:(()=>{const e=f.getSelectionResizeLocalBounds(t.pageShape),n=e.w*Math.abs(o),i=e.h*Math.abs(r);return new aI(g.x-n/2,g.y-i/2,n,i)})(),y=f.resizeSelectionBounds(t.pageShape,{handleId:s,isOnlyResizeTarget:a,pageCenter:g,selectionLocalBounds:S,scaleX:o,scaleY:r,isResizingFromCenter:l,selectionRotation:m?c:t.pageShape.rotation,selectionRotationCenter:m?d:g}),b=Zt(e,t.shape,t.pageShape,y);b&&Object.assign(u,b)}function zo(e,t){return{rotation:t,rotationCenter:e}}function No(e,t,n,i,o,r,s,a,l,d,c){const u=zo(l,d),h=mi(_o({point:t.startLocalPagePoint,startBounds:n,scaleX:o,scaleY:r,handleId:s,isResizingFromCenter:a}),u),p=mi(_o({point:t.endLocalPagePoint,startBounds:n,scaleX:o,scaleY:r,handleId:s,isResizingFromCenter:a}),u),g=t.middleLocalPagePoint?mi(_o({point:t.middleLocalPagePoint,startBounds:n,scaleX:o,scaleY:r,handleId:s,isResizingFromCenter:a}),u):void 0,f=e.getShapeUtil(t.pageShape).updateSelectionPagePoints(t.pageShape,{pagePoints:[h,p],pageMiddlePoint:g}),m=Zt(e,t.shape,t.pageShape,f);m&&Object.assign(c,m)}function _o({point:e,startBounds:t,scaleX:n,scaleY:i,handleId:o,isResizingFromCenter:r}){const s=(({startBounds:e,handleId:t,isResizingFromCenter:n})=>n?e.center.x:In(t)?e.maxX:wn(t)?e.minX:e.center.x)({startBounds:t,handleId:o,isResizingFromCenter:r}),a=(({startBounds:e,handleId:t,isResizingFromCenter:n})=>n?e.center.y:vn(t)?e.maxY:Pn(t)?e.minY:e.center.y)({startBounds:t,handleId:o,isResizingFromCenter:r});return new sI(s+(e.x-s)*n,a+(e.y-a)*i)}function Wo(e,t,n,i,o){const r=t.localBounds.center,s=Si(new sI(t.pageShape.x+r.x,t.pageShape.y+r.y),{rotation:i,rotationCenter:n}),a=Zt(e,t.shape,t.pageShape,{id:t.shape.id,x:s.x-r.x,y:s.y-r.y,rotation:t.rotation+i});a&&Object.assign(o,a)}function Xo(e,t,n,i,o){const r=e.getShapeUtil(t.pageShape).updateSelectionPagePoints(t.pageShape,{pagePoints:[Si(t.startPagePoint,{rotation:i,rotationCenter:n}),Si(t.endPagePoint,{rotation:i,rotationCenter:n})],pageMiddlePoint:t.middlePagePoint?Si(t.middlePagePoint,{rotation:i,rotationCenter:n}):void 0}),s=Zt(e,t.shape,t.pageShape,r);s&&Object.assign(o,s)}function Ho(e,t){let n=null;for(const i of t){const t=e.getShape(i);if(!t)return null;if(n){if(t.parentId!==n)return null}else n=t.parentId}return n}function Ko(e,t,n){const i=n?e.getContainingShapeParentIdAtPoint(t,n):e.getContainingShapeParentId(t);if(!i)return null;const o=Ho(e,t);if(!o||!o.startsWith("shape:")||i===o)return i;const r=e.getShape(o);return r&&e.getShapeUtil(r).canReceiveChildren(r)?e.getShapeUtil(r).canAutomaticallyReceiveChildren(r)?n?i:t.every(t=>{const n=e.getShapeContainment(r.id,t);return"inside"===n||"intersecting"===n})?o:i:o:i}function Yo(e,t,n){const i=Ko(e,t,n);i&&t.some(t=>e.getShape(t)?.parentId!==i)&&e.commands.reparentShapes({ids:[...t],parentId:i})}function qo(e,t,n,i={}){let o=!0;return(e=>{const r=new oI(e,()=>{t.get(),o&&!1===i.fireImmediately?o=!1:(o=!1,n())},void 0);return r.attach(),()=>r.detach()})(e)}function jo(e){return{id:e,kind:"value"}}function Vo(e){return!(!e||"object"!=typeof e)&&("string"==typeof e.id&&("api"===e.kind||"service"===e.kind||"value"===e.kind))}function Go(e){return Object.freeze({id:e})}function Zo(){const e=xx(Lw);if(!e)throw new Error("useEditor must be used within EditorContext.Provider");return e}function Qo(e){const t=bx(t=>qo("useValue",e,t,{fireImmediately:!1}),[e]),n=bx(()=>e.get(),[e]);return Mx(t,n,n)}function Jo({children:e,className:t,dataUi:n}){const i=Zo(),o=Cx(null);return Px(()=>qo("PageSpace.transform",i.pageTransformSignal,()=>{const e=o.current;e&&(e.style.transform=i.pageTransformSignal.get().toCssString())}),[i]),Ax("div",{ref:o,"data-ui":n,className:t,style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",transformOrigin:"0 0"},children:e})}function er(e=[]){const t=new $w;return t.registerCanvasRenderPlugins(e),t}function tr(){return xx(Uw)}function nr(){const e="undefined"!=typeof window&&"1"===new URLSearchParams(window.location.search).get("renderHostDebug");
2
- return Bx("div",{"data-ui":"shape-layer",className:"land-canvas__shape-layer",style:{position:"absolute",left:0,top:0,width:"100%",height:"100%"},children:[Ax(Jo,{dataUi:"shape-page-space",className:"land-canvas__shape-page-space",children:Ax(Ow,{})}),e?Ax(zw,{}):null]})}function ir(e,t,n){const i=new Set;let o=t.parentId;for(;o.startsWith("shape:");){const t=o;if(t===e)return!0;if(i.has(t))return!1;i.add(t);const r=n.get(t);if(!r)return!1;o=r.parentId}return!1}function or({Component:e,editor:t,shape:n}){
3
- return Ax("div",{"aria-hidden":"true","data-ui":"shape-hover-decoration",style:{position:"absolute",inset:0,pointerEvents:"none"},children:Ax(e,{shape:n,editor:t,strokeWidth:2/Qo(t.cameraZoomSignal)})})}function rr(){
4
- return Ax("div",{"data-ui":"transform-descendant-ancestor-boundary",style:{position:"absolute",inset:0,border:"1px dashed #64748b",pointerEvents:"none"}})}function sr(){
5
- return Ax("div",{"data-ui":"shape-drop-target-label",style:{position:"absolute",left:10,top:10,display:"flex",alignItems:"center",height:24,padding:"0 10px",borderRadius:999,background:"#2563eb",color:"white",fontFamily:"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",fontSize:12,fontWeight:700,lineHeight:"24px",boxShadow:"0 10px 24px rgba(37, 99, 235, 0.24)",whiteSpace:"nowrap",pointerEvents:"none"},children:"Drop into container"})}function ar({children:e,clipAncestorIds:t,shapeElementToPage:n}){return 0===t.length?Ax(Ex,{children:e}):t.reduceRight((e,t)=>Ax(lr,{ancestorId:t,shapeElementToPage:n,children:e},t),e)}function lr({ancestorId:e,children:t,shapeElementToPage:n}){const i=Zo(),o=Qo(i.getShapeSignal(e));if(!o)return Ax(Ex,{children:t});const r=((e,t,n)=>{const i=e.getShapeUtil(t).getChildClipLocalPolygons(t);if(!i)return null;const o=e.computeShapeRenderToPageTransform(t),r=n.tryInvert();if(!r)return null;const s=i.filter(e=>e.length>=3).map(e=>e.map(e=>r.applyToPoint(o.applyToPoint(e)))).filter(e=>e.every(e=>Number.isFinite(e.x)&&Number.isFinite(e.y)));return 0===s.length?null:1===s.length?`polygon(${s[0].map(ur).join(", ")})`:`path("${s.map(cr).join(" ")}")`})(i,o,n);return r?Ax("div",{"data-ui":"shape-clip-boundary","data-clip-ancestor-id":e,style:{position:"absolute",inset:0,width:"100%",height:"100%",clipPath:r,WebkitClipPath:r,overflow:"visible"},children:t}):Ax(Ex,{children:t})}function dr(e,t,n){const i=e.computeShapeRenderBounds(t),o=n.compose(lI.Translate(i.x,i.y));return{left:0,top:0,width:i.w,height:i.h,transform:o.toCssString(),transformOrigin:"0 0",elementToPage:o}}function cr(e){return e.map((e,t)=>`${0===t?"M":"L"} ${hr(e.x)} ${hr(e.y)}`).concat("Z").join(" ")}function ur(e){return`${hr(e.x)}px ${hr(e.y)}px`}function hr(e){return Number.isFinite(e)?Number(e.toFixed(3)).toString():"0"}function pr(e,t){return(e.order??0)-(t.order??0)}function gr(e=[]){const t=new Xw;return t.registerCanvasRenderPlugins(e),t}function fr(){return xx(Kw)}function mr(e,t){return"binding-preview"===e?{underlay:{"data-binding-preview-segment-underlay":t},segment:{"data-binding-preview-segment":t}}:"terminal-binding-guide"===e?{underlay:{"data-terminal-binding-guide-underlay":t},segment:{"data-terminal-binding-guide":t}}:{underlay:{"data-selection-binding-segment-underlay":t},segment:{"data-selection-binding-segment":t}}}function Sr({start:e,end:t,startInset:n,endInset:i,strokeWidth:o,dashSize:r,gapSize:s,kind:a,terminal:l}){const d=(({start:e,end:t,startInset:n,endInset:i})=>{const o=t.x-e.x,r=t.y-e.y,s=Math.hypot(o,r);if(s<1e-6)return null;const a=Math.max(0,s/2-.001),l=Math.min(n,a),d=Math.min(i,a),c=o/s,u=r/s;return{start:{x:e.x+c*l,y:e.y+u*l},end:{x:t.x-c*d,y:t.y-u*d}}})({start:e,end:t,startInset:n,endInset:i});if(!d)return null;const c=mr(a,l);
6
- return Bx("g",{style:{pointerEvents:"none"},children:[Ax("line",{...c.underlay,x1:d.start.x,y1:d.start.y,x2:d.end.x,y2:d.end.y,fill:"none",stroke:qw,strokeLinecap:"round",strokeWidth:2.2*o}),Ax("line",{...c.segment,x1:d.start.x,y1:d.start.y,x2:d.end.x,y2:d.end.y,fill:"none",stroke:Yw,strokeDasharray:`${r} ${s}`,strokeLinecap:"round",strokeWidth:o})]})}function yr({path:e,strokeWidth:t,dashSize:n,gapSize:i,kind:o,terminal:r}){const s=mr(o,r);
7
- return Bx("g",{style:{pointerEvents:"none"},children:[Ax("path",{...s.underlay,d:e,fill:"none",stroke:qw,strokeLinecap:"round",strokeWidth:2.2*t}),Ax("path",{...s.segment,d:e,fill:"none",stroke:Yw,strokeDasharray:`${n} ${i}`,strokeLinecap:"round",strokeWidth:t})]})}function br({editor:e,shape:t,stroke:n,fill:i,strokeWidth:o}){const r=e.getShapePageOutlineVertices(t.id);return 0===r.length?null:Ax("polygon",{points:r.map(e=>`${e.x},${e.y}`).join(" "),fill:i,stroke:n,strokeWidth:o,strokeLinejoin:"round",strokeLinecap:"round"})}function xr({frame:e,handleId:t,zoom:n}){const i=((e,t)=>{const{bounds:n}=e;switch(t){case"top":return{x1:n.minX,y1:n.minY,x2:n.maxX,y2:n.minY};case"right":return{x1:n.maxX,y1:n.minY,x2:n.maxX,y2:n.maxY};case"bottom":return{x1:n.minX,y1:n.maxY,x2:n.maxX,y2:n.maxY};case"left":return{x1:n.minX,y1:n.minY,x2:n.minX,y2:n.maxY};default:return null}})(e,t);return i?Ax("line",{"data-selection-resize-border":t,x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2,fill:"none",stroke:"transparent",strokeWidth:12/n,strokeLinecap:"butt",style:{cursor:Ir(t,e.rotation),pointerEvents:"stroke"}}):null}function Ir(e,t){const n=(((e=>{switch(e){case"top_left":case"bottom_right":return Math.PI/4;case"top":case"bottom":return Math.PI/2;case"top_right":case"bottom_left":return 3*Math.PI/4;case"right":case"left":return 0}})(e)+t)%Math.PI+Math.PI)%Math.PI/(Math.PI/4);return rv[Math.round(n)%rv.length]??"default"}function wr({handle:e,strokeWidth:t}){
8
- return Ax("rect",{"data-selection-custom-handle":e.id,"data-selection-custom-handle-type":e.type,"data-selection-custom-handle-id":e.id,"data-selection-custom-handle-visual":"default",x:e.bounds.x,y:e.bounds.y,width:e.bounds.w,height:e.bounds.h,rx:3,ry:3,fill:"rgba(255,255,255,0.98)",stroke:"rgba(37, 99, 235, 0.92)",strokeWidth:t,style:{cursor:e.cursor??"grab",pointerEvents:"auto"}})}function vr({dataPrefix:e,pathStyle:t,stroke:n,strokeWidth:i}){
9
- return Bx(Ex,{children:[Ax("path",{"data-selection-overlay":e,d:t.localPath,fill:"none",stroke:n,strokeWidth:i,strokeDasharray:t.strokeDasharray,strokeLinecap:"round",strokeLinejoin:"round",pointerEvents:"none"}),t.localDecorationPaths.map((t,o)=>Ax("path",{"data-selection-overlay":`${e}-decoration`,d:t,fill:"none",stroke:n,strokeWidth:i,strokeLinecap:"round",strokeLinejoin:"round",pointerEvents:"none"},`${o}:${t}`))]})}function Pr(e,t){const n=Math.max(e[0],t[0]),i=Math.min(e[1],t[1]);return n<=i?[n,i]:null}function kr(){
10
- return Ax("div",{"data-ui":"overlay-layer",className:"land-canvas__overlay-layer",style:{position:"absolute",left:0,top:0,width:"100%",height:"100%"},children:Ax(Jo,{dataUi:"overlay-page-space",className:"land-canvas__overlay-page-space",children:Ax(mv,{})})})}function Cr(e=[]){const t=new yv;return t.registerCanvasRenderPlugins(e),t}function Tr(e){const t=(e=>e instanceof HTMLElement?e:null)(e);return!!t&&(!!t.isContentEditable||!!t.closest('[contenteditable="true"]')||t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement)}function Mr(e){return(e??("undefined"==typeof document?null:document))?.querySelector(xv)??null}function Er(e,t,n){return e.screenToPage(((e,t=Mr())=>{if(!t)return new sI(e.clientX,e.clientY);const n=t.getBoundingClientRect();return new sI(e.clientX-n.left,e.clientY-n.top)})(t,n))}function Ar(e,t){return{type:"keyboard",name:e,...Rr(t),code:t.code}}function Br(e,t,n){e.getShapeEditingSession()?n||e.handleInteractionEvent(Ar("key_up",t)):n||e.dispatch(Ar("key_up",t))}function Rr(e){return{key:e.key,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.metaKey||e.ctrlKey}}function Lr(e){return"Space"===e.code}function $r(e,t){const n=t.ownerDocument;return e===n||e===n.body||e===n.documentElement||e instanceof Node&&t.contains(e)}function Fr(e,t,n,i){return{type:"pointer",name:e,timestamp:t.timeStamp,pointerId:t.pointerId,button:t.button,buttons:t.buttons,pointerType:(o=t.pointerType,"touch"===o||"pen"===o?o:"mouse"),clickCount:t.detail,screenPoint:n,pagePoint:i,pressure:t.pressure,shiftKey:t.shiftKey,altKey:t.altKey,ctrlKey:t.ctrlKey,metaKey:t.metaKey,accelKey:t.metaKey||t.ctrlKey};var o}function Ur(e,t){return new sI(e.clientX-t.left,e.clientY-t.top)}function Dr(e,t){return e instanceof Node&&t.contains(e)}function Or(e,t){return(e%t+t)%t}function zr(){const e=Qo(Zo().currentCameraSignal);
11
- return Bx("svg",{"data-ui":"canvas-background","aria-hidden":"true",className:"land-canvas__grid-background",xmlns:"http://www.w3.org/2000/svg",style:{position:"absolute",inset:0,width:"100%",height:"100%",pointerEvents:"none"},children:[Ax("defs",{children:Iv.map(({min:t,mid:n,step:i})=>{const o=15*i*e.z,r=((e,t)=>({x:Or(.5-e.x*e.z,t),y:Or(.5-e.y*e.z,t)}))(e,o),s=e.z<n?(a=((e,[t,n],[i,o])=>i+(e-t)/(n-t)*(o-i))(e.z,[t,n],[0,1]),Math.max(0,Math.min(1,a))):1;var a;
12
- return Ax("pattern",{id:`land-canvas-grid-${i}`,width:o,height:o,patternUnits:"userSpaceOnUse",children:Ax("circle",{cx:r.x,cy:r.y,r:1,fill:"var(--land-canvas-grid-minor, var(--canvas-dot))",opacity:s})},i)})}),Iv.map(({step:e})=>Ax("rect",{width:"100%",height:"100%",fill:`url(#land-canvas-grid-${e})`},e))]})}function Nr(e,t,n,i){return n||"hand"===e&&t?"grabbing":i||"hand"===e?"grab":"select"===e?void 0:"crosshair"}function _r({canvasComponents:e,canvasProviders:t,domEventGuardRegistry:n,onContextMenuRequest:i,overlayRegistry:o,rendererRegistry:r,showGrid:s=!1}={}){const a=Zo(),l=kx(()=>r??er(),[r]),d=kx(()=>o??gr(),[o]),c=kx(()=>n??Cr(),[n]),u=Qo(a.toolStateSignal).activeToolId,h=Qo(a.shapeEditingStateSignal).session,p=Qo(a.inputs.isSpacePressed)&&null===h,{containerRef:g,handlers:f,isPointerActive:m,isCameraPanning:S,surfaceCursor:y}=function({activeDomEventGuards:e,activeToolId:t,editor:n,onContextMenuRequest:i,shapeEditingSession:o}){const r=Cx(null),s=Cx(null),a=Cx(null),l=Cx(null),d=Cx(null),c=Cx(null),u=Cx(null),[h,p]=Tx(!1),[g,f]=Tx(!1),[m,S]=Tx(void 0),y=null!==o;Ix(()=>{("select"!==t||y)&&n.setHoveredShapeId(null)},[t,n,y]);const b=bx(()=>{null!==d.current&&(cancelAnimationFrame(d.current),d.current=null),c.current=null},[]),x=bx(e=>{if(null===a.current)return void b();const t=c.current??e;c.current=e,n.dispatch({type:"tick",timestamp:e,elapsed:e-t}),d.current=requestAnimationFrame(x)},[n,b]),I=bx(()=>{null===d.current&&(c.current=null,d.current=requestAnimationFrame(x))},[x]);return Ix(()=>{const i=r.current;if(!i)return;let o=null;const d=()=>{const e=i.getBoundingClientRect(),t={left:e.left,top:e.top};return s.current=t,t},c=()=>s.current??d(),h=()=>{null!==o&&(window.cancelAnimationFrame(o),o=null)},g=({clientPoint:e,target:o})=>{if(h(),!e||null!==a.current||"select"!==t||y)return void n.setHoveredShapeId(null);const r=i.getBoundingClientRect();if(!Dr(o,i)||e.x<r.left||e.x>r.right||e.y<r.top||e.y>r.bottom)return void n.setHoveredShapeId(null);const s=c(),l=new sI(e.x-s.left,e.y-s.top),d=n.hitTestShape(n.screenToPage(l));if(!d)return void n.setHoveredShapeId(null);const u=n.getShapeUtil(d).getHoverTargetId(d,{editor:n});n.setHoveredShapeId(n.getOutermostSelectableShapeId(u))},m=()=>{const e=u.current;g({clientPoint:e,target:e?document.elementFromPoint(e.x,e.y):null})},x=()=>{null===o&&(o=window.requestAnimationFrame(()=>{o=null,m()}))},I=(t,o)=>"handled"===e.handle({name:t,event:o,editor:n,container:i}),w=()=>{if(!y)return void S(void 0);const t=u.current;S(t?e.getCursor({clientPoint:t,element:document.elementFromPoint(t.x,t.y),editor:n,container:i}):void 0)},v=(e,t)=>{if(!r.current)return;const i=Ur(t,c());n.dispatch(Fr(e,t,i,n.screenToPage(i)))},P=()=>{n.setViewportScreenSize({w:i.clientWidth,h:i.clientHeight})};d(),P();const k=e=>{if(I("key_down",e))return;if(n.getShapeEditingSession()){const t=Tr(e.target);return t||"Escape"!==e.key||e.altKey||e.ctrlKey||e.metaKey?!t&&n.handleInteractionEvent(Ar("key_down",e))?(e.preventDefault(),void e.stopPropagation()):void(t||"Enter"!==e.key||!e.metaKey&&!e.ctrlKey||n.completeEditing("user")):(e.preventDefault(),e.stopPropagation(),n.cancelInteractionAndClearTransients("escape"),void(n.getShapeEditingSession()&&n.cancelEditing("user")))}if(Tr(e.target))return;if(Lr(e)){if(!$r(e.target,i))return;e.preventDefault()}const t=n.shortcuts.getTargetForEvent(Rr(e));t&&"action"!==t.type&&e.preventDefault(),n.dispatch(Ar("key_down",e))},C=e=>{if(Lr(e)&&n.inputs.pressedKeyCodes.get().has(e.code)&&!n.getShapeEditingSession())return e.preventDefault(),void Br(n,e,!1);I("key_up",e)||Lr(e)&&!$r(e.target,i)||Br(n,e,Tr(e.target))},T=()=>{a.current=null,l.current=null,p(!1),f(!1),n.setHoveredShapeId(null),b(),n.dispatch({type:"cancel",reason:"blur"})},M=e=>{if(I("wheel",e))return;e.preventDefault();const t={x:e.clientX,y:e.clientY};u.current=t;const i=Ur(e,c()),o=n.screenToPage(i);n.dispatch(((e,t,n)=>({type:"wheel",screenPoint:t,pagePoint:n,delta:new sI(e.deltaX,e.deltaY),shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.metaKey||e.ctrlKey}))(e,i,o)),g({clientPoint:t,target:document.elementFromPoint(t.x,t.y)})},E=e=>{if(u.current={x:e.clientX,y:e.clientY},g({clientPoint:u.current,target:e.target}),w(),e.pointerId!==a.current){const t=Ur(e,c());if(n.inputs.setCurrentPointerPoint({timestamp:e.timeStamp,screenPoint:t,pagePoint:n.screenToPage(t),shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.metaKey||e.ctrlKey}),I("pointer_move",e))return;if(!((e,t)=>{const n=t.getBoundingClientRect();return e.clientX>=n.left&&e.clientX<=n.right&&e.clientY>=n.top&&e.clientY<=n.bottom})(e,i)||!Dr(e.target,i)||Tr(e.target))return;return void v("pointer_move",e)}const t={clientX:e.clientX,clientY:e.clientY,buttons:e.buttons,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey};var o,r;r=t,(o=l.current)&&o.clientX===r.clientX&&o.clientY===r.clientY&&o.buttons===r.buttons&&o.shiftKey===r.shiftKey&&o.altKey===r.altKey&&o.ctrlKey===r.ctrlKey&&o.metaKey===r.metaKey||(l.current=t,v("pointer_move",e))},A=(e,t)=>{t.pointerId===a.current&&(a.current=null,l.current=null,p(!1),f(!1),b(),i.hasPointerCapture(t.pointerId)&&i.releasePointerCapture(t.pointerId),v(e,t),"pointer_up"===e?m():n.setHoveredShapeId(null))},B=()=>{u.current=null,n.setHoveredShapeId(null),w()},R=e=>{u.current={x:e.clientX,y:e.clientY},window.setTimeout(w,0),e.pointerId===a.current?A("pointer_up",e):I("pointer_up",e)},L=e=>{u.current={x:e.clientX,y:e.clientY},w(),e.pointerId===a.current?A("pointer_cancel",e):I("pointer_cancel",e)},$=new ResizeObserver(()=>{d(),P(),x()}),F=()=>{d(),x()},U=n.listen(x);window.addEventListener("keydown",k),window.addEventListener("keyup",C),window.addEventListener("blur",T),window.addEventListener("scroll",F,{passive:!0,capture:!0}),window.addEventListener("pointermove",E,{passive:!0}),window.addEventListener("pointerup",R),window.addEventListener("pointercancel",L),i.addEventListener("pointerleave",B),i.addEventListener("wheel",M,{passive:!1}),$.observe(i);const D=window.requestAnimationFrame(w);return x(),()=>{b(),h(),U(),p(!1),f(!1),n.setHoveredShapeId(null),window.cancelAnimationFrame(D),window.removeEventListener("keydown",k),window.removeEventListener("keyup",C),window.removeEventListener("blur",T),window.removeEventListener("scroll",F,!0),window.removeEventListener("pointermove",E),window.removeEventListener("pointerup",R),window.removeEventListener("pointercancel",L),i.removeEventListener("pointerleave",B),i.removeEventListener("wheel",M),$.disconnect()}},[e,t,n,y,b]),{containerRef:r,handlers:{onPointerDown:bx(t=>{const i=r.current;if(!i)return;if(u.current={x:t.clientX,y:t.clientY},2===t.button)return void i.focus();if("handled"===e.handle({name:"pointer_down",event:t.nativeEvent,editor:n,container:i}))return;if(Tr(t.target))return;t.preventDefault(),i.focus(),i.setPointerCapture(t.pointerId);const o=i.getBoundingClientRect();s.current={left:o.left,top:o.top},a.current=t.pointerId,p(!0),f(1===t.button||0===t.button&&n.inputs.isSpacePressed.get()&&!n.getShapeEditingSession()),l.current=null,I();const d=Ur(t,s.current);n.setHoveredShapeId(null),n.dispatch(Fr("pointer_down",t,d,n.screenToPage(d)))},[e,n,I]),onAuxClick:bx(e=>{1!==e.button||Tr(e.target)||(e.preventDefault(),e.stopPropagation())},[]),onContextMenu:bx(e=>{const t=r.current;if(!t||!i||Tr(e.target))return;e.preventDefault(),e.stopPropagation();const o=t.getBoundingClientRect();if(s.current={left:o.left,top:o.top},null!==a.current){const i=a.current;t.hasPointerCapture(i)&&t.releasePointerCapture(i),a.current=null,l.current=null,p(!1),f(!1),b();const o=Ur(e,s.current);n.dispatch({type:"pointer",name:"pointer_cancel",timestamp:e.timeStamp,pointerId:i,button:e.button,buttons:0,pointerType:n.inputs.state.get().pointerType??"mouse",screenPoint:o,pagePoint:n.screenToPage(o),pressure:0,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.metaKey||e.ctrlKey,clickCount:e.detail})}if(n.getShapeEditingSession())return;t.focus();const d=Ur(e,s.current),c=n.screenToPage(d),u=n.hitTestShape(c);let h;if(u){const e=n.getSelectedShapeIds(),t=e.find(e=>e===u.id||n.getDescendantShapeIds(e).includes(u.id))??n.getOutermostSelectableShapeId(u.id),i=e.includes(t);i||n.commands.setSelectedShapeIds([t],{source:"user"}),h={anchor:{screenPoint:d,pagePoint:c},target:{type:"selection",selectedShapeIds:i?e:[t]}}}else h={anchor:{screenPoint:d,pagePoint:c},target:{type:"canvas"}};i(h)},[n,i,b])},isPointerActive:h,isCameraPanning:g,surfaceCursor:m}}({activeDomEventGuards:c,activeToolId:u,editor:a,onContextMenuRequest:i,shapeEditingSession:h});
13
- return Bx("div",{ref:g,"data-ui":bv,className:"land-canvas__surface",tabIndex:0,style:{cursor:y??Nr(u,m,S,p)},...f,children:[s?Ax(zr,{}):null,Ax(Uw.Provider,{value:l,children:Ax(Kw.Provider,{value:d,children:Bx(Wr,{providers:t,children:[
14
- Ax(nr,{}),e?.map(({id:e,component:t})=>Ax(t,{},e)),
15
- Ax(kr,{})]})})})]})}function Wr({children:e,providers:t}){
16
- return Ax(Ex,{children:t?.reduceRight((e,{id:t,component:n})=>Ax(n,{children:e},t),e)??e})}function Xr(e){const t=e.trim();if(!t)return null;const n=(e=>/^[a-z][a-z0-9+.-]*:/i.test(e))(t)?t:`https://${t}`;return Hr(n)?n:null}function Hr(e){try{const t=new URL(e);return"http:"===t.protocol||"https:"===t.protocol||"mailto:"===t.protocol}catch{return!1}}function Kr(e){Hr(e)&&window.open(e,"_blank","noopener,noreferrer")}function Yr(e){return{type:"doc",content:e.split("\n").map(e=>({type:"paragraph",content:e.length>0?[{type:"text",text:e}]:[]}))}}function qr(e){return e.content.map(e=>es(e)).join("\n")}function jr(e){if(!e||"object"!=typeof e)return Yr("");const t=e,n=Array.isArray(t.content)?t.content.map(e=>rs(e,0)).filter(e=>null!==e):[];return{type:"doc",attrs:ps(t.attrs),content:n}}function Vr(e){return e.content.map(e=>(e=>{const t=e.content?.map(e=>ns(e)).join("")??"",n=Zr(e);return`<p style="${n?`margin:0;text-align:${n}`:"margin:0"}">${t.length>0?t:"<br>"}</p>`})(e)).join("")}function Gr(e){return"text"===e.type&&"string"==typeof e.text}function Zr(e){if("paragraph"===e.type)return hs(e.attrs?.textAlign)}function Qr(e,t){const n=e?.some(e=>"code"===e.type)?void 0:t;if(!(e&&0!==e.length||n))return;const i=n?{backgroundColor:n}:{},o=new Set;for(const r of e??[])switch(r.type){case"bold":case"strong":i.fontWeight=700;break;case"italic":case"em":i.fontStyle="italic";break;case"strike":case"s":o.add("line-through");break;case"underline":case"u":o.add("underline");break;case"textStyle":{const e=ls(r.attrs);void 0!==e?.color&&(i.color=e.color),void 0!==e?.backgroundColor&&(i.backgroundColor=e.backgroundColor),void 0!==e?.fontFamily&&(i.fontFamily=e.fontFamily),void 0!==e?.fontSize&&(i.fontSize=e.fontSize),void 0!==e?.lineHeight&&(i.lineHeight=e.lineHeight);break}}return o.size>0&&(i.textDecorationLine=["line-through","underline"].filter(e=>o.has(e)).join(" ")),Object.keys(i).length>0?i:void 0}function Jr(e){if(e&&0!==e.length)for(const t of e){if("link"!==t.type)continue;const e=t.attrs?.href;return"string"==typeof e?e:void 0}}function es(e){return Gr(e)?e.text:e.content?.map(e=>es(e)).join("")??""}function ts(e){const t=[];return void 0!==e.color&&t.push(`color:${e.color}`),void 0!==e.backgroundColor&&t.push(`background-color:${e.backgroundColor}`),void 0!==e.fontFamily&&t.push(`font-family:${e.fontFamily}`),void 0!==e.fontSize&&t.push(`font-size:${e.fontSize}`),void 0!==e.fontWeight&&t.push(`font-weight:${String(e.fontWeight)}`),void 0!==e.fontStyle&&t.push(`font-style:${e.fontStyle}`),void 0!==e.lineHeight&&t.push(`line-height:${e.lineHeight}`),void 0!==e.textDecorationLine&&t.push(`text-decoration-line:${e.textDecorationLine}`),t.join(";")}function ns(e){if(Gr(e)){const t=Qr(e.marks),n=Jr(e.marks),i=is(e.text),o=t?`<span style="${os(ts(t))}">${i}</span>`:i;return n&&Hr(n)?`<a href="${os(n)}" target="_blank" rel="noopener noreferrer">${o}</a>`:t?o:i}return e.content?.map(e=>ns(e)).join("")??""}function is(e){return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")}function os(e){return is(e).replaceAll('"',"&quot;")}function rs(e,t){if(!e||"object"!=typeof e)return null;const n=e,i="string"==typeof n.type?n.type:"paragraph",o=Array.isArray(n.content)?n.content.map(e=>function(e,t){if(!e||"object"!=typeof e||t>8)return null;const n=e;if("text"===n.type){const e=(e=>({type:"text",text:"string"==typeof e.text?e.text:"",marks:Array.isArray(e.marks)?e.marks.map(ss).filter(e=>null!==e):void 0}))(n);return e.text.length>0?e:null}return rs(n,t)}(e,t+1)).filter(e=>null!==e):[];return{type:i,attrs:as(i,n.attrs),content:o}}function ss(e){if(!e||"object"!=typeof e)return null;const t=e;if("string"!=typeof t.type)return null;if("link"===t.type){const e=ps(t.attrs),n=e?.href;return"string"==typeof n&&Hr(n)?{type:"link",attrs:{...e,href:n}}:null}if("textStyle"===t.type){const e=ls(t.attrs);return e?{type:"textStyle",attrs:e}:null}return{type:t.type,attrs:ps(t.attrs)}}function as(e,t){const n=ps(t);if("paragraph"!==e)return n;const i={...n};delete i.textAlign;const o=t&&"object"==typeof t&&!Array.isArray(t)?hs(t.textAlign):void 0;return void 0!==o&&(i.textAlign=o),Object.keys(i).length>0?i:void 0}function ls(e){if(!e||"object"!=typeof e||Array.isArray(e))return;const t=e,n={color:ds(t.color,128),backgroundColor:ds(t.backgroundColor,128),fontFamily:ds(t.fontFamily,256),fontSize:cs(t.fontSize),lineHeight:us(t.lineHeight)},i=Object.entries(n).filter(e=>void 0!==e[1]);return i.length>0?Object.fromEntries(i):void 0}function ds(e,t){if("string"!=typeof e)return;const n=e.trim();return 0===n.length||n.length>t||wv.test(n)||vv.test(n)?void 0:n}function cs(e){const t="string"==typeof e?Pv.exec(e.trim()):null;if(!t||"px"!==t[2]?.toLowerCase())return;const n=Number(t[1]);return n>=1&&n<=512?`${String(n)}px`:void 0}function us(e){const t="string"==typeof e?Pv.exec(e.trim()):null;if(!t)return;const n=Number(t[1]),i=t[2]?.toLowerCase()??"";return("px"===i?n>=1&&n<=1024:"%"===i?n>=50&&n<=1e3:n>=.5&&n<=10)?`${String(n)}${i}`:void 0}function hs(e){return"left"===e||"center"===e||"right"===e?e:void 0}function ps(e){if(!e||"object"!=typeof e)return;const t=Object.entries(e).map(([e,t])=>[e,gs(t)]).filter(e=>void 0!==e[1]);return t.length>0?Object.fromEntries(t):void 0}function gs(e,t=0){if(null===e||"string"==typeof e||"number"==typeof e||"boolean"==typeof e)return e;if(!(t>8)){if(Array.isArray(e))return e.map(e=>gs(e,t+1)).filter(e=>void 0!==e);if(e&&"object"==typeof e){const n=Object.entries(e).map(([e,n])=>[e,gs(n,t+1)]).filter(e=>void 0!==e[1]);return Object.fromEntries(n)}}}function fs(e){return f(e)&&"text"===e.type}function ms(e){return{richText:e.richText,w:e.w,h:e.h,autoSize:e.autoSize,scale:e.scale,font:e.font,size:e.size,color:e.color,backgroundColor:e.backgroundColor,textAlign:e.textAlign}}function Ss(e){return ms(e.getDefaultShapeProps("text"))}function ys(e,t,n="user"){const i={...Ss(e),...t.props,richText:t.props?.richText??Yr("")},[o]=e.commands.createShapes([{type:"text",x:t.x,y:t.y,parentId:t.parentId,index:t.index,rotation:t.rotation,skewX:t.skewX,scaleX:t.scaleX,scaleY:t.scaleY,meta:t.meta,props:{richText:i.richText,w:i.w,h:i.h,autoSize:i.autoSize,scale:i.scale,font:i.font,size:i.size,color:i.color,backgroundColor:i.backgroundColor,textAlign:i.textAlign}}],{source:n});if(!fs(o))throw new Error("Failed to create text shape");return o}function bs(e,t){return e?Math.min(e.paddingInline,Math.max(0,(t-1)/2)):0}function xs(e,t){return de(e.computeShapeLocalToPageTransform(t),e.computeShapeLocalBounds(t),{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY})?.rotation??t.rotation}function Is(e,t,n,i){const o=e.getShapeUtil(t),r=de(e.computeShapeLocalToPageTransform(t),e.computeShapeLocalBounds(t),{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY});if(!r)return null;const s={...t,...r,x:i.x,y:i.y,rotation:i.rotation,props:o.validateProps({...t.props,...i.props})},a=n.startsWith("shape:")?e.getShape(n):null;if(n.startsWith("shape:")&&!a)return null;const l=(a?e.computeShapeLocalToPageTransform(a):lI.Identity()).tryInvert();return l?de(l.compose(o.getLocalToPageTransform(s)),o.getLocalBounds(s),{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY}):null}function ws(e,t,n){const i=e.getBindingsToShape(t).find(e=>e.type===n);if(!i)return null;const o=e.getShape(i.fromId);return fs(o)?o:null}function vs(e,t){const n={...Ss(e),...t.layout.props,autoSize:!1,textAlign:"middle"},i=Is(e,{id:"shape:draft-label",typeName:"shape",scope:"document",type:"text",parentId:t.owner.parentId,index:t.index,x:0,y:0,rotation:0,skewX:0,scaleX:1,scaleY:1,opacity:1,isHidden:!1,isLocked:!1,meta:{},props:n},t.owner.parentId,t.layout);if(!i)return null;const o=e.operations.begin({kind:t.historyMarkId,label:"shape.create",source:"user",history:"record"});try{const o=ys(e,{x:i.x,y:i.y,parentId:t.owner.parentId,index:t.index,rotation:i.rotation,skewX:i.skewX,scaleX:i.scaleX,scaleY:i.scaleY,props:n},"user");return e.commands.createBinding({type:t.bindingType,fromId:o.id,toId:t.owner.id,props:t.bindingProps},{source:"user"}),o}catch(r){throw o.cancel(),r}}function Ps(e,t){const n=e.getShape(t);if(!fs(n))return null;const i=e.getBindingsFromShape(t).find(e=>e.type in Tv);if(!i)return null;const o=i.type;return{label:n,ownerId:i.toId,bindingType:o,behavior:Tv[o]}}function ks(e,t,n,i){if("path-label"===i)return{minWidth:24,maxWidth:120,paddingInline:4.25};const o=Math.max(.01,t.props.scale);return{minWidth:16,maxWidth:Math.max(16,e.computeShapeLocalBounds(n).w/o),paddingInline:16}}function Cs(e,t){const n=Ps(e,t.id);if(!n)return null;const i=e.getShape(n.ownerId);return i?ks(e,t,i,n.bindingType):null}function Ts(e,t,n){e.startEditingShape({shapeId:t.id,entryMode:"selectAll",markId:n.isExisting?n.editMarkId:n.createMarkId,reuseActiveOperation:!n.isExisting},"user")}function Ms(e,t,n){return e.content.map((e,i)=>((e,t,n,i)=>{const o=Es(e,t,n,"codeBlock"===e.type?void 0:i);
17
- return Ax("p",{style:{margin:0,textAlign:Zr(e)},children:o.length>0?o:Ax("br",{})},t)})(e,`block:${i}`,t,n))}function Es(e,t,n,i){return e.content?.map((e,o)=>((e,t,n,i)=>{if(Gr(e)){const o=Qr(e.marks,i),r=Jr(e.marks);return r&&Hr(r)?Ax("span",{"data-rich-text-link":"true","data-rich-text-link-href":r,onPointerEnter:e=>{n?.onPointerEnter?.({href:r,element:e.currentTarget})},onPointerLeave:()=>{n?.onPointerLeave?.()},style:{...o,cursor:n?"pointer":void 0,pointerEvents:n?"auto":"none",textDecorationLine:As(o?.textDecorationLine)},children:e.text},t):Ax("span",{style:o,children:e.text},t)}return Es(e,t,n,"codeBlock"===e.type?void 0:i)})(e,`${t}:${o}`,n,i))??[]}function As(e){const t=new Set(e?.split(/\s+/u)??[]);return t.add("underline"),["line-through","underline"].filter(e=>t.has(e)).join(" ")}function Bs(){return{defaultFont:Ev,defaultFontLabel:"Default",fonts:[]}}function Rs(){return Ls(Bs())}function Ls(e){const t=new Map;for(const n of e.fonts)$s(n.id)&&"default"!==n.id&&t.set(n.id,n);return{defaultFont:e.defaultFont,defaultFontLabel:e.defaultFontLabel,fontOptions:[{id:Mv,label:e.defaultFontLabel,cssFamily:e.defaultFont.cssFamily,source:e.defaultFont.source},...t.values()],fontsById:t}}function $s(e){return"string"==typeof e&&e.trim().length>0}function Fs(e,t){return"default"===t?e.defaultFont:e.fontsById.get(t)??e.defaultFont}function Us(e,t,n){const i=Fs(t,e),o=n??("undefined"==typeof document?void 0:document);if(!o||!Ds(i.source))return Promise.resolve();const r=(e=>{const{source:t}=e;return t&&"system"!==t.kind?"stylesheet"===t.kind?`${e.id}:stylesheet:${t.cssUrl}`:`${e.id}:font-face:${t.family}:${String(t.src)}`:e.id})(i),s=(e=>{const t=Av.get(e);if(t)return t;const n=new Map;return Av.set(e,n),n})(o),a=s.get(r);if(a)return a;const l=(async(e,t)=>{const{source:n}=t;if(Ds(n))return"stylesheet"===n.kind?(await((e,t,n)=>Array.from(e.querySelectorAll("link[data-land-text-font]")).find(e=>e.dataset.landTextFont===t.id)?Promise.resolve():new Promise(i=>{const o=e.createElement("link");o.rel="stylesheet",o.href=n.cssUrl,o.dataset.landTextFont=t.id;const r=()=>i();o.addEventListener("load",r,{once:!0}),o.addEventListener("error",r,{once:!0}),(e.head??e.documentElement).appendChild(o)}))(e,t,n),void(await Os(e,n))):(await(async(e,t)=>{const{fonts:n}=e,i=e.defaultView?.FontFace;if(!n||!i)return;if(Array.from(n).filter(e=>e.family===t.family&&"loaded"===e.status).length>0)return;const o=await new i(t.family,t.src,t.descriptors).load();n.add(o)})(e,n),void(await Os(e,n)))})(o,i).catch(()=>{s.delete(r)});return s.set(r,l),l}function Ds(e){return!!e&&"system"!==e.kind}async function Os(e,t){const{fonts:n}=e;if(!n)return;const i=(e=>{if(e.weights)return e.weights;if("font-face"===e.kind){const t=e.descriptors?.weight;if("string"==typeof t&&/^\d+$/.test(t))return[Number(t)]}return[400]})(t),o=t.sampleText??"Aa";await Promise.all(i.map(e=>n.load(`${e} 16px "${t.family}"`,o)))}function zs(e){return Bv.get(e)?.api??null}function Ns(e){const t=Bv.get(e);if(t)return t;const n={api:null,disposeApiSubscription:null,listeners:new Set};return Bv.set(e,n),n}function _s(e){for(const t of e.listeners)t()}function Ws(e,t){const n=Rv[t];let i=!1,o=!1;return Ks(e.content,(e,t)=>{"text"!==e.type||!e.text||t.insideCodeBlock||e.marks?.some(e=>"code"===e.type)||(e.marks?.some(e=>n.includes(e.type))?i=!0:o=!0)}),i&&o?"mixed":i}function Xs(e){const t=[];if(Ks(e.content,(e,n)=>{if("text"!==e.type||!e.text||n.insideCodeBlock||e.marks?.some(e=>"code"===e.type))return;const i=(e.marks?.find(e=>"textStyle"===e.type))?.attrs?.backgroundColor;t.push("string"==typeof i&&i.length>0?i:null)}),0===t.length)return null;const n=t[0]??null;return t.every(e=>e===n)?n:"mixed"}function Hs(e){if("paragraph"!==e.type||void 0===e.attrs?.textAlign)return e;const t={...e.attrs};return delete t.textAlign,{...e,attrs:Object.keys(t).length>0?t:void 0}}function Ks(e,t,n=!1){for(const i of e)t(i,{insideCodeBlock:n}),i.content&&Ks(i.content,t,n||"codeBlock"===i.type)}function Ys(e,t,n=!1){let i=!1;return{nodes:e.map(e=>{const o=t(e,{insideCodeBlock:n}),r=o.content;if(!r)return o!==e&&(i=!0),o;const s=Ys(r,t,n||"codeBlock"===o.type);return s.changed?(i=!0,{...o,content:s.nodes}):(o!==e&&(i=!0),o)}),changed:i}}function qs(e){try{return e.view.dom.isConnected}catch{return!1}}function js(e){!e.isDestroyed&&qs(e)&&(e.view.dom.focus(),e.view.focus())}function Vs(e){if(!qs(e))return{type:null,text:null};const t=(e=>{if(!e)return{type:null,text:null};const t=window.getSelection();if(!t||0===t.rangeCount)return{type:t?.type??null,text:null};const n=t.anchorNode,i=t.focusNode,o=e instanceof HTMLElement?e:e.parentElement,r=!!n&&!!i&&null!==o&&o.contains(n)&&o.contains(i);return{type:r?t.type:null,text:r?t.toString():null}})(e.view.dom);if(null!==t.type)return t;const n=e.state.selection;return{type:n.empty?"Caret":"Range",text:n.empty?"":e.state.doc.textBetween(n.from,n.to,"\n")}}function Gs(e,t=Dv){return"number"==typeof e&&Number.isFinite(e)?Math.max(1,e):t}function Zs(e,t){return Fs(t,e).cssFamily}function Qs(e){return Gs(e)}function Js(e){const t=Gs(e);return Ov[t]??Math.ceil(1.4*t)}function ea(e,t=1){return Math.max(1,Math.ceil(Js(e)*t))}function ta(e){switch(e){case"middle":return"center";case"end":return"right";default:return"left"}}function na(e,t,n,i){return 0===qr(e).trim().length?ia(t,i):oa(t,(o=Vr(e),r={...ra(t,i),shape:t,fontCatalog:n},sa(document).measureHtml(o,r)),i);var o,r}function ia(e,t){const n=t?t.minWidth:e.props.autoSize?16:e.props.w,i=ea(e.props.size);if(e.props.w!==n||e.props.h!==i)return{w:n,h:i}}function oa(e,t,n){const i=n?Math.min(n.maxWidth,Math.max(n.minWidth,Math.ceil(t.w+2*n.paddingInline))):e.props.autoSize?Math.max(16,Math.ceil(t.w)):e.props.w,o=Math.max(ea(e.props.size),Math.ceil(t.h));if(i!==e.props.w||o!==e.props.h)return{w:i,h:o}}function ra(e,t){if(t){const e=bs(t,t.maxWidth);return{maxWidth:Math.max(1,t.maxWidth-2*e)}}return e.props.autoSize?{}:{width:e.props.w}}function sa(e){const t=Nv.get(e);if(t)return t;const n=new zv(e);return Nv.set(e,n),n}function aa(e,t,n){n&&"normal"!==n&&"auto"!==n&&(e.style[t]=n)}function la(e,t,n){if(t.isDestroyed()||!t.isConnected())return;const i=t.measure(n);i&&ca(e,n,i,"user")}function da(e,t,n,i="system"){const o=na(t.props.richText,t,n,Cs(e,t));o&&ca(e,t,o,i)}function ca(e,t,n,i){const o=e.getShape(t.id);fs(o)&&o.props.w===n.w&&o.props.h===n.h||e.commands.updateShapes([{id:t.id,props:n}],{source:i})}function ua({editor:e,fontCatalog:t,landEditor:n,shapeId:i}){const o=()=>{const e=n.getShape(i);return fs(e)?e:null},r={shapeId:i,getSnapshot(){if(e.isDestroyed)return null;const n=o();return n?(({editor:e,fontCatalog:t,shape:n})=>{const i=e.state.selection,o=(e=>{const{selection:t,doc:n}=e.state;return t.empty?{from:0,to:n.content.size}:{from:t.from,to:t.to}})(e),r=i.empty?"shape":"selection",s=U(n.props.color),a=D(n.props.backgroundColor)?null:U(n.props.backgroundColor),l=n.props.textAlign;return{shapeId:n.id,target:r,bold:Sa(e,o,"bold"),italic:Sa(e,o,"italic"),strike:Sa(e,o,"strike"),underline:Sa(e,o,"underline"),color:ya(e,o,"color",s),backgroundColor:ya(e,o,"backgroundColor",0===e.state.doc.textContent.length?a:null),font:wa(ya(e,o,"fontFamily",n.props.font),e=>((e,t)=>t.fontOptions.find(t=>t.cssFamily===e)?.id??e)(e,t)),size:wa(ya(e,o,"fontSize",n.props.size),e=>((e,t)=>{if("number"==typeof e)return e;const n=Number.parseFloat(e);return Number.isFinite(n)&&n>0?n:t})(e,n.props.size)),textAlign:ba(e,o,l),linkHref:xa(e),canSetLink:!i.empty||e.isActive("link")}})({editor:e,fontCatalog:t,shape:n}):null},subscribe(t){if(e.isDestroyed)return()=>{};const o=()=>t();e.on("transaction",o),e.on("focus",o),e.on("blur",o);const r=qo(`TextFormattingApi(${i})`,n.getShapeSignal(i),o,{fireImmediately:!1});return()=>{r(),e.off("transaction",o),e.off("focus",o),e.off("blur",o)}},focus(){e.isDestroyed||e.commands.focus()},toggle:t=>((e,t,n)=>{if(e.isDestroyed||void 0===e.schema.marks[t])return!1;const i=e.state.selection;if(!i.empty)return e.chain().focus().toggleMark(t).run();const o=!0!==n?.[t];if(0===e.state.doc.textContent.length){const n=e.chain().focus();return(o?n.setMark(t):n.unsetMark(t)).run()}let r=e.chain().focus().selectAll();return r=o?r.setMark(t):r.unsetMark(t),r=r.setTextSelection(ma(i)),r=o?r.setMark(t):r.unsetMark(t),r.run()})(e,t,r.getSnapshot()),setColor(t){if(null!==t&&!va(t))return!1;const i=o();return!!i&&(({editor:e,landEditor:t,shape:n,color:i})=>{if(e.isDestroyed||void 0===e.schema.marks.textStyle)return!1;if(!e.state.selection.empty)return null===i?e.chain().focus().unsetColor().run():e.chain().focus().setColor(i).run();const o=pa(e,"color");return null!==i&&fa(t,n,{color:E(i)}),o||null!==i})({editor:e,landEditor:n,shape:i,color:t})},setBackgroundColor(t){if(null!==t&&!va(t))return!1;const i=o();return!!i&&(({editor:e,landEditor:t,shape:n,color:i})=>{if(e.isDestroyed||void 0===e.schema.marks.textStyle)return!1;const o=e.state.selection,r=e=>null===i?e.unsetBackgroundColor():e.setBackgroundColor(i);if(!o.empty)return fa(t,n,{backgroundColor:E("transparent")}),r(e.chain().focus()).run();const s=r(r(e.chain().focus().selectAll()).setTextSelection(ma(o))).run();return fa(t,n,{backgroundColor:E(i??"transparent")}),s})({editor:e,landEditor:n,shape:i,color:t})},setFont(i){const r=o();if(!r)return!1;if(null===i)return ha({editor:e,font:null,fontFamily:null,landEditor:n,shape:r});const s=t.fontOptions.find(e=>e.id===i);return!!s&&(Us(i,t).then(()=>{const e=o();e&&da(n,e,t,"system")}),ha({editor:e,fontFamily:s.cssFamily,font:i,landEditor:n,shape:r}))},setSize(t){const i=null===t?null:Math.round(1e3*t)/1e3;if(null!==t&&(!Number.isFinite(t)||t<1||t>512||null===i||Math.abs(t-i)>Number.EPSILON*Math.max(1,Math.abs(t))))return!1;const r=o();return!!r&&(({editor:e,landEditor:t,shape:n,size:i})=>{if(e.isDestroyed||void 0===e.schema.marks.textStyle)return!1;const o=e.state.selection,r=null===i?null:`${i}px`,s=null===i?null:`${Js(i)}px`;if(!o.empty)return(a=e.chain().focus(),null===r||null===s?a.unsetFontSize().unsetLineHeight():a.setFontSize(r).setLineHeight(s)).run();var a;const l=(e=>{const t=e.state.selection;let n=e.chain().focus();return e.state.doc.textContent.length>0&&(n=n.selectAll()),ga(n.unsetFontSize().unsetLineHeight().setTextSelection(ma(t)).unsetFontSize().unsetLineHeight()).run()})(e);return null!==i&&fa(t,n,{size:i}),l||null!==i})({editor:e,landEditor:n,shape:r,size:i})},setTextAlign(t){const i=o();return!!i&&(({editor:e,landEditor:t,shape:n,align:i})=>{if(e.isDestroyed)return!1;const o=(e=>{switch(e){case"middle":return"center";case"end":return"right";default:return"left"}})(i),r=e.state.selection;if(!r.empty)return e.chain().focus().setTextAlign(o).run();const s=e.chain().focus().selectAll().unsetTextAlign().setTextSelection(ma(r)).run();return fa(t,n,{textAlign:i}),s||n.props.textAlign!==i})({editor:e,landEditor:n,shape:i,align:t})},setLink(t){if(e.isDestroyed||void 0===e.schema.marks.link)return!1;const n=null===t?null:Xr(t);if(null!==t&&null===n)return!1;const{empty:i}=e.state.selection,o=e.isActive("link");if(null===n)return!!o&&e.chain().focus().extendMarkRange("link").unsetLink().run();if(i&&!o)return!1;const r=e.chain().focus();return(i?r.extendMarkRange("link"):r).setLink({href:n}).run()},clearFormatting(){if(e.isDestroyed)return!1;const t=o();t&&fa(n,t,{backgroundColor:E("transparent")});const i=e.state.selection;return i.empty?e.chain().focus().selectAll().unsetAllMarks().unsetTextAlign().setTextSelection(ma(i)).command(({tr:e})=>(e.setStoredMarks([]),!0)).run():e.chain().focus().unsetAllMarks().unsetTextAlign().run()},getUnsafeTiptapEditor:()=>e.isDestroyed?null:e};return r}function ha({editor:e,font:t,fontFamily:n,landEditor:i,shape:o}){if(e.isDestroyed||void 0===e.schema.marks.textStyle)return!1;if(!e.state.selection.empty)return null===n?e.chain().focus().unsetFontFamily().run():e.chain().focus().setFontFamily(n).run();const r=pa(e,"fontFamily");return null!==t&&i&&o&&fa(i,o,{font:t}),r||null!==t}function pa(e,t){const n=e.state.selection;let i=e.chain().focus();return e.state.doc.textContent.length>0&&(i=i.selectAll()),i="color"===t?i.unsetColor():i.unsetFontFamily(),i=i.setTextSelection(ma(n)),i="color"===t?i.unsetColor():i.unsetFontFamily(),ga(i).run()}function ga(e){return e.command(({state:e,tr:t})=>{const n=e.schema.marks.textStyle;if(!n)return!0;const i=(t.storedMarks??e.storedMarks)?.find(e=>e.type===n);return i&&Object.values(i.attrs).every(e=>null==e||""===e)&&t.removeStoredMark(n),!0})}function fa(e,t,n){e.commands.updateShapes([{id:t.id,props:n}],{source:"user"})}function ma(e){return e.from===e.to?e.from:{from:e.from,to:e.to}}function Sa(e,t,n){if(!e.schema.marks[n])return!1;const i=[];return e.state.doc.nodesBetween(t.from,t.to,(e,t,o)=>{const r=o?.type.schema.marks[n];e.isText&&r&&o?.type.allowsMarkType(r)&&!e.marks.some(e=>"code"===e.type.name)&&i.push(e.marks.some(e=>e.type.name===n))}),0===i.length?(e.state.storedMarks??e.state.selection.$from.marks()).some(e=>e.type.name===n):Ia(i)??!1}function ya(e,t,n,i){const o=[];if(e.state.doc.nodesBetween(t.from,t.to,(e,t,r)=>{if(!e.isText)return;if("backgroundColor"===n&&(e.marks.some(e=>"code"===e.type.name)||"codeBlock"===r?.type.name))return;const s=e.marks.find(e=>"textStyle"===e.type.name)?.attrs[n];o.push("string"==typeof s&&s.length>0?s:i)}),0===o.length){const t=(e.state.storedMarks??e.state.selection.$from.marks()).find(e=>"textStyle"===e.type.name)?.attrs[n];return"string"==typeof t&&t.length>0?t:i}return Ia(o)}function ba(e,t,n){const i=[];return e.state.doc.nodesBetween(t.from,t.to,e=>{e.isTextblock&&i.push(((e,t)=>{switch(e){case"center":return"middle";case"right":return"end";case"left":return"start";default:return t}})(e.attrs.textAlign,n))}),Ia(i)??n}function xa(e){const t=e.getAttributes("link").href;return"string"==typeof t&&t.length>0?t:null}function Ia(e){if(0===e.length)return null;const t=e[0];return e.every(e=>Object.is(e,t))?t:"mixed"}function wa(e,t){return null===e?null:"mixed"===e?"mixed":t(e)}function va(e){const t=e.trim();return t.length>0&&t.length<=128&&!_v.test(t)&&!Wv.test(t)}function Pa({shapeId:e,editor:t,fontCatalog:n,landEditor:i}){return{shapeId:e,formatting:ua({editor:t,fontCatalog:n,landEditor:i,shapeId:e}),isDestroyed:()=>t.isDestroyed,isConnected:()=>!t.isDestroyed&&qs(t),isFocused:()=>!t.isDestroyed&&qs(t)&&t.view.dom.contains(document.activeElement),getValue:()=>jr(t.getJSON()),setValue(e){t.commands.setContent(e)},focus(){js(t)},focusEnd(){!t.isDestroyed&&qs(t)&&t.commands.focus("end")},focusSelectAll(){!t.isDestroyed&&qs(t)&&(js(t),t.chain().focus().selectAll().run())},focusAtPagePoint(e,n){((e,t,n)=>{js(t);const i=e.pageToScreen(new sI(n.x,n.y)),o=t.view.posAtCoords({left:i.x,top:i.y})?.pos;o?t.chain().focus().setTextSelection(o).run():t.chain().focus().selectAll().run()})(e,t,n)},getSelectionSnapshot:()=>t.isDestroyed||!qs(t)?{type:null,text:null}:Vs(t),collapseSelectionAtClientPoint(e,n){!t.isDestroyed&&qs(t)&&"Range"===Vs(t).type&&((e,t,n)=>{if(e.isDestroyed||!qs(e))return;const i=e.view.posAtCoords({left:t,top:n})?.pos;"number"!=typeof i?e.commands.focus("end"):e.chain().focus().setTextSelection(i).run()})(t,e,n)},measure(e){if(!t.isDestroyed&&qs(t))return function(e,t,n,i){if(0===e.getText().trim().length)return ia(t,i);const o=((e,t)=>{const n=e.ownerDocument.defaultView?.getComputedStyle(e);return sa(e.ownerDocument).measureElement(e,t,n)})(e.view.dom,{shape:t,fontCatalog:n,...ra(t,i)});return!i&&e.view.dom.scrollHeight>t.props.h+1&&(o.h=Math.max(o.h,e.view.dom.scrollHeight)),oa(t,o,i)}(t,e,n,Cs(i,e))},onCompositionStateChange(e){if(t.isDestroyed)return()=>{};const n=t.view.dom,i=()=>e(!0),o=()=>e(!1);return n.addEventListener("compositionstart",i),n.addEventListener("compositionend",o),()=>{n.removeEventListener("compositionstart",i),n.removeEventListener("compositionend",o),e(!1)}}}}function ka({landEditor:e,shape:t,fontCatalog:n,initialRichText:i,className:o,editorStyle:r,formattingToolbar:s,onTiptapEditorChange:a,onReady:l,onDispose:d,onRichTextChange:c}){const u=Cx(null),h=D(t.props.backgroundColor)?null:U(t.props.backgroundColor),p=h&&i.content.length>0?((e,t)=>{const n=Ys(e.content,(e,n)=>{if("text"!==e.type||!e.text||n.insideCodeBlock||e.marks?.some(e=>"code"===e.type))return e;const i=e.marks??[],o=i.findIndex(e=>"textStyle"===e.type);if(o<0)return{...e,marks:[...i,{type:"textStyle",attrs:{backgroundColor:t}}]};const r=i[o]?.attrs?.backgroundColor;return"string"==typeof r&&r.length>0?e:{...e,marks:i.map((e,n)=>n===o?{...e,attrs:{...e.attrs,backgroundColor:t}}:e)}});return n.changed?jr({...e,content:n.nodes}):e})(i,h):i,g=bx(i=>{const o=u.current;if(o?.editor===i)return o.controller;const r=Pa({shapeId:t.id,editor:i,fontCatalog:n,landEditor:e});return u.current={editor:i,controller:r},r},[n,e,t.id]),f=Lx({extensions:Hv,content:p,autofocus:!1,editable:!0,immediatelyRender:!0,shouldRerenderOnTransaction:!1,editorProps:{attributes:{"data-ui":"rich-text-editor",class:"land-text-editor__content",dir:"auto"},handleKeyDown:(t,n)=>(n.stopPropagation(),!(n.isComposing||("Escape"===n.key?(n.preventDefault(),e.cancelEditing("user"),0):"Enter"!==n.key||!n.metaKey&&!n.ctrlKey||(n.preventDefault(),e.completeEditing("user"),0))))},onUpdate:({editor:e})=>{const t=g(e);c({editor:e,controller:t,richText:t.getValue()})}},[t.id]);return Ix(()=>{if(!f||f.isDestroyed)return;const n=g(f),i={shapeId:t.id,editor:f,controller:n,formatting:n.formatting},o={shapeId:t.id,formatting:n.formatting},r=!1===s?()=>{}:((e,t)=>{const n=Ns(e);return n.disposeApiSubscription?.(),n.api=t,n.disposeApiSubscription=t.subscribe(()=>{_s(n)}),_s(n),()=>{n.api===t&&(n.disposeApiSubscription?.(),n.disposeApiSubscription=null,n.api=null,_s(n))}})(e,n.formatting);return l(i),a?.(o),()=>{r(),u.current?.editor===f&&(u.current=null),d(i),a?.(null)}},[g,s,e,d,l,a,t.id,f]),Ax(Rx,{editor:f,className:o,style:r})}function Ca({editor:e,controller:t,shapeId:n,request:i,onApplied:o,attempt:r=0}){if(!t.isDestroyed())if(t.isConnected())(({editor:e,controller:t,shapeId:n,request:i,onApplied:o})=>{if(!t.isDestroyed())t.focus(),i&&i.shapeId===n?"selectAll"===i.entryMode?(window.requestAnimationFrame(()=>{!t.isDestroyed()&&t.isConnected()&&t.focusSelectAll()}),e.consumeShapeEditingEntryRequest(i.id),o?.(i)):"placeCaret"===i.entryMode&&i.caretPagePoint?(t.focusAtPagePoint(e,i.caretPagePoint),e.consumeShapeEditingEntryRequest(i.id),o?.(i)):(t.focusEnd(),e.consumeShapeEditingEntryRequest(i.id),o?.(i)):(t.focusEnd(),o?.(i))})({editor:e,controller:t,shapeId:n,request:i,onApplied:o});else{if(r>=4)return;window.requestAnimationFrame(()=>{Ca({editor:e,controller:t,shapeId:n,request:i,onApplied:o,attempt:r+1})})}}function Ta({shapeId:e,markId:t,fontCatalog:n,formattingToolbar:i,onTiptapEditorChange:o}){const r=Zo(),s=Qo(r.getShapeSignal(e)),a=Qo(r.shapeEditingStateSignal).session;return fs(s)&&a?.shapeId===s.id?Ax(Ma,{shape:s,session:a,fontCatalog:n,formattingToolbar:i,onTiptapEditorChange:o},`${s.id}:${t}`):null}function Ma({shape:e,session:t,fontCatalog:n,formattingToolbar:i,onTiptapEditorChange:o}){const r=Zo(),s=Cx(e.props.richText),a=(e=>{const t=Cx(e);return Ix(()=>{t.current=e},[e]),t})(e),l=Qo(r.shapeEditingEntryRequestSignal),d=Cx(null),[c,u]=Tx(null),[h,p]=Tx(null),g=bx(({editor:e,controller:t})=>{u(e.isDestroyed?null:e),p(t)},[]),f=bx(({editor:e,controller:t})=>{u(t=>t===e?null:t),p(e=>e===t?null:e)},[]),m=function({editor:e,shape:t,tiptapEditor:n,richTextController:i,latestShapeRef:o,fontCatalog:r}){const s=Cx(t.props.richText),a=Cx(!1),l=Cx(null),d=bx(({controller:n,richText:i})=>{if(a.current||!n.isConnected())return;const d=jr(i);s.current=d,((e,t,n,i,o="user")=>{const r=e.getShape(t);fs(r)&&e.commands.updateShapes([{id:r.id,props:{richText:n,..."number"==typeof i?.w?{w:i.w}:null,..."number"==typeof i?.h?{h:i.h}:null}}],{source:o})})(e,t.id,d,n.measure(o.current)??na(d,o.current,r,Cs(e,o.current)),"user"),((e,t,n,i)=>{null!==i.current&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{i.current=null,la(e,t,n.current)},0)})(e,n,o,l)},[e,r,o,t.id]);return Ix(()=>()=>{null!==l.current&&(window.clearTimeout(l.current),l.current=null)},[]),Px(()=>{n&&i&&!n.isDestroyed&&i.isConnected()&&la(e,i,t)},[e,i,t,n]),Ix(()=>{if(!n||!i||!i.isConnected())return;const e=t.props.richText;e!==s.current&&(JSON.stringify(s.current)!==JSON.stringify(e)?(a.current=!0,i.setValue(e),s.current=e,a.current=!1):s.current=e)},[i,t.props.richText,n]),Ix(()=>{if(i)return i.onCompositionStateChange(t=>{e.setShapeEditingComposition(t,"system")})},[e,i]),Ix(()=>{if(!i||!i.isConnected())return;let n=!1;return Us(t.props.font,r).then(()=>{!n&&i.isConnected()&&la(e,i,o.current)}),()=>{n=!0}},[e,r,o,i,t.props.font]),d}({editor:r,shape:e,tiptapEditor:c,richTextController:h,latestShapeRef:a,fontCatalog:n}),S=bx(()=>{c&&((e,t)=>{!(!t||e.isDestroyed||e.state.doc.textContent.length>0||e.getAttributes("textStyle").backgroundColor===t)&&e.commands.setBackgroundColor(t)})(c,D(e.props.backgroundColor)?null:U(e.props.backgroundColor))},[e.props.backgroundColor,c]);(({editor:e,shapeId:t,session:n,tiptapEditor:i,richTextController:o,entryRequest:r,consumedEntryRequestIdRef:s,onEntryFocusApplied:a})=>{const l=Cx(null),d=Cx(null);Ix(()=>{if(!o||o.isDestroyed()||!o.isConnected())return;let e=!1,t=null,n=0;const i=()=>{e||o.isDestroyed()||null===s.current&&(o.isFocused()||(o.focus(),n+=1,o.isFocused()||n>=4||(t=window.setTimeout(i,16))))},r=window.requestAnimationFrame(()=>{i()});return()=>{e=!0,window.cancelAnimationFrame(r),null!==t&&window.clearTimeout(t)}},[s,o,t]),Ix(()=>{i&&!i.isDestroyed&&o&&null===s.current&&d.current!==n.markId&&(d.current=n.markId,window.setTimeout(()=>{Ca({editor:e,controller:o,shapeId:t,request:{id:-1,shapeId:n.shapeId,entryMode:n.entryMode,caretPagePoint:n.caretPagePoint},onApplied:a})},0))},[s,e,o,n.caretPagePoint,n.entryMode,n.markId,n.shapeId,t,i,a]),Ix(()=>{i&&!i.isDestroyed&&o&&r&&r.shapeId===t&&s.current!==r.id&&Ca({editor:e,controller:o,shapeId:t,request:r,onApplied(e){e&&(s.current=e.id),a?.()}})},[s,e,r,o,t,i,a]),Ix(()=>{if(!i||!o||i.isDestroyed||!o.isConnected())return;const t=o;"selectAll"===n.entryMode&&window.requestAnimationFrame(()=>{"Range"!==t.getSelectionSnapshot().type&&t.focusSelectAll()});const r=l.current,s=n.caretPagePoint;if("placeCaret"===n.entryMode&&s&&(r?.markId!==n.markId||r.entryMode!==n.entryMode)){l.current={markId:n.markId,entryMode:n.entryMode};const i={x:s.x,y:s.y};window.requestAnimationFrame(()=>{Ca({editor:e,controller:t,shapeId:n.shapeId,request:{id:-1,shapeId:n.shapeId,entryMode:"placeCaret",caretPagePoint:i},onApplied:a})})}},[e,n.caretPagePoint,n.entryMode,n.markId,n.shapeId,o,i,a])})({editor:r,shapeId:e.id,session:t,tiptapEditor:c,richTextController:h,entryRequest:l,consumedEntryRequestIdRef:d,onEntryFocusApplied:S});const y=(({editor:e,shapeId:t,richTextController:n})=>{const i=Cx(null);return{onPointerDownCapture:bx(o=>{if(o.stopPropagation(),0!==o.button||1!==o.detail||!n||n.isDestroyed())return void(i.current=null);const r=e.getShapeEditingSession();i.current=r&&r.shapeId===t&&!r.isComposing&&"Range"===n.getSelectionSnapshot().type?{pointerId:o.pointerId,clientX:o.clientX,clientY:o.clientY,moved:!1}:null},[e,n,t]),onPointerMoveCapture:bx(e=>{const t=i.current;if(!t||t.pointerId!==e.pointerId)return;const n=e.clientX-t.clientX,o=e.clientY-t.clientY;n*n+o*o>=16&&(t.moved=!0)},[]),onPointerUpCapture:bx(o=>{const r=i.current;if(i.current=null,!r||r.pointerId!==o.pointerId||r.moved||!n||n.isDestroyed())return;const s=e.getShapeEditingSession();if(!s||s.shapeId!==t||s.isComposing)return;const a=o.clientX,l=o.clientY;window.setTimeout(()=>{n.isDestroyed()||"Range"!==n.getSelectionSnapshot().type||n.collapseSelectionAtClientPoint(a,l)},0)},[e,n,t]),onPointerCancel:bx(()=>{i.current=null},[])}})({editor:r,shapeId:e.id,richTextController:h}),b=((e,t,n=0)=>kx(()=>({color:F(e.props.color),fontFamily:Zs(e.props.font,t),fontSize:Qs(e.props.size),lineHeight:`${Js(e.props.size)}px`,textAlign:ta(e.props.textAlign),pointerEvents:"auto",userSelect:"text",cursor:"text",boxSizing:"border-box",position:"absolute",inset:0,width:"100%",height:"100%",paddingInline:n}),[e.props.color,e.props.font,e.props.size,e.props.textAlign,t,n]))(e,n,bs(Cs(r,e),e.props.w)),x=bx(e=>{if(!e.ctrlKey&&!e.metaKey)return;const t=(e=>{const t=e.target;return t instanceof Element?t.closest("[data-rich-text-link-href]")?.getAttribute("data-rich-text-link-href")??null:null})(e.nativeEvent);t&&c&&!c.isDestroyed&&(e.preventDefault(),e.stopPropagation(),Kr(t))},[c]);
18
- return Ax("div",{"data-ui":"text-editing-box","data-shape-id":e.id,"data-mount-target-kind":"shape",onPointerDown:e=>{e.stopPropagation()},onClickCapture:x,onPointerDownCapture:y.onPointerDownCapture,onPointerMoveCapture:y.onPointerMoveCapture,onPointerUpCapture:y.onPointerUpCapture,onPointerCancel:y.onPointerCancel,onContextMenu:e=>{e.stopPropagation()},onDragStart:e=>{e.preventDefault()},style:b,children:Ax(ka,{landEditor:r,shape:e,fontCatalog:n,initialRichText:s.current,className:"land-text-editor__content",formattingToolbar:i,editorStyle:{height:"100%",minHeight:"100%"},onReady:g,onDispose:f,onTiptapEditorChange:o,onRichTextChange:m})})}function Ea({children:e,presenter:t}){
19
- return Ax(Kv.Provider,{value:t,children:e})}function Aa(e,t){const n=new Set;for(const i of e){if(n.has(i))throw new Error(`Duplicate ${t}: ${i}.`);n.add(i)}}function Ba({fontCatalog:e=Rs(),formattingToolbar:t,onTiptapEditorChange:n}={}){return{id:"land.text.react",domEventGuards:[qv],canvasComponents:[{id:"land.text.default-font-preload",component:()=>Ax(Ra,{fontCatalog:e})}],shapeRenderers:[{type:"text",hoverComponent:$a,component:i=>Ax(La,{...i,fontCatalog:e,formattingToolbar:t,onTiptapEditorChange:n})}]}}function Ra({fontCatalog:e}){return Ix(()=>{Us(Mv,e)},[e]),null}function La({shape:e,editor:t,fontCatalog:n,formattingToolbar:i,onTiptapEditorChange:o}){const[r,s]=Tx(null),a=Cx(null),l=Qo(t.selectedShapeIdsSignal),d=xx(Kv),{hasEditingSession:c,isEditingThisShape:u,editingHost:h}=function(e,t,n,i,o){const r=Qo(e.shapeEditingStateSignal).session,s=r?.shapeId===t.id,a=r&&s?Ax(Ta,{shapeId:r.shapeId,markId:r.markId,fontCatalog:n,formattingToolbar:i,onTiptapEditorChange:o},r.shapeId+":"+r.markId):null;return(({editor:e,shape:t,isEditingThisShape:n,fontCatalog:i})=>{Px(()=>{if(n)return;da(e,t,i);let o=!1;return Us(t.props.font,i).then(()=>{if(o)return;const n=e.getShape(t.id);fs(n)&&n.props.font===t.props.font&&da(e,n,i)}),()=>{o=!0}},[e,i,n,t,t.props.autoSize,t.props.font,t.props.richText,t.props.scale,t.props.size,t.props.textAlign,t.props.w])})({editor:e,shape:t,isEditingThisShape:s,fontCatalog:n}),{hasEditingSession:null!==r,isEditingThisShape:s,editingHost:a}}(t,e,n,i,o),p=bs(Cs(t,e),e.props.w),g=null!==d&&(({isEditing:e,isOnlySelected:t})=>!e&&!t)({isEditing:c,isOnlySelected:1===l.length&&l[0]===e.id}),f=bx(()=>{null!==a.current&&(window.clearTimeout(a.current),a.current=null)},[]),m=bx(()=>{f(),a.current=window.setTimeout(()=>{s(null),a.current=null},160)},[f]);return Ix(()=>()=>{f()},[f]),Ix(()=>{g||(f(),s(null))},[g,f]),Bx("div",{"data-editing-hidden":u?"true":void 0,style:{position:"relative",boxSizing:"border-box",width:e.props.w,minHeight:e.props.h,transform:`scale(${e.props.scale})`,transformOrigin:"top left",color:F(e.props.color),fontFamily:Zs(e.props.font,n),fontSize:Qs(e.props.size),lineHeight:`${Js(e.props.size)}px`,textAlign:ta(e.props.textAlign),whiteSpace:"pre-wrap",overflowWrap:"break-word",userSelect:"none",pointerEvents:"none"},children:[
20
- Ax("div",{style:{boxSizing:"border-box",opacity:u?0:void 0,paddingInline:p,width:"100%"},children:Ms(e.props.richText,g?{onPointerEnter({href:e,element:t}){f(),s({anchorElement:t,href:e})},onPointerLeave(){m()}}:void 0,D(e.props.backgroundColor)?void 0:F(e.props.backgroundColor))}),g&&r&&d?Ax(d,{anchorElement:r.anchorElement,href:r.href,onOpen:()=>{Kr(r.href)},onPopoverPointerEnter:f,onPopoverPointerLeave:m}):null,
21
- Ax("div",{"data-ui":"text-editor-host-slot","data-shape-id":e.id,"data-active":u?"true":"false","aria-hidden":"true",style:{position:"absolute",inset:0,pointerEvents:"none"},children:h})]})}function $a({strokeWidth:e}){
22
- return Ax("div",{"data-ui":"text-hover-outline",style:{boxShadow:`inset 0 0 0 ${e}px ${Dw}`,inset:0,position:"absolute"}})}function Fa(e){return ms(e)}function Ua(e,t){return"number"==typeof e&&Number.isFinite(e)?e:t}function Da(e){return Math.max(.01,e.props.scale)}function Oa(e){return e.props.w*Da(e)}function za(e){return e.props.h*Da(e)}function Na(e){return new aI(0,0,Oa(e),za(e))}function _a(e){return"left"===e||"right"===e}function Wa(e,t){return e.content.map(e=>((e,t)=>{const n="codeBlock"===e.type?void 0:t,i=e.content?.map(e=>Xa(e,n))??[],o=Zr(e);return{tag:"p",attrs:{style:o?`margin:0;text-align:${o}`:"margin:0"},children:i.length>0?i:[{tag:"br"}]}})(e,t))}function Xa(e,t){if(Gr(e)){const n=((e,t)=>{const n=Qr(e.marks,t);return n?ts(n):void 0})(e,t);return n?{tag:"span",attrs:{style:n},children:[e.text]}:e.text}return{tag:"span",children:e.content?.map(n=>Xa(n,"codeBlock"===e.type?void 0:t))??[]}}function Ha(e,t,n,i){return[`color:${t.resolveColor(e.props.color)}`,`font-family:${Zs(e.props.font,n)}`,`font-size:${Qs(e.props.size)}px`,`line-height:${Js(e.props.size)}px`,`text-align:${ta(e.props.textAlign)}`,"white-space:pre-wrap","overflow-wrap:break-word","box-sizing:border-box",`padding-inline:${i}px`,`width:${e.props.w}px`,`height:${e.props.h}px`,`transform:scale(${e.props.scale})`,"transform-origin:top left"].join(";")}function Ka(e){return"binding"===e?.typeName&&"path-label"===e.type}function Ya(e,t){return"number"==typeof e&&Number.isFinite(e)?Math.min(1,Math.max(0,e)):t}function qa(e,t,n,i=.5){const o=ja(e,n),r=o?Va(e,t,o):{start:0,end:1},s=Math.min(r.end,Math.max(r.start,i)),a=o?.getPointAt(s)??e.computeShapePageCenter(n),l=ks(e,t,n,kv),d=Math.min(l.maxWidth,Math.max(l.minWidth,t.props.w));return{x:a.x-d*t.props.scale/2,y:a.y-t.props.h*t.props.scale/2,rotation:xs(e,n),props:{w:d}}}function ja(e,t){return e.getShapeUtil(t).getLabelPathGeometry(t,{editor:e})}function Va(e,t,n){if(n.length<=1e-6)return{start:.5,end:.5};const i=e.getShapePageBounds(t.id);if(!i)return{start:0,end:1};const o=Math.hypot(i.w,i.h)/2,r=Math.min(.5,(o+8)/n.length);return{start:r,end:1-r}}function Ga(e){return"shape"===e?.typeName&&"geo"===e.type}function Za(e,t){return"number"==typeof e&&Number.isFinite(e)?Math.min(1,Math.max(0,e)):t}function Qa(e,t){return"number"==typeof e&&Number.isFinite(e)&&e>0?e:t}function Ja(e,t){const n=e.props[t];return"number"==typeof n&&Number.isFinite(n)?n:null}function el(e,t){const n=Ja(e,"h");return!n||t.props.ownerBaseHeight<=0||n===t.props.ownerBaseHeight?null:{...e,props:{...e.props,h:t.props.ownerBaseHeight}}}function tl(e,t,n){const i=e.computeShapePageCenter(n),o=ks(e,t,n,Cv),r=Math.min(o.maxWidth,Math.max(o.minWidth,t.props.w));return{x:i.x-r*t.props.scale/2,y:i.y-t.props.h*t.props.scale/2,rotation:xs(e,n),props:{w:r}}}function nl(){let e=null,t=null;const n=()=>{e=null,t=null};return{id:"land.text.interactions",editorEvent:{handleEvent(i,o){if("cancel"===o.type)return n(),"continue";if("select"!==i.getActiveToolId())return"continue";if("pointer"===o.type&&"pointer_up"===o.name)return((e,t,n,i)=>{if(!n||n.pointerId!==t.pointerId)return i(),"continue";if(i(),(t.clickCount??1)>=2)return"continue";const o=t.pagePoint.x-n.originPagePoint.x,r=t.pagePoint.y-n.originPagePoint.y;if(o*o+r*r>9)return"continue";const s=e.getShape(n.shapeId);s&&fs(s)&&e.canEditShape(s)&&e.startEditingShape({shapeId:s.id,entryMode:"placeCaret",caretPagePoint:t.pagePoint,markId:rP,preserveInteraction:!0},"user")})(i,o,e,()=>{e=null}),((e,t,n,i)=>{if(!n||n.pointerId!==t.pointerId)return i(),"continue";if(i(),(t.clickCount??1)>=2)return"continue";const o=t.pagePoint.x-n.originPagePoint.x,r=t.pagePoint.y-n.originPagePoint.y;if(o*o+r*r>9)return"continue";const s=e.getShape(n.shapeId),a=e.getSelectedShapeIds();if(!s||!il(s)||s.isLocked||e.getShapeEditingSession()||1!==a.length||a[0]!==s.id||ws(e,s.id,"geo-label"))return"continue";const l=rl(e,s);return l&&Ts(e,l,{editMarkId:dP,createMarkId:cP,isExisting:!1}),"continue"})(i,o,t,()=>{t=null});if("pointer"===o.type&&"pointer_cancel"===o.name)return n(),"continue";if(!i.isActiveToolInInitialState())return"continue";if("keyboard"===o.type&&"key_down"===o.name){if(i.getShapeEditingSession())return"continue";if("Enter"!==o.key||o.altKey||o.accelKey)return"continue";const e=i.getSelectedShapeIds(),[t]=i.getSelectedShapes();return 1===e.length&&t&&fs(t)&&i.canEditShape(t)?(i.startEditingShape({shapeId:t.id,entryMode:"selectAll",markId:rP},"user"),"handled"):"continue"}if("click"===o.type&&"double_click"===o.name)return n(),((e,t)=>{const n=e.hitTestShape(t.pagePoint);return n?fs(n)?e.canEditShape(n)?(e.startEditingShape({shapeId:n.id,entryMode:"selectAll",markId:rP},"user"),"handled"):"continue":il(n)?((e,t)=>{if(t.isLocked)return"continue";const n=ws(e,t.id,Cv),i=n??rl(e,t);return i?(Ts(e,i,{editMarkId:dP,createMarkId:cP,isExisting:!!n}),"handled"):"handled"})(e,n):ja(e,n)?((e,t,n)=>{if(t.isLocked)return"continue";const i=ws(e,t.id,kv),o=i??((e,t,n)=>{const i=ja(e,t);if(!i)return null;const o=sl(t,{...Ss(e),autoSize:!1,textAlign:"middle"}),r=i.getNearestPosition(n,{hintPosition:i.defaultPosition}),s=qa(e,o,t,r),a=vs(e,{bindingType:kv,owner:t,historyMarkId:aP,index:`${t.index}${tP}`,layout:s,bindingProps:{labelPosition:r}});if(!a)return null;const l=e.getShape(a.id),d=e.getBindingsFromShape(a.id).find(Ka);if(!fs(l)||!d)return a;const c=ol({editor:e,label:l,pathGeometry:i,pagePoint:n,hintPosition:r,snapToDefault:!1});return Math.abs(c-r)>1e-6&&e.commands.updateBinding({id:d.id,props:{labelPosition:c}},{source:"user"}),a})(e,t,n);return o?(Ts(e,o,{editMarkId:sP,createMarkId:aP,isExisting:!!i}),"handled"):"handled"})(e,n,t.pagePoint):"continue":"continue"})(i,o);if("pointer"===o.type&&"pointer_down"===o.name){n();const r=((t,n)=>{const i=t.hitTestShape(n.pagePoint);if(!i||!fs(i)||!t.canEditShape(i))return"continue";const o=t.getShapeEditingSession();return o&&o.shapeId!==i.id?t.completeEditing("user")?(t.startEditingShape({shapeId:i.id,entryMode:"placeCaret",caretPagePoint:n.pagePoint,markId:rP,preserveInteraction:!0},"user"),"handled"):"handled":(!o&&(n.clickCount??1)<2&&((e,t)=>{const n=e.getSelectedShapeIds();if(1!==n.length)return!1;if(n[0]===t)return!0;const i=Ps(e,t);return!!i&&i.behavior.canPlaceCaretWhenOwnerSelected&&n[0]===i.ownerId})(t,i.id)&&(e={pointerId:n.pointerId,shapeId:i.id,originPagePoint:{x:n.pagePoint.x,y:n.pagePoint.y}}),"continue")})(i,o);return"handled"===r||e?r:((e,n)=>{const i=e.hitTestShape(n.pagePoint),o=e.getSelectedShapeIds();return!i||!il(i)||i.isLocked||e.getShapeEditingSession()||n.shiftKey||n.altKey||n.accelKey||(n.clickCount??1)>=2||1!==o.length||o[0]!==i.id||ws(e,i.id,"geo-label")||(t={pointerId:n.pointerId,shapeId:i.id,originPagePoint:{x:n.pagePoint.x,y:n.pagePoint.y}}),"continue"})(i,o)}return"continue"}},shapePointer:{createSession:(e,t)=>((e,t)=>{if(t.event.shiftKey||t.event.accelKey||e.getShapeEditingSession()||!fs(t.shape))return null;const n=e.getBindingsFromShape(t.shape.id).find(Ka);if(!n||n.toId!==t.selectionTargetId)return null;const i=e.getShape(n.toId),o=e.getShapePageBounds(t.shape.id);if(!i||!o||e.isShapeOrAncestorLocked(i.id)||!ja(e,i))return null;const r=o.center.sub(t.originPagePoint);return{shapeId:i.id,historyMark:lP,onDragStart({editor:e}){e.commands.setSelectedShapeIds([i.id],{source:"system"})},update({editor:e,pagePoint:t,source:i}){const o=e.getBinding(n.id),s=e.getShape(n.fromId),a=e.getShape(n.toId);if(!Ka(o)||!fs(s)||!a)return"stop";const l=ja(e,a);if(!l)return"stop";const d=ol({editor:e,label:s,pathGeometry:l,pagePoint:t.add(r),hintPosition:o.props.labelPosition,snapToDefault:!0});return Math.abs(d-o.props.labelPosition)>1e-6&&e.commands.updateBinding({id:o.id,props:{labelPosition:d}},{source:i}),{status:"continue",finalPagePoint:l.getPointAt(d)}}}})(e,t)}}}function il(e){return"geo"===e.type}function ol({editor:e,label:t,pathGeometry:n,pagePoint:i,hintPosition:o,snapToDefault:r}){let s=n.getNearestPosition(i,{hintPosition:o});if(r){const t=n.defaultPosition,i=n.getPointAt(t),o=n.getPointAt(s),r=Math.max(e.cameraZoomSignal.get(),1e-4);o.dist(i)*r<=10&&(s=t)}const a=Va(e,t,n);return Math.min(a.end,Math.max(a.start,s))}function rl(e,t){const n=tl(e,sl(t,{...Ss(e),autoSize:!1,textAlign:"middle"}),t);return vs(e,{bindingType:Cv,owner:t,historyMarkId:cP,index:`${t.index}${iP}`,layout:n,bindingProps:{normalizedAnchor:{x:.5,y:.5}}})}function sl(e,t){return{id:"shape:draft",typeName:"shape",scope:"document",type:"text",parentId:e.parentId,index:`${e.index}.label`,x:0,y:0,rotation:0,skewX:0,scaleX:1,scaleY:1,opacity:1,isHidden:!1,isLocked:!1,meta:{},props:t}}function al({fontCatalog:e=Rs()}={}){return{id:"land.text",shapeCapabilities:[{type:"text",schemaProps:["richText","w","h","autoSize","scale","font","size","color","backgroundColor","textAlign"],reactRenderer:"partial",toolbarEntry:"supported",notes:["Text shape util, SVG fallback, React renderer, rich editing runtime, creation tool, and selected-text style toolbar live in the text plugin package. React rendering remains partial while product-grade rich text rendering and measurement continue to mature."]}],shapeUtils:[new Jv],shapeSvgExporters:[new eP(e)],bindingUtils:[new oP,new nP],interactionHandlers:[nl()],setup(e){e.tools.register("text",e=>new Vv(e),{shortcut:"t"})}}}function ll(e,t){return e.getAvailability?.(t)??"enabled"}function dl(e){return Object.freeze({id:e})}function cl(e){return{id:e,kind:"api"}}function ul(e){return{id:e,kind:"service"}}function hl(e){return Object.freeze({id:e})}function pl({fontCatalog:e=Rs(),selectionFormattingToolbar:t=!0}={}){return n=>{n.get(hP).provide(CP,e),n.get(yP).add(kP),n.get(uP).add({id:"text.edit",getAvailability(e){if(1!==e.selection.count||"text"!==e.selection.singleShapeType)return"inapplicable";const[t]=e.selection.selectedShapes;return"text"!==t?.type||t.isLocked?"disabled":"enabled"},run({context:e}){const[t]=e.selection.selectedShapes;"text"!==t?.type||t.isLocked||e.editor.startEditingShape({shapeId:t.id,entryMode:"focusEnd"},"user")}},yl("color",e),{id:"text.set-background-color",getAvailability:e=>xl(e),getValue(e){const t=wl(e);return t?Pl(t.backgroundColor):(e=>{let t,n=!1;for(const i of e){if("text"!==i.type)continue;n=!0;const e=Xs(i.props.richText);if("mixed"===e)return"mixed";const o=i.props,r=null!==e||D(o.backgroundColor)?e:U(o.backgroundColor);if(void 0===t)t=r;else if(t!==r)return"mixed"}return n?Pl(t??null):null})(e.selection.selectedShapes)},run({context:e,value:t}){const n=kl(t);if(!n)return;const i=D(n)?null:U(n);if(bl(e))return void Il(e)?.setBackgroundColor(i);const o=e.selection.selectedShapes.filter(e=>"text"===e.type).filter(e=>!e.isLocked).flatMap(e=>{const t=((e,t)=>{const n=Ys(e.content,(e,n)=>{if("text"!==e.type||!e.text||n.insideCodeBlock||e.marks?.some(e=>"code"===e.type))return e;const i=e.marks??[],o=i.findIndex(e=>"textStyle"===e.type);if(o<0)return null===t?e:{...e,marks:[...i,{type:"textStyle",attrs:{backgroundColor:t}}]};const r=i[o];if((r?.attrs?.backgroundColor??null)===t)return e;const s={...r?.attrs};null===t?delete s.backgroundColor:s.backgroundColor=t;const a=Object.keys(s).length>0?i.map((e,t)=>t===o?{...e,attrs:s}:e):i.filter((e,t)=>t!==o);return{...e,marks:a.length>0?a:void 0}});return n.changed?jr({...e,content:n.nodes}):e})(e.props.richText,i),o=!O(e.props.backgroundColor,n);return t!==e.props.richText||o?[{id:e.id,props:{backgroundColor:n,...t===e.props.richText?null:{richText:t}}}]:[]});o.length>0&&e.editor.commands.updateShapes(o,{source:"user"})}},yl("font",e),yl("size",e),yl("textAlign",e),...BP.map(e=>{return{id:`text.toggle-${t=e.format}`,getAvailability:e=>xl(e),getValue(e){const n=wl(e);return n?n[t]:vl(e.selection.selectedShapes,t)},run({context:e}){if(bl(e))return void Il(e)?.toggle(t);const n=!0!==vl(e.selection.selectedShapes,t),i=e.selection.selectedShapes.filter(e=>"text"===e.type).filter(e=>!e.isLocked).flatMap(e=>{const i=((e,t,n)=>{const i=Rv[t],o=Ys(e.content,(e,o)=>{if("text"!==e.type||!e.text)return e;const r=e.marks??[],s=r.filter(e=>i.includes(e.type));if(n&&(o.insideCodeBlock||r.some(e=>"code"===e.type)))return e;if(n&&1===s.length&&s[0]?.type===t)return e;const a=r.filter(e=>!i.includes(e.type)),l=n?[...a,{type:t}]:a;return r.length===l.length&&r.every((e,t)=>e===l[t])?e:{...e,marks:l.length>0?l:void 0}});return o.changed?jr({...e,content:o.nodes}):e})(e.props.richText,t,n);return i===e.props.richText?[]:[{id:e.id,props:{richText:i}}]});i.length>0&&e.editor.commands.updateShapes(i,{source:"user"})}};var t}),{id:RP,getAvailability:e=>xl(e),getValue:()=>!1,run({context:e}){if(bl(e))return void Il(e)?.clearFormatting();const t=e.selection.selectedShapes.filter(e=>"text"===e.type).filter(e=>!e.isLocked).flatMap(e=>{const t=(e=>{const t=Ys(e.content,e=>"text"===e.type&&e.marks&&e.marks.length>0?{...e,marks:void 0}:Hs(e));return t.changed?jr({...e,content:t.nodes}):e})(e.props.richText),n=E("transparent"),i=!O(e.props.backgroundColor,n);return t!==e.props.richText||i?[{id:e.id,props:{backgroundColor:n,...t===e.props.richText?null:{richText:t}}}]:[]});t.length>0&&e.editor.commands.updateShapes(t,{source:"user"})}},{id:LP,getAvailability:e=>1!==e.selection.count||"text"!==e.selection.commonShapeType?"inapplicable":wl(e)?.canSetLink?"enabled":"disabled",getValue(e){const t=wl(e)?.linkHref;return"string"==typeof t&&"mixed"!==t?t:""},run({context:e,value:t}){if("string"!=typeof t)return;const n=Il(e);if(!n)return;if(0===t.trim().length)return void n.setLink(null);const i=Xr(t);i&&n.setLink(i)}},Cl("color",e),{id:"text.default-background-color",getAvailability:e=>"text"===e.tool.activeToolId?"enabled":"inapplicable",getValue:e=>e.editor.getDefaultShapeProps("text").backgroundColor,run({context:e,value:t}){const n=kl(t);n&&e.editor.updateDefaultShapeProps("text",{backgroundColor:n})}},Cl("font",e),Cl("size",e),Cl("textAlign",e)),n.get(vP).add({id:"text.tool-toolbar",channel:wP.toolSwitcher,order:50,actionIds:[xP],getGroups:e=>[{id:"text.tools",items:[{kind:"button",id:"text.tool.text",actionId:xP,value:"text",label:"Text",shortcut:e.editor.shortcuts.getToolShortcutLabel("text"),icon:"type",dataUi:"text-tool-button"}]}]},(e=>({id:"text.default-style.tool-toolbar",channel:wP.toolOptions,order:51,actionIds:["text.default-color","text.default-background-color","text.default-font","text.default-size","text.default-textAlign"],when:e=>"text"===e.tool.activeToolId,getGroups(){const[t,n,i,o]=Sl({colorActionId:"text.default-color",fontActionId:"text.default-font",fontCatalog:e,sizeActionId:"text.default-size",textAlignActionId:"text.default-textAlign",dataUiPrefix:"text-default"});return[t,ml("text-default","text.default-background-color"),n,i,o]}}))(e),...t?[gl(e),fl(e)]:[]),n.get(fP).add({id:"text.shape-context-menu",target:"selection",order:35,actionIds:["text.edit"],when:e=>1===e.selection.count&&"text"===e.selection.singleShapeType,getSections:()=>[{id:"text.context-menu",title:"Text",items:[{kind:"command",id:"text.edit",actionId:"text.edit",label:"Edit text",icon:"type",dataUi:"context-menu-edit-text-button"}]}]})}}function gl(e){return{id:"text.selection-toolbar",channel:wP.selectionQuickActions,order:20,actionIds:["text.set-color","text.set-background-color","text.set-font","text.set-size","text.set-textAlign",...BP.map(e=>e.actionId),RP,LP],subscribe:(e,t)=>((e,t)=>{const n=Ns(e);return n.listeners.add(t),()=>{n.listeners.delete(t)}})(e,t),when:e=>1===e.selection.count&&"text"===e.selection.commonShapeType,getGroups(){const[t,n,i,o]=Sl({colorActionId:"text.set-color",fontActionId:"text.set-font",fontCatalog:e,sizeActionId:"text.set-size",textAlignActionId:"text.set-textAlign",dataUiPrefix:"text"});return[t,ml("text"),n,i,{id:"text.inline-emphasis",items:BP.slice(0,2).map(e=>({kind:"button",id:e.actionId,actionId:e.actionId,label:e.label,icon:e.icon,dataUi:e.dataUi}))},{id:"text.inline-decoration",presentation:"overflow",items:BP.slice(2).map(e=>({kind:"button",id:e.actionId,actionId:e.actionId,label:e.label,icon:e.icon,dataUi:e.dataUi}))},{...o,presentation:"overflow"},{id:"text.clear-formatting",presentation:"overflow",items:[{kind:"button",id:RP,actionId:RP,label:"Clear formatting",icon:"remove-formatting",dataUi:"selected-text-clear-formatting-button"}]},{id:"text.link",presentation:"overflow",items:[{kind:"text-input",id:"text.link",actionId:LP,label:"Link",icon:"link",presentation:"popover",placeholder:"Link URL",validate:e=>0===e.trim().length||null!==Xr(e),dataUi:"text-link-button"}]}]}}}function fl(e){return{id:"text.multi-selection-toolbar",channel:wP.selectionProperties,order:20,actionIds:["text.set-color","text.set-background-color","text.set-font","text.set-size","text.set-textAlign"],when:e=>e.selection.count>1&&"text"===e.selection.commonShapeType&&null===e.editor.shapeEditingStateSignal.get().session,getGroups(){const[t,n,i,o]=Sl({colorActionId:"text.set-color",fontActionId:"text.set-font",fontCatalog:e,sizeActionId:"text.set-size",textAlignActionId:"text.set-textAlign",dataUiPrefix:"text"});return[t,ml("text"),{...n,presentation:"overflow"},{...i,presentation:"overflow"},{...o,presentation:"overflow"}]}}}function ml(e,t="text.set-background-color"){return{id:`${e}.style-background-color`,items:[{kind:"color-input",id:`${e}.background-color`,actionId:t,label:"Background",fallback:"#fef08a",presets:MP.map(t=>({...t,dataUi:`${e}-background-color-${t.id}-button`})),dataUi:`${e}.background-color`}]}}function Sl({colorActionId:e,fontActionId:t,fontCatalog:n,sizeActionId:i,textAlignActionId:o,dataUiPrefix:r}){return[{id:`${r}.style-color`,items:[{kind:"color-input",id:`${r}.color`,actionId:e,label:"Color",fallback:"#0f172a",presets:TP.map(e=>({...e,dataUi:`${r}-color-${e.id}-button`})),dataUi:`${r}.color`}]},{id:`${r}.style-font`,items:[{kind:"segmented",id:`${r}.font`,actionId:t,options:n.fontOptions.map(e=>({value:e.id,label:e.label,dataUi:`${r}-font-${e.id}-button`}))}]},{id:`${r}.style-size`,items:[{kind:"stepper",id:`${r}.size`,actionId:i,label:"Size",options:EP.map(e=>({value:e.value,label:e.label,dataUi:`${r}-size-${e.id}-button`}))}]},{id:`${r}.style-align`,items:[{kind:"segmented",id:`${r}.align`,actionId:o,options:AP.map(e=>({...e,dataUi:`${r}-align-${e.value}-button`}))}]}]}function yl(e,t){return{id:`text.set-${e}`,getAvailability:e=>xl(e),getValue(t){const n=wl(t);return n?n[e]:((e,t)=>{let n;for(const i of e){if("text"!==i.type)continue;const e=i.props[t];if(void 0!==n){if("color"===t?!O(n,e):n!==e)return null}else n=e}return n??null})(t.selection.selectedShapes,e)},run({context:n,value:i}){const o=Tl(e,i,t);if(void 0===o)return;if(bl(n)){const t=Il(n);if(!t)return;return void("color"===e?t.setColor(U(o)):"font"===e?t.setFont(o):"size"===e?t.setSize(o):t.setTextAlign(o))}const r=n.selection.selectedShapes.filter(e=>"text"===e.type).filter(e=>!e.isLocked).map(t=>{const n=((e,t)=>{const n=Ys(e.content,e=>{if("textAlign"===t)return Hs(e);if("text"!==e.type||!e.marks)return e;let n=!1;const i=e.marks.flatMap(e=>{if("textStyle"!==e.type||!e.attrs)return[e];const i={...e.attrs};let o=!1;const r="size"===t?["fontSize","lineHeight"]:"font"===t?["fontFamily"]:["color"];for(const t of r)t in i&&(delete i[t],o=!0);return o?(n=!0,Object.keys(i).length>0?[{...e,attrs:i}]:[]):[e]});return n?{...e,marks:i.length>0?i:void 0}:e});return n.changed?jr({...e,content:n.nodes}):e})(t.props.richText,e);return{id:t.id,props:{[e]:o,...n===t.props.richText?null:{richText:n}}}});0!==r.length&&n.editor.commands.updateShapes(r,{source:"user"})}}}function bl(e){return null!==e.editor.shapeEditingStateSignal.get().session}function xl(e){return"text"!==e.selection.commonShapeType?"inapplicable":(bl(e)?null!==wl(e):e.selection.selectedShapes.some(e=>"text"===e.type&&!e.isLocked))?"enabled":"disabled"}function Il(e){const t=e.editor.shapeEditingStateSignal.get().session,n=zs(e.editor);return t&&n?.shapeId===t.shapeId?n:null}function wl(e){const t=e.editor.shapeEditingStateSignal.get().session,n=(i=e.editor,zs(i)?.getSnapshot()??null);var i;return t&&n?.shapeId===t.shapeId?n:null}function vl(e,t){let n;for(const i of e){if("text"!==i.type)continue;const e=Ws(i.props.richText,t);if("mixed"===e)return null;if(void 0===n)n=e;else if(n!==e)return null}return n??!1}function Pl(e){return"mixed"===e?e:E(e??"transparent")}function kl(e){if(R(e))return $(e,E("transparent"))}function Cl(e,t){return{id:`text.default-${e}`,getAvailability:e=>"text"===e.tool.activeToolId?"enabled":"inapplicable",getValue:t=>t.editor.getDefaultShapeProps("text")[e],run({context:n,value:i}){const o=Tl(e,i,t);void 0!==o&&n.editor.updateDefaultShapeProps("text",{[e]:o})}}}function Tl(e,t,n){if("color"===e)return R(t)?$(t,M("text-slate")):void 0;if("font"===e){if("string"!=typeof t)return;return((e,t)=>"default"===t||$s(t)&&e.fontsById.has(t))(n,t)?t:void 0}if("size"===e){if("number"!=typeof t||!Number.isFinite(t))return;return EP.some(e=>e.value===t)?t:void 0}return"string"==typeof t&&AP.some(e=>e.value===t)?t:void 0}function Ml(e={}){const t={...Bs(),...e},n=Ls(t);return{id:"text",provides:[PP,CP],editor:al({fontCatalog:n}),render:Ba({fontCatalog:n,formattingToolbar:t.formattingToolbar,onTiptapEditorChange:t.onTiptapEditorChange}),setup:pl({fontCatalog:n,selectionFormattingToolbar:!1!==t.formattingToolbar})}}function El(e){return Math.max(0,Math.min(1,e))}function Al(e,t,n){return e.computeShapePositionedToPageTransform(t).applyToPoint(((e,t,n)=>{const i=e.computeShapePositionedBounds(t);return new sI(i.minX+i.w*n.x,i.minY+i.h*n.y)})(e,t,n))}function Bl(e,t,n,i){return((e,t,n,i)=>e.getShapeUtil(t).resolveBindingPoint(t,{editor:e,rawPagePoint:n,oppositePagePoint:i}))(e,t,Al(e,t,n),i)}function Rl(e,t){const n="start"===t?e.props.start:e.props.end;return((e,t)=>{if(0===e.rotation&&0===e.skewX&&1===e.scaleX&&1===e.scaleY)return t;const n=new sI(e.x+e.props.w/2,e.y+e.props.h/2),i=t.sub(n),o=new sI(i.x*e.scaleX,i.y*e.scaleY);return n.add(new sI(o.x+Math.tan(e.skewX)*o.y,o.y).rot(e.rotation))})(e,new sI(e.x+n.x,e.y+n.y))}function Ll(e,t,n){const i="start"===n?t.props.start:t.props.end;return e.computeShapeLocalToPageTransform(t).applyToPoint(new sI(i.x,i.y))}function $l(e){return"start"===e?"end":"start"}function Fl(e,t,n,i){const o=e.computeShapeLocalToPageTransform(t).tryInvert();if(!o)return null;const r=Dl(o.applyToPoint(n),o.applyToPoint(i)),s=e.getShapeUtil(t),a={...t,props:{...t.props,w:r.w,h:r.h,start:r.start,end:r.end}},l=de(s.getLocalToPageTransform(t).compose(lI.Translate(r.x,r.y)),s.getLocalBounds(a),{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY});return l?{...a,...l}:null}function Ul(e,t,n,i){return Fl(e,t,"start"===n?i:Ll(e,t,"start"),"end"===n?i:Ll(e,t,"end"))}function Dl(e,t){const n=Hl(e.x,t.x),i=Hl(e.y,t.y);return{x:n.origin,y:i.origin,w:n.size,h:i.size,start:{x:n.startOffset,y:i.startOffset},end:{x:n.endOffset,y:i.endOffset}}}function Ol(e){return Yl(new sI(e.props.start.x,e.props.start.y).add(new sI(e.x,e.y)),new sI(e.props.end.x,e.props.end.y).add(new sI(e.x,e.y)),e.props.bend)}function zl(e){return Yl(new sI(e.props.start.x,e.props.start.y),new sI(e.props.end.x,e.props.end.y),e.props.bend)}function Nl(e,t,n){const i=sI.Med(e,t),o=t.sub(e);if(o.len()<1e-6)return 0;const r=o.per().normalize();return-Jl(n.sub(i),r)}function _l(e,t,n,i=.5){if(!t||t.length<=1e-6)return Xl(i);let o=0,r=Xl(i),s=1/0;for(let a=0;a<t.segmentLengths.length;a+=1){const l=e[a],d=t.segmentLengths[a],c=e[a+1].sub(l),u=d<=1e-6?0:Xl(Jl(n.sub(l),c)/c.len2()),h=l.add(c.mul(u)),p=(o+d*u)/t.length,g=h.dist2(n),f=g<s-1e-8,m=Math.abs(g-s)<=1e-8&&Math.abs(p-i)<Math.abs(r-i);(f||m)&&(s=g,r=p),o+=d}return Xl(r)}function Wl(e,t){const n=Xl(e),i=Xl(t);return n<=.5?i*n*2:i+(1-i)*(n-.5)*2}function Xl(e){return Math.max(0,Math.min(1,e))}function Hl(e,t){const n=Math.min(e,t),i=Math.max(e,t);return Math.abs(i-n)<1e-6?{origin:n-.5,size:1,startOffset:.5,endOffset:.5}:{origin:n,size:i-n,startOffset:e-n,endOffset:t-n}}function Kl(e){return Number.isFinite(e)?Number(e.toFixed(3)).toString():"0"}function Yl(e,t,n){const i=function(e,t=0){return((e,t)=>"number"==typeof e&&Number.isFinite(e)?e:t)(e,t)}(n,0),o=((e,t,n)=>{const i=sI.Med(e,t),o=t.sub(e),r=o.len()?o.per().normalize():new sI(0,-1);return i.add(r.mul(-n))})(e,t,i),r=((e,t,n)=>{const i=((e,t,n)=>{const i=-2*(e.x*(t.y-n.y)-e.y*(t.x-n.x)+t.x*n.y-n.x*t.y);if(Math.abs(i)<1e-6)return null;const o=((e.x*e.x+e.y*e.y)*(n.y-t.y)+(t.x*t.x+t.y*t.y)*(e.y-n.y)+(n.x*n.x+n.y*n.y)*(t.y-e.y))/i,r=((e.x*e.x+e.y*e.y)*(t.x-n.x)+(t.x*t.x+t.y*t.y)*(n.x-e.x)+(n.x*n.x+n.y*n.y)*(e.x-t.x))/i;return Number.isFinite(o)&&Number.isFinite(r)?new sI(o,r):null})(e,t,n);if(!i)return null;const o=i.dist(e);if(o<1e-6)return null;const r=((d=n).x-(a=e).x)*((l=t).y-a.y)-(l.x-a.x)*(d.y-a.y)<0?1:0,s=((e,t,n)=>{const i=e.dist(n),o=n.dist(t),r=t.dist(e);return o<1e-6||r<1e-6?0:2*Math.acos(Math.max(-1,Math.min(1,(o*o+r*r-i*i)/(2*o*r))))})(e,t,n);var a,l,d;if(!Number.isFinite(s))return null;const c=Math.PI>s?1:0,u=(FP-s)*(r?1:-1);return{center:i,radius:o,largeArcFlag:c,sweepFlag:r,size:u,length:Math.abs(u*o)}})(e,o,t),s=Math.abs(i)<1e-6||null===r||0===r.length||!Number.isFinite(r.length)||!Number.isFinite(r.radius),a=s?[e,t]:jl(e,t,r,24),l=s||null===r?`M ${Kl(e.x)} ${Kl(e.y)} L ${Kl(t.x)} ${Kl(t.y)}`:`M ${Kl(e.x)} ${Kl(e.y)} A ${Kl(r.radius)} ${Kl(r.radius)} 0 ${r.largeArcFlag} ${r.sweepFlag} ${Kl(t.x)} ${Kl(t.y)}`,d={start:{terminal:"start",point:e,handle:e},end:{terminal:"end",point:t,handle:t},middle:o,bend:i,points:a,bounds:aI.FromPoints(a),path:l};return s?{type:"straight",...d,arc:null}:{type:"curved",...d,arc:r}}function ql({start:e,end:t,middle:n,bend:i,arc:o,startHandle:r=e,endHandle:s=t}){const a=Vl(e,t,o);if(Math.abs(a)<1e-6||!Number.isFinite(a)||!Number.isFinite(o.radius)||o.radius<1e-6){const o=Yl(e,t,0);return{...o,start:{...o.start,handle:r},end:{...o.end,handle:s},middle:n,bend:i}}const l={center:o.center,radius:o.radius,largeArcFlag:Math.abs(a)>Math.PI?1:0,sweepFlag:o.sweepFlag,size:a,length:Math.abs(a*o.radius)},d=jl(e,t,l,24),c=`M ${Kl(e.x)} ${Kl(e.y)} A ${Kl(l.radius)} ${Kl(l.radius)} 0 ${l.largeArcFlag} ${l.sweepFlag} ${Kl(t.x)} ${Kl(t.y)}`;return{type:"curved",start:{terminal:"start",point:e,handle:r},end:{terminal:"end",point:t,handle:s},middle:n,arc:l,bend:i,points:d,bounds:aI.FromPoints(d),path:c}}function jl(e,t,n,i){const o=[],r=sI.Angle(n.center,e),s=Vl(e,t,n);for(let a=0;a<=i;a++)o.push(Zl(n.center,n.radius,r+s*(a/i)));return o}function Vl(e,t,n){return i=sI.Angle(n.center,e),o=sI.Angle(n.center,t),n.sweepFlag?((o-i)%FP+FP)%FP:-((i-o)%FP+FP)%FP;var i,o}function Gl(e,t,n,i){const o=sI.Angle(n.center,e),r=Vl(e,t,n);return Zl(n.center,n.radius,o+r*i)}function Zl(e,t,n){return e.add(new sI(Math.cos(n)*t,Math.sin(n)*t))}function Ql(e,t,n){const i=n.sub(t),o=i.x*i.x+i.y*i.y;if(0===o)return e.dist(t);const r=e.sub(t),s=Math.max(0,Math.min(1,Jl(r,i)/o)),a=t.add(i.mul(s));return e.dist(a)}function Jl(e,t){return e.x*t.x+e.y*t.y}function ed(e){return!!e&&"shape"===e.typeName&&"arrow"===e.type}function td(e){return!!e&&"binding"===e.typeName&&"arrow"===e.type}function nd(e,t,n){return e.getBindingsFromShape(t.id).find(e=>td(e)&&e.props.terminal===n)??null}function id(e,t,n){const i=Ll(e,t,n),o=nd(e,t,n);if(!o)return{terminal:n,binding:null,target:null,handlePagePoint:i,boundaryPagePoint:i,isArcBoundaryPoint:!0};const r=e.getShape(o.toId);return!r||ed(r)?{terminal:n,binding:o,target:null,handlePagePoint:i,boundaryPagePoint:i,isArcBoundaryPoint:!0}:{terminal:n,binding:o,target:r,handlePagePoint:Al(e,r,o.props.normalizedAnchor),boundaryPagePoint:i,isArcBoundaryPoint:!1}}function od(e,t){const n=id(e,t,"start"),i=id(e,t,"end"),o=ld(e,t,n.handlePagePoint,i.handlePagePoint);return"curved"===o.type&&(pd(e,n,o,"start"),pd(e,i,o,"end")),{info:dd(o,n,i),fullInfo:o,bindingSegments:[gd(n,o),gd(i,o)].filter(e=>null!==e)}}function rd(e,t){if(!nd(e,t,"start")&&!nd(e,t,"end"))return zl(t);const n=e.computeShapeLocalToPageTransform(t).tryInvert();return n?((e,t,n)=>{const i=ad(t.info,n);if("curved"!==t.info.type)return i;const o=Yl(n.applyToPoint(t.fullInfo.start.point),n.applyToPoint(t.fullInfo.end.point),e.props.bend);if("curved"!==o.type)return i;const r=n.applyToPoint(t.info.start.point),s=n.applyToPoint(t.info.end.point),a=((e,t,n)=>{const i=t.sub(e);if(i.len2()<1e-12)return null;const o=sI.Med(e,t),r=i.per().normalize(),s=n.sub(o);return o.add(r.mul(s.x*r.x+s.y*r.y))})(r,s,o.arc.center);if(!a)return i;const l={center:a,radius:a.dist(r),sweepFlag:o.arc.sweepFlag},d=Gl(r,s,l,.5);return ql({start:r,end:s,middle:d,bend:Nl(r,s,d),arc:l,startHandle:n.applyToPoint(t.info.start.handle),endHandle:n.applyToPoint(t.info.end.handle)})})(t,od(e,t),n):Yl(new sI(t.props.start.x,t.props.start.y),new sI(t.props.end.x,t.props.end.y),t.props.bend)}function sd(e,t,n){return{...e,start:{...e.start,handle:t},end:{...e.end,handle:n}}}function ad(e,t){const n=e=>t.applyToPoint(e),i=n(e.start.point),o=n(e.end.point),r=n(e.middle),s=e.points.map(n),a=s.map((e,t)=>`${0===t?"M":"L"} ${hd(e.x)} ${hd(e.y)}`).join(" "),l={start:{...e.start,point:i,handle:n(e.start.handle)},end:{...e.end,point:o,handle:n(e.end.handle)},middle:r,bend:Nl(i,o,r),points:s,bounds:aI.FromPoints(s),path:a};if("straight"===e.type)return{...e,...l};const d=n(e.arc.center),c={...e.arc,center:d,radius:d.dist(i),sweepFlag:t.determinant()<0?1===e.arc.sweepFlag?0:1:e.arc.sweepFlag};return(e=>{const t=Math.hypot(e.a,e.b),n=Math.hypot(e.c,e.d),i=Math.max(1,t,n);return Math.abs(t-n)<=1e-8*i&&Math.abs(e.a*e.c+e.b*e.d)<=1e-8*i*i})(t)?ql({start:i,end:o,middle:r,bend:l.bend,arc:c,startHandle:l.start.handle,endHandle:l.end.handle}):{...e,...l,arc:c}}function ld(e,t,n,i){const o=e.computeShapeLocalToPageTransform(t),r=o.tryInvert();return r?ad(Yl(r.applyToPoint(n),r.applyToPoint(i),t.props.bend),o):Yl(n,i,t.props.bend)}function dd(e,t,n){if(t.boundaryPagePoint.dist2(e.start.point)<1e-10&&n.boundaryPagePoint.dist2(e.end.point)<1e-10)return sd(e,t.handlePagePoint,n.handlePagePoint);if("straight"===e.type)return sd(Yl(t.boundaryPagePoint,n.boundaryPagePoint,0),t.handlePagePoint,n.handlePagePoint);if(e.path.includes(" A "))return ql({start:t.boundaryPagePoint,end:n.boundaryPagePoint,middle:Gl(t.boundaryPagePoint,n.boundaryPagePoint,e.arc,.5),bend:e.bend,arc:e.arc,startHandle:t.handlePagePoint,endHandle:n.handlePagePoint});const i=cd(e.points,t.boundaryPagePoint),o=cd(e.points,n.boundaryPagePoint),r=[t.boundaryPagePoint];for(let a=Math.floor(i)+1;a<=Math.floor(o);a+=1){const t=e.points[a];t&&a<o&&r.push(t)}r.push(n.boundaryPagePoint);const s=(e=>{if(0===e.length)return sI.Zero();const t=[];let n=0;for(let o=0;o<e.length-1;o+=1){const i=e[o].dist(e[o+1]);t.push(i),n+=i}let i=n/2;for(let o=0;o<t.length;o+=1){const n=t[o];if(i<=n){const t=e[o];return t.add(e[o+1].sub(t).mul(0===n?0:i/n))}i-=n}return e[e.length-1]})(r);return{...e,start:{...e.start,point:t.boundaryPagePoint,handle:t.handlePagePoint},end:{...e.end,point:n.boundaryPagePoint,handle:n.handlePagePoint},middle:s,points:r,bounds:aI.FromPoints(r),path:ud(r),bend:Nl(t.boundaryPagePoint,n.boundaryPagePoint,s)}}function cd(e,t){let n=0,i=1/0;for(let o=0;o<e.length-1;o+=1){const r=e[o],s=e[o+1].sub(r),a=s.len2(),l=0===a?0:Math.max(0,Math.min(1,((t.x-r.x)*s.x+(t.y-r.y)*s.y)/a)),d=r.add(s.mul(l)).dist2(t);d<i&&(i=d,n=o+l)}return n}function ud(e){return e.map((e,t)=>`${0===t?"M":"L"} ${hd(e.x)} ${hd(e.y)}`).join(" ")}function hd(e){return Number(e.toFixed(3)).toString()}function pd(e,t,n,i){if(!t.target)return void(t.isArcBoundaryPoint=!0);const o=Sd(e.getShapePageOutlineVertices(t.target.id),n,i);o?(t.boundaryPagePoint=o,t.isArcBoundaryPoint=!0):t.isArcBoundaryPoint=!1}function gd(e,t){if(!e.binding)return null;const n=((e,t)=>({terminal:e.terminal,anchorPagePoint:e.handlePagePoint,boundaryPagePoint:e.boundaryPagePoint,guidePath:"curved"===t.type&&e.isArcBoundaryPoint?md(e.terminal,e.handlePagePoint,e.boundaryPagePoint,t):null}))(e,t);return{terminal:n.terminal,anchorPagePoint:n.anchorPagePoint,boundaryPagePoint:n.boundaryPagePoint,guidePath:n.guidePath}}function fd(e,{arrow:t,terminal:n,target:i,anchorPagePoint:o,fallbackBoundaryPagePoint:r}){const s=((e,t,n)=>id(e,t,n).handlePagePoint)(e,t,$l(n)),a=ld(e,t,"start"===n?o:s,"end"===n?o:s);if("curved"!==a.type)return{terminal:n,anchorPagePoint:o,boundaryPagePoint:r,guidePath:null};const l=Sd(e.getShapePageOutlineVertices(i.id),a,n);return l?{terminal:n,anchorPagePoint:o,boundaryPagePoint:l,guidePath:md(n,o,l,a)}:{terminal:n,anchorPagePoint:o,boundaryPagePoint:r,guidePath:null}}function md(e,t,n,i){if(i.path.includes(" A "))return(({terminal:e,handlePagePoint:t,boundaryPagePoint:n,fullInfo:i})=>{if(t.dist(n)<1e-6)return null;const o="start"===e?i.arc.sweepFlag:(e=>e?0:1)(i.arc.sweepFlag),r={center:i.arc.center,radius:i.arc.radius,sweepFlag:o};return ql({start:t,end:n,middle:Gl(t,n,r,.5),bend:i.bend,arc:r}).path})({terminal:e,handlePagePoint:t,boundaryPagePoint:n,fullInfo:i});const o=cd(i.points,n),r=[t];if("start"===e)for(let s=1;s<=Math.floor(o);s+=1){const e=i.points[s];e&&s<o&&r.push(e)}else for(let s=i.points.length-2;s>=Math.ceil(o);s-=1){const e=i.points[s];e&&s>o&&r.push(e)}return r.push(n),ud(r)}function Sd(e,t,n){const i=[];for(let o=0;o<t.points.length-1;o+=1){const n=t.points[o],r=t.points[o+1];for(let t=0;t<e.length;t+=1){const s=e[t],a=e[(t+1)%e.length];if(!s||!a)continue;const l=yd(n,r,s,a);l&&i.push({point:l.point,position:o+l.t})}}return 0===i.length?null:(i.sort((e,t)=>e.position-t.position),"start"===n?i[0].point:i[i.length-1].point)}function yd(e,t,n,i){const o=t.sub(e),r=i.sub(n),s=o.x*r.y-o.y*r.x;if(Math.abs(s)<1e-9)return null;const a=n.sub(e),l=(a.x*r.y-a.y*r.x)/s,d=(a.x*o.y-a.y*o.x)/s;return l<-1e-9||l>1.000000001||d<-1e-9||d>1.000000001?null:{point:e.add(o.mul(Math.max(0,Math.min(1,l)))),t:Math.max(0,Math.min(1,l))}}function bd(e,t){const n=e.getShapePageBounds(t.id)??e.computeShapePageBounds(t);return n.w*n.h}function xd(e,t){return e.getShapeUtil(t).canReceiveChildren(t)}function Id(e,t){return!(!t||ed(t))&&e.getShapeUtil(t).canReceiveTerminalBinding(t,{editor:e})}function wd(e,t,n){const i=xd(e,t),o=xd(e,n);if(i!==o)return i?1:-1;if(i&&o){const i=bd(e,t)-bd(e,n);if(Math.abs(i)>1e-6)return i}return 0}function vd(e,t){return"number"==typeof e&&Number.isFinite(e)?e:t}function Pd(e){if(e)return{shapes:[e]}}function kd(e,t,n="user"){if(t.parentId?.startsWith("shape:")){const n=e.getShape(t.parentId);if(!n||!e.computeShapeLocalToPageTransform(n).tryInvert())throw new Error("Cannot create an arrow inside a singular parent transform")}const[i]=e.commands.createShapes([{type:"arrow",x:t.startPagePoint.x,y:t.startPagePoint.y,parentId:t.parentId,props:t.props,meta:t.meta}],{source:n,autoReparent:!1});if(!ed(i))throw new Error("Failed to create arrow shape");const o=Fl(e,i,t.startPagePoint,t.endPagePoint);if(!o)throw new Error("Cannot create an arrow inside a singular parent transform");e.commands.updateShapes([{id:i.id,x:o.x,y:o.y,rotation:o.rotation,skewX:o.skewX,scaleX:o.scaleX,scaleY:o.scaleY,props:{...o.props}}],{source:n}),t.startBinding&&e.commands.createBinding({type:"arrow",fromId:o.id,toId:t.startBinding.targetShapeId,props:{terminal:"start",normalizedAnchor:t.startBinding.normalizedAnchor}},{source:n}),t.endBinding&&e.commands.createBinding({type:"arrow",fromId:o.id,toId:t.endBinding.targetShapeId,props:{terminal:"end",normalizedAnchor:t.endBinding.normalizedAnchor}},{source:n});const r=e.getShape(o.id);if(!ed(r))throw new Error("Failed to create arrow shape");return r}function Cd(e,t,n,i,o="user"){if(!t)return e.setBindingPreview(i.preview),null;let r=null;return r=((e,t,n)=>{const i=e.getShape(t.shapeId);if(!ed(i))return null;const o=Ul(e,i,t.terminal,t.pagePoint);if(!o)return null;e.commands.updateShapes([{id:i.id,x:o.x,y:o.y,rotation:o.rotation,skewX:o.skewX,scaleX:o.scaleX,scaleY:o.scaleY,props:{...o.props}}],{source:n});const r=e.getBindingsFromShape(i.id).find(e=>td(e)&&e.props.terminal===t.terminal)??null;t.binding?td(r)?e.commands.updateBinding({id:r.id,toId:t.binding.targetShapeId,props:{terminal:t.terminal,normalizedAnchor:t.binding.normalizedAnchor}},{source:n}):(r&&e.commands.deleteBinding(r.id,{source:n}),e.commands.createBinding({type:"arrow",fromId:i.id,toId:t.binding.targetShapeId,props:{terminal:t.terminal,normalizedAnchor:t.binding.normalizedAnchor}},{source:n})):r&&(e.commands.deleteBinding(r.id,{source:n}),e.commands.updateShapes([{id:i.id,x:o.x,y:o.y,rotation:o.rotation,skewX:o.skewX,scaleX:o.scaleX,scaleY:o.scaleY,props:{...o.props}}],{source:n}));const s=e.getShape(i.id);return ed(s)?s:o})(e,{shapeId:t,terminal:n,pagePoint:i.pagePoint,binding:i.binding},o),e.setBindingPreview(i.preview),r}function Td(e,t){const n=[];return"arrow"===t.headStart&&n.push(Ed(e,"start",t.strokeWidth)),"arrow"===t.headEnd&&n.push(Ed(e,"end",t.strokeWidth)),{path:n.length>0?n.map(Md).join(" "):null,points:n.flat()}}function Md([e,t,n]){return[`M ${Ad(e.x)} ${Ad(e.y)}`,`L ${Ad(t.x)} ${Ad(t.y)}`,`L ${Ad(n.x)} ${Ad(n.y)}`].join(" ")}function Ed(e,t,n){const i=e[t].point,o=((e,t)=>{if("curved"===e.type){const n=e[t].point.sub(e.arc.center).per().mul(1===e.arc.sweepFlag?1:-1).normalize();if(n.len2()>0)return n}const n=e.end.point.sub(e.start.point).normalize();return n.len2()>0?n:new sI(1,0)})(e,t),r=3.45*n*("start"===t?1:-1),s=o.per().mul(2*n),a=i.add(o.mul(r));return[a.sub(s),i,a.add(s)]}function Ad(e){return Number.isFinite(e)?Number(e.toFixed(3)).toString():"0"}function Bd(e,t){const n=e&&"object"==typeof e?e:void 0;return{x:Rd(n?.x,t.x),y:Rd(n?.y,t.y)}}function Rd(e,t){return"number"==typeof e&&Number.isFinite(e)?e:t}function Ld(e,t,n){const i=n.sub(t),o=i.len2();if(0===o)return e.dist(t);const r=e.sub(t),s=Math.max(0,Math.min(1,(r.x*i.x+r.y*i.y)/o));return e.dist(t.add(i.mul(s)))}function $d(e,t,n,i){return((e,t,n,i)=>{const o=t.sub(e),r=i.sub(n),s=o.x*r.y-o.y*r.x;if(Math.abs(s)<1e-8)return!1;const a=n.sub(e),l=(a.x*r.y-a.y*r.x)/s,d=(a.x*o.y-a.y*o.x)/s;return l>=0&&l<=1&&d>=0&&d<=1})(e,t,n,i)?0:Math.min(Ld(e,n,i),Ld(t,n,i),Ld(n,e,t),Ld(i,e,t))}function Fd(e,{terminal:t,rawPagePoint:n,oppositePagePoint:i,excludeShapeId:o,ignoreTargets:r=!1}){if(r)return{pagePoint:n.clone(),binding:null,preview:null};const s=function(e,t,n,i){const o=((e,t)=>{let n=null;for(const i of t)(!n||wd(e,i,n)<0)&&(n=i);return n})(e,e.hitTestShapesAtPoint(t,{hitTest:"bindingTarget",filter:t=>t.id!==i?.excludeShapeId&&Id(e,t)}));if(!o)return null;const r=((e,t,n)=>{const i=e.computeShapePositionedToPageTransform(t).tryInvert(),o=e.computeShapePositionedBounds(t);if(!i)return{x:.5,y:.5};const r=i.applyToPoint(n),s=o.h<=1e-6?.5:(r.y-o.minY)/o.h;return{x:El(o.w<=1e-6?.5:(r.x-o.minX)/o.w),y:El(s)}})(e,o,t);return{targetShape:o,normalizedAnchor:r,resolvedPagePoint:Bl(e,o,r,n),rawPagePoint:t.clone()}}(e,n,i,{excludeShapeId:o});return{pagePoint:s?.resolvedPagePoint??n.clone(),binding:Dd(s),preview:Od(t,s)}}function Ud(e,{arrow:t,terminal:n,rawPagePoint:i,ignoreTargets:o=!1}){const r=Fd(e,{terminal:n,rawPagePoint:i,oppositePagePoint:Ll(e,t,$l(n)),excludeShapeId:t.id,ignoreTargets:o});if(!r.preview)return r;const s=((e,{arrow:t,terminal:n,rawPagePoint:i,preview:o})=>{const r=e.getShape(o.targetShapeId);if(!r||ed(r))return o;const s=fd(e,{arrow:t,terminal:n,target:r,anchorPagePoint:i,fallbackBoundaryPagePoint:o.resolvedPagePoint});return{...o,resolvedPagePoint:s.boundaryPagePoint,guidePath:s.guidePath}})(e,{arrow:t,terminal:n,rawPagePoint:i,preview:r.preview});return{...r,pagePoint:s.resolvedPagePoint,preview:s}}function Dd(e){return e?{targetShapeId:e.targetShape.id,normalizedAnchor:e.normalizedAnchor}:null}function Od(e,t){return t?{terminal:e,targetShapeId:t.targetShape.id,rawPagePoint:t.rawPagePoint,resolvedPagePoint:t.resolvedPagePoint}:null}function zd(e,t){return{tag:"marker",attrs:{markerWidth:12,markerHeight:12,viewBox:"0 0 24 24",refX:"start"===e?2:22,refY:12,orient:"auto",markerUnits:"strokeWidth"},children:[{tag:"path",attrs:{d:"start"===e?"M8.9,8 L2,12 L8.9,16":"M15.1,8 L22,12 L15.1,16",fill:"none",stroke:t,"stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"}}]}}function Nd({strokeActionId:e,strokeWidthActionId:t,directionActionId:n,dataUiPrefix:i}){return[{id:`${i}.style-stroke`,items:[{kind:"color-input",id:`${i}.stroke`,actionId:e,label:"Stroke",previewStyle:"outline",fallback:"#334155",presets:_P.map(e=>({...e,dataUi:`${i}-stroke-${e.id}-button`})),dataUi:`${i}.stroke`}]},{id:`${i}.style-stroke-width`,items:[{kind:"text-input",id:`${i}.stroke-width`,actionId:t,label:"Stroke width",placeholder:"2",suffix:"Px",validate:qd,dataUi:`${i}-stroke-width-control`}]},{id:`${i}.direction`,items:[{kind:"segmented",id:`${i}.direction`,actionId:n,options:WP.map(e=>({...e,label:`Arrow direction: ${e.label}`,dataUi:`${i}-direction-${e.value}-button`}))}]}]}function _d(e){return{id:`arrow.set-${e}`,getAvailability:e=>"arrow"!==e.selection.commonShapeType?"inapplicable":e.selection.count>0?"enabled":"disabled",getValue:t=>((e,t)=>{let n;for(const i of e){if("arrow"!==i.type)continue;const e=i.props[t];if(void 0!==n){if("stroke"===t?!O(n,e):n!==e)return null}else n=e}return n??null})(t.selection.selectedShapes,e),run({context:t,value:n}){const i=Xd(e,n);if(void 0===i)return;const o=t.selection.selectedShapes.filter(e=>"arrow"===e.type).filter(e=>!e.isLocked).map(t=>({id:t.id,props:{[e]:i}}));0!==o.length&&t.editor.commands.updateShapes(o,{source:"user"})}}}function Wd(e){return{id:`arrow.default-${e}`,getAvailability:e=>"arrow"===e.tool.activeToolId?"enabled":"inapplicable",getValue:t=>t.editor.getDefaultShapeProps("arrow")[e],run({context:t,value:n}){const i=Xd(e,n);void 0!==i&&t.editor.updateDefaultShapeProps("arrow",{[e]:i})}}}function Xd(e,t){return"strokeWidth"===e?Yd(t):"stroke"===e&&R(t)?$(t,M("stroke-slate")):void 0}function Hd(e,t){return"arrow"===e&&"arrow"===t?"both":"arrow"===e?"start":"arrow"===t?"end":"none"}function Kd(e){if(!WP.some(t=>t.value===e))return null;switch(e){case"both":return{headStart:"arrow",headEnd:"arrow"};case"start":return{headStart:"arrow",headEnd:"none"};case"end":return{headStart:"none",headEnd:"arrow"};case"none":return{headStart:"none",headEnd:"none"}}}function Yd(e){const t="number"==typeof e?e:"string"==typeof e&&e.trim().length>0?Number(e):NaN;return Number.isFinite(t)&&t>0?t:void 0}function qd(e){return void 0!==Yd(e)}function jd({dataUi:e,editor:t,idPrefix:n,shape:i,stroke:o,strokeWidth:r,vectorEffect:s}){const a=`${n}-content-clip-${i.id.replace(/[^a-zA-Z0-9_-]/g,"-")}`,l=rd(t,i),d=Td(l,i.props),c=Qo(t.getShapeContentCutoutLocalPolygonsSignal(i.id)),u=wo({outputBounds:l.bounds,cutoutLocalPolygons:c});
23
- return Bx("svg",{"data-ui":e,width:"100%",height:"100%",viewBox:`0 0 ${i.props.w} ${i.props.h}`,overflow:"visible",children:[u?Ax("defs",{children:Ax("clipPath",{id:a,clipPathUnits:"userSpaceOnUse",children:Ax("path",{d:u,clipRule:"evenodd",fillRule:"evenodd"})})}):null,Bx("g",{clipPath:u?`url(#${a})`:void 0,children:[Ax("path",{"data-arrow-path":"body",d:l.path,fill:"none",stroke:o,strokeWidth:r,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:s}),d.path?Ax("path",{"data-arrow-path":"heads",d:d.path,fill:"none",stroke:o,strokeWidth:r,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:s}):null]})]})}function Vd(e){return/^\s*$/.test(e)?"Frame":e}function Gd(e){return new aI(0,-34,e.props.w,e.props.h+34)}function Zd(e,t){return"number"==typeof e&&Number.isFinite(e)?e:t}function Qd(e,t,n){const i=n/2;return!!e.expand(i).containsPoint(t)&&(Math.abs(t.x-e.minX)<=i||Math.abs(t.x-e.maxX)<=i||Math.abs(t.y-e.minY)<=i||Math.abs(t.y-e.maxY)<=i)}function Jd(e){return{id:`frame.set-${e}`,getAvailability:e=>"frame"!==e.selection.commonShapeType?"inapplicable":e.selection.count>0?"enabled":"disabled",getValue:t=>((e,t)=>{let n;for(const i of e){if("frame"!==i.type)continue;const e=i.props[t];if(void 0!==n){if("strokeWidth"===t?n!==e:!O(n,e))return null}else n=e}return n??null})(t.selection.selectedShapes,e),run({context:t,value:n}){const i=ic(e,n);if(void 0===i)return;const o=t.selection.selectedShapes.filter(e=>"frame"===e.type).filter(e=>!e.isLocked).map(t=>({id:t.id,props:{[e]:i}}));0!==o.length&&t.editor.commands.updateShapes(o,{source:"user"})}}}function ec(e){return{id:`frame.default-${e}`,getAvailability:e=>"frame"===e.tool.activeToolId?"enabled":"inapplicable",getValue:t=>t.editor.getDefaultShapeProps("frame")[e],run({context:t,value:n}){const i=ic(e,n);void 0!==i&&t.editor.updateDefaultShapeProps("frame",{[e]:i})}}}function tc({fillActionId:e,strokeActionId:t,strokeWidthActionId:n,dataUiPrefix:i}){return[{id:`${i}.style-fill`,items:[{kind:"color-input",id:`${i}.fill`,actionId:e,label:"Fill",fallback:"#f8fafc",presets:VP.map(e=>({...e,dataUi:`${i}-fill-${e.id}-button`})),dataUi:`${i}.fill`}]},{id:`${i}.style-stroke`,items:[{kind:"color-input",id:`${i}.stroke`,actionId:t,label:"Stroke",previewStyle:"outline",fallback:"#94a3b8",presets:GP.map(e=>({...e,dataUi:`${i}-stroke-${e.id}-button`})),dataUi:`${i}.stroke`}]},{id:`${i}.style-stroke-width`,items:[{kind:"text-input",id:`${i}.stroke-width`,actionId:n,label:"Stroke width",placeholder:"1",suffix:"Px",validate:rc,dataUi:`${i}-stroke-width-control`}]}]}function nc(e){return{id:`frame.child-order.${e}`,getAvailability:t=>"frame"!==sc(t)?"inapplicable":t.editor.canMoveSelectionWithinParent(e)?"enabled":"disabled",run({context:t}){t.editor.moveSelectionWithinParent(e,"user")}}}function ic(e,t){return"strokeWidth"===e?oc(t):R(t)?$(t,"fill"===e?E("transparent"):M("stroke-muted")):void 0}function oc(e){const t="number"==typeof e?e:"string"==typeof e&&e.trim().length>0?Number(e):NaN;return Number.isFinite(t)&&t>0?t:void 0}function rc(e){return void 0!==oc(e)}function sc(e){const[t]=e.selection.selectedShapes;return 1===e.selection.count&&t?.parentId.startsWith("shape:")?e.editor.getShape(t.parentId)?.type??null:null}function ac({shape:e,hideName:t=!1}){const{fill:n,h:i,name:o,stroke:r,strokeWidth:s,w:a}=e.props,l=s/2,d=Math.max(a-s,0),c=Math.max(i-s,0),u=Vd(o),h=Gd(e);
24
- return Bx("svg",{width:"100%",height:"100%",viewBox:`${h.x} ${h.y} ${h.w} ${h.h}`,style:{display:"block",overflow:"visible"},shapeRendering:"geometricPrecision",children:[Ax("rect",{x:l,y:l,width:d,height:c,fill:F(n),stroke:F(r),strokeWidth:s,strokeLinejoin:"round",strokeLinecap:"round"}),t?null:Ax("text",{x:0,y:-8,fill:F(r),fontFamily:QP,fontSize:12,fontWeight:400,style:{userSelect:"none"},children:u})]})}function lc({editor:e,shape:t,isEditing:n}){const i=Cx(null),o=Qo(e.cameraZoomSignal),r=Qo(e.getShapeLocalToPageTransformSignal(t.id)),s=Math.max(o,1e-4),a=Math.min(1/s,3.5),l=(e=>{const t=2*Math.PI;return Math.floor(2*((e%t+t)%t+Math.PI/4)/Math.PI%4)})(r?Math.atan2(r.b,r.a):0),d=0===l||2===l?t.props.w:t.props.h,c=((e,t)=>{switch(t){case 0:return"";case 1:return`translate(0px, ${e.props.h}px) rotate(270deg)`;case 2:return`translate(${e.props.w}px, ${e.props.h}px) rotate(180deg)`;case 3:return`translate(${e.props.w}px, 0px) rotate(90deg)`}})(t,l),u=Vd(t.props.name);Ix(()=>{const e=i.current;n&&e&&(e.focus(),e.select())},[n]);const h=bx(()=>{e.canEditShape(t)&&e.startEditingShape({shapeId:t.id,entryMode:"selectAll",markId:"frame.edit"},"user")},[e,t]),p=bx(n=>{e.commands.updateShapes([{id:t.id,props:{name:n.currentTarget.value}}],{source:"user"})},[e,t.id]),g=bx(t=>{e.completeEditing("user")},[e]),f=bx(t=>{e.setShapeEditingComposition(!0,"system")},[e]),m=bx(t=>{e.setShapeEditingComposition(!1,"system")},[e]),S=bx(t=>{if(t.stopPropagation(),!t.nativeEvent.isComposing)return"Enter"===t.key?(t.preventDefault(),void e.completeEditing("user")):void("Escape"===t.key&&(t.preventDefault(),e.cancelEditing("user")))},[e]),y=bx(e=>{e.stopPropagation()},[]),b=bx(e=>{e.stopPropagation(),n||h()},[n,h]);
25
- return Ax("div",{style:{height:0,left:0,overflow:"visible",pointerEvents:"none",position:"absolute",top:34,width:0},children:Ax("div",{"data-ui":"frame-canvas-heading","data-shape-id":t.id,role:n?void 0:"button","aria-label":n?void 0:`Edit frame name: ${u}`,onClick:b,onPointerDown:y,style:{alignItems:"center",bottom:0,cursor:t.isLocked?"default":"text",display:"flex",fontFamily:QP,fontSize:12,fontWeight:400,maxWidth:d*s+16,minWidth:32,overflow:n?"visible":"hidden",paddingBottom:4,pointerEvents:t.isLocked?"none":"auto",position:"absolute",transform:`${c} scale(${a}) translateX(-7px)`,transformOrigin:"0 100%",userSelect:"none",whiteSpace:"pre"},children:Ax("div",{style:{alignItems:"center",background:"var(--land-canvas-bg, white)",borderRadius:4,boxShadow:"inset 0 0 0 1px var(--land-canvas-bg, white)",color:"var(--land-text-primary, #0f172a)",display:"flex",height:24,pointerEvents:"auto",width:"100%"},children:Bx("div",{style:{background:n?"var(--land-surface-bg, white)":void 0,borderRadius:4,boxShadow:n?"inset 0 0 0 1.5px var(--land-selection, #2563eb)":void 0,color:n?"transparent":"inherit",height:n?"100%":void 0,minWidth:n?32:void 0,overflow:n?"visible":"hidden",padding:"0 6px",pointerEvents:"auto",position:"relative",textOverflow:"ellipsis",whiteSpace:"pre",width:n?"auto":void 0},children:[Ax("input",{ref:i,"data-ui":"frame-canvas-name-input","data-shape-id":t.id,"aria-label":"Frame name",value:t.props.name,autoComplete:"off",disabled:!n,readOnly:!n,spellCheck:!1,onBlur:g,onChange:p,onCompositionStart:f,onCompositionEnd:m,onKeyDown:S,onPointerDown:y,style:{background:"none",border:0,borderRadius:4,boxSizing:"border-box",color:"var(--land-text-primary, #0f172a)",cursor:"text",display:n?void 0:"none",font:"inherit",height:"100%",inset:0,lineHeight:"24px",minWidth:0,outline:0,padding:"0 6px",position:"absolute",userSelect:"text",width:"100%"}}),u+String.fromCharCode(8203)]})})})})}function dc(e,t,n){const i=e.getDefaultShapeProps("geo"),[o]=e.commands.createShapes([{type:"geo",x:n.x,y:n.y,meta:n.meta?{...n.meta}:void 0,props:{...i,geo:t,w:n.w??i.w,h:n.h??i.h,fill:n.fill??i.fill,stroke:n.stroke??i.stroke,strokeStyle:n.strokeStyle??i.strokeStyle,strokeWidth:n.strokeWidth??i.strokeWidth,cornerRadiusPercent:n.cornerRadiusPercent??i.cornerRadiusPercent}}],{source:"user"});return o&&"geo"===o.type?{id:o.id,type:o.type}:null}function cc(e,t,n={}){return"ellipse"===t?((e,t=32)=>{const n=[];for(let i=0;i<t;i+=1){const o=i/t*Math.PI*2;n.push(new sI(e.center.x+e.w/2*Math.cos(o),e.center.y+e.h/2*Math.sin(o)))}return n})(e):pc(e,t,n)}function uc(e,t=12){return Math.min(50,Math.max(0,"number"==typeof e&&Number.isFinite(e)?e:t))}function hc({cornerRadiusPercent:e=12,h:t,w:n}){return Math.min(Math.max(0,n),Math.max(0,t))*uc(e)/100}function pc(e,t,n={}){switch(t){case"rhombus":return[new sI(e.center.x,e.minY),new sI(e.maxX,e.center.y),new sI(e.center.x,e.maxY),new sI(e.minX,e.center.y)];case"triangle":return[new sI(e.center.x,e.minY),new sI(e.maxX,e.maxY),new sI(e.minX,e.maxY)];case"hexagon":return[new sI(e.minX+.25*e.w,e.minY),new sI(e.maxX-.25*e.w,e.minY),new sI(e.maxX,e.center.y),new sI(e.maxX-.25*e.w,e.maxY),new sI(e.minX+.25*e.w,e.maxY),new sI(e.minX,e.center.y)];case"star":return(e=>{const t=[];for(let n=0;n<10;n+=1){const e=-Math.PI/2+n*Math.PI/5,i=n%2==0?1:.48;t.push(new sI(Math.cos(e)*i,Math.sin(e)*i))}return((e,t)=>{const n=aI.FromPoints([...e]);return 0===n.w||0===n.h?[t.center]:e.map(e=>new sI(t.minX+(e.x-n.minX)/n.w*t.w,t.minY+(e.y-n.minY)/n.h*t.h))})(t,e)})(e);case"rectangle":return((e,t=hc(e),n=4)=>{const i=Math.min(Math.max(0,t),Math.max(0,e.w)/2,Math.max(0,e.h)/2);if(0===i)return mc(e);const o=[];return fc(o,{centerX:e.maxX-i,centerY:e.minY+i,radius:i,startAngle:-Math.PI/2,endAngle:0,segments:n}),fc(o,{centerX:e.maxX-i,centerY:e.maxY-i,radius:i,startAngle:0,endAngle:Math.PI/2,segments:n}),fc(o,{centerX:e.minX+i,centerY:e.maxY-i,radius:i,startAngle:Math.PI/2,endAngle:Math.PI,segments:n}),fc(o,{centerX:e.minX+i,centerY:e.minY+i,radius:i,startAngle:Math.PI,endAngle:3*Math.PI/2,segments:n}),o})(e,hc({cornerRadiusPercent:n.cornerRadiusPercent,w:e.w,h:e.h}));default:return mc(e)}}function gc(e,t){if(t.length<3)return!1;let n=!1;for(let i=0,o=t.length-1;i<t.length;o=i,i+=1){const r=t[i],s=t[o];if(r&&s){if(Sc(e,r,s)<=1e-6)return!0;r.y>e.y!=s.y>e.y&&e.x<(s.x-r.x)*(e.y-r.y)/(s.y-r.y)+r.x&&(n=!n)}}return n}function fc(e,{centerX:t,centerY:n,endAngle:i,radius:o,segments:r,startAngle:s}){const a=Math.max(1,Math.floor(r));for(let l=0;l<=a;l+=1){const r=s+l/a*(i-s);e.push(new sI(t+Math.cos(r)*o,n+Math.sin(r)*o))}}function mc(e){return[new sI(e.minX,e.minY),new sI(e.maxX,e.minY),new sI(e.maxX,e.maxY),new sI(e.minX,e.maxY)]}function Sc(e,t,n){const i=n.sub(t),o=i.len2();if(0===o)return e.dist(t);const r=e.sub(t),s=Math.max(0,Math.min(1,(r.x*i.x+r.y*i.y)/o));return e.dist(t.add(i.mul(s)))}function yc(e){return f(e)&&"geo"===e.type}function bc(e){return"string"==typeof e&&hk.includes(e)}function xc(e){return"string"==typeof e&&pk.includes(e)}function Ic(e,t){return"number"==typeof e&&Number.isFinite(e)?e:t}function wc(e,t){return e.x*t.y-e.y*t.x}function vc(e,t,n){const i=n.sub(t),o=i.len2();if(0===o)return e.dist(t);const r=e.sub(t),s=Math.max(0,Math.min(1,(r.x*i.x+r.y*i.y)/o));return e.dist(t.add(i.mul(s)))}function Pc(e,t,n,i){return kc(e,t,n,i)?0:Math.min(vc(e,n,i),vc(t,n,i),vc(n,e,t),vc(i,e,t))}function kc(e,t,n,i){const o=t.sub(e),r=i.sub(n),s=wc(o,r);if(Math.abs(s)<1e-8)return null;const a=n.sub(e),l=wc(a,r)/s,d=wc(a,o)/s;return l<0||l>1||d<0||d>1?null:{point:e.add(o.mul(l)),t:l}}function Cc(e,t,n){let i=null;for(let o=0;o<n.length;o+=1){const r=n[o],s=n[(o+1)%n.length]??n[0];if(!r||!s)continue;const a=kc(e,t,r,s);!a||a.t<=1e-6||(!i||a.t<i.t)&&(i=a)}return i?.point??null}function Tc(e){return cc(new aI(0,0,e.props.w,e.props.h),e.props.geo,{cornerRadiusPercent:e.props.cornerRadiusPercent})}function Mc(e){const t=new aI(0,0,e.props.w,e.props.h);return[new sI(t.minX,t.minY),new sI(t.center.x,t.minY),new sI(t.maxX,t.minY),new sI(t.minX,t.center.y),t.center,new sI(t.maxX,t.center.y),new sI(t.minX,t.maxY),new sI(t.center.x,t.maxY),new sI(t.maxX,t.maxY)].map((e,t)=>({point:e,kind:gk[t]??"custom"}))}function Ec(e,t){switch(e){case"dashed":return`${4*t} ${2*t}`;case"dotted":return"0 "+2*t;default:return}}function Ac(e){return Number.isFinite(e)?Number(e.toFixed(4)).toString():"0"}function Bc(e){return{id:`geo.set-${e}`,getAvailability:e=>"geo"!==e.selection.commonShapeType?"inapplicable":e.selection.count>0?"enabled":"disabled",getValue:t=>((e,t)=>{let n;for(const i of e){if("geo"!==i.type)continue;const e=i.props[t];if(void 0!==n){if(!("fill"===t||"stroke"===t?O(n,e):n===e))return null}else n=e}return n??null})(t.selection.selectedShapes,e),run({context:t,value:n}){const i=Oc(e,n);if(void 0===i)return;const o=t.selection.selectedShapes.filter(yc).filter(e=>!e.isLocked).map(t=>({id:t.id,props:{[e]:i}}));0!==o.length&&t.editor.commands.updateShapes(o,{source:"user"})}}}function Rc(e){return{id:`geo.default-${e}`,getAvailability:e=>Nc(e.tool.activeToolId)?"enabled":"inapplicable",getValue:t=>t.editor.getDefaultShapeProps("geo")[e],run({context:t,value:n}){const i=Oc(e,n);void 0!==i&&t.editor.updateDefaultShapeProps("geo",{[e]:i})}}}function Lc({fillActionId:e,strokeActionId:t,strokeStyleActionId:n,strokeWidthActionId:i,dataUiPrefix:o}){return[{id:`${o}.style-fill`,items:[{kind:"color-input",id:`${o}.fill`,actionId:e,label:"Fill",fallback:"#e2e8f0",presets:fk.map(e=>({...e,dataUi:`${o}-fill-${e.id}-button`})),dataUi:`${o}.fill`}]},{id:`${o}.style-stroke`,items:[{kind:"color-input",id:`${o}.stroke`,actionId:t,label:"Stroke",previewStyle:"outline",fallback:"#334155",presets:mk.map(e=>({...e,dataUi:`${o}-stroke-${e.id}-button`})),dataUi:`${o}.stroke`}]},{id:`${o}.stroke-style`,presentation:"overflow",items:[{kind:"segmented",id:`${o}.stroke-style`,actionId:n,options:Sk.map(e=>({...e,dataUi:`${o}-stroke-style-${e.value}-button`}))}]},{id:`${o}.style-stroke-width`,items:[{kind:"text-input",id:`${o}.stroke-width`,actionId:i,label:"Stroke width",placeholder:"2",suffix:"Px",validate:Dc,dataUi:`${o}-stroke-width-control`}]}]}function $c(e){let t=null;for(const n of e)if(yc(n))if(null!==t){if(t!==n.props.geo)return null}else t=n.props.geo;return t}function Fc(e){if("string"!=typeof e||0===e.trim().length)return null;const t=Number(e);return Number.isFinite(t)?t:null}function Uc(e){const t=Fc(e);return null!==t&&t>=0&&t<=50}function Dc(e){return void 0!==zc(e)}function Oc(e,t){return"strokeWidth"===e?zc(t):"strokeStyle"===e?xc(t)?t:void 0:R(t)?$(t,M("fill"===e?"fill-slate":"stroke-slate")):void 0}function zc(e){const t="number"==typeof e?e:"string"==typeof e&&e.trim().length>0?Number(e):NaN;return Number.isFinite(t)&&t>0?t:void 0}function Nc(e){return yk.some(t=>t.value===e)}function _c({shape:e,fill:t=e.props.fill,stroke:n=e.props.stroke,strokeStyle:i=e.props.strokeStyle,strokeWidth:o=e.props.strokeWidth}){const{geo:r}=e.props,s="none"===i?0:o,a=s/2,l=Math.max(e.props.w-s,0),d=Math.max(e.props.h-s,0),c=hc({cornerRadiusPercent:e.props.cornerRadiusPercent,w:l,h:d}),u="ellipse"===r||"rectangle"===r?null:pc(new aI(a,a,l,d),r).map(e=>`${e.x},${e.y}`).join(" "),h={fill:F(t),stroke:"none"===i?"none":F(n),strokeWidth:s,strokeDasharray:Ec(i,o),strokeLinejoin:"round",strokeLinecap:"round"};
26
- return Ax("svg",{width:"100%",height:"100%",viewBox:`0 0 ${e.props.w} ${e.props.h}`,style:{display:"block",overflow:"visible"},shapeRendering:"geometricPrecision",children:"ellipse"===r?Ax("ellipse",{...h,cx:e.props.w/2,cy:e.props.h/2,rx:l/2,ry:d/2}):"rectangle"!==r?Ax("polygon",{...h,points:u??""}):Ax("rect",{...h,x:a,y:a,width:l,height:d,rx:c,ry:c})})}function Wc(e,t={}){const n=new Set,i=new Set,o=[];for(const r of e){for(const e of r.groups){const s=Xc(t.dedupeActionIdsAcrossSources?e.items.filter(e=>!("actionId"in e&&n.has(e.actionId))):e.items);if(0===s.length)continue;const a=r.groupIdPrefix?`${r.groupIdPrefix}.${e.id}`:e.id;if(i.has(a))throw new Error(`Duplicate merged toolbar group id: ${a}.`);i.add(a),o.push({...e,id:a,items:s})}if(t.dedupeActionIdsAcrossSources)for(const e of r.groups)for(const t of e.items)"actionId"in t&&n.add(t.actionId)}return o}function Xc(e){const t=[];for(const n of e)("separator"!==n.kind||0!==t.length&&"separator"!==t.at(-1)?.kind)&&t.push(n);return"separator"===t.at(-1)?.kind&&t.pop(),t}function Hc(e){return e}function Kc({editor:e,getHostElement:t,imports:n}){return Ix(()=>{const i=i=>{if(!jc(t(),i)||e.shapeEditingStateSignal.get().session||Tr(i.target))return;const o=qc({source:"clipboard",dataTransfer:i.clipboardData});n.canImport(o)&&(i.preventDefault(),n.import(o,{editor:e}).catch(Zc))},o=i=>{!jc(t(),i)||e.shapeEditingStateSignal.get().session||Tr(i.target)||n.canImportPreview(Yc(i.dataTransfer))&&(i.preventDefault(),i.dataTransfer&&(i.dataTransfer.dropEffect="copy"))},r=i=>{const o=jc(t(),i);if(!o||e.shapeEditingStateSignal.get().session||Tr(i.target))return;const r=n.canImportPreview(Yc(i.dataTransfer)),s=qc({source:"drop",dataTransfer:i.dataTransfer,pagePoint:Er(e,i,o)});n.canImport(s)?(i.preventDefault(),n.import(s,{editor:e}).catch(Zc)):r&&(i.preventDefault(),i.dataTransfer&&(i.dataTransfer.dropEffect="none"))};return window.addEventListener("paste",i),window.addEventListener("dragover",o),window.addEventListener("drop",r),()=>{window.removeEventListener("paste",i),window.removeEventListener("dragover",o),window.removeEventListener("drop",r)}},[e,t,n]),null}function Yc(e){return e?{source:"drop",dataTypes:Array.from(e.types),fileTypes:Array.from(e.items).filter(e=>"file"===e.kind).map(e=>e.type).filter(Boolean)}:{source:"drop",dataTypes:[],fileTypes:[]}}function qc({dataTransfer:e,pagePoint:t,source:n}){const i=e?.getData("text/plain")||void 0,o=e?.getData("text/html")||void 0,r=[...(e?.getData("text/uri-list")||void 0)?.split(/\r?\n/).filter(e=>e&&!e.startsWith("#"))??[],...i&&Gc(i.trim())?[i.trim()]:[]];return{source:n,files:Vc(e),text:i,html:o,...r.length>0?{urls:r}:{},pagePoint:t}}function jc(e,t){if(!e)return null;const n=(t.target instanceof Element?t.target:document.activeElement)?.closest(xv);return n instanceof HTMLElement&&e.contains(n)?n:null}function Vc(e){if(!e)return[];const t=Array.from(e.files);return t.length>0?t:Array.from(e.items).flatMap(e=>{if("file"!==e.kind)return[];const t=e.getAsFile();return t?[t]:[]})}function Gc(e){try{const t=new URL(e);return"http:"===t.protocol||"https:"===t.protocol}catch{return e.startsWith("data:image/")}}function Zc(e){try{const t=globalThis.reportError;if("function"==typeof t)return void t(e)}catch(t){console.error(t)}console.error(e)}function Qc(e){return e.get(Bk)}async function Jc({context:e,services:t}){const n=Qc(t);if(!n)return null;const i=e.editor.createClipboardPayloadFromSelection();return i?(await n.write(i),i):null}async function eu({atMenuPoint:e=!1,context:t,services:n}){const i=Qc(n);if(!i)return;const o=await i.read();o&&t.editor.pasteClipboardPayload({payload:o,pagePoint:tu({atMenuPoint:e,context:t}),source:"user"})}function tu({atMenuPoint:e,context:t}){return e&&nu(t)?t.menu.anchor.pagePoint:t.editor.inputs.state.get().currentPagePoint??t.editor.viewportPageBoundsSignal.get()?.center??void 0}function nu(e){return"menu"in e}function iu({children:e}){const[t,n]=Tx(null),i=bx(e=>{n(e)},[]),o=kx(()=>({registerTarget:i,target:t}),[i,t]);
27
- return Ax(Dk.Provider,{value:o,children:e})}function ou(){const{registerTarget:e}=su();
28
- return Ax("div",{ref:e,className:"land-canvas__floating-portal-host","data-ui":"canvas-kit-floating-portal-host"})}function ru(){return su().target}function su(){const e=xx(Dk);if(!e)throw new Error("CanvasKit floating content must be rendered inside CanvasKitRoot.");return e}function au({children:e,className:t,dataUi:n="canvas-kit-floating-toolbar-layer"}){const i=ru();return i?Vx(Ax("div",{"data-ui":n,className:lu("land-canvas__floating-toolbar-layer",t),children:e}),i):null}function lu(...e){return e.filter(Boolean).join(" ")}function du(e){Ix(()=>{const t=e.current;if(!t)return;const n=e=>{(e=>e.scrollHeight>e.clientHeight)(t)||function(e,t){const n=(e=>{const t=e?.getRootNode();return t instanceof Document||t instanceof ShadowRoot?Mr(t):Mr()})(t);return!!n&&(n.dispatchEvent(new WheelEvent("wheel",{altKey:e.altKey,bubbles:!0,cancelable:!0,clientX:e.clientX,clientY:e.clientY,composed:!0,ctrlKey:e.ctrlKey,deltaMode:e.deltaMode,deltaX:e.deltaX,deltaY:e.deltaY,deltaZ:e.deltaZ,metaKey:e.metaKey,screenX:e.screenX,screenY:e.screenY,shiftKey:e.shiftKey,view:window})),!0)}(e,t)&&(e.preventDefault(),e.stopPropagation())};return t.addEventListener("wheel",n,{passive:!1}),()=>{t.removeEventListener("wheel",n)}},[e])}function cu(e,t,n){return zk(e,Ok(t,n))}function uu(e,t){return"function"==typeof e?e(t):e}function hu(e){return e.split("-")[0]}function pu(e){return e.split("-")[1]}function gu(e){return"x"===e?"y":"x"}function fu(e){return"y"===e?"height":"width"}function mu(e){const t=e[0];return"t"===t||"b"===t?"y":"x"}function Su(e){return gu(mu(e))}function yu(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}function bu(e){const t=hu(e);return Xk[t]+e.slice(t.length)}function xu(e){const{x:t,y:n,width:i,height:o}=e;return{width:i,height:o,top:n,left:t,right:t+i,bottom:n+o,x:t,y:n}}function Iu(e,t,n){let{reference:i,floating:o}=e;const r=mu(t),s=Su(t),a=fu(s),l=hu(t),d="y"===r,c=i.x+i.width/2-o.width/2,u=i.y+i.height/2-o.height/2,h=i[a]/2-o[a]/2;let p;switch(l){case"top":p={x:c,y:i.y-o.height};break;case"bottom":p={x:c,y:i.y+i.height};break;case"right":p={x:i.x+i.width,y:u};break;case"left":p={x:i.x-o.width,y:u};break;default:p={x:i.x,y:i.y}}switch(pu(t)){case"start":p[s]-=h*(n&&d?-1:1);break;case"end":p[s]+=h*(n&&d?-1:1)}return p}async function wu(e,t){var n;void 0===t&&(t={});const{x:i,y:o,platform:r,rects:s,elements:a,strategy:l}=e,{boundary:d="clippingAncestors",rootBoundary:c="viewport",elementContext:u="floating",altBoundary:h=!1,padding:p=0}=uu(t,e),g=(e=>"number"!=typeof e?(e=>({top:0,right:0,bottom:0,left:0,...e}))(e):{top:e,right:e,bottom:e,left:e})(p),f=a[h?"floating"===u?"reference":"floating":u],m=xu(await r.getClippingRect({element:null==(n=await(null==r.isElement?void 0:r.isElement(f)))||n?f:f.contextElement||await(null==r.getDocumentElement?void 0:r.getDocumentElement(a.floating)),boundary:d,rootBoundary:c,strategy:l})),S="floating"===u?{x:i,y:o,width:s.floating.width,height:s.floating.height}:s.reference,y=await(null==r.getOffsetParent?void 0:r.getOffsetParent(a.floating)),b=await(null==r.isElement?void 0:r.isElement(y))&&await(null==r.getScale?void 0:r.getScale(y))||{x:1,y:1},x=xu(r.convertOffsetParentRelativeRectToViewportRelativeRect?await r.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:S,offsetParent:y,strategy:l}):S);return{top:(m.top-x.top+g.top)/b.y,bottom:(x.bottom-m.bottom+g.bottom)/b.y,left:(m.left-x.left+g.left)/b.x,right:(x.right-m.right+g.right)/b.x}}function vu(){return"undefined"!=typeof window}function Pu(e){return Tu(e)?(e.nodeName||"").toLowerCase():"#document"}function ku(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function Cu(e){var t;return null==(t=(Tu(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function Tu(e){return!!vu()&&(e instanceof Node||e instanceof ku(e).Node)}function Mu(e){return!!vu()&&(e instanceof Element||e instanceof ku(e).Element)}function Eu(e){return!!vu()&&(e instanceof HTMLElement||e instanceof ku(e).HTMLElement)}function Au(e){return!(!vu()||"undefined"==typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof ku(e).ShadowRoot)}function Bu(e){const{overflow:t,overflowX:n,overflowY:i,display:o}=Du(e);return/auto|scroll|overlay|hidden|clip/.test(t+i+n)&&"inline"!==o&&"contents"!==o}function Ru(e){return/^(table|td|th)$/.test(Pu(e))}function Lu(e){try{if(e.matches(":popover-open"))return!0}catch(t){}try{return e.matches(":modal")}catch(t){return!1}}function $u(e){const t=Mu(e)?Du(e):e;return Zk(t.transform)||Zk(t.translate)||Zk(t.scale)||Zk(t.rotate)||Zk(t.perspective)||!Fu()&&(Zk(t.backdropFilter)||Zk(t.filter))||Vk.test(t.willChange||"")||Gk.test(t.contain||"")}function Fu(){return null==Gx&&(Gx="undefined"!=typeof CSS&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),Gx}function Uu(e){return/^(html|body|#document)$/.test(Pu(e))}function Du(e){return ku(e).getComputedStyle(e)}function Ou(e){return Mu(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function zu(e){if("html"===Pu(e))return e;const t=e.assignedSlot||e.parentNode||Au(e)&&e.host||Cu(e);return Au(t)?t.host:t}function Nu(e){const t=zu(e);return Uu(t)?e.ownerDocument?e.ownerDocument.body:e.body:Eu(t)&&Bu(t)?t:Nu(t)}function _u(e,t,n){var i;void 0===t&&(t=[]),void 0===n&&(n=!0);const o=Nu(e),r=o===(null==(i=e.ownerDocument)?void 0:i.body),s=ku(o);if(r){const e=Wu(s);return t.concat(s,s.visualViewport||[],Bu(o)?o:[],e&&n?_u(e):[])}return t.concat(o,_u(o,[],n))}function Wu(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Xu(e){const t=Du(e);let n=parseFloat(t.width)||0,i=parseFloat(t.height)||0;const o=Eu(e),r=o?e.offsetWidth:n,s=o?e.offsetHeight:i,a=Nk(n)!==r||Nk(i)!==s;return a&&(n=r,i=s),{width:n,height:i,$:a}}function Hu(e){return Mu(e)?e:e.contextElement}function Ku(e){const t=Hu(e);if(!Eu(t))return Wk(1);const n=t.getBoundingClientRect(),{width:i,height:o,$:r}=Xu(t);let s=(r?Nk(n.width):n.width)/i,a=(r?Nk(n.height):n.height)/o;return s&&Number.isFinite(s)||(s=1),a&&Number.isFinite(a)||(a=1),{x:s,y:a}}function Yu(e){const t=ku(e);return Fu()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:Qk}function qu(e,t,n,i){void 0===t&&(t=!1),void 0===n&&(n=!1);const o=e.getBoundingClientRect(),r=Hu(e);let s=Wk(1);t&&(i?Mu(i)&&(s=Ku(i)):s=Ku(e));const a=((e,t,n)=>(void 0===t&&(t=!1),!(!n||t&&n!==ku(e))&&t))(r,n,i)?Yu(r):Wk(0);let l=(o.left+a.x)/s.x,d=(o.top+a.y)/s.y,c=o.width/s.x,u=o.height/s.y;if(r){const e=ku(r),t=i&&Mu(i)?ku(i):i;let n=e,o=Wu(n);for(;o&&i&&t!==n;){const e=Ku(o),t=o.getBoundingClientRect(),i=Du(o),r=t.left+(o.clientLeft+parseFloat(i.paddingLeft))*e.x,s=t.top+(o.clientTop+parseFloat(i.paddingTop))*e.y;l*=e.x,d*=e.y,c*=e.x,u*=e.y,l+=r,d+=s,n=ku(o),o=Wu(n)}}return xu({width:c,height:u,x:l,y:d})}function ju(e,t){const n=Ou(e).scrollLeft;return t?t.left+n:qu(Cu(e)).left+n}function Vu(e,t){const n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-ju(e,n),y:n.top+t.scrollTop}}function Gu(e,t,n){let i;if("viewport"===t)i=((e,t)=>{const n=ku(e),i=Cu(e),o=n.visualViewport;let r=i.clientWidth,s=i.clientHeight,a=0,l=0;if(o){r=o.width,s=o.height;const e=Fu();(!e||e&&"fixed"===t)&&(a=o.offsetLeft,l=o.offsetTop)}const d=ju(i);if(d<=0){const e=i.ownerDocument,t=e.body,n=getComputedStyle(t),o="CSS1Compat"===e.compatMode&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,s=Math.abs(i.clientWidth-t.clientWidth-o);s<=25&&(r-=s)}else d<=25&&(r+=d);return{width:r,height:s,x:a,y:l}})(e,n);else if("document"===t)i=(e=>{const t=Cu(e),n=Ou(e),i=e.ownerDocument.body,o=zk(t.scrollWidth,t.clientWidth,i.scrollWidth,i.clientWidth),r=zk(t.scrollHeight,t.clientHeight,i.scrollHeight,i.clientHeight);let s=-n.scrollLeft+ju(e);const a=-n.scrollTop;return"rtl"===Du(i).direction&&(s+=zk(t.clientWidth,i.clientWidth)-o),{width:o,height:r,x:s,y:a}})(Cu(e));else if(Mu(t))i=((e,t)=>{const n=qu(e,!0,"fixed"===t),i=n.top+e.clientTop,o=n.left+e.clientLeft,r=Eu(e)?Ku(e):Wk(1);return{width:e.clientWidth*r.x,height:e.clientHeight*r.y,x:o*r.x,y:i*r.y}})(t,n);else{const n=Yu(e);i={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return xu(i)}function Zu(e,t){const n=zu(e);return!(n===t||!Mu(n)||Uu(n))&&("fixed"===Du(n).position||Zu(n,t))}function Qu(e,t){const n=t.get(e);if(n)return n;let i=_u(e,[],!1).filter(e=>Mu(e)&&"body"!==Pu(e)),o=null;const r="fixed"===Du(e).position;let s=r?zu(e):e;for(;Mu(s)&&!Uu(s);){const t=Du(s),n=$u(s);n||"fixed"!==t.position||(o=null),(r?!n&&!o:!n&&"static"===t.position&&o&&("absolute"===o.position||"fixed"===o.position)||Bu(s)&&!n&&Zu(e,s))?i=i.filter(e=>e!==s):o=t,s=zu(s)}return t.set(e,i),i}function Ju(e,t,n){function i(){d.x=ju(r)}const o=Eu(t),r=Cu(t),s="fixed"===n,a=qu(e,!0,s,t);let l={scrollLeft:0,scrollTop:0};const d=Wk(0);if(o||!o&&!s)if(("body"!==Pu(t)||Bu(r))&&(l=Ou(t)),o){const e=qu(t,!0,s,t);d.x=e.x+t.clientLeft,d.y=e.y+t.clientTop}else r&&i();s&&!o&&r&&i();const c=!r||o||s?Wk(0):Vu(r,l);return{x:a.left+l.scrollLeft-d.x-c.x,y:a.top+l.scrollTop-d.y-c.y,width:a.width,height:a.height}}function eh(e){return"static"===Du(e).position}function th(e,t){if(!Eu(e)||"fixed"===Du(e).position)return null;if(t)return t(e);let n=e.offsetParent;return Cu(e)===n&&(n=n.ownerDocument.body),n}function nh(e,t){const n=ku(e);if(Lu(e))return n;if(!Eu(e)){let t=zu(e);for(;t&&!Uu(t);){if(Mu(t)&&!eh(t))return t;t=zu(t)}return n}let i=th(e,t);for(;i&&Ru(i)&&eh(i);)i=th(i,t);return i&&Uu(i)&&eh(i)&&!$u(i)?n:i||(e=>{let t=zu(e);for(;Eu(t)&&!Uu(t);){if($u(t))return t;if(Lu(t))return null;t=zu(t)}return null})(e)||n}function ih(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function oh({editor:e,fallbackPlacements:t,floatingRef:n,getReferenceElement:i,offset:o,placement:r}){Ix(()=>{const s=i(),a=n.current;if(!s||!a)return;let l=!1,d=0;a.style.visibility="hidden";const c=()=>{const e=++d,n=rh("--toolbar-floating-shift-padding",8),i=o??rh("--toolbar-floating-offset",38),c={top:rh("--toolbar-floating-safe-top",64),right:n,bottom:n,left:n};((e,t,n)=>{const i={platform:Jk,...n},o={...i.platform,_c:new Map};return(async(e,t,n)=>{const{placement:i="bottom",strategy:o="absolute",middleware:r=[],platform:s}=n,a=s.detectOverflow?s:{...s,detectOverflow:wu},l=await(null==s.isRTL?void 0:s.isRTL(t));let d=await s.getElementRects({reference:e,floating:t,strategy:o}),{x:c,y:u}=Iu(d,i,l),h=i,p=0;const g={};for(let f=0;f<r.length;f++){const n=r[f];if(!n)continue;const{name:m,fn:S}=n,{x:y,y:b,data:x,reset:I}=await S({x:c,y:u,initialPlacement:i,placement:h,strategy:o,middlewareData:g,rects:d,platform:a,elements:{reference:e,floating:t}});c=null!=y?y:c,u=null!=b?b:u,g[m]={...g[m],...x},I&&p<50&&(p++,"object"==typeof I&&(I.placement&&(h=I.placement),I.rects&&(d=!0===I.rects?await s.getElementRects({reference:e,floating:t,strategy:o}):I.rects),({x:c,y:u}=Iu(d,h,l))),f=-1)}return{x:c,y:u,placement:h,strategy:o,middlewareData:g}})(e,t,{...i,platform:o})})(s,a,{strategy:"fixed",placement:r,middleware:[eC(i),nC({fallbackPlacements:[...t],padding:c}),tC({padding:c})]}).then(({placement:t,x:n,y:i})=>{l||e!==d||(a.dataset.placement=t,a.style.transform=`translate3d(${Math.round(n)}px, ${Math.round(i)}px, 0)`,a.style.visibility="visible")})},u=function(e,t,n,i){void 0===i&&(i={});const{ancestorScroll:o=!0,ancestorResize:r=!0,elementResize:s="function"==typeof ResizeObserver,layoutShift:a="function"==typeof IntersectionObserver,animationFrame:l=!1}=i,d=Hu(e),c=o||r?[...d?_u(d):[],...t?_u(t):[]]:[];c.forEach(e=>{o&&e.addEventListener("scroll",n,{passive:!0}),r&&e.addEventListener("resize",n)});const u=d&&a?((e,t)=>{function n(){var e;clearTimeout(i),null==(e=o)||e.disconnect(),o=null}let i,o=null;const r=Cu(e);return function s(a,l){function d(t){const n=t[0].intersectionRatio;if(n!==l){if(!m)return s();n?s(!1,n):i=setTimeout(()=>{s(!1,1e-7)},1e3)}1!==n||ih(c,e.getBoundingClientRect())||s(),m=!1}void 0===a&&(a=!1),void 0===l&&(l=1),n();const c=e.getBoundingClientRect(),{left:u,top:h,width:p,height:g}=c;if(a||t(),!p||!g)return;const f={rootMargin:-_k(h)+"px "+-_k(r.clientWidth-(u+p))+"px "+-_k(r.clientHeight-(h+g))+"px "+-_k(u)+"px",threshold:zk(0,Ok(1,l))||1};let m=!0;try{o=new IntersectionObserver(d,{...f,root:r.ownerDocument})}catch(S){o=new IntersectionObserver(d,f)}o.observe(e)}(!0),n})(d,n):null;let h,p=-1,g=null;s&&(g=new ResizeObserver(e=>{let[i]=e;i&&i.target===d&&g&&t&&(g.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var e;null==(e=g)||e.observe(t)})),n()}),d&&!l&&g.observe(d),t&&g.observe(t));let f=l?qu(e):null;return l&&function t(){const i=qu(e);f&&!ih(f,i)&&n(),f=i,h=requestAnimationFrame(t)}(),n(),()=>{var e;c.forEach(e=>{o&&e.removeEventListener("scroll",n),r&&e.removeEventListener("resize",n)}),u?.(),null==(e=g)||e.disconnect(),g=null,l&&cancelAnimationFrame(h)}}(s,a,c,{ancestorResize:!0,ancestorScroll:!0,elementResize:!0,layoutShift:!0}),h=qo("CanvasKitFloatingPosition.pageTransform",e.pageTransformSignal,c,{fireImmediately:!1});return c(),()=>{l=!0,a.style.visibility="hidden",u(),h()}},[e,t,n,i,o,r])}function rh(e,t){if("undefined"==typeof document)return t;const n=getComputedStyle(document.documentElement).getPropertyValue(e).trim();if(!n)return t;const i=Number.parseFloat(n);return Number.isFinite(i)?n.endsWith("rem")?16*i:i:t}function sh({children:e,className:t,context:n,dataUi:i="floating-selection-toolbar-slot",horizontalAlign:o="start",offset:r,visible:s=!0}){return s?Ax(ah,{editor:n.editor,className:t,dataUi:i,offset:r,horizontalAlign:o,children:e}):null}function ah({children:e,className:t,dataUi:n,editor:i,horizontalAlign:o,offset:r}){return Qo(i.selectionTranslationActiveSignal)?null:Ax(lh,{className:t,dataUi:n,editor:i,horizontalAlign:o,offset:r,children:e})}function lh({children:e,className:t,dataUi:n,editor:i,horizontalAlign:o,offset:r}){const s=Qo(i.queries.selectionPageBoundsSignal);return s?Ax(dh,{anchor:{x:s.minX,y:s.minY,width:s.w,height:s.h},className:t,dataUi:n,editor:i,horizontalAlign:o,offset:r,children:e}):null}function dh({anchor:e,children:t,className:n,dataUi:i,editor:o,horizontalAlign:r,offset:s}){const a=Cx(null),l=Cx(null);du(l);const d=bx(()=>a.current,[e.height,e.width,e.x,e.y]);return oh({editor:o,fallbackPlacements:"center"===r?oC:iC,floatingRef:l,getReferenceElement:d,offset:s,placement:"center"===r?"top":"top-start"}),Bx(Ex,{children:[Ax(Jo,{dataUi:`${i}-page-space`,className:"land-canvas__floating-selection-page-space",children:Ax("div",{ref:a,"aria-hidden":"true",style:{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,pointerEvents:"none"}})}),Ax("div",{ref:l,"data-ui":i,className:ch("land-canvas__floating-selection-anchor",n),style:{position:"fixed",left:0,top:0,visibility:"hidden",willChange:"transform"},children:t})]})}function ch(...e){return e.filter(Boolean).join(" ")}function uh({presenter:e}){function t({children:t}){
29
- return Ax(Ea,{presenter:e,children:t})}return{id:"canvas-kit.text",requires:[PP],setup(e){e.get(Ck).addProviders({id:"canvas-kit.text-link-popover-presenter",component:t})}}}function hh(e){return t=>Ax(ph,{...t,icons:e})}function ph({icons:e,...t}){const n=ru();return n?Vx(Ax(gh,{...t,icons:e}),n):null}function gh({icons:e,...t}){const{anchorElement:n,href:i,onOpen:o,onPopoverPointerEnter:r,onPopoverPointerLeave:s}=t,a=Zo(),l=Cx(null),d=bx(()=>n,[n]);return du(l),oh({editor:a,fallbackPlacements:rC,floatingRef:l,getReferenceElement:d,offset:8,placement:"top"}),Bx("div",{ref:l,"aria-label":"Link preview",className:"land-canvas-kit__text-link-popover","data-ui":"rich-text-link-popover",role:"toolbar",onPointerEnter:r,onPointerLeave:s,onPointerDown:e=>{e.stopPropagation()},onClick:e=>{e.stopPropagation()},children:[Ax("button",{"aria-label":"Open link",className:"land-canvas-kit__text-link-popover-icon-button",title:"Open link",type:"button",onClick:o,children:e.open}),Ax("button",{"aria-label":`Open ${i}`,className:"land-canvas-kit__text-link-popover-link",title:i,type:"button",onClick:o,children:i})]})}function fh(e,t={}){const n=t.enabled??!0,i=t.pageId,o=bx(t=>n?e.subscribe(t):()=>{},[n,e]),r=bx(()=>n?e.getSnapshot(i):sC,[n,i,e]);return Mx(o,r,r)}function mh({childIds:e,depth:t,editor:n,index:i,pageId:o,shape:r}){return{id:r.id,parentId:r.parentId,pageId:o,type:r.type,childIds:e,siblingIndex:i,depth:t,canReceiveChildren:n.canUseShapeParent(r.id),isHidden:r.isHidden,isLocked:r.isLocked,isEffectivelyHidden:n.isShapeHidden(r.id),isEffectivelyLocked:n.isShapeOrAncestorLocked(r.id)}}function Sh(e,t){let n=0,i=e.getShape(t);const o=new Set([t]);for(;i?.parentId.startsWith("shape:");){const t=i.parentId;if(o.has(t))break;o.add(t),i=e.getShape(t),n+=1}return n}function yh(e){return{id:e.id,name:e.name,index:e.index,meta:{...e.meta}}}function bh(e){const t=e.getDocumentMetadataRecord();return{id:t?.id??"document:main",meta:{...t?.meta??{}}}}function xh(e,t){return{id:t.id,type:t.type,parentId:t.parentId,pageId:e.getShapePageId(t.id),index:t.index,x:t.x,y:t.y,rotation:t.rotation,skewX:t.skewX,scaleX:t.scaleX,scaleY:t.scaleY,opacity:t.opacity,isHidden:t.isHidden,isLocked:t.isLocked,props:{...t.props},meta:{...t.meta}}}function Ih(e){return{id:e.id,x:e.x,y:e.y,rotation:e.rotation,skewX:e.skewX,scaleX:e.scaleX,scaleY:e.scaleY,opacity:e.opacity,isHidden:e.isHidden,isLocked:e.isLocked,parentId:e.parentId,index:e.index,props:e.props?{...e.props}:void 0,meta:void 0===e.meta?void 0:{...e.meta}}}function wh(e,t){const n=e.sessionSignal.get(),i=n.activeToolId;t.assertToolId(i);const o=i,r=e.getPages().map(t=>({pageId:t.id,selectedShapeIds:[...e.getSelectedShapeIds(t.id)],camera:{...e.getCamera(t.id)}}));return{currentPageId:n.currentPageId,activeToolId:o,isToolLocked:n.isToolLocked,meta:{...n.meta},pages:r}}function vh(e,t){const n=e.getActiveToolId();t.assertToolId(n);const i=n;return{productId:t.productId,document:bh(e),pageId:e.getCurrentPageId(),activeToolId:i,selectedShapeIds:[...e.getSelectedShapeIds()],shapeCount:e.getCurrentPageShapeIds().length,session:wh(e,t)}}function Ph(e){return{...e,selectedShapeIds:[...e.selectedShapeIds],session:{...e.session,meta:{...e.session.meta},pages:e.session.pages.map(e=>({...e,selectedShapeIds:[...e.selectedShapeIds],camera:{...e.camera}}))},document:{...e.document,meta:{...e.document.meta}}}}function kh(e){return{...e,meta:{...e.meta}}}function Ch(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}function Th(e,t){return e.x===t.x&&e.y===t.y&&e.z===t.z}function Mh(e,t){e.includes(t)||e.push(t)}function Eh(e,t){return e.added.some(e=>e.scope===t)||e.updated.some(e=>e.before.scope===t||e.after.scope===t)||e.removed.some(e=>e.scope===t)}function Ah(e){const t=globalThis.reportError;"function"!=typeof t?console.error(e):t(e)}function Bh(e){return{added:e.diff.added.filter(e=>"shape"===e.typeName).map(e=>e.id),updated:e.diff.updated.filter(e=>"shape"===e.after.typeName).map(e=>e.after.id),removed:e.diff.removed.filter(e=>"shape"===e.typeName).map(e=>e.id)}}function Rh(e){const{apis:t,editor:n}=e;return{apis:t,snapshot:()=>vh(n,e),subscribe(t,i){let o=Ph(vh(n,e));if("committed"===i?.delivery)return n.operations.subscribe(n=>{const i=function(e,t){const n=e.snapshot.records,i=e.sessionSnapshot.records[0];if(!i)throw new Error("Editor commit is missing its session snapshot.");const o=i.activeToolId;t.assertToolId(o);const r=o,s=n.filter(e=>"page"===e.typeName).sort((e,t)=>e.index.localeCompare(t.index)),a=n.filter(e=>"shape"===e.typeName),l=new Map(a.map(e=>[e.id,e])),d=new Set(s.map(e=>e.id)),c=i.currentPageId,u=[...i.pageSelectedShapeIdsById[c]??[]],h=n.find(e=>"document"===e.typeName);return{productId:t.productId,document:{id:h?.id??"document:main",meta:{...h?.meta??{}}},pageId:c,activeToolId:r,selectedShapeIds:u,shapeCount:a.filter(e=>((e,t,n)=>{const i=new Set([e.id]);let o=e.parentId;for(;o.startsWith("shape:");){const e=o;if(i.has(e))return null;i.add(e);const n=t.get(e);if(!n)return null;o=n.parentId}return n.has(o)?o:null})(e,l,d)===c).length,session:{currentPageId:c,activeToolId:r,isToolLocked:i.isToolLocked,meta:{...i.meta},pages:s.map(e=>({pageId:e.id,selectedShapeIds:[...i.pageSelectedShapeIdsById[e.id]??[]],camera:{...i.pageCameraById[e.id]??pI}}))}}}(n,e),r=["document"];i.shapeCount!==o.shapeCount&&r.push("shapeCount"),o=Ph(i);try{t({delivery:"committed",source:n.source,commit:{id:n.id,revision:n.revision,kind:n.kind,label:n.label},changes:r,affectedShapeIds:Bh(n),snapshot:i})}catch(s){Ah(s)}});const r=i?.scope??"all";return n.listen(i=>{const s=Eh(i.diff,"document"),a=Eh(i.diff,"session");if(!s&&!a||"document"===r&&!s||"session"===r&&!a)return;const l=a?vh(n,e):((e,t,n,{hasDocumentMetadataChange:i})=>{return{productId:n.productId,document:i?bh(e):kh(t.document),pageId:t.pageId,activeToolId:t.activeToolId,selectedShapeIds:[...t.selectedShapeIds],shapeCount:e.getCurrentPageShapeIds().length,session:(o=t.session,{...o,meta:{...o.meta},pages:o.pages.map(e=>({...e,selectedShapeIds:[...e.selectedShapeIds],camera:{...e.camera}}))})};var o})(n,o,e,{hasDocumentMetadataChange:(d=i.diff,d.added.some(e=>"document"===e.typeName)||d.updated.some(e=>"document"===e.before.typeName||"document"===e.after.typeName)||d.removed.some(e=>"document"===e.typeName))});var d;let c=((e,t)=>{const n=[];return e.pageId!==t.pageId&&n.push("pageId"),e.activeToolId!==t.activeToolId&&n.push("activeToolId"),Ch(e.selectedShapeIds,t.selectedShapeIds)||n.push("selectedShapeIds"),e.shapeCount!==t.shapeCount&&n.push("shapeCount"),function(e,t){if(e.currentPageId!==t.currentPageId||e.activeToolId!==t.activeToolId||e.isToolLocked!==t.isToolLocked||!((e,t)=>{const n=Object.keys(e),i=Object.keys(t);return n.length===i.length&&n.every(n=>Object.prototype.hasOwnProperty.call(t,n)&&Object.is(e[n],t[n]))})(e.meta,t.meta)||e.pages.length!==t.pages.length)return!1;for(let n=0;n<e.pages.length;n+=1){const i=e.pages[n],o=t.pages[n];if(i.pageId!==o.pageId||!Ch(i.selectedShapeIds,o.selectedShapeIds)||!Th(i.camera,o.camera))return!1}return!0}(e.session,t.session)||n.push("session"),n})(o,l);if(s&&Mh(c,"document"),a&&Mh(c,"session"),c=((e,t)=>"all"===t?e:e.filter("document"===t?e=>"document"===e||"shapeCount"===e:e=>"document"!==e))(c,r),0===c.length)return void(o=Ph(l));const u=o;o=Ph(l);try{t({delivery:"realtime",source:i.source,changes:c,snapshot:l,previousSnapshot:u})}catch(h){Ah(h)}})},clearHistory(){n.history.clear()},canUndo:()=>n.historyStateSignal.get().canUndo,canRedo:()=>n.historyStateSignal.get().canRedo,undo:()=>n.undo(),redo:()=>n.redo(),getDocument:()=>bh(n),updateDocumentMeta:e=>(n.updateDocumentMeta(e,"user"),bh(n)),updateSessionMeta(t){const i=n.getSessionRecord();return n.updateSession({meta:{...i.meta,...t}},"user"),wh(n,e)},select(e){n.commands.setSelectedShapeIds(e,{source:"user"})},selectAll(){n.selectAllCurrentPage("user")},deleteSelection(){n.deleteSelection("user")},deleteShapes(e){n.deleteShapesById(e,"user")},getAsset(e){const t=n.getAsset(e);return t?(e=>({id:e.id,type:e.type,props:{...e.props},meta:{...e.meta}}))(t):null},resolveAssetUrl:e=>n.resolveAssetUrl(e),getShape(e){const t=n.getShape(e);return t?xh(n,t):null},getShapes:e=>(e?e.map(e=>n.getShape(e)).filter(e=>!!e):n.getPages().flatMap(e=>n.getShapesForPage(e.id))).map(e=>xh(n,e)),updateShapes(e){const t=e.filter(e=>{const t=n.getShape(e.id);return!!t&&function(e,t){return!(!t.props&&void 0===t.meta)||(t.x??e.x)!==e.x||(t.y??e.y)!==e.y||(t.rotation??e.rotation)!==e.rotation||(t.skewX??e.skewX)!==e.skewX||(t.scaleX??e.scaleX)!==e.scaleX||(t.scaleY??e.scaleY)!==e.scaleY||(void 0===t.opacity?e.opacity:(i=e.opacity,"number"==typeof(n=t.opacity)&&Number.isFinite(n)?Math.min(1,Math.max(0,n)):i))!==e.opacity||(t.isHidden??e.isHidden)!==e.isHidden||(t.isLocked??e.isLocked)!==e.isLocked||(t.parentId??e.parentId)!==e.parentId||(t.index??e.index)!==e.index;var n,i}(t,e)}).map(Ih);return 0===t.length?[]:(n.commands.updateShapes(t,{source:"user"}),t.map(e=>e.id))},updateShapeMeta(e,t){const i=n.getShape(e);return i?(n.commands.updateShapes([{id:e,meta:{...i.meta,...t}}],{source:"user"}),e):null},duplicateSelection:()=>n.duplicateSelection(),centerOnShape(e){const t=n.getShapePageId(e);if(!t)return!1;t!==n.getCurrentPageId()&&n.commands.setCurrentPageId(t,{source:"user"});const i=n.getShapeSubtreePageBounds(e);if(!i)return!1;const o=n.viewportScreenSizeSignal.get();if(o.w<=0||o.h<=0)return!1;const r=n.getCurrentCamera();return n.commands.setCamera({pageId:t,camera:{x:i.center.x-o.w/(2*r.z),y:i.center.y-o.h/(2*r.z),z:r.z}},{source:"user"}),!0},getLayerTree:e=>(({editor:e,pageId:t=e.getCurrentPageId()})=>{const n=[],i=(o,r)=>{e.getChildShapes(o).forEach((o,s)=>{const a=e.getChildShapeIds(o.id);n.push(mh({childIds:a,depth:r,editor:e,index:s,pageId:t,shape:o})),i(o.id,r+1)})};return i(t,0),n})({editor:n,pageId:e??n.getCurrentPageId()}),getLayerNode:e=>(({editor:e,id:t})=>{const n=e.getShape(t),i=n?e.getShapePageId(n.id):null;if(!n||!i)return null;const o=e.getChildShapeIds(n.parentId);return mh({childIds:e.getChildShapeIds(n.id),depth:Sh(e,n.id),editor:e,index:o.indexOf(n.id),pageId:i,shape:n})})({editor:n,id:e}),setShapesHidden:(e,t)=>n.setShapesHidden(e,t,"user"),setShapesLocked:(e,t)=>n.setShapesLocked(e,t,"user"),groupShapes:e=>n.groupShapes(e,"user")?.id??null,ungroupShapes:e=>n.ungroupShapes(e,"user"),moveShapesInParentOrder:(e,t)=>n.moveShapesInParentOrder(e,t,"user"),moveShapesToParentOrderEdge:(e,t)=>n.moveShapesToParentOrderEdge(e,t,"user"),moveShapesToLayerPlacement:(e,t)=>n.moveShapesToParentPlacementResult({ids:e,parentId:t.parentId,beforeId:t.beforeId},"user"),getLayerActionState:e=>({canGroup:n.canGroupShapes(e),canUngroup:n.canUngroupShapes(e),canMoveBackward:n.canMoveShapesInParentOrder(e,"backward"),canMoveForward:n.canMoveShapesInParentOrder(e,"forward")}),setTool(e){if(!n.tools.hasTool(e))throw new Error(`Unknown product tool "${e}".`);n.setActiveTool(e,"user")},setCamera(e,t){n.commands.setCamera({pageId:t,camera:e},{source:"user"})},resetView(){n.commands.setCamera({camera:{x:0,y:0,z:1}},{source:"user"})},getPages:()=>n.getPages().map(yh),createPage:e=>yh(n.createPageAndSelect(e?{name:e.name,meta:e.meta?{...e.meta}:void 0}:void 0,"user")),renamePage(e,t){n.renamePage(e,t,"user")},updatePageMeta:(e,t)=>n.updatePageMeta(e,t,"user")?.id??null,deletePage:e=>n.deletePage(e,"user"),selectPage(e){n.selectPage(e,"user")}}}function Lh(e){if(!(e=>lC.has(e))(e)){if("geo"===e)throw new Error(`Unknown canvas kit tool "${e}". "geo" is a shape type, not a tool id. Use one of the geo tool ids such as "rectangle", "ellipse", or "triangle". Available tool ids: ${dC}.`);throw new Error(`Unknown canvas kit tool "${e}". Available tool ids: ${dC}.`)}}function $h(e){return Fh({...e,assertToolId:e.assertToolId??Lh})}function Fh(e){return{...Rh(e)}}function Uh({editor:e,toolState:t,selectionState:n}){return{editor:e,selection:{selectedShapeIds:e.getSelectedShapeIds(),selectedShapes:e.getSelectedShapes(),count:n.count,singleShapeType:n.singleShapeType,commonShapeType:n.commonShapeType,canFlip:n.canFlipSelection,canResetRotation:n.canResetSelectionRotation,isMixedFrameAndPointHandleSelection:n.isMixedFrameAndPointHandleSelection},tool:{activeToolId:t.activeToolId,isToolLocked:t.isToolLocked}}}function Dh(e,t){const n=bx(n=>t?qo("useOptionalValue",e,n,{fireImmediately:!1}):()=>{},[t,e]),i=bx(()=>t?e.get():null,[t,e]);return Mx(n,i,i)}function Oh(e){return new Promise((t,n)=>{const i=new FileReader;i.addEventListener("load",()=>{t("string"==typeof i.result?i.result:null)}),i.addEventListener("error",()=>{n(i.error)}),i.readAsDataURL(e)})}async function zh({assetInliners:e=[],editor:t,padding:n=16,resolveThemeColor:i,shapeIds:o}){const r=t.repairExportIntegrity(o),s=t.getShapeCapabilityManifest();let a,l=t.getExportIntegrityReport(o);try{a=await(async({assetInliners:e,editor:t,padding:n,resolveThemeColor:i,shapeIds:o})=>{for(let s=0;s<3;s+=1){const s=t.store.recordsSignal.get();try{for(const n of e)await(n.prepare?.({editor:t,requestedShapeIds:o}))}catch(r){if(t.store.recordsSignal.get()!==s)continue;throw r}if(t.store.recordsSignal.get()!==s)continue;const a=t.getSvgString(o,{padding:n,resolveThemeColor:i}),l=a?.exportedShapeIds.flatMap(e=>{const n=t.getShape(e);return n?[n]:[]})??[];if(t.store.recordsSignal.get()===s)return{exportedShapes:l,result:a}}throw new Error("The document changed repeatedly during SVG export.")})({assetInliners:e,editor:t,padding:n,resolveThemeColor:i,shapeIds:o})}catch(p){return l=t.getExportIntegrityReport(o),Nh({capabilityManifest:s,cause:p,integrity:l})}l=t.getExportIntegrityReport(o);const d=(({capabilityManifest:e,integrity:t})=>{const n=(e=>{const t=Object.entries(e).filter(e=>"number"==typeof e[1]);return 0===t.length?"none":t.map(([e,t])=>`${e} ${t}`).join(", ")})((e=>{const t={};for(const n of e.issues)t[n.kind]=(t[n.kind]??0)+1;return t})(t));return 0===t.fatalIssueCount&&0===t.issues.length?{tone:"success",title:"SVG export ready",details:`${t.requestedShapeIds.length} shape(s) ready. Issues: ${n}.`,integrity:t,capabilityManifest:e}:t.canExport?{tone:"warning",title:"SVG export repaired",details:`${t.requestedShapeIds.length} shape(s) exportable. Issues: ${n}.`,integrity:t,capabilityManifest:e}:{tone:"error",title:"SVG export blocked",details:`Fatal export issue(s): ${n}.`,integrity:t,capabilityManifest:e}})({capabilityManifest:s,integrity:l});(r.before.issues.length>0||l.issues.length>0)&&console.warn("SVG export integrity report",{before:r.before,after:r.after,final:l});const{exportedShapes:c,result:u}=a;if(!u)return{status:{...d,tone:"error",title:"SVG export blocked",details:`${d.details} No exportable SVG content was produced.`},svg:null,width:null,height:null,exportedShapeIds:[],skippedShapes:[]};u.skippedShapes.length>0&&console.warn("Skipped shapes during SVG export",u.skippedShapes);let h=u.svg;try{for(const n of e)h=await n.inline({editor:t,exportedShapes:c,exportedShapeIds:u.exportedShapeIds,svg:h});(e=>{const t=new Set,n=/\burl\(\s*(["']?)(.*?)\1\s*\)/giu,i=Array.from(e.matchAll(/<([a-z][\w:-]*)\b([^>]*)>/giu));for(const r of i){const e=_h(r[1]??""),n=Xh(r[2]??"");for(const i of Wh(e)){const e=n.get(i)?.trim();if(!e)continue;const o="srcset"===i?Hh(e):[e];for(const n of o)Kh(n)||t.add(n)}}const o=[...i.map(e=>e[0]),...Array.from(e.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/giu),e=>e[1]??"")];for(const r of o){for(const e of r.matchAll(n)){const n=e[2]?.trim();n&&!Kh(n)&&t.add(n)}/@import\b/iu.test(r)&&t.add("CSS @import"),/\blocal\(/iu.test(r)&&t.add("CSS local() font source")}if(t.size>0)throw new Error(`${t.size} external SVG resource(s) remain after embedding.`)})(h)}catch(p){return Nh({capabilityManifest:s,cause:p,exportedShapeIds:u.exportedShapeIds,integrity:l,skippedShapes:u.skippedShapes})}return{status:d,svg:h,width:u.width,height:u.height,exportedShapeIds:u.exportedShapeIds,skippedShapes:u.skippedShapes}}function Nh({capabilityManifest:e,cause:t,exportedShapeIds:n=[],integrity:i,skippedShapes:o=[]}){const r=t instanceof Error&&t.message.trim().length>0?t.message:"An SVG resource could not be embedded.";return console.warn("SVG resource embedding failed",t),{status:{tone:"error",title:"SVG export blocked",details:`Resource embedding failed: ${r}`,integrity:i,capabilityManifest:e},svg:null,width:null,height:null,exportedShapeIds:n,skippedShapes:o}}function _h(e){return(e.split(":").pop()??e).toLowerCase()}function Wh(e){const t=cC[e]??[];return hC.has(e)?t:[...uC,...t]}function Xh(e){const t=new Map;for(const n of e.matchAll(/([^\s=/>]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+))/gu)){const e=n[1]?.toLowerCase(),i=n[2]??n[3]??n[4];e&&void 0!==i&&t.set(e,i)}return t}function Hh(e){const t=[];let n=0;for(;n<e.length;){for(;n<e.length&&(","===e[n]||/\s/u.test(e[n]??""));)n+=1;if(n>=e.length)break;const i="data:"===e.slice(n,n+5).toLowerCase(),o=n;for(;n<e.length&&!/\s/u.test(e[n]??"")&&(i||","!==e[n]);)n+=1;let r=e.slice(o,n);const s=i&&r.endsWith(",");if(s&&(r=r.replace(/,+$/u,"")),r&&t.push(r),!s)for(;n<e.length&&","!==e[n];)n+=1}return t}function Kh(e){return e.startsWith("#")||/^data:/iu.test(e)}function Yh(e){return new Promise((t,n)=>{e.toBlob(e=>{e?t(e):n(new Error("The browser did not produce a PNG blob."))},"image/png")})}function qh(e,t){return{...e,title:"success"===e.tone?"PNG export ready":"warning"===e.tone?"PNG export repaired":"PNG export blocked",details:t?`${e.details} ${t}`:e.details}}function jh({editor:e,exportRegistry:t}){let n=!1;const i=i=>(async()=>{if(n)throw new Error("An export is already in progress.");n=!0;try{return await t.export(i.format,{editor:e,shapeIds:Gh(e,i),options:i.options})}finally{n=!1}})();return{getFormats:()=>t.getFormats(),export:i,exportPng:async e=>(await i({...Vh(e),format:"png",options:e})).result,exportSvg:async e=>(await i({...Vh(e),format:"svg",options:e})).result}}function Vh(e){return e.scope?{scope:e.scope}:{shapeIds:e.shapeIds}}function Gh(e,t){if("selection"===t.scope)return e.getSelectedShapeIds();if("page"===t.scope)return e.getCurrentPageShapeIds();if(!t.shapeIds)throw new Error("Canvas export requires a scope or shapeIds.");return t.shapeIds}function Zh({svgAssetInliners:e}){return{id:"canvas-kit.export",provides:[fC],setup(t){t.get(mP).add((({assetInliners:e})=>({id:"canvas-kit.export.svg",format:"svg",label:"SVG",mimeType:"image/svg+xml;charset=utf-8",fileExtension:"svg",async export({editor:t,options:n,shapeIds:i}){const o=n??{},r=await zh({assetInliners:e,editor:t,padding:o.padding,resolveThemeColor:o.appearance?.resolveThemeColor,shapeIds:i});return{data:r.svg,result:r,status:r.status}}}))({assetInliners:e}),(({assetInliners:e})=>({id:"canvas-kit.export.png",format:"png",label:"PNG",mimeType:"image/png",fileExtension:"png",async export({editor:t,options:n,shapeIds:i}){const o=n??{},r=await async function({background:e,pixelRatio:t=2,...n}){const i=await zh(n);if(!i.svg||null===i.width||null===i.height)return{status:"error"===i.status.tone?qh(i.status):{...i.status,tone:"error",title:"PNG export blocked",details:`${i.status.details} No exportable SVG content was produced.`},blob:null,width:null,height:null,exportedShapeIds:i.exportedShapeIds,skippedShapes:i.skippedShapes};try{const n=await(async({background:e,height:t,pixelRatio:n,svg:i,width:o})=>{const r=Math.ceil(o*n),s=Math.ceil(t*n);if((({height:e,pixelRatio:t,sourceHeight:n,sourceWidth:i,width:o})=>{if(!Number.isFinite(t)||t<=0||!Number.isFinite(i)||i<=0||!Number.isFinite(n)||n<=0)throw new Error("PNG dimensions and pixel ratio must be positive numbers.");if(o>pC||e>pC||o*e>gC)throw new Error(`PNG dimensions ${o}×${e} exceed the browser export limit.`)})({height:s,pixelRatio:n,sourceHeight:t,sourceWidth:o,width:r}),"undefined"==typeof document||"undefined"==typeof Image||"undefined"==typeof FileReader)throw new Error("PNG export requires a browser environment.");const a=await Oh(new Blob([i],{type:"image/svg+xml;charset=utf-8"}));if(!a)throw new Error("The exported SVG could not be encoded as a data URL.");const l=await(c=a,new Promise((e,t)=>{const n=new Image;n.onload=()=>e(n),n.onerror=()=>t(new Error("The exported SVG could not be decoded.")),n.src=c})),d=document.createElement("canvas");var c;d.width=r,d.height=s;const u=d.getContext("2d");if(!u)throw new Error("A 2D canvas context is unavailable.");return e&&(u.fillStyle=e,u.fillRect(0,0,r,s)),u.drawImage(l,0,0,r,s),{blob:await Yh(d),width:r,height:s}})({background:e,height:i.height,pixelRatio:t,svg:i.svg,width:i.width});return{status:qh(i.status,`${n.width}×${n.height} px.`),blob:n.blob,width:n.width,height:n.height,exportedShapeIds:i.exportedShapeIds,skippedShapes:i.skippedShapes}}catch(o){console.warn("PNG rasterization failed",o);const e=o instanceof Error&&o.message.trim().length>0?o.message:"The SVG could not be rasterized.";return{status:{...i.status,tone:"error",title:"PNG export blocked",details:`Rasterization failed: ${e}`},blob:null,width:null,height:null,exportedShapeIds:i.exportedShapeIds,skippedShapes:i.skippedShapes}}}({assetInliners:e,background:o.background,editor:t,padding:o.padding,pixelRatio:o.pixelRatio,resolveThemeColor:o.appearance?.resolveThemeColor,shapeIds:i});return{data:r.blob,result:r,status:r.status}}}))({assetInliners:e})),t.get(yP).add({token:fC,create:({editor:e,exportRegistry:t})=>jh({editor:e,exportRegistry:t})})}}}function Qh({controller:e,activeContextMenu:t,grid:n,onActiveContextMenuChange:i,actionRegistry:o,canShowPropertiesDuringEditing:r,chromeRegistry:s,contextMenuRegistry:a,editor:l,executeCommand:d,toolbarRegistry:c}){const u=Qo(l.currentPageIdSignal),h=Qo(l.currentPageShapeIdsSignal),p=Qo(l.sessionSignal).meta,g=Qo(l.selectedShapeIdsSignal),f=Qo(l.selectionMetadataSignal),m=(({editor:e,executeCommand:t})=>{const n=Qo(e.historyStateSignal);return{canUndo:n.canUndo,canRedo:n.canRedo,undo(){t({commandId:"history.undo",run(){e.undo()}})},redo(){t({commandId:"history.redo",run(){e.redo()}})}}})({editor:l,executeCommand:d}),S=(({editor:e,executeCommand:t})=>{const n=Qo(e.pageStateSignal);return{pages:n.pages,currentPage:n.currentPage,currentPageId:n.currentPageId,canDeleteCurrentPage:n.canDeleteCurrentPage,createPage(){t({commandId:"page.create",run(){e.createPageAndSelect(void 0,"user")}})},deleteCurrentPage(){if(!n.currentPage)return;const i=n.currentPage.id;t({commandId:"page.delete-current",run(){e.deletePage(i,"user")}})},renameCurrentPage(i){if(!n.currentPage)return;const o=n.currentPage.id;t({commandId:"page.rename-current",run(){e.renamePage(o,i,"user")}})},selectPage(n){t({commandId:"page.select",run(){e.selectPage(n,"user")}})}}})({editor:l,executeCommand:d}),y=(e=>{const t=Qo(e.cameraZoomSignal);return{zoom:t,label:`${Math.round(100*t)}%`,zoomIn(){e.zoomAtViewportCenter(-120,"system")},zoomOut(){e.zoomAtViewportCenter(120,"system")},resetZoom(){e.resetZoom("user")}}})(l),b=function({editor:e,activeContextMenu:t,contextMenuRegistry:n}){const i=null!==t,o=Dh(e.selectionStateSignal,i),r=Dh(e.toolStateSignal,i);return kx(()=>{if(!t||!o||!r)return{context:null,activeContextMenu:null,sections:[]};const i=(({editor:e,menu:t})=>{const n=e.toolStateSignal.get();return{...Uh({editor:e,selectionState:e.selectionStateSignal.get(),toolState:n}),menu:t}})({editor:e,menu:t}),s=((e,t)=>"canvas"===e.type?"canvas":t.getSelectedShapeIds().length>0?"selection":"shape")(t.target,e);return{context:i,activeContextMenu:t,sections:n.getSections(s,i)}},[e,t,n,o,r])}({editor:l,activeContextMenu:t,contextMenuRegistry:a}),x=function({canShowPropertiesDuringEditing:e,editor:t,toolbarRegistry:n}){const i=bx(e=>n.subscribeToState(t,e),[t,n]),o=bx(()=>n.getStateRevision(),[n]);Mx(i,o,o);const r=kx(()=>n.getChannels(),[n]),s=Qo(t.toolStateSignal),a=Qo(t.selectionMetadataSignal);(e=>{const t=bx(t=>qo("useToolbarSelectionShapeState",e.selectedShapesSignal,t,{fireImmediately:!1}),[e]),n=kx(()=>{let t=[];return()=>{const n=e.getSelectedShapes().map(e=>[e.id,e.type,e.parentId,e.index,e.rotation,e.skewX,e.scaleX,e.scaleY,e.opacity,e.isHidden,e.isLocked,e.props,e.meta]);return((e,t)=>{if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],o=t[n];if(!i||!o)return!1;for(let e=0;e<i.length;e+=1)if(!Object.is(i[e],o[e]))return!1}return!0})(t,n)||(t=n),t}},[e]);Mx(t,n,n)})(t);const l=Qo(t.shapeEditingStateSignal),d="select"===s.activeToolId,c=d?a.count:0,u=Uh({editor:t,selectionState:a,toolState:s}),h=null!==l.session,p=!h||(e?.(u)??!1),g=new Map,f=e=>{const t=g.get(e.id);if(t)return t;const i=n.getGroups(e,u);return g.set(e.id,i),i},m=((e,t)=>{for(const n of e)for(const e of n.items)if("button"===e.kind&&"editor.tool.set-active-tool"===e.actionId&&e.value===t)return e.label;return t})(f(wP.toolSwitcher),s.activeToolId),S=(({commonShapeType:e,count:t,isMixedFrameAndPointHandleSelection:n,singleShapeType:i})=>{const o=i??e;if(!o)return n?"Mixed selection":`${t} selected`;const r=t>1?` (${t})`:"";return"geo"===o?`Shape${r}`:"text"===o?`Text${r}`:`${o.charAt(0).toUpperCase()}${o.slice(1)}${r}`})({commonShapeType:a.commonShapeType,count:c,isMixedFrameAndPointHandleSelection:a.isMixedFrameAndPointHandleSelection,singleShapeType:a.singleShapeType});return{context:u,channels:r,getGroups:f,isSurfaceActive:e=>"tool"===e||d&&a.count>0,activeToolId:s.activeToolId,activeToolLabel:m,isToolLocked:s.isToolLocked,isEditing:h,canShowPropertiesDuringEditing:p,selectionCount:c,hasMixedSelectionRotation:a.hasMixedSelectionRotation,selectionLabel:S}}({canShowPropertiesDuringEditing:r,editor:l,toolbarRegistry:c}),I=(({context:e,editor:t,registry:n})=>{const i=bx(e=>n.subscribeToState(t,e),[t,n]),o=bx(()=>n.getStateRevision(),[n]);return kx(()=>{const t=new Map;return{context:e,channels:n.getChannels(),getSections(i){const o=t.get(i.id);if(o)return o;const r=n.getSections(i,e);return t.set(i.id,r),r}}},[e,n,Mx(i,o,o)])})({context:x.context,editor:l,registry:s}),w=e.apis.get(fC);if(!w)throw new Error("Canvas export API is unavailable.");const v=kx(()=>{let t,n=[],i=[];return{getSnapshot(o){const r=o??l.getCurrentPageId(),s=((e,t)=>[...e.getShapesForPage(t),...e.getAssets()])(l,r);return t===r&&((e,t)=>{if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0})(n,s)||(t=r,n=s,i=e.getLayerTree(r)),i},subscribe:e=>qo("CanvasKitLayerTree.records",l.store.recordsSignal,e,{fireImmediately:!1})}},[e,l]),P=kx(()=>({getActionState({actionId:e,context:t}){const n=o.getAction(e);if(!n)return null;const i=ll(n,t);return{value:n.getValue?.(t),isEnabled:"enabled"===i,isVisible:"inapplicable"!==i}},runAction({actionId:e,context:t,value:n}){const i=o.getAction(e);i&&"enabled"===ll(i,t)&&d({commandId:e,context:t,run(){i.run({context:t,value:void 0!==n?n:i.getValue?.(t)??null})}})}}),[o,d]);return{controller:e,chromeSurfaces:I,contextMenu:{activeContextMenu:t,onActiveContextMenuChange:i,runAction({actionId:e,context:t,value:n}){d({commandId:e,context:t,run(){(({actionRegistry:e,actionId:t,context:n,value:i})=>{const o=e.getAction(t);o&&"enabled"===ll(o,n)&&o.run({context:n,value:void 0!==i?i:o.getValue?.(n)??null})})({actionRegistry:o,actionId:e,context:t,value:n})}})},surface:b},currentPageId:u,currentPageShapeIds:h,sessionMeta:p,history:m,layerTree:v,pages:S,selection:f,selectedShapeIds:g,exportApi:w,toolbarRuntime:P,toolbarSurfaces:x,grid:n,zoom:y}}function Jh(){return"undefined"==typeof indexedDB?Promise.resolve(null):(yC||(yC=new Promise((e,t)=>{const n=indexedDB.open("canvas-kit.persistence",2);n.addEventListener("upgradeneeded",()=>{var e;(e=n.result).objectStoreNames.contains("snapshots")||e.createObjectStore(mC),e.objectStoreNames.contains("imageBlobs")||e.createObjectStore(SC)}),n.addEventListener("success",()=>{const t=n.result;t.addEventListener("versionchange",()=>{t.close(),yC=null}),e(t)}),n.addEventListener("error",()=>{yC=null,t(n.error)})})),yC)}async function ep(e,t){if(0===t.length)return[];const n=await Jh();return n?new Promise((i,o)=>{const r=n.transaction(e,"readonly"),s=r.objectStore(e),a=new Array(t.length).fill(null);r.addEventListener("complete",()=>i(a)),r.addEventListener("abort",()=>o(r.error)),r.addEventListener("error",()=>o(r.error)),t.forEach((e,t)=>{const n=s.get(e);n.addEventListener("success",()=>{a[t]=n.result??null}),n.addEventListener("error",()=>o(n.error))})}):null}async function tp(e,t){if(0===t.length)return;const n=await Jh();n&&await new Promise((i,o)=>{const r=n.transaction(e,"readwrite"),s=r.objectStore(e);r.addEventListener("complete",()=>i()),r.addEventListener("abort",()=>o(r.error)),r.addEventListener("error",()=>o(r.error));for(const[e,n]of t)s.put(n,e)})}async function np(e,t){const n=[];null!==e.documentSnapshot&&n.push([ip(t),e.documentSnapshot]),null!==e.sessionSnapshot&&n.push([op(t),e.sessionSnapshot]),0!==n.length&&await tp(mC,n)}function ip(e){return e.storageNamespace?`${e.storageNamespace}.document`:"canvas-kit.document"}function op(e){return e.storageNamespace?`${e.storageNamespace}.session`:"canvas-kit.session"}function rp(e){if(null==e)return null;if("string"!=typeof e)throw new Error("Persisted canvas snapshot is not a JSON string.");try{return JSON.parse(e)}catch(t){throw new Error("Persisted canvas snapshot contains invalid JSON.",{cause:t})}}function sp({assetResolverTokens:e,services:t}){return e.map(e=>t.get(e)).filter(e=>!!e)}function ap(e){try{const t=globalThis.reportError;if("function"==typeof t)return void t(e)}catch(t){console.error(t)}console.error(e)}function lp(e){return Number.isInteger(e)?`${e}`:`${Number(e.toFixed(2))}`}function dp(e,t,n){return Math.max(t,Math.min(n,e))}function cp(e){return e?640:480}function up(e,t){return e.x===t.x&&e.y===t.y&&e.pressure===t.pressure&&e.segment===t.segment}function hp(e){return new sI(e.x,e.y)}function pp(e){return{x:e.x,y:e.y,...void 0===e.pressure?null:{pressure:e.pressure},...void 0===e.segment?null:{segment:e.segment}}}function gp(e){const t=[];for(const n of e)t.push(...n.points.map(pp));return t}function fp(e){if(void 0!==e&&Number.isFinite(e))return dp(e,.05,1)}function mp(e,t){const n=[];for(let i=1;i<e.length-1;i+=1){if(t&&Sp(e,i))continue;const o=e[i],r=e[i-1],s=e[i+1];o&&r&&s&&n.push({index:i,score:yp(o,r,s)})}return n.sort((e,t)=>e.score-t.score||e.index-t.index),n}function Sp(e,t){return"straight"===e[t]?.segment||"straight"===e[t+1]?.segment}function yp(e,t,n){const i=((e,t,n)=>{const i=n.x-t.x,o=n.y-t.y,r=i*i+o*o;if(0===r){const n=e.x-t.x,i=e.y-t.y;return n*n+i*i}const s=dp(((e.x-t.x)*i+(e.y-t.y)*o)/r,0,1),a=e.x-(t.x+i*s),l=e.y-(t.y+o*s);return a*a+l*l})(e,t,n),o=((e,t,n)=>{if(void 0===e.pressure)return 0;return 8*Math.abs(e.pressure-((t.pressure??e.pressure)+(n.pressure??e.pressure))/2)})(e,t,n);return i+o*o}function bp(e){if(0===e.length)return null;if(1===e.length){const t=e[0];return`M ${lp(t.x)} ${lp(t.y)}`}if(2===e.length){const t=e[0],n=e[1];return[`M ${lp(t.x)} ${lp(t.y)}`,`L ${lp(n.x)} ${lp(n.y)}`].join(" ")}const t=[],n=e[0];t.push(`M ${lp(n.x)} ${lp(n.y)}`);for(let i=1;i<e.length;i+=1){const n=e[i];if(!n)continue;if("straight"===n.segment){t.push(`L ${lp(n.x)} ${lp(n.y)}`);continue}const o=e[i+1];if(!o||"straight"===o.segment){if(xp(e,i)){const o=e[i-1];t.push(`Q ${lp(o.x)} ${lp(o.y)} ${lp(n.x)} ${lp(n.y)}`)}else t.push(`L ${lp(n.x)} ${lp(n.y)}`);continue}const r=sI.Med(hp(n),hp(o));t.push(`Q ${lp(n.x)} ${lp(n.y)} ${lp(r.x)} ${lp(r.y)}`)}return t.join(" ")}function xp(e,t){return t>=2&&"straight"!==e[t-1]?.segment&&"straight"!==e[t-2]?.segment}function Ip(e){if(e.length<3)return(e=>{if(0===e.length)return null;const[t,...n]=e;return t?[`M ${lp(t.x)} ${lp(t.y)}`,...n.map(e=>`L ${lp(e.x)} ${lp(e.y)}`),"Z"].join(" "):null})(e);const t=e[0],n=e[e.length-1];if(!t||!n)return null;const i=sI.Med(n,t),o=[`M ${lp(i.x)} ${lp(i.y)}`];for(let r=0;r<e.length;r+=1){const t=e[r],n=e[(r+1)%e.length];if(!t||!n)continue;const i=sI.Med(t,n);o.push(`Q ${lp(t.x)} ${lp(t.y)} ${lp(i.x)} ${lp(i.y)}`)}return o.push("Z"),o.join(" ")}function wp(e){return e.map(pp)}function vp(e){return e.map(Pp)}function Pp(e){return(e=>({points:e.points.map(pp)}))(e)}function kp(e,t,n){return e.map(e=>({x:e.x+t,y:e.y+n,...void 0===e.pressure?null:{pressure:e.pressure},...void 0===e.segment?null:{segment:e.segment}}))}function Cp(e,t,n){return e.map(e=>({points:kp(e.points,t,n)}))}function Tp(e,t){return e.map((e,n)=>({points:e.points.map((e,i)=>{const o=t(hp(e),n,i);return{x:o.x,y:o.y,...void 0===e.pressure?null:{pressure:e.pressure},...void 0===e.segment?null:{segment:e.segment}}})}))}function Mp(e,t,n){const i=0===t.w?1:t.w,o=0===t.h?1:t.h,r=0===n.w?1:n.w,s=0===n.h?1:n.h;return e.map(e=>({x:n.minX+(e.x-t.minX)/i*r,y:n.minY+(e.y-t.minY)/o*s,...void 0===e.pressure?null:{pressure:e.pressure},...void 0===e.segment?null:{segment:e.segment}}))}function Ep(e,t,n){return e.map(e=>({points:Mp(e.points,t,n)}))}function Ap(e){return{rotation:e.selectionRotation,rotationCenter:e.selectionRotationCenter}}function Bp(e,t){const n=Ap(t);return Tp(e,e=>fi(e,n))}function Rp(e,t){const n=Ap(t);return Tp(e,e=>mi(e,n))}function Lp(e,t){return Tp(e,e=>xi({axis:t.axis,bounds:t.selectionMirrorBounds,point:e}))}function $p(e,t,n){return Math.max(t,Math.min(n,e))}function Fp(e,t,n){return e+(t-e)*n}function Up(e,t,n){if(e.length<=1)return new sI(1,0);if(n&&e.length>=3){const n=e[t],i=e[(t+1)%e.length],o=n.sub(e[(t-1+e.length)%e.length]).normalize(),r=i.sub(n).normalize(),s=o.add(r);return s.len2()>1e-6?s.normalize():r.len2()>0?r:o.len2()>0?o:new sI(1,0)}const i=e[t],o=e[t+1]??i,r=i.sub(e[t-1]??i).normalize(),s=o.sub(i).normalize();if(0===t)return s.len2()>0?s:new sI(1,0);if(t===e.length-1)return r.len2()>0?r:new sI(1,0);const a=r.add(s);return a.len2()>1e-6?a.normalize():s.len2()>0?s:r.len2()>0?r:new sI(1,0)}function Dp(e,t){return e.x*t.x+e.y*t.y}function Op(e,t,n,i,o={}){if(0===e.length)return[];const r=((e,t)=>{const n=Math.max(e+1,1.6);return{baseRadius:n,minRadius:Math.max(.6,.32*n),minRadiusScale:t?.5:.48,maxRadiusScale:t?1.22:1.24,startTaper:Math.max(1.8*e,2.5),endTaper:Math.max(2.3*e,3.5),simulatePressure:!t}})(t,n),s=e.map(hp),a=[0];let l=0;for(let u=1;u<s.length;u+=1)l+=s[u].dist(s[u-1]),a.push(l);let d=null;const c=e.map((e,n)=>{const c=a[n]??0,u=0===n?0:s[n].dist(s[n-1]),h=function(e,t,n,i,o,r,s,a){if(n.simulatePressure)return(({distanceFromPrevious:e,previousPressure:t,runningLength:n,totalLength:i,strokeWidth:o,isClosed:r})=>{const s=$p(e/Math.max(1.5*o,1),0,1),a=$p(1-s,bC,1),l=null===t?Fp(.5,a,.275):Fp(t,a,.275*Math.max(s,.36));if(r)return $p(l,bC,1);const d=$p(n/Math.max(1.8*o,1),0,1),c=$p((i-n)/Math.max(2.6*o,1),0,1);return $p(l*Fp(.72,1,Math.min(d,c)),bC,1)})({distanceFromPrevious:o,previousPressure:t,runningLength:r,totalLength:s,strokeWidth:i,isClosed:a});const l="number"==typeof e.pressure&&Number.isFinite(e.pressure)?$p(e.pressure,.05,1):t??.55;return null===t?l:Fp(t,l,.68)}(e,d,r,t,u,c,l,i);d=h;const p=o.taperEnd??!0,g=i||s.length<=1?1:Math.min(o.taperStart??1?$p(c/r.startTaper,0,1):1,p?$p((l-c)/r.endTaper,0,1):1),f=Fp(r.minRadiusScale,r.maxRadiusScale,h),m=Math.max(r.minRadius,r.baseRadius*f*Fp(.7,1,g));return{point:s[n],direction:Up(s,n,i),pressure:h,radius:m,runningLength:c}});return l<.5*r.baseRadius?c.map(e=>({...e,radius:Math.max(e.radius,.92*r.baseRadius)})):c}function zp(e,t){const n=e[e.length-1];n&&n.dist2(t)<.04?e[e.length-1]=t:e.push(t)}function Np(e,t,n){const i=e.dist(t);if(0===i)return[];const o=sI.Angle(e,t),r=[];for(let s=1;s<n;s+=1){const t=o-Math.PI*(s/n);r.push(new sI(e.x+Math.cos(t)*i,e.y+Math.sin(t)*i))}return r}function _p(e,t,n,i={}){const o=e[e.length-1];(!o||!0===i.force||o.dist2(t)>n)&&zp(e,t)}function Wp(e){return{...e}}function Xp(e,t,n){return e.map(e=>new sI(e.x+t,e.y+n))}function Hp(e,t,n){return e.map(e=>Xp(e,t,n))}function Kp({segments:e,outlineVertices:t,outlinePolygons:n,strokeWidth:i,sampling:o,isClosed:r}){const s=gp(e),a=s.map(hp),l=a.length>0?aI.FromPoints(a):new aI(0,0,1,1),d=t.length>0?aI.FromPoints([...t]):l.expand(Math.max(i/2,1)),c=r&&s.length>=3?(e=>{if(e.length<3)return null;const t=bp(e);return t?`${t} Z`:null})(s):null,u=void 0!==n?(e=>{const t=e.map(e=>Ip(e)).filter(e=>null!==e);return t.length>0?t.join(" "):null})(n):Ip(t);return{normalizedSegments:vp(e),normalizedPoints:wp(s),pointBounds:l,path:u,selectionPath:c??bp(s),fillPath:c,localBounds:d,renderBounds:d.clone(),outlineVertices:t.map(e=>e.clone()),outlinePolygons:n?n.map(e=>e.map(e=>e.clone())):[t.map(e=>e.clone())],sampling:Wp(o)}}function Yp(e,t,n,i){const o=(({strokeWidth:e,isPen:t})=>[e,t?"pen":"pointer"].join(":"))({strokeWidth:n,isPen:i}),r=xC.get(e),s=r?.get(o);if(s)return{normalizedSegment:Pp(s.normalizedSegment),sampling:Wp(s.sampling)};const a=((e,t)=>{if(e.length<=1)return{points:e.map(pp),rawPointCount:e.length,sampledPointCount:e.length,maxPointCount:t.maxPointCount,reduced:!1,capped:!1};const n=[pp(e[0])],i=t.minPointDistance*t.minPointDistance;let o=hp(e[0]),r=fp(e[0].pressure);for(let l=1;l<e.length;l+=1){const s=e[l];if(!s)continue;const a=hp(s),d=fp(s.pressure),c=l===e.length-1,u="straight"===s.segment,h=c||u?a:sI.Lrp(o,a,t.positionBlend),p=u?d:void 0===d?void 0:void 0===r?d:r+(d-r)*t.pressureBlend;o=h,r=p;const g=void 0===p?{x:h.x,y:h.y,...void 0===s.segment?null:{segment:s.segment}}:{x:h.x,y:h.y,pressure:p,...void 0===s.segment?null:{segment:s.segment}},f=n[n.length-1];if(!f){n.push(g);continue}const m=g.x-f.x,S=g.y-f.y,y=Math.abs((g.pressure??0)-(f.pressure??0));if(m*m+S*S<i){if(u){if(up(f,g))continue;n.push(g);continue}(y>.08||c)&&(n[n.length-1]=g)}else n.push(g)}const s=n.length>t.maxPointCount,a=function(e,t){const n=Math.max(2,Math.floor(t));if(e.length<=n)return e.map(pp);const i=((e,t)=>{let n=mp(e,!0);return n.length<t&&(n=mp(e,!1)),new Set(n.slice(0,t).map(e=>e.index))})(e,e.length-n);return e.filter((e,t)=>!i.has(t)).map(pp)}(n,t.maxPointCount);return{points:a,rawPointCount:e.length,sampledPointCount:a.length,maxPointCount:t.maxPointCount,reduced:a.length<e.length,capped:s}})(e.points,t),l={normalizedSegment:{points:wp(a.points)},sampling:{rawPointCount:a.rawPointCount,sampledPointCount:a.sampledPointCount,sampledPointLimit:a.maxPointCount,reduced:a.reduced,capped:a.capped}},d=r??new Map;return d.set(o,{normalizedSegment:Pp(l.normalizedSegment),sampling:Wp(l.sampling)}),r||xC.set(e,d),l}function qp(e,t,n=!1,i=!1){const o=((e,t)=>({minPointDistance:t?Math.max(.35,.18*e):Math.max(.55,.28*e),positionBlend:t?.68:.66,pressureBlend:t?.68:.45,maxPointCount:cp(t)}))(t,n),r=[],s=[],a=e.filter(e=>e.points.length>0);for(let h=0;h<a.length;h+=1){const e=Yp(a[h],o,t,n);r.push(Pp(e.normalizedSegment)),s.push(Wp(e.sampling))}const l=function(e,t,n={}){if(0===e.length)return[];if(1===e.length)return((e,t)=>{const n=[];for(let i=0;i<16;i+=1){const o=2*Math.PI*i/16;n.push(new sI(e.x+Math.cos(o)*t,e.y+Math.sin(o)*t))}return n})(e[0].point,e[0].radius);const i=[],o=[];let r=.12;for(const d of e)r=Math.max(r,.38*d.radius);const s=r**2;let a=null;for(let d=0;d<e.length;d+=1){const t=e[d],n=t.direction,r=(e[d+1]??t).direction,l=Dp(n,r);let c=0===d||d===e.length-1?n.per().normalize():sI.Lrp(r,n,l).per().normalize();c.len2()<1e-6&&(c=a??new sI(0,1)),a=c,_p(i,t.point.add(c.mul(t.radius)),s,{force:d===e.length-1}),_p(o,t.point.sub(c.mul(t.radius)),s,{force:d===e.length-1})}if(t&&e.length>=3){const e=[];for(const t of i)zp(e,t);for(let t=o.length-1;t>=0;t-=1)zp(e,o[t]);return e}const l=[];for(const d of i)zp(l,d);if(n.capEnd??1){const t=e[e.length-1];for(const e of Np(t.point,i[i.length-1],8))zp(l,e)}for(let d=o.length-1;d>=0;d-=1)zp(l,o[d]);if(n.capStart??1){const t=e[0];for(const e of Np(t.point,o[0],8))zp(l,e)}return l}(Op(gp(r),t,n,i),i),d=(u=o.maxPointCount,{rawPointCount:(c=s).reduce((e,t)=>e+t.rawPointCount,0),sampledPointCount:c.reduce((e,t)=>e+t.sampledPointCount,0),sampledPointLimit:u,reduced:c.some(e=>e.reduced),capped:c.some(e=>e.capped)});var c,u;return Kp({segments:r,outlineVertices:l,outlinePolygons:l.length>0?[l]:[],strokeWidth:t,sampling:d,isClosed:i})}function jp(e){return e.segments}function Vp(e,t,n){return((e,t)=>{const n=Math.max(0,e.w-t.left-t.right),i=Math.max(0,e.h-t.top-t.bottom);return new aI(e.x+t.left,e.y+t.top,n,i)})(n,{left:e.minX-t.minX,right:t.maxX-e.maxX,top:e.minY-t.minY,bottom:t.maxY-e.maxY})}function Gp(e){const t=e,n=IC.get(t);if(n)return n;const i=qp(jp(e.props),e.props.strokeWidth,e.props.isPen??!1,e.props.isClosed);return IC.set(t,i),i}function Zp(e,t,n=!1,i=!1){return((e,t,n=!1,i=!1)=>{const o=qp(e,t,n,i),r=o.pointBounds,s=qp(Tp(o.normalizedSegments,e=>new sI(e.x-r.x,e.y-r.y)),t,n,i);return{x:r.x,y:r.y,segments:s.normalizedSegments,pointBounds:s.pointBounds,localBounds:s.localBounds,renderBounds:s.renderBounds,path:s.path,selectionPath:s.selectionPath,fillPath:s.fillPath,outlineVertices:s.outlineVertices,outlinePolygons:s.outlinePolygons,sampling:s.sampling}})(e,t,n,i)}function Qp(e){const t=e,n=wC.get(t);if(n)return n;const i=((e,t,n,i,o)=>Kp({segments:Cp(e.normalizedSegments,n,i),outlineVertices:Xp(e.outlineVertices,n,i),outlinePolygons:Hp(e.outlinePolygons,n,i),strokeWidth:t,sampling:e.sampling,isClosed:o}))(Gp(e),e.props.strokeWidth,e.x,e.y,e.props.isClosed);return wC.set(t,i),i}function Jp(e){const t=((e,t)=>new sI(e.x+t.localBounds.center.x,e.y+t.localBounds.center.y))(e,Gp(e));return Tp((e=>Cp(jp(e.props),e.x,e.y))(e),n=>((e,t,n)=>{if(0===e.rotation&&0===e.skewX&&1===e.scaleX&&1===e.scaleY)return t;const i=t.sub(n),o=new sI(i.x*e.scaleX,i.y*e.scaleY);return n.add(new sI(o.x+Math.tan(e.skewX)*o.y,o.y).rot(e.rotation))})(e,n,t))}function eg(e){return vp(e)}function tg(e,t,n,i){return{x:e.x-t.x,y:e.y-t.y,...i&&n>0?{pressure:n}:null}}function ng(e){return{x:e.x,y:e.y,...void 0===e.pressure?null:{pressure:e.pressure},...void 0===e.segment?null:{segment:e.segment}}}function ig(e){const t=og(e.segments),n=t[t.length-1];return n?n.points.map(ng):[]}function og(e){return e.length>0?[...e]:[{points:[]}]}function rg(e){return{segments:eg(og(e))}}function sg(e,t,n){const i=n.sub(t),o=i.len2();if(0===o)return e.dist(t);const r=Math.max(0,Math.min(1,((e.x-t.x)*i.x+(e.y-t.y)*i.y)/o)),s=new sI(t.x+i.x*r,t.y+i.y*r);return e.dist(s)}function ag(e,t,n,i){return((e,t,n,i)=>{const o=t.sub(e),r=i.sub(n),s=o.x*r.y-o.y*r.x;if(Math.abs(s)<1e-8)return!1;const a=n.sub(e),l=(a.x*r.y-a.y*r.x)/s,d=(a.x*o.y-a.y*o.x)/s;return l>=0&&l<=1&&d>=0&&d<=1})(e,t,n,i)?0:Math.min(sg(e,n,i),sg(t,n,i),sg(n,e,t),sg(i,e,t))}function lg(e,t){let n=!1;for(let i=0,o=t.length-1;i<t.length;o=i,i+=1){const r=t[i],s=t[o];r&&s&&r.y>e.y!=s.y>e.y&&e.x<(s.x-r.x)*(e.y-r.y)/(s.y-r.y)+r.x&&(n=!n)}return n}function dg(e,t){if(0===t.length)return Number.POSITIVE_INFINITY;let n=Number.POSITIVE_INFINITY;for(let i=0;i<t.length;i+=1){const o=t[i],r=t[(i+1)%t.length];o&&r&&(n=Math.min(n,sg(e,o,r)))}return n}function cg(e,t,n,i){if(0===n.length)return!1;if(lg(e,n)||lg(t,n))return!0;for(let o=0;o<n.length;o+=1){const r=n[o],s=n[(o+1)%n.length];if(r&&s&&ag(e,t,r,s)<=i)return!0}return!1}function ug(e,t){return"number"==typeof e&&Number.isFinite(e)?e:t}function hg(e){if(!e||"object"!=typeof e)return null;const t=e,n=ug(t.x,NaN),i=ug(t.y,NaN);if(!Number.isFinite(n)||!Number.isFinite(i))return null;const o=ug(t.pressure,NaN);return t.x!==n||t.y!==i||void 0!==t.pressure&&t.pressure!==o||void 0!==t.segment&&"straight"!==t.segment?{x:n,y:i,...Number.isFinite(o)?{pressure:o}:null,..."straight"===t.segment?{segment:"straight"}:null}:e}function pg(e){if(!e||"object"!=typeof e)return null;const t=e,n=((e,t)=>{if(!Array.isArray(e))return t;let n=!1;const i=[];for(const o of e){const e=hg(o);e?(n=n||e!==o,i.push(e)):n=!0}return 0===i.length?t:n?i:e})(t.points,[]);return 0===n.length?null:n===t.points?e:{points:n}}function gg(e,t){if(!Array.isArray(e))return t;let n=!1;const i=[];for(const o of e){const e=pg(o);e?(n=n||e!==o,i.push(e)):n=!0}return 0===i.length?t:n?i:e}function fg(e){return f(e)&&"draw"===e.type}function mg(e){return{id:`draw.set-${e}`,getAvailability:e=>"draw"!==e.selection.commonShapeType?"inapplicable":e.selection.count>0?"enabled":"disabled",getValue:t=>((e,t)=>{let n;for(const i of e){if("draw"!==i.type)continue;const e=i.props[t];if(void 0!==n){if("strokeWidth"===t?n!==e:!O(n,e))return null}else n=e}return n??null})(t.selection.selectedShapes,e),run({context:t,value:n}){const i=xg(e,n);if(void 0===i)return;const o=t.selection.selectedShapes.filter(fg).filter(e=>!e.isLocked).map(t=>({id:t.id,props:{[e]:i}}));0!==o.length&&t.editor.commands.updateShapes(o,{source:"user"})}}}function Sg(e){return{id:`draw.default-${e}`,getAvailability:e=>"draw"===e.tool.activeToolId?"enabled":"inapplicable",getValue:t=>t.editor.getDefaultShapeProps("draw")[e],run({context:t,value:n}){const i=xg(e,n);void 0!==i&&t.editor.updateDefaultShapeProps("draw",{[e]:i})}}}function yg(e){let t;for(const n of e){if("draw"!==n.type)continue;const e=n.props.isClosed;if(void 0!==t){if(t!==e)return null}else t=e}return void 0===t?null:t?"closed":"open"}function bg(e){return"closed"===e||"open"!==e&&null}function xg(e,t){return"strokeWidth"===e?Ig(t):R(t)?$(t,"fill"===e?E("transparent"):M("stroke-slate")):void 0}function Ig(e){const t="number"==typeof e?e:"string"==typeof e&&e.trim().length>0?Number(e):NaN;return Number.isFinite(t)&&t>0?t:void 0}function wg(e){return void 0!==Ig(e)}function vg({shape:e,stroke:t=e.props.stroke,strokeWidth:n=e.props.strokeWidth}){const{fillPath:i,renderBounds:o,path:r,selectionPath:s}=Gp({props:{...e.props,strokeWidth:n}});if(!r&&!s)return null;const a=F(t);
30
- return Bx("svg",{width:"100%",height:"100%",viewBox:`${o.x} ${o.y} ${Math.max(o.w,1)} ${Math.max(o.h,1)}`,style:{display:"block",overflow:"visible"},shapeRendering:"geometricPrecision",children:[i&&!D(e.props.fill)?Ax("path",{d:i,fill:F(e.props.fill),stroke:"none"}):null,e.props.isClosed&&s?Ax("path",{d:s,fill:"none",stroke:a,strokeWidth:n,strokeLinecap:"round",strokeLinejoin:"round"}):r?Ax("path",{d:r,fill:a,stroke:"none"}):null]})}function Pg({shape:e,strokeWidth:t}){const{path:n,renderBounds:i,selectionPath:o}=Gp(e),r=o??n;return r?Ax("svg",{"data-ui":"draw-hover-outline",width:"100%",height:"100%",viewBox:`${i.x} ${i.y} ${Math.max(i.w,1)} ${Math.max(i.h,1)}`,style:{display:"block",overflow:"visible",pointerEvents:"none"},shapeRendering:"geometricPrecision",children:Ax("path",{d:r,fill:"none",stroke:Dw,strokeWidth:t,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"})}):null}function kg(e){return e.runtime.require(AC)}function Cg(e){return 4/e.getCurrentCamera().z}function Tg(e,t,n,i){const o=[new sI(t.minX,t.minY),new sI(t.maxX,t.minY),new sI(t.maxX,t.maxY),new sI(t.minX,t.maxY)].map(e=>n.applyToPoint(e));let r=0,s=Number.POSITIVE_INFINITY;for(let a=0;a<o.length;a+=1){const t=o[a],n=o[(a+1)%o.length].sub(t),i=e.sub(t),l=n.x*i.y-n.y*i.x;if(Math.abs(l)<=1e-8)return!1;const d=Math.sign(l);if(0===r)r=d;else if(d!==r)return!1;const c=n.len2(),u=0===c?0:Math.max(0,Math.min(1,(i.x*n.x+i.y*n.y)/c));s=Math.min(s,e.dist(t.add(n.mul(u))))}return s>i}function Mg(e,t){const n=new Set,i=Cg(e);for(const o of e.hitTestShapesAtPoint(t,{hitTest:"bindingTarget"})){const r=e.getShapeUtil(o);if(!r.canReceiveChildren(o))continue;const s=r.getChildClipLocalBounds(o);s&&Tg(t,s,e.computeShapeLocalToPageTransform(o),i)&&n.add(o.id)}return n}function Eg(e,t,n){return n.protectedContainerIds.has(t.id)||e.isShapeOrAncestorLocked(t.id)||e.getShapeUtil(t).canReceiveChildren(t)&&e.hasLockedDescendant(t.id)?null:t.id}function Ag(e,t,n,i){const o=i.topMostOnly?n.slice(0,1):n;for(const r of o){const n=Eg(e,r,t);n&&t.erasingShapeIds.add(n)}}function Bg(e,t,n){Ag(e,t,e.hitTestShapesAtPoint(n.pagePoint),{topMostOnly:n.accelKey})}function Rg(e,t,n){Ag(e,t,e.hitTestShapesByLineSegment(t.previousPagePoint,n.pagePoint,{margin:Cg(e)}),{topMostOnly:n.accelKey})}function Lg(e,t){const n=e.trail[e.trail.length-1];n&&n.dist2(t)<=1e-6||e.trail.push(t.clone())}function $g(e,t){kg(e).setPreview(Array.from(t.erasingShapeIds),t.trail)}function Fg(e){kg(e).clear()}function Ug(e,t){const n=Array.from(t.erasingShapeIds);Fg(e),0!==n.length&&e.commands.deleteShapes(n,{source:"user"})}function Dg(){return"undefined"==typeof performance?Date.now():performance.now()}function Og(e,t,n,i){const o=e.samples[e.samples.length-1];if(!o)return void e.samples.push({...t,time:i,velocity:0});const r=zC/n,s=Xg(o,t);if(s<r)return void(e.samples[e.samples.length-1]={...o,...t,time:i});const a=s*n/Math.max(KC,i-o.time);e.samples.push({...t,time:i,velocity:Gg(o.velocity,a,.68)})}function zg(e,t){e.samples=Ng(e.samples,t)}function Ng(e,t){const n=e[e.length-1];if(!n)return[];const i=t-Zg(YC+n.velocity*qC,YC,jC);if(n.time<i)return[];const o=e.findIndex(e=>e.time>=i);if(-1===o)return[];const r=e.slice(o),s=e[o-1],a=r[0];return s&&a.time>i?[(l=s,d=a,c=Zg((i-s.time)/(a.time-s.time),0,1),{...Vg(l,d,c),time:Gg(l.time,d.time,c),velocity:Gg(l.velocity,d.velocity,c)}),...r]:r;var l,d,c}function _g(e,t){if(e.length<=1)return{x:1,y:0};const n=e[t-1]??e[t],i=e[t+1]??e[t];return(e=>{const t=Math.sqrt(e.x*e.x+e.y*e.y);return t<=0?{x:1,y:0}:{x:e.x/t,y:e.y/t}})(0===t?qg(i,e[t]):qg(t===e.length-1?e[t]:i,n))}function Wg(e,t,n){const i=[];for(let o=0;o<n;o++){const r=2*Math.PI*o/n;i.push({x:e.x+Math.cos(r)*t,y:e.y+Math.sin(r)*t})}return i}function Xg(e,t){return Math.sqrt(Hg(e,t))}function Hg(e,t){const n=e.x-t.x,i=e.y-t.y;return n*n+i*i}function Kg(e){return{x:-e.y,y:e.x}}function Yg(e,t){return{x:e.x+t.x,y:e.y+t.y}}function qg(e,t){return{x:e.x-t.x,y:e.y-t.y}}function jg(e,t){return{x:e.x*t,y:e.y*t}}function Vg(e,t,n){return{x:Gg(e.x,t.x,n),y:Gg(e.y,t.y,n)}}function Gg(e,t,n){return e+(t-e)*n}function Zg(e,t,n){return Math.max(t,Math.min(n,e))}function Qg(e,t){const n=e[e.length-1];!n||Hg(n,t)>.04?e.push(t):e[e.length-1]=t}function Jg(e){if(e.length<2)return null;if(2===e.length)return`M ${tf(e[0])} L ${tf(e[1])} Z`;const t=[`M ${tf(ef(e[0],e[1]))}`];for(let n=1;n<e.length;n++){const i=e[n],o=e[(n+1)%e.length];t.push(`Q ${tf(i)} ${tf(ef(i,o))}`)}return t.push("Z"),t.join(" ")}function ef(e,t){return{x:(e.x+t.x)/2,y:(e.y+t.y)/2}}function tf(e){return`${nf(e.x)},${nf(e.y)}`}function nf(e){return Number.isInteger(e)?`${e}`:e.toFixed(3)}function of(e,t){return"number"==typeof e&&Number.isFinite(e)?Math.max(1,e):t}function rf({shape:e,isSelected:t=!1}){const{h:n,w:i}=e.props,o=F(E("#64748b"));
31
- return Ax("svg",{width:"100%",height:"100%",viewBox:`0 0 ${i} ${n}`,style:{display:"block",overflow:"visible"},shapeRendering:"geometricPrecision",children:t?Ax("rect",{x:.5,y:.5,width:Math.max(i-1,0),height:Math.max(n-1,0),fill:"none",stroke:o,strokeDasharray:"4 4",strokeWidth:1,vectorEffect:"non-scaling-stroke"}):null})}function sf(e){return Math.min(1,Math.max(0,e))}function af(e,t,n){return Math.min(n,Math.max(t,e))}function lf(e){return!!e&&"object"==typeof e&&"number"==typeof e.x&&Number.isFinite(e.x)&&"number"==typeof e.y&&Number.isFinite(e.y)}function df(e,t){const n=sf(e),i=sf(t);let o=Math.min(n,i),r=Math.max(n,i);return r-o<hT&&(o=Math.max(0,Math.min(.9999,(o+r)/2-5e-5)),r=o+hT),{min:o,max:r}}function cf(e){if(!e||"object"!=typeof e)return null;const t=e;if(!lf(t.topLeft)||!lf(t.bottomRight))return null;const n=df(t.topLeft.x,t.bottomRight.x),i=df(t.topLeft.y,t.bottomRight.y);return{topLeft:{x:n.min,y:i.min},bottomRight:{x:n.max,y:i.max}}}function uf(e){const t=cf(e);if(!t)return null;const n=t.topLeft.x,i=t.topLeft.y,o=t.bottomRight.x,r=t.bottomRight.y;return{left:n,top:i,right:o,bottom:r,width:o-n,height:r-i}}function hf(e){return uf(e)??{left:0,top:0,right:1,bottom:1,width:1,height:1}}function pf(e,t){return Math.abs(e.left-t.left)<=pT&&Math.abs(e.top-t.top)<=pT&&Math.abs(e.right-t.right)<=pT&&Math.abs(e.bottom-t.bottom)<=pT}function gf(e){return(e=>Math.abs(e.left)<=pT&&Math.abs(e.top)<=pT&&Math.abs(1-e.right)<=pT&&Math.abs(1-e.bottom)<=pT)(e)?null:cf({topLeft:{x:e.left,y:e.top},bottomRight:{x:e.right,y:e.bottom}})}function ff({centerX:e,centerY:t,height:n,width:i}){const o=af(i,hT,1),r=af(n,hT,1),s=af(e-o/2,0,1-o),a=af(t-r/2,0,1-r);return{left:s,top:a,right:s+o,bottom:a+r,width:o,height:r}}function mf(e){return{x:e.left+e.width/2,y:e.top+e.height/2}}function Sf({crop:e,shape:t}){const n=hf(e);return{w:t.props.w/n.width,h:t.props.h/n.height}}function yf(e,t){return t===bf(e.id)}function bf(e){return`${fT}${e}`}function xf({localToPage:e,shape:t}){const n=t.props.w,i=t.props.h,o=(0+n)/2,r=(0+i)/2,s={top_left:new sI(0,0),top:new sI(o,0),top_right:new sI(n,0),right:new sI(n,r),bottom_right:new sI(n,i),bottom:new sI(o,i),bottom_left:new sI(0,i),left:new sI(0,r)};return yT.map(t=>{return{kind:"custom",type:gT,id:t,point:e.applyToPoint(s[t]),cursor:(n=t,ST[n])};var n})}function If({change:e,crop:t,shape:n}){const i=Sf({crop:t,shape:n}),o=t.bottomRight.x-t.topLeft.x,r=t.bottomRight.y-t.topLeft.y,s=af(t.topLeft.x-e.x/i.w,0,1-o),a=af(t.topLeft.y-e.y/i.h,0,1-r),l=cf({topLeft:{x:s,y:a},bottomRight:{x:s+o,y:a+r}});return l?{id:n.id,props:{crop:l}}:null}function wf(e){return Number.isFinite(e)?Number(e.toFixed(4)).toString():"0"}function vf(e,t){const n=bT.get(e);n&&(n.delete(t),0===n.size&&bT.delete(e))}function Pf(e){return e.activeStroke?{...e,strokes:[...e.strokes,e.activeStroke],activeStroke:null,redoStrokes:[]}:e}function kf(e){const t=RT.get(e);if(t)return t;const n=new BT(e);return RT.set(e,n),n}function Cf(e){return`${CT}${e}`}function Tf(e,t){return t===Cf(e.id)}function Mf(e){const t="number"==typeof e?.size&&Number.isFinite(e.size)?e.size:MT,n="number"==typeof e?.opacity&&Number.isFinite(e.opacity)?e.opacity:AT??.45;return{size:Math.min(128,Math.max(1,t)),color:"string"==typeof e?.color&&e.color.trim().length>0?e.color:ET,opacity:Math.min(1,Math.max(0,n))}}function Ef({brush:e,editor:t,shape:n}){return kf(t).start(n,e)}function Af(e){kf(e).cancel()}function Bf(e){kf(e).complete()}function Rf(e,t){return kf(e).updateBrush(t)}function Lf(e){return kf(e).getActiveSession()}async function $f(e,t){return kf(e).requestConfirm(t)}function Ff(e){return{x:e.x,y:e.y,...void 0===e.pressure?{}:{pressure:e.pressure}}}function Uf(e){return y(e)&&"image"===e.type}function Df(e){return f(e)&&"image"===e.type}function Of(e){if(1!==e.selection.count||"image"!==e.selection.singleShapeType)return null;const[t]=e.selection.selectedShapes;return Df(t)?t:null}function zf(e){const t=Of(e),n=e.editor.getShapeEditingSession();return!(!t||n?.shapeId!==t.id||!yf(t,n.markId))}function Nf(e){const t=Of(e),n=e.editor.getShapeEditingSession();return!(!t||n?.shapeId!==t.id||!Tf(t,n.markId))}function _f(){return[{id:sT,getAvailability(e){const t=Of(e);return!t||zf(e)?"inapplicable":t.isLocked?"disabled":"enabled"},getValue:e=>zf(e),run({context:e}){const t=Of(e);if(!t||t.isLocked)return;const n=e.editor.getShapeEditingSession();n?.shapeId===t.id&&yf(t,n.markId)?e.editor.completeEditing("user"):e.editor.startEditingShape({shapeId:t.id,markId:bf(t.id),entryMode:"focusEnd"},"user")&&((e,t)=>{const n=bT.get(e)??new Map;bT.set(e,n),n.set(t.id,{...t,props:{...t.props,crop:t.props.crop?{topLeft:{...t.props.crop.topLeft},bottomRight:{...t.props.crop.bottomRight}}:null},meta:{...t.meta}})})(e.editor,t)}},{id:aT,getAvailability:e=>zf(e)?"enabled":"inapplicable",run({context:e}){const t=Of(e);t&&e.editor.completeEditing("user")&&vf(e.editor,t.id)}},{id:lT,getAvailability(e){if(!zf(e))return"inapplicable";const t=Of(e);return t&&!t.isLocked?"enabled":"disabled"},run({context:e,value:t}){const n=Of(e);if(!n||n.isLocked||-1!==t&&1!==t)return;const i=(({direction:e,shape:t})=>{const n=hf(t.props.crop),i=mf(n),o=af("in"===e?.8:1.25,Math.max(hT/n.width,hT/n.height),Math.min(1/n.width,1/n.height)),r=ff({centerX:i.x,centerY:i.y,width:n.width*o,height:n.height*o});return pf(n,r)?null:{id:t.id,props:{crop:gf(r)}}})({direction:1===t?"in":"out",shape:n});i&&e.editor.commands.updateShapes([i],{source:"user"})}},{id:dT,getAvailability(e){if(!zf(e))return"inapplicable";const t=Of(e);return t&&!t.isLocked?"enabled":"disabled"},getValue(e){const t=Of(e);return t?(e=>{const t=e.props.w/e.props.h;for(const n of mT)if(Math.abs(t-n.ratio)<=.01)return n.value;return null})(t):null},run({context:e,value:t}){const n=Of(e);if(!n||n.isLocked||"string"!=typeof t)return;const i=mT.find(e=>e.value===t);if(!i)return;const o=function({preset:e,shape:t}){const n=mf(hf(t.props.crop)),i=Sf({crop:t.props.crop,shape:t}),o=mT.find(t=>t.value===e)?.ratio??null;if(!o)return null;const r=o*(i.h/i.w);let s=1,a=s/r;return a>1&&(a=1,s=a*r),(({nextRect:e,shape:t})=>{const n=hf(t.props.crop);if(pf(n,e))return null;const i=Sf({crop:t.props.crop,shape:t}),o=new sI((e.left-n.left)*i.w,(e.top-n.top)*i.h).rot(t.rotation);return{id:t.id,x:t.x+o.x,y:t.y+o.y,props:{w:e.width*i.w,h:e.height*i.h,crop:gf(e)}}})({nextRect:ff({centerX:n.x,centerY:n.y,width:s,height:a}),shape:t})}({preset:i.value,shape:n});o&&e.editor.commands.updateShapes([o],{source:"user"})}},{id:cT,getAvailability(e){if(!zf(e))return"inapplicable";const t=Of(e);return t&&!t.isLocked&&t.props.crop?"enabled":"disabled"},run({context:e}){const t=Of(e);if(!t||t.isLocked)return;const n=(({baselineShape:e,shape:t})=>{const n=e.x,i=e.y,o=e.props.w,r=e.props.h,s=cf(e.props.crop);return Math.abs(t.x-n)<=pT&&Math.abs(t.y-i)<=pT&&Math.abs(t.props.w-o)<=pT&&Math.abs(t.props.h-r)<=pT&&(null===t.props.crop&&null===s||null!==t.props.crop&&null!==s&&Math.abs(t.props.crop.topLeft.x-s.topLeft.x)<=pT&&Math.abs(t.props.crop.topLeft.y-s.topLeft.y)<=pT&&Math.abs(t.props.crop.bottomRight.x-s.bottomRight.x)<=pT&&Math.abs(t.props.crop.bottomRight.y-s.bottomRight.y)<=pT)?null:{id:t.id,x:n,y:i,props:{w:o,h:r,crop:s}}})({baselineShape:(i=e.editor,o=t.id,bT.get(i)?.get(o)??null??t),shape:t});var i,o;n&&e.editor.commands.updateShapes([n],{source:"user"})}}]}function Wf(e,t=0){return Math.max(0,"number"==typeof e&&Number.isFinite(e)?e:t)}function Xf({cornerRadius:e,h:t,w:n}){return Math.min(Wf(e),Math.max(0,n)/2,Math.max(0,t)/2)}function Hf({dataUiPrefix:e}){return{kind:"text-input",id:`${e}.corner-radius`,actionId:uT,label:"Corner radius",icon:"border-corner-pill",placeholder:"0",suffix:"Px",validate:Kf,dataUi:`${e}-corner-radius-control`}}function Kf(e){const t=e.trim();if(0===t.length)return!1;const n=Number(t);return Number.isFinite(n)&&n>=0}function Yf(){return{createSession(e,{handle:t,shape:n,originPagePoint:i}){return Df(n)&&"custom"===t.kind&&"image.crop"===t.type&&(o=t.id,yT.some(e=>e===o))?function({handleId:e,shapeId:t,startPagePoint:n,startPageToLocal:i,startShape:o,startCrop:r}){return{shapeId:t,historyMark:"image.crop.handle",update({editor:s,pagePoint:a,source:l}){if(!Df(s.getShape(t)))return"stop";const d=(({handleId:e,pageToLocal:t,shape:n,startCrop:i,startPagePoint:o,currentPagePoint:r})=>{const s=cf(i)??{topLeft:{x:0,y:0},bottomRight:{x:1,y:1}},a=Sf({crop:s,shape:n});if(a.w<8||a.h<8)return null;const l=t.applyToPoint(o),d=t.applyToPoint(r).sub(l);if(0===d.x&&0===d.y)return null;const c={x:s.topLeft.x*a.w,y:s.topLeft.y*a.h,w:(s.bottomRight.x-s.topLeft.x)*a.w,h:(s.bottomRight.y-s.topLeft.y)*a.h},u=c.x+c.w,h=c.y+c.h;let p=c.x,g=c.y,f=c.w,m=c.h;(e=>"top_left"===e||"left"===e||"bottom_left"===e)(e)?(p=af(p+d.x,0,u-8),f=u-p):(e=>"top_right"===e||"right"===e||"bottom_right"===e)(e)&&(f=af(u+d.x,c.x+8,a.w)-p),(e=>"top_left"===e||"top"===e||"top_right"===e)(e)?(g=af(g+d.y,0,h-8),m=h-g):(e=>"bottom_left"===e||"bottom"===e||"bottom_right"===e)(e)&&(m=af(h+d.y,c.y+8,a.h)-g);const S=cf({topLeft:{x:p/a.w,y:g/a.h},bottomRight:{x:(p+f)/a.w,y:(g+m)/a.h}});if(!S)return null;const y=new sI(p-s.topLeft.x*a.w,g-s.topLeft.y*a.h).rot(n.rotation);return{id:n.id,x:n.x+y.x,y:n.y+y.y,props:{w:f,h:m,crop:S}}})({handleId:e,currentPagePoint:a,pageToLocal:i,shape:o,startCrop:r,startPagePoint:n});return d?(s.commands.updateShapes([d],{source:l}),"continue"):"continue"}}}({handleId:t.id,shapeId:n.id,startPagePoint:i,startPageToLocal:e.computeShapeLocalToPageTransform(n).invert(),startShape:n,startCrop:n.props.crop}):null;var o}}}function qf(e){const[t]=e.getSelectedShapes();if(!Df(t))return null;const n=e.getShapeEditingSession();return n&&n.shapeId===t.id&&yf(t,n.markId)?t:null}function jf(e,t,n){if(!n.hasDragged){if(n.startPagePoint.dist2(t.pagePoint)<9)return;n.operation=e.operations.begin({kind:"image.crop.translate",label:"shape.edit",source:"user",history:"record"}),n.hasDragged=!0}if(!Df(e.getShape(n.shapeId)))return;const i=(({currentPagePoint:e,pageToLocal:t,shape:n,startCrop:i,startPagePoint:o,shiftKey:r})=>{const s=cf(i);if(!s)return null;const a=t.applyToPoint(o);let l=t.applyToPoint(e).sub(a);return r&&(l=Math.abs(l.x)<Math.abs(l.y)?new sI(0,l.y):new sI(l.x,0)),0===l.x&&0===l.y?null:If({change:l,crop:s,shape:n})})({currentPagePoint:t.pagePoint,pageToLocal:n.startPageToLocal,shape:n.startShape,shiftKey:t.shiftKey,startCrop:n.startCrop,startPagePoint:n.startPagePoint});i&&e.commands.updateShapes([i],{source:"user"})}function Vf(e,t){return"number"==typeof e&&Number.isFinite(e)?e:t}function Gf(e){return"key_down"===e.name&&"Enter"===e.key&&!e.altKey&&!e.accelKey}function Zf(e){return"key_down"===e.name&&"z"===e.key.toLowerCase()&&e.accelKey&&!e.altKey}function Qf(e){const[t]=e.getSelectedShapes();if(!Df(t))return null;const n=e.getShapeEditingSession();return n&&n.shapeId===t.id&&Tf(t,n.markId)?t:null}function Jf(e,t,n){const i=em(e,t,n.pagePoint);return!!tm(i,t)&&(((e,t)=>{kf(e).appendPoint(t)})(e,{x:i.x,y:i.y,pressure:n.pressure}),!0)}function em(e,t,n){return e.computeShapeLocalToPageTransform(t).invert().applyToPoint(n)}function tm(e,t){return e.x>=0&&e.y>=0&&e.x<=t.props.w&&e.y<=t.props.h}function nm(e,t,n){if(!n.originCamera||!n.originScreenPoint)return;const i=t.screenPoint.sub(n.originScreenPoint),o=n.originCamera.z;e.setCamera({x:n.originCamera.x-i.x/o,y:n.originCamera.y-i.y/o},{source:"user"})}function im({shape:e,session:t}){return t&&t.shapeId===e.id&&0!==t.strokes.length?Ax("svg",{"aria-hidden":"true","data-ui":"image-smudge-preview",viewBox:`0 0 ${e.props.w} ${e.props.h}`,style:{display:"block",height:e.props.h,inset:0,overflow:"hidden",pointerEvents:"none",position:"absolute",width:e.props.w},children:t.strokes.map(e=>Ax(om,{stroke:e},e.id))}):null}function om({stroke:e}){const t=e.points[0];if(!t)return null;const n=e.brush.color??"#ffff00",i=e.brush.opacity??.45,o=e.brush.size;if(1===e.points.length)return Ax("circle",{cx:t.x,cy:t.y,r:o/2,fill:n,opacity:i});const r=(e=>{const[t,...n]=e.points;return t?[`M ${sm(t.x)} ${sm(t.y)}`,...n.map(e=>`L ${sm(e.x)} ${sm(e.y)}`)].join(" "):null})(e);return r?Ax("path",{d:r,fill:"none",opacity:i,stroke:n,strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:o}):null}function rm(e,t){return`${e},${t}`}function sm(e){return Number.isFinite(e)?Number(e.toFixed(2)).toString():"0"}function am(e,t,n){const i=e.computeShapeLocalToPageTransform(t).invert().applyToPoint(n);return i.x>=0&&i.y>=0&&i.x<=t.props.w&&i.y<=t.props.h}function lm(e){return e.runtime.require(DT)}function dm(e,t){const n=e.trail[e.trail.length-1];n&&n.dist2(t)<=1e-6||e.trail.push(t.clone())}function cm(e,t){lm(e).set(t.sessionId,t.trail)}function um(){return"undefined"==typeof performance?Date.now():performance.now()}function hm(e,t,n,i){const o=e.samples[e.samples.length-1];if(!o)return void e.samples.push({...t,time:i,velocity:0});const r=jT/n,s=Sm(o,t);if(s<r)return void(e.samples[e.samples.length-1]={...o,...t,time:i});const a=s*n/Math.max(eM,i-o.time);e.samples.push({...t,time:i,velocity:Pm(o.velocity,a,.68)})}function pm(e,t){e.samples=gm(e.samples,t)}function gm(e,t){const n=e[e.length-1];if(!n)return[];const i=t-km(tM+n.velocity*nM,tM,iM);if(n.time<i)return[];const o=e.findIndex(e=>e.time>=i);if(-1===o)return[];const r=e.slice(o),s=e[o-1],a=r[0];return s&&a.time>i?[(l=s,d=a,c=km((i-s.time)/(a.time-s.time),0,1),{...vm(l,d,c),time:Pm(l.time,d.time,c),velocity:Pm(l.velocity,d.velocity,c)}),...r]:r;var l,d,c}function fm(e,t){if(e.length<=1)return{x:1,y:0};const n=e[t-1]??e[t],i=e[t+1]??e[t];return(e=>{const t=Math.sqrt(e.x*e.x+e.y*e.y);return t<=0?{x:1,y:0}:{x:e.x/t,y:e.y/t}})(0===t?Im(i,e[t]):Im(t===e.length-1?e[t]:i,n))}function mm(e,t,n){const i=[];for(let o=0;o<n;o++){const r=2*Math.PI*o/n;i.push({x:e.x+Math.cos(r)*t,y:e.y+Math.sin(r)*t})}return i}function Sm(e,t){return Math.sqrt(ym(e,t))}function ym(e,t){const n=e.x-t.x,i=e.y-t.y;return n*n+i*i}function bm(e){return{x:-e.y,y:e.x}}function xm(e,t){return{x:e.x+t.x,y:e.y+t.y}}function Im(e,t){return{x:e.x-t.x,y:e.y-t.y}}function wm(e,t){return{x:e.x*t,y:e.y*t}}function vm(e,t,n){return{x:Pm(e.x,t.x,n),y:Pm(e.y,t.y,n)}}function Pm(e,t,n){return e+(t-e)*n}function km(e,t,n){return Math.max(t,Math.min(n,e))}function Cm(e,t){const n=e[e.length-1];!n||ym(n,t)>.04?e.push(t):e[e.length-1]=t}function Tm(e){if(e.length<2)return null;if(2===e.length)return`M ${Em(e[0])} L ${Em(e[1])} Z`;const t=[`M ${Em(Mm(e[0],e[1]))}`];for(let n=1;n<e.length;n++){const i=e[n],o=e[(n+1)%e.length];t.push(`Q ${Em(i)} ${Em(Mm(i,o))}`)}return t.push("Z"),t.join(" ")}function Mm(e,t){return{x:(e.x+t.x)/2,y:(e.y+t.y)/2}}function Em(e){return`${Am(e.x)},${Am(e.y)}`}function Am(e){return Number.isInteger(e)?`${e}`:e.toFixed(3)}function Bm(e,t,n){return["control",n,e,t].map(encodeURIComponent).join("|")}function Rm(e,t){const n=t.split("|").map(e=>{try{return decodeURIComponent(e)}catch{return""}});return"path.node"===e&&3===n.length&&"node"===n[0]?{type:sM,subpathId:n[1],nodeId:n[2]}:"path.control"!==e||4!==n.length||"control"!==n[0]||"in"!==n[1]&&"out"!==n[1]?null:{type:aM,handle:n[1],subpathId:n[2],nodeId:n[3]}}function Lm(e,t){t?lM.set(e,$m(t)):lM.delete(e)}function $m(e){return{...e,pagePoint:e.pagePoint.clone()}}function Fm(e){return f(e)&&"path"===e.type}function Um(e){return Number.isInteger(e)?`${e}`:`${Number(e.toFixed(2))}`}function Dm(e){return new sI(e.x,e.y)}function Om(e,t){const n=Dm(t);if(!((e,t)=>!!e.out||!!t.in)(e,t))return`L ${Um(n.x)} ${Um(n.y)}`;const i=(e=>{const t=Dm(e);return e.out?t.add(new sI(e.out.dx,e.out.dy)):t})(e),o=(e=>{const t=Dm(e);return e.in?t.add(new sI(e.in.dx,e.in.dy)):t})(t);return["C",Um(i.x),Um(i.y),Um(o.x),Um(o.y),Um(n.x),Um(n.y)].join(" ")}function zm(e){const t=e.nodes[0];if(!t)return null;const n=[`M ${Um(t.x)} ${Um(t.y)}`];for(let i=1;i<e.nodes.length;i+=1){const t=e.nodes[i-1],o=e.nodes[i];t&&o&&n.push(Om(t,o))}if(e.closed&&e.nodes.length>1){const i=e.nodes[e.nodes.length-1];i&&n.push(Om(i,t)),n.push("Z")}return n.join(" ")}function Nm(e){const t=e.map(zm).filter(e=>null!==e);return t.length>0?t.join(" "):null}function _m(e){return Number.isFinite(e)}function Wm(e){return{dx:e.dx,dy:e.dy}}function Xm(e){return{id:e.id,x:e.x,y:e.y,kind:e.kind,...e.in?{in:Wm(e.in)}:null,...e.out?{out:Wm(e.out)}:null}}function Hm(e){return{id:e.id,closed:e.closed,nodes:e.nodes.map(Xm)}}function Km(e){return e.map(Hm)}function Ym(e){return new sI(e.x,e.y)}function qm(e){const t=Ym(e);return e.in?t.add(new sI(e.in.dx,e.in.dy)):t}function jm(e){const t=Ym(e);return e.out?t.add(new sI(e.out.dx,e.out.dy)):t}function Vm(e,t,n,i,o){const r=1-o,s=r*r*r,a=3*r*r*o,l=3*r*o*o,d=o*o*o;return new sI(e.x*s+t.x*a+n.x*l+i.x*d,e.y*s+t.y*a+n.y*l+i.y*d)}function Gm(e,t,n){return new sI(e.x+(t.x-e.x)*n,e.y+(t.y-e.y)*n)}function Zm(e,t){return[Ym(e),jm(e),qm(t),Ym(t)]}function Qm(e,t){return!!e.out||!!t.in}function Jm(e,t,n){return Qm(e,t)?Vm(...Zm(e,t),n):Gm(Ym(e),Ym(t),n)}function eS(e,t,n){const i=Ym(t),o=jm(t),r=qm(n),s=Ym(n);if(t.out||n.in)for(let a=1;a<=18;a+=1)e.push(Vm(i,o,r,s,a/18));else e.push(s)}function tS(e){const t=e.nodes[0];if(!t)return{id:e.id,closed:e.closed,points:[]};const n=[Ym(t)];for(let i=1;i<e.nodes.length;i+=1){const t=e.nodes[i-1],o=e.nodes[i];t&&o&&eS(n,t,o)}if(e.closed&&e.nodes.length>1){const i=e.nodes[e.nodes.length-1];i&&eS(n,i,t)}return{id:e.id,closed:e.closed,points:n}}function nS(e){const t=e.props,n=gM.get(t);if(n)return n;const i=iS(e.props);return gM.set(t,i),i}function iS(e){const t=e.subpaths.map(tS),n=t.flatMap(e=>e.points),i=e.subpaths.flatMap(e=>e.nodes.flatMap(e=>[Ym(e),...e.in?[qm(e)]:[],...e.out?[jm(e)]:[]])),o=i.length>0?aI.FromPoints(i):new aI(0,0,1,1),r=Math.max(e.strokeWidth/2,1),s=n.length>0?aI.FromPoints(n).expand(r):o.expand(r),a=new aI(s.x,s.y,Math.max(s.w,1),Math.max(s.h,1));return{path:Nm(e.subpaths),pointBounds:o,localBounds:s,renderBounds:a,outlineVertices:n.map(e=>e.clone()),flattenedSubpaths:t}}function oS(e,t){return e.map(e=>({...e,nodes:e.nodes.map(e=>((e,t)=>{const n=t(Ym(e)),i=e.in?t(qm(e)):null,o=e.out?t(jm(e)):null;return{...e,x:n.x,y:n.y,...i?{in:{dx:i.x-n.x,dy:i.y-n.y}}:{in:null},...o?{out:{dx:o.x-n.x,dy:o.y-n.y}}:{out:null}}})(e,t))}))}function rS(e,t){const n=iS({...t,subpaths:Km(e)}).pointBounds,i=Number.isFinite(n.x)?n.x:0,o=Number.isFinite(n.y)?n.y:0,r=((e,t,n)=>oS(e,e=>new sI(e.x+t,e.y+n)))(e,-i,-o);return{x:i,y:o,subpaths:r,geometry:iS({...t,subpaths:r})}}function sS(e,t){return oS(e.props.subpaths,e=>t.applyToPoint(e))}function aS(e,t){return Nm(sS(e,t))}function lS(e,t,n){const i=n.sub(t),o=i.len2();if(0===o)return{distanceSquared:e.dist2(t),t:0};const r=e.sub(t),s=Math.max(0,Math.min(1,(r.x*i.x+r.y*i.y)/o)),a=t.add(i.mul(s));return{distanceSquared:e.dist2(a),t:s}}function dS(e,t,n){return lS(e,t,n).distanceSquared}function cS(e,t,n){const i=n*n;let o=null;for(const r of e){if(r.nodes.length<2)continue;const e=r.closed?r.nodes.length:r.nodes.length-1;for(let n=0;n<e;n+=1){const e=r.nodes[n],s=r.nodes[(n+1)%r.nodes.length];if(!e||!s)continue;const a=Qm(e,s)?32:1;let l=Ym(e);for(let n=1;n<=a;n+=1){const d=Jm(e,s,n/a),c=lS(t,l,d),u=(n-1+c.t)/a;u>.02&&u<.98&&c.distanceSquared<=i&&(!o||c.distanceSquared<o.distanceSquared)&&(o={subpathId:r.id,startNodeId:e.id,endNodeId:s.id,t:u,point:Jm(e,s,u),distanceSquared:c.distanceSquared}),l=d}}}return o?{subpathId:o.subpathId,startNodeId:o.startNodeId,endNodeId:o.endNodeId,t:o.t,point:o.point.clone(),distance:Math.sqrt(o.distanceSquared)}:null}function uS(e,t){return e.find(e=>e.id===t)??null}function hS(e,t,n){return uS(e,t)?.nodes.find(e=>e.id===n)??null}function pS(e,t,n,i){return e.map(e=>e.id!==t?Hm(e):{...e,nodes:e.nodes.map(e=>e.id===n?i(Xm(e)):Xm(e))})}function gS(e,t,n){const i=yS(t);return 0===i.size?Km(e):e.map(e=>{const t=i.get(e.id);return t?{...e,nodes:e.nodes.map(e=>t.has(e.id)?n(Xm(e)):Xm(e))}:Hm(e)})}function fS(e,t,n){return e.map(e=>{if(e.id!==t)return Hm(e);const i=e.nodes.findIndex(e=>e.id===n),o=e.nodes[i];if(!o)return Hm(e);const r=i>0?e.nodes[i-1]:e.closed?e.nodes[e.nodes.length-1]:null,s=i<e.nodes.length-1?e.nodes[i+1]:e.closed?e.nodes[0]:null,a=Ym(o),l=((e,t,n)=>{const i=t?Ym(t):null,o=n?Ym(n):null;if(i&&o){const t=o.sub(i);if(t.len()<=uM)return null;const n=t.normalize();return((e,t)=>{const n=Math.abs(e.x*t.y-e.y*t.x),i=e.len()*t.len();return i<=uM||n/i<=.001})(i.sub(e),o.sub(e))?n.rot(pM):n}const r=o?o.sub(e):i?e.sub(i):null;return!r||r.len()<=uM?null:r.normalize().rot(pM)})(a,r,s),d=e.nodes.map(Xm);return d[i]={...Xm(o),kind:"smooth",in:r&&l?AS(l.mul(-a.dist(Ym(r))*hM)):null,out:s&&l?AS(l.mul(a.dist(Ym(s))*hM)):null},{...e,nodes:d}})}function mS(e,t,n){return pS(e,t,n,e=>({...e,kind:"corner",in:null,out:null}))}function SS(e,t,n,i=t.at(-1)??null){if(!(e=>{const t=new Set;for(const n of e){if(!n.id||t.has(n.id))return!1;t.add(n.id);const e=new Set;for(const t of n.nodes){if(!t.id||e.has(t.id))return!1;e.add(t.id)}}return!0})(e))return null;const o=(e=>{const t=new Set,n=[];for(const i of e){const e=JSON.stringify([i.subpathId,i.nodeId]);t.has(e)||(t.add(e),n.push({subpathId:i.subpathId,nodeId:i.nodeId}))}return n})(t);if(o.length<2)return null;let r;switch(n){case"merge":r=((e,t)=>{const n=bS(t);if(null!==n)return((e,t,n)=>{const i=e.findIndex(e=>e.id===t),o=e[i];if(!o)return null;const r=((e,t)=>{const n=t.map(t=>e.nodes.findIndex(e=>e.id===t.nodeId));if(n.some(e=>e<0))return null;const i=Array.from(new Set(n)).sort((e,t)=>e-t);if(i.length!==t.length)return null;if(!e.closed)return i.every((e,t)=>0===t||e===i[t-1]+1)?i:null;if(i.length===e.nodes.length)return i;const o=i.flatMap((t,n)=>(t+1)%e.nodes.length===i[(n+1)%i.length]?[]:[n]);if(1!==o.length)return null;const r=(o[0]+1)%i.length;return[...i.slice(r),...i.slice(0,r)]})(o,n);if(!r||r.length<2)return null;const s=new Set(r),a=r.map(e=>o.nodes[e]),l=r[0],d=a[0],c=a[a.length-1],u=a.reduce((e,t)=>e.add(Ym(t)),sI.Zero()).div(a.length),h={...Xm(d),x:u.x,y:u.y,kind:"corner",in:CS(d.in,Ym(d),u),out:CS(c.out,Ym(c),u)},p=o.nodes.flatMap((e,t)=>s.has(t)?t===l?[h]:[]:[Xm(e)]),g=o.closed&&p.length>=3;return o.closed&&!g&&kS(p),{subpaths:MS(e,i,[{...o,closed:g,nodes:p}]),selectedNodes:[{subpathId:t,nodeId:h.id}]}})(e,n,t);const i=xS(e,t);return i?((e,t)=>{const[n,i]=t,o=wS(n),r=vS(i),s=o[o.length-1],a=r[0],l=Ym(s).add(Ym(a)).div(2),d={...Xm(s),x:l.x,y:l.y,kind:"corner",in:CS(s.in,Ym(s),l),out:CS(a.out,Ym(a),l)},{nodes:c}=TS(r.slice(1),new Set([...o.slice(0,-1).map(e=>e.id),d.id]),"merged"),u={...n.subpath,closed:!1,nodes:[...o.slice(0,-1),d,...c]};return{subpaths:ES(e,t,u),selectedNodes:[{subpathId:u.id,nodeId:d.id}]}})(e,i):null})(e,o);break;case"join":r=((e,t)=>{if(2!==t.length)return null;const n=bS(t);if(null!==n)return((e,t,n)=>{const i=e.findIndex(e=>e.id===t),o=e[i];if(!o||o.closed||o.nodes.length<3)return null;const r=new Set([o.nodes[0].id,o.nodes[o.nodes.length-1].id]);if(2!==n.length||n.some(e=>!r.has(e.nodeId)))return null;const s=o.nodes.map(Xm);return s[0]={...s[0],kind:"corner",in:null},s[s.length-1]={...s[s.length-1],kind:"corner",out:null},{subpaths:MS(e,i,[{...o,closed:!0,nodes:s}]),selectedNodes:n.map(e=>({...e}))}})(e,n,t);const i=xS(e,t);return i?((e,t)=>{const[n,i]=t,o=wS(n),{nodes:r,nodeIdMap:s}=TS(vS(i),new Set(o.map(e=>e.id)),"joined"),a=r[0];o[o.length-1]={...o[o.length-1],kind:"corner",out:null},r[0]={...a,kind:"corner",in:null};const l={...n.subpath,closed:!1,nodes:[...o,...r]};return{subpaths:ES(e,t,l),selectedNodes:[{subpathId:l.id,nodeId:n.node.id},{subpathId:l.id,nodeId:s.get(i.node.id)??i.node.id}]}})(e,i):null})(e,o);break;case"separate":r=((e,t)=>{if(2!==t.length)return null;const n=bS(t);if(null===n)return null;const i=e.findIndex(e=>e.id===n),o=e[i];if(!o||o.nodes.length<2)return null;const r=((e,t)=>{const[n,i]=t.map(t=>e.nodes.findIndex(e=>e.id===t.nodeId));return void 0===n||void 0===i||n<0||i<0?-1:i===n+1?n:n===i+1?i:e.closed?n===e.nodes.length-1&&0===i?n:i===e.nodes.length-1&&0===n?i:-1:-1})(o,t);if(r<0)return null;if(o.closed){const n=[...o.nodes.slice(r+1).map(Xm),...o.nodes.slice(0,r+1).map(Xm)];return kS(n),{subpaths:MS(e,i,[{...o,closed:!1,nodes:n}]),selectedNodes:t.map(e=>({...e}))}}const s=o.nodes.slice(0,r+1).map(Xm),a=o.nodes.slice(r+1).map(Xm);kS(s),kS(a);const l=s.length>=2?{...o,closed:!1,nodes:s}:null,d=((e,t)=>{const n=new Set(e.map(e=>e.id));if(!n.has(t))return t;let i=2;for(;n.has(`${t}:${i}`);)i+=1;return`${t}:${i}`})(e,`${o.id}:split`),c=a.length>=2?{...o,id:d,closed:!1,nodes:a}:null,u=[l,c].filter(e=>null!==e),h=new Set(s.map(e=>e.id)),p=new Set(a.map(e=>e.id)),g=t.flatMap(e=>l&&h.has(e.nodeId)?[{subpathId:l.id,nodeId:e.nodeId}]:c&&p.has(e.nodeId)?[{subpathId:c.id,nodeId:e.nodeId}]:[]);return{subpaths:MS(e,i,u),selectedNodes:g}})(e,o)}if(!r)return null;const s=i?o.findIndex(e=>{return(t=e).subpathId===(n=i).subpathId&&t.nodeId===n.nodeId;var t,n}):-1;return{...r,primaryNode:r.selectedNodes[s]??r.selectedNodes.at(-1)??null}}function yS(e){const t=new Map;for(const n of e){const e=t.get(n.subpathId)??new Set;e.add(n.nodeId),t.set(n.subpathId,e)}return t}function bS(e){const t=e[0];return t&&e.every(e=>e.subpathId===t.subpathId)?t.subpathId:null}function xS(e,t){if(2!==t.length)return null;const n=IS(e,t[0]),i=IS(e,t[1]);return n&&i&&n.subpathIndex!==i.subpathIndex?[n,i]:null}function IS(e,t){const n=e.findIndex(e=>e.id===t.subpathId),i=e[n];if(!i||i.closed)return null;const o=i.nodes.findIndex(e=>e.id===t.nodeId),r=i.nodes[o];return!r||0!==o&&o!==i.nodes.length-1?null:{subpath:i,subpathIndex:n,endpoint:0===o?"start":"end",node:r}}function wS(e){return"end"===e.endpoint?e.subpath.nodes.map(Xm):PS(e.subpath.nodes)}function vS(e){return"start"===e.endpoint?e.subpath.nodes.map(Xm):PS(e.subpath.nodes)}function PS(e){return[...e].reverse().map(e=>({...Xm(e),in:e.out?Wm(e.out):null,out:e.in?Wm(e.in):null}))}function kS(e){0!==e.length&&(e[0]={...e[0],kind:"corner",in:null},e[e.length-1]={...e[e.length-1],kind:"corner",out:null})}function CS(e,t,n){return e?AS(t.add(new sI(e.dx,e.dy)).sub(n)):null}function TS(e,t,n){const i=new Map;return{nodes:e.map(e=>{let o=e.id;if(t.has(o)){let i=1,r=`${o}:${n}`;for(;t.has(r);)i+=1,r=`${e.id}:${n}:${i}`;o=r}return t.add(o),i.set(e.id,o),{...Xm(e),id:o}}),nodeIdMap:i}}function MS(e,t,n){return e.flatMap((e,i)=>i===t?n.map(Hm):[Hm(e)])}function ES(e,t,n){const i=Math.min(t[0].subpathIndex,t[1].subpathIndex),o=new Set([t[0].subpathIndex,t[1].subpathIndex]);return e.flatMap((e,t)=>t===i?[n]:o.has(t)?[]:[Hm(e)])}function AS(e){return e.len2()<=1e-12?null:{dx:e.x,dy:e.y}}function BS(e){const t=fM.get(e);return t?(e=>({shapeId:e.shapeId,nodes:e.nodes.map(e=>({...e})),primary:{...e.primary}}))(t):null}function RS(e){const t=fM.get(e);if(!t)return null;if(e.getShapeEditingSession()?.shapeId!==t.shapeId)return null;const n=e.getShape(t.shapeId);if(!Fm(n))return null;const i=t.nodes.flatMap(e=>{const t=uS(n.props.subpaths,e.subpathId)?.nodes.find(t=>t.id===e.nodeId);return t?[{ref:{...e},node:t}]:[]});if(0===i.length)return null;const o=i.some(({ref:e})=>zS(e,t.primary))?t.primary:i[i.length-1].ref;return{selection:{shapeId:n.id,nodes:i.map(({ref:e})=>({...e})),primary:{...o}},shape:n,entries:i}}function LS(e){const t=fM.get(e);fM.delete(e),e.getShapeEditingSession()?.shapeId===t?.shapeId&&OS(e,null)}function $S(e,t,n,i){const o={subpathId:n,nodeId:i};FS(e,t,[o],o)}function FS(e,t,n,i=n.at(-1)??null){const o=((e,t,n)=>{const i=(e=>{const t=new Set,n=[];for(const i of e){const e=JSON.stringify([i.subpathId,i.nodeId]);t.has(e)||(t.add(e),n.push({...i}))}return n})(t).filter(t=>null!==DS(e,t));if(0===i.length)return null;const o=(n&&i.find(e=>zS(e,n)))??i[i.length-1];return{shapeId:e.id,nodes:i,primary:{...o}}})(t,n,i);if(!o)return void LS(e);fM.set(e,o);const r=DS(t,o.primary);OS(e,r?e.computeShapeLocalToPageTransform(t).applyToPoint(Ym(r)):null)}function US(e,t,n){return e.nodes.some(e=>e.subpathId===t&&e.nodeId===n)}function DS(e,t){return uS(e.props.subpaths,t.subpathId)?.nodes.find(e=>e.id===t.nodeId)??null}function OS(e,t){const n=e.getShapeEditingSession();n&&e.updateSession({shapeEditingSession:{...n,caretPagePoint:t?{x:t.x,y:t.y}:void 0}},"system")}function zS(e,t){return e.subpathId===t.subpathId&&e.nodeId===t.nodeId}function NS(e){const t=e.meta[mM],n=e.meta[SM];return{subpathId:"string"==typeof t?t:null,previewNodeId:"string"==typeof n?n:null}}function _S(e,t){const n=WS(e);return t.subpathId&&(n[mM]=t.subpathId),t.previewNodeId&&(n[SM]=t.previewNodeId),n}function WS(e){const t={...e};return delete t[mM],delete t[SM],t}function XS({node:e,showIn:t,size:n,strokeWidth:i}){const o=Ym(e);
32
- return Bx(Ex,{children:[t&&e.in?Ax(HS,{anchor:o,point:qm(e),size:n,strokeWidth:i,variant:"in"}):null,e.out?Ax(HS,{anchor:o,point:jm(e),size:n,strokeWidth:i,variant:"out"}):null]})}function HS({anchor:e,point:t,size:n,strokeWidth:i,variant:o}){const r=n/2;
33
- return Bx("g",{"data-ui":"path-draft-curve-handle","data-path-draft-curve-handle":o,children:[Ax("line",{"data-ui":"path-draft-control-line",x1:e.x,y1:e.y,x2:t.x,y2:t.y,stroke:"rgba(37, 99, 235, 0.44)",strokeWidth:i}),Ax("rect",{"data-ui":"path-draft-control-handle",x:t.x-r,y:t.y-r,width:n,height:n,fill:bM,stroke:yM,strokeWidth:i})]})}function KS({point:e,size:t,strokeWidth:n,variant:i}){const o=t/2;
34
- return Ax("rect",{"data-ui":"path-draft-control-point","data-path-draft-control-point":i,x:e.x-o,y:e.y-o,width:t,height:t,rx:2,ry:2,fill:"candidate"===i?"rgba(219, 234, 254, 0.98)":bM,stroke:yM,strokeWidth:n})}function YS({shape:e,shapeEditingSession:t=null,fill:n=e.props.fill,stroke:i=e.props.stroke,strokeWidth:o=e.props.strokeWidth}){const{renderBounds:r}=nS({props:{...e.props,strokeWidth:o}}),s=jS(e);if(!s)return null;const a=t?.shapeId===e.id;
35
- return Bx("svg",{width:"100%",height:"100%",viewBox:`${r.x} ${r.y} ${Math.max(r.w,1)} ${Math.max(r.h,1)}`,style:{display:"block",overflow:"visible"},shapeRendering:"geometricPrecision",children:[D(n)?null:Ax("path",{d:s,fill:F(n),fillRule:e.props.fillRule,clipRule:e.props.fillRule,stroke:"none"}),
36
- Ax("path",{d:s,fill:"none",stroke:F(i),strokeWidth:o,strokeLinecap:"round",strokeLinejoin:"round"}),a?Ax(VS,{shape:e}):null]})}function qS({shape:e,strokeWidth:t}){const{renderBounds:n}=nS(e),i=jS(e);return i?Ax("svg",{"data-ui":"path-hover-outline",width:"100%",height:"100%",viewBox:`${n.x} ${n.y} ${Math.max(n.w,1)} ${Math.max(n.h,1)}`,style:{display:"block",overflow:"visible",pointerEvents:"none"},shapeRendering:"geometricPrecision",children:Ax("path",{d:i,fill:"none",stroke:Dw,strokeWidth:t,strokeLinecap:"round",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke"})}):null}function jS(e){const t=(e=>NS(e).previewNodeId)(e);return Nm(((e,t)=>t?e.map(e=>({...e,nodes:e.nodes.filter(e=>e.id!==t).map(e=>({...e}))})).filter(e=>e.nodes.length>0):e.map(e=>({...e,nodes:e.nodes.map(e=>({...e}))})))(e.props.subpaths,t))}function VS({shape:e}){
37
- return Ax(Ex,{children:e.props.subpaths.flatMap(e=>e.nodes.flatMap(t=>{const n=Ym(t),i=[];if(t.in){const o=qm(t);i.push(Ax("line",{x1:n.x,y1:n.y,x2:o.x,y2:o.y,stroke:"rgba(37, 99, 235, 0.44)",strokeWidth:1,strokeDasharray:"4 3",vectorEffect:"non-scaling-stroke"},`${e.id}:${t.id}:in`))}if(t.out){const o=jm(t);i.push(Ax("line",{x1:n.x,y1:n.y,x2:o.x,y2:o.y,stroke:"rgba(37, 99, 235, 0.44)",strokeWidth:1,strokeDasharray:"4 3",vectorEffect:"non-scaling-stroke"},`${e.id}:${t.id}:out`))}return i}))})}function GS(e,t){const n=Zo();Qo(n.shapeEditingSessionSignal);const i=BS(n),o=Rm(e,t);return!!i&&!!o&&US(i,o.subpathId,o.nodeId)}function ZS(e,t,n){const i=Km(t.props.subpaths),o="create"===n?NS(t):null;return{subpaths:i,draftMeta:o,selection:BS(e),signature:JSON.stringify({subpaths:i,draftMeta:o})}}function QS(e){return JSON.stringify((e=>({...e,meta:{...e.meta},props:{...e.props,fill:{...e.props.fill},stroke:{...e.props.stroke},subpaths:Km(e.props.subpaths)}}))(e))}function JS(e){const t=IM.get(e);if(t)return t;const n=new xM(e);return IM.set(e,n),n}function ey(e,t,n,i){return JS(e).start(t,n,i)}function ty(e,t){return JS(e).record(t)}function ny(e,t,n){return JS(e).end(t,n)}function iy(e){return wM.get(e)??!1}function oy(e){return((e,t)=>{const n=e.getShapeEditingSession(),i=n?e.getShape(n.shapeId):null;return!(!n||!Fm(i))&&(iy(e)===t||(wM.set(e,t),t||e.snaps.clearIndicators(),e.updateSession({shapeEditingSession:{...n}},"system")),t)})(e,!iy(e))}function ry(e){wM.delete(e),e.snaps.clearIndicators()}function sy(e){const t=e.getShapeEditingSession();if(!t)return null;const n=e.getShape(t.shapeId);return Fm(n)?n:null}function ay(e,t,n){return e.computeShapeLocalToPageTransform(t).invert().applyToPoint(n)}function ly(e){Lm(e,null)}function dy(e){ly(e),LS(e)}function cy(e){return e.shiftKey}function uy(e){return JSON.stringify([e.subpathId,e.nodeId])}function hy(e,t){const n=CM.get(e);if(!n)return;if(t.pointerId!==n.pointerId)return;const i=e.getShape(n.shapeId);if(!Fm(i))return void py(e);if(!(n.isActive||(o=n.originScreenPoint,r=t.screenPoint,o.dist2(r)>=9)))return;var o,r;n.isActive=!0;const s=((e,t)=>{const n=Math.min(e.x,t.x),i=Math.min(e.y,t.y),o=Math.max(e.x,t.x),r=Math.max(e.y,t.y);return new aI(n,i,o-n,r-i)})(n.originPagePoint,t.pagePoint),a=((e,t,n)=>{const i=e.computeShapeLocalToPageTransform(t);return t.props.subpaths.flatMap(e=>e.nodes.flatMap(t=>{const o=i.applyToPoint(Ym(t));return n.containsPoint(o)?[{subpathId:e.id,nodeId:t.id}]:[]}))})(e,i,s),l=cy(t)?((e,t)=>{const n=new Map(e.map(e=>[uy(e),{...e}]));for(const i of t){const e=uy(i);n.has(e)?n.delete(e):n.set(e,{...i})}return Array.from(n.values())})(n.previousEntries,a):a;e.setBrushBox(s),FS(e,i,l,l.at(-1)??null)}function py(e){const t=CM.get(e);if(!t)return;const n=e.getShape(t.shapeId);Fm(n)&&e.getShapeEditingSession()?.shapeId===t.shapeId?FS(e,n,t.previousEntries,t.previousPrimary):LS(e),CM.delete(e),e.setBrushBox(null)}function gy(e,t,n,i){const o=e.getShape(t);Fm(o)&&FS(e,o,n,i)}function fy(e){return e.filter(e=>e.nodes.length>=2)}function my(e,t){e.completeEditing("user"),e.getShape(t.id)&&e.operations.run({kind:"path.shape-delete",label:"shape.delete",source:"user",history:"record"},()=>{e.commands.deleteShapes([t.id],{source:"user"})})}function Sy(e,t,n){const i=fy(((e,t)=>{const n=yS(t);return 0===n.size?Km(e):e.map(e=>{const t=n.get(e.id);if(!t)return Hm(e);const i=e.nodes.filter(e=>!t.has(e.id)).map(Xm),o=e.closed&&i.length>=3;return e.closed&&!o&&kS(i),{...e,closed:o,nodes:i}}).filter(e=>e.nodes.length>0)})(t.props.subpaths,n));0!==i.length?(e.commands.updateShapes([{id:t.id,props:{subpaths:i}}],{source:"user"}),LS(e),ty(e,t.id)):my(e,t)}function yy(e,t){const n=RS(e);if(!n||n.shape.isLocked)return!1;const{shape:i,selection:o}=n,r=SS(i.props.subpaths,o.nodes,t,o.primary);if(!r)return!1;const s=fy(r.subpaths);return 0===s.length?(my(e,i),!0):(e.operations.run({kind:"path.node-operation",label:"shape.edit",source:"user",history:"record"},()=>{e.commands.updateShapes([{id:i.id,props:{subpaths:s}}],{source:"user"}),gy(e,i.id,r.selectedNodes,r.primaryNode)}),ty(e,i.id),!0)}function by(e,t){const n=sy(e);if(n&&e.isActiveToolInInitialState()&&("Enter"===t.key||"Escape"===t.key)&&!t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.accelKey)return e.completeEditing("user");if(!(n||"Enter"!==t.key||t.altKey||t.ctrlKey||t.metaKey||t.accelKey))return(e=>{if(e.getShapeEditingSession()||"select"!==e.getActiveToolId()||!e.isActiveToolInInitialState())return!1;const t=e.getSelectedShapeIds(),[n]=e.getSelectedShapes();return!(1!==t.length||!Fm(n)||!e.canEditShape(n)||(dy(e),ry(e),!e.startEditingShape({shapeId:n.id,markId:vM,entryMode:"focusEnd"},"user")))})(e);if(n&&t.accelKey&&"z"===t.key.toLowerCase()&&!t.altKey)return t.shiftKey?e.redo():e.undo();if(t.accelKey&&("'"===t.key||"Quote"===t.code)&&n&&!n.isLocked)return oy(e),e.inputs.state.get().isPointing&&e.tools.dispatch(t),!0;if(t.accelKey&&"j"===t.key.toLowerCase()&&!t.altKey&&n&&!n.isLocked)return yy(e,"merge");const i=(e=>{if(e.altKey||e.ctrlKey||e.metaKey||e.accelKey)return null;const t=e.shiftKey?10:1;switch(e.key){case"ArrowLeft":return new sI(-t,0);case"ArrowRight":return new sI(t,0);case"ArrowUp":return new sI(0,-t);case"ArrowDown":return new sI(0,t);default:return null}})(t);if(i)return function(e,t){const n=RS(e);if(!n||n.shape.isLocked)return!1;const{shape:i,selection:o}=n,r=((e,t,n)=>{const i=e.computeShapeLocalToPageTransform(t).invert(),o=i.applyToPoint(new sI(0,0));return i.applyToPoint(n).sub(o)})(e,i,t),s=gS(i.props.subpaths,o.nodes,e=>wy(e,r));return e.operations.run({kind:"path.node-nudge",label:"shape.edit",source:"user",history:"record"},()=>{e.commands.updateShapes([{id:i.id,props:{subpaths:s}}],{source:"user"}),gy(e,i.id,o.nodes,o.primary)}),ty(e,i.id),!0}(e,i);if(t.altKey||t.ctrlKey||t.metaKey||t.accelKey)return!1;const o=RS(e);if(!o||o.shape.isLocked)return!1;const r=t.key.toLowerCase();return"backspace"===r||"delete"===r?(Sy(e,o.shape,o.selection.nodes),!0):"c"===r?((e,t,n)=>{const i=n.filter(e=>{const n=hS(t.props.subpaths,e.subpathId,e.nodeId);return!!n&&!n.in&&!n.out});if(0===i.length)return!1;const o=i.reduce((e,t)=>fS(e,t.subpathId,t.nodeId),t.props.subpaths);return e.commands.updateShapes([{id:t.id,props:{subpaths:o}}],{source:"user"}),gy(e,t.id,n,n.at(-1)??null),ty(e,t.id),!0})(e,o.shape,o.selection.nodes):"x"===r?(((e,t,n)=>{const i=n.reduce((e,t)=>mS(e,t.subpathId,t.nodeId),t.props.subpaths);e.commands.updateShapes([{id:t.id,props:{subpaths:i}}],{source:"user"}),gy(e,t.id,n,n.at(-1)??null),ty(e,t.id)})(e,o.shape,o.selection.nodes),!0):"j"===r?yy(e,"join"):"k"===r&&yy(e,"separate")}function xy(e,t,n){const i=n?e.len():t?.len()??e.len();if(0===i)return null;const o=e.normalize().mul(-i);return{dx:o.x,dy:o.y}}function Iy(e,t){const n=t.sub(e),i=n.len();if(0===i)return t.clone();const o=Math.round(Math.atan2(n.y,n.x)/PM)*PM;return e.add(new sI(Math.cos(o)*i,Math.sin(o)*i))}function wy(e,t){return{...e,x:e.x+t.x,y:e.y+t.y}}function vy(e,t){return"number"==typeof e&&Number.isFinite(e)?e:t}function Py(e){if(!e||"object"!=typeof e)return null;const t=e,n=vy(t.dx,NaN),i=vy(t.dy,NaN);return Number.isFinite(n)&&Number.isFinite(i)?t.dx===n&&t.dy===i?e:{dx:n,dy:i}:null}function ky(e,t){if(!Array.isArray(e))return t;const n=new Set,i=e.map((e,t)=>function(e,t,n){if(!e||"object"!=typeof e)return null;const i=e,o=new Set,r=Array.isArray(i.nodes)?i.nodes.map((e,t)=>((e,t,n)=>{if(!e||"object"!=typeof e)return null;const i=e,o=vy(i.x,NaN),r=vy(i.y,NaN);return Number.isFinite(o)&&Number.isFinite(r)?{id:Cy("string"==typeof i.id&&i.id.length>0?i.id:`node:${t}`,n),x:o,y:r,kind:(s=i.kind,"string"==typeof s&&cM.includes(s)?i.kind:"corner"),in:Py(i.in),out:Py(i.out)}:null;var s})(e,t,o)).filter(e=>null!==e):[];return 0===r.length?null:{id:Cy("string"==typeof i.id&&i.id.length>0?i.id:`subpath:${t}`,n),closed:"boolean"==typeof i.closed&&i.closed,nodes:r}}(e,t,n)).filter(e=>null!==e);return i.length>0?i:t}function Cy(e,t){if(!t.has(e))return t.add(e),e;let n=2;for(;t.has(`${e}:${n}`);)n+=1;const i=`${e}:${n}`;return t.add(i),i}function Ty(e,t,n){const i=n.sub(t),o=i.len2();if(0===o)return e.dist2(t);const r=e.sub(t),s=Math.max(0,Math.min(1,(r.x*i.x+r.y*i.y)/o));return e.dist2(t.add(i.mul(s)))}function My(e,t,n,i){const o=t.sub(e),r=i.sub(n),s=o.x*r.y-o.y*r.x;if(Math.abs(s)<1e-8)return null;const a=n.sub(e),l=(a.x*r.y-a.y*r.x)/s,d=(a.x*o.y-a.y*o.x)/s;return l>=0&&l<=1&&d>=0&&d<=1?l:null}function Ey(e,t){const n=t(Ym(e)),i=e.in?t(qm(e)):null,o=e.out?t(jm(e)):null;return{...Xm(e),x:n.x,y:n.y,in:i?{dx:i.x-n.x,dy:i.y-n.y}:null,out:o?{dx:o.x-n.x,dy:o.y-n.y}:null}}function Ay(){return`node:${EM+=1}`}function By(e,t,n){return e.computeShapeLocalToPageTransform(t).invert().applyToPoint(n)}function Ry(e,t,n,i){const o=(uS(t.props.subpaths,n)?.nodes.filter(e=>e.id!==i))?.at(-1);return o?e.computeShapeLocalToPageTransform(t).applyToPoint(new sI(o.x,o.y)):null}function Ly(e,t){const n=t.sub(e),i=n.len();if(0===i)return t.clone();const o=Math.round(Math.atan2(n.y,n.x)/MM)*MM;return e.add(new sI(Math.cos(o)*i,Math.sin(o)*i))}function $y(e,t){return t.previewNodeId?e.map(e=>e.id===t.subpathId?{...e,nodes:e.nodes.filter(e=>e.id!==t.previewNodeId)}:e):Km(e)}function Fy(e,t){return uS(e.props.subpaths,t.subpathId)?.nodes.filter(e=>e.id!==t.previewNodeId).length??0}function Uy(e,t){return Math.abs(e[0]-t[0])<1e-6&&Math.abs(e[1]-t[1])<1e-6}function Dy(e){return sS(e.shape,e.localToPage).filter(e=>e.closed&&e.nodes.length>=3).map(e=>(e=>{const t=[];for(const n of e){const e=[n.x,n.y],i=t[t.length-1];i&&Uy(i,e)||t.push(e)}return t.length>1&&Uy(t[0],t[t.length-1])&&t.pop(),t.length>=3?t:null})(tS(e).points)).filter(e=>null!==e).map(e=>[e])}function Oy(e){const t=e.length>1&&Uy(e[0],e[e.length-1])?e.slice(0,-1):e;return t.length<3?null:{id:`boolean-subpath:${FM+=1}`,closed:!0,nodes:t.map(([e,t])=>({id:`boolean-node:${UM+=1}`,x:e,y:t,kind:"corner"}))}}function zy(){return{id:"path.floating-node-snap",items:[{kind:"button",id:"path.floating-node.snap",actionId:zM,label:"Snap nodes",shortcut:"Mod+'",icon:"magnet",dataUi:"floating-path-node-snap-button"}]}}function Ny(){return{id:"path.floating-edit-session",items:[{kind:"button",id:"path.floating-edit.done",actionId:OM,label:"Done editing",icon:"check",dataUi:"floating-path-edit-done-button"}]}}function _y({fillActionId:e,strokeActionId:t,strokeWidthActionId:n,dataUiPrefix:i}){return[{id:`${i}.style-fill`,items:[{kind:"color-input",id:`${i}.fill`,actionId:e,label:"Fill",fallback:"#f8fafc",presets:GM.map(e=>({...e,dataUi:`${i}-fill-${e.id}-button`})),dataUi:`${i}.fill`}]},{id:`${i}.style-stroke`,items:[{kind:"color-input",id:`${i}.stroke`,actionId:t,label:"Stroke",previewStyle:"outline",fallback:"#334155",presets:ZM.map(e=>({...e,dataUi:`${i}-stroke-${e.id}-button`})),dataUi:`${i}.stroke`}]},{id:`${i}.style-stroke-width`,items:[{kind:"text-input",id:`${i}.stroke-width`,actionId:n,label:"Stroke width",placeholder:"3",suffix:"Px",validate:Vy,dataUi:`${i}-stroke-width-control`}]}]}function Wy(e){return{id:`path.set-${e}`,getAvailability:e=>"path"!==e.selection.commonShapeType?"inapplicable":e.selection.count>0?"enabled":"disabled",getValue:t=>((e,t)=>{let n;for(const i of e){if(!Fm(i))continue;const e=i.props[t];if(void 0!==n){if("strokeWidth"===t?n!==e:!O(n,e))return null}else n=e}return n??null})(t.selection.selectedShapes,e),run({context:t,value:n}){const i=qy(e,n);if(void 0===i)return;const o=t.selection.selectedShapes.filter(Fm).filter(e=>!e.isLocked).map(t=>({id:t.id,props:{[e]:i}}));o.length>0&&t.editor.commands.updateShapes(o,{source:"user"})}}}function Xy(e){return{id:`path.default-${e}`,getAvailability:e=>"path"===e.tool.activeToolId?"enabled":"inapplicable",getValue:t=>t.editor.getDefaultShapeProps("path")[e],run({context:t,value:n}){const i=qy(e,n);void 0!==i&&t.editor.updateDefaultShapeProps("path",{[e]:i})}}}function Hy(e,t){return{id:e,getAvailability(e){const n=RS(e.editor);return n?!n.shape.isLocked&&((e,t,n)=>null!==SS(e,t,n))(n.shape.props.subpaths,n.selection.nodes,t)?"enabled":"disabled":"inapplicable"},run({context:e}){const n=RS(e.editor);n&&!n.shape.isLocked&&yy(e.editor,t)}}}function Ky(e){return{id:`path.boolean.${e}`,getAvailability:e=>"path"!==e.selection.commonShapeType?"inapplicable":Yy(e).length>=2?"enabled":"disabled",run({context:t}){const n=Yy(t),i=n[0];if(!i||n.length<2)return;const o=((e,t,n)=>{const i=function(e,t){const n=t.map(Dy).filter(e=>e.length>0);return 0===n.length?[]:((e,t)=>{const[n,...i]=t;if(!n)return[];if(0===i.length)return n;switch(e){case"union":return(0,$M.union)(n,...i);case"subtract":return(0,$M.difference)(n,...i);case"intersect":return(0,$M.intersection)(n,...i);case"xor":return(0,$M.xor)(n,...i)}})(e,n).flatMap(e=>e).map(Oy).filter(e=>null!==e)}(e,t);return 0===i.length?null:rS(i,{...n,fillRule:"evenodd"})})(e,n.map(e=>({shape:e,localToPage:t.editor.computeShapeLocalToPageTransform(e)})),{fill:i.props.fill,stroke:i.props.stroke,strokeWidth:i.props.strokeWidth});o&&t.editor.operations.run({kind:`path.boolean.${e}`,label:"shape.boolean",source:"user",history:"record"},()=>{const[e]=t.editor.commands.createShapes([{type:"path",x:o.x,y:o.y,parentId:i.parentId,props:{...i.props,subpaths:o.subpaths,fillRule:"evenodd"}}],{source:"user"});t.editor.commands.deleteShapes(n.map(e=>e.id),{source:"user"}),e&&t.editor.commands.setSelectedShapeIds([e.id],{source:"system"})})}}}function Yy(e){return e.selection.selectedShapes.filter(Fm).filter(e=>!e.isLocked).filter(e=>e.props.subpaths.some(e=>e.closed&&e.nodes.length>=3))}function qy(e,t){return"strokeWidth"===e?jy(t):R(t)?$(t,M("fill"===e?"fill-blue":"stroke-slate")):void 0}function jy(e){const t="number"==typeof e?e:"string"==typeof e&&e.trim().length>0?Number(e):NaN;return Number.isFinite(t)&&t>0?t:void 0}function Vy(e){return void 0!==jy(e)}async function Gy(e){const t=await(async(e,t)=>(await ep(e,[t]))?.[0]??null)(SC,e);return t instanceof Blob?t:null}async function Zy(e){await(async(e,t)=>{const n=await Jh();n&&await new Promise((i,o)=>{const r=n.transaction(e,"readwrite"),s=r.objectStore(e);r.addEventListener("complete",()=>i()),r.addEventListener("abort",()=>o(r.error)),r.addEventListener("error",()=>o(r.error)),s.delete(t)})})(SC,e)}function Qy(e,t){const n=e.getAsset(t);if(!Uf(n)||"local"!==n.props.source.kind)return null;const{storageKey:i}=n.props.source;return i.length>0?i:null}function Jy(e){const t=new Set;for(const n of e.getAssets())Uf(n)&&"local"===n.props.source.kind&&n.props.source.storageKey.length>0&&t.add(n.props.source.storageKey);return t}function eb(e){return new Promise((t,n)=>{const i=new Image;i.addEventListener("load",()=>{t({width:i.naturalWidth||i.width,height:i.naturalHeight||i.height})}),i.addEventListener("error",()=>{n(new Error("Could not decode image file."))}),i.src=e})}async function tb(e){const t=ib(e)?e:e.blob,n=(ib(e),e.name),i=ib(e)?e.type:e.mimeType||e.blob.type,o=URL.createObjectURL(t),r=await eb(o).finally(()=>{URL.revokeObjectURL(o)}),{storageKey:s}=await async function(e){const t="undefined"!=typeof crypto&&"randomUUID"in crypto?`${tE}${crypto.randomUUID()}`:`${tE}${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;if("undefined"==typeof indexedDB)throw new Error("IndexedDB is not available for image storage.");return await tp(SC,[[t,e]]),{storageKey:t}}(t);return{name:n||"Image",source:{kind:"local",storageKey:s,...!ib(e)&&e.originalUrl?{originalUrl:e.originalUrl}:{}},mimeType:i||"image/png",fileSize:t.size,width:r.width,height:r.height}}async function nb({name:e,url:t}){const n=await fetch(t);if(!n.ok)throw new Error(`Could not download image URL (${n.status}).`);const i=await n.blob();return tb({blob:i,name:e||ob(t)||"Image",mimeType:i.type||n.headers.get("content-type")||void 0,originalUrl:t})}function ib(e){return"undefined"!=typeof File&&e instanceof File}function ob(e){try{const t=new URL(e).pathname.split("/").filter(Boolean).at(-1);return t?decodeURIComponent(t):null}catch{return null}}function rb(e){for(const t of e)if(t.type.startsWith("image/"))return t;return null}function sb({filename:e,url:t}){const n=document.createElement("a");n.href=t,n.download=e,n.click()}async function ab({blob:e,filename:t}){const n=URL.createObjectURL(e);try{sb({filename:t,url:n})}finally{window.setTimeout(()=>URL.revokeObjectURL(n),0)}}function lb(e,t){return e.commands.createAsset({type:"image",props:{w:t.width,h:t.height,name:t.name,source:t.source,mimeType:t.mimeType,fileSize:t.fileSize,isAnimated:"image/gif"===t.mimeType}},{source:"user"})}function db(e,t){return e.getDocumentSnapshot().records.some(e=>"shape"===e.typeName&&e.props.assetId===t)}async function cb({editor:e,imageObjectUrls:t,pagePoint:n,size:i,flushSnapshot:o,source:r,strategy:s="auto"}){if("file"===r.type)return xb(r.file)?hb({editor:e,imageObjectUrls:t,input:await tb(r.file),pagePoint:n,size:i,flushSnapshot:o}):null;if("blob"===r.type)return xb(r.blob)?hb({editor:e,imageObjectUrls:t,input:await tb(r),pagePoint:n,size:i,flushSnapshot:o}):null;if("copy"===s)return hb({editor:e,imageObjectUrls:t,input:await nb(r),pagePoint:n,size:i,flushSnapshot:o});if("link"===s)return ub({editor:e,imageObjectUrls:t,source:r,pagePoint:n,size:i,flushSnapshot:o,copyInBackground:!1});try{return await ub({editor:e,imageObjectUrls:t,source:r,pagePoint:n,size:i,flushSnapshot:o,copyInBackground:!0})}catch{return hb({editor:e,imageObjectUrls:t,input:await nb(r),pagePoint:n,size:i,flushSnapshot:o})}}async function ub({copyInBackground:e,editor:t,flushSnapshot:n,imageObjectUrls:i,pagePoint:o,size:r,source:s}){const a=await(async({name:e,url:t})=>{const n=await eb(t);return{name:e||ob(t)||"Image",source:{kind:"remote",url:t},mimeType:null,width:n.width,height:n.height}})(s),l={kind:"remote",url:s.url,...e?{copyState:{status:"pending-local-copy"}}:{}},d=await hb({editor:t,imageObjectUrls:i,input:{...a,source:l},pagePoint:o,size:r,flushSnapshot:n,altText:s.altText}),c=d?t.getShape(d):null,u=Df(c)?c.props.assetId:null;return e&&u&&pb({assetId:u,editor:t,flushSnapshot:n,imageObjectUrls:i,source:s}),d}async function hb({editor:e,imageObjectUrls:t,input:n,pagePoint:i,size:o,flushSnapshot:r,altText:s}){const a="local"===n.source.kind?n.source.storageKey:null;a&&await t.preload(a);let l=null;try{const t=lb(e,n);l=t.id;const a=o??(({height:e,width:t})=>{const n=Math.min(1,360/Math.max(t,e));return{w:Math.max(24,Math.round(t*n)),h:Math.max(24,Math.round(e*n))}})({width:t.props.w,height:t.props.h}),d=e.viewportPageBoundsSignal.get(),c=i??d?.center??e.screenToPage(new sI(360,240)),[u]=e.commands.createShapes([{type:"image",x:Math.round(c.x-a.w/2),y:Math.round(c.y-a.h/2),props:{...a,assetId:t.id,crop:null,altText:s??n.name}}],{source:"user"});return u?(e.commands.setSelectedShapeIds([u.id],{source:"user"}),await(r?.()),u.id):null}catch(d){throw l&&e.commands.deleteAsset(l,{source:"system"}),a&&(t.release(a),await Zy(a)),d}}async function pb({assetId:e,editor:t,flushSnapshot:n,imageObjectUrls:i,source:o}){try{const r=await nb(o),s="local"===r.source.kind?r.source.storageKey:null;if(!s)return;await i.preload(s);const a=t.getAsset(e);if(!Uf(a)||"remote"!==a.props.source.kind||a.props.source.url!==o.url||!db(t,e))return i.release(s),void(await Zy(s));t.commands.updateAsset({id:e,props:{w:r.width,h:r.height,name:r.name,source:r.source,mimeType:r.mimeType,fileSize:r.fileSize,isAnimated:"image/gif"===r.mimeType}},{source:"system"}),await(n?.())}catch(r){await(async({assetId:e,editor:t,error:n,flushSnapshot:i,url:o})=>{const r=t.getAsset(e);Uf(r)&&"remote"===r.props.source.kind&&r.props.source.url===o&&(t.commands.updateAsset({id:e,props:{source:{kind:"remote",url:o,copyState:{status:"copy-failed",errorMessage:Ib(n)}}}},{source:"system"}),await(i?.()))})({assetId:e,editor:t,error:r,flushSnapshot:n,url:o.url})}}async function gb({editor:e,file:t,imageObjectUrls:n,flushSnapshot:i}){if(!xb(t))return;const[o]=e.getSelectedShapes();if(!Df(o)||o.isLocked)return;const r=await tb(t);await mb({editor:e,flushSnapshot:i,imageObjectUrls:n,input:r,nextProps:{crop:null,altText:r.name},shape:o})}async function fb({editor:e,imageObjectUrls:t}){const[n]=e.getSelectedShapes();if(!Df(n)||!n.props.assetId)return;const i=e.getAsset(n.props.assetId);if(!Uf(i))return;const o="string"==typeof i.props.name&&i.props.name.length>0?i.props.name:"land-image";if("remote"===i.props.source.kind)return void(await(async({filename:e,url:t})=>{try{const n=await fetch(t);if(!n.ok)throw new Error(`Could not download image URL (${n.status}).`);await ab({blob:await n.blob(),filename:e})}catch(n){console.warn("Could not download remote image; opening URL instead.",n),(e=>{const t=document.createElement("a");t.href=e,t.rel="noreferrer",t.target="_blank",t.click()})(t)}})({filename:o,url:i.props.source.url}));const r=i.props.source.storageKey;if(!r)return;const s=await Gy(r);if(s)return void(await ab({blob:s,filename:o}));const a=t.resolve(r);a&&sb({filename:o,url:a})}async function mb({canCommit:e,editor:t,flushSnapshot:n,imageObjectUrls:i,input:o,nextProps:r,shape:s}){const a=s.props.assetId,l="local"===o.source.kind?o.source.storageKey:null;try{l&&await i.preload(l)}catch(p){throw await yb({imageObjectUrls:i,storageKey:l}),p}const d=t.getShape(s.id);if(!Df(d)||d.isLocked||d.props.assetId!==a||e&&!e())return await yb({imageObjectUrls:i,storageKey:l}),null;const c=`image.asset.replace:${s.id}:${nE++}`,u=t.operations.begin({kind:c,label:"image.asset.replace",source:"user",history:"record"});let h;try{const e=lb(t,o);t.commands.updateShapes([{id:s.id,props:{assetId:e.id,...r}}],{source:"user"}),a&&!db(t,a)&&t.commands.deleteAsset(a,{source:"user"}),u.commit(),h={assetId:e.id,storageKey:l}}catch(p){throw u.isActive&&u.cancel(),await yb({imageObjectUrls:i,storageKey:l}),p}return await Sb({flushSnapshot:n,operation:"image replacement"}),h}async function Sb({flushSnapshot:e,operation:t}){if(e)try{await e()}catch(n){console.warn(`Could not persist ${t}; the local change remains available.`,n)}}async function yb({imageObjectUrls:e,storageKey:t}){t&&(e.release(t),await Zy(t))}async function bb(e){try{const t=await fetch(e);if(!t.ok)return null;const n=await t.blob();return xb(n)?n:null}catch{return null}}function xb(e){return!e.type||e.type.startsWith("image/")}function Ib(e){return e instanceof Error?e.message:String(e)}function wb(e){const t=globalThis.reportError;"function"!=typeof t?console.error(e):t(e)}function vb({flushSnapshot:e}={}){return{token:oE,create(){const t=function(){const e=new Map,t=new Map;let n=0,i=!1;const o=async(o,r={})=>{if(r.signal?.throwIfAborted(),i)return null;const s=e.get(o);if(s)return s;const a=t.get(o);if(a)return a;const l=n,d=Gy(o).then(t=>{if(r.signal?.throwIfAborted(),!t||i||l!==n)return null;const s=URL.createObjectURL(t);return e.set(o,s),s}).finally(()=>{t.delete(o)});return t.set(o,d),d};return{async preloadForEditor(e,t={}){t.signal?.throwIfAborted(),await Promise.all(Array.from(Jy(e)).map(e=>o(e,t)))},preload:o,resolve:t=>e.get(t)??null,resolveAssetUrl(t,n){const i=((e,t)=>{const n=e.getAsset(t);return Uf(n)&&"remote"===n.props.source.kind&&n.props.source.url.length>0?n.props.source.url:null})(t,n);if(i)return i;const o=Qy(t,n);return o?e.get(o)??null:null},release(n){const i=e.get(n);i&&(URL.revokeObjectURL(i),e.delete(n)),t.delete(n)},releaseAll(){i=!0,n+=1;for(const t of e.values())URL.revokeObjectURL(t);e.clear(),t.clear()}}}(),n=new Set,i=(i,o)=>{if(n.has(o))return;const r=i.getAsset(o);Uf(r)&&"remote"===r.props.source.kind&&"pending-local-copy"===r.props.source.copyState?.status&&(n.add(o),pb({assetId:o,editor:i,flushSnapshot:e,imageObjectUrls:t,source:{type:"url",url:r.props.source.url,name:r.props.name}}).finally(()=>{n.delete(o)}))};return{objectUrls:t,async cleanupAfterRestore(e,{signal:n}){n.throwIfAborted(),await(async({editor:e,objectUrls:t})=>{const n=Jy(e),i=await async function(){return(await(async e=>{const t=await Jh();return t?new Promise((n,i)=>{const o=t.transaction(e,"readonly"),r=o.objectStore(e).getAllKeys();o.addEventListener("abort",()=>i(o.error)),o.addEventListener("error",()=>i(o.error)),r.addEventListener("success",()=>{n([...r.result])}),r.addEventListener("error",()=>i(r.error))}):null})("imageBlobs"))?.map(String)??[]}(),o=[];for(const r of i)n.has(r)||(t?.release(r),await Zy(r),o.push(r));return o})({editor:e,objectUrls:t}),n.throwIfAborted(),(e=>{for(const t of e.getAssets())Uf(t)&&i(e,t.id)})(e)},preloadForEditor:(e,{signal:n})=>t.preloadForEditor(e,{signal:n}),resolveAssetUrl:(e,n)=>(i(e,n),t.resolveAssetUrl(e,n))}},dispose(e){e.objectUrls.releaseAll()}}}function Pb(e,t,n,i){if(Lf(e)!==t)return!1;const o=e.getShape(t.shapeId);return Df(o)&&!o.isLocked&&o.props.assetId===n&&((e,t)=>{if(e.props.w!==t.props.w||e.props.h!==t.props.h)return!1;const n=e.props.crop,i=t.props.crop;return n&&i?n.topLeft.x===i.topLeft.x&&n.topLeft.y===i.topLeft.y&&n.bottomRight.x===i.bottomRight.x&&n.bottomRight.y===i.bottomRight.y:n===i})(o,i)}function kb(e,t){if("undefined"!=typeof OffscreenCanvas){const n=new OffscreenCanvas(e,t),i=n.getContext("2d");if(!i)throw new Error("Could not create image smudge canvas context.");return{context:i,toBlob:e=>n.convertToBlob({type:e})}}const n=document.createElement("canvas");n.width=e,n.height=t;const i=n.getContext("2d");if(!i)throw new Error("Could not create image smudge canvas context.");return{context:i,toBlob:e=>new Promise((t,i)=>{n.toBlob(e=>{e?t(e):i(new Error("Could not encode image smudge canvas."))},e)})}}function Cb({context:e,crop:t,imageHeight:n,imageWidth:i,mask:o,shape:r,strokes:s}){if(0===s.length)return;const a=hf(t),l={x:a.left*i,y:a.top*n,w:a.width*i,h:a.height*n},d=l.w/r.props.w,c=l.h/r.props.h,u=(Math.abs(d)+Math.abs(c))/2;e.save(),e.beginPath(),e.rect(l.x,l.y,l.w,l.h),e.clip(),e.lineCap="round",e.lineJoin="round";for(const h of s){const t=h.points[0];if(!t)continue;const n=Mb(h.brush.opacity),i=Math.max(1,h.brush.size*u),r=h.brush.color??"#ffff00";e.globalAlpha=n,e.strokeStyle=o?"#ffffff":r,e.fillStyle=o?"#ffffff":r,e.lineWidth=i;const s=Tb({cropPixelRect:l,point:t,scaleX:d,scaleY:c});if(1!==h.points.length){e.beginPath(),e.moveTo(s.x,s.y);for(const t of h.points.slice(1)){const n=Tb({cropPixelRect:l,point:t,scaleX:d,scaleY:c});e.lineTo(n.x,n.y)}e.stroke()}else e.beginPath(),e.arc(s.x,s.y,i/2,0,2*Math.PI),e.fill()}e.restore()}function Tb({cropPixelRect:e,point:t,scaleX:n,scaleY:i}){return{x:e.x+t.x*n,y:e.y+t.y*i}}function Mb(e){return"number"==typeof e&&Number.isFinite(e)?Math.min(1,Math.max(0,e)):.45}function Eb(e){const t=e.trim();if(!t)return"Image smudged.png";const n=t.lastIndexOf(".");return n<=0?`${t} smudged.png`:`${t.slice(0,n)} smudged.png`}function Ab({editor:e,flushSnapshot:t,services:n}){const i=n.get(oE);if(!i)return null;const o={start(t){const n=t?.shapeId?e.getShape(t.shapeId):e.getSelectedShapes()[0];return!(!Df(n)||n.isLocked||!n.props.assetId)&&Ef({brush:t?.brush,editor:e,shape:n})},setBrush:t=>Rf(e,t),cancel(){Af(e)},confirm:n=>async function({editor:e,imageObjectUrls:t,flushSnapshot:n,replace:i=!0}){const o=Lf(e);if(!o)return null;const r=(e=>e.map(e=>({id:e.id,brush:{...e.brush},points:e.points.map(Ff)})))(o.strokes);if(0===r.length)return Bf(e),null;if(rE.has(o))return null;rE.add(o);try{return await(async({editor:e,imageObjectUrls:t,flushSnapshot:n,replace:i,session:o,strokes:r})=>{const s=e.getShape(o.shapeId);if(!Df(s)||s.isLocked||!s.props.assetId)return null;const a=e.getAsset(s.props.assetId);if(!Uf(a))return null;const l=s.props.assetId,d=await(async({asset:e,imageObjectUrls:t})=>{if("remote"===e.props.source.kind)return bb(e.props.source.url);const n=e.props.source.storageKey,i=await Gy(n);if(i)return i;const o=t.resolve(n);return o?bb(o):null})({asset:a,imageObjectUrls:t});if(!d)return null;if(!Pb(e,o,l,s)||e.getAsset(l)!==a)return null;const{imageBlob:c,maskBlob:u,height:h,width:p}=await(async({crop:e,shape:t,sourceBlob:n,strokes:i})=>{const o=await(async e=>{if("function"==typeof createImageBitmap){const t=await createImageBitmap(e);return{source:t,width:t.width,height:t.height,dispose(){t.close()}}}const t=URL.createObjectURL(e),n=new Image;return n.decoding="async",n.src=t,"function"==typeof n.decode?await n.decode():await new Promise((e,t)=>{n.onload=()=>e(),n.onerror=()=>t(new Error("Could not decode image."))}),{source:n,width:n.naturalWidth||n.width,height:n.naturalHeight||n.height,dispose(){URL.revokeObjectURL(t)}}})(n);try{const n=o.width,r=o.height,s=kb(n,r);s.context.drawImage(o.source,0,0,n,r),Cb({context:s.context,crop:e,imageHeight:r,imageWidth:n,mask:!1,shape:t,strokes:i});const a=kb(n,r);return Cb({context:a.context,crop:e,imageHeight:r,imageWidth:n,mask:!0,shape:t,strokes:i}),{imageBlob:await s.toBlob("image/png"),maskBlob:await a.toBlob("image/png"),width:n,height:r}}finally{o.dispose()}})({crop:s.props.crop,shape:s,sourceBlob:d,strokes:r});if(!Pb(e,o,l,s)||e.getAsset(l)!==a)return null;const g={shapeId:s.id,sourceAssetId:l,imageBlob:c,maskBlob:u,width:p,height:h,crop:s.props.crop?{topLeft:{...s.props.crop.topLeft},bottomRight:{...s.props.crop.bottomRight}}:null,strokes:r};if(i){const i=await(async({blob:e,canCommit:t,editor:n,flushSnapshot:i,imageObjectUrls:o,name:r,shape:s})=>mb({editor:n,flushSnapshot:i,imageObjectUrls:o,input:await tb({blob:e,name:r}),nextProps:{},shape:s,canCommit:t}))({blob:c,canCommit:()=>Pb(e,o,l,s)&&e.getAsset(l)===a,editor:e,imageObjectUrls:t,name:Eb(a.props.name),shape:s});if(!i)return null;if(!Pb(e,o,i.assetId,s)){const n=Lf(e),r=e.getShape(o.shapeId);return n?.shapeId===o.shapeId&&Df(r)&&r.props.assetId===i.assetId&&Af(e),await(async({assetId:e,editor:t,imageObjectUrls:n,storageKey:i})=>{!i||e&&t.getAsset(e)||(n.release(i),await Zy(i))})({assetId:i.assetId,editor:e,imageObjectUrls:t,storageKey:i.storageKey}),null}return Bf(e),await Sb({flushSnapshot:n,operation:"image smudge confirmation"}),g}return Bf(e),g})({editor:e,flushSnapshot:n,imageObjectUrls:t,replace:i,session:o,strokes:r})}finally{rE.delete(o)}}({editor:e,flushSnapshot:t,imageObjectUrls:i.objectUrls,replace:n?.replace??!0}),isActive:()=>!!Lf(e)};return(e=>{kf(e).registerConfirmHandler(e=>o.confirm(e))})(e),{insertImage:({source:n,pagePoint:o,size:r,strategy:s})=>cb({editor:e,imageObjectUrls:i.objectUrls,source:n,pagePoint:o,size:r,strategy:s,flushSnapshot:t}),async replaceSelectedImage({file:n}){if(!n.type.startsWith("image/"))return!1;const[o]=e.getSelectedShapes();return!(!Df(o)||o.isLocked||(await gb({editor:e,file:n,imageObjectUrls:i.objectUrls,flushSnapshot:t}),0))},downloadSelectedImageOriginal:()=>fb({editor:e,imageObjectUrls:i.objectUrls}),smudge:o}}function Bb(e,t){const n=new Map;for(const i of t){if(!Df(i)||!i.props.assetId)continue;const t=e.getAsset(i.props.assetId);if(!Uf(t))throw new Error(`Image asset "${i.props.assetId}" is unavailable.`);n.set(t.id,t)}return n}async function Rb(e,t){const{source:n}=e.props;if("local"===n.kind){const i=await(async e=>{const t=await Gy(e);return t?Oh(t):null})(n.storageKey);if(!i)throw new Error(`Could not embed local image asset "${e.id}".`);return{href:t,dataUrl:i}}if(t.startsWith("data:"))return{href:t,dataUrl:t};let i;try{i=await fetch(t)}catch(r){throw new Error(`Could not download image asset "${e.id}".`,{cause:r})}if(!i.ok)throw new Error(`Could not download image asset "${e.id}" (${i.status}).`);const o=await Oh(await i.blob());if(!o)throw new Error(`Could not embed remote image asset "${e.id}".`);return{href:t,dataUrl:o}}function Lb(e,t){return"local"===e.props.source.kind?t.objectUrls.resolve(e.props.source.storageKey):e.props.source.url}function $b(e){return e.replaceAll("&","&amp;").replaceAll('"',"&quot;").replaceAll("<","&lt;").replaceAll(">","&gt;")}function Fb({editor:e,flushSnapshot:t,imports:n,services:i}){const o=i.get(oE);return o?Ax(iE,{editor:e,hostBridge:i.get(lE)??void 0,imageAssetService:o,imports:n,flushSnapshot:t}):null}function Ub(e){return e.startsWith("data:image/")||/\.(?:avif|bmp|gif|jpe?g|png|svg|webp)(?:[?#].*)?$/i.test(e)}async function Db(e,t,n){const i=Array.from(e.matchAll(/\burl\(\s*(["']?)(.*?)\1\s*\)/giu),e=>e[2]?.trim()).filter(e=>!!e),o=new Map;for(const r of new Set(i)){if(r.startsWith("data:")||r.startsWith("#"))continue;const e=Wb(r,t).href,i=await _b(await(await Nb(e,n)).blob(),n);o.set(r,i)}return e.replace(/\burl\(\s*(["']?)(.*?)\1\s*\)/giu,(e,t,n)=>{const i=o.get(n.trim());return i?`url(${t}${i}${t})`:e})}function Ob(e){const t=String.raw`\blocal\(\s*(?:"(?:\\.|[^"])*"|'(?:\\.|[^'])*'|[^)]*)\s*\)`;return e.replace(new RegExp(`${t}\\s*,\\s*`,"giu"),"").replace(new RegExp(`\\s*,\\s*${t}`,"giu"),"").replace(new RegExp(t,"giu"),"")}function zb(e,t){if(!/\burl\(\s*["']?data:/iu.test(e))throw new Error(`Font resource "${t}" has no embeddable source.`);return e}async function Nb(e,t){let n;try{n=await fetch(e)}catch(i){throw new Error(`Could not download font resource "${t}".`,{cause:i})}if(!n.ok)throw new Error(`Could not download font resource "${t}" (${n.status}).`);return n}async function _b(e,t){const n=await Oh(e);if(!n)throw new Error(`Could not embed font resource "${t}".`);return n}function Wb(e,t){try{return t?new URL(e,t):new URL(e,globalThis.location?.href)}catch(n){throw new Error(`Could not resolve font resource URL "${e}".`,{cause:n})}}function Xb(e,t){return Kb(e).some(e=>e.provides?.some(e=>e.id===t.id))}function Hb(e){const t=Kb(e);return Yb(t.map(({id:e})=>e),"canvas plugin id"),Yb(t.flatMap(e=>(e.provides??[]).map(({id:e})=>e)),"canvas plugin capability provider"),(e=>{const t=new Map(e.map(e=>[e.id,e])),n=new Map(e.flatMap(e=>(e.provides??[]).map(t=>[t.id,e]))),i=[],o=new Set,r=new Set,s=e=>{if(!r.has(e.id)){if(o.has(e.id))throw new Error(`Circular canvas plugin dependency detected at "${e.id}".`);o.add(e.id);for(const i of e.requires??[]){const o=Vo(i)?n.get(i.id):t.get(i.id);if(!o){const t=Vo(i)?`capability "${i.id}"`:`plugin "${i.id}"`;throw new Error(`Canvas plugin "${e.id}" requires missing ${t}.`)}s(o)}o.delete(e.id),r.add(e.id),i.push(e)}};for(const a of e)s(a);return i})(t)}function Kb(e){return e.flat(1/0)}function Yb(e,t){const n=new Set;for(const i of e){if(n.has(i))throw new Error(`Duplicate ${t}: ${i}.`);n.add(i)}}function qb(e){const[t]=e.selection.selectedShapes;return!(1!==e.selection.count||!t?.parentId.startsWith("shape:"))&&"frame"===e.editor.getShape(t.parentId)?.type}function jb(e){return Math.min(1,Math.max(0,e))}function Vb(e={}){const t=KE.filter(([t])=>!1!==e[t]).map(([t,n])=>{if("text"===t){const t=e.text;return"object"==typeof t?Ml(t):n}return n});return Hb(t),[...t,eE,pE,DE,$E,HE,...!1===e.image?[]:[dE],...!1===e.text?[]:[{id:"canvas-kit.text-svg-assets",requires:[CP],setup(e){const t=e.get(hP).get(CP);if(!t)throw new Error("Text font catalog capability is unavailable.");e.get(Mk).addSvgInliners(function(e){return{async inline({exportedShapes:t,svg:n}){const i=t.filter(fs),o=i.map(e=>qr(e.props.richText)).join(""),r=new Set(i.map(e=>e.props.font)),s=[e.defaultFont,...e.fontsById.values()].filter(t=>(({definition:e,isDefault:t,svg:n,usedFontIds:i})=>{return!!e.source&&"system"!==e.source.kind&&(t&&i.has("default")||i.has(e.id)||n.includes(`font-family:${o=e.cssFamily,o.replaceAll("&","&amp;").replaceAll('"',"&quot;").replaceAll("<","&lt;").replaceAll(">","&gt;")}`));var o})({definition:t,isDefault:t===e.defaultFont,svg:n,usedFontIds:r})),a=(await Promise.all(s.map(e=>(async(e,t)=>{const{source:n}=e;if(!n||"system"===n.kind)return"";if("stylesheet"===n.kind){const i=((e,t)=>{const n=Wb(e);if(t.length>0&&"fonts.googleapis.com"===n.hostname&&!n.searchParams.has("text")){const e=Array.from(new Set(t)).join("");encodeURIComponent(e).length<=1500&&n.searchParams.set("text",e)}return n.href})(n.cssUrl,t),o=await Nb(i,e.id);return zb(Ob(await Db(await o.text(),o.url||i,e.id)),e.id)}return(async(e,t)=>{const n="string"==typeof e.src?zb(Ob(await Db(e.src,void 0,t)),t):`url("${await _b(new Blob([e.src],{type:"application/octet-stream"}),t)}")`,i=(e=>e?[["ascent-override",e.ascentOverride],["descent-override",e.descentOverride],["font-display",e.display],["font-feature-settings",e.featureSettings],["line-gap-override",e.lineGapOverride],["font-stretch",e.stretch],["font-style",e.style],["unicode-range",e.unicodeRange],["font-weight",e.weight]].flatMap(([e,t])=>t?[`;${e}:${t}`]:[]).join(""):"")(e.descriptors);return`@font-face{font-family:${o=e.family,`"${o.replaceAll("\\","\\\\").replaceAll('"','\\"')}"`};src:${n}${i}}`;var o})(n,e.id)})(e,o)))).filter(e=>e.length>0);return a.length>0?((e,t)=>{const n=e.match(/^<svg\b[^>]*>/u);if(!n)throw new Error("Could not embed font resources in the generated SVG.");const i=`<style type="text/css">${o=t,o.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")}</style>`;var o;return`${n[0]}${i}${e.slice(n[0].length)}`})(n,a.join("\n")):n}}}(t))}}]]}function Gb(e=[]){const t=new YE;for(const n of e)t.registerAction(n);return t}function Zb(e=[]){return new qE(e)}function Qb(e,t){const n=new Set;for(const i of e){if(n.has(i))throw new Error(`Duplicate ${t} id: ${i}.`);n.add(i)}}function Jb(e=[]){const t=new jE;for(const n of e)t.registerContribution(n);return t}function ex(e,t,n){const i=(e.order??0)-(t.order??0);return 0===i&&e.id&&t.id?(n?.get(e.id)??0)-(n?.get(t.id)??0):i}function tx(e=[]){return new VE(e)}function nx(e=[]){return new GE(e)}function ix(e=[]){const t=new ZE;for(const n of e)t.registerContribution(n);return t}function ox(e,t){const n=new Set;for(const i of e){if(n.has(i))throw new Error(`Duplicate ${t} id: ${i}.`);n.add(i)}}function rx(e,t){const n=new Set;for(const i of e){if(n.has(i))throw new Error(`Duplicate ${t}: ${i}.`);n.add(i)}}function sx(e){return[...e].sort((e,t)=>(e.order??0)-(t.order??0))}function ax(e){try{e()}catch(t){const e=globalThis.reportError;try{e?e(t):console.error(t)}catch(n){console.error(n)}}}function lx(e={}){const t=e.id??"canvas-kit",n=(e=>void 0!==e.persistence?e.persistence:function(e={}){return{async load({signal:t}){t.throwIfAborted();const n=await(async(e={})=>{const[t,n]=await(async e=>(await ep("snapshots",e)??e.map(()=>null)).map(rp))([ip(e),op(e)]);return{documentSnapshot:t,sessionSnapshot:n}})(e);return t.throwIfAborted(),n},saveDocument:t=>np({documentSnapshot:JSON.stringify(t),sessionSnapshot:null},e),saveSession:t=>np({documentSnapshot:null,sessionSnapshot:JSON.stringify(t)},e)}}({storageNamespace:e.storageNamespace??"land.canvasKit"}))(e),i=[],o=e.plugins??Vb(),r=!Xb(o,fC),s=(e=>{const t=Hb(e),n=[],i=[];for(const o of t)o.editor&&n.push(o.editor),o.render&&i.push(o.render);return Yb(n.map(({id:e})=>e),"editor plugin id"),Yb(i.map(({id:e})=>e),"render plugin id"),{plugins:t,pluginIds:t.map(({id:e})=>e),editorPlugins:n,renderPlugins:i,shapeTypes:Array.from(new Set(n.flatMap(e=>(e.shapeCapabilities??[]).map(({type:e})=>e))))}})([[[...Xb(o,Ak)?[]:[Uk],...Xb(o,vk)?[]:[Ek],...Xb(o,xk)?[]:[wk],...r?[Zh({svgAssetInliners:i})]:[]],o]]),a=(({factories:e=[],productId:t})=>{const n=new Map,i=[],o=()=>{const e=i.splice(0).reverse();try{for(const n of e)try{n()}catch(t){ap(t)}}finally{n.clear()}},r=(e,t)=>{if(n.has(e.token.id))throw new Error(`Duplicate product service token: ${e.token.id}.`);const o=e.create(t);return n.set(e.token.id,o),e.dispose&&i.push(()=>e.dispose?.(o)),o};try{for(const n of e)r(n,{productId:t})}catch(s){throw o(),s}return{add:e=>r(e,{productId:t}),get:e=>n.get(e.id)??null,dispose(){o()}}})({productId:t}),l=(()=>{const e=[];let t=!1;return{defer(n){t?ax(n):e.push(n)},dispose(){if(!t){t=!0;for(const t of e.splice(0).reverse())ax(t)}}}})();l.defer(()=>a.dispose());let d=null;const c=[];try{const o=(Aa((u=s.renderPlugins).map(({id:e})=>e),"canvas render plugin id"),Aa(u.flatMap(({shapeRenderers:e=[]})=>e.map(({type:e})=>e)),"shape renderer type"),Aa(u.flatMap(({canvasOverlays:e=[]})=>e.map(({id:e})=>e)),"canvas overlay id"),Aa(u.flatMap(({selectionCustomHandleRenderers:e=[]})=>e.map(({type:e})=>e)),"selection handle renderer type"),Aa(u.flatMap(({domEventGuards:e=[]})=>e.map(({id:e})=>e)),"DOM event guard id"),Aa(u.flatMap(({canvasProviders:e=[]})=>e.map(({id:e})=>e)),"canvas provider id"),Aa(u.flatMap(({canvasComponents:e=[]})=>e.map(({id:e})=>e)),"canvas component id"),Aa(u.flatMap(({shapeOpacityModifiers:e=[]})=>e.map(({id:e})=>e)),"shape opacity modifier id"),{plugins:u,canvasProviders:u.flatMap(({canvasProviders:e=[]})=>e),canvasComponents:u.flatMap(({canvasComponents:e=[]})=>e),rendererRegistry:er(u),overlayRegistry:gr(u),domEventGuardRegistry:Cr(u)});d=(e=>{const t=function(e={}){const{plugins:t=[],...n}=e,i=(e=>({shapeUtils:e.flatMap(e=>e.shapeUtils??[]),shapeSvgExporters:e.flatMap(e=>e.shapeSvgExporters??[]),bindingUtils:e.flatMap(e=>e.bindingUtils??[]),shapeCapabilities:e.flatMap(e=>e.shapeCapabilities??[])}))(t),o=new lw({...n,shapeUtils:i.shapeUtils,shapeSvgExporters:i.shapeSvgExporters,bindingUtils:i.bindingUtils,shapeCapabilities:i.shapeCapabilities});try{return o.runtime.onDispose(((e,t)=>{const n=[];try{for(const i of t){for(const n of i.interactionHandlers??[])e.interactions.register(n);const t=i.setup?.(e);t&&n.push(t)}}catch(i){throw Io(n),i}return()=>{const e=Io(n);if(null!==e)throw e}})(o,t)),o}catch(r){try{o.dispose()}catch{}throw r}}({documentMeta:e.documentMeta,plugins:e.editorPlugins,resolveAssetUrl:e.resolveAssetUrl});return t.tools.register("select",e=>new Rw(e),{shortcut:"v"}),t.tools.register("hand",e=>new hw(e),{shortcut:"h"}),t.tools.setToolLocked(t.isToolLocked()),t.commands.setActiveTool("select",{source:"system"}),t.history.clear(),t})({documentMeta:e.documentMeta?{...e.documentMeta}:void 0,editorPlugins:s.editorPlugins,resolveAssetUrl:e=>d?(({assetResolverTokens:e,assetId:t,editor:n,services:i})=>{for(const o of sp({assetResolverTokens:e,services:i})){const e=o.resolveAssetUrl(n,t);if(e)return e}return null})({assetResolverTokens:c,assetId:e,editor:d,services:a}):null});const r=d;l.defer(()=>r.dispose());const h=n?new JE(d,n):null,p=d.getDocumentSnapshot(),g=d.getSessionSnapshot(),f=function({assetResolverTokens:e,defer:t,editor:n,persistence:i,productId:o,services:r,svgAssetInliners:s}){const a=[],l=[],d=[],c=[],u=[],h=[],p=[],g=[],f=[],m=[],S=[],y=[],b=new Map,x=new Map,I=new Map,w=[],v=[];let P=null,k=!1;const C=()=>{if(k)throw new Error("Canvas plugin setup is already sealed.")},T=()=>{if(!P)throw new Error("Canvas plugin registration is only available during setup.");return P},M={get:e=>b.has(e.id)?b.get(e.id):null,provide(e,t){C();const n=T();if(b.has(e.id))throw new Error(`Duplicate canvas plugin capability: ${e.id}.`);b.set(e.id,t),x.set(e.id,n.id)}},E=new Map([[uP.id,{add(...e){C(),a.push(...e)},addShortcuts(...e){C(),l.push(...e)}}],[yP.id,{add(e){C(),g.push({api:e,pluginId:T().id})}}],[hP.id,M],[gP.id,{add(...e){C(),u.push(...e)}}],[fP.id,{add(...e){C(),c.push(...e)}}],[mP.id,{add(...e){C(),p.push(...e)}}],[SP.id,{add(...e){C(),h.push(...e)}}],[bP.id,{add(e){C();const t=r.add(e);return I.set(e.token.id,T().id),t},get:e=>r.get(e)}],[vP.id,{add(...e){C(),d.push(...e)}}],[Mk.id,{addResolver(t){C(),e.push(t)},addSvgInliners(...e){C(),s.push(...e)}}],[Pk.id,{beforeCommand(e){C(),m.push(e)},beforeReady(e){C(),f.push(e)},defer(e){C(),t(e)}}],[kk.id,i],[Ck.id,{addComponents(...e){C(),y.push(...e)},addProviders(...e){C(),S.push(...e)},allowPropertiesDuringEditing(e){C(),v.push(e)}}]]),A={editor:n,productId:o,get(e){if(!E.has(e.id))throw new Error(`Canvas plugin setup extension is unavailable: ${e.id}.`);return E.get(e.id)}};return{install(e){if(C(),w.push(...(e.provides??[]).map(t=>({pluginId:e.id,token:t}))),e.setup){P=e;try{if(void 0!==e.setup(A))throw new Error(`Canvas plugin "${e.id}" setup must register cleanup through the lifecycle extension.`)}finally{P=null}}},seal(){C(),k=!0,rx(a.map(({id:e})=>e),"canvas action id"),rx(d.map(({id:e})=>e),"toolbar contribution id"),rx(u.map(({id:e})=>e),"chrome contribution id"),rx(c.map(({id:e})=>e),"context-menu contribution id"),rx(h.map(({id:e})=>e),"canvas import contribution id"),rx(p.map(({id:e})=>e),"canvas export contribution id"),rx(p.map(({format:e})=>e),"canvas export format"),rx(y.map(({id:e})=>e),"component id"),rx(S.map(({id:e})=>e),"provider id"),rx(g.map(({api:e})=>e.token.id),"product API token"),rx(l.map(({actionId:e})=>e),"action shortcut action id"),((e,t,n,i,o)=>{const r=t.map(({actionId:e})=>e).filter(t=>!e.has(t));if(r.length>0)throw new Error(`Action shortcuts reference missing action(s): ${r.join(", ")}.`);for(const s of[...n,...i,...o]){const t=s.actionIds.filter(t=>!e.has(t));if(t.length>0)throw new Error(`Contribution "${s.id}" references missing action(s): ${t.join(", ")}.`)}})(new Set(a.map(({id:e})=>e)),l,u,c,d),(({apiDefinitions:e,capabilityValueProviders:t,declaredCapabilities:n,serviceProviders:i})=>{const o=new Map(e.map(({api:e,pluginId:t})=>[e.token.id,t]));for(const{pluginId:r,token:s}of n)if(("api"===s.kind?o.get(s.id):"service"===s.kind?i.get(s.id):t.get(s.id))!==r)throw new Error(`Canvas plugin "${r}" did not register declared capability "${s.id}".`)})({apiDefinitions:g,capabilityValueProviders:x,declaredCapabilities:w,serviceProviders:I});for(const{actionId:e,shortcut:o}of l)n.shortcuts.registerActionShortcut(e,o);const t=(()=>{const e=new Map;return{register(t,n){if(e.has(t.id))throw new Error(`Duplicate product API token: ${t.id}.`);e.set(t.id,n)},get:t=>e.get(t.id)??null}})(),i={apis:t,capabilities:M,editor:n,exportRegistry:tx(p),productId:o,services:r};for(const{api:e}of g){const n=e.create(i);null!==n&&t.register(e.token,n)}return{actionRegistry:Gb(a),apis:t,assetResolverTokens:[...e],beforeCommandHooks:[...m],beforeReadyHooks:[...f],components:sx(y),chromeRegistry:Zb(u),contextMenuRegistry:Jb(c),importRegistry:nx(h),providers:sx(S),toolbarRegistry:ix(d),canShowPropertiesDuringEditing:e=>v.some(t=>t(e))}}}}({assetResolverTokens:c,defer(e){l.defer(e)},editor:d,persistence:h,productId:t,services:a,svgAssetInliners:i});for(const e of s.plugins)f.install(e);const m=f.seal(),S=$h({apis:m.apis,editor:d,productId:t,services:a}),y=(({editor:e,hooks:t})=>n=>{for(const i of t)i({commandId:n.commandId,context:n.context,editor:e});return n.run()})({editor:d,hooks:m.beforeCommandHooks}),b={canvasRuntime:o,actionRegistry:m.actionRegistry,chromeRegistry:m.chromeRegistry,toolbarRegistry:m.toolbarRegistry,contextMenuRegistry:m.contextMenuRegistry,importRegistry:m.importRegistry,executeCommand:y,providers:m.providers,components:m.components,chrome:e.chrome,canShowPropertiesDuringEditing:m.canShowPropertiesDuringEditing},x={abortController:new AbortController,assetResolverTokens:c,beforeReadyHooks:m.beforeReadyHooks,cleanDocumentSnapshot:p,cleanSessionSnapshot:g,controller:S,editor:d,mountedOwner:null,persistence:n,persistenceCoordinator:h,productId:t,resources:l,render:b,seedDocument:e.seedDocument,services:a,shouldSkipStoredSnapshots:e.shouldSkipStoredSnapshots,startPromise:null,state:"created"},I={controller:S,start:()=>(e=>{if("disposing"===e.state||"disposed"===e.state)return Promise.reject(new Error("Cannot start a disposing or disposed CanvasKitRuntime."));if(e.startPromise)return e.startPromise;e.state="starting";const t=(async e=>{const{assetResolverTokens:t,beforeReadyHooks:n,editor:i,persistence:o,persistenceCoordinator:r,productId:s,services:a}=e,l=e.abortController.signal,d=[],c=e=>(async(e,t,n)=>{t.throwIfAborted();try{return await new Promise((n,i)=>{const o=()=>i(t.reason);t.addEventListener("abort",o,{once:!0}),Promise.resolve().then(e).then(n,i).finally(()=>{t.removeEventListener("abort",o)})})}catch(i){t.throwIfAborted(),n.push(i)}})(e,l,d),u=e.shouldSkipStoredSnapshots?.()??!1;let h,p=!1,g={documentSnapshot:null,sessionSnapshot:null};if(!u&&o?.load){const e=await c(()=>o.load({signal:l}));e&&(g=e,p=!0)}if(l.throwIfAborted(),hx(e),null!==g.documentSnapshot)try{i.loadDocumentSnapshot(g.documentSnapshot,{source:"system"}),h="restored"}catch(S){l.throwIfAborted(),d.push(S),hx(e),h=cx(e)}else h=cx(e);l.throwIfAborted();let f=!1;if(null!==g.sessionSnapshot)try{i.loadSessionSnapshot(g.sessionSnapshot,{source:"system"}),f=!0}catch(S){l.throwIfAborted(),d.push(S),i.loadSessionSnapshot(e.cleanSessionSnapshot,{source:"system"})}i.history.clear();const m={assetResolverTokens:t,editor:i,services:a,signal:l};await c(()=>(async({assetResolverTokens:e,editor:t,signal:n,services:i})=>{await Promise.all(sp({assetResolverTokens:e,services:i}).map(e=>e.preloadForEditor?.(t,{signal:n})))})(m)),p&&await c(()=>(async({assetResolverTokens:e,editor:t,signal:n,services:i})=>{await Promise.all(sp({assetResolverTokens:e,services:i}).map(e=>e.cleanupAfterRestore?.(t,{signal:n})))})(m));for(const y of n)l.throwIfAborted(),await c(()=>y({editor:i,persistence:r,productId:s,services:a,signal:l,startup:{documentSource:h,sessionRestored:f,warnings:[...d]}}));return l.throwIfAborted(),!u&&r&&(r.start(),e.resources.defer(()=>r.stop())),l.throwIfAborted(),{documentSource:h,sessionRestored:f,warnings:[...d]}})(e).then(t=>(e.abortController.signal.throwIfAborted(),e.state="ready",t)).catch(t=>{throw"disposing"!==e.state&&"disposed"!==e.state&&(e.state="failed"),t});return e.startPromise=t,t})(x),dispose(){(e=>{"disposing"!==e.state&&"disposed"!==e.state&&(e.state="disposing",e.abortController.abort(),e.resources.dispose(),e.state="disposed")})(x)}};return eA.set(I,x),I}catch(h){throw l.dispose(),h}var u}function dx(e){const t=eA.get(e);if(!t)throw new Error("CanvasKitRoot received a runtime that was not created by createCanvasKitRuntime().");return t}function cx(e){return e.seedDocument?(e.seedDocument(e.controller),"seeded"):"empty"}function ux(e){if("ready"!==e.state)throw new Error(`CanvasKitRoot requires a ready runtime; received runtime in "${e.state}" state. Call and await runtime.start() before rendering.`)}function hx(e){e.editor.loadDocumentSnapshot(e.cleanDocumentSnapshot,{source:"system"}),e.editor.loadSessionSnapshot(e.cleanSessionSnapshot,{source:"system"})}function px({runtime:e,onControllerReady:t,onControllerDispose:n,exposeControllerOnWindow:i=!1,windowKey:o="landCanvasKit"}){const r=dx(e);ux(r);const[s]=Tx(()=>({})),[a,l]=Tx(null);return Px(()=>(((e,t)=>{const n=dx(e);if(ux(n),n.mountedOwner&&n.mountedOwner!==t)throw new Error("A CanvasKitRuntime can only be mounted by one CanvasKitRoot at a time.");n.mountedOwner=t})(e,s),l(e),()=>{((e,t)=>{const n=dx(e);n.mountedOwner===t&&(n.mountedOwner=null)})(e,s)}),[s,e]),a!==e?null:Ax(gx,{exposeControllerOnWindow:i,internals:r,onControllerDispose:n,onControllerReady:t,windowKey:o})}function gx({exposeControllerOnWindow:e=!1,internals:t,onControllerDispose:n,onControllerReady:i,windowKey:o="landCanvasKit"}){const[r,s]=Tx(null),[a,l]=Tx(!1),d=Cx(null),c=bx(()=>d.current,[]),u=kx(()=>({isVisible:a,setIsVisible:l}),[a]),{render:h}=t,p={actionRegistry:h.actionRegistry,editor:t.editor,executeCommand:h.executeCommand,getHostElement:c,imports:h.importRegistry,services:t.services};(({controller:e,exposeControllerOnWindow:t,onControllerDispose:n,onControllerReady:i,windowKey:o})=>{const r=wx(e=>{i?.(e)}),s=wx(()=>{n?.()});Ix(()=>(r(e),()=>{s()}),[e]),Ix(()=>{if(!t)return;const n=window;return n[o]=e,()=>{n[o]===e&&delete n[o]}},[e,t,o])})({controller:t.controller,exposeControllerOnWindow:e,onControllerDispose:n,onControllerReady:i,windowKey:o});const g=Ax("div",{ref:d,"data-ui":"app-shell","data-canvas-kit":t.productId,className:"land-canvas-kit__shell",children:Bx("main",{"data-ui":"workspace-viewport",className:"land-canvas-kit__viewport",children:[
38
- Ax(_r,{canvasComponents:h.canvasRuntime.canvasComponents,canvasProviders:h.canvasRuntime.canvasProviders,domEventGuardRegistry:h.canvasRuntime.domEventGuardRegistry,onContextMenuRequest:s,overlayRegistry:h.canvasRuntime.overlayRegistry,rendererRegistry:h.canvasRuntime.rendererRegistry,showGrid:u.isVisible}),h.components.map(e=>Ax(e.component,{...p},e.id)),h.chrome?Ax(fx,{activeContextMenu:r,grid:u,internals:t,onActiveContextMenuChange:s}):null,
39
- Ax(ou,{})]})});
40
- return Ax(Lw.Provider,{value:t.editor,children:Ax(iu,{children:(f=h.providers,m=g,f.reduceRight((e,t)=>Ax(t.component,{children:e},t.id),m))})});var f,m}function fx({activeContextMenu:e,grid:t,internals:n,onActiveContextMenuChange:i}){const{render:o}=n,r=Qh({actionRegistry:o.actionRegistry,activeContextMenu:e,canShowPropertiesDuringEditing:o.canShowPropertiesDuringEditing,chromeRegistry:o.chromeRegistry,contextMenuRegistry:o.contextMenuRegistry,controller:n.controller,editor:n.editor,executeCommand:o.executeCommand,grid:t,onActiveContextMenuChange:i,toolbarRegistry:o.toolbarRegistry});return o.chrome?.(r)??null}function mx(e){const[t,n]=Tx(null);return Ix(()=>{let t=!0,i=null;n({options:e,state:tA});try{i=lx(e)}catch(o){return t&&n({options:e,state:{status:"error",error:o}}),()=>{t=!1}}return i.start().then(o=>{t&&i&&n({options:e,state:{status:"ready",runtime:i,startup:o}})},o=>{t&&i&&(i.dispose(),n({options:e,state:{status:"error",error:o}}))}),()=>{t=!1,i?.dispose()}},[e]),t?.options===e?t.state:tA}import{createContext as Sx,memo as yx,useCallback as bx,useContext as xx,useEffect as Ix,useEffectEvent as wx,useId as vx,useLayoutEffect as Px,useMemo as kx,useRef as Cx,useState as Tx,useSyncExternalStore as Mx}from"react";import{Fragment as Ex,jsx as Ax,jsxs as Bx}from"react/jsx-runtime";import{EditorContent as Rx,useEditor as Lx}from"@tiptap/react";import{mergeAttributes as $x}from"@tiptap/core";import{Bold as Fx}from"@tiptap/extension-bold";import{Italic as Ux}from"@tiptap/extension-italic";import{Link as Dx}from"@tiptap/extension-link";import{Strike as Ox}from"@tiptap/extension-strike";import{TextAlign as zx}from"@tiptap/extension-text-align";import{BackgroundColor as Nx,Color as _x,FontFamily as Wx,FontSize as Xx,LineHeight as Hx,TextStyle as Kx}from"@tiptap/extension-text-style";import{Underline as Yx}from"@tiptap/extension-underline";import{Selection as qx}from"@tiptap/extensions/selection";import jx from"@tiptap/starter-kit";import{createPortal as Vx}from"react-dom";var Gx,Zx=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),Qx=0,Jx=null,eI=null,tI=class{name;current;isEqual;lastChangedEpoch;children=new Set;constructor(t,n,i){this.name=t,this.current=n,this.isEqual=i,this.lastChangedEpoch=e()}get(){return r(this),this.current}__unsafe__getWithoutCapture(){return this.current}__unsafe__setWithoutNotify(e){this.current=e}set(n){const i=this.current;return(this.isEqual?this.isEqual(i,n):Object.is(i,n))?i:(((e,t)=>{Jx&&!Jx.initialAtomValues.has(e)&&Jx.initialAtomValues.set(e,t)})(this,i),t(),this.lastChangedEpoch=e(),this.current=n,(e=>{Jx||s([e])})(this),n)}update(e){return this.set(e(this.current))}},nI=Symbol("UNINITIALIZED"),iI=class{name;derive;isEqual;isComputed=!0;lastChangedEpoch;lastCheckedEpoch;children=new Set;state=nI;parents=[];parentEpochs=[];constructor(t,n,i){this.name=t,this.derive=n,this.isEqual=i,this.lastChangedEpoch=e(),this.lastCheckedEpoch=-1}get(){return r(this),this.__unsafe__getWithoutCapture()}__unsafe__getWithoutCapture(){if(this.lastCheckedEpoch===e())return this.state;if(this.state!==nI&&!this.haveParentsChanged())return this.lastCheckedEpoch=e(),this.state;let n,r;i(this.selfAsChild);try{n=this.derive(this.state===nI?nI:this.state)}finally{r=o()}for(const e of this.parents)r.has(e)||e.children.delete(this.selfAsChild);this.parents=[...r],this.parentEpochs=this.parents.map(e=>e.lastChangedEpoch);for(const e of this.parents)e.children.add(this.selfAsChild);return this.state!==nI&&(this.isEqual?this.isEqual(this.state,n):Object.is(this.state,n))||(this.state=n,t(),this.lastChangedEpoch=e()),this.lastCheckedEpoch=e(),this.state}get selfAsChild(){return this._selfAsChild||(this._selfAsChild={type:"computed",notify:()=>{},source:this}),this._selfAsChild}_selfAsChild=null;haveParentsChanged(){for(let e=0;e<this.parents.length;e++){const t=this.parents[e];if(t.__unsafe__getWithoutCapture(),t.lastChangedEpoch!==this.parentEpochs[e])return!0}return!1}},oI=class{name;fn;type="effect";parents=[];parentEpochs=[];lastReactedEpoch=-1;isActive=!1;scheduleEffect;constructor(e,t,n){this.name=e,this.fn=t,this.scheduleEffect=n?.scheduleEffect}selfAsChild={type:"effect",notify:()=>this.maybeSchedule()};attach(){this.isActive=!0,this.execute()}detach(){this.isActive=!1;for(const e of this.parents)e.children.delete(this.selfAsChild);this.parents=[],this.parentEpochs=[]}maybeSchedule(){this.isActive&&this.lastReactedEpoch!==e()&&(this.haveParentsChanged()?this.scheduleEffect?this.scheduleEffect(()=>this.execute()):this.execute():this.lastReactedEpoch=e())}execute(){if(this.isActive){for(const e of this.parents)e.children.delete(this.selfAsChild);i(this.selfAsChild);try{this.fn()}finally{const t=o();this.parents=[...t],this.parentEpochs=this.parents.map(e=>e.lastChangedEpoch);for(const e of this.parents)e.children.add(this.selfAsChild);this.lastReactedEpoch=e()}}}haveParentsChanged(){for(let e=0;e<this.parents.length;e++){const t=this.parents[e];if(t.__unsafe__getWithoutCapture(),t.lastChangedEpoch!==this.parentEpochs[e])return!0}return!1}},rI=class{registry=new Map;register(e){this.registry.set(e.type,e)}values(){return this.registry.values()}get(e){const t=this.registry.get(e);if(!t)throw new Error(`Missing binding util for type "${e}"`);return t}},sI=class e{x;y;constructor(e,t){this.x=e,this.y=t}add(t){return new e(this.x+t.x,this.y+t.y)}sub(t){return new e(this.x-t.x,this.y-t.y)}mul(t){return new e(this.x*t,this.y*t)}div(t){return new e(this.x/t,this.y/t)}len2(){return this.x*this.x+this.y*this.y}len(){return Math.sqrt(this.len2())}dist2(e){const t=this.x-e.x,n=this.y-e.y;return t*t+n*n}dist(e){return Math.sqrt(this.dist2(e))}rot(t){const n=Math.cos(t),i=Math.sin(t);return new e(this.x*n-this.y*i,this.x*i+this.y*n)}per(){return new e(-this.y,this.x)}normalize(){const t=this.len();return 0===t?new e(0,0):this.div(t)}equals(e){return this.x===e.x&&this.y===e.y}clone(){return new e(this.x,this.y)}static From(t,n){return new e(t,n)}static Zero(){return new e(0,0)}static Med(t,n){return new e((t.x+n.x)/2,(t.y+n.y)/2)}static Lrp(t,n,i){return new e(t.x+(n.x-t.x)*i,t.y+(n.y-t.y)*i)}static Dist(e,t){return e.dist(t)}static Dist2(e,t){return e.dist2(t)}static Angle(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}static Nudge(e,t,n){const i=t.sub(e),o=i.len();return 0===o?e.clone():e.add(i.mul(n/o))}static RotWith(t,n,i){const o=t.x-n.x,r=t.y-n.y,s=Math.cos(i),a=Math.sin(i);return new e(n.x+o*s-r*a,n.y+o*a+r*s)}static IsNaN(e){return isNaN(e.x)||isNaN(e.y)}},aI=class e{x;y;w;h;constructor(e,t,n,i){this.x=e,this.y=t,this.w=n,this.h=i}get minX(){return this.x}get minY(){return this.y}get maxX(){return this.x+this.w}get maxY(){return this.y+this.h}get center(){return new sI(this.x+this.w/2,this.y+this.h/2)}containsPoint(e){return e.x>=this.minX&&e.x<=this.maxX&&e.y>=this.minY&&e.y<=this.maxY}containsBox(e){return e.minX>=this.minX&&e.maxX<=this.maxX&&e.minY>=this.minY&&e.maxY<=this.maxY}intersects(e){return this.minX<e.maxX&&this.maxX>e.minX&&this.minY<e.maxY&&this.maxY>e.minY}expand(t){return new e(this.x-t,this.y-t,this.w+2*t,this.h+2*t)}clone(){return new e(this.x,this.y,this.w,this.h)}static FromPoints(t){let n=1/0,i=1/0,o=-1/0,r=-1/0;for(const e of t)n=Math.min(n,e.x),i=Math.min(i,e.y),o=Math.max(o,e.x),r=Math.max(r,e.y);return new e(n,i,o-n,r-i)}},lI=class e{a;b;c;d;e;f;constructor(e,t,n,i,o,r){this.a=e,this.b=t,this.c=n,this.d=i,this.e=o,this.f=r}static Identity(){return new e(1,0,0,1,0,0)}static Translate(t,n){return new e(1,0,0,1,t,n)}static Rotate(t){const n=Math.cos(t),i=Math.sin(t);return new e(n,i,-i,n,0,0)}static SkewX(t){return new e(1,0,Math.tan(t),1,0,0)}static Scale(t,n){return new e(t,0,0,n,0,0)}compose(t){return new e(this.a*t.a+this.c*t.b,this.b*t.a+this.d*t.b,this.a*t.c+this.c*t.d,this.b*t.c+this.d*t.d,this.a*t.e+this.c*t.f+this.e,this.b*t.e+this.d*t.f+this.f)}applyToPoint(e){return new sI(this.a*e.x+this.c*e.y+this.e,this.b*e.x+this.d*e.y+this.f)}determinant(){return this.a*this.d-this.b*this.c}getMaximumLinearScale(){const e=this.a*this.a+this.b*this.b+this.c*this.c+this.d*this.d,t=this.determinant(),n=Math.max(0,e*e-4*t*t);return Math.sqrt((e+Math.sqrt(n))/2)}tryInvert(t=0){const n=this.determinant(),i=Number.isFinite(t)?Math.max(0,t):0;if(!Number.isFinite(n)||Math.abs(n)<=i)return null;const o=1/n;return new e(this.d*o,-this.b*o,-this.c*o,this.a*o,(this.c*this.f-this.d*this.e)*o,(this.b*this.e-this.a*this.f)*o)}invert(){return this.tryInvert()??e.Identity()}toCssString(){return`matrix(${this.a},${this.b},${this.c},${this.d},${this.e},${this.f})`}toSvgString(){return`matrix(${this.a} ${this.b} ${this.c} ${this.d} ${this.e} ${this.f})`}static ForShape(t,n,i,o=1,r=1,s=0){const a=e.Translate(t,n),l=0===i?e.Identity():e.Rotate(i),d=0===s?e.Identity():e.SkewX(s),c=1===o&&1===r?e.Identity():e.Scale(o,r);return a.compose(l).compose(d).compose(c)}},dI=class{values=new Map;disposers=[];isDisposed=!1;revision=a("editor.runtime.revision",0);revisionSignal=this.revision;notify(){this.revision.set(this.revision.get()+1)}provide(e,t,n){if(this.isDisposed)throw new Error("Cannot provide an editor runtime after disposal.");if(this.values.has(e.id))throw new Error(`Editor runtime already provided: ${e.id}`);return this.values.set(e.id,t),n&&this.disposers.push(()=>n(t)),t}get(e){return this.values.get(e.id)??null}require(e){const t=this.get(e);if(null===t)throw new Error(`Missing editor runtime: ${e.id}`);return t}onDispose(e){this.isDisposed?e():this.disposers.push(e)}dispose(){if(this.isDisposed)return;this.isDisposed=!0;let e=null;try{for(const n of this.disposers.splice(0).reverse())try{n()}catch(t){e??=t}}finally{this.values.clear()}if(null!==e)throw e}},cI="document:main",uI="page:default",hI="session:main",pI={x:0,y:0,z:1},gI=class{registry=new Map;register(e){this.registry.set(e.type,e)}has(e){return this.registry.has(e)}values(){return this.registry.values()}get(e){const t=this.registry.get(e);if(!t)throw new Error(`Missing shape util for type "${e}"`);return t}},fI=["fill-blue","fill-green","fill-red","fill-amber","fill-white","fill-slate","stroke-blue","stroke-green","stroke-red","stroke-orange","stroke-slate","stroke-muted","text-slate","text-blue","text-green","text-red"],mI=Object.fromEntries(fI.map(e=>[e,`--land-shape-${e}`])),SI={"fill-blue":"#dbeafe","fill-green":"#dcfce7","fill-red":"#fee2e2","fill-amber":"#fff7ed","fill-white":"#f8fafc","fill-slate":"#e2e8f0","stroke-blue":"#1d4ed8","stroke-green":"#15803d","stroke-red":"#dc2626","stroke-orange":"#ea580c","stroke-slate":"#334155","stroke-muted":"#94a3b8","text-slate":"#0f172a","text-blue":"#1d4ed8","text-green":"#15803d","text-red":"#dc2626"},yI=class{registry=new Map;register(e){this.registry.set(e.type,e)}get(e){return this.registry.get(e)??null}has(e){return this.registry.has(e)}unregister(e){return this.registry.delete(e)}values(){return this.registry.values()}},bI=Symbol("editorStore"),xI=class{marks=new Map;undoStack=[];redoStack=[];_state=a("store.history.state",{canUndo:!1,canRedo:!1,undoDepth:0,redoDepth:0});state=this._state;clear(){this.marks.clear(),this.undoStack.length=0,this.redoStack.length=0,this.publishState()}mark(e){this.marks.set(e,((e,t=[])=>({id:e,forward:{added:[],updated:[],removed:[]},parentIds:t}))(e,[...this.marks.keys()]))}append(e,t="change"){if(J(e))if(this.marks.size>0)for(const[n,i]of this.marks.entries())this.marks.set(n,oe(i,e));else this.undoStack.push(re(t,e)),this.redoStack.length=0,this.publishState()}bailToMark(e){const t=this.marks.get(e);if(!t)return null;if(this.marks.delete(e),!J(t.forward))return null;const n=ne(t.forward);for(const i of t.parentIds){const e=this.marks.get(i);e&&this.marks.set(i,oe(e,n))}return n}squashToMark(e,t=e){const n=this.marks.get(e);if(!n)return null;if(this.marks.delete(e),!J(n.forward))return null;if(n.parentIds.some(e=>this.marks.has(e)))return null;const i=re(t,n.forward);return this.undoStack.push(i),this.redoStack.length=0,this.publishState(),i}undo(){const e=this.undoStack.pop()??null;return e?(this.redoStack.push(e),this.publishState(),e):null}redo(){const e=this.redoStack.pop()??null;return e?(this.undoStack.push(e),this.publishState(),e):null}getEntries(){return this.undoStack}publishState(){this._state.set({canUndo:this.undoStack.length>0,canRedo:this.redoStack.length>0,undoDepth:this.undoStack.length,redoDepth:this.redoStack.length})}},II=class{recordsSignal;draftRevisionSignal;recordSignals=new Map;listeners=new Set;transactionDepth=0;draftRecords=null;pendingSource="system";constructor(e){this.recordsSignal=a("store.records",new Map(e.map(e=>[e.id,e]))),this.draftRevisionSignal=a("store.draftRevision",0)}get(e){return this.getReadableRecords().get(e)}getActiveAtomicOperationRevision(){return this.transactionDepth>0?this.draftRevisionSignal.get():null}getActiveAtomicOperationSnapshot(){if(!this.draftRecords||0===this.transactionDepth)throw new Error("Store.getActiveAtomicOperationSnapshot() requires an active atomic operation.");return Array.from(this.draftRecords.values())}getRecordSignal(e){let t=this.recordSignals.get(e);return t||(t=l(`store.record.${e}`,()=>(this.recordsSignal.get(),this.draftRevisionSignal.get(),this.get(e))),this.recordSignals.set(e,t)),t}getAll(){if("computed"===eI?.child.type)throw new Error("Store.getAll() cannot run while deriving a computed signal. Read a keyed record or indexed query signal instead.");return Array.from(this.getReadableRecords().values())}getByScope(e){return this.getAll().filter(t=>"scope"in t&&t.scope===e)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}atomic(e,t="system"){if(0===this.transactionDepth){let i=[];if(n(()=>{i=this.runAtomic(e,t)}),i.length>0)throw i[0];return}this.runAtomic(e,t)}runAtomic(e,t){const n=0===this.transactionDepth;let i;n&&(this.draftRecords=new Map(this.recordsSignal.get()),this.pendingSource=t),this.transactionDepth+=1;try{e()}catch(o){i=o}if(this.transactionDepth-=1,n||this.bumpDraftRevision(),n){const e=this.recordsSignal.get(),t=this.draftRecords,n=this.pendingSource;this.draftRecords=null,this.pendingSource="system",this.bumpDraftRevision();const o=t?te(e,t):{added:[],updated:[],removed:[]};if(!i&&t&&J(o))return this.recordsSignal.set(t),this.notifyListeners({source:n,diff:o})}if(i)throw i;return[]}put(e,t="system"){this.atomic(()=>{const t=this.getMutableRecords();for(const n of e)t.get(n.id)!==n&&t.set(n.id,n)},t)}remove(e,t="system"){this.atomic(()=>{const t=this.getMutableRecords();for(const n of e)if(!t.delete(n))continue},t)}replaceAll(e,t="system"){const n=new Map(e.map(e=>[e.id,e])),i=te(this.recordsSignal.get(),n);if(!J(i))return;this.recordsSignal.set(n);const o=this.notifyListeners({source:t,diff:i});if(o.length>0)throw o[0]}applyDiff(e,t="system"){this.atomic(()=>{const t=this.getMutableRecords();for(const n of e.added)t.set(n.id,n);for(const n of e.updated)t.set(n.after.id,n.after);for(const n of e.removed)t.delete(n.id)},t)}getMutableRecords(){if(!this.draftRecords)throw new Error("Store mutations must run inside store.atomic");return this.draftRecords}getReadableRecords(){return this.draftRecords??this.recordsSignal.get()}bumpDraftRevision(){this.draftRevisionSignal.set(this.draftRevisionSignal.get()+1)}notifyListeners(e){const t=[];for(const i of this.listeners)try{i(e)}catch(n){t.push(n)}return t}},wI=new Set,vI=new WeakMap,PI=class{editor;buffer=new xI;scopeActivations=[];_state=a("editor.history.state",this.buffer.state.__unsafe__getWithoutCapture());state=this._state;constructor(e){this.editor=e,this.editor.operations.subscribe(e=>{this.handleCommit(e)})}clear(){this.buffer.clear(),this.publishEffectiveState()}activateScope(e){const t={scope:e,unsubscribe:()=>{},isActive:!0};return t.unsubscribe=e.subscribe(()=>{t.isActive&&this.publishEffectiveState()}),this.scopeActivations.push(t),this.publishEffectiveState(),()=>{this.deactivateActivation(t)}}deactivateScope(e){for(let t=this.scopeActivations.length-1;t>=0;t--){const n=this.scopeActivations[t];if(n.scope===e)return this.deactivateActivation(n),!0}return!1}getActiveScope(){return this.scopeActivations.at(-1)?.scope??null}undo(){const e=this.getActiveScope();if(e){const t=e.undo();return this.publishEffectiveState(),t}const t=this.buffer.undo();return!!t&&(this.editor.operations.run({kind:"history.undo",label:t.label,source:"history",history:"ignore"},()=>{G(this.editor).applyDiff(t.inverse,"history"),this.editor.syncAfterDocumentRestore()}),this.publishEffectiveState(),!0)}redo(){const e=this.getActiveScope();if(e){const t=e.redo();return this.publishEffectiveState(),t}const t=this.buffer.redo();return!!t&&(this.editor.operations.run({kind:"history.redo",label:t.label,source:"history",history:"ignore"},()=>{G(this.editor).applyDiff(t.forward,"history"),this.editor.syncAfterDocumentRestore()}),this.publishEffectiveState(),!0)}getEntries(){return this.buffer.getEntries()}handleCommit(e){"record"===e.history&&"user"===e.source&&(this.buffer.append(e.diff,e.label),this.publishEffectiveState())}deactivateActivation(e){if(!e.isActive)return;e.isActive=!1;const t=this.scopeActivations.indexOf(e);t>=0&&this.scopeActivations.splice(t,1);try{e.unsubscribe()}finally{this.publishEffectiveState()}}publishEffectiveState(){const e=this.getActiveScope(),t=e?{canUndo:(n=e.getState()).canUndo,canRedo:n.canRedo,undoDepth:n.undoDepth??(n.canUndo?1:0),redoDepth:n.redoDepth??(n.canRedo?1:0)}:this.buffer.state.__unsafe__getWithoutCapture();var n,i,o;((i=this._state.__unsafe__getWithoutCapture()).canUndo!==(o=t).canUndo||i.canRedo!==o.canRedo||i.undoDepth!==o.undoDepth||i.redoDepth!==o.redoDepth)&&this._state.set({...t})}},kI=class{manager;state;constructor(e,t){this.manager=e,this.state=t}get id(){return this.state.id}get kind(){return this.state.kind}get source(){return this.state.source}get isActive(){return"active"===this.state.status}commit(){return this.manager.commit(this.state)}cancel(){this.manager.cancel(this.state)}},CI=class{editor;stack=[];commitListeners=new Set;commitQueue=[];nextOperationId=1;revision=0;isPublishing=!1;constructor(e){this.editor=e,G(e).listen(e=>this.handleStoreChange(e))}begin(e){const t=e.source??"user",n=this.getActiveState(),i={id:"operation:"+this.nextOperationId++,kind:e.kind,label:e.label??e.kind,source:t,history:e.history??("user"===t?"record":"ignore"),parent:n,diff:{added:[],updated:[],removed:[]},status:"active",handle:void 0};return i.handle=new kI(this,i),this.stack.push(i),i.handle}run(e,t){const n=this.begin(e);try{const e=t();return n.commit(),e}catch(i){throw n.isActive&&n.cancel(),i}}getActive(){return this.getActiveState()?.handle??null}subscribe(e){return this.commitListeners.add(e),()=>{this.commitListeners.delete(e)}}commit(e){this.assertTopActive(e);const t=Oe(e.diff);if(this.stack.pop(),e.status="committed",e.parent)return e.parent.diff=ie(e.parent.diff,t),null;if(!J(t))return null;const n={id:e.id,revision:++this.revision,kind:e.kind,label:e.label,source:e.source,history:e.history,diff:t,snapshot:Ne(this.editor.getDocumentSnapshot()),sessionSnapshot:_e(this.editor.getSessionSnapshot())};return this.enqueueCommit(n),n}cancel(e){this.assertTopActive(e);const t=Oe(e.diff);J(t)&&(G(this.editor).applyDiff(ne(t),e.source),this.editor.syncAfterDocumentRestore()),this.stack.pop(),e.status="cancelled"}handleStoreChange(e){const t=((e,t)=>({added:e.added.filter(t),updated:e.updated.filter(e=>t(e.before)&&t(e.after)),removed:e.removed.filter(t)}))(e.diff,b);if(!J(t))return;const n=this.getActiveState();if(n)return void(n.diff=ie(n.diff,t));const i=Oe(t);J(i)&&this.enqueueCommit({id:"operation:"+this.nextOperationId++,revision:++this.revision,kind:"editor.change",label:"change",source:e.source,history:"user"===e.source?"record":"ignore",diff:i,snapshot:Ne(this.editor.getDocumentSnapshot()),sessionSnapshot:_e(this.editor.getSessionSnapshot())})}getActiveState(){return this.stack.at(-1)??null}assertTopActive(e){if("active"!==e.status)throw new Error(`Editor operation "${e.kind}" is no longer active.`);if(this.getActiveState()!==e)throw new Error(`Editor operation "${e.kind}" must be completed in LIFO order.`)}enqueueCommit(e){if(this.commitQueue.push(e),!this.isPublishing){this.isPublishing=!0;try{for(;this.commitQueue.length>0;){const e=this.commitQueue.shift();for(const n of this.commitListeners)try{n(e)}catch(t){We(t)}}}finally{this.isPublishing=!1}}}},TI=class{},MI=class{editor;constructor(e){this.editor=e}getConflictingBindings(e){const t=this.getExclusiveBindingKey(e);return t?this.getAllBindings().filter(n=>n.id!==e.id&&n.type===e.type&&this.getExclusiveBindingKey(n)===t):[]}canBind(e){const t=this.editor.getShape(e.fromId),n=this.editor.getShape(e.toId);return!(!t||!n)&&(this.editor.getBindingUtil(e).canBind?.(this.editor,e,{fromShape:t,toShape:n})??!0)}syncCreatedBinding(e,t){const n=this.editor.getBindingUtil(e).onBindingCreate?.(this.editor,e);this.applyEffect(n,t,e.id)}syncUpdatedBinding(e,t,n){const i=this.editor.getBindingUtil(t).onBindingUpdate?.(this.editor,e,t);this.applyEffect(i,n,t.id)}repairLoadedBindings(e){G(this.editor).atomic(()=>{const t=new Set;for(const n of this.getAllBindings()){const i=this.editor.getShape(n.fromId),o=this.editor.getShape(n.toId);if(!i||!o){this.applyEffect(this.editor.getBindingUtil(n).onInvalidBindingLoad?.(this.editor,n),e,n.id),G(this.editor).remove([n.id],e);continue}if(!this.canBind(n)){this.applyEffect(this.editor.getBindingUtil(n).onInvalidBindingLoad?.(this.editor,n),e,n.id),G(this.editor).remove([n.id],e);continue}const r=this.getExclusiveBindingKey(n);if(r){if(t.has(r)){G(this.editor).remove([n.id],e);continue}t.add(r)}const s=this.editor.getBindingUtil(n).onBindingLoad?.(this.editor,n);this.applyEffect(s,e,n.id)}},e)}handleShapeChanges(e,t){if(0===e.length)return;const n=(i=this.editor,vI.get(i)?.suppressedBindingIds??wI);var i;const o=new Set(e.map(e=>e.after.id)),r=new Set,s=new Set,a=(e,i,o,a)=>{for(const l of this.editor.queries.getBindingsForShape(e.id)){if(n.has(l.id))continue;if("ancestry"===a&&s.has(l.id))continue;const d=`${l.id}:${e.id}:${a}`;if(r.has(d))continue;r.add(d),"self"===a&&s.add(l.id);const c=l.fromId===e.id?"from":"to",u=this.editor.getBindingUtil(l).onAfterShapeChange?.(this.editor,l,{before:i,after:o,role:c,reason:a});this.applyEffect(u,t,l.id)}};for(const l of e)a(l.after,l.before,l.after,"self");for(const l of e)if(He(l))for(const e of this.editor.getDescendantShapeIds(l.after.id)){if(o.has(e))continue;const t=this.editor.getShape(e);t&&a(t,t,t,"ancestry")}}getShapeHierarchyRootId(e){const t=Xe(e,this.getAllBindings(),e=>this.editor.getBindingUtil(e));return this.editor.getShape(t)?t:e}cleanupBindingsForDeletedShapes(e,t){if(0===e.length)return;const n=new Set(e),i=new Set;for(const o of e){const e=this.editor.getShape(o);if(e)for(const r of this.editor.queries.getBindingsForShape(o)){if(i.has(r.id))continue;i.add(r.id);const s=r.fromId===o?"from":"to";if("to"===s&&n.has(r.fromId)){G(this.editor).remove([r.id],t);continue}const a=this.editor.getBindingUtil(r).onBeforeDeleteShape?.(this.editor,r,{shape:e,role:s});this.applyEffect(a,t,r.id)}}}cleanupBindings(e,t){for(const n of e){const e=this.editor.getBinding(n);if(!e)continue;const i=this.editor.getBindingUtil(e).onBeforeDeleteBinding?.(this.editor,e);this.applyEffect(i,t,e.id)}}applyEffect(e,t,n){if(!e)return;const i=new Set(e.suppressBindingIds??[]);n&&i.add(n),be(this.editor,i,()=>{e.deleteBindingIds&&e.deleteBindingIds.length>0&&G(this.editor).remove(Array.from(new Set(e.deleteBindingIds)),t),e.bindings&&e.bindings.length>0&&G(this.editor).put(e.bindings,t),e.shapes&&e.shapes.length>0&&this.editor.commands.updateShapes(e.shapes.map(e=>({id:e.id,x:e.x,y:e.y,rotation:e.rotation,skewX:e.skewX,scaleX:e.scaleX,scaleY:e.scaleY,opacity:e.opacity,isHidden:e.isHidden,isLocked:e.isLocked,parentId:e.parentId,index:e.index,props:e.props,meta:e.meta})),{source:t}),e.deleteShapeIds&&e.deleteShapeIds.length>0&&this.editor.commands.deleteShapes(Array.from(new Set(e.deleteShapeIds)),{source:t})})}getAllBindings(){return G(this.editor).getAll().filter(S).sort((e,t)=>e.id.localeCompare(t.id))}getExclusiveBindingKey(e){const t=this.editor.getBindingUtil(e).getExclusiveBindingKey?.(e);return t?`${e.type}:${t}`:null}},EI=class{editor;_viewportScreenSizeSignal=a("editor.viewportScreenSize",{w:0,h:0});viewportScreenSizeSignal=this._viewportScreenSizeSignal;constructor(e){this.editor=e}getCurrentCamera(){return this.editor.currentCameraSignal.get()}getCamera(e=this.editor.getCurrentPageId()){return this.editor.sessionSignal.get().pageCameraById[e]??pI}pageToScreen(e,t=this.editor.getCurrentPageId()){const n=this.getCamera(t);return new e.constructor((e.x-n.x)*n.z,(e.y-n.y)*n.z)}screenToPage(e,t=this.editor.getCurrentPageId()){const n=this.getCamera(t);return new e.constructor(e.x/n.z+n.x,e.y/n.z+n.y)}setCamera(e,t){const n=t?.source??"system",i=t?.pageId??this.editor.getCurrentPageId(),o=this.getCamera(i),r={x:"number"==typeof e.x?e.x:o.x,y:"number"==typeof e.y?e.y:o.y,z:Ke("number"==typeof e.z?e.z:o.z)};this.editor.updateSession({pageCameraById:{...this.editor.sessionSignal.get().pageCameraById,[i]:r}},n)}panCamera(e,t="system"){const n=this.getCurrentCamera();this.setCamera({x:n.x+e.x/n.z,y:n.y+e.y/n.z},{source:t})}zoomCameraAtScreenPoint(e,t,n="system"){const i=Ke(this.getCurrentCamera().z*Math.exp(.0015*-t));this.zoomCameraToScreenPoint(e,i,n)}zoomCameraToScreenPoint(e,t,n="system"){const i=Ke(t),o=this.screenToPage(e);this.setCamera({x:o.x-e.x/i,y:o.y-e.y/i,z:i},{source:n})}zoomAtViewportCenter(e,t="system"){const n=this.viewportScreenSizeSignal.get(),i=new sI(n.w/2,n.h/2);this.zoomCameraAtScreenPoint(i,e,t)}resetZoom(e="user"){const t=this.viewportScreenSizeSignal.get(),n=new sI(t.w/2,t.h/2),i=this.screenToPage(n);this.editor.commands.setCamera({camera:{x:i.x-n.x,y:i.y-n.y,z:1}},{source:e})}setViewportScreenSize(e){const t={w:Math.max(0,e.w),h:Math.max(0,e.h)},n=this._viewportScreenSizeSignal.get();n.w===t.w&&n.h===t.h||this._viewportScreenSizeSignal.set(t)}},AI=new sI(24,24),BI=class{editor;constructor(e){this.editor=e}createPayloadFromSelection(){return at(this.editor)}pastePayload(e){return this.editor.cancelInteractionForCommand(),lt(this.editor,e)}duplicateSelection(e={}){return this.editor.cancelInteractionForCommand(),((e,t={})=>{const n=at(e);return n?lt(e,{payload:n,offset:t.offset??AI,source:t.source}):[]})(this.editor,e)}},RI=class extends Error{constructor(e){super(e),this.name="SnapshotParseError"}},LI=class{editor;constructor(e){this.editor=e}buildInitialRecords(e,t,n={}){const i=this.parseInitialDocumentSnapshot(e,n),o=this.parseInitialSessionSnapshot(t);return[...i.records.length?i.records:[c(n),u()],o.records[0]??h()]}getDocumentSnapshot(){const e=this.editor.store.getAll();return{schemaVersion:2,records:[e.find(g)??c(),...this.editor.getPages(),...e.filter(y).sort((e,t)=>e.id.localeCompare(t.id)),...e.filter(f).sort((e,t)=>e.parentId===t.parentId?e.index.localeCompare(t.index):e.parentId.localeCompare(t.parentId)),...e.filter(S).sort((e,t)=>e.id.localeCompare(t.id))]}}getSessionSnapshot(){return{schemaVersion:1,records:[this.editor.sessionSignal.get()]}}loadDocumentSnapshot(e,t){const n=t?.source??"system",i=At(e,this.editor.shapeUtils,this.editor.bindingUtils);this.editor.cancelInteractionAndClearTransients("restore"),this.editor.editing.end({runEditEnd:!1,source:n}),this.editor.editing.cancelOperation();const o=this.editor.sessionSignal.get();G(this.editor).replaceAll([...i.records,o],n),this.syncAfterDocumentSnapshotLoad(n)}loadSessionSnapshot(e,t){const n=t?.source??"system",i=Bt(e).records[0]??h(),o=G(this.editor).getAll().filter(b);this.editor.cancelInteractionAndClearTransients("restore"),this.editor.editing.end({runEditEnd:!1,source:n}),this.editor.editing.cancelOperation(),G(this.editor).replaceAll([...o,i],n),this.ensureSessionIntegrity(),this.editor.syncToolStateFromSession(n)}syncAfterDocumentRestore(){this.ensureSessionIntegrity(),this.editor.syncShapeCounter(),this.editor.syncPageCounter(),this.editor.syncBindingCounter(),this.editor.syncAssetCounter()}ensureSessionIntegrity(){const e=G(this.editor),t=e.getAll(),n=t.filter(p).sort((e,t)=>e.index.localeCompare(t.index)),i=n[0]?.id??"page:default",o=new Set(n.map(e=>e.id)),r=t.filter(f),s=new Set(r.map(e=>e.id)),a=new Map(r.map(e=>[e.id,e])),l=new Map;for(const h of r)l.set(h.id,nt(h,a,o)??i);const d=t.find(e=>e.id===hI),c=m(d)?d:h(i),u={...c,currentPageId:o.has(c.currentPageId)?c.currentPageId:i,pageCameraById:this.repairCameraByPage(c.pageCameraById,o),pageSelectedShapeIdsById:this.repairSelectionByPage(c.pageSelectedShapeIdsById,o,s,l)};e.put([u],"system")}syncAfterDocumentSnapshotLoad(e){this.syncAfterDocumentRestore(),this.editor.history.clear(),this.editor.bindings.repairLoadedBindings(e)}repairCameraByPage(e,t){const n={};for(const i of t){const t=e[i]??pI;n[i]={x:Number.isFinite(t.x)?t.x:pI.x,y:Number.isFinite(t.y)?t.y:pI.y,z:Math.min(8,Math.max(.1,Number.isFinite(t.z)?t.z:pI.z))}}return n}repairSelectionByPage(e,t,n,i){const o={};for(const r of t)o[r]=Array.from(new Set((e[r]??[]).filter(e=>n.has(e)&&i.get(e)===r)));return o}parseInitialDocumentSnapshot(e,t){if(!e)return{schemaVersion:2,records:[c(t),u()]};try{return At(e,this.editor.shapeUtils,this.editor.bindingUtils)}catch(n){if(!(n instanceof RI))throw n;return{schemaVersion:2,records:[c(t),u()]}}}parseInitialSessionSnapshot(e){if(!e)return{schemaVersion:1,records:[h()]};try{return Bt(e)}catch(t){if(!(t instanceof RI))throw t;return{schemaVersion:1,records:[h()]}}}},$I=class{pressedKeyCodes=a("inputs.pressedKeyCodes",new Set);isSpacePressed=l("inputs.isSpacePressed",()=>this.pressedKeyCodes.get().has("Space"));state=a("inputs.state",{originPagePoint:null,currentPagePoint:null,previousPagePoint:null,originScreenPoint:null,currentScreenPoint:null,previousScreenPoint:null,currentTimestamp:null,previousTimestamp:null,pageVelocity:Rt(),screenVelocity:Rt(),pointerId:null,pointerType:null,buttons:0,isPointing:!1,isDragging:!1,dragPhase:"idle",shiftKey:!1,altKey:!1,ctrlKey:!1,metaKey:!1,accelKey:!1});setCurrentPointerPoint(e){this.state.update(t=>{if(t.currentPagePoint?.equals(e.pagePoint)&&t.currentScreenPoint?.equals(e.screenPoint)&&t.currentTimestamp===e.timestamp&&t.shiftKey===e.shiftKey&&t.altKey===e.altKey&&t.ctrlKey===e.ctrlKey&&t.metaKey===e.metaKey&&t.accelKey===e.accelKey)return t;const n=t.currentPagePoint??e.pagePoint,i=t.currentScreenPoint??e.screenPoint,o=t.currentTimestamp??e.timestamp,r=e.timestamp-o;return{...t,previousPagePoint:n,previousScreenPoint:i,currentPagePoint:e.pagePoint,currentScreenPoint:e.screenPoint,previousTimestamp:o,currentTimestamp:e.timestamp,pageVelocity:Lt(n,e.pagePoint,r),screenVelocity:Lt(i,e.screenPoint,r),shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey}})}handleEvent(e){switch(e.type){case"pointer":return void this.handlePointerEvent(e);case"keyboard":return void this.handleKeyboardEvent(e);case"wheel":return void this.handleWheelEvent(e);case"cancel":return this.resetPointer(),void("blur"!==e.reason&&"dispose"!==e.reason||this.resetKeyboard())}}resetPointer(){this.state.update(e=>({...e,originPagePoint:null,currentPagePoint:null,previousPagePoint:null,originScreenPoint:null,currentScreenPoint:null,previousScreenPoint:null,currentTimestamp:null,previousTimestamp:null,pageVelocity:Rt(),screenVelocity:Rt(),pointerId:null,pointerType:null,buttons:0,isPointing:!1,isDragging:!1,dragPhase:"idle"}))}handlePointerEvent(e){this.state.update(t=>{switch(e.name){case"pointer_down":return{...t,originPagePoint:e.pagePoint,currentPagePoint:e.pagePoint,previousPagePoint:e.pagePoint,originScreenPoint:e.screenPoint,currentScreenPoint:e.screenPoint,previousScreenPoint:e.screenPoint,currentTimestamp:e.timestamp,previousTimestamp:e.timestamp,pageVelocity:Rt(),screenVelocity:Rt(),pointerId:e.pointerId,pointerType:e.pointerType,buttons:e.buttons,isPointing:!0,isDragging:!1,dragPhase:"pointing",shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey};case"pointer_move":{if(t.currentPagePoint?.equals(e.pagePoint)&&t.currentScreenPoint?.equals(e.screenPoint)&&t.currentTimestamp===e.timestamp&&t.buttons===e.buttons&&$t(t,e))return t;const n=t.currentPagePoint??e.pagePoint,i=t.currentScreenPoint??e.screenPoint,o=t.isDragging||(t.originPagePoint??e.pagePoint).dist2(e.pagePoint)>=9,r=t.currentTimestamp??e.timestamp,s=e.timestamp-r;return{...t,previousPagePoint:n,previousScreenPoint:i,currentPagePoint:e.pagePoint,currentScreenPoint:e.screenPoint,previousTimestamp:r,currentTimestamp:e.timestamp,pageVelocity:Lt(n,e.pagePoint,s),screenVelocity:Lt(i,e.screenPoint,s),buttons:e.buttons,isDragging:o,dragPhase:o?"dragging":"pointing",shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey}}case"pointer_up":case"pointer_cancel":return{...t,previousPagePoint:t.currentPagePoint,previousScreenPoint:t.currentScreenPoint,currentPagePoint:e.pagePoint,currentScreenPoint:e.screenPoint,previousTimestamp:t.currentTimestamp,currentTimestamp:e.timestamp,pageVelocity:Rt(),screenVelocity:Rt(),buttons:e.buttons,isPointing:!1,isDragging:!1,dragPhase:"idle",shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey}}})}handleKeyboardEvent(e){this.pressedKeyCodes.update(t=>{const n="key_down"===e.name;if(t.has(e.code)===n)return t;const i=new Set(t);return n?i.add(e.code):i.delete(e.code),i}),this.state.update(t=>$t(t,e)?t:{...t,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey})}resetKeyboard(){this.pressedKeyCodes.get().size>0&&this.pressedKeyCodes.set(new Set),this.state.update(e=>e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||e.accelKey?{...e,shiftKey:!1,altKey:!1,ctrlKey:!1,metaKey:!1,accelKey:!1}:e)}handleWheelEvent(e){this.state.update(t=>$t(t,e)?t:{...t,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey})}},FI=class{editor;_brushBoxSignal=a("editor.brushBox",null);brushBoxSignal=this._brushBoxSignal;brushBoxActiveSignal=l("editor.brushBoxActive",()=>null!==this._brushBoxSignal.get());_bindingPreviewSignal=a("editor.bindingPreview",null);bindingPreviewSignal=this._bindingPreviewSignal;bindingPreviewActiveSignal=l("editor.bindingPreviewActive",()=>null!==this._bindingPreviewSignal.get());_terminalBindingGuidesSignal=a("editor.terminalBindingGuides",[]);terminalBindingGuidesSignal=this._terminalBindingGuidesSignal;_dropTargetShapeIdSignal=a("editor.dropTargetShapeId",null);dropTargetShapeIdSignal=this._dropTargetShapeIdSignal;_hoveredShapeIdSignal=a("editor.hoveredShapeId",null);hoveredShapeIdSignal=this._hoveredShapeIdSignal;_selectionTranslationActiveSignal=a("editor.selectionTranslationActive",!1);selectionTranslationActiveSignal=this._selectionTranslationActiveSignal;terminalBindingResolver=(e,t)=>(({rawPagePoint:e})=>({pagePoint:e.clone(),binding:null,preview:null}))(t);constructor(e){this.editor=e}setBrushBox(e){Qe(this._brushBoxSignal.get(),e)||this._brushBoxSignal.set(e?e.clone():null)}setBindingPreview(e){var t,n;(t=this._bindingPreviewSignal.get())===(n=e)||(t&&n?t.terminal===n.terminal&&t.targetShapeId===n.targetShapeId&&Ve(t.rawPagePoint,n.rawPagePoint)&&Ve(t.resolvedPagePoint,n.resolvedPagePoint)&&(t.guidePath??null)===(n.guidePath??null):t===n)||this._bindingPreviewSignal.set(e?{...e,rawPagePoint:e.rawPagePoint.clone(),resolvedPagePoint:e.resolvedPagePoint.clone()}:null)}setTerminalBindingGuides(e){const t=e??[];((e,t)=>{if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],o=t[n];if(!i||!o||!Ot(i,o))return!1}return!0})(this._terminalBindingGuidesSignal.get(),t)||this._terminalBindingGuidesSignal.set(t.map(Ft))}setDropTargetShapeId(e){this._dropTargetShapeIdSignal.get()!==e&&this._dropTargetShapeIdSignal.set(e)}setHoveredShapeId(e){this._hoveredShapeIdSignal.get()!==e&&this._hoveredShapeIdSignal.set(e)}setSelectionTranslationActive(e){this._selectionTranslationActiveSignal.get()!==e&&this._selectionTranslationActiveSignal.set(e)}setSnapIndicators(e){e?this.editor.snaps.setIndicators(e):this.editor.snaps.clearIndicators()}setTerminalBindingResolver(e){this.terminalBindingResolver=e}resolveTerminalBinding(e){return this.terminalBindingResolver(this.editor,e)}clearSelectionTransients(){this.setBrushBox(null),this.setBindingPreview(null),this.setTerminalBindingGuides(null),this.setDropTargetShapeId(null),this.setHoveredShapeId(null),this.setSelectionTranslationActive(!1),this.setSnapIndicators(null)}},UI=.001,DI=class{editor;stateSignal;currentPageShapeIdsSignal;currentPageShapesSignal;currentPageShapeHierarchySignal;selectionGeometrySignal;selectionPageOutlineVerticesSignal;selectionPageBoundsSignal;selectionFrameBoundsSignal;selectionHasRotationSignal;selectionRotationSignal;selectionRotationCenterSignal;selectionHasCompatibleRotationSignal;selectionAnchorPagePointSignal;stateAtom;shapeQuerySignals=new Map;bindingsFromShapeSignals=new Map;bindingsToShapeSignals=new Map;bindingsForShapeSignals=new Map;draftBindingIndex=null;constructor(e){this.editor=e;const t=G(this.editor);this.stateAtom=a("editor.query.state",(e=>{const t=e.filter(p).sort((e,t)=>e.index.localeCompare(t.index)),n=e.filter(f).sort((e,t)=>e.parentId===t.parentId?((e,t)=>e.index.localeCompare(t.index))(e,t):e.parentId.localeCompare(t.parentId)),i=e.filter(S).sort(Xt),o=new Map,r=new Map,s=new Map,a=new Map(n.map(e=>[e.id,e])),l=new Map,d=new Map,c=new Map,u=new Map;for(const p of n)zt(r,p.parentId,p.id);const h=(e,t)=>{for(const n of r.get(t)??[]){const t=a.get(n);t&&(zt(o,e,t.id),s.set(t.id,e),h(e,t.id))}};for(const p of t)h(p.id,p.id);for(const p of i)l.set(p.id,p),Nt(d,p.fromId,p.id),Nt(c,p.toId,p.id),Nt(u,p.fromId,p.id),Nt(u,p.toId,p.id);return{pageShapeIdsByPage:o,childShapeIdsByParent:r,pageIdByShape:s,bindingById:l,bindingIdsByFromShape:d,bindingIdsByToShape:c,relatedBindingIdsByShape:u}})(Array.from(t.recordsSignal.get().values()))),this.stateSignal=this.stateAtom,t.listen(e=>{this.handleStoreChange(e)}),this.currentPageShapeIdsSignal=l("editor.query.currentPageShapeIds",()=>this.getShapeIdsForPageSnapshot(this.editor.getCurrentPageId()),{isEqual:Wt}),this.currentPageShapesSignal=l("editor.query.currentPageShapes",()=>this.currentPageShapeIdsSignal.get().map(e=>this.editor.getShapeSignal(e).get()).filter(e=>!!e)),this.currentPageShapeHierarchySignal=l("editor.query.currentPageShapeHierarchy",()=>this.currentPageShapeIdsSignal.get().map(e=>this.editor.getShapeSignal(e).get()).filter(e=>!!e).map(e=>({id:e.id,parentId:e.parentId,type:e.type})),{isEqual:on});const n=((e,t)=>{const n=l("editor.query.selectionGeometry",()=>nn(e,t),{isEqual:Jt}),i=l("editor.query.selectionPageOutlineVertices",()=>n.get().outlineVertices,{isEqual:Qt}),o=l("editor.query.selectionPageBounds",()=>n.get().pageBounds,{isEqual:Qe}),r=l("editor.query.selectionFrameBounds",()=>n.get().frameBounds,{isEqual:Qe}),s=l("editor.query.selectionRotation",()=>n.get().rotation);return{geometry:n,pageOutlineVertices:i,pageBounds:o,frameBounds:r,hasRotation:l("editor.query.selectionHasRotation",()=>n.get().hasRotation),rotation:s,rotationCenter:l("editor.query.selectionRotationCenter",()=>n.get().rotationCenter,{isEqual:Ve}),hasCompatibleRotation:l("editor.query.selectionHasCompatibleRotation",()=>n.get().hasCompatibleRotation),selectionAnchorPagePoint:l("editor.query.selectionAnchorPagePoint",()=>n.get().selectionAnchorPagePoint,{isEqual:Ve})}})(this.editor,e=>this.getShapeGeometrySnapshot(e));this.selectionGeometrySignal=n.geometry,this.selectionPageOutlineVerticesSignal=n.pageOutlineVertices,this.selectionPageBoundsSignal=n.pageBounds,this.selectionFrameBoundsSignal=n.frameBounds,this.selectionRotationSignal=n.rotation,this.selectionHasRotationSignal=n.hasRotation,this.selectionRotationCenterSignal=n.rotationCenter,this.selectionHasCompatibleRotationSignal=n.hasCompatibleRotation,this.selectionAnchorPagePointSignal=n.selectionAnchorPagePoint}getShapeIdsForPage(e){return[...this.getShapeIdsForPageSnapshot(e)]}getShapesForPage(e){return this.getShapeIdsForPageSnapshot(e).map(e=>this.editor.getShape(e)).filter(e=>!!e)}getChildShapeIds(e){return[...this.getChildShapeIdsSnapshot(e)]}getChildShapes(e){return this.getChildShapeIdsSnapshot(e).map(e=>this.editor.getShape(e)).filter(e=>!!e)}getDescendantShapeIds(e){const t=[],n=new Set,i=e=>{for(const o of this.getChildShapeIdsSnapshot(e))n.has(o)||(n.add(o),t.push(o),i(o))};return i(e),t}getPageIdForShape(e){return this.stateSignal.get().pageIdByShape.get(e)??null}getPageIdForShapeParent(e){return e.startsWith("page:")?this.editor.getPage(e)?e:null:this.getPageIdForShape(e)}getDescendantPageBounds(e){const t=[];for(const n of this.getDescendantShapeIds(e)){const e=this.getShapePageBounds(n);e&&t.push(e)}return fn(t)}getShapeSubtreePageBounds(e){const t=[],n=this.getShapePageBounds(e);n&&t.push(n);for(const i of this.getDescendantShapeIds(e)){const e=this.getShapePageBounds(i);e&&t.push(e)}return fn(t)}getShapeContainment(e,t){const n=this.editor.getShape(e);if(!n)return null;const i=this.getShapeGeometrySnapshot(e),o=this.getShapeGeometrySnapshot(t);if(!i||!o)return null;const r=this.editor.getShapeUtil(n).getLocalBounds(n),s=this.getShapeQuerySignals(e).localToPageTransform.get()?.tryInvert();return s&&o.outlineVertices.length>0&&o.outlineVertices.every(e=>r.containsPoint(s.applyToPoint(e)))?"inside":i.bounds.intersects(o.bounds)?"intersecting":"outside"}getContainingShapeParentId(e){const t=Array.from(new Set(e));if(0===t.length)return null;const n=t.map(e=>this.editor.getShape(e)).filter(e=>!!e);if(n.length!==t.length)return null;const i=this.getPageIdForShape(n[0].id);if(!i)return null;if(n.some(e=>this.getPageIdForShape(e.id)!==i))return null;const o=new Set;for(const d of n){o.add(d.id);for(const e of this.getDescendantShapeIds(d.id))o.add(e)}let r=null,s=1/0,a=-1;const l=this.stateSignal.get().pageShapeIdsByPage.get(i)??[];for(let d=0;d<l.length;d+=1){const e=l[d];if(o.has(e))continue;const t=this.editor.getShape(e);if(!t||this.editor.isShapeHidden(t.id)||this.editor.isShapeOrAncestorLocked(t.id))continue;if(!Sn(t,this.editor.getShapeUtil(t)))continue;if(!n.every(e=>this.editor.canUseShapeParent(t.id,e.id)))continue;if(!n.every(e=>"inside"===this.getShapeContainment(t.id,e.id)))continue;const i=this.getShapePageBounds(t.id);if(!i)continue;const c=i.w*i.h;(!r||c<s||c===s&&d>a)&&(r=t,s=c,a=d)}return r?.id??i}getContainingShapeParentIdAtPoint(e,t){const n=Array.from(new Set(e));if(0===n.length)return null;const i=n.map(e=>this.editor.getShape(e)).filter(e=>!!e);if(i.length!==n.length)return null;const o=this.getPageIdForShape(i[0].id);if(!o)return null;if(i.some(e=>this.getPageIdForShape(e.id)!==o))return null;const r=new Set;for(const c of i){r.add(c.id);for(const e of this.getDescendantShapeIds(c.id))r.add(e)}let s=null,a=1/0,l=-1;const d=this.stateSignal.get().pageShapeIdsByPage.get(o)??[];for(let c=0;c<d.length;c+=1){const e=d[c];if(r.has(e))continue;const n=this.editor.getShape(e);if(!n||this.editor.isShapeHidden(n.id)||this.editor.isShapeOrAncestorLocked(n.id))continue;const o=this.editor.getShapeUtil(n);if(!Sn(n,o))continue;if(!i.every(e=>this.editor.canUseShapeParent(n.id,e.id)))continue;if(!this.editor.isPagePointInShapeClip(n.id,t))continue;const u=o.getLocalBounds(n),h=this.getShapeQuerySignals(n.id).localToPageTransform.get()?.tryInvert();if(!h||!u.containsPoint(h.applyToPoint(t)))continue;const p=this.getShapePageBounds(n.id);if(!p)continue;const g=p.w*p.h;(!s||g<a||g===a&&c>l)&&(s=n,a=g,l=c)}return s?.id??o}getContainingParentIdForShapeRecord(e){const t=(e=>{const t=new Set;let n=e;for(;n.startsWith("shape:");){const e=n;if(t.has(e))return null;t.add(e);const i=this.editor.getShape(e);if(!i)return null;n=i.parentId}return this.editor.getPage(n)?n:null})(e.parentId);if(!t)return null;const n=this.getShapeParentToPageTransformSnapshot(e.parentId,e=>this.editor.getShape(e));if(!n)return null;const i=Se(e,this.editor.getShapeUtil(e),n);let o=null,r=1/0,s=-1;const a=new Map;for(const u of G(this.editor).getAll().filter(f)){const e=a.get(u.parentId)??[];e.push(u),a.set(u.parentId,e)}for(const u of a.values())u.sort((e,t)=>e.index.localeCompare(t.index)||e.id.localeCompare(t.id));const l=[],d=new Set,c=e=>{for(const t of a.get(e)??[])d.has(t.id)||(d.add(t.id),l.push(t),c(t.id))};c(t);for(let u=0;u<l.length;u+=1){const t=l[u];if(!t||t.id===e.id||this.editor.isShapeHidden(t.id)||this.editor.isShapeOrAncestorLocked(t.id))continue;const n=this.editor.getShapeUtil(t);if(!Sn(t,n))continue;if(!this.editor.canUseShapeParent(t.id,e.id))continue;const a=this.editor.computeShapePageBounds(t),d=n.getLocalBounds(t),c=this.editor.computeShapeLocalToPageTransform(t).tryInvert();if(!(c&&i.outlineVertices.length>0&&i.outlineVertices.every(e=>d.containsPoint(c.applyToPoint(e)))))continue;const h=a.w*a.h;(!o||h<r||h===r&&u>s)&&(o=t,r=h,s=u)}return o?.id??t}getShapeClipAncestorIds(e){return[...this.getShapeClipAncestorIdsSignal(e).get()]}getShapeClipAncestorIdsSignal(e){return this.getShapeQuerySignals(e).clipAncestorIds}isPagePointInShapeClip(e,t){const n=this.editor.getShape(e);if(!n)return!1;for(const i of this.getShapeClipAncestorsForShape(n,e=>this.editor.getShape(e))){const e=this.editor.getShapeUtil(i).getChildClipLocalPolygons(i);if(!e||!P(e))continue;const n=this.getShapeQuerySignals(i.id).localToPageTransform.get()?.tryInvert();if(!n)return!1;if(!C(n.applyToPoint(t),e))return!1}return!0}getShapeClippedPageBounds(e){let t=this.getShapePageBounds(e);if(!t)return null;for(const n of this.getShapeClipAncestors(e)){const e=this.getShapeChildClipPageBounds(n);if(!e)continue;const i=mn(t,e);if(!i)return null;t=i}return t}getShapeClipAncestors(e){const t=this.editor.getShape(e);return t?this.getShapeClipAncestorsForShape(t,e=>this.editor.getShape(e)):[]}getShapeClipAncestorsForShape(e,t){const n=[],i=new Set;let o=e.parentId;for(;o.startsWith("shape:");){const e=o;if(i.has(e))break;i.add(e);const r=t(e);if(!r)break;const s=this.editor.getShapeUtil(r).getChildClipLocalPolygons(r);s&&P(s)&&n.push(r),o=r.parentId}return n.reverse()}getShapeChildClipPageBounds(e){const t=this.editor.getShapeUtil(e).getChildClipLocalPolygons(e),n=t?P(t):null;if(!n)return null;const i=this.getShapeQuerySignals(e.id).localToPageTransform.get();return i?(r=i,aI.FromPoints([new sI((o=n).minX,o.minY),new sI(o.maxX,o.minY),new sI(o.maxX,o.maxY),new sI(o.minX,o.maxY)].map(e=>r.applyToPoint(e)))):null;var o,r}getShapeIdsForPageSnapshot(e){return this.stateSignal.get().pageShapeIdsByPage.get(e)??[]}getChildShapeIdsSnapshot(e){return this.stateSignal.get().childShapeIdsByParent.get(e)??[]}handleStoreChange(e){const t=G(this.editor),i=this.stateAtom.get(),o=((e,t,n)=>{const i=t.diff.added.filter(f),o=t.diff.updated.filter(jt),r=t.diff.removed.filter(f),s=t.diff.added.filter(S),a=t.diff.updated.filter(Vt),l=t.diff.removed.filter(S),d=i.length>0||r.length>0||o.some(({before:e,after:t})=>e.parentId!==t.parentId||e.index!==t.index),c=s.length>0||l.length>0||a.some(({before:e,after:t})=>e.fromId!==t.fromId||e.toId!==t.toId),u=s.length>0||l.length>0||a.length>0;if(!d&&!u)return e;const h={pageShapeIdsByPage:new Map(e.pageShapeIdsByPage),childShapeIdsByParent:new Map(e.childShapeIdsByParent),pageIdByShape:new Map(e.pageIdByShape),bindingById:new Map(e.bindingById),bindingIdsByFromShape:new Map(e.bindingIdsByFromShape),bindingIdsByToShape:new Map(e.bindingIdsByToShape),relatedBindingIdsByShape:new Map(e.relatedBindingIdsByShape)};let g=!1;if(d){const t=e=>{const t=n(e);return f(t)?t.index:void 0},s=new Set,a=e=>{let t=e;const i=new Set;for(;t&&!i.has(t);){i.add(t);const e=n(t);if(!e)return null;if(p(e))return e.id;if(!f(e))return null;t=e.parentId}return null};for(const n of r){qt(h.childShapeIdsByParent,n.parentId,n.id);const t=e.pageIdByShape.get(n.id);t&&s.add(t)}for(const{before:n,after:i}of o){if(n.parentId===i.parentId&&n.index===i.index)continue;qt(h.childShapeIdsByParent,n.parentId,n.id),Yt(h.childShapeIdsByParent,i.parentId,i,t);const o=e.pageIdByShape.get(n.id);o&&s.add(o);const r=a(i.parentId);r&&s.add(r)}for(const e of i)Yt(h.childShapeIdsByParent,e.parentId,e,t);for(const e of i){const t=a(e.parentId);t&&s.add(t)}if(s.size>0){const t=new Map(e.pageShapeIdsByPage),i=new Map(e.pageIdByShape);for(const[n,r]of e.pageIdByShape)s.has(r)&&i.delete(n);const o=(e,t)=>{const r=[];for(const s of h.childShapeIdsByParent.get(t)??[])n(s)&&(r.push(s),i.set(s,e),r.push(...o(e,s)));return r};for(const e of s){const n=o(e,e);n.length>0?t.set(e,n):t.delete(e)}h.pageShapeIdsByPage=t,h.pageIdByShape=i}g=!0}if(u){for(const e of l)g=h.bindingById.delete(e.id)||g;if(c){for(const e of l)g=_t(h.bindingIdsByFromShape,e.fromId,e.id)||g,g=_t(h.bindingIdsByToShape,e.toId,e.id)||g,g=_t(h.relatedBindingIdsByShape,e.fromId,e.id)||g,g=_t(h.relatedBindingIdsByShape,e.toId,e.id)||g;for(const{before:e,after:t}of a)e.fromId===t.fromId&&e.toId===t.toId||(g=_t(h.bindingIdsByFromShape,e.fromId,e.id)||g,g=_t(h.bindingIdsByToShape,e.toId,e.id)||g,g=_t(h.relatedBindingIdsByShape,e.fromId,e.id)||g,g=_t(h.relatedBindingIdsByShape,e.toId,e.id)||g)}for(const e of s)h.bindingById.set(e.id,e),g=!0;for(const{after:e}of a)h.bindingById.set(e.id,e),g=!0;if(c){for(const e of s)g=Kt(h.bindingIdsByFromShape,e.fromId,e,"from",e=>h.bindingById.get(e))||g,g=Kt(h.bindingIdsByToShape,e.toId,e,"to",e=>h.bindingById.get(e))||g,g=Kt(h.relatedBindingIdsByShape,e.fromId,e,"related",e=>h.bindingById.get(e))||g,g=Kt(h.relatedBindingIdsByShape,e.toId,e,"related",e=>h.bindingById.get(e))||g;for(const{before:e,after:t}of a)e.fromId===t.fromId&&e.toId===t.toId||(g=Kt(h.bindingIdsByFromShape,t.fromId,t,"from",e=>h.bindingById.get(e))||g,g=Kt(h.bindingIdsByToShape,t.toId,t,"to",e=>h.bindingById.get(e))||g,g=Kt(h.relatedBindingIdsByShape,t.fromId,t,"related",e=>h.bindingById.get(e))||g,g=Kt(h.relatedBindingIdsByShape,t.toId,t,"related",e=>h.bindingById.get(e))||g)}}return g?h:e})(i,e,e=>t.get(e));o!==i&&n(()=>{this.stateAtom.set(o),this.updateCachedBindingSignals(e,o)});for(const n of(e=>e.diff.removed.filter(f).map(e=>e.id))(e))this.shapeQuerySignals.delete(n)}updateCachedBindingSignals(e,t){const n=new Set,i=new Set,o=new Set,r=e=>{S(e)&&(n.add(e.fromId),i.add(e.toId),o.add(e.fromId),o.add(e.toId))};for(const s of e.diff.added)r(s);for(const s of e.diff.removed)r(s);for(const s of e.diff.updated)r(s.before),r(s.after);for(const s of n)this.bindingsFromShapeSignals.get(s)?.set(this.getBindingsFromState(t,s));for(const s of i)this.bindingsToShapeSignals.get(s)?.set(this.getBindingsToState(t,s));for(const s of o)this.bindingsForShapeSignals.get(s)?.set(this.getBindingsForState(t,s))}getShapeLocalToPageTransformSnapshot(e,t){const n=[],i=new Set;let o=e;for(;o;){if(i.has(o.id))return;if(i.add(o.id),n.push(o),o.parentId.startsWith("page:")){if(!this.editor.getPage(o.parentId))return;break}if(o=t(o.parentId),!o)return}let r=lI.Identity();for(let s=n.length-1;s>=0;s-=1){const e=n[s];e&&(r=ue(e,this.editor.getShapeUtil(e),r))}return r}getShapeParentToPageTransformSnapshot(e,t){if(e.startsWith("page:"))return this.editor.getPage(e)?lI.Identity():void 0;const n=t(e);return n?this.getShapeLocalToPageTransformSnapshot(n,t):void 0}getShapeQuerySignals(e){let t=this.shapeQuerySignals.get(e);if(!t){const n=l(`editor.query.shapePositionedBounds.${e}`,()=>{const t=this.editor.getShapeSignal(e).get();if(t)return this.editor.getShapeUtil(t).getPositionedBounds(t)},{isEqual:rn}),i=l(`editor.query.shapeLocalToPageTransform.${e}`,()=>{const t=this.editor.getShapeSignal(e).get();return t?this.getShapeLocalToPageTransformSnapshot(t,e=>this.editor.getShapeSignal(e).get()):void 0},{isEqual:dn}),o=l(`editor.query.shapeGeometry.${e}`,()=>{const t=this.editor.getShapeSignal(e).get();if(!t)return;const n=this.getShapeParentToPageTransformSnapshot(t.parentId,e=>this.editor.getShapeSignal(e).get());return n?Se(t,this.editor.getShapeUtil(t),n):void 0},{isEqual:cn});t={positionedBounds:n,geometry:o,localToPageTransform:i,positionedToPageTransform:l(`editor.query.shapePositionedToPageTransform.${e}`,()=>{const t=this.editor.getShapeSignal(e).get();if(!t)return;const n=this.getShapeParentToPageTransformSnapshot(t.parentId,e=>this.editor.getShapeSignal(e).get());return n?he(t,this.editor.getShapeUtil(t),n):void 0},{isEqual:dn}),pageBounds:l(`editor.query.shapePageBounds.${e}`,()=>o.get()?.bounds,{isEqual:rn}),clipAncestorIds:l(`editor.query.shapeClipAncestorIds.${e}`,()=>{const t=this.editor.getShapeSignal(e).get();return t?this.getShapeClipAncestorsForShape(t,e=>this.editor.getShapeSignal(e).get()).map(e=>e.id):[]},{isEqual:Wt})},this.shapeQuerySignals.set(e,t)}return t}getShapeGeometrySnapshot(e){return this.getShapeQuerySignals(e).geometry.get()}getShapePageBoundsSignal(e){return this.getShapeQuerySignals(e).pageBounds}getShapeLocalToPageTransformSignal(e){return this.getShapeQuerySignals(e).localToPageTransform}getShapeGeometry(e){return(e=>{if(e)return{bounds:e.bounds.clone(),center:e.center.clone(),corners:e.corners.map(e=>e.clone()),outlineVertices:e.outlineVertices.map(e=>e.clone())}})(this.getShapeGeometrySnapshot(e))}getShapeLocalToPageTransform(e){return gn(this.getShapeLocalToPageTransformSignal(e).get())}getShapeParentToPageTransform(e){return e.startsWith("page:")?this.editor.getPage(e)?lI.Identity():void 0:gn(this.getShapeQuerySignals(e).localToPageTransform.get())}getShapePageToParentTransform(e){return this.getShapeParentToPageTransform(e)?.tryInvert()??void 0}getShapePositionedToPageTransform(e){return gn(this.getShapeQuerySignals(e).positionedToPageTransform.get())}getShapePageBounds(e){return un(this.getShapePageBoundsSignal(e).get())??void 0}getShapePositionedBounds(e){return un(this.getShapeQuerySignals(e).positionedBounds.get())??void 0}getShapePageCenter(e){return hn(this.getShapeGeometrySnapshot(e)?.center)??void 0}getShapePageCorners(e){return pn(this.getShapeGeometrySnapshot(e)?.corners)}getShapePageOutlineVertices(e){return pn(this.getShapeGeometrySnapshot(e)?.outlineVertices)}getSelectionPageOutlineVertices(){return pn(this.selectionPageOutlineVerticesSignal.get())??[]}getSelectionPageBounds(){return un(this.selectionPageBoundsSignal.get())??null}getSelectionFrameBounds(){return un(this.selectionFrameBoundsSignal.get())??null}getSelectionRotation(){return this.selectionRotationSignal.get()}getSelectionHasRotation(){return this.selectionHasRotationSignal.get()}getSelectionRotationCenter(){return hn(this.selectionRotationCenterSignal.get())??null}getSelectionHasCompatibleRotation(){return this.selectionHasCompatibleRotationSignal.get()}getSelectionAnchorPagePoint(){return hn(this.selectionAnchorPagePointSignal.get())??null}getBinding(e){return this.stateSignal.get().bindingById.get(e)}getBindings(){return Array.from(this.stateSignal.get().bindingById.values()).sort(Xt)}getBindingIdsFromShape(e){return this.stateSignal.get().bindingIdsByFromShape.get(e)??[]}getBindingIdsToShape(e){return this.stateSignal.get().bindingIdsByToShape.get(e)??[]}getBindingIdsForShape(e){return this.stateSignal.get().relatedBindingIdsByShape.get(e)??[]}getBindingsFromShape(e){const t=this.getDraftBindingIndex();return t?[...t.bindingsFromShape.get(e)??[]]:[...this.getBindingsFromShapeSignal(e).get()]}getBindingsFromShapeSignal(e){let t=this.bindingsFromShapeSignals.get(e);return t||(t=a(`editor.query.bindingsFromShape.${e}`,this.getBindingsFromState(this.stateAtom.__unsafe__getWithoutCapture(),e),{isEqual:ln}),this.bindingsFromShapeSignals.set(e,t)),t}getBindingsToShape(e){const t=this.getDraftBindingIndex();return t?[...t.bindingsToShape.get(e)??[]]:[...this.getBindingsToShapeSignal(e).get()]}getBindingsToShapeSignal(e){let t=this.bindingsToShapeSignals.get(e);return t||(t=a(`editor.query.bindingsToShape.${e}`,this.getBindingsToState(this.stateAtom.__unsafe__getWithoutCapture(),e),{isEqual:ln}),this.bindingsToShapeSignals.set(e,t)),t}getBindingsForShape(e){const t=this.getDraftBindingIndex();return t?[...t.bindingsForShape.get(e)??[]]:[...this.getBindingsForShapeSignal(e).get()]}getBindingsForShapeSignal(e){let t=this.bindingsForShapeSignals.get(e);return t||(t=a(`editor.query.bindingsForShape.${e}`,this.getBindingsForState(this.stateAtom.__unsafe__getWithoutCapture(),e),{isEqual:ln}),this.bindingsForShapeSignals.set(e,t)),t}getBindingsFromState(e,t){return this.getBindingsForIds(e,e.bindingIdsByFromShape.get(t))}getBindingsToState(e,t){return this.getBindingsForIds(e,e.bindingIdsByToShape.get(t))}getBindingsForState(e,t){return this.getBindingsForIds(e,e.relatedBindingIdsByShape.get(t))}getBindingsForIds(e,t){return t&&0!==t.length?t.map(t=>e.bindingById.get(t)).filter(e=>!!e):[]}getDraftBindingIndex(){const e=G(this.editor),t=e.getActiveAtomicOperationRevision();if(null===t)return null;if(this.draftBindingIndex?.revision===t)return this.draftBindingIndex;const n=e.getActiveAtomicOperationSnapshot().filter(S),i=new Map,o=new Map,r=new Map,s=(e,t,n)=>{const i=e.get(t);i?i.push(n):e.set(t,[n])};for(const a of n)s(i,a.fromId,a),s(o,a.toId,a),s(r,a.fromId,a),a.toId!==a.fromId&&s(r,a.toId,a);for(const a of[i,o,r])for(const e of a.values())e.sort(Xt);return this.draftBindingIndex={revision:t,bindingsFromShape:i,bindingsToShape:o,bindingsForShape:r},this.draftBindingIndex}},OI=class{entries;cellSize;cells=new Map;order=new Map;constructor(e){this.entries=e,this.cellSize=(e=>{if(0===e.length)return 256;let t=0;for(const n of e)t+=Math.max(n.queryBounds.w,n.queryBounds.h);return Math.max(16,Math.round(t/e.length)||256)})(e);for(let t=0;t<e.length;t+=1){const n=e[t];n&&(this.order.set(n,t),this.insert(n))}}cellKey(e,t){return`${e}:${t}`}insert(e){const t=Math.floor(e.queryBounds.minX/this.cellSize),n=Math.floor(e.queryBounds.minY/this.cellSize),i=Math.floor(e.queryBounds.maxX/this.cellSize),o=Math.floor(e.queryBounds.maxY/this.cellSize);for(let r=n;r<=o;r+=1)for(let n=t;n<=i;n+=1){const t=this.cellKey(n,r),i=this.cells.get(t);i?i.push(e):this.cells.set(t,[e])}}search(e){const t=Math.floor(e.minX/this.cellSize),n=Math.floor(e.minY/this.cellSize),i=Math.floor(e.maxX/this.cellSize),o=Math.floor(e.maxY/this.cellSize);if((i-t+1)*(o-n+1)>this.entries.length)return this.entries.filter(t=>t.queryBounds.intersects(e));const r=new Set,s=[];for(let a=n;a<=o;a+=1)for(let n=t;n<=i;n+=1){const t=this.cells.get(this.cellKey(n,a));if(t)for(const n of t)r.has(n)||(r.add(n),n.queryBounds.intersects(e)&&s.push(n))}return s.length>1&&s.sort((e,t)=>(this.order.get(e)??0)-(this.order.get(t)??0)),s}},zI=class{editor;queries;pageIndexSignals=new Map;constructor(e,t){this.editor=e,this.queries=t}getShapesInBounds(e,t){return this.getShapeIdsInBounds(e,t).map(e=>this.editor.getShape(e)).filter(e=>!!e)}getShapeIdsInBounds(e,t){return this.getPageIndex(t?.pageId).search(e).filter(t=>t.shapeBounds.intersects(e)).map(e=>e.shapeId)}getShapesInViewport(e,t){return this.getShapesInBounds(e,t)}getShapeIdsInViewport(e,t){return this.getShapeIdsInBounds(e,t)}getShapeAtPoint(e,t){return this.getShapesAtPoint(e,t)[0]??null}getShapesAtPoint(e,t){const n=this.getPageIndex(t?.pageId).search((e=>new aI(e.x-.5,e.y-.5,1,1))(e)),i=[];for(let o=n.length-1;o>=0;o-=1){const r=n[o];if(!r?.pointHitTestBounds.containsPoint(e))continue;const s=this.editor.getShape(r.shapeId);if(!s)continue;if(t?.filter&&!t.filter(s))continue;const a=this.editor.getShapeUtil(s),l=this.queries.getShapeParentToPageTransform(s.parentId);if(!l)continue;const d=fe(s,e,a,l),c={editor:this.editor,pagePoint:e,positionedPoint:d};("bindingTarget"===t?.hitTest?a.hitTestBindingTarget(s,d,c):a.hitTest(s,d,c))&&i.push(s)}return i}getShapesHitByLineSegment(e,t,n){const i=n?.margin??0,o=((e,t,n)=>aI.FromPoints([e,t]).expand(Math.max(.5,n)))(e,t,i),r=this.getPageIndex(n?.pageId).search(o),s=[];for(let a=r.length-1;a>=0;a-=1){const o=r[a];if(!o)continue;const l=this.queries.getShapeClippedPageBounds(o.shapeId);if(!l||!bn(e,t,l.expand(i)))continue;if(!this.doesLineSegmentIntersectShapeClip(o.shapeId,e,t,i))continue;const d=this.editor.getShape(o.shapeId);if(!d)continue;if(n?.filter&&!n.filter(d))continue;const c=this.editor.getShapeUtil(d),u=this.queries.getShapeParentToPageTransform(d.parentId);if(!u)continue;const h=fe(d,e,c,u),p=fe(d,t,c,u),g=this.queries.getShapePositionedToPageTransform(d.id)?.tryInvert(),f=g?i*g.getMaximumLinearScale():i;c.hitTestLineSegment(d,{editor:this.editor,pageStart:e,pageEnd:t,pageMargin:i,positionedStart:h,positionedEnd:p,positionedMargin:f})&&s.push(d)}return s}doesLineSegmentIntersectShapeClip(e,t,n,i){for(const o of this.queries.getShapeClipAncestorIds(e)){const e=this.editor.getShape(o);if(!e)return!1;const r=this.editor.getShapeUtil(e).getChildClipLocalPolygons(e);if(!r)continue;const s=this.editor.computeShapeLocalToPageTransform(e).tryInvert();if(!s)return!1;const a=i*Math.sqrt(s.a*s.a+s.b*s.b+s.c*s.c+s.d*s.d),l=s.applyToPoint(t),d=s.applyToPoint(n);if(!r.some(e=>T(l,d,e,a)))return!1}return!0}getPageIndexSignal(e){let t=this.pageIndexSignals.get(e);return t||(t=l(`editor.spatialIndex.page.${e}`,()=>{const t=this.queries.stateSignal.get().pageShapeIdsByPage.get(e)??[],n=[];for(const e of t){const t=this.editor.getShapeSignal(e).get();if(!t)continue;const i=this.editor.getShapeUtil(t),o=this.queries.getShapePageBoundsSignal(e).get();if(!o)continue;const r=this.queries.getShapePositionedToPageTransform(e);if(!r)continue;const s=xn(i.getPointHitTestBounds(t,{editor:this.editor}),r),a=aI.FromPoints([new sI(o.minX,o.minY),new sI(o.maxX,o.maxY),new sI(s.minX,s.minY),new sI(s.maxX,s.maxY)]);n.push({shapeId:e,shapeBounds:o,queryBounds:a,pointHitTestBounds:s})}return new OI(n)}),this.pageIndexSignals.set(e,t)),t}getPageIndex(e=this.editor.getCurrentPageId()){return this.getPageIndexSignal(e).get()}},NI=["corner","edge_midpoint","corner","edge_midpoint","center","edge_midpoint","corner","edge_midpoint","corner"],_I={corner:0,edge_midpoint:1,center:2,custom:3},WI=["top_left","top","top_right","right","bottom_right","bottom","bottom_left","left"],XI=["top_left","top_right","bottom_right","bottom_left"],HI=["free","aspect_ratio_locked"],KI=["free"],YI=["aspect_ratio_locked"],qI=class{editor;constructor(e){this.editor=e}createTranslateSnapshot({movingShapeIds:e,coordinateSpace:t}){return this.createBoundsSnapSnapshot({movingShapeIds:e,coordinateSpace:t})}createResizeSnapshot({resizingShapeIds:e,coordinateSpace:t}){return this.createBoundsSnapSnapshot({movingShapeIds:e,coordinateSpace:t})}createHandleSnapshot({context:e,currentPagePoint:t,allowSelfSnap:n=!1,excludedShapeIds:i=[]}){const o=this.editor.getShape(e.shapeId),r=new Set(this.editor.getShapeIdsIncludingDescendants([e.shapeId]));this.collectBindingDrivenExcludedShapeIds([e.shapeId],r);for(const c of i)r.add(c);const s=[],a=[],l=this.getSnapScopeParentId([e.shapeId]),d=this.getCandidateShapeIds({excludedShapeIds:r,scopeParentId:l});o&&n&&this.collectSelfHandleSnapGeometry({shape:o,context:e,currentPagePoint:t,points:s,outlines:a});for(const c of d){const e=this.editor.getShape(c);e&&this.collectHandleSnapGeometry({shape:e,points:s,outlines:a})}return{points:s,outlines:a,scopeParentId:l,candidateShapeIds:d}}collectHandleSnapGeometry({shape:e,points:t,outlines:n}){const i=this.editor.getShapeUtil(e);if(!i.canSnap(e,{editor:this.editor}))return;const o=this.editor.getShapeClippedPageBounds(e.id);if(!o)return;const r=this.editor.computeShapeLocalToPageTransform(e),s=i.getHandleSnapGeometry(e);for(const c of s.points??[]){const n=wi(c),i=r.applyToPoint(n.point);this.editor.isPagePointInShapeClip(e.id,i)&&t.push({id:`${e.id}:point:${t.length}`,nodeId:e.id,point:i,kind:n.kind,weight:n.weight})}const a=s.outline;if(null===a)return;const l=this.editor.getShapeClipAncestorIds(e.id).length>0?zn(o):(a??(d=i.getLocalBounds(e),[new sI(d.minX,d.minY),new sI(d.maxX,d.minY),new sI(d.maxX,d.maxY),new sI(d.minX,d.maxY)])).map(e=>r.applyToPoint(e));var d;l.length>0&&n.push({id:e.id,points:l})}collectSelfHandleSnapGeometry({shape:e,context:t,currentPagePoint:n,points:i,outlines:o}){const r=this.editor.getShapeUtil(e);if(!r.canSnap(e,{editor:this.editor}))return;const s=this.editor.getShapeClippedPageBounds(e.id);if(!s)return;const a=r.getHandleSnapGeometry(e),l=this.editor.computeShapeLocalToPageTransform(e),d={...t,currentPagePoint:n.clone()};for(const h of a.getSelfSnapPoints?.(d)??[]){const t=wi(h),n=l.applyToPoint(t.point);this.editor.isPagePointInShapeClip(e.id,n)&&i.push({id:`${e.id}:self-point:${i.length}`,nodeId:e.id,point:n,kind:t.kind,weight:t.weight})}const c=a.getSelfSnapOutline?.(d)??null;if(!c)return;const u=this.editor.getShapeClipAncestorIds(e.id).length>0?zn(s):c.map(e=>l.applyToPoint(e));u.length>0&&o.push({id:e.id,points:u})}createBoundsSnapSnapshot({movingShapeIds:e,coordinateSpace:t}){const n=Array.from(e),i=new Set(this.editor.getShapeIdsIncludingDescendants(n));this.collectBindingDrivenExcludedShapeIds(n,i);const o=[],r=[],s={rotation:t.rotation,rotationCenter:t.rotationCenter},a=this.getSnapScopeParentId(n),l=this.getCandidateShapeIds({excludedShapeIds:i,scopeParentId:a});for(const d of l){const e=this.editor.getShape(d);if(!e)continue;const n=this.editor.getShapeUtil(e);if(!n.canSnap(e,{editor:this.editor}))continue;const i=this.editor.getShapeClippedPageBounds(e.id);if(!i)continue;const a=(this.editor.getShapeClipAncestorIds(e.id).length>0?zn(i):this.editor.getShapePageOutlineVertices(e.id)).map(e=>0===t.rotation?e.clone():fi(e,s));if(0===a.length)continue;const l=aI.FromPoints(a);r.push({id:e.id,bounds:l});const c=n.getBoundsSnapGeometry(e).points,u=[];if(void 0===c)An(l).forEach((e,t)=>{u.push({point:e,kind:NI[t]??"custom"})});else{const n=this.editor.computeShapeLocalToPageTransform(e);for(const i of c){const o=wi(i),r=n.applyToPoint(o.point);this.editor.isPagePointInShapeClip(e.id,r)&&u.push({point:0===t.rotation?r:fi(r,s),kind:o.kind,weight:o.weight})}}u.forEach((t,n)=>{o.push({id:`${e.id}:${n}`,nodeId:e.id,point:t.point,kind:t.kind,weight:t.weight})})}return{points:o,pointIndex:Hn(o),nodes:r,coordinateSpace:{rotation:t.rotation,rotationCenter:t.rotationCenter.clone()},scopeParentId:a,candidateShapeIds:l}}collectBindingDrivenExcludedShapeIds(e,t){const n=new Set,i=[...e];for(;i.length>0;){const e=i.pop();if(!e||n.has(e))continue;n.add(e);const o=this.editor.getShape(e);if(o)for(const n of this.editor.getBindingsForShape(e)){const r=n.fromId===e?"from":n.toId===e?"to":null;if(!r)continue;const s=this.editor.getBindingUtil(n).getGeometryDependentShapeIds?.(this.editor,n,{shape:o,role:r})??[];for(const e of s)for(const n of this.editor.getShapeIdsIncludingDescendants([e]))t.has(n)||(t.add(n),i.push(n))}}}getSnapScopeParentId(e){let t=null;for(const n of e){const e=this.editor.getShape(n);if(e)if(t){if(e.parentId!==t)return this.editor.getCurrentPageId()}else t=e.parentId}return t??this.editor.getCurrentPageId()}getCandidateShapeIds({excludedShapeIds:e,scopeParentId:t}){const n=this.editor.getCurrentPageId(),i=this.editor.renderViewportPageBoundsSignal.get(),o=new Set;if(t?.startsWith("shape:")){const e=this.editor.getShape(t);e&&this.editor.getShapeUtil(e).canSnapChildrenToSelf(e)&&o.add(e.id)}const r=t??n;for(const s of this.editor.getChildShapeIds(r))o.add(s);return(null===i?Array.from(o):this.editor.getShapeIdsInBounds(i,{pageId:n}).filter(e=>o.has(e))).filter(n=>{if(e.has(n))return!1;const o=this.editor.getShape(n);if(!o||o.parentId!==r)return n===t;const s=this.editor.getShapeClippedPageBounds(n);return!!s&&(!i||s.intersects(i))})}},jI=class{gapCache=new WeakMap;_indicatorsSignal=a("editor.snapIndicators",[]);indicatorsSignal=this._indicatorsSignal;activeSignal=l("editor.snapIndicatorsActive",()=>this._indicatorsSignal.get().length>0);snapshots;axisSnapMemory={x:null,y:null};constructor(e){this.snapshots=new qI(e)}setIndicators(e){const t=e.map(gi);ii(this._indicatorsSignal.get(),t)||this._indicatorsSignal.set(t)}clearIndicators(){this._indicatorsSignal.get().length>0&&this._indicatorsSignal.set([]),this.clearAxisSnapMemory()}clearAxisSnapMemory(){this.axisSnapMemory.x=null,this.axisSnapMemory.y=null}getSwitchDistance(e){return Math.min(.25*e,2)}getReleaseThreshold(e){return 1.5*e}updateAxisSnapMemory(e,t){this.axisSnapMemory[e]=t?{type:t.type,id:t.id,candidatePointIds:"points"===t.type?t.candidatePointIds:void 0}:null}writeDebugState(e){const t=globalThis;t.__LAND_LAST_SNAP_DEBUG__=e,t.__LAND_SNAP_DEBUG__&&t.console?.debug?.("[land:snap]",e)}getNow(){return globalThis.performance?.now?.()??Date.now()}createTranslateSnapshot({movingShapeIds:e,coordinateSpace:t}){const n=this.snapshots.createTranslateSnapshot({movingShapeIds:e,coordinateSpace:t});return this.gapCache.set(n,{x:Qn(n.nodes,"x"),y:Qn(n.nodes,"y")}),n}createResizeSnapshot({resizingShapeIds:e,coordinateSpace:t}){return this.snapshots.createResizeSnapshot({resizingShapeIds:e,coordinateSpace:t})}createHandleSnapshot(e){return this.snapshots.createHandleSnapshot(e)}snapTranslate(e){const t=this.getNow(),n=Dn(e.initialSelectionBounds,e.dragDelta),i=(o=An(e.initialSelectionBounds),r=e.dragDelta,o.map(e=>e.add(r)));var o,r;const s=this.gapCache.get(e.snapshot)??{x:Qn(e.snapshot.nodes,"x"),y:Qn(e.snapshot.nodes,"y")},a=this.getReleaseThreshold(e.threshold),l=this.getSwitchDistance(e.threshold),d=this.axisSnapMemory.x,c=this.axisSnapMemory.y,u={candidatePointCount:0,matchedPointCount:0},h="y"===e.lockedAxis?null:ni(Gn("x",i,e.snapshot.pointIndex,e.threshold,{previousCandidatePointIds:"points"===d?.type?new Set(d.candidatePointIds??[]):void 0,releaseThreshold:a,selectionPointKinds:NI,switchDistance:l,stats:u}),ti("x",n,s.x,e.threshold,{previousSnapId:"gaps"===d?.type?d.id:null,releaseThreshold:a,switchDistance:l}),{previousSnap:d,switchDistance:l}),p="x"===e.lockedAxis?null:ni(Gn("y",i,e.snapshot.pointIndex,e.threshold,{previousCandidatePointIds:"points"===c?.type?new Set(c.candidatePointIds??[]):void 0,releaseThreshold:a,selectionPointKinds:NI,switchDistance:l,stats:u}),ti("y",n,s.y,e.threshold,{previousSnapId:"gaps"===c?.type?c.id:null,releaseThreshold:a,switchDistance:l}),{previousSnap:c,switchDistance:l}),g=new sI(h?.nudge??0,p?.nudge??0),f=[];return"points"===h?.type?f.push(...si("x",h,g,e.snapshot.coordinateSpace)):"gaps"===h?.type&&f.push(pi(h,e.snapshot.coordinateSpace,g)),"points"===p?.type?f.push(...si("y",p,g,e.snapshot.coordinateSpace)):"gaps"===p?.type&&f.push(pi(p,e.snapshot.coordinateSpace,g)),this.setIndicators(f),this.updateAxisSnapMemory("x",h),this.updateAxisSnapMemory("y",p),this.writeDebugState({operation:"translate",durationMs:this.getNow()-t,pointCount:e.snapshot.points.length,nodeCount:e.snapshot.nodes.length,candidatePointCount:u.candidatePointCount,candidateGapCount:("y"===e.lockedAxis?0:s.x.length)+("x"===e.lockedAxis?0:s.y.length),matchedPointCount:u.matchedPointCount,xSnapId:h?.id??null,ySnapId:p?.id??null,indicatorCount:f.length}),{nudge:g,indicators:f}}snapResize(e){const t=this.getNow(),n=kn({handleId:e.handleId,scaleX:e.scaleX,scaleY:e.scaleY}),i=Zn(n,e.resizedSelectionBounds),o="top"===n||"bottom"===n,r="left"===n||"right"===n,s=this.getReleaseThreshold(e.threshold),a=this.getSwitchDistance(e.threshold),l=this.axisSnapMemory.x,d=this.axisSnapMemory.y,c={candidatePointCount:0,matchedPointCount:0},u=o?null:Gn("x",i,e.snapshot.pointIndex,e.threshold,{previousCandidatePointIds:"points"===l?.type?new Set(l.candidatePointIds??[]):void 0,releaseThreshold:s,switchDistance:a,stats:c}),h=r?null:Gn("y",i,e.snapshot.pointIndex,e.threshold,{previousCandidatePointIds:"points"===d?.type?new Set(d.candidatePointIds??[]):void 0,releaseThreshold:s,switchDistance:a,stats:c}),p={x:null!==u,y:null!==h},g=new sI(u?.nudge??0,h?.nudge??0);if(e.isAspectRatioLocked&&In(f=n)!==wn(f)&&vn(f)!==Pn(f)&&(0!==g.x||0!==g.y)){const t=u&&h?Math.abs(g.x)<Math.abs(g.y)?"x":"y":u?"x":"y",i=0===e.initialSelectionBounds.h?1:e.initialSelectionBounds.w/e.initialSelectionBounds.h;"x"===t?(p.y=!1,g.y=g.x/i,"bottom_left"!==n&&"top_right"!==n||(g.y=-g.y)):(p.x=!1,g.x=g.y*i,"bottom_left"!==n&&"top_right"!==n||(g.x=-g.x))}var f;const m=function(e,t){const n=kn({handleId:e.handleId,scaleX:e.scaleX,scaleY:e.scaleY});let i=e.resizedSelectionBounds.minX,o=e.resizedSelectionBounds.maxX,r=e.resizedSelectionBounds.minY,s=e.resizedSelectionBounds.maxY;e.isResizingFromCenter?(In(n)?(i+=t.x,o-=t.x):wn(n)&&(i-=t.x,o+=t.x),vn(n)?(r+=t.y,s-=t.y):Pn(n)&&(r-=t.y,s+=t.y)):(In(n)?i+=t.x:wn(n)&&(o+=t.x),vn(n)?r+=t.y:Pn(n)&&(s+=t.y));const a=(({minX:e,minY:t,maxX:n,maxY:i})=>{const o=Math.min(e,n),r=Math.min(t,i),s=Math.max(e,n),a=Math.max(t,i);return new aI(o,r,Math.max(1,s-o),Math.max(1,a-r))})({minX:i,minY:r,maxX:o,maxY:s});if(!e.isAspectRatioLocked){const t=(({startBounds:e,bounds:t,handleId:n,scaleX:i,scaleY:o,isResizingFromCenter:r=!1})=>{const s=Cn({axis:"x",startBounds:e,bounds:t,handleId:n,scale:i,isResizingFromCenter:r}),a=Cn({axis:"y",startBounds:e,bounds:t,handleId:n,scale:o,isResizingFromCenter:r});return{scaleX:In(n)||wn(n)?s*(t.w/Math.max(1,e.w)):i??1,scaleY:vn(n)||Pn(n)?a*(t.h/Math.max(1,e.h)):o??1}})({startBounds:e.initialSelectionBounds,bounds:a,handleId:e.handleId,scaleX:e.scaleX,scaleY:e.scaleY,isResizingFromCenter:e.isResizingFromCenter});return{bounds:a,scaleX:t.scaleX,scaleY:t.scaleY}}return Mn({startBounds:e.initialSelectionBounds,bounds:a,handleId:e.handleId,aspectRatio:0===e.initialSelectionBounds.h?1:e.initialSelectionBounds.w/e.initialSelectionBounds.h,isResizingFromCenter:e.isResizingFromCenter,scaleX:e.scaleX,scaleY:e.scaleY})}(e,g),{bounds:S}=m,y=Zn("any",S),b=[];if(p.x){const t=Gn("x",y,e.snapshot.pointIndex,1e-8,{stats:c});t&&b.push(...ui("x",t,sI.Zero(),e.snapshot.coordinateSpace,S,e.snapshot.nodes))}if(p.y){const t=Gn("y",y,e.snapshot.pointIndex,1e-8,{stats:c});t&&b.push(...ui("y",t,sI.Zero(),e.snapshot.coordinateSpace,S,e.snapshot.nodes))}return this.setIndicators(b),this.updateAxisSnapMemory("x",p.x?u:null),this.updateAxisSnapMemory("y",p.y?h:null),this.writeDebugState({operation:"resize",durationMs:this.getNow()-t,pointCount:e.snapshot.points.length,nodeCount:e.snapshot.nodes.length,candidatePointCount:c.candidatePointCount,candidateGapCount:0,matchedPointCount:c.matchedPointCount,xSnapId:p.x?u?.id??null:null,ySnapId:p.y?h?.id??null:null,indicatorCount:b.length}),{nudge:g,bounds:S,scaleX:m.scaleX,scaleY:m.scaleY,indicators:b}}snapHandle(e){const t=this.getNow();if("none"===e.mode)return this.clearIndicators(),this.writeDebugState({operation:"handle",durationMs:this.getNow()-t,pointCount:e.snapshot.points.length,nodeCount:0,outlineCount:e.snapshot.outlines.length,candidatePointCount:e.snapshot.points.length,candidateGapCount:0,matchedPointCount:0,indicatorCount:0}),null;const n="point"===e.mode?this.snapHandlePoint(e):this.snapHandleAlign(e);return n?(this.setIndicators(n.indicators),this.writeDebugState({operation:"handle",durationMs:this.getNow()-t,pointCount:e.snapshot.points.length,nodeCount:0,outlineCount:e.snapshot.outlines.length,candidatePointCount:e.snapshot.points.length,candidateGapCount:0,matchedPointCount:n.indicators.length,indicatorCount:n.indicators.length}),n):(this.clearIndicators(),this.writeDebugState({operation:"handle",durationMs:this.getNow()-t,pointCount:e.snapshot.points.length,nodeCount:0,outlineCount:e.snapshot.outlines.length,candidatePointCount:e.snapshot.points.length,candidateGapCount:0,matchedPointCount:0,indicatorCount:0}),null)}snapHandlePoint(e){const t=vi(e);let n=null,i=null,o=e.threshold*e.threshold;for(const a of t)for(const t of e.snapshot.points){const e=a.dist2(t.point);e>o||(o=e,n=t.point,i=a)}if(!n)for(const a of t)for(const t of e.snapshot.outlines){const e=Wn(a,t.points);!e||e.distanceSquared>o||(o=e.distanceSquared,n=e.point,i=a)}if(!n||!i)return null;const r=n.sub(i);return{snappedPagePoint:e.pagePoint.add(r),nudge:r,indicators:[(s=n,{id:ci("x",[s,s],[s]),type:"points",axis:"x",line:[s.clone(),s.clone()],points:[s.clone()],rotation:0,rotationCenter:s.clone()})]};var s}snapHandleAlign(e){const t=vi(e);let n=null,i=null,o=null,r=null,s=e.threshold,a=e.threshold;for(const u of t)for(const t of e.snapshot.points){const e=Math.abs(t.point.x-u.x);e<=s&&(s=e,n=t.point,o=u);const l=Math.abs(t.point.y-u.y);l<=a&&(a=l,i=t.point,r=u)}if(!n&&!i)return null;const l=new sI(n&&o?n.x-o.x:0,i&&r?i.y-r.y:0),d=e.pagePoint.add(l),c=[];return n&&o&&c.push(hi("x",o.add(l),n)),i&&r&&c.push(hi("y",r.add(l),i)),{snappedPagePoint:d,nudge:l,indicators:c}}},VI=class{beforeDelete=new Map;afterDelete=new Map;registerBeforeDeleteHandler(e,t){return this.register(this.beforeDelete,e,t)}registerAfterDeleteHandler(e,t){return this.register(this.afterDelete,e,t)}runBeforeDelete(e,t,n){if(0!==t.length)for(const i of this.beforeDelete.get(e)??[])i(t,n)}runAfterDelete(e,t,n){if(0!==t.length)for(const i of this.afterDelete.get(e)??[])i(t,n)}register(e,t,n){const i=e.get(t);return i?i.push(n):e.set(t,[n]),()=>{const i=e.get(t);if(!i)return;const o=i.indexOf(n);o>=0&&i.splice(o,1)}}},GI=class{editor;constructor(e){this.editor=e}canAlign(){return this.canLayoutSelection(2)}align(e,t="user"){const n=this.getAlignableEntries();if(n.length<2)return!1;const i=this.getPageToParentTransform(n[0].shape.parentId);if(!i)return!1;const o=aI.FromPoints(n.flatMap(e=>[new sI(e.bounds.minX,e.bounds.minY),new sI(e.bounds.maxX,e.bounds.maxY)])),r=n.map(({shape:t,bounds:n})=>{let r=0,s=0;switch(e){case"left":r=o.minX-n.minX;break;case"right":r=o.maxX-n.maxX;break;case"horizontal-center":r=o.center.x-n.center.x;break;case"top":s=o.minY-n.minY;break;case"bottom":s=o.maxY-n.maxY;break;case"vertical-center":s=o.center.y-n.center.y}const a=this.pageDeltaToParentDelta(i,new sI(r,s));return{id:t.id,x:t.x+a.x,y:t.y+a.y}});return this.editor.commands.updateShapes(r,{source:t}),!0}canDistribute(){return this.canLayoutSelection(3)}distribute(e,t="user"){const n=this.getAlignableEntries();if(n.length<3)return!1;const i=this.getPageToParentTransform(n[0].shape.parentId);if(!i)return!1;const o="horizontal"===e,r=e=>o?e.w:e.h,s=e=>o?e.minX:e.minY,a=o?"x":"y",l=[...n].sort((e,t)=>e.bounds.center[a]-t.bounds.center[a]),d=l[0].bounds,c=l[l.length-1].bounds,u=((o?c.maxX:c.maxY)-s(d)-l.reduce((e,t)=>e+r(t.bounds),0))/(l.length-1);let h=s(d);const p=l.map(({shape:e,bounds:t},n)=>{const a=0===n||n===l.length-1?s(t):h,d=a-s(t);h=a+r(t)+u;const c=this.pageDeltaToParentDelta(i,o?new sI(d,0):new sI(0,d));return{id:e.id,x:e.x+c.x,y:e.y+c.y}});return this.editor.commands.updateShapes(p,{source:t}),!0}getCurrentPageBounds(e=this.editor.getCurrentPageId()){return this.boundsOfShapeIds(this.editor.getCurrentPageShapeIds())}zoomToBounds(e,t){const n=this.editor.viewportScreenSizeSignal.get();if(n.w<=0||n.h<=0||!Je(e))return!1;if(e.w<=0&&e.h<=0)return!1;const i=t?.padding??64,o=Math.max(1,n.w-2*i),r=Math.max(1,n.h-2*i),s=Ke(Math.min(e.w>0?o/e.w:1/0,e.h>0?r/e.h:1/0,t?.maxZoom??1)),a=e.center;return this.editor.setCamera({x:a.x-n.w/2/s,y:a.y-n.h/2/s,z:s},{source:t?.source??"user"}),!0}zoomToFit(e){const t=this.getCurrentPageBounds();return!!t&&this.zoomToBounds(t,e)}zoomToSelection(e){const t=this.boundsOfShapeIds(this.editor.getSelectedShapeIds());return!!t&&this.zoomToBounds(t,e)}boundsOfShapeIds(e){const t=[];for(const i of e){const e=this.editor.getShapePageBounds(i);e&&Je(e)&&t.push(new sI(e.minX,e.minY),new sI(e.maxX,e.maxY))}if(0===t.length)return null;const n=aI.FromPoints(t);return Je(n)?n:null}canLayoutSelection(e){const t=this.getAlignableEntries();return t.length>=e&&null!==this.getPageToParentTransform(t[0].shape.parentId)}getAlignableEntries(){const e=this.editor.getSelectedShapeIds().map(e=>this.editor.getShape(e)).filter(e=>!!e&&!this.editor.isShapeOrAncestorLocked(e.id)),t=e[0]?.parentId;if(!t||e.some(e=>e.parentId!==t))return[];const n=[];for(const i of e){const e=this.editor.getShapePageBounds(i.id);e&&Je(e)&&n.push({shape:i,bounds:e})}return n}getPageToParentTransform(e){const t=e.startsWith("shape:")?this.editor.getShape(e):null;return t?this.editor.computeShapeLocalToPageTransform(t).tryInvert():lI.Identity()}pageDeltaToParentDelta(e,t){const n=e.applyToPoint(sI.Zero());return e.applyToPoint(t).sub(n)}},ZI=class{editor;constructor(e){this.editor=e}setSelectedShapeIds(e,t){const n=this.editor,i=t?.pageId??n.getCurrentPageId(),o=t?.source??"user",r=((e,t)=>{const n=new Set(t);return t.filter(t=>{const i=e.getShape(t);if(!i)return!1;let o=i.parentId;const r=new Set([t]);for(;o.startsWith("shape:");){const t=o;if(r.has(t))return!0;if(n.has(t))return!1;r.add(t);const i=e.getShape(t);if(!i)return!0;o=i.parentId}return!0})})(n,Array.from(new Set(e.filter(e=>n.getShapePageId(e)===i&&!n.isShapeHidden(e))))),s=n.getSessionRecord(),a=s.pageSelectedShapeIdsById[i]??[];n.getShapeEditingSession()&&!n.completeEditing(o)||je(a,r)||(n.setBindingPreview(null),n.setSnapIndicators(null),n.updateSession({pageSelectedShapeIdsById:{...s.pageSelectedShapeIdsById,[i]:r}},o))}removeShapeIdsFromSelection(e,t="system"){if(0===e.length)return;const n=this.editor,i=new Set(e),o=n.getSessionRecord(),r={};for(const s of n.getPages())r[s.id]=(o.pageSelectedShapeIdsById[s.id]??[]).filter(e=>!i.has(e));n.updateSession({pageSelectedShapeIdsById:r},t)}selectAllCurrentPage(e="user"){const t=this.editor,n=t.getCurrentPageId(),i=t.getCurrentPageShapeIds().map(e=>t.getShape(e)).filter(e=>!!e&&e.parentId===n&&!t.isShapeHidden(e.id)).map(e=>e.id);t.commands.setSelectedShapeIds(i,{source:e})}},QI=class{editor;frameGeometrySignal;companionFrameGeometriesSignal;pathSignal;pageClipPathSignal;bindingSegmentsSignal;frameStyleSignal;frameSignal;handleAnchorsSignal;handlesSignal;handleCountsSignal;overlaySignal;debugStateSignal;debugStateSnapshotSignal;constructor(e){this.editor=e,this.frameGeometrySignal=l("editor.selectionOverlayFrameGeometry",()=>{const t=e.selectedShapeOverlayItemsSignal.get();if(0===t.length)return null;if(Zi(t))return null;const n=e.getSelectionFrame();return n?{bounds:n.bounds,rotation:n.rotation,rotationCenter:n.rotationCenter}:null},{isEqual:Li}),this.companionFrameGeometriesSignal=l("editor.selectionOverlayCompanionFrameGeometries",()=>{if("select"!==e.toolStateSignal.get().activeToolId)return[];const t=[];for(const n of e.selectedShapesSignal.get())for(const i of e.getBindingsForShape(n.id))t.push(...e.getBindingUtil(i).getSelectionCompanionFrameGeometries?.(e,i,{selectedShape:n})??[]);return t},{isEqual:$i}),this.pathSignal=l("editor.selectionOverlayPath",()=>{const t=e.selectedShapeOverlayItemsSignal.get();return Zi(t)?t[0]?.path??null:null}),this.pageClipPathSignal=l("editor.selectionOverlayPageClipPath",()=>{const t=e.selectedShapeOverlayItemsSignal.get();return Zi(t)?t[0]?.pageClipPath??null:null}),this.bindingSegmentsSignal=l("editor.selectionOverlayBindingSegments",()=>{const t=e.selectedShapeOverlayItemsSignal.get();return Zi(t)?[...t[0]?.bindingSegments??[]]:[]},{isEqual:Dt}),this.frameStyleSignal=l("editor.selectionOverlayFrameStyle",()=>{const t=e.cameraZoomSignal.get();return{strokeWidth:2/t,cornerRadius:3/t}},{isEqual:Fi}),this.frameSignal=l("editor.selectionOverlayFrame",()=>{const e=this.frameGeometrySignal.get();if(!e)return null;const t=this.frameStyleSignal.get();return{...e,...t}},{isEqual:Ri}),this.handleAnchorsSignal=l("editor.selectionOverlayHandleAnchors",()=>{if("select"!==e.toolStateSignal.get().activeToolId)return null;const t=e.selectedShapesSignal.get();if(0===t.length)return null;const n=e.getSelectionFrame(),i=e.cameraZoomSignal.get(),o=1===t.length,r=e.canResizeSelection(),s=e.canRotateSelection();return Qi(t,n,i,t=>e.getShapeUtil(t).getSelectionHandleAnchors(t,{isOnlySelected:o,editor:e}),t=>r&&e.getShapeUtil(t).canUseSelectionResizeHandles(t,{editor:e}),t=>s&&e.getShapeUtil(t).canUseSelectionRotateHandle(t,{editor:e}),Ti(e,e.getSelectionResizeTargetShapes(),n?.rotation??0))},{isEqual:Vi}),this.handlesSignal=l("editor.selectionOverlayHandles",()=>{const t=this.handleAnchorsSignal.get();if(!t)return null;const n=e.cameraZoomSignal.get(),{resizeHandles:i,rotateHandles:o,terminalHandles:r,middleHandles:s,customHandles:a}=Ji(t,n);return{resizeHandles:i,rotateHandles:o,terminalHandles:r,middleHandles:s,customHandles:a,strokeWidth:2/n}},{isEqual:ji}),this.handleCountsSignal=l("editor.selectionOverlayHandleCounts",()=>{const e=this.handleAnchorsSignal.get();return e?{resizeHandleCount:e.resizeHandleAnchors.length,rotateHandleCount:e.rotateHandleAnchors.length,terminalHandleCount:e.terminalHandleAnchors.length,middleHandleCount:e.middleHandleAnchors.length,customHandleCount:e.customHandleAnchors.length}:null},{isEqual:Gi}),this.overlaySignal=l("editor.selectionOverlay",()=>{const e=this.frameSignal.get(),t=this.handlesSignal.get();return e&&t?{...e,...t}:null}),this.debugStateSnapshotSignal=l("editor.overlayDebugState.snapshot",t=>{const n=this.frameSignal.get(),i=this.handleCountsSignal.get(),o=t!==nI?t:null,r=!o||!Ri(o.frame,n),s=!o||!Gi(o.handleCounts,i);return{metrics:{selectionFrameActive:null!==n,selectionHandlesActive:null!==i,bindingPreviewActive:e.bindingPreviewActiveSignal.get(),brushBoxActive:e.brushBoxActiveSignal.get(),selectionFrameChangeCount:(o?.metrics.selectionFrameChangeCount??0)+(r?1:0),selectionHandlesChangeCount:(o?.metrics.selectionHandlesChangeCount??0)+(s?1:0),resizeHandleCount:i?.resizeHandleCount??0,rotateHandleCount:i?.rotateHandleCount??0,terminalHandleCount:i?.terminalHandleCount??0,middleHandleCount:i?.middleHandleCount??0,customHandleCount:i?.customHandleCount??0,boundsSummary:(a=n?.bounds??null,a?`${Math.round(a.x)},${Math.round(a.y)},${Math.round(a.w)},${Math.round(a.h)}`:"none"),rotation:n?.rotation??null,strokeWidth:n?.strokeWidth??null},frame:n,handleCounts:i};var a},{isEqual:(e,t)=>tt(e.metrics,t.metrics)}),this.debugStateSignal=l("editor.overlayDebugState.public",()=>this.debugStateSnapshotSignal.get().metrics,{isEqual:tt})}},JI=class{editor;entryRequestAtom=a("editor.shapeEditingEntryRequest",null);entryRequestSignal=this.entryRequestAtom;nextEntryRequestId=1;operation=null;constructor(e){this.editor=e}canEditShape(e){const t="string"==typeof e?this.editor.getShape(e):e;return!!t&&!t.isLocked&&this.editor.getShapeUtil(t).canEdit(t)}start(e,t="user"){let n=this.editor.getShape(e.shapeId);if(!n||!this.canEditShape(n))return null;const i=this.editor.getShapeEditingSession();if(i?.shapeId===n.id){const o={...i,entryMode:e.entryMode??i.entryMode,caretPagePoint:e.caretPagePoint?{...e.caretPagePoint}:i.caretPagePoint};return this.editor.updateSession({editingShapeId:n.id,shapeEditingSession:o},t),this.publishEntryRequest({shapeId:n.id,entryMode:o.entryMode,caretPagePoint:o.caretPagePoint}),o}if(e.preserveInteraction||this.editor.cancelInteractionForCommand(),this.editor.getShapeEditingSession()&&!this.complete(t))return null;if(n=this.editor.getShape(e.shapeId),!n||!this.canEditShape(n))return null;const o=e.markId??`editing:${n.id}`;if(e.reuseActiveOperation){const e=this.editor.operations.getActive();if(!e||e.source!==t)throw new Error("Shape editing can only reuse an active operation with the same source.");this.operation=e}else this.operation=this.editor.operations.begin({kind:o,label:"shape.edit",source:"user",history:"record"});const r={shapeId:n.id,markId:o,entryMode:e.entryMode??"focusEnd",caretPagePoint:e.caretPagePoint?{...e.caretPagePoint}:void 0,isComposing:!1};return this.editor.commands.setSelectedShapeIds([n.id],{source:t}),this.editor.updateSession({editingShapeId:n.id,shapeEditingSession:r},t),this.publishEntryRequest({shapeId:n.id,entryMode:r.entryMode,caretPagePoint:r.caretPagePoint}),r}complete(e="user"){const t=this.editor.getShapeEditingSession();return!!t&&!t.isComposing&&(this.end({runEditEnd:!0,source:e}),this.commitOperation(),!0)}cancel(e="user"){const t=this.editor.getShapeEditingSession();return!!t&&!t.isComposing&&(this.editor.updateSession({editingShapeId:null,shapeEditingSession:null},e),this.cancelOperation(),!0)}setComposition(e,t="system"){const n=this.editor.getShapeEditingSession();n&&n.isComposing!==e&&this.editor.updateSession({shapeEditingSession:{...n,isComposing:e}},t)}consumeEntryRequest(e){const t=this.entryRequestAtom.get();t&&t.id===e&&this.entryRequestAtom.set(null)}removeShapeIds(e,t="system"){const n=this.editor.getShapeEditingSession();n&&e.includes(n.shapeId)&&(this.end({runEditEnd:!1,source:t}),this.commitOperation())}prepareForShapeRemoval(e,t="system"){const n=this.editor.getShapeEditingSession();if(!n||!e.includes(n.shapeId))return;this.editor.isActiveToolInInitialState()||this.editor.cancelInteractionForCommand();const i=this.editor.getShapeEditingSession();i&&e.includes(i.shapeId)&&(this.end({runEditEnd:!1,source:t}),this.commitOperation())}end(e){const t=this.editor.getShapeEditingSession();if(!t)return;this.entryRequestAtom.set(null);const n=this.editor.getShape(t.shapeId);if(this.editor.updateSession({editingShapeId:null,shapeEditingSession:null},e.source),!e.runEditEnd||!n)return;const i=this.editor.getShapeUtil(n).onEditEnd(n,{editor:this.editor});i?.deleteShapeIds&&i.deleteShapeIds.length>0&&this.editor.commands.deleteShapes(i.deleteShapeIds,{source:e.source})}cancelOperation(){const e=this.operation;this.operation=null,e?.isActive&&e.cancel()}commitOperation(){const e=this.operation;this.operation=null,e?.isActive&&e.commit()}publishEntryRequest(e){this.entryRequestAtom.set({id:this.nextEntryRequestId++,shapeId:e.shapeId,entryMode:e.entryMode,caretPagePoint:e.caretPagePoint?{...e.caretPagePoint}:void 0})}},ew=class{editor;constructor(e){this.editor=e}computeParentToPageTransform(e,t=new Set([e.id])){if(!e.parentId.startsWith("shape:"))return lI.Identity();const n=this.editor.getShape(e.parentId);if(!n||t.has(n.id))return lI.Identity();const i=new Set(t);return i.add(n.id),ue(n,this.editor.getShapeUtil(n),this.computeParentToPageTransform(n,i))}computeShapePositionedBounds(e){return this.editor.getShapeUtil(e).getPositionedBounds(e)}computeShapeLocalBounds(e){return((e,t)=>t.getLocalBounds(e))(e,this.editor.getShapeUtil(e))}computeShapeRenderBounds(e){return((e,t)=>t.getRenderBounds(e))(e,this.editor.getShapeUtil(e))}computeShapeExportBounds(e){return ce(e,this.editor.getShapeUtil(e))}computeShapeLocalToPageTransform(e){return ue(e,this.editor.getShapeUtil(e),this.computeParentToPageTransform(e))}computeShapeRenderToPageTransform(e){return((e,t,n=lI.Identity())=>ue(e,t,n))(e,this.editor.getShapeUtil(e),this.computeParentToPageTransform(e))}computeShapeExportToPageTransform(e){return pe(e,this.editor.getShapeUtil(e),this.computeParentToPageTransform(e))}computeShapePageBounds(e){return((e,t,n=lI.Identity())=>aI.FromPoints(me(e,t,n)))(e,this.editor.getShapeUtil(e),this.computeParentToPageTransform(e))}computeShapeExportPageBounds(e){return((e,t,n=lI.Identity())=>{const i=ce(e,t),o=pe(e,t,n);return aI.FromPoints([new sI(i.minX,i.minY),new sI(i.maxX,i.minY),new sI(i.maxX,i.maxY),new sI(i.minX,i.maxY)].map(e=>o.applyToPoint(e)))})(e,this.editor.getShapeUtil(e),this.computeParentToPageTransform(e))}computeShapeGeometry(e){return Se(e,this.editor.getShapeUtil(e),this.computeParentToPageTransform(e))}computeShapePositionedToPageTransform(e){return he(e,this.editor.getShapeUtil(e),this.computeParentToPageTransform(e))}computeShapePageCenter(e){return this.computeShapeGeometry(e).center}computeShapePageCorners(e){return this.computeShapeGeometry(e).corners}computeShapePageOutlineVertices(e){return this.computeShapeGeometry(e).outlineVertices}getShapePositionedBounds(e){return this.editor.queries.getShapePositionedBounds(e)??null}getShapePageBounds(e){return this.editor.queries.getShapePageBounds(e)??null}getShapeGeometry(e){return this.editor.queries.getShapeGeometry(e)??null}getShapePositionedToPageTransform(e){return this.editor.queries.getShapePositionedToPageTransform(e)??null}getShapePageCenter(e){return this.editor.queries.getShapePageCenter(e)??null}getShapePageCorners(e){return this.editor.queries.getShapePageCorners(e)??null}getShapePageOutlineVertices(e){return this.editor.queries.getShapePageOutlineVertices(e)??[]}getSelectionPageBounds(){return this.editor.queries.getSelectionPageBounds()}getSelectionFrame(){const e=this.editor.queries.getSelectionFrameBounds(),t=this.editor.queries.getSelectionRotationCenter();return e&&t?{bounds:e,rotation:this.editor.queries.getSelectionRotation(),rotationCenter:t,hasCompatibleRotation:this.editor.queries.getSelectionHasCompatibleRotation()}:null}isPointInSelectionBounds(e){const t=this.getSelectionFrame();if(!t)return!1;const n=this.getSelectionFrameLocalBoundsPoint(e);return!!n&&t.bounds.containsPoint(n)}getSelectionFrameLocalBoundsPoint(e){const t=this.getSelectionFrame();return t?fi(e,t):null}getSelectionPageOutlineVertices(){return this.editor.queries.getSelectionPageOutlineVertices()}getSelectionAnchorPagePoint(){return this.editor.queries.getSelectionAnchorPagePoint()}},tw=class extends Error{},nw=class{editor;constructor(e){this.editor=e}get store(){return G(this.editor)}getSelectionParentOrderState(){return eo(this.editor)}getSelectionGroupState(){return this.getGroupStateForShapeIds(this.editor.getSelectedShapeIds())}canGroupSelection(){return null!==this.getSelectionGroupState()}getGroupStateForShapeIds(e){const t=this.editor,n=Array.from(new Set(e.map(e=>t.bindings.getShapeHierarchyRootId(e)))),i=n.map(e=>t.getShape(e)).filter(e=>!!e);if(i.length!==n.length)return null;const o=new Set(n),r=i.filter(e=>!this.isShapeDescendantOfAny(e.id,o));if(r.length<2)return null;if(r.some(e=>t.isShapeOrAncestorLocked(e.id)||t.hasLockedDescendant(e.id)||t.isShapeHidden(e.id)))return null;const s=r[0]?.parentId;if(!s)return null;if(r.some(e=>e.parentId!==s))return null;const a=t.getChildShapes(s),l=new Set(r.map(e=>e.id)),d=a.filter(e=>l.has(e.id)).map(e=>e.id);if(d.length!==r.length)return null;const c=s.startsWith("shape:")?t.getShape(s):null,u=c?t.computeShapeLocalToPageTransform(c).tryInvert():null;if(c&&!u)return null;const h=d.flatMap(e=>t.getShapePageOutlineVertices(e).map(e=>u?u.applyToPoint(e):e)),p=h.length>0?aI.FromPoints(h):null;if(!p||!Je(p))return null;const g={parentId:s,shapeIds:d,parentLocalBounds:p};return this.getGroupingShapeCreateInput(g)?g:null}getGroupingShapeCreateInput(e){let t=null;for(const n of this.editor.shapeUtils.values()){const i=n.getGroupingShapeCreateInput({parentId:e.parentId,parentLocalBounds:e.parentLocalBounds});if(i){if(i.type!==n.type)throw new Error(`Shape util "${n.type}" created grouping type "${i.type}" instead of its registered type`);if(i.parentId!==e.parentId)throw new Error(`Shape util "${n.type}" must preserve the requested grouping parent`);if(t)throw new Error(`Multiple shape utils define grouping creation: "${t.shapeUtilType}" and "${n.type}"`);t={shapeInput:i,shapeUtilType:n.type}}}return t?.shapeInput??null}groupShapesFromState(e,t){const n=this.editor,i=this.getGroupingShapeCreateInput(e);if(!i)return null;const o=n.getChildShapes(e.parentId),r=new Set(e.shapeIds);let s;for(const d of o)r.has(d.id)&&(s=d);if(!s)return null;n.cancelInteractionForCommand();let a=null;try{this.store.atomic(()=>{const[l]=n.commands.createShapes([i],{source:t,deferMinimumChildRepair:!0});if(!l)throw new tw;if(a=l.id,!n.commands.reparentShapes({ids:e.shapeIds,parentId:l.id},{source:t}))throw new tw;const d=[];for(const e of o)r.has(e.id)?e.id===s.id&&d.push(l.id):d.push(e.id);n.commands.updateShapes([...d.map((e,t)=>({id:e,index:n.createShapeIndex(t+1)})),...e.shapeIds.map((e,t)=>({id:e,index:n.createShapeIndex(t+1)}))],{source:t})},t)}catch(l){if(l instanceof tw)return null;throw l}return a?n.getShape(a)??null:null}canGroupShapes(e){return null!==this.getGroupStateForShapeIds(e)}groupShapes(e,t="user"){const n=this.getGroupStateForShapeIds(e);return n?this.groupShapesFromState(n,t):null}groupSelection(e="user"){const t=this.editor,n=this.groupShapes(t.getSelectedShapeIds(),e);return n&&t.commands.setSelectedShapeIds([n.id],{source:e}),n}getUngroupableSelectedShapeIds(){return this.getUngroupableShapeIds(this.editor.getSelectedShapeIds())}getUngroupableShapeIds(e){const t=this.editor;return e.map(e=>t.getShape(e)).filter(e=>!!e).filter(e=>t.getShapeUtil(e).canUngroupChildren(e)).filter(e=>!t.isShapeOrAncestorLocked(e.id)&&!t.hasLockedDescendant(e.id)&&!t.isShapeHidden(e.id)&&t.getChildShapeIds(e.id).length>0&&t.getChildShapes(e.id).every(n=>t.canUseShapeParent(e.parentId,n.id)&&!!ye(t,n,e.parentId))).map(e=>e.id)}canUngroupSelection(){return this.getUngroupableSelectedShapeIds().length>0}canUngroupShapes(e){return this.getUngroupableShapeIds(e).length>0}ungroupShapes(e,t="user"){const n=this.editor,i=Array.from(new Set(e)),o=new Set(this.getOutermostUngroupableShapeIds(i));if(0===o.size)return[];const r=i.map(e=>n.getShape(e)).filter(e=>!!e),s=r.filter(e=>o.has(e.id)).map(e=>({group:e,children:n.getChildShapes(e.id)}));if(s.some(e=>e.children.some(t=>!ye(n,t,e.group.parentId))))return[];const a=new Map(s.map(e=>[e.group.id,e])),l=new Set(s.map(e=>e.group.parentId)),d=new Map;for(const p of l){const e=[];for(const t of n.getChildShapes(p)){const n=a.get(t.id);n?e.push(...n.children.map(e=>e.id)):e.push(t.id)}d.set(p,e)}n.cancelInteractionForCommand();const c=[],u=new Set;try{this.store.atomic(()=>{const e=[];for(const i of r){if(!o.has(i.id)){u.has(i.id)||(u.add(i.id),c.push(i.id));continue}const e=a.get(i.id);if(!e)continue;if(!n.commands.reparentShapes({ids:e.children.map(e=>e.id),parentId:e.group.parentId},{source:t}))throw new tw;const r=new Set(e.children.map(e=>e.id));for(const t of e.children){const e=n.bindings.getShapeHierarchyRootId(t.id),i=r.has(e)?e:t.id;u.has(i)||(u.add(i),c.push(i))}}for(const t of d.values())e.push(...t.map((e,t)=>({id:e,index:n.createShapeIndex(t+1)})));e.length>0&&n.commands.updateShapes(e,{source:t}),this.removeUngroupedContainerShapes(s.map(e=>e.group.id),t)},t)}catch(h){if(h instanceof tw)return[];throw h}return c.length>0&&n.commands.setSelectedShapeIds(c,{source:t}),c}ungroupSelection(e="user"){return this.ungroupShapes(this.editor.getSelectedShapeIds(),e)}getOutermostUngroupableShapeIds(e){const t=this.getUngroupableShapeIds(e),n=new Set(t);return t.filter(e=>!this.isShapeDescendantOfAny(e,n))}isShapeDescendantOfAny(e,t){let n=this.editor.getShape(e);const i=new Set;for(;n?.parentId.startsWith("shape:");){const e=n.parentId;if(t.has(e))return!0;if(i.has(e))return!1;i.add(e),n=this.editor.getShape(e)}return!1}removeUngroupedContainerShapes(e,t){if(0===e.length)return;const n=this.editor,i=Array.from(new Set(e)).filter(e=>n.getShape(e));0!==i.length&&(n.sideEffects.runBeforeDelete("shape",i,t),this.store.remove(i,t),n.sideEffects.runAfterDelete("shape",i,t))}getSelectionSiblingOrderState(){return to(this.editor)}canMoveSelectionWithinParent(e){return((e,t)=>{const n=to(e);return"backward"===t?n?.canMoveBackward??!1:n?.canMoveForward??!1})(this.editor,e)}canMoveSelectionInParentOrder(e){return((e,t)=>{const n=eo(e);return"backward"===t?n?.canMoveBackward??!1:n?.canMoveForward??!1})(this.editor,e)}canMoveShapesInParentOrder(e,t){return((e,t,n)=>{const i=no(e,t);return"backward"===n?i?.canMoveBackward??!1:i?.canMoveForward??!1})(this.editor,e,t)}moveShapesInParentOrder(e,t,n="user"){return io(this.editor,e,t,n)}moveShapesToParentOrderEdge(e,t,n="user"){return oo(this.editor,e,t,n)}moveSelectionWithinParent(e,t="user"){return((e,t,n="user")=>{const i=e.getSelectedShapes();if(1!==i.length)return!1;const[o]=i;if(!o||o.isLocked)return!1;const r=to(e);if(!r)return!1;const s=e.getChildShapes(r.parentId),a=r.index;if(s[a]?.id!==o.id)return!1;const l="backward"===t?a-1:a+1;if(l<0||l>=s.length)return!1;const d=[...s],[c]=d.splice(a,1);return!!c&&(d.splice(l,0,c),e.cancelInteractionForCommand(),e.commands.updateShapes(d.map((t,n)=>({id:t.id,index:e.createShapeIndex(n+1)})),{source:n}),!0)})(this.editor,e,t)}moveShapesToParentPlacementResult(e,t="user"){return function(e,t,n="user"){const i=Array.from(new Set(t.ids));if(0===i.length)return{ok:!1,reason:"notFound"};const o=i.map(t=>e.getShape(t)).filter(e=>!!e);if(o.length!==i.length)return{ok:!1,reason:"notFound"};for(const s of o){if(s.isLocked)return{ok:!1,reason:"locked"};if(e.isShapeHidden(s.id))return{ok:!1,reason:"hidden"}}for(const s of i){const n=t.parentId;if(n.startsWith("page:")){if(!e.getPage(n))return{ok:!1,reason:"invalidParent"}}else{const t=e.getShape(n);if(!t)return{ok:!1,reason:"invalidParent"};if(t.id===s||e.getDescendantShapeIds(s).includes(t.id))return{ok:!1,reason:"cycle"};if(!e.canUseShapeParent(t.id,s))return{ok:!1,reason:"invalidParent"}}}const r=((e,t,n,i,o)=>{const r=((e,t,n,i)=>{const o=new Set(n),r=t.parentId.startsWith("shape:")?e.getShape(t.parentId):null,s=G(e).getAll().filter(e=>f(e)&&e.parentId===t.parentId).filter(e=>!o.has(e.id));s.sort((e,t)=>e.index.localeCompare(t.index)||e.id.localeCompare(t.id));let a=s.length;if(t.beforeId){const e=s.findIndex(e=>e.id===t.beforeId);if(-1===e)return{ok:!1,reason:"invalidBeforeId"};a=e}s.splice(a,0,...i);const l=new Map;for(const d of i){if(d.parentId===t.parentId)continue;const n=ye(e,d,t.parentId);if(!n)return{ok:!1,reason:"unsupportedTransform"};l.set(d.id,n)}return{ok:!0,updates:s.map((n,i)=>{const o=n.parentId!==t.parentId&&r?e.getShapeUtil(r).getChildPlacementMeta(r,n,{editor:e,reason:"reparent"}):n.meta;return{id:n.id,parentId:t.parentId,index:e.createShapeIndex(i+1),...l.get(n.id),meta:o===n.meta?void 0:o}})}})(e,t,n,i);return r.ok?(e.cancelInteractionForCommand(),e.commands.updateShapes(r.updates,{source:o}),r):r})(e,t,i,o,n);return r.ok?{ok:!0,movedIds:i}:{ok:!1,reason:r.reason}}(this.editor,e,t)}moveSelectionInParentOrder(e,t="user"){return((e,t,n="user")=>io(e,e.getSelectedShapeIds(),t,n))(this.editor,e,t)}moveSelectionToParentOrderEdge(e,t="user"){return((e,t,n="user")=>oo(e,e.getSelectedShapeIds(),t,n))(this.editor,e,t)}isShapeOrAncestorLocked(e){const t=this.editor,n=new Set;let i=t.getShape(e);for(;i;){if(i.isLocked)return!0;if(!i.parentId.startsWith("shape:"))return!1;const e=i.parentId;if(n.has(e))return!1;n.add(e),i=t.getShape(e)}return!1}hasLockedDescendant(e){const t=this.editor;return t.getDescendantShapeIds(e).some(e=>t.getShape(e)?.isLocked??!1)}getOutermostSelectableShapeId(e){const t=this.editor;let n=e,i=t.getShape(e);const o=new Set([e]);for(;i?.parentId.startsWith("shape:");){const e=i.parentId;if(o.has(e))break;o.add(e);const r=t.getShape(e);if(!r)break;t.getShapeUtil(r).isSelectionTransformContainer(r)&&(n=r.id),i=r}return n}getShapeIdsIncludingDescendants(e){const t=[],n=new Set;for(const i of e)if(!n.has(i)){n.add(i),t.push(i);for(const e of this.editor.getDescendantShapeIds(i))n.has(e)||(n.add(e),t.push(e))}return t}getShapeIdsForSelectionTransform(e){return this.getOutermostUnlockedShapeIds(e)}getShapeIdsForSelectionRotation(e){return this.getOutermostUnlockedShapeIds(e)}getSelectionTransformTargetShapes(){return this.getShapeIdsForSelectionTransform(this.editor.getSelectedShapeIds()).map(e=>this.editor.getShape(e)).filter(e=>!!e)}canResizeSelection(){const e=this.editor,t=this.getSelectionTransformAffectedShapes(),n=1===t.length;return t.length>0&&t.every(t=>e.getShapeUtil(t).canParticipateInSelectionResize(t,{editor:e,isOnlyAffectedShape:n}))}canFlipSelection(){const e=this.editor,t=this.getSelectionTransformAffectedShapes(),n=1===t.length;return t.length>0&&t.every(t=>e.getShapeUtil(t).canParticipateInSelectionFlip(t,{editor:e,isOnlyAffectedShape:n}))}canRotateSelection(){const e=this.editor,t=this.getSelectionTransformAffectedShapes(),n=1===t.length;return t.length>0&&t.every(t=>e.getShapeUtil(t).canParticipateInSelectionRotation(t,{editor:e,isOnlyAffectedShape:n}))}getSelectionResizeTargetShapes(){const e=this.editor,t=[],n=new Set,i=o=>{if(!n.has(o.id))if(n.add(o.id),e.getShapeUtil(o).shouldResizeDescendants(o))for(const t of e.getChildShapes(o.id))i(t);else t.push(o)};for(const o of this.getOutermostUnlockedShapeIds(e.getSelectedShapeIds())){const t=e.getShape(o);t&&i(t)}return t}getSelectionRotationTargetShapes(){return this.getShapeIdsForSelectionRotation(this.editor.getSelectedShapeIds()).map(e=>this.editor.getShape(e)).filter(e=>!!e)}getSelectionTransformAffectedShapes(){const e=this.editor,t=this.getOutermostUnlockedShapeIds(e.getSelectedShapeIds());return this.getShapeIdsIncludingDescendants(t).map(t=>e.getShapeSignal(t).get()).filter(e=>!!e)}getShapeExportTraversalIds(e){const t=this.editor,n=this.getShapeIdsIncludingDescendants(e).filter(e=>!t.isShapeHidden(e)),i=new Set(n);for(const o of n)for(const e of t.getBindingsForShape(o)){const o=t.getBindingUtil(e).getExportShapeIds?.(t,e);for(const e of o??[])for(const o of this.getShapeIdsIncludingDescendants([e]))i.has(o)||t.isShapeHidden(o)||(i.add(o),n.push(o))}return n}getShapeIdsInContainerBounds(e,t={}){const n=this.editor,i=n.getShapePageId(e),o=n.getShapePageBounds(e);return i&&o?n.getShapeIdsInBounds(o,{pageId:i}).filter(i=>{if(i===e)return!1;const o=n.getShapeContainment(e,i);return"inside"===o||t.includeIntersecting&&"intersecting"===o}):[]}canUseShapeParent(e,t){return((e,t,n)=>{if(t.startsWith("page:"))return!!e.getPage(t);const i=e.getShape(t);if(!i)return!1;if(n){const t=e.getShape(n);return!!t&&i.id!==n&&!e.getDescendantShapeIds(n).includes(i.id)&&e.getShapeUtil(i).canReceiveChild(i,t)}return e.getShapeUtil(i).canReceiveChildren(i)})(this.editor,e,t)}isShapeOrAncestorInSet(e,t){let n=this.editor.getShape(e);const i=new Set;for(;n;){if(t.has(n.id))return!0;if(!n.parentId.startsWith("shape:"))return!1;const e=n.parentId;if(i.has(e))return!1;i.add(e),n=this.editor.getShape(e)}return!1}isShapeDescendantOf(e,t){let n=this.editor.getShape(e);const i=new Set;for(;n?.parentId.startsWith("shape:");){const e=n.parentId;if(e===t)return!0;if(i.has(e))return!1;i.add(e),n=this.editor.getShape(e)}return!1}getOutermostUnlockedShapeIds(e){const t=this.editor,n=Array.from(new Set(e)),i=new Set(n);return n.filter(e=>{const n=t.getShape(e);return!(!n||t.isShapeOrAncestorLocked(n.id)||t.hasLockedDescendant(n.id)||this.isShapeDescendantOfAny(n.id,i))})}},iw=class{bindings=new Map;bindingIds=[];register(e){const t=this.bindingIds.indexOf(e.id);t>=0&&this.bindingIds.splice(t,1);const n=ro(e.shortcut);this.bindingIds.push(e.id),this.bindings.set(e.id,{id:e.id,shortcut:n,target:e.target,label:e.label??so(n)})}registerActionShortcut(e,t){this.register({id:`action:${e}`,shortcut:t,target:{type:"action",actionId:e}})}registerEditorShortcut(e,t){const n=ro(t);this.register({id:`editor:${e}:${co(n)}`,shortcut:n,target:{type:"editor",command:e}})}registerToolShortcut(e,t){this.register({id:`tool:${e}`,shortcut:t,target:{type:"tool",toolId:e}})}unregister(e){const t=this.bindingIds.indexOf(e);t>=0&&this.bindingIds.splice(t,1),this.bindings.delete(e)}getBinding(e){const t=this.bindings.get(e);return t?{id:t.id,shortcut:t.shortcut,target:t.target,label:t.label}:null}getTargetForEvent(e){return this.getBindingForEvent(e)?.target??null}getActionIdForEvent(e){const t=this.getTargetForEvent(e);return"action"===t?.type?t.actionId:null}getToolIdForEvent(e){const t=this.getTargetForEvent(e);return"tool"===t?.type?t.toolId:null}getActionShortcutLabel(e){return this.getBindingLabel(`action:${e}`)}getToolShortcutLabel(e){return this.getBindingLabel(`tool:${e}`)}getBindingForEvent(e){for(let t=this.bindingIds.length-1;t>=0;t--){const n=this.bindings.get(this.bindingIds[t]);if(n&&ao(n.shortcut,e))return n}return null}getBindingLabel(e){return this.bindings.get(e)?.label}},ow=class{editor;shapeRenderOrderByIdSignal;culledShapeIdsSignal;culledShapeIdSetSignal;selectedShapeIdsOutsideCulledSignal;selectedShapeIdsOutsideCulledSetSignal;renderVisibleShapeIdsSignal;retainedShapeIdsSignal;renderVisibleShapeIdSetSignal;renderItemsSignal;renderHostDebugStateSignal;retainedBaseShapeWindowSnapshotSignal;retainedShapeWindowSnapshotSignal;renderHostDebugStateSnapshotSignal;constructor(e){this.editor=e,this.shapeRenderOrderByIdSignal=l("editor.shapeRenderOrderById",()=>{const t=new Map;for(const[n,i]of e.currentPageShapeIdsSignal.get().entries())t.set(i,n);return t}),this.culledShapeIdsSignal=l("editor.culledShapeIds",()=>{const t=e.getCurrentPageId(),n=e.renderViewportPageBoundsSignal.get();return n?e.spatialIndex.getShapeIdsInViewport(n,{pageId:t}):e.currentPageShapeIdsSignal.get()},{isEqual:je}),this.retainedBaseShapeWindowSnapshotSignal=l("editor.retainedBaseShapeWindowSnapshot",t=>{const n=e.currentPageShapeIdsSignal.get(),i=null!==e.viewportPageBoundsSignal.get(),o=mo(this.culledShapeIdsSignal.get(),this.getPageIndexById(n));if(t!==nI&&t&&t.viewportReady&&o.length>0){const e=((e,t)=>{if(e.length!==t.length||0===t.length)return null;const n=t.map((n,i)=>{const o=e[i];if(!o)return null;if(o.end+2<n.start||o.start>n.end+2)return null;const r=i>0?t[i-1]:null,s=i<t.length-1?t[i+1]:null,a=s?s.start-3:1/0,l={start:Math.min(n.start,Math.max(r?r.end+3:-1/0,o.start)),end:Math.max(n.end,Math.min(a,o.end))};return l.end-l.start>n.end-n.start+4?null:l});if(n.some(e=>null===e))return null;const i=n;if(po(i).length!==t.length)return null;const o=fo(t);return fo(i)>o+12?null:i})(po(t.ranges.map(e=>({...e}))),o);if(e)return yo(n,e,{viewportReady:i})}return yo(n,o,{viewportReady:i})},{isEqual:(e,t)=>je(e.shapeIds,t.shapeIds)}),this.culledShapeIdSetSignal=l("editor.culledShapeIdSet",()=>new Set(this.culledShapeIdsSignal.get()),{isEqual:ot}),this.selectedShapeIdsOutsideCulledSignal=l("editor.selectedShapeIdsOutsideCulled",()=>{const t=e.selectedShapeIdsSignal.get();if(0===t.length)return[];const n=this.culledShapeIdSetSignal.get();return t.filter(e=>!n.has(e))},{isEqual:je}),this.selectedShapeIdsOutsideCulledSetSignal=l("editor.selectedShapeIdsOutsideCulledSet",()=>new Set(this.selectedShapeIdsOutsideCulledSignal.get()),{isEqual:ot}),this.renderVisibleShapeIdsSignal=l("editor.renderVisibleShapeIds",()=>{if(0===this.selectedShapeIdsOutsideCulledSignal.get().length)return this.culledShapeIdsSignal.get();const t=this.culledShapeIdSetSignal.get(),n=this.selectedShapeIdsOutsideCulledSetSignal.get();return e.currentPageShapeIdsSignal.get().filter(e=>t.has(e)||n.has(e))},{isEqual:je}),this.retainedShapeWindowSnapshotSignal=l("editor.retainedShapeWindowSnapshot",t=>{const n=e.currentPageShapeIdsSignal.get(),i=null!==e.viewportPageBoundsSignal.get(),o=this.retainedBaseShapeWindowSnapshotSignal.get().shapeIds,r=(s=o.length)<=0?0:uo(Math.ceil(.5*s),12,96);var s;const a=((e,t,n,i)=>{if(0===e.length)return[];const o=new Map;for(const[a,l]of e.entries())o.set(l,a);const r=po(t.map(e=>o.get(e)).filter(e=>void 0!==e).sort((e,t)=>e-t).map(e=>({start:e,end:e+1})),2),s=[];if(r.length>0){const t=uo(Math.ceil(i/(2*r.length)),8,32);for(const[n,i]of r.entries()){const o=n>0?r[n-1]:null,a=n<r.length-1?r[n+1]:null,l=a?a.start-i.end:1/0,d=go(o?i.start-o.end:1/0,t),c=go(l,t+4);s.push({start:Math.max(0,i.start-d),end:Math.min(e.length,i.end+c)})}}for(const a of n){const e=o.get(a);void 0!==e&&s.push({start:e,end:e+1})}return 0===s.length?[]:po(s,2)})(n,o,this.selectedShapeIdsOutsideCulledSetSignal.get(),r);if(i&&t!==nI&&t&&t.viewportReady&&t.ranges.length>0&&a.length>0){const e=po(t.ranges.map(e=>({...e})));if(((e,t)=>{if(0===t.length)return!0;if(0===e.length)return!1;let n=0;for(const i of t){for(;n<e.length;){const t=e[n];if(t&&i.start>=t.start&&i.end<=t.end)break;if(!(t&&i.end>t.end))return!1;n+=1}if(n>=e.length)return!1}return!0})(e,a))return yo(n,e,{viewportReady:i});const o=((e,t,n)=>{const i=t.map((n,i)=>{const o={...n};for(const t of e)t.end+6<n.start||t.start>n.end+6||(o.start=Math.min(o.start,t.start),o.end=Math.max(o.end,t.end));const r=i>0?t[i-1]:null,s=i<t.length-1?t[i+1]:null,a=s?s.start-3:1/0;return{start:Math.min(n.start,Math.max(r?r.end+3:-1/0,o.start)),end:Math.max(n.end,Math.min(a,o.end))}});if(po(i).length!==t.length)return null;const o=fo(t);return fo(i)>o+n?null:i})(e,a,r);if(o)return yo(n,o,{viewportReady:i})}return yo(n,a,{viewportReady:i})},{isEqual:(e,t)=>je(e.shapeIds,t.shapeIds)}),this.retainedShapeIdsSignal=l("editor.retainedShapeIds",()=>this.retainedShapeWindowSnapshotSignal.get().shapeIds,{isEqual:je}),this.renderVisibleShapeIdSetSignal=l("editor.renderVisibleShapeIdSet",()=>new Set(this.renderVisibleShapeIdsSignal.get()),{isEqual:ot}),this.renderItemsSignal=l("editor.renderItems",()=>{const t=e.selectedShapeIdSetSignal.get(),n=[];for(const i of this.renderVisibleShapeIdsSignal.get()){const o=e.getShapeSignal(i).get(),r=e.queries.getShapePageBoundsSignal(i).get();o&&!o.isHidden&&r&&n.push({id:o.id,shape:o,bounds:r,isSelected:t.has(o.id)})}return n},{isEqual:it}),this.renderHostDebugStateSnapshotSignal=l("editor.renderHostDebugState.snapshot",t=>{const n=this.culledShapeIdsSignal.get(),i=this.renderVisibleShapeIdsSignal.get(),o=this.retainedBaseShapeWindowSnapshotSignal.get().shapeIds,r=this.retainedShapeIdsSignal.get(),s=this.selectedShapeIdsOutsideCulledSignal.get(),a=this.getPageIndexById(e.currentPageShapeIdsSignal.get()),l=mo(n,a),d=mo(r,a),c=mo(o,a),u=((e,t)=>{if(0===e.length)return{changed:t.length,added:t.length,removed:0};if(0===t.length)return{changed:e.length,added:0,removed:e.length};const n=new Set(e),i=new Set(t);let o=0,r=0;for(const s of i)n.has(s)||(o+=1);for(const s of n)i.has(s)||(r+=1);return{changed:o+r,added:o,removed:r}})(t===nI?[]:t.retainedShapeIds,r);return{metrics:{culledCount:n.length,visibleCount:i.length,retainedCount:r.length,retainedBaseCount:o.length,culledRangeCount:l.length,culledRangeSpan:fo(l),culledRangesSummary:ho(l),retainedBaseRangeCount:c.length,retainedBaseRangeSpan:fo(c),retainedBaseRangesSummary:ho(c),retainedRangeCount:d.length,retainedRangeSpan:fo(d),retainedRangesSummary:ho(d),retainedChangeCount:u.changed,retainedAddedCount:u.added,retainedRemovedCount:u.removed,selectedOutsideCulledCount:s.length},retainedShapeIds:r.slice()}},{isEqual:(e,t)=>et(e.metrics,t.metrics)}),this.renderHostDebugStateSignal=l("editor.renderHostDebugState.public",()=>this.renderHostDebugStateSnapshotSignal.get().metrics,{isEqual:et})}getPageIndexById(e){const t=new Map;for(const[n,i]of e.entries())t.set(i,n);return t}},rw=class{editor;activeToolId=a("tools.activeToolId","select");isToolLocked=a("tools.isToolLocked",!1);registry=new Map;activeTool=null;constructor(e){this.editor=e}register(e,t,n={}){this.registry.set(e,t),n.shortcut&&this.editor.shortcuts.registerToolShortcut(e,n.shortcut)}hasTool(e){return this.registry.has(e)}setActiveTool(e,t="tool_switch"){const n=this.registry.get(e);if(!n)throw new Error(`Unknown tool "${e}"`);this.activeTool&&this.activeToolId.get()===e||(this.activeTool&&(this.editor.cancelInteractionAndClearTransients(t),this.activeTool.exit({reason:t})),this.activeToolId.set(e),this.activeTool=n(this.editor),this.activeTool.enter())}dispatch(e){this.activeTool?.dispatch(e)}cancel(e){this.activeTool?.dispatch({type:"cancel",reason:e})}setToolLocked(e){this.isToolLocked.set(e)}isActiveToolInInitialState(){return this.activeTool?.isInInitialState()??!0}},sw=class{handlers=[];registeredIds=new Set;register(e){this.registeredIds.has(e.id)||(this.handlers.push(e),this.registeredIds.add(e.id))}getHandlers(){return this.handlers}handleEvent(e,t){for(const n of this.handlers)if("handled"===n.editorEvent?.handleEvent(e,t))return"handled";return"continue"}broadcastEvent(e,t){let n="continue";for(const i of this.handlers)"handled"===i.editorEvent?.handleEvent(e,t)&&(n="handled");return n}createSelectionHandleSession(e,t){for(const n of this.handlers){const i=n.selectionHandle?.createSession(e,t);if(i)return i}return null}createShapePointerSession(e,t){for(const n of this.handlers){const i=n.shapePointer?.createSession(e,t);if(i)return i}return null}},aw=class{interactions;handlers=[];constructor(e){this.interactions=e}register(e){this.handlers.push(e)}createSession(e,t){const n=this.interactions?.createSelectionHandleSession(e,t)??null;if(n)return n;for(const i of this.handlers){const n=i.createSession(e,t);if(n)return n}return null}},lw=class{store;[bI];inputs=new $I;snapshots=new LI(this);clipboard=new BI(this);shortcuts=new iw;tools=new rw(this);camera=new EI(this);selection=new ZI(this);selectionLayout=new GI(this);editing=new JI(this);geometry=new ew(this);hierarchy=new nw(this);shapeUtils=new gI;shapeSvgExporters=new yI;bindingUtils=new rI;interactions=new sw;selectionHandleInteractions=new aw(this.interactions);runtime=new dI;queries;bindings;spatialIndex;snaps;renderWindow;selectionOverlay;transients=new FI(this);history;operations;sideEffects=new VI;commands;shapeCapabilityDefinitions;brushBoxSignal=this.transients.brushBoxSignal;brushBoxActiveSignal=this.transients.brushBoxActiveSignal;bindingPreviewSignal=this.transients.bindingPreviewSignal;bindingPreviewActiveSignal=this.transients.bindingPreviewActiveSignal;terminalBindingGuidesSignal=this.transients.terminalBindingGuidesSignal;dropTargetShapeIdSignal=this.transients.dropTargetShapeIdSignal;hoveredShapeIdSignal=this.transients.hoveredShapeIdSignal;selectionTranslationActiveSignal=this.transients.selectionTranslationActiveSignal;snapIndicatorsSignal;snapIndicatorsActiveSignal;get viewportScreenSizeSignal(){return this.camera.viewportScreenSizeSignal}shapeEditingEntryRequestSignal=this.editing.entryRequestSignal;_shapeDefaultPropsByTypeSignal=a("editor.shapeDefaultPropsByType",new Map);shapeDefaultPropsByTypeSignal=this._shapeDefaultPropsByTypeSignal;nextShapeNumber=1;nextPageNumber=1;nextBindingNumber=1;nextAssetNumber=1;assetUrlResolver=()=>null;get _internalStore(){return G(this)}sessionSignal=l("editor.session",()=>{const e=this._internalStore.getRecordSignal(hI).get();if(!m(e))throw new Error("Missing session record");return e});getSessionRecord(){const e=this._internalStore.get(hI);if(!m(e))throw new Error("Missing session record");return e}currentPageIdSignal=l("editor.currentPageId",()=>this.sessionSignal.get().currentPageId);currentPageShapeIdsSignal;currentPageShapesSignal;currentPageShapeHierarchySignal;culledShapeIdsSignal;renderVisibleShapeIdsSignal;retainedShapeIdsSignal;selectionPageBoundsSignal;selectionFrameBoundsSignal;selectionAnchorPagePointSignal;pagesSignal=l("editor.pages",()=>Array.from(this._internalStore.recordsSignal.get().values()).filter(p).sort((e,t)=>e.index.localeCompare(t.index)),{isEqual:Ye});currentPageSignal=l("editor.currentPage",()=>{const e=this.currentPageIdSignal.get();return this.pagesSignal.get().find(t=>t.id===e)??null});pageStateSignal=l("editor.pageState",()=>{const e=this.pagesSignal.get(),t=this.currentPageIdSignal.get(),n=e.find(e=>e.id===t)??null;return{pages:e,currentPageId:t,currentPage:n,canDeleteCurrentPage:e.length>1&&null!==n}});toolStateSignal=l("editor.toolState",()=>{const e=this.sessionSignal.get();return{activeToolId:e.activeToolId,isToolLocked:e.isToolLocked}});editingShapeIdSignal=l("editor.editingShapeId",()=>this.sessionSignal.get().editingShapeId);shapeEditingSessionSignal=l("editor.shapeEditingSession",()=>this.sessionSignal.get().shapeEditingSession);shapeEditingStateSignal=l("editor.shapeEditingState",()=>({editingShapeId:this.editingShapeIdSignal.get(),session:this.shapeEditingSessionSignal.get()}));currentCameraSignal=l("editor.currentCamera",()=>this.sessionSignal.get().pageCameraById[this.currentPageIdSignal.get()]??pI);selectedShapeIdsSignal=l("editor.selectedShapeIds",()=>{const e=this.sessionSignal.get();return e.pageSelectedShapeIdsById[e.currentPageId]??[]},{isEqual:je});selectionCountSignal=l("editor.selectionCount",()=>this.selectedShapeIdsSignal.get().length);selectedShapeIdSetSignal=l("editor.selectedShapeIdSet",()=>new Set(this.selectedShapeIdsSignal.get()),{isEqual:ot});selectedShapesSignal=l("editor.selectedShapes",()=>this.selectedShapeIdsSignal.get().map(e=>this.getShapeSignal(e).get()).filter(e=>!!e));selectionCanFlipSignal=l("editor.selectionCanFlip",()=>this.hierarchy.canFlipSelection());selectedShapeOverlayItemsSignal=l("editor.selectedShapeOverlayItems",()=>"select"!==this.toolStateSignal.get().activeToolId?[]:this.selectedShapeIdsSignal.get().map(e=>this.getShapeSignal(e).get()).filter(e=>!!e).map(e=>{const t=this.getShapeUtil(e).getSelectionOverlayInfo(e,{editor:this});return{id:e.id,usesSelectionPathOverlay:t.usesSelectionPathOverlay,startPagePoint:t.startPagePoint,endPagePoint:t.endPagePoint,middlePagePoint:t.middlePagePoint,path:t.path,pathStyle:t.pathStyle,pageClipPath:t.pageClipPath??null,bindingSegments:t.bindingSegments??[]}}),{isEqual:Bi});selectionStateSignal=l("editor.selectionState",()=>{const e=this.selectedShapeIdsSignal.get(),t=1===e.length?this.getShapeSignal(e[0]).get()??null:null,n=this.selectedShapesSignal.get(),i=(e=>{let t=null;for(const n of e)if(null!==t){if(t!==n.type)return null}else t=n.type;return t})(n),o=1===n.length,r=n.map(e=>this.getShapeUtil(e).getSelectionHandleAnchors(e,{isOnlySelected:o,editor:this})).some(e=>e.terminalHandleAnchors.length>0||e.middleHandleAnchors.length>0||(e.customHandleAnchors?.length??0)>0),s=n.some(e=>this.getShapeUtil(e).contributesToSelectionFrame(e,{editor:this})),a=r&&s,l=t?this.getShapeUtil(t).getSelectionHandleAnchors(t,{isOnlySelected:o,editor:this}):null,d=1===e.length&&!!l&&(l.terminalHandleAnchors.length>0||(l.customHandleAnchors?.length??0)>0),c=this.queries.selectionHasRotationSignal.get();return{count:e.length,singleShapeType:t?.type??null,commonShapeType:i,canFlipSelection:this.selectionCanFlipSignal.get(),hasPointHandleSelection:r,hasFrameSelection:s,isMixedFrameAndPointHandleSelection:a,canDragPointHandles:d,hasSelectionRotation:c,hasMixedSelectionRotation:!this.queries.selectionHasCompatibleRotationSignal.get(),canResetSelectionRotation:c&&s,frameBounds:this.selectionFrameBoundsSignal.get(),frameRotation:this.queries.selectionRotationSignal.get(),frameRotationCenter:this.queries.selectionRotationCenterSignal.get(),selectionAnchorPagePoint:this.selectionAnchorPagePointSignal.get()}});selectionMetadataSignal=l("editor.selectionMetadata",()=>{const e=this.selectionStateSignal.get();return{count:e.count,singleShapeType:e.singleShapeType,commonShapeType:e.commonShapeType,canFlipSelection:e.canFlipSelection,hasPointHandleSelection:e.hasPointHandleSelection,hasFrameSelection:e.hasFrameSelection,isMixedFrameAndPointHandleSelection:e.isMixedFrameAndPointHandleSelection,canDragPointHandles:e.canDragPointHandles,hasSelectionRotation:e.hasSelectionRotation,hasMixedSelectionRotation:e.hasMixedSelectionRotation,canResetSelectionRotation:e.canResetSelectionRotation}},{isEqual:qe});pageTransformSignal=l("editor.pageTransform",()=>{const e=this.currentCameraSignal.get();return lI.Scale(e.z,e.z).compose(lI.Translate(-e.x,-e.y))});cameraZoomSignal=l("editor.cameraZoom",()=>this.currentCameraSignal.get().z);viewportPageBoundsSignal=l("editor.viewportPageBounds",()=>{const{w:e,h:t}=this.viewportScreenSizeSignal.get();if(e<=0||t<=0)return null;const n=this.currentCameraSignal.get();return new aI(n.x,n.y,e/n.z,t/n.z)});renderViewportPageBoundsSignal=l("editor.renderViewportPageBounds",e=>{const t=this.viewportPageBoundsSignal.get();return t?e!==nI&&e&&(i=t).minX>=(n=e).minX&&i.maxX<=n.maxX&&i.minY>=n.minY&&i.maxY<=n.maxY?e:t.expand(160/this.cameraZoomSignal.get()):null;var n,i},{isEqual:Qe});renderItemsSignal;renderHostDebugStateSignal;historyStateSignal;shapeRenderOrderByIdSignal;culledShapeIdSetSignal;selectedShapeIdsOutsideCulledSignal;selectedShapeIdsOutsideCulledSetSignal;renderVisibleShapeIdSetSignal;shapeSignals=new Map;shapeContentCutoutLocalPolygonSignals=new Map;shapeSelectedSignals=new Map;shapeRenderOrderSignals=new Map;shapeRenderVisibleSignals=new Map;shapeDocumentVisibleSignals=new Map;shapeEffectiveOpacitySignals=new Map;shapeEditingSessionSignals=new Map;shapeDropTargetSignals=new Map;shapeHoveredSignals=new Map;shapeSelectedDescendantTransformAncestorSignals=new Map;lastPointerDownForClickCount=null;lastPointerUpForClickCount=null;currentPointerClickCount=1;selectionOverlayFrameGeometrySignal;selectionOverlayCompanionFrameGeometriesSignal;selectionOverlayPathSignal;selectionOverlayPageClipPathSignal;selectionOverlayBindingSegmentsSignal;selectionOverlayFrameStyleSignal;selectionOverlayFrameSignal;selectionOverlayHandleAnchorsSignal;selectionOverlayHandlesSignal;selectionOverlayHandleCountsSignal;selectionOverlaySignal;overlayDebugStateSignal;constructor(e={}){this.shapeCapabilityDefinitions=e.shapeCapabilities??[],e.resolveAssetUrl&&(this.assetUrlResolver=e.resolveAssetUrl);for(const i of e.shapeUtils??[])this.shapeUtils.register(i);for(const i of e.shapeSvgExporters??[])this.shapeSvgExporters.register(i);for(const i of e.bindingUtils??[])this.bindingUtils.register(i);const t=new II(this.snapshots.buildInitialRecords(e.documentSnapshot??null,e.sessionSnapshot??null,e.documentMeta??{}));var n;((e,t)=>{e[bI]=t})(this,t),this.store=t,this.snapshots.ensureSessionIntegrity(),this.queries=new DI(this),this.bindings=new MI(this),this.spatialIndex=new zI(this,this.queries),this.snaps=new jI(this),this.snapIndicatorsSignal=this.snaps.indicatorsSignal,this.snapIndicatorsActiveSignal=this.snaps.activeSignal,this.currentPageShapeIdsSignal=this.queries.currentPageShapeIdsSignal,this.currentPageShapesSignal=this.queries.currentPageShapesSignal,this.currentPageShapeHierarchySignal=this.queries.currentPageShapeHierarchySignal,this.selectionPageBoundsSignal=this.queries.selectionPageBoundsSignal,this.selectionFrameBoundsSignal=this.queries.selectionFrameBoundsSignal,this.selectionAnchorPagePointSignal=this.queries.selectionAnchorPagePointSignal,this.selectionOverlay=new QI(this),this.selectionOverlayFrameGeometrySignal=this.selectionOverlay.frameGeometrySignal,this.selectionOverlayCompanionFrameGeometriesSignal=this.selectionOverlay.companionFrameGeometriesSignal,this.selectionOverlayPathSignal=this.selectionOverlay.pathSignal,this.selectionOverlayPageClipPathSignal=this.selectionOverlay.pageClipPathSignal,this.selectionOverlayBindingSegmentsSignal=this.selectionOverlay.bindingSegmentsSignal,this.selectionOverlayFrameStyleSignal=this.selectionOverlay.frameStyleSignal,this.selectionOverlayFrameSignal=this.selectionOverlay.frameSignal,this.selectionOverlayHandleAnchorsSignal=this.selectionOverlay.handleAnchorsSignal,this.selectionOverlayHandlesSignal=this.selectionOverlay.handlesSignal,this.selectionOverlayHandleCountsSignal=this.selectionOverlay.handleCountsSignal,this.selectionOverlaySignal=this.selectionOverlay.overlaySignal,this.overlayDebugStateSignal=this.selectionOverlay.debugStateSignal,this.renderWindow=new ow(this),this.shapeRenderOrderByIdSignal=this.renderWindow.shapeRenderOrderByIdSignal,this.culledShapeIdsSignal=this.renderWindow.culledShapeIdsSignal,this.culledShapeIdSetSignal=this.renderWindow.culledShapeIdSetSignal,this.selectedShapeIdsOutsideCulledSignal=this.renderWindow.selectedShapeIdsOutsideCulledSignal,this.selectedShapeIdsOutsideCulledSetSignal=this.renderWindow.selectedShapeIdsOutsideCulledSetSignal,this.renderVisibleShapeIdsSignal=this.renderWindow.renderVisibleShapeIdsSignal,this.retainedShapeIdsSignal=this.renderWindow.retainedShapeIdsSignal,this.renderVisibleShapeIdSetSignal=this.renderWindow.renderVisibleShapeIdSetSignal,this.renderItemsSignal=this.renderWindow.renderItemsSignal,this.renderHostDebugStateSignal=this.renderWindow.renderHostDebugStateSignal,this.syncShapeCounter(),this.syncPageCounter(),this.syncBindingCounter(),this.syncAssetCounter(),this.operations=new CI(this),this.history=new PI(this),this.historyStateSignal=this.history.state,this.commands=(n=this,{createPage:(e,t)=>((e,t,n)=>{const i=n?.source??"user",o=e.createPageRecord(t);let r=o;return G(e).atomic(()=>{const t=Ie([...e.getPages(),o]);r=t.find(e=>e.id===o.id)??o,G(e).put(t,i),e.ensurePageSessionState(r.id,i)},i),r})(n,e,t),deletePage:(e,t)=>((e,t,n)=>{const i=n?.source??"user",o=e.getPages();if(o.length<=1)return!1;const r=o.findIndex(e=>e.id===t);if(r<0)return!1;const s=e.getShapesForPage(t).map(e=>e.id),a=Ie(o.filter(e=>e.id!==t)),l=o[r+1]?.id??o[r-1]?.id??o[0]?.id,d=e.getCurrentPageId()===t&&l?l:e.getCurrentPageId();return G(e).atomic(()=>{s.length>0&&Fe(e,s,n),G(e).remove([t],i),e.removePageSessionState(t,d,i),G(e).put(a,i)},i),!0})(n,e,t),renamePage(e,t){((e,t,n)=>{const i=n?.source??"user",o=e.getPage(t.id);if(!o)return;const r=t.name.trim();r&&r!==o.name&&G(e).atomic(()=>{G(e).put([{...o,name:r}],i)},i)})(n,e,t)},updateDocumentMeta:(e,t)=>((e,t,n)=>{const i=n?.source??"user",o=e.getDocumentMetadataRecord()??c(),r={...o,meta:{...o.meta,...t.patch}};return G(e).atomic(()=>{G(e).put([r],i)},i),r})(n,e,t),updatePageMeta:(e,t)=>((e,t,n)=>{const i=n?.source??"user",o=e.getPage(t.id);if(!o)return null;const r={...o,meta:{...o.meta,...t.patch}};return G(e).atomic(()=>{G(e).put([r],i)},i),r})(n,e,t),movePage(e,t){((e,t,n)=>{const i=n?.source??"user",o=e.getPages(),r=o.findIndex(e=>e.id===t.id);if(r<0)return;const s=Math.max(0,Math.min(t.toIndex,o.length-1));if(r===s)return;const a=[...o],[l]=a.splice(r,1);l&&(a.splice(s,0,l),G(e).atomic(()=>{G(e).put(Ie(a),i)},i))})(n,e,t)},createShapes:(e,t)=>((e,t,n)=>{const i=[],o=n?.source??"user";return G(e).atomic(()=>{const r=t.map(t=>e.createShapeRecord(t)),s=new Map(r.map(e=>[e.id,e])),a=r.map(t=>{if(!t.parentId.startsWith("shape:"))return t;const n=s.get(t.parentId)??e.getShape(t.parentId);if(!n)return t;const i=e.getShapeUtil(n).getChildPlacementMeta(n,t,{editor:e,reason:"create"});return i===t.meta?t:{...t,meta:i}});if(Pe(e,a),G(e).put(a,o),"user"===o&&!1!==n?.autoReparent){const i=new Map;for(let n=0;n<a.length;n+=1){const o=a[n],r=t[n];if(!o||!r||r.parentId)continue;const s=e.getContainingParentIdForShapeRecord(o);s&&s!==o.parentId&&i.set(o.id,s)}((e,t)=>{const n=new Set;for(const i of e.keys()){const o=[],r=new Map;let s=i;for(;s;){const i=r.get(s);if(void 0!==i){for(const e of o.slice(i))n.add(e);break}r.set(s,o.length),o.push(s);const a=e.get(s);s=a?.startsWith("shape:")&&t.has(a)?a:null}}for(const i of n)e.delete(i)})(i,new Set(a.map(e=>e.id)));const o=new Map;for(const e of a){const t=i.get(e.id);if(!t)continue;const n=o.get(t)??[];n.push(e.id),o.set(t,n)}for(const[t,r]of o)$e(e,{ids:r,parentId:t},n)}const l=Re(e,a.map(e=>e.id)),d=new Set;if(!n?.deferMinimumChildRepair){const t=new Set;for(const n of a){const i=e.getShape(n.id);i&&e.getShapeUtil(i).getMinimumChildCount(i)>0&&t.add(i.id)}Le(e,t,d,o)}Me(e,l,o,d),i.push(...a.map(t=>e.getShape(t.id)).filter(e=>!!e))},o),i})(n,e,t),createShapesFromRecords:(e,t)=>((e,t,n)=>{const i=n?.source??"user";if(0===t.length)return[];for(const o of t)if(e.getShape(o.id))throw new Error(`Shape ${o.id} already exists`);return Pe(e,t),G(e).atomic(()=>{G(e).put(t,i),ke(e,i);const n=Re(e,t.map(e=>e.id));for(const i of t){const t=e.getShape(i.id);t&&e.getShapeUtil(t).getMinimumChildCount(t)>0&&n.add(t.id)}const o=new Set;Le(e,n,o,i),Me(e,n,i,o)},i),t.map(t=>e.getShape(t.id)).filter(e=>!!e)})(n,e,t),updateShapes(e,t){ve(n,e,t)},reparentShapes:(e,t)=>$e(n,e,t),deleteShapes(e,t){Fe(n,e,t)},createAsset:(e,t)=>((e,t,n)=>{const i=n?.source??"user",o=e.createAssetRecord(t);return G(e).atomic(()=>{G(e).put([o],i)},i),o})(n,e,t),createAssetsFromRecords:(e,t)=>((e,t,n)=>{const i=n?.source??"user";return 0===t.length?[]:(G(e).atomic(()=>{G(e).put(t,i)},i),t)})(n,e,t),updateAsset:(e,t)=>((e,t,n)=>{const i=n?.source??"user",o=e.getAsset(t.id);if(!o)return null;const r={...o,props:t.props?{...o.props,...t.props}:o.props,meta:t.meta??o.meta};return G(e).atomic(()=>{G(e).put([r],i)},i),r})(n,e,t),deleteAsset:(e,t)=>((e,t,n)=>{const i=n?.source??"user";return!!e.getAsset(t)&&(G(e).atomic(()=>{G(e).remove([t],i)},i),!0)})(n,e,t),createBinding:(e,t)=>((e,t,n)=>{const i=n?.source??"user",o=e.createBindingRecord(t);if(!Ue(e,o))throw new Error(`Invalid binding endpoints for ${o.type} binding`);const r=new Set;return De(e,[o.fromId,o.toId],r),G(e).atomic(()=>{const t=e.bindings.getConflictingBindings(o).map(e=>e.id);t.length>0&&e.bindings.cleanupBindings(t,i),G(e).put([o],i),e.bindings.syncCreatedBinding(o,i),De(e,[o.fromId,o.toId],r),Le(e,r,new Set,i)},i),o})(n,e,t),updateBinding:(e,t)=>((e,t,n)=>{const i=n?.source??"user",o=e.getBinding(t.id);if(!o)return null;const r=e.getBindingUtil(o),s={...o,fromId:t.fromId??o.fromId,toId:t.toId??o.toId,props:t.props?r.validateProps({...o.props,...t.props}):o.props,meta:t.meta??o.meta};if(!Ue(e,s))throw new Error(`Invalid binding endpoints for ${s.type} binding`);const a=new Set;return De(e,[o.fromId,o.toId,s.fromId,s.toId],a),G(e).atomic(()=>{const t=e.bindings.getConflictingBindings(s).map(e=>e.id);t.length>0&&e.bindings.cleanupBindings(t,i),G(e).put([s],i),e.bindings.syncUpdatedBinding(o,s,i),De(e,[o.fromId,o.toId,s.fromId,s.toId],a),Le(e,a,new Set,i)},i),s})(n,e,t),deleteBinding:(e,t)=>((e,t,n)=>{const i=n?.source??"user",o=e.getBinding(t);return!!o&&(G(e).atomic(()=>{e.bindings.cleanupBindings([o.id],i),G(e).remove([o.id],i)},i),!0)})(n,e,t),setCurrentPageId(e,t){((e,t,n)=>{e.setCurrentPage(t,n?.source??"system")})(n,e,t)},setCamera(e,t){((e,t,n)=>{e.setCamera(t.camera,{pageId:t.pageId,source:n?.source??"system"})})(n,e,t)},setSelectedShapeIds(e,t){((e,t,n)=>{e.setSelectedShapeIds(t,{source:n?.source??"user"})})(n,e,t)},setActiveTool(e,t){((e,t,n)=>{const i=n?.source??"system";e.tools.setActiveTool(t),e.completeEditing(i),e.updateSession({activeToolId:t},i)})(n,e,t)},setToolLocked(e,t){((e,t,n)=>{const i=n?.source??"system";e.tools.setToolLocked(t),e.updateSession({isToolLocked:t},i)})(n,e,t)}}),this.bindings.repairLoadedBindings("system"),this.registerBuiltInInteractions(),this.registerBuiltInShortcuts(),this.registerBuiltInSideEffects()}registerBuiltInInteractions(){this.interactions.register(function(){let e=!1,t=null;const n=()=>{t=null};return{id:"land.camera.canvas-pan",editorEvent:{handleEvent(i,o){if("cancel"===o.type)return"blur"!==o.reason&&"dispose"!==o.reason||(e=!1),n(),"continue";if("keyboard"===o.type&&(e=>"Space"===e.code)(o)){if("key_up"===o.name){const t=e;return e=!1,t?"handled":"continue"}return i.getShapeEditingSession()?"continue":(e=!0,"handled")}if("pointer"!==o.type||"mouse"!==o.pointerType)return"continue";if("pointer_down"===o.name){n();const r=((e,{allowLeftButton:t})=>1===e.button?4:t&&0===e.button?1:null)(o,{allowLeftButton:i.inputs.isSpacePressed.get()&&!i.getShapeEditingSession()});return null===r?"continue":(i.resetPointerClickTracking(),0===o.button&&(e=!0),t={pointerId:o.pointerId,buttons:r,camera:bo(i,o.screenPoint)},"handled")}return t&&o.pointerId===t.pointerId?"pointer_move"===o.name?0===(o.buttons&t.buttons)?(n(),"handled"):(xo(i,t.camera,o.screenPoint),"handled"):"pointer_up"===o.name||"pointer_cancel"===o.name?(n(),"handled"):"continue":"continue"}}}}())}registerBuiltInShortcuts(){this.shortcuts.registerEditorShortcut("move-selection-backward",{key:"ArrowDown",altKey:!0}),this.shortcuts.registerEditorShortcut("move-selection-forward",{key:"ArrowUp",altKey:!0}),this.shortcuts.registerEditorShortcut("undo",{key:"z",accelKey:!0}),this.shortcuts.registerEditorShortcut("redo",{key:"z",accelKey:!0,shiftKey:!0}),this.shortcuts.registerEditorShortcut("delete-selection","Backspace"),this.shortcuts.registerEditorShortcut("delete-selection","Delete"),this.shortcuts.registerEditorShortcut("reset-interaction","Escape")}registerBuiltInSideEffects(){this.sideEffects.registerBeforeDeleteHandler("shape",(e,t)=>{this.bindings.cleanupBindingsForDeletedShapes(e,t)}),this.sideEffects.registerAfterDeleteHandler("shape",(e,t)=>{this.removeShapeIdsFromSelection(e,t),this.removeShapeIdsFromEditingSession(e,t)})}dispatch(e){const t=this.normalizeEvent(e);if(this.inputs.handleEvent(t),"keyboard"===t.type&&"key_down"===t.name){const e=this.shortcuts.getTargetForEvent(t);if(e&&this.runKeyboardShortcutTarget(e))return}if("wheel"!==t.type)if("cancel"!==t.type){if("pointer"===t.type&&"pointer_cancel"===t.name)return this.interactions.broadcastEvent(this,t),void this.cancelInteractionAndClearTransients("pointer_cancel",{notifyInteractionHandlers:!1});if("handled"!==this.interactions.handleEvent(this,t)&&(this.tools.dispatch(t),"pointer"===t.type&&"pointer_up"===t.name)){const e=this.getDoubleClickEvent(t);e&&"handled"!==this.interactions.handleEvent(this,e)&&this.tools.dispatch(e)}}else this.cancelInteractionAndClearTransients(t.reason);else this.handleWheelEvent(t)}handleInteractionEvent(e){const t=this.normalizeEvent(e);return this.inputs.handleEvent(t),"handled"===this.interactions.handleEvent(this,t)}runKeyboardShortcutTarget(e){switch(e.type){case"action":return!1;case"editor":return this.runEditorKeyboardShortcut(e.command);case"tool":return this.commands.setActiveTool(e.toolId,{source:"system"}),!0}}runEditorKeyboardShortcut(e){switch(e){case"delete-selection":return!this.getShapeEditingSession()&&(this.deleteSelection("user"),!0);case"move-selection-backward":return this.moveSelectionWithinParent("backward","user");case"move-selection-forward":return this.moveSelectionWithinParent("forward","user");case"redo":return this.redo(),!0;case"reset-interaction":return"handled"===this.interactions.broadcastEvent(this,{type:"cancel",reason:"escape"})?(this.tools.cancel("escape"),this.inputs.resetPointer(),this.clearSelectionTransients(),!0):(this.tools.isActiveToolInInitialState()&&"select"!==this.getActiveToolId()?this.commands.setActiveTool("select",{source:"system"}):this.cancelInteractionAndClearTransients("escape"),!0);case"undo":return this.undo(),!0}}normalizeEvent(e){if("pointer"!==e.type)return e;if("pointer_up"===e.name){const t=e.clickCount===this.currentPointerClickCount?e:{...e,clickCount:this.currentPointerClickCount};return this.lastPointerUpForClickCount={timestamp:t.timestamp,screenPoint:t.screenPoint.clone()},t}if("pointer_down"!==e.name)return e;const t=this.lastPointerDownForClickCount,n=this.lastPointerUpForClickCount,i=t&&n&&n.timestamp>=t.timestamp&&e.timestamp-n.timestamp<=250&&n.screenPoint.dist2(e.screenPoint)<=1600?2:1;return this.lastPointerDownForClickCount={timestamp:e.timestamp,screenPoint:e.screenPoint.clone()},this.currentPointerClickCount=i,e.clickCount===i?e:{...e,clickCount:i}}getDoubleClickEvent(e){return(e.clickCount??1)<2||this.currentPointerClickCount<2?null:{type:"click",name:"double_click",phase:"up",timestamp:e.timestamp,pointerId:e.pointerId,button:e.button,buttons:e.buttons,pointerType:e.pointerType,screenPoint:e.screenPoint.clone(),pagePoint:e.pagePoint.clone(),pressure:e.pressure,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey}}listen(e){return this.store.listen(t=>e(t))}getRenderItems(){return this.renderItemsSignal.get()}getPages(){return this.pagesSignal.get()}getDocumentMetadataRecord(){const e=this._internalStore.get(cI);return g(e)?e:void 0}getCurrentPageId(){return this.currentPageIdSignal.get()}getActiveToolId(){return this.sessionSignal.get().activeToolId}isToolLocked(){return this.sessionSignal.get().isToolLocked}isActiveToolInInitialState(){return this.tools.isActiveToolInInitialState()}getEditingShapeId(){return this.editingShapeIdSignal.get()}getShapeEditingSession(){return this.shapeEditingSessionSignal.get()}getShapeEditingEntryRequest(){return this.shapeEditingEntryRequestSignal.get()}resetPointerClickTracking(){this.lastPointerDownForClickCount=null,this.lastPointerUpForClickCount=null,this.currentPointerClickCount=1}getCurrentPageShapeIds(){return this.currentPageShapeIdsSignal.get()}getPage(e){const t=this._internalStore.get(e);return p(t)?t:void 0}getCurrentCamera(){return this.camera.getCurrentCamera()}undo(){return this.history.getActiveScope()||this.cancelInteractionForCommand(),this.history.undo()}redo(){return this.history.getActiveScope()||this.cancelInteractionForCommand(),this.history.redo()}createPageAndSelect(e,t="user"){const n=this.commands.createPage(e,{source:t});return this.commands.setCurrentPageId(n.id,{source:t}),n}selectPage(e,t="user"){this.commands.setCurrentPageId(e,{source:t})}renamePage(e,t,n="user"){this.commands.renamePage({id:e,name:t},{source:n})}updateDocumentMeta(e,t="user"){return this.commands.updateDocumentMeta({patch:e},{source:t})}updatePageMeta(e,t,n="user"){return this.commands.updatePageMeta({id:e,patch:t},{source:n})}deletePage(e,t="user"){return this.cancelInteractionForCommand(),this.commands.deletePage(e,{source:t})}setActiveTool(e,t="system"){this.commands.setActiveTool(e,{source:t})}setToolLocked(e,t="system"){this.commands.setToolLocked(e,{source:t})}toggleToolLocked(e="system"){this.setToolLocked(!this.isToolLocked(),e)}getCamera(e=this.getCurrentPageId()){return this.camera.getCamera(e)}pageToScreen(e,t=this.getCurrentPageId()){return this.camera.pageToScreen(e,t)}screenToPage(e,t=this.getCurrentPageId()){return this.camera.screenToPage(e,t)}getSelectedShapeIds(e=this.getCurrentPageId()){return this.getSessionRecord().pageSelectedShapeIdsById[e]??[]}isShapeHidden(e){const t=new Set;let n=this.getShape(e);for(;n;){if(n.isHidden)return!0;if(!n.parentId.startsWith("shape:"))return!1;const e=n.parentId;if(t.has(e))return!1;t.add(e);const i=this.getShape(e);if(!i)return!1;if(!this.getShapeUtil(i).isChildVisible(i,n,{editor:this}))return!0;n=i}return!1}getSelectedShapes(){return this.selectedShapesSignal.get()}getDefaultShapeProps(e){const t=this.shapeUtils.get(e),n=this._shapeDefaultPropsByTypeSignal.get().get(e)??{};return t.validateProps({...t.getDefaultProps(),...n})}updateDefaultShapeProps(e,t){const n=this.shapeUtils.get(e),i=this._shapeDefaultPropsByTypeSignal.get().get(e)??{},o=n.validateProps({...n.getDefaultProps(),...i,...t}),r=n.validateProps(n.getDefaultProps()),s={};for(const[l,d]of Object.entries(o))r[l]!==d&&(s[l]=d);if(((e,t)=>{if(e===t)return!0;const n=Object.entries(e),i=Object.entries(t);if(n.length!==i.length)return!1;for(const[o,r]of n)if(!st(r,t[o]))return!1;return!0})(i,s))return;const a=new Map(this._shapeDefaultPropsByTypeSignal.get());0===Object.keys(s).length?a.delete(e):a.set(e,s),this._shapeDefaultPropsByTypeSignal.set(a)}getSelectionParentOrderState(){return this.hierarchy.getSelectionParentOrderState()}getSelectionGroupState(){return this.hierarchy.getSelectionGroupState()}canGroupSelection(){return this.hierarchy.canGroupSelection()}canGroupShapes(e){return this.hierarchy.canGroupShapes(e)}groupShapes(e,t="user"){return this.hierarchy.groupShapes(e,t)}groupSelection(e="user"){return this.hierarchy.groupSelection(e)}getUngroupableSelectedShapeIds(){return this.hierarchy.getUngroupableSelectedShapeIds()}getUngroupableShapeIds(e){return this.hierarchy.getUngroupableShapeIds(e)}canUngroupSelection(){return this.hierarchy.canUngroupSelection()}canUngroupShapes(e){return this.hierarchy.canUngroupShapes(e)}ungroupShapes(e,t="user"){return this.hierarchy.ungroupShapes(e,t)}ungroupSelection(e="user"){return this.hierarchy.ungroupSelection(e)}getSelectionSiblingOrderState(){return this.hierarchy.getSelectionSiblingOrderState()}canMoveSelectionWithinParent(e){return this.hierarchy.canMoveSelectionWithinParent(e)}canMoveSelectionInParentOrder(e){return this.hierarchy.canMoveSelectionInParentOrder(e)}canMoveShapesInParentOrder(e,t){return this.hierarchy.canMoveShapesInParentOrder(e,t)}moveShapesInParentOrder(e,t,n="user"){return this.hierarchy.moveShapesInParentOrder(e,t,n)}moveShapesToParentOrderEdge(e,t,n="user"){return this.hierarchy.moveShapesToParentOrderEdge(e,t,n)}moveSelectionWithinParent(e,t="user"){return this.hierarchy.moveSelectionWithinParent(e,t)}canAlignSelection(){return this.selectionLayout.canAlign()}alignSelection(e,t="user"){return this.cancelInteractionForCommand(),this.selectionLayout.align(e,t)}canDistributeSelection(){return this.selectionLayout.canDistribute()}distributeSelection(e,t="user"){return this.cancelInteractionForCommand(),this.selectionLayout.distribute(e,t)}moveShapesToParentPlacementResult(e,t="user"){return this.hierarchy.moveShapesToParentPlacementResult(e,t)}moveSelectionInParentOrder(e,t="user"){return this.hierarchy.moveSelectionInParentOrder(e,t)}moveSelectionToParentOrderEdge(e,t="user"){return this.hierarchy.moveSelectionToParentOrderEdge(e,t)}canEditShape(e){return this.editing.canEditShape(e)}startEditingShape(e,t="user"){return this.editing.start(e,t)}completeEditing(e="user"){return this.editing.complete(e)}cancelEditing(e="user"){return this.editing.cancel(e)}setShapeEditingComposition(e,t="system"){this.editing.setComposition(e,t)}consumeShapeEditingEntryRequest(e){this.editing.consumeEntryRequest(e)}deleteSelection(e="user"){this.deleteShapesById(this.getSelectedShapeIds(),e)}deleteShapesById(e,t="user"){const n=Array.from(new Set(e));0!==n.length&&(this.cancelInteractionForCommand(),this.commands.deleteShapes(n,{source:t}))}setShapesHidden(e,t,n="user"){const i=Array.from(new Set(e.filter(e=>{const n=this.getShape(e);return!!n&&n.isHidden!==t})));return 0===i.length?[]:(this.cancelInteractionForCommand(),this.commands.updateShapes(i.map(e=>({id:e,isHidden:t})),{source:n}),t&&(this.removeShapeIdsFromSelection(this.getShapeIdsIncludingDescendants(i),n),this.removeShapeIdsFromEditingSession(this.getShapeIdsIncludingDescendants(i),n)),i)}setShapesLocked(e,t,n="user"){const i=Array.from(new Set(e.filter(e=>{const n=this.getShape(e);return!!n&&n.isLocked!==t})));return 0===i.length?[]:(this.cancelInteractionForCommand(),this.commands.updateShapes(i.map(e=>({id:e,isLocked:t})),{source:n}),t&&(this.removeShapeIdsFromSelection(this.getShapeIdsIncludingDescendants(i),n),this.removeShapeIdsFromEditingSession(this.getShapeIdsIncludingDescendants(i),n)),i)}createClipboardPayloadFromSelection(){return this.clipboard.createPayloadFromSelection()}pasteClipboardPayload(e){return this.clipboard.pastePayload(e)}duplicateSelection(e={}){return this.clipboard.duplicateSelection(e)}selectAllCurrentPage(e="user"){this.cancelInteractionForCommand(),this.selection.selectAllCurrentPage(e)}resetSelectionRotation(e="user"){((e,t="user")=>{if(!e.canRotateSelection())return;const n=e.getSelectedShapes().filter(t=>e.getShapeUtil(t).contributesToSelectionFrame(t,{editor:e}));if(0===n.length)return;const i=n.flatMap(t=>{const n=Gt(e,t);if(!n)return[];const i=Zt(e,t,n,{id:t.id,rotation:0});return i?[i]:[]});i.length>0&&e.commands.updateShapes(i,{source:t})})(this,e)}flipSelection(e,t="user"){const n=function(e,t){if(!e.canFlipSelection())return[];const n=e.getSelectionTransformTargetShapes(),i=e.getSelectionFrame()??((e,t)=>{const n=t.flatMap(t=>{const n=Gt(e,t);return n?e.getShapeUtil(t).getSelectionPagePoints(n)??[]:[]});if(0===n.length)return null;const i=aI.FromPoints(n);return{bounds:i,rotation:0,rotationCenter:i.center,hasCompatibleRotation:!0}})(e,n);return i&&0!==n.length?n.map(n=>((e,t,n,i)=>{const o=e.getShapeUtil(t),r=Gt(e,t);if(!r)return null;const s=o.getSelectionPagePoints(r);if(!s&&!o.contributesToSelectionFrame(t,{editor:e}))return null;const a=(({points:e,transform:t})=>0===e.length?null:aI.FromPoints(e.map(e=>fi(e,t))))({points:s?[...s]:o.getPositionedOutlineVertices(t).map(n=>e.computeShapePositionedToPageTransform(t).applyToPoint(n)),transform:n});return a?Zt(e,t,r,o.flipSelectionBounds(r,{axis:i,selectionBounds:n.bounds,selectionLocalBounds:Ii({axis:i,bounds:a,selectionBounds:n.bounds}),selectionRotation:n.rotation,selectionRotationCenter:n.rotationCenter})):null})(e,n,i,t)).filter(e=>null!==e):[]}(this,e);0!==n.length&&(this.cancelInteractionForCommand(),this.commands.updateShapes(n,{source:t}))}getShape(e){const t=this._internalStore.get(e);return f(t)?t:void 0}getAsset(e){const t=this._internalStore.get(e);return y(t)?t:void 0}getAssets(){return this._internalStore.getAll().filter(y).sort((e,t)=>e.id.localeCompare(t.id))}resolveAssetUrl(e){return this.assetUrlResolver(e)}getUnreferencedAssetIdsAfterShapeDelete(e){if(0===e.length)return[];const t=new Set(e),n=new Set,i=new Set;for(const o of this._internalStore.getAll().filter(f)){const e=rt(o);e&&(t.has(o.id)?n.add(e):i.add(e))}return this.getAssets().map(e=>e.id).filter(e=>n.has(e)&&!i.has(e))}getShapeSignal(e){let t=this.shapeSignals.get(e);return t||(t=l(`editor.shape.${e}`,()=>{const t=this._internalStore.getRecordSignal(e).get();return f(t)?t:void 0}),this.shapeSignals.set(e,t)),t}getShapeContentCutoutLocalPolygonsSignal(e){let t=this.shapeContentCutoutLocalPolygonSignals.get(e);return t||(t=l(`editor.shapeContentCutouts.${e}`,()=>{const t=this.getShapeSignal(e).get();return t?this.queries.getBindingsToShapeSignal(e).get().flatMap(e=>{const n=this.getShapeSignal(e.fromId).get();return n?this.getBindingUtil(e).getTargetShapeContentCutoutLocalPolygons?.(this,e,{fromShape:n,toShape:t})??[]:[]}):[]},{isEqual:Ze}),this.shapeContentCutoutLocalPolygonSignals.set(e,t)),t}getShapeLocalToPageTransformSignal(e){return this.queries.getShapeLocalToPageTransformSignal(e)}getShapeSelectedSignal(e){let t=this.shapeSelectedSignals.get(e);return t||(t=l(`editor.shapeSelected.${e}`,()=>this.selectedShapeIdSetSignal.get().has(e)),this.shapeSelectedSignals.set(e,t)),t}getShapeRenderOrderSignal(e){let t=this.shapeRenderOrderSignals.get(e);return t||(t=l(`editor.shapeRenderOrder.${e}`,()=>this.shapeRenderOrderByIdSignal.get().get(e)??-1),this.shapeRenderOrderSignals.set(e,t)),t}getShapeRenderVisibleSignal(e){let t=this.shapeRenderVisibleSignals.get(e);return t||(t=l(`editor.shapeRenderVisible.${e}`,()=>{const t=this.getShapeClipAncestorIdsSignal(e).get().length>0;return this.renderVisibleShapeIdSetSignal.get().has(e)&&this.getShapeDocumentVisibleSignal(e).get()&&(!t||null!==this.getShapeClippedPageBounds(e))}),this.shapeRenderVisibleSignals.set(e,t)),t}getShapeDocumentVisibleSignal(e){let t=this.shapeDocumentVisibleSignals.get(e);return t||(t=l(`editor.shapeDocumentVisible.${e}`,()=>{const t=new Set([e]);let n=this.getShapeSignal(e).get();if(!n)return!1;for(;n;){if(n.isHidden)return!1;if(!n.parentId.startsWith("shape:"))return!0;const e=n.parentId;if(t.has(e))return!0;t.add(e);const i=this.getShapeSignal(e).get();if(!i)return!0;if(!this.getShapeUtil(i).isChildVisible(i,n,{editor:this}))return!1;n=i}return!0}),this.shapeDocumentVisibleSignals.set(e,t)),t}getShapeEffectiveOpacitySignal(e){let t=this.shapeEffectiveOpacitySignals.get(e);return t||(t=l(`editor.shapeEffectiveOpacity.${e}`,()=>{const t=new Set([e]);let n=1,i=this.getShapeSignal(e).get();for(;i&&(n*=i.opacity,i.parentId.startsWith("shape:"));){const e=i.parentId;if(t.has(e))break;t.add(e),i=this.getShapeSignal(e).get()}return n}),this.shapeEffectiveOpacitySignals.set(e,t)),t}getShapeEditingSessionForShapeSignal(e){let t=this.shapeEditingSessionSignals.get(e);return t||(t=l(`editor.shapeEditingSessionForShape.${e}`,()=>{const t=this.shapeEditingSessionSignal.get();return t?.shapeId===e?t:null}),this.shapeEditingSessionSignals.set(e,t)),t}getShapeDropTargetSignal(e){let t=this.shapeDropTargetSignals.get(e);return t||(t=l(`editor.shapeDropTarget.${e}`,()=>this.dropTargetShapeIdSignal.get()===e),this.shapeDropTargetSignals.set(e,t)),t}getShapeHoveredSignal(e){let t=this.shapeHoveredSignals.get(e);return t||(t=l(`editor.shapeHovered.${e}`,()=>{const t=this.hoveredShapeIdSignal.get();if(!t)return!1;const n=this.getShapeSignal(e).get();return!!n&&this.getShapeUtil(n).getHoverDecorationTargetId(n,{editor:this})===t}),this.shapeHoveredSignals.set(e,t)),t}getShapeSelectedDescendantTransformAncestorSignal(e){let t=this.shapeSelectedDescendantTransformAncestorSignals.get(e);return t||(t=l(`editor.shapeSelectedDescendantTransformAncestor.${e}`,()=>{if(this.getShapeSelectedSignal(e).get())return!1;const t=this.getShapeSignal(e).get();return!(!t||!this.getShapeUtil(t).isSelectionTransformContainer(t))&&this.selectedShapeIdsSignal.get().some(t=>this.hierarchy.isShapeDescendantOf(t,e))}),this.shapeSelectedDescendantTransformAncestorSignals.set(e,t)),t}getBinding(e){const t=this._internalStore.get(e);return S(t)?t:void 0}getShapesForPage(e){return this.queries.getShapesForPage(e)}getBindingsFromShape(e){return this.queries.getBindingsFromShape(e)}getBindingsFromShapeSignal(e){return this.queries.getBindingsFromShapeSignal(e)}getBindingsToShape(e){return this.queries.getBindingsToShape(e)}getBindingsToShapeSignal(e){return this.queries.getBindingsToShapeSignal(e)}getBindingsForShape(e){return this.queries.getBindingsForShape(e)}getBindingsForShapeSignal(e){return this.queries.getBindingsForShapeSignal(e)}getChildShapeIds(e){return this.queries.getChildShapeIds(e)}getChildShapes(e){return this.queries.getChildShapes(e)}getDescendantShapeIds(e){return this.queries.getDescendantShapeIds(e)}getDescendantPageBounds(e){return this.queries.getDescendantPageBounds(e)}getShapeSubtreePageBounds(e){return this.queries.getShapeSubtreePageBounds(e)}getShapePageId(e){return this.queries.getPageIdForShape(e)}isShapeOrAncestorLocked(e){return this.hierarchy.isShapeOrAncestorLocked(e)}hasLockedDescendant(e){return this.hierarchy.hasLockedDescendant(e)}getOutermostSelectableShapeId(e){return this.hierarchy.getOutermostSelectableShapeId(e)}getShapeIdsIncludingDescendants(e){return this.hierarchy.getShapeIdsIncludingDescendants(e)}getShapeIdsForSelectionTransform(e){return this.hierarchy.getShapeIdsForSelectionTransform(e)}getShapeIdsForSelectionRotation(e){return this.hierarchy.getShapeIdsForSelectionRotation(e)}getSelectionTransformTargetShapes(){return this.hierarchy.getSelectionTransformTargetShapes()}canResizeSelection(){return this.hierarchy.canResizeSelection()}canFlipSelection(){return this.selectionCanFlipSignal.get()}canRotateSelection(){return this.hierarchy.canRotateSelection()}getSelectionResizeTargetShapes(){return this.hierarchy.getSelectionResizeTargetShapes()}getSelectionRotationTargetShapes(){return this.hierarchy.getSelectionRotationTargetShapes()}getShapeExportTraversalIds(e){return this.hierarchy.getShapeExportTraversalIds(e)}getShapeContainment(e,t){return this.queries.getShapeContainment(e,t)}getContainingShapeParentId(e){return this.queries.getContainingShapeParentId(e)}getContainingShapeParentIdAtPoint(e,t){return this.queries.getContainingShapeParentIdAtPoint(e,t)}getContainingParentIdForShapeRecord(e){return this.queries.getContainingParentIdForShapeRecord(e)}getShapeClipAncestorIds(e){return this.queries.getShapeClipAncestorIds(e)}getShapeClipAncestorIdsSignal(e){return this.queries.getShapeClipAncestorIdsSignal(e)}isPagePointInShapeClip(e,t){return this.queries.isPagePointInShapeClip(e,t)}getShapeClippedPageBounds(e){return this.queries.getShapeClippedPageBounds(e)}getShapeIdsInContainerBounds(e,t={}){return this.hierarchy.getShapeIdsInContainerBounds(e,t)}canUseShapeParent(e,t){return this.hierarchy.canUseShapeParent(e,t)}getShapeUtil(e){return this.shapeUtils.get(e.type)}getBindingUtil(e){return this.bindingUtils.get(e.type)}computeShapePositionedBounds(e){return this.geometry.computeShapePositionedBounds(e)}computeShapeLocalBounds(e){return this.geometry.computeShapeLocalBounds(e)}computeShapeRenderBounds(e){return this.geometry.computeShapeRenderBounds(e)}computeShapeExportBounds(e){return this.geometry.computeShapeExportBounds(e)}computeShapeLocalToPageTransform(e){return this.geometry.computeShapeLocalToPageTransform(e)}computeShapeRenderToPageTransform(e){return this.geometry.computeShapeRenderToPageTransform(e)}computeShapeExportToPageTransform(e){return this.geometry.computeShapeExportToPageTransform(e)}computeShapePageBounds(e){return this.geometry.computeShapePageBounds(e)}computeShapeExportPageBounds(e){return this.geometry.computeShapeExportPageBounds(e)}computeShapeGeometry(e){return this.geometry.computeShapeGeometry(e)}computeShapePositionedToPageTransform(e){return this.geometry.computeShapePositionedToPageTransform(e)}computeShapePageCenter(e){return this.geometry.computeShapePageCenter(e)}computeShapePageCorners(e){return this.geometry.computeShapePageCorners(e)}computeShapePageOutlineVertices(e){return this.geometry.computeShapePageOutlineVertices(e)}getShapePositionedBounds(e){return this.geometry.getShapePositionedBounds(e)}getShapePageBounds(e){return this.geometry.getShapePageBounds(e)}getShapeGeometry(e){return this.geometry.getShapeGeometry(e)}getShapePositionedToPageTransform(e){return this.geometry.getShapePositionedToPageTransform(e)}getShapePageCenter(e){return this.geometry.getShapePageCenter(e)}getShapePageCorners(e){return this.geometry.getShapePageCorners(e)}getShapePageOutlineVertices(e){return this.geometry.getShapePageOutlineVertices(e)}getSelectionPageBounds(){return this.geometry.getSelectionPageBounds()}getSelectionFrame(){return this.geometry.getSelectionFrame()}isPointInSelectionBounds(e){return this.geometry.isPointInSelectionBounds(e)}getSelectionFrameLocalBoundsPoint(e){return this.geometry.getSelectionFrameLocalBoundsPoint(e)}getSelectionPageOutlineVertices(){return this.geometry.getSelectionPageOutlineVertices()}getSelectionAnchorPagePoint(){return this.geometry.getSelectionAnchorPagePoint()}hitTestSelectionHandle(e){const t=this.selectedShapesSignal.get(),n=this.getSelectionFrame();if(0===t.length)return null;const i=1===t.length,o=this.canResizeSelection(),r=this.canRotateSelection(),{terminalHandles:s,middleHandles:a,customHandles:l,rotateHandles:d,resizeHandles:c}=((e,t,n,i,o,r,s)=>Ji(Qi(e,t,n,i,o,r,s),n))(t,n,this.getCurrentCamera().z,e=>this.getShapeUtil(e).getSelectionHandleAnchors(e,{isOnlySelected:i,editor:this}),e=>o&&this.getShapeUtil(e).canUseSelectionResizeHandles(e,{editor:this}),e=>r&&this.getShapeUtil(e).canUseSelectionRotateHandle(e,{editor:this}),Ti(this,this.getSelectionResizeTargetShapes(),n?.rotation??0));for(const u of a)if(u.bounds.expand(6/this.getCurrentCamera().z).containsPoint(e))return u;for(const u of s)if(u.bounds.expand(6/this.getCurrentCamera().z).containsPoint(e))return u;for(const u of l)if(u.bounds.expand(6/this.getCurrentCamera().z).containsPoint(e))return u;for(const u of c)if(u.bounds.containsPoint(e))return u;if(n){const t=((e,t,n,i)=>{const o=new Set(n.map(e=>e.id)),r=fi(e,t),{bounds:s}=t,a=[];r.x>=s.minX&&r.x<=s.maxX&&(o.has("top")&&a.push({id:"top",distance:Math.abs(r.y-s.minY)}),o.has("bottom")&&a.push({id:"bottom",distance:Math.abs(r.y-s.maxY)})),r.y>=s.minY&&r.y<=s.maxY&&(o.has("right")&&a.push({id:"right",distance:Math.abs(r.x-s.maxX)}),o.has("left")&&a.push({id:"left",distance:Math.abs(r.x-s.minX)}));const l=a.filter(e=>e.distance<=i).sort((e,t)=>e.distance-t.distance)[0];return l?{kind:"resize",id:l.id,point:e.clone(),bounds:new aI(e.x-i,e.y-i,2*i,2*i)}:null})(e,n,c,6/this.getCurrentCamera().z);if(t)return t}for(const u of d)if(u.bounds.expand(6/this.getCurrentCamera().z).containsPoint(e))return u;return null}setBrushBox(e){this.transients.setBrushBox(e)}setBindingPreview(e){this.transients.setBindingPreview(e)}setTerminalBindingGuides(e){this.transients.setTerminalBindingGuides(e)}setDropTargetShapeId(e){this.transients.setDropTargetShapeId(e)}setHoveredShapeId(e){this.transients.setHoveredShapeId(e)}setSelectionTranslationActive(e){this.transients.setSelectionTranslationActive(e)}setSnapIndicators(e){this.transients.setSnapIndicators(e)}setTerminalBindingResolver(e){this.transients.setTerminalBindingResolver(e)}resolveTerminalBinding(e){return this.transients.resolveTerminalBinding(e)}clearSelectionTransients(){this.transients.clearSelectionTransients()}hitTestShape(e){return this.hitTestShapesAtPoint(e)[0]??null}hitTestShapesAtPoint(e,t){return this.spatialIndex.getShapesAtPoint(e,{...t,filter:n=>!this.isShapeHidden(n.id)&&this.isPagePointInShapeClip(n.id,e)&&(t?.filter?.(n)??!0)})}hitTestShapesByLineSegment(e,t,n){return this.spatialIndex.getShapesHitByLineSegment(e,t,{...n,filter:e=>!this.isShapeHidden(e.id)&&(n?.filter?.(e)??!0)})}getShapeIdsInBounds(e,t){return this.spatialIndex.getShapeIdsInBounds(e,t).filter(e=>!this.isShapeHidden(e))}getShapesInBounds(e,t){return this.spatialIndex.getShapesInBounds(e,t).filter(e=>!this.isShapeHidden(e.id))}getShapesInViewport(e,t){return this.spatialIndex.getShapesInViewport(e,t).filter(e=>!this.isShapeHidden(e.id))}getDocumentSnapshot(){return this.snapshots.getDocumentSnapshot()}getSessionSnapshot(){return this.snapshots.getSessionSnapshot()}getSvgString(e=this.getSelectedShapeIds(),t){return function(e,t,n,i={}){const o=Array.from(t),r=e.getShapeExportTraversalIds(o),s=new Set(r),a=[],l=[];for(const w of r){const t=e.getShape(w);t?l.push(t):a.push({id:w,reason:"missing-shape"})}if(0===l.length)return null;const d=[];for(const w of l){if(!e.getShapeUtil(w).contributesToExportBounds(w))continue;const t=N(e,w,s);t&&(q(t)?d.push(t):a.push({id:w.id,reason:"missing-bounds"}))}if(0===d.length)return null;const c=(e=>{let t=1/0,n=1/0,i=-1/0,o=-1/0;for(const r of e)t=Math.min(t,r.minX),n=Math.min(n,r.minY),i=Math.max(i,r.maxX),o=Math.max(o,r.maxY);return new aI(t,n,i-t,o-n)})(d).expand(i.padding??16),u=[],h={editor:e,bounds:c,addDef(e){const t=`land-svg-def-${u.length+1}`;return u.push({...e,attrs:{...e.attrs,id:t}}),t},resolveAssetUrl:t=>e.resolveAssetUrl(t),resolveColor:e=>U(e,i.resolveThemeColor)},p=[],g=[],f=new Map,m=[],S=(t,n)=>{const i=e.computeShapeExportToPageTransform(t),o=((e,t)=>{let n=t.opacity,i=t.parentId;const o=new Set([t.id]);for(;i.startsWith("shape:");){const t=i;if(o.has(t))break;o.add(t);const r=e.getShape(t);if(!r)break;n*=r.opacity,i=r.parentId}return n})(e,t),r=((e,t,n,i,o)=>{const r=[];for(const s of _(e,t,n)){const t=W(e,s,i,o);t&&r.push(t)}return r})(e,t,s,f,h);let a={tag:"g",attrs:{transform:i.toSvgString(),opacity:1===o?void 0:o},children:[n]};for(let e=r.length-1;e>=0;e-=1)a={tag:"g",attrs:{"clip-path":`url(#${r[e]})`},children:[a]};g.push(a)},y=e=>{const t=n.get(e.type)?.toSvgForeground?.(e,h);t&&S(e,t)};for(const w of l){for(;m.length>0&&!z(e,m[m.length-1].id,w);)y(m.pop());const t=n.get(w.type);if(!t){a.push({id:w.id,reason:"missing-exporter"});continue}const i=t.toSvg(w,h);i?q(e.computeShapeExportBounds(w))?(p.push(w.id),S(w,i),t.toSvgForeground&&m.push(w)):a.push({id:w.id,reason:"missing-bounds"}):a.push({id:w.id,reason:"empty-output"})}for(;m.length>0;)y(m.pop());if(0===p.length)return null;const b=Math.max(1,c.w),x=Math.max(1,c.h),I=[];return u.length>0&&I.push({tag:"defs",children:u}),i.background&&I.push({tag:"rect",attrs:{x:c.x,y:c.y,width:c.w,height:c.h,fill:i.background}}),I.push(...g),{svg:Y({tag:"svg",attrs:{xmlns:"http://www.w3.org/2000/svg",width:b,height:x,viewBox:`${V(c.x)} ${V(c.y)} ${V(b)} ${V(x)}`},children:I}),bounds:c,width:b,height:x,requestedShapeIds:o,exportedShapeIds:p,skippedShapes:a}}(this,e,this.shapeSvgExporters,t)}getExportIntegrityReport(e=this.getSelectedShapeIds()){return Z({editor:this,exporters:this.shapeSvgExporters,shapeIds:e})}repairExportIntegrity(e=this.getSelectedShapeIds()){return(({editor:e,exporters:t,shapeIds:n})=>{const i=Array.from(n),o=Z({editor:e,exporters:t,shapeIds:i});o.repairableIssueCount>0&&e.bindings.repairLoadedBindings("system");const r=Z({editor:e,exporters:t,shapeIds:i});return{before:o,after:r,repaired:o.issues.length!==r.issues.length}})({editor:this,exporters:this.shapeSvgExporters,shapeIds:e})}getShapeCapabilityManifest(){return(({definitions:e,exporters:t,shapeUtils:n})=>{const i=e.map(e=>{const i=n.has(e.type)?"supported":"missing",o=t.has(e.type)?"supported":"missing",r="supported"===i&&"supported"===o?"supported":"missing";return{...e,shapeUtil:i,svgExporter:o,exportSupport:r}});return{entries:i,supportedExportTypes:i.filter(e=>"supported"===e.exportSupport).map(e=>e.type),missingExporterTypes:i.filter(e=>"supported"!==e.svgExporter).map(e=>e.type)}})({definitions:this.shapeCapabilityDefinitions,exporters:this.shapeSvgExporters,shapeUtils:this.shapeUtils})}createPageRecord(e){const t=this.nextPageNumber;return{id:this.createPageId(t),typeName:"page",scope:"document",name:e?.name??`Page ${t}`,index:e?.index??this.createPageIndex(t),meta:e?.meta??{}}}loadDocumentSnapshot(e,t){this.snapshots.loadDocumentSnapshot(e,t)}loadSessionSnapshot(e,t){this.snapshots.loadSessionSnapshot(e,t)}syncAfterDocumentRestore(){this.snapshots.syncAfterDocumentRestore()}cancelInteractionForCommand(){this.cancelInteractionAndClearTransients("command")}cancelInteractionAndClearTransients(e,t={}){!1!==t.notifyInteractionHandlers&&this.interactions.broadcastEvent(this,{type:"cancel",reason:e}),this.tools.cancel(e),this.inputs.resetPointer(),this.clearSelectionTransients()}syncToolStateFromSession(e){const{activeToolId:t,isToolLocked:n}=this.sessionSignal.get();this.tools.hasTool(t)?this.tools.setActiveTool(t,"restore"):(this.tools.setActiveTool("select","restore"),this.updateSession({activeToolId:"select"},e)),this.tools.setToolLocked(n)}createShapeRecord(e){const t=e.parentId??this.sessionSignal.get().currentPageId;if(!this.canUseShapeParent(t))throw new Error("Invalid parent id for shape");const n=this.nextShapeNumber,i=this.createShapeId(n),o=this.shapeUtils.get(e.type).validateProps({...this.getDefaultShapeProps(e.type),...e.props});return{id:i,typeName:"shape",scope:"document",type:e.type,parentId:t,index:e.index??this.createShapeIndex(n),x:e.x,y:e.y,rotation:e.rotation??0,skewX:e.skewX??0,scaleX:e.scaleX??1,scaleY:e.scaleY??1,opacity:e.opacity??1,isHidden:e.isHidden??!1,isLocked:e.isLocked??!1,props:o,meta:e.meta??{}}}createBindingRecord(e){const t=e.id??this.createBindingId(this.nextBindingNumber),n=this.bindingUtils.get(e.type),i=n.validateProps({...n.getDefaultProps(),...e.props});return{id:t,typeName:"binding",scope:"document",type:e.type,fromId:e.fromId,toId:e.toId,props:i,meta:e.meta??{}}}createAssetRecord(e){return{id:e.id??this.createAssetId(this.nextAssetNumber),typeName:"asset",scope:"document",type:e.type,props:e.props??{},meta:e.meta??{}}}updateSession(e,t="system"){const n=this.getSessionRecord();this._internalStore.put([{...n,...e}],t)}setCurrentPage(e,t="system"){if(!this.getPage(e))return;e!==this.getCurrentPageId()&&(this.cancelInteractionAndClearTransients("page_switch"),this.completeEditing(t));const n=this.sessionSignal.get();this.updateSession({currentPageId:e,pageCameraById:{...n.pageCameraById,[e]:n.pageCameraById[e]??{...pI}},pageSelectedShapeIdsById:{...n.pageSelectedShapeIdsById,[e]:n.pageSelectedShapeIdsById[e]??[]}},t)}setSelectedShapeIds(e,t){this.selection.setSelectedShapeIds(e,t)}removeShapeIdsFromSelection(e,t="system"){this.selection.removeShapeIdsFromSelection(e,t)}removeShapeIdsFromEditingSession(e,t="system"){this.editing.removeShapeIds(e,t)}prepareShapeIdsForRemoval(e,t="system"){this.editing.prepareForShapeRemoval(e,t)}ensurePageSessionState(e,t="system"){const n=this.sessionSignal.get(),i=n.pageCameraById[e]??{...pI},o=n.pageSelectedShapeIdsById[e]??[];this.updateSession({pageCameraById:{...n.pageCameraById,[e]:i},pageSelectedShapeIdsById:{...n.pageSelectedShapeIdsById,[e]:o}},t)}removePageSessionState(e,t,n="system"){const i=this.sessionSignal.get(),o={...i.pageCameraById},r={...i.pageSelectedShapeIdsById};delete o[e],delete r[e],this.updateSession({currentPageId:t,pageCameraById:o,pageSelectedShapeIdsById:r},n)}setCamera(e,t){this.camera.setCamera(e,t)}panCamera(e,t="system"){this.camera.panCamera(e,t)}zoomCameraAtScreenPoint(e,t,n="system"){this.camera.zoomCameraAtScreenPoint(e,t,n)}zoomCameraToScreenPoint(e,t,n="system"){this.camera.zoomCameraToScreenPoint(e,t,n)}zoomAtViewportCenter(e,t="system"){this.camera.zoomAtViewportCenter(e,t)}resetZoom(e="user"){this.camera.resetZoom(e)}setViewportScreenSize(e){this.camera.setViewportScreenSize(e)}getCurrentPageBounds(e=this.getCurrentPageId()){return this.selectionLayout.getCurrentPageBounds(e)}zoomToBounds(e,t){return this.selectionLayout.zoomToBounds(e,t)}zoomToFit(e){return this.selectionLayout.zoomToFit(e)}zoomToSelection(e){return this.selectionLayout.zoomToSelection(e)}createShapeId(e){const t=`shape:${e}`;return this.nextShapeNumber+=1,t}createShapeIndex(e){return String(e).padStart(6,"0")}createBindingId(e){const t=`binding:${e}`;return this.nextBindingNumber+=1,t}createAssetId(e){const t=`asset:${e}`;return this.nextAssetNumber+=1,t}syncShapeCounter(){let e=0;for(const t of this._internalStore.getAll()){if(!f(t))continue;const n=Number(t.id.split(":")[1]??0);Number.isFinite(n)&&(e=Math.max(e,n))}this.nextShapeNumber=e+1}syncPageCounter(){let e=0;for(const t of this._internalStore.getAll()){if(!p(t))continue;const n=t.id.split(":")[1]??"",i=Number("default"===n?1:n);Number.isFinite(i)&&(e=Math.max(e,i))}this.nextPageNumber=e+1}syncBindingCounter(){let e=0;for(const t of this._internalStore.getAll()){if(!S(t))continue;const n=Number(t.id.split(":")[1]??0);Number.isFinite(n)&&(e=Math.max(e,n))}this.nextBindingNumber=e+1}syncAssetCounter(){let e=0;for(const t of this._internalStore.getAll()){if(!y(t))continue;const n=Number(t.id.split(":")[1]??0);Number.isFinite(n)&&(e=Math.max(e,n))}this.nextAssetNumber=e+1}dispose(){this.runtime.dispose()}createPageId(e){const t=`page:${e}`;return this.nextPageNumber+=1,t}createPageIndex(e){return String(e).padStart(4,"0")}handleWheelEvent(e){if(e.ctrlKey){const t=this.getCurrentCamera(),n=e.delta.y,i=(Math.abs(n)>10?10*Math.sign(n):n)/100;return void this.zoomCameraToScreenPoint(e.screenPoint,t.z-1*i*t.z)}this.panCamera(e.delta)}},dw=[{id:"top",normalizedAnchor:{x:.5,y:0},outwardNormal:{x:0,y:-1}},{id:"right",normalizedAnchor:{x:1,y:.5},outwardNormal:{x:1,y:0}},{id:"bottom",normalizedAnchor:{x:.5,y:1},outwardNormal:{x:0,y:1}},{id:"left",normalizedAnchor:{x:0,y:.5},outwardNormal:{x:-1,y:0}}],cw=class{getPositionedBounds(e){const t=this.getLocalBounds(e);return new aI(t.x+e.x,t.y+e.y,t.w,t.h)}getRenderBounds(e){return this.getLocalBounds(e)}getPointHitTestBounds(e,t){return this.getPositionedBounds(e)}getExportBounds(e){return this.getRenderBounds(e)}getChildClipLocalBounds(e){return null}getChildClipLocalPolygons(e){const t=this.getChildClipLocalBounds(e);return t?[ko(t)]:null}getChildExportClipLocalBounds(e){return this.getChildClipLocalBounds(e)}getChildExportClipLocalPolygons(e){const t=this.getChildExportClipLocalBounds(e);return t?[ko(t)]:null}getSelectionResizeLocalBounds(e){return this.getLocalBounds(e)}resizeSelectionBounds(e,t){const n=this.getSelectionResizeLocalBounds(e);if(0!==n.x||0!==n.y)throw new Error(`Shape util "${this.type}" must implement resizeSelectionBounds for non-origin local bounds`);const i=t.scaleX<0!=t.scaleY<0?2*t.selectionRotation-e.rotation:e.rotation,o=this.validateProps({...e.props,w:t.selectionLocalBounds.w,h:t.selectionLocalBounds.h}),r=To(o,"w",t.selectionLocalBounds.w),s=To(o,"h",t.selectionLocalBounds.h),a=mi(Tn({requestedBounds:t.selectionLocalBounds,handleId:t.handleId,actualWidth:r,actualHeight:s,scaleX:t.scaleX,scaleY:t.scaleY,isResizingFromCenter:t.isResizingFromCenter}).center,{rotation:t.selectionRotation,rotationCenter:t.selectionRotationCenter});return{id:e.id,x:a.x-r/2,y:a.y-s/2,rotation:i,scaleX:t.scaleX<0?-e.scaleX:e.scaleX,scaleY:t.scaleY<0?-e.scaleY:e.scaleY,props:o}}getAllowedSelectionResizeModes(e,t){return HI}getSelectionResizeHandleIds(e,t){return WI}flipSelectionBounds(e,t){const n=this.getSelectionPagePoints(e);if(n){const i=n.map(e=>{const n=0===t.selectionRotation?e.clone():sI.RotWith(e,t.selectionRotationCenter,-t.selectionRotation),i=xi({axis:t.axis,bounds:t.selectionBounds,point:n});return 0===t.selectionRotation?i:sI.RotWith(i,t.selectionRotationCenter,t.selectionRotation)}),o=this.getSelectionPageMiddlePoint(e),r=o?(()=>{const e=0===t.selectionRotation?o.clone():sI.RotWith(o,t.selectionRotationCenter,-t.selectionRotation),n=xi({axis:t.axis,bounds:t.selectionBounds,point:e});return 0===t.selectionRotation?n:sI.RotWith(n,t.selectionRotationCenter,t.selectionRotation)})():void 0;return this.updateSelectionPagePoints(e,{pagePoints:[i[0],i[1]],pageMiddlePoint:r})}const i=this.getSelectionResizeLocalBounds(e),o=0===t.selectionRotation?t.selectionLocalBounds.center:sI.RotWith(t.selectionLocalBounds.center,t.selectionRotationCenter,t.selectionRotation);return{id:e.id,x:o.x-i.center.x,y:o.y-i.center.y,rotation:2*t.selectionRotation-e.rotation,scaleX:"horizontal"===t.axis?-e.scaleX:e.scaleX,scaleY:"vertical"===t.axis?-e.scaleY:e.scaleY}}updateSelectionPagePoints(e,t){throw new Error(`Shape util "${this.type}" must implement updateSelectionPagePoints before selection can transform point-defined geometry`)}getSelectionPagePoints(e){return null}getSelectionPageMiddlePoint(e){return null}contributesToSelectionFrame(e,t){return!0}canParticipateInSelectionResize(e,t){return!0}canParticipateInSelectionFlip(e,t){return this.canParticipateInSelectionResize(e,t)}canParticipateInSelectionRotation(e,t){return!0}canUseSelectionResizeHandles(e,t){return this.canParticipateInSelectionResize(e,t)}canUseSelectionRotateHandle(e,t){return this.canParticipateInSelectionRotation(e,t)}canParticipateInSelectionTranslation(e,t){return!0}getSelectionTargetId(e,t){return e.id}getHoverTargetId(e,t){return e.id}getHoverDecorationTargetId(e,t){return e.id}getTranslateTargetId(e,t){return e.id}isSelectionTransformContainer(e){return!1}shouldRotateDescendants(e){return this.isSelectionTransformContainer(e)}shouldResizeDescendants(e){return!1}getResizeToFitDescendantsProps(e,t){return null}getMinimumChildCount(e){return 0}contributesToExportBounds(e){return!0}canUngroupChildren(e){return!1}getGroupingShapeCreateInput(e){return null}canStartTranslateFromSelectionBounds(e,t){return!0}canSnap(e,t){return!0}canSnapChildrenToSelf(e){return!1}getBoundsSnapGeometry(e){return{}}getHandleSnapGeometry(e){return{outline:ko(this.getLocalBounds(e))}}getPositionedOutlineVertices(e){const t=this.getPositionedBounds(e);return[new sI(t.minX,t.minY),new sI(t.maxX,t.minY),new sI(t.maxX,t.maxY),new sI(t.minX,t.maxY)]}getSelectionFramePositionedOutlineVertices(e,t){return null}getSelectionHandleAnchors(e,t){return{terminalHandleAnchors:[],middleHandleAnchors:[]}}getSelectionOverlayInfo(e,t){return{usesSelectionPathOverlay:!1,startPagePoint:null,endPagePoint:null,middlePagePoint:null,path:null,pathStyle:null,bindingSegments:[]}}getLabelPathGeometry(e,t){return null}isWrappedByBrush(e,t){return 0===t.pageOutlineVertices.length?!!t.pageBounds&&t.brushBounds.containsBox(t.pageBounds):t.pageOutlineVertices.every(e=>t.brushBounds.containsPoint(e))}canSelectByBrush(e,t){return!t.isWrapping||this.isWrappedByBrush(e,t)}getLocalToPageTransform(e){const t=this.getLocalBounds(e).center;return lI.Translate(e.x+t.x,e.y+t.y).compose(lI.Rotate(e.rotation)).compose(lI.SkewX(e.skewX)).compose(lI.Scale(e.scaleX,e.scaleY)).compose(lI.Translate(-t.x,-t.y))}canEdit(e){return!1}canReceiveChildren(e){return!1}canReceiveChild(e,t){return this.canReceiveChildren(e)}isChildVisible(e,t,n){return!0}getChildPlacementMeta(e,t,n){return t.meta}canAutomaticallyReceiveChildren(e){return this.canReceiveChildren(e)}canBeDirectlyBrushSelected(e){return!0}canReceiveTerminalBinding(e,t){return!1}getTerminalBindingPorts(e,t){return this.canReceiveTerminalBinding(e,t)?dw:[]}getTerminalBindingOutlines(e,t){return this.canReceiveTerminalBinding(e,t)?[{points:this.getPositionedOutlineVertices(e),closed:!0}]:[]}canCopyToClipboard(e,t){return!0}repairLoadedShape(e){return null}onEditEnd(e,t){}hitTest(e,t,n){return this.getPositionedBounds(e).containsPoint(t)}hitTestBindingTarget(e,t,n){return this.hitTest(e,t,n)}hitTestLineSegment(e,t){return((e,t,n)=>{if(n.containsPoint(e)||n.containsPoint(t))return!0;const i=ko(n);for(let o=0;o<i.length;o+=1){const n=i[o],r=i[(o+1)%i.length];if(n&&r&&null!==Co(e,t,n,r))return!0}return!1})(t.positionedStart,t.positionedEnd,this.getPositionedBounds(e).expand(t.positionedMargin))}resolveBindingPoint(e,t){this.getPositionedBounds(e);const n=t.editor.computeShapePositionedToPageTransform(e),i=n.tryInvert();if(!i)return t.rawPagePoint;const o=((e,t,n)=>{if(n.length<2)return null;let i=Number.POSITIVE_INFINITY;const o=t.sub(e);for(let r=0;r<n.length;r+=1){const o=n[r],s=n[(r+1)%n.length]??n[0];if(!o||!s)continue;const a=Co(e,t,o,s);null===a||a<=1e-6||a>=i||(i=a)}return Number.isFinite(i)?e.add(o.mul(i)):null})(i.applyToPoint(t.rawPagePoint),i.applyToPoint(t.oppositePagePoint),this.getPositionedOutlineVertices(e));return o?n.applyToPoint(o):t.rawPagePoint}},uw=class{editor;id;parent;children=new Map;currentChild=null;initial=null;constructor(e,t,n){this.editor=e,this.id=t,this.parent=n}addChild(e){this.children.set(e.id,e)}enter(e){if(this.onEnter(e),!this.initial)return;const t=this.children.get(this.initial);if(!t)throw new Error(`Missing child state "${this.initial}" on "${this.id}"`);this.currentChild=t,t.enter(e)}exit(e){this.currentChild&&(this.currentChild.exit(e),this.currentChild=null),this.onExit(e)}transition(e,t){if(!this.parent){const n=this.children.get(e);if(!n)throw new Error(`Missing root child state "${e}" on tool "${this.id}"`);if(this.currentChild===n)return;return this.currentChild?.exit(t),this.currentChild=n,void n.enter(t)}this.parent.transition(e,t)}isInInitialState(){return!this.currentChild||!!this.initial&&this.currentChild.id===this.initial&&this.currentChild.isInInitialState()}dispatch(e){if(this.currentChild)this.currentChild.dispatch(e);else switch(e.type){case"pointer":return void this.handlePointerEvent(e);case"click":return void this.handleClickEvent(e);case"keyboard":return void this.handleKeyboardEvent(e);case"wheel":return void this.onWheel(e);case"tick":return void this.onTick(e);case"cancel":return void this.onCancel(e)}}onEnter(e){}onExit(e){}onPointerDown(e){}onPointerMove(e){}onPointerUp(e){}onDoubleClick(e){}onCancel(e){}onKeyDown(e){}onKeyUp(e){}onWheel(e){}onTick(e){}handlePointerEvent(e){switch(e.name){case"pointer_down":return void this.onPointerDown(e);case"pointer_move":return void this.onPointerMove(e);case"pointer_up":return void this.onPointerUp(e);case"pointer_cancel":return void this.onCancel({type:"cancel",reason:"pointer_cancel"})}}handleClickEvent(e){"double_click"!==e.name||this.onDoubleClick(e)}handleKeyboardEvent(e){"key_down"!==e.name?this.onKeyUp(e):this.onKeyDown(e)}},hw=class extends uw{constructor(e){super(e,"hand"),this.initial="idle",this.addChild(new pw(e,this)),this.addChild(new gw(e,this))}},pw=class extends uw{constructor(e,t){super(e,"idle",t)}onPointerDown(e){0===e.button&&this.transition("panning",bo(this.editor,e.screenPoint))}},gw=class extends uw{info=null;constructor(e,t){super(e,"panning",t)}onEnter(e){this.info=e}onPointerMove(e){this.info&&xo(this.editor,this.info,e.screenPoint)}onPointerUp(){this.transition("idle")}onCancel(){this.transition("idle")}onExit(){this.info=null}},fw=Math.PI/180*15,mw=Math.PI/2,Sw=Math.PI/180*5,yw=class extends uw{info=null;onEnter(e){this.info=e,this.onInfoEnter()}onExit(){this.onInfoExit(),this.info=null}onInfoEnter(){}onInfoExit(){}},bw=class extends yw{onPointerMove(e){this.info&&this.info.originPagePoint.dist2(e.pagePoint)>=9&&this.onDragThresholdExceeded(e)}},xw=class extends yw{operation=null;onInfoEnter(){if(this.info){const e=this.getOperationKind(this.info);this.operation=this.editor.operations.begin({kind:e,label:e,source:"user",history:"record"})}this.onDragStart()}onDragStart(){}onPointerMove(e){this.apply(e)}onTick(e){if(!this.info)return;const t=Ao(this.editor,e,this.tickMode);t&&this.apply(t)}onKeyDown(){this.applyFromInputs()}onKeyUp(){this.applyFromInputs()}applyFromInputs(){Bo(this.editor,e=>this.apply(e))}commitOperation(){const e=this.operation;this.operation=null,e?.commit()}cancelOperation(){const e=this.operation;this.operation=null,e?.cancel()}},Iw=class extends yw{constructor(e,t){super(e,"brushing",t)}onInfoEnter(){if(!this.info)return;const e=this.editor.inputs.state.get();this.updateBrush(this.info.originPagePoint,this.info.additiveSelection,Fo(e))}onPointerMove(e){this.info&&this.updateBrush(e.pagePoint,$o(e),Fo(e))}onTick(e){if(!this.info)return;const t=Ao(this.editor,e,"apply_after_scroll_or_without_screen_point");t&&this.updateBrush(t.pagePoint,$o(t),Fo(t))}onKeyDown(){this.updateBrushFromInputs()}onKeyUp(){this.updateBrushFromInputs()}onPointerUp(e){this.info&&this.updateBrush(e.pagePoint,$o(e),Fo(e)),this.complete()}onCancel(){this.info&&this.editor.commands.setSelectedShapeIds(this.info.previousSelection,{source:"system"}),this.cancel()}updateBrush(e,t,n){if(!this.info)return;const i=((e,t)=>{const n=Math.min(e.x,t.x),i=Math.min(e.y,t.y),o=Math.max(e.x,t.x),r=Math.max(e.y,t.y);return new aI(n,i,o-n,r-i)})(this.info.originPagePoint,e),o=((e,t)=>{const n=[],i=new Set;for(const o of t){const t=e.getOutermostSelectableShapeId(o);i.has(t)||(i.add(t),n.push(t))}return n})(this.editor,this.editor.getShapeIdsInBounds(i).filter(e=>((e,t,n,i)=>{const o=e.getShape(n);return!(!o||!((e,t)=>{const n=e.getShape(t);return!!n&&e.getShapeUtil(n).canBeDirectlyBrushSelected(n)})(e,o.id))&&e.getShapeUtil(o).canSelectByBrush(o,{editor:e,brushBounds:t,isWrapping:i,pageOutlineVertices:e.getShapePageOutlineVertices(o.id),pageBounds:e.getShapePageBounds(o.id)})})(this.editor,i,e,n))),r=t?((e,t)=>{const n=new Set(e);for(const i of t)n.has(i)?n.delete(i):n.add(i);return Array.from(n)})(this.info.previousSelection,o):o;this.editor.setBrushBox(i),this.editor.commands.setSelectedShapeIds(r,{source:"system"})}updateBrushFromInputs(){Bo(this.editor,e=>this.updateBrush(e.pagePoint,$o(e),Fo(e)))}complete(){this.transition("idle")}cancel(){this.transition("idle")}},ww=class extends xw{tickMode="apply_after_scroll";constructor(e,t){super(e,"dragging_plugin_interaction",t)}getOperationKind(e){return e.session.historyMark}onDragStart(){this.info?.session.onDragStart?.({editor:this.editor})}onPointerUp(e){this.apply(e),this.complete()}onCancel(e){const t=this.info?.previousSelection;n(()=>{var e,n;t&&(e=t,n=this.editor.getSelectedShapeIds(),e.length!==n.length||!e.every((e,t)=>e===n[t]))&&this.editor.commands.setSelectedShapeIds(t,{source:"system"}),this.info&&(this.editor.clearSelectionTransients(),this.cancelOperation())}),this.info?.session.onCancel?.({editor:this.editor,reason:e.reason}),this.transition("idle")}onInfoExit(){this.info?.session.shouldClearBindingPreviewOnExit&&this.editor.setBindingPreview(null),this.editor.setSnapIndicators(null)}apply({pagePoint:e,shiftKey:t,altKey:n,accelKey:i}){if(!this.info)return;if(e.x===this.info.lastPagePointX&&e.y===this.info.lastPagePointY&&t===this.info.lastShiftKey&&n===this.info.lastAltKey&&i===this.info.lastAccelKey)return;this.info.lastPagePointX=e.x,this.info.lastPagePointY=e.y,this.info.lastShiftKey=t,this.info.lastAltKey=n,this.info.lastAccelKey=i;const o=this.info.snapMode,r=this.info.snapSnapshot,s=!i&&"none"!==o&&null!==r,a=s&&r?this.editor.snaps.snapHandle({mode:o,pagePoint:e,snapshot:r,threshold:8/this.editor.getCurrentCamera().z}):null;s||this.editor.snaps.clearIndicators();const l=a?.snappedPagePoint??e,d=this.info.session.update({editor:this.editor,pagePoint:l,accelKey:i,source:"user"}),c="string"==typeof d?d:d.status,u="string"==typeof d?l:d.finalPagePoint;!a||!u||u.dist2(a.snappedPagePoint)<=1e-6||this.editor.snaps.clearIndicators(),"stop"===c&&this.complete()}complete(){const e=this.info;e&&(this.editor.setSnapIndicators(null),e.session.onComplete?.({editor:this.editor}),this.commitOperation(),this.transition("idle"))}},vw=class extends uw{constructor(e,t){super(e,"idle",t)}onEnter(){this.editor.clearSelectionTransients()}onPointerDown(e){const t=this.editor.getSelectedShapeIds(),n=this.editor.hitTestSelectionHandle(e.pagePoint);if("rotate"===n?.kind)return void this.transition("pointing_rotate_handle",{originPagePoint:e.pagePoint.clone(),previousSelection:t});if("resize"===n?.kind)return void this.transition("pointing_resize_handle",{handleId:n.id,originPagePoint:e.pagePoint.clone(),cursorHandleOffset:e.pagePoint.sub(n.point),previousSelection:t});let i=null;if(n){const o=this.editor.getSelectedShapes()[0]??null;if(o){const r=this.editor.selectionHandleInteractions.createSession(this.editor,{handle:n,shape:o,originPagePoint:e.pagePoint.clone()});if(r){const o=r.handleSnapMode??"none";i={originPagePoint:e.pagePoint.clone(),previousSelection:t,session:r,snapSnapshot:"none"===o?null:this.editor.snaps.createHandleSnapshot({context:r.handleSnapContext??{shapeId:r.shapeId,handle:n},currentPagePoint:e.pagePoint,allowSelfSnap:r.allowSelfSnap??!1,excludedShapeIds:r.excludedSnapShapeIds})}}}}const o=this.editor.hitTestShape(e.pagePoint);let r=null;if(o){const n=this.editor.getShapeUtil(o).getSelectionTargetId(o,{editor:this.editor}),i=this.editor.getShapeUtil(o).getTranslateTargetId(o,{editor:this.editor}),s=$o(e),a=Ro(this.editor,n,t),l=s?null:((e,t,n)=>{const i=new Set(n);for(const o of Lo(e,t))if(i.has(o.ancestorId))return o.ancestorId;return null})(this.editor,n,t),d=s?null:l?a:null,c=Ro(this.editor,i,t),u=null===d?c:l??c,h=this.editor.interactions.createShapePointerSession(this.editor,{shape:o,selectionTargetId:a,originPagePoint:e.pagePoint.clone(),event:e});r={shapeId:a,translateTargetId:u,originPagePoint:e.pagePoint.clone(),originTimestamp:e.timestamp,previousSelection:t,additiveSelection:s,wasSelected:t.includes(a),fromSelectionBounds:!1,quickClickSelectionTargetId:d,dragSession:h}}if(!i||"binding_middle"!==n?.kind&&"custom"!==n?.kind)if(r?.dragSession)this.transition("pointing_shape",r);else if(i)this.transition("pointing_selection_handle_interaction",i);else if(r)this.transition("pointing_shape",r);else{if(!$o(e)&&t.length>0){const n=this.editor.getSelectedShapes()[0];if(n&&this.editor.getShapeUtil(n).canStartTranslateFromSelectionBounds(n,{editor:this.editor})&&this.editor.isPointInSelectionBounds(e.pagePoint))return void this.transition("pointing_shape",{shapeId:n.id,translateTargetId:n.id,originPagePoint:e.pagePoint.clone(),originTimestamp:e.timestamp,previousSelection:t,additiveSelection:!1,wasSelected:!0,fromSelectionBounds:!0,quickClickSelectionTargetId:null,dragSession:null})}this.transition("pointing_canvas",{originPagePoint:e.pagePoint.clone(),previousSelection:t,additiveSelection:$o(e)})}else this.transition("pointing_selection_handle_interaction",i)}},Pw=class extends bw{constructor(e,t){super(e,"pointing_canvas",t)}onDragThresholdExceeded(e){this.info&&this.transition("brushing",{...this.info,additiveSelection:$o(e)})}onPointerUp(e){$o(e)||this.editor.commands.setSelectedShapeIds([],{source:"system"}),this.transition("idle")}onCancel(){this.info&&this.editor.commands.setSelectedShapeIds(this.info.previousSelection,{source:"system"}),this.transition("idle")}},kw=class extends bw{constructor(e,t){super(e,"pointing_resize_handle",t)}onDragThresholdExceeded(){if(!this.info)return;const e=this.editor.getSelectionFrame();if(!e)return void this.transition("idle");if(!this.editor.canResizeSelection())return void this.transition("idle");const t=this.editor.getSelectionResizeTargetShapes(),n=new Map(t.flatMap(e=>{const t=Gt(this.editor,e);return t?[[e.id,t]]:[]})),i=t.filter(e=>n.has(e.id));if(0===i.length)return void this.transition("idle");const o=((e,t,n,i)=>0===t.length?[]:Ci(e,t,n,ki(e,t,i)))(this.editor,i,this.info.handleId,e.rotation);if(0===o.length)return void this.transition("idle");const r=(({shapes:e,selectionFrame:t,getShapeSelectionResizePageOutlineVertices:n,getShapeSelectionPagePoints:i,getShapeSelectionPageMiddlePoint:o,getShapePageRecord:r})=>{const s={rotation:t.rotation,rotationCenter:t.rotationCenter},a=[],l=[];for(const d of e){const e=r(d),t=i(e);t?l.push({shape:d,pageShape:e,startLocalPagePoint:fi(t[0],s),endLocalPagePoint:fi(t[1],s),middleLocalPagePoint:(()=>{const t=o(e);return t?fi(t,s):null})()}):a.push({shape:d,pageShape:e,localBounds:aI.FromPoints(n(d).map(e=>fi(e,s))),rotation:e.rotation})}return{startBounds:t.bounds.clone(),rotation:t.rotation,rotationCenter:t.rotationCenter.clone(),aspectRatio:0===t.bounds.h?1:t.bounds.w/t.bounds.h,shapes:a,pointShapes:l}})({shapes:i,selectionFrame:e,getShapeSelectionResizePageOutlineVertices:e=>function(e,t){const n=e.getShapeUtil(t).getSelectionResizeLocalBounds(t),i=e.computeShapeLocalToPageTransform(t);return(e=>[new sI(e.minX,e.minY),new sI(e.maxX,e.minY),new sI(e.maxX,e.maxY),new sI(e.minX,e.maxY)])(n).map(e=>i.applyToPoint(e))}(this.editor,e),getShapeSelectionPagePoints:e=>this.editor.getShapeUtil(e).getSelectionPagePoints(e),getShapeSelectionPageMiddlePoint:e=>this.editor.getShapeUtil(e).getSelectionPageMiddlePoint(e),getShapePageRecord:e=>n.get(e.id)});var s,a;this.transition("resizing",{...this.info,startBounds:r.startBounds,rotation:r.rotation,rotationCenter:r.rotationCenter,aspectRatio:r.aspectRatio,snapSnapshot:this.editor.snaps.createResizeSnapshot({resizingShapeIds:this.editor.getShapeIdsForSelectionTransform(this.editor.getSelectedShapeIds()),coordinateSpace:{rotation:r.rotation,rotationCenter:r.rotationCenter}}),shapes:r.shapes,pointShapes:r.pointShapes,updates:(s=r.shapes,a=r.pointShapes,[...s.map(e=>({id:e.shape.id,x:e.shape.x,y:e.shape.y,rotation:e.shape.rotation,skewX:e.shape.skewX,scaleX:e.shape.scaleX,scaleY:e.shape.scaleY})),...a.map(e=>({id:e.shape.id,x:e.shape.x,y:e.shape.y,rotation:e.shape.rotation,skewX:e.shape.skewX,scaleX:e.shape.scaleX,scaleY:e.shape.scaleY}))]),allowedResizeModes:o,lastPagePointX:NaN,lastPagePointY:NaN,lastShiftKey:!1,lastAltKey:!1,lastAccelKey:!1})}onPointerUp(){this.transition("idle")}onCancel(){this.transition("idle")}},Cw=class extends bw{constructor(e,t){super(e,"pointing_rotate_handle",t)}onDragThresholdExceeded(){if(!this.info)return;const e=this.editor.getSelectionFrame();if(!e)return void this.transition("idle");if(!this.editor.canRotateSelection())return void this.transition("idle");const t=new Map(this.editor.getSelectionRotationTargetShapes().flatMap(e=>{const t=Gt(this.editor,e);return t?[[e.id,t]]:[]})),n=this.editor.getSelectionRotationTargetShapes().filter(e=>t.has(e.id));if(0===n.length)return void this.transition("idle");const i=(({shapes:e,selectionFrame:t,getShapeLocalBounds:n,getShapeSelectionPagePoints:i,getShapeSelectionPageMiddlePoint:o,getShapePageRecord:r})=>{const s=[],a=[];for(const l of e){const e=r(l),t=i(e);t?a.push({shape:l,pageShape:e,startPagePoint:t[0],endPagePoint:t[1],middlePagePoint:o(e)}):s.push({shape:l,pageShape:e,localBounds:n(l),rotation:e.rotation})}return{center:t.rotationCenter.clone(),initialSelectionRotation:t.rotation,shapes:s,pointShapes:a}})({shapes:n,selectionFrame:e,getShapeLocalBounds:e=>this.editor.computeShapeLocalBounds(e),getShapeSelectionPagePoints:e=>this.editor.getShapeUtil(e).getSelectionPagePoints(e),getShapeSelectionPageMiddlePoint:e=>this.editor.getShapeUtil(e).getSelectionPageMiddlePoint(e),getShapePageRecord:e=>t.get(e.id)});var o,r;this.transition("rotating",{...this.info,center:i.center,startAngle:sI.Angle(i.center,this.info.originPagePoint),initialSelectionRotation:i.initialSelectionRotation,shapes:i.shapes,pointShapes:i.pointShapes,updates:(o=i.shapes,r=i.pointShapes,[...o.map(e=>({id:e.shape.id,x:e.shape.x,y:e.shape.y,rotation:e.shape.rotation,skewX:e.shape.skewX,scaleX:e.shape.scaleX,scaleY:e.shape.scaleY})),...r.map(e=>({id:e.shape.id,x:e.shape.x,y:e.shape.y,rotation:e.shape.rotation,skewX:e.shape.skewX,scaleX:e.shape.scaleX,scaleY:e.shape.scaleY}))]),lastPointerX:NaN,lastPointerY:NaN,lastShiftKey:!1,lastAccelKey:!1})}onPointerUp(){this.transition("idle")}onCancel(){this.transition("idle")}},Tw=class extends bw{constructor(e,t){super(e,"pointing_selection_handle_interaction",t)}onDragThresholdExceeded(){this.info&&this.transition("dragging_plugin_interaction",{...this.info,snapMode:this.info.session.handleSnapMode??"none",lastPagePointX:NaN,lastPagePointY:NaN,lastShiftKey:!1,lastAltKey:!1,lastAccelKey:!1})}onPointerUp(e){if(this.info){const t={editor:this.editor,source:"user"};(e.clickCount??1)>=2&&this.info.session.onDoubleClick?this.info.session.onDoubleClick(t):this.info.session.onClick?.(t)}this.transition("idle")}onCancel(e){this.info?.session.onCancel?.({editor:this.editor,reason:e.reason}),this.transition("idle")}},Mw=class extends bw{constructor(e,t){super(e,"pointing_shape",t)}onInfoEnter(){this.info&&(this.info.quickClickSelectionTargetId||(this.info.additiveSelection?this.info.wasSelected||this.editor.commands.setSelectedShapeIds([...this.info.previousSelection,this.info.shapeId],{source:"system"}):this.info.wasSelected||this.editor.commands.setSelectedShapeIds([this.info.shapeId],{source:"system"})))}onDragThresholdExceeded(e){if(!this.info)return;if(this.info.dragSession)return void this.transition("dragging_plugin_interaction",{originPagePoint:this.info.originPagePoint,previousSelection:this.info.previousSelection,session:this.info.dragSession,snapMode:"none",snapSnapshot:null,lastPagePointX:NaN,lastPagePointY:NaN,lastShiftKey:!1,lastAltKey:!1,lastAccelKey:!1});const t=this.editor.getSelectedShapes(),n=this.info.wasSelected?t.map(e=>e.id):[this.info.translateTargetId];this.info.wasSelected||1!==n.length||n[0]===this.info.shapeId||this.editor.commands.setSelectedShapeIds(n,{source:"system"});const i=this.editor.getSelectionFrame(),o=((e,t)=>t.filter(t=>{const n=e.getShape(t);return!!n&&e.getShapeUtil(n).canParticipateInSelectionTranslation(n,{editor:e})&&!e.isShapeOrAncestorLocked(n.id)&&!e.hasLockedDescendant(n.id)}).map(t=>e.getShape(t)).filter(e=>!!e).flatMap(t=>(t.parentId.startsWith("shape:")?e.computeShapeLocalToPageTransform(e.getShape(t.parentId)):lI.Identity()).tryInvert()?[{id:t.id,x:t.x,y:t.y,startLocalToPage:e.computeShapeLocalToPageTransform(t)}]:[]))(this.editor,n);if(0===o.length)return void this.transition("brushing",{originPagePoint:this.info.originPagePoint,previousSelection:this.info.previousSelection,additiveSelection:$o(e)});const r=o.map(e=>e.id),s=i?.hasCompatibleRotation?i.rotation:0,a=i?.rotationCenter.clone()??sI.Zero(),l=i?.hasCompatibleRotation?i.bounds.clone():this.editor.getSelectionPageBounds();var d;this.transition("translating",{originPagePoint:this.info.originPagePoint,previousSelection:this.info.previousSelection,movingShapeIds:r,startBounds:l,snapSnapshot:this.editor.snaps.createTranslateSnapshot({movingShapeIds:r,coordinateSpace:{rotation:s,rotationCenter:a}}),snapRotation:s,selectedShapes:o,updates:(d=o,d.map(e=>({id:e.id,x:e.x,y:e.y}))),lockedAxis:null,lastDeltaX:NaN,lastDeltaY:NaN})}onPointerUp(e){if(this.info?.quickClickSelectionTargetId){const t=((e,t)=>t.timestamp-e.originTimestamp<=250)(this.info,e);t&&this.editor.commands.setSelectedShapeIds([this.info.quickClickSelectionTargetId],{source:"system"}),t&&(e.clickCount??1)>=2||this.editor.resetPointerClickTracking()}else $o(e)&&this.info?.wasSelected?this.editor.commands.setSelectedShapeIds(this.info.previousSelection.filter(e=>e!==this.info?.shapeId),{source:"system"}):this.info&&!this.info.additiveSelection&&this.info.wasSelected&&!this.info.fromSelectionBounds&&this.info.previousSelection.length>1&&this.editor.commands.setSelectedShapeIds([this.info.shapeId],{source:"system"});this.transition("idle")}onCancel(){this.info&&this.editor.commands.setSelectedShapeIds(this.info.previousSelection,{source:"system"}),this.transition("idle")}},Ew=class extends xw{tickMode="apply_after_scroll_or_without_screen_point";constructor(e,t){super(e,"resizing",t)}getOperationKind(){return"select.resize"}onDragStart(){this.editor.setSnapIndicators(null)}onPointerUp(){this.complete()}onCancel(){this.info&&this.editor.commands.setSelectedShapeIds(this.info.previousSelection,{source:"system"}),this.cancel()}onInfoExit(){this.editor.setSnapIndicators(null)}apply({pagePoint:e,shiftKey:t,altKey:n,accelKey:i}){if(!this.info)return;if(e.x===this.info.lastPagePointX&&e.y===this.info.lastPagePointY&&t===this.info.lastShiftKey&&n===this.info.lastAltKey&&i===this.info.lastAccelKey)return;this.info.lastPagePointX=e.x,this.info.lastPagePointY=e.y,this.info.lastShiftKey=t,this.info.lastAltKey=n,this.info.lastAccelKey=i;const o=zo(this.info.rotationCenter,this.info.rotation),r=fi(e.sub(this.info.cursorHandleOffset),o),s=((e,t)=>{const n=e.includes("free"),i=e.includes("aspect_ratio_locked");return n||i?n?i&&t?"aspect_ratio_locked":"free":"aspect_ratio_locked":null})(this.info.allowedResizeModes,t);if(!s)return;const a="aspect_ratio_locked"===s,l=function({startBounds:e,handleId:t,pagePoint:n,isAspectRatioLocked:i,isResizingFromCenter:o,aspectRatio:r}){const s=o?(({startBounds:e,handleId:t,pagePoint:n})=>{const i=e.center,o=n.x-i.x,r=n.y-i.y,s=Math.max(Math.abs(o),.5),a=Math.max(Math.abs(r),.5),l=In(t)||wn(t)?o*(In(t)?-2:2)/Math.max(1,e.w):1,d=vn(t)||Pn(t)?r*(vn(t)?-2:2)/Math.max(1,e.h):1;switch(t){case"top":case"bottom":return{bounds:new aI(e.minX,i.y-a,e.w,2*a),scaleX:l,scaleY:d};case"left":case"right":return{bounds:new aI(i.x-s,e.minY,2*s,e.h),scaleX:l,scaleY:d};default:return{bounds:new aI(i.x-s,i.y-a,2*s,2*a),scaleX:l,scaleY:d}}})({startBounds:e,handleId:t,pagePoint:n}):(({startBounds:e,handleId:t,pagePoint:n})=>{const i=e.minX,o=e.maxX,r=e.minY,s=e.maxY;let a=In(t)?i:o,l=In(t)?o:i,d=vn(t)?r:s,c=vn(t)?s:r;In(t)||wn(t)?a=n.x:(a=o,l=i),vn(t)||Pn(t)?d=n.y:(d=s,c=r);const u=a-l,h=d-c,p=In(t)?l-a:u,g=vn(t)?c-d:h,f=In(t)||wn(t)?p/Math.max(1,e.w):1,m=vn(t)||Pn(t)?g/Math.max(1,e.h):1;return{bounds:new aI(Math.min(a,l),Math.min(d,c),Math.max(1,Math.abs(u)),Math.max(1,Math.abs(h))),scaleX:f,scaleY:m}})({startBounds:e,handleId:t,pagePoint:n});return i?Mn({bounds:s.bounds,startBounds:e,handleId:t,aspectRatio:r,isResizingFromCenter:o,scaleX:s.scaleX,scaleY:s.scaleY}):s}({startBounds:this.info.startBounds,handleId:this.info.handleId,pagePoint:r,isAspectRatioLocked:a,isResizingFromCenter:n,aspectRatio:this.info.aspectRatio}),d=!i&&this.info.snapSnapshot.points.length>0,c=d?this.editor.snaps.snapResize({handleId:this.info.handleId,initialSelectionBounds:this.info.startBounds,resizedSelectionBounds:l.bounds,scaleX:l.scaleX,scaleY:l.scaleY,snapshot:this.info.snapSnapshot,threshold:8/this.editor.getCurrentCamera().z,isAspectRatioLocked:a,isResizingFromCenter:n}):l;d||this.editor.snaps.clearIndicators();const u=this.info.shapes.length+this.info.pointShapes.length===1;for(let h=0;h<this.info.shapes.length;h+=1){const e=this.info.shapes[h],t=this.info.updates[h];e&&t&&Oo(this.editor,e,this.info.startBounds,c.bounds,c.scaleX,c.scaleY,this.info.handleId,u,n,this.info.rotationCenter,this.info.rotation,t)}for(let h=0;h<this.info.pointShapes.length;h+=1){const e=this.info.pointShapes[h],t=this.info.updates[this.info.shapes.length+h];e&&t&&No(this.editor,e,this.info.startBounds,0,c.scaleX,c.scaleY,this.info.handleId,n,this.info.rotationCenter,this.info.rotation,t)}this.editor.commands.updateShapes(this.info.updates)}complete(){this.editor.setSnapIndicators(null),this.commitOperation(),this.transition("idle")}cancel(){this.editor.setSnapIndicators(null),this.cancelOperation(),this.transition("idle")}},Aw=class extends xw{tickMode="apply_after_scroll";constructor(e,t){super(e,"rotating",t)}getOperationKind(){return"select.rotate"}onPointerUp(){this.complete()}onCancel(){this.info&&this.editor.commands.setSelectedShapeIds(this.info.previousSelection,{source:"system"}),this.cancel()}apply({pagePoint:e,shiftKey:t,accelKey:n}){if(!this.info)return;if(e.x===this.info.lastPointerX&&e.y===this.info.lastPointerY&&t===this.info.lastShiftKey&&n===this.info.lastAccelKey)return;this.info.lastPointerX=e.x,this.info.lastPointerY=e.y,this.info.lastShiftKey=t,this.info.lastAccelKey=n;let i=Uo(sI.Angle(this.info.center,e)-this.info.startAngle);if(t)i=Do(i,fw);else if(!n&&this.editor.inputs.state.get().screenVelocity.len()<.5){const e=this.info.initialSelectionRotation+i,t=Do(e,mw),n=Uo(t-e);Math.abs(n)<=Sw&&(i=Uo(t-this.info.initialSelectionRotation))}for(let o=0;o<this.info.shapes.length;o+=1){const e=this.info.shapes[o],t=this.info.updates[o];e&&t&&Wo(this.editor,e,this.info.center,i,t)}for(let o=0;o<this.info.pointShapes.length;o+=1){const e=this.info.pointShapes[o],t=this.info.updates[this.info.shapes.length+o];e&&t&&Xo(this.editor,e,this.info.center,i,t)}this.editor.commands.updateShapes(this.info.updates)}complete(){this.commitOperation(),this.transition("idle")}cancel(){this.cancelOperation(),this.transition("idle")}},Bw=class extends xw{tickMode="always_apply";constructor(e,t){super(e,"translating",t)}getOperationKind(){return"select.translate"}onDragStart(){this.editor.setSelectionTranslationActive(!0),this.editor.setSnapIndicators(null)}onPointerUp(e){this.complete(e.pagePoint)}onCancel(){this.info&&this.editor.commands.setSelectedShapeIds(this.info.previousSelection,{source:"system"}),this.cancel()}onInfoExit(){this.editor.setSelectionTranslationActive(!1),this.editor.setSnapIndicators(null)}apply({pagePoint:e,shiftKey:t,accelKey:n}){if(!this.info)return;const i=e.x-this.info.originPagePoint.x,o=e.y-this.info.originPagePoint.y;t?this.info.lockedAxis||0===i&&0===o||(this.info.lockedAxis=Math.abs(i)>=Math.abs(o)?"x":"y"):this.info.lockedAxis=null;let r=i,s=o;"x"===this.info.lockedAxis?s=0:"y"===this.info.lockedAxis&&(r=0);const a=this.info.startBounds;if(!n&&a&&(this.info.snapSnapshot.points.length>0||this.info.snapSnapshot.nodes.length>0)&&this.editor.inputs.state.get().screenVelocity.len()<.5&&a){const e=this.info.snapRotation,t=8/this.editor.getCurrentCamera().z,n=0===e?new sI(r,s):new sI(r,s).rot(-e),{nudge:i}=this.editor.snaps.snapTranslate({lockedAxis:this.info.lockedAxis,initialSelectionBounds:a,dragDelta:n,snapshot:this.info.snapSnapshot,threshold:t}),o=0===e?i:i.rot(e);r+="y"===this.info.lockedAxis?0:o.x,s+="x"===this.info.lockedAxis?0:o.y}else this.editor.snaps.clearIndicators();if(r!==this.info.lastDeltaX||s!==this.info.lastDeltaY){this.info.lastDeltaX=r,this.info.lastDeltaY=s;for(let e=0;e<this.info.selectedShapes.length;e+=1){const t=this.info.selectedShapes[e],n=this.info.updates[e];if(!t||!n)continue;const i=this.editor.getShape(t.id);if(!i)continue;const o=i.parentId.startsWith("shape:")?this.editor.getShape(i.parentId):null,a=(o?this.editor.computeShapeLocalToPageTransform(o):lI.Identity()).tryInvert();if(!a)continue;const l=de(a.compose(lI.Translate(r,s).compose(t.startLocalToPage)),this.editor.computeShapeLocalBounds(i),{preferredRotation:i.rotation,preferredScaleXSign:i.scaleX,preferredScaleYSign:i.scaleY});l&&Object.assign(n,l)}this.editor.commands.updateShapes(this.info.updates)}Yo(this.editor,this.info.movingShapeIds,e),((e,t,n)=>{const i=Ko(e,t,n);if(i===Ho(e,t))return void e.setDropTargetShapeId(null);const o=i?e.getShape(i):null;e.setDropTargetShapeId(o?.id??null)})(this.editor,this.info.movingShapeIds,e)}complete(e){this.info&&Yo(this.editor,this.info.movingShapeIds,e),this.editor.setDropTargetShapeId(null),this.editor.setSnapIndicators(null),this.commitOperation(),this.transition("idle")}cancel(){this.editor.setDropTargetShapeId(null),this.editor.setSnapIndicators(null),this.cancelOperation(),this.transition("idle")}},Rw=class extends uw{constructor(e){super(e,"select"),this.initial="idle",this.addChild(new vw(e,this)),this.addChild(new Pw(e,this)),this.addChild(new Iw(e,this)),this.addChild(new Mw(e,this)),this.addChild(new Bw(e,this)),this.addChild(new kw(e,this)),this.addChild(new Ew(e,this)),this.addChild(new Cw(e,this)),this.addChild(new Aw(e,this)),this.addChild(new Tw(e,this)),this.addChild(new ww(e,this))}},Lw=Sx(null),$w=class{registry=new Map;registeredPluginIds=new Set;shapeOpacityModifiers=[];shapeOpacityModifierIds=new Set;registerShapeRenderer(e){if(this.registry.has(e.type))throw new Error(`Duplicate shape renderer type: ${e.type}.`);this.registry.set(e.type,e)}getShapeRenderer(e){return this.registry.get(e)??null}hasShapeRenderer(e){return this.registry.has(e)}getRegisteredShapeTypes(){return[...this.registry.keys()]}registerCanvasRenderPlugins(e){for(const t of e){if(this.registeredPluginIds.has(t.id))throw new Error(`Duplicate canvas render plugin id: ${t.id}.`);for(const e of t.shapeRenderers??[])this.registerShapeRenderer(e);for(const e of t.shapeOpacityModifiers??[]){if(this.shapeOpacityModifierIds.has(e.id))throw new Error(`Duplicate shape opacity modifier id: ${e.id}.`);this.shapeOpacityModifiers.push(e),this.shapeOpacityModifierIds.add(e.id)}this.registeredPluginIds.add(t.id)}}getShapeOpacity(e,t){return this.shapeOpacityModifiers.reduce((n,i)=>n*i.getOpacity(e,t),1)}},Fw=er(),Uw=Sx(Fw),Dw="var(--land-shape-hover, var(--land-selection, #2563eb))",Ow=yx(()=>{const e=Zo();return((e,t,n)=>{const i=[],o=[],r=new Map(t.map(e=>[e.id,e]));for(const s of e){const e=r.get(s);if(e){for(;o.length>0&&!ir(o[o.length-1],e,r);)i.push({layer:"foreground",shapeId:o.pop()});i.push({layer:"shape",shapeId:s}),n.getShapeRenderer(e.type)?.foregroundComponent&&o.push(s)}}for(;o.length>0;)i.push({layer:"foreground",shapeId:o.pop()});return i})(Qo(e.retainedShapeIdsSignal),Qo(e.currentPageShapeHierarchySignal),tr()).map((e,t)=>"shape"===e.layer?Ax(Nw,{shapeId:e.shapeId,stackingOrder:t},e.shapeId):Ax(_w,{shapeId:e.shapeId,stackingOrder:t},`${e.shapeId}:foreground`))}),zw=yx(()=>{const e=Zo(),t=Qo(e.currentPageShapeIdsSignal),n=Qo(e.retainedShapeIdsSignal),i=Qo(e.renderVisibleShapeIdsSignal),o=Qo(e.shapeRenderOrderByIdSignal),r=new Set(i),s=n.map(e=>o.get(e)??-1),a=n.filter(e=>r.has(e)).map(e=>o.get(e)??-1),l=n.filter(e=>!r.has(e)),d={pageShapeCount:t.length,mountedCount:n.length,visibleCount:i.length,hiddenRetainedCount:l.length,minRenderOrder:s.length>0?Math.min(...s):null,maxRenderOrder:s.length>0?Math.max(...s):null,mountedRenderOrderSeq:s.join(","),visibleRenderOrderSeq:a.join(","),firstMountedShapeId:n[0]??null,lastMountedShapeId:n[n.length-1]??null,hiddenRetainedShapeIds:l};
41
- return Ax("pre",{"data-ui":"shape-layer-debug-summary","data-mounted-count":d.mountedCount,"data-visible-count":d.visibleCount,"data-hidden-retained-count":d.hiddenRetainedCount,"data-min-render-order":d.minRenderOrder??void 0,"data-max-render-order":d.maxRenderOrder??void 0,hidden:!0,children:JSON.stringify(d)})}),Nw=yx(({shapeId:e,stackingOrder:t})=>{const n=Zo(),i=e,o=Qo(n.getShapeSignal(i)),r=Qo(n.getShapeLocalToPageTransformSignal(i)),s=Qo(n.getShapeHoveredSignal(i)),a=Qo(n.selectionCountSignal),l=Qo(n.brushBoxActiveSignal),d=Qo(n.getShapeRenderVisibleSignal(i)),c=Qo(n.toolStateSignal).activeToolId,u=Qo(n.getShapeSelectedSignal(i)),h="select"===c&&u,p=Qo(n.getShapeEditingSessionForShapeSignal(i)),g=Qo(n.getShapeRenderOrderSignal(i)),f=Qo(n.getShapeDropTargetSignal(i)),m=Qo(n.runtime.revisionSignal),S=Qo(n.getShapeEffectiveOpacitySignal(i)),y=Qo(n.getShapeSelectedDescendantTransformAncestorSignal(i)),b=Qo(n.getShapeClipAncestorIdsSignal(i)),x=tr();if(!o||!r)return null;const I=x.getShapeRenderer(o.type);if(!I)return null;const w=I.component,v=I.hoverComponent,P=s&&!(1===a&&h)&&!l,k=dr(n,o,r),C=S*x.getShapeOpacity(n,i);
42
- return Bx("div",{"data-ui":"shape-instance","data-shape-id":o.id,"data-shape-type":o.type,"data-selected":h?"true":"false","data-hovered":P?"true":"false","data-drop-target":f?"true":"false","data-visible":d?"true":"false","data-render-order":g>=0?String(g):void 0,"data-clip-ancestor-count":b.length,style:{position:"absolute",display:d?void 0:"none",left:k.left,top:k.top,width:k.width,height:k.height,opacity:1===C?void 0:C,transform:k.transform,transformOrigin:k.transformOrigin,pointerEvents:"none",outline:f?"2px solid #2563eb":void 0,outlineOffset:f?4:void 0,boxShadow:f?"0 0 0 6px rgba(37, 99, 235, 0.16)":void 0,zIndex:t+1},children:[d?Bx(ar,{clipAncestorIds:b,shapeElementToPage:k.elementToPage,children:[Ax(Ww,{Component:w,shape:o,editor:n,isSelected:h,shapeEditingSession:p,renderRevision:m}),P&&v?Ax(or,{Component:v,editor:n,shape:o}):null]}):null,d&&f?Ax(sr,{}):null,d&&y?Ax(rr,{}):null]})}),_w=yx(({shapeId:e,stackingOrder:t})=>{const n=Zo(),i=Qo(n.getShapeSignal(e)),o=Qo(n.getShapeLocalToPageTransformSignal(e)),r=Qo(n.getShapeRenderVisibleSignal(e)),s=Qo(n.getShapeSelectedSignal(e)),a=Qo(n.getShapeEditingSessionForShapeSignal(e)),l=Qo(n.runtime.revisionSignal),d=Qo(n.getShapeEffectiveOpacitySignal(e)),c=Qo(n.getShapeClipAncestorIdsSignal(e)),u=tr();if(!i||!o)return null;const h=u.getShapeRenderer(i.type)?.foregroundComponent;if(!h)return null;const p=dr(n,i,o),g=d*u.getShapeOpacity(n,e);
43
- return Ax("div",{"data-ui":"shape-foreground","data-owner-shape-id":i.id,"data-owner-shape-type":i.type,style:{position:"absolute",display:r?void 0:"none",left:p.left,top:p.top,width:p.width,height:p.height,opacity:1===g?void 0:g,transform:p.transform,transformOrigin:p.transformOrigin,pointerEvents:"none",zIndex:t+1},children:r?Ax(ar,{clipAncestorIds:c,shapeElementToPage:p.elementToPage,children:Ax(Ww,{Component:h,shape:i,editor:n,isSelected:s,shapeEditingSession:a,renderRevision:l})}):null})}),Ww=yx(e=>{const{Component:t,editor:n,isSelected:i,shape:o,shapeEditingSession:r}=e;
44
- return Ax(t,{editor:n,isSelected:i,shape:o,shapeEditingSession:r})}),Xw=class{selectionCustomHandleRenderers=new Map;canvasOverlays=new Map;registeredPluginIds=new Set;registerCanvasOverlay(e){if(this.canvasOverlays.has(e.id))throw new Error(`Duplicate canvas overlay id: ${e.id}.`);this.canvasOverlays.set(e.id,e)}getCanvasOverlay(e){return this.canvasOverlays.get(e)??null}hasCanvasOverlay(e){return this.canvasOverlays.has(e)}getCanvasOverlays(e){return[...this.canvasOverlays.values()].filter(t=>!e||(e=>e.layer??"above-host")(t)===e).sort(pr)}getRegisteredCanvasOverlayIds(){return[...this.canvasOverlays.keys()]}registerSelectionCustomHandleRenderer(e){if(this.selectionCustomHandleRenderers.has(e.type))throw new Error(`Duplicate selection handle renderer type: ${e.type}.`);this.selectionCustomHandleRenderers.set(e.type,e)}getSelectionCustomHandleRenderer(e){return this.selectionCustomHandleRenderers.get(e)??null}hasSelectionCustomHandleRenderer(e){return this.selectionCustomHandleRenderers.has(e)}getRegisteredSelectionCustomHandleTypes(){return[...this.selectionCustomHandleRenderers.keys()]}registerCanvasRenderPlugins(e){for(const t of e){if(this.registeredPluginIds.has(t.id))throw new Error(`Duplicate canvas render plugin id: ${t.id}.`);for(const e of t.canvasOverlays??[])this.registerCanvasOverlay(e);for(const e of t.selectionCustomHandleRenderers??[])this.registerSelectionCustomHandleRenderer(e);this.registeredPluginIds.add(t.id)}}},Hw=gr(),Kw=Sx(Hw),Yw="rgba(100, 116, 139, 0.82)",qw="rgba(255, 255, 255, 0.84)",jw=yx(()=>Qo(Zo().bindingPreviewActiveSignal)?Ax(Vw,{}):null),Vw=yx(()=>{const e=Zo(),t=Qo(e.bindingPreviewSignal),n=Qo(e.terminalBindingGuidesSignal);if(!t)return null;const i=n.some(e=>e.terminal===t.terminal&&e.targetShapeId===t.targetShapeId);
45
- return Bx(Ex,{children:[Ax(Gw,{targetShapeId:t.targetShapeId}),Ax(Zw,{bindingPreview:t,showGuide:!i})]})}),Gw=yx(({targetShapeId:e})=>{const t=Zo(),n=Qo(t.cameraZoomSignal),i=Qo(t.getShapeSignal(e));return i?Ax(br,{editor:t,shape:i,stroke:"rgba(14, 165, 233, 0.78)",fill:"rgba(14, 165, 233, 0.08)",strokeWidth:2/n}):null}),Zw=yx(({bindingPreview:e,showGuide:t})=>{const n=Qo(Zo().cameraZoomSignal),i=2/n,o=6/n,r=4/n;
46
- return Bx(Ex,{children:[t?e.guidePath?Ax(yr,{path:e.guidePath,strokeWidth:i,dashSize:o,gapSize:r,kind:"binding-preview",terminal:e.terminal}):Ax(Sr,{start:e.rawPagePoint,end:e.resolvedPagePoint,startInset:8/n,endInset:6/n,strokeWidth:i,dashSize:o,gapSize:r,kind:"binding-preview",terminal:e.terminal}):null,
47
- Ax("circle",{"data-binding-preview-point":"raw",cx:e.rawPagePoint.x,cy:e.rawPagePoint.y,r:6,fill:"rgba(255,255,255,0.96)",stroke:"rgba(14, 165, 233, 0.8)",strokeWidth:2}),
48
- Ax("circle",{"data-binding-preview-point":"resolved",cx:e.resolvedPagePoint.x,cy:e.resolvedPagePoint.y,r:7,fill:"rgba(14, 165, 233, 0.18)",stroke:"rgba(2, 132, 199, 0.9)",strokeWidth:2})]})}),Qw=yx(()=>Qo(Zo().brushBoxActiveSignal)?Ax(Jw,{}):null),Jw=yx(()=>{const e=Qo(Zo().brushBoxSignal);return e?Ax("rect",{"data-ui":"brush-box-overlay",x:e.x,y:e.y,width:e.w,height:e.h,fill:"rgba(59, 130, 246, 0.14)",stroke:"rgba(37, 99, 235, 0.92)",strokeDasharray:"4 3",strokeWidth:1}):null}),ev=yx(()=>{const e=Zo(),t=Qo(e.selectionOverlayFrameGeometrySignal),n=Qo(e.selectionOverlayCompanionFrameGeometriesSignal);return t||0!==n.length?Bx(Ex,{children:[t?Ax(tv,{frameGeometry:t}):null,n.map((e,t)=>Ax(tv,{frameGeometry:e},`companion-${t}`))]}):null}),tv=yx(({frameGeometry:e})=>{const t=Qo(Zo().selectionOverlayFrameStyleSignal),{bounds:n,rotation:i,rotationCenter:o}=e,{cornerRadius:r,strokeWidth:s}=t,a=s/2,l=180*i/Math.PI;
49
- return Ax("g",{transform:0===i?void 0:`rotate(${l} ${o.x} ${o.y})`,children:Ax("rect",{"data-selection-overlay":"bounds",x:n.x-a,y:n.y-a,width:n.w+s,height:n.h+s,rx:r+a,ry:r+a,fill:"none",stroke:"rgba(37, 99, 235, 0.88)",strokeWidth:s})})}),nv=new Set(XI),iv=yx(()=>{const e=Qo(Zo().selectionOverlayHandleAnchorsSignal);return e?Ax(ov,{anchors:e}):null}),ov=yx(({})=>{const e=Zo(),t=Qo(e.selectionOverlayHandlesSignal),n=Qo(e.selectionOverlayFrameGeometrySignal),i=fr(),o=Qo(e.cameraZoomSignal);if(!t)return null;const{resizeHandles:r,rotateHandles:s,strokeWidth:a,terminalHandles:l,middleHandles:d,customHandles:c}=t,u=r.filter(e=>nv.has(e.id)),h=r.filter(e=>!nv.has(e.id)),p=n?.rotation??0,g=180*p/Math.PI;
50
- return Bx(Ex,{children:[n?Ax("g",{transform:n&&0!==p?`rotate(${g} ${n.rotationCenter.x} ${n.rotationCenter.y})`:void 0,children:h.map(e=>Ax(xr,{frame:n,handleId:e.id,zoom:o},e.id))}):null,u.map(e=>Ax("rect",{"data-selection-resize-handle":e.id,x:e.bounds.x,y:e.bounds.y,width:e.bounds.w,height:e.bounds.h,rx:2/o,ry:2/o,fill:"rgba(255,255,255,0.98)",stroke:"rgba(37, 99, 235, 0.92)",strokeWidth:a,style:{cursor:Ir(e.id,p),pointerEvents:"auto"}},e.id)),s.map(e=>Bx("g",{"data-selection-rotate-handle":e.id,transform:`translate(${e.bounds.center.x-6/o} ${e.bounds.center.y-6/o}) scale(${.6/o})`,fill:"none",stroke:"rgba(37, 99, 235, 0.96)",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[Ax("path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"}),Ax("path",{d:"M21 3v5h-5"})]},e.id)),l.map(e=>Ax("circle",{"data-selection-terminal":e.terminal,cx:e.bounds.center.x,cy:e.bounds.center.y,r:Math.min(e.bounds.w,e.bounds.h)/2,fill:"rgba(255,255,255,0.98)",stroke:"rgba(37, 99, 235, 0.92)",strokeWidth:a,style:{cursor:"grab",pointerEvents:"auto"}},e.terminal)),d.map(e=>Ax("rect",{"data-selection-binding-middle":"true",x:e.bounds.x,y:e.bounds.y,width:e.bounds.w,height:e.bounds.h,rx:2,ry:2,fill:"rgba(255,255,255,0.98)",stroke:"rgba(37, 99, 235, 0.92)",strokeWidth:a,transform:`rotate(45 ${e.bounds.center.x} ${e.bounds.center.y})`,style:{cursor:"grab",pointerEvents:"auto"}},"middle")),c.map(e=>{const t=i.getSelectionCustomHandleRenderer(e.type);
51
- return Ax(t?t.component:wr,{handle:e,strokeWidth:a},`${e.type}:${e.id}`)})]})}),rv=["ew-resize","nwse-resize","ns-resize","nesw-resize"],sv=1e-6,av=yx(()=>{const e=Zo(),t=Qo(e.selectionOverlayPathSignal),n=Qo(e.selectionOverlayPageClipPathSignal),i=Qo(e.selectionOverlayBindingSegmentsSignal),o=Qo(e.selectedShapeOverlayItemsSignal),r=Qo(e.selectionOverlayFrameStyleSignal),s=vx().replace(/[^a-zA-Z0-9_-]/g,"-"),a=`selection-content-clip-${s}`,l=`selection-path-halo-${s}`,d=1===o.length?o[0]?.pathStyle??null:null,c=d?((e,t)=>{const n=e.localToPage.getMaximumLinearScale(),i=n>sv?Math.abs(e.localToPage.determinant())/n:0;return e.strokeWidth+2*t/(i>sv?i:n>sv?n:1)})(d,r.strokeWidth):null,u=d&&null!==c?d.localBounds.expand(c):null;return t?Bx(Ex,{children:[
52
- Ax(lv,{bindingSegments:i,strokeWidth:r.strokeWidth}),n||d&&u?Bx("defs",{children:[n?Ax("clipPath",{id:a,clipPathUnits:"userSpaceOnUse",children:Ax("path",{d:n,clipRule:"evenodd",fillRule:"evenodd"})}):null,d&&null!==c&&u?Bx("mask",{id:l,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse",x:u.x,y:u.y,width:u.w,height:u.h,children:[Ax(vr,{dataPrefix:"path-halo-mask-outer",pathStyle:d,stroke:"white",strokeWidth:c}),Ax(vr,{dataPrefix:"path-halo-mask-center",pathStyle:d,stroke:"black",strokeWidth:d.strokeWidth})]}):null]}):null,
53
- Ax("g",{"data-selection-overlay":"lines",clipPath:n?`url(#${a})`:void 0,children:d&&null!==c?Ax("g",{"data-selection-overlay":"path-halo-transform",transform:d.localToPage.toSvgString(),children:Ax("g",{mask:`url(#${l})`,children:Ax(vr,{dataPrefix:"path-halo",pathStyle:d,stroke:"rgba(37, 99, 235, 0.45)",strokeWidth:c})})}):Bx(Ex,{children:[Ax("path",{"data-selection-overlay":"path-underlay",d:t,fill:"none",stroke:"rgba(255,255,255,0.92)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2*r.strokeWidth}),Ax("path",{"data-selection-overlay":"path",d:t,fill:"none",stroke:"rgba(37, 99, 235, 0.88)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:r.strokeWidth})]})})]}):null}),lv=yx(({bindingSegments:e,kind:t="selection-binding",strokeWidth:n})=>{if(0===e.length)return null;const i=3*n,o=2*n,r=4*n,s=3*n;
54
- return Ax(Ex,{children:e.map(e=>e.guidePath?Ax(yr,{path:e.guidePath,strokeWidth:n,dashSize:i,gapSize:o,kind:t,terminal:e.terminal},e.terminal):Ax(Sr,{start:e.anchorPagePoint,end:e.boundaryPagePoint,startInset:r,endInset:s,strokeWidth:n,dashSize:i,gapSize:o,kind:t,terminal:e.terminal},e.terminal))})}),dv=yx(()=>Qo(Zo().selectionTranslationActiveSignal)?null:Bx(Ex,{children:[
55
- Ax(av,{}),
56
- Ax(ev,{}),
57
- Ax(iv,{})]})),cv="rgba(37, 99, 235, 0.9)",uv=yx(()=>{const e=Qo(Zo().snapIndicatorsSignal);return 0===e.length?null:Ax(hv,{indicators:e})}),hv=yx(({indicators:e})=>{const t=Qo(Zo().cameraZoomSignal);
58
- return Ax(Ex,{children:e.map(e=>Ax("points"===e.type?pv:gv,{indicator:e,zoom:t},e.id))})}),pv=yx(({indicator:e,zoom:t})=>{const n=2.5/t,i=1/t,[o,r]=e.line,s=180*e.rotation/Math.PI;
59
- return Bx("g",{"data-ui":"snap-indicator",transform:0===e.rotation?void 0:`rotate(${s} ${e.rotationCenter.x} ${e.rotationCenter.y})`,children:[Ax("path",{"data-ui":"snap-indicator-line",d:`M ${o.x} ${o.y} L ${r.x} ${r.y}`,fill:"none",stroke:cv,strokeWidth:i,strokeLinecap:"round"}),e.points.map((t,o)=>Ax("path",{"data-ui":"snap-indicator-cross",d:`M ${t.x-n} ${t.y-n} L ${t.x+n} ${t.y+n} M ${t.x-n} ${t.y+n} L ${t.x+n} ${t.y-n}`,fill:"none",stroke:cv,strokeWidth:i,strokeLinecap:"round"},`${e.id}:${o}`))]})}),gv=yx(({indicator:e,zoom:t})=>{if(0===e.gaps.length)return null;const n="horizontal"===e.direction;let i=[Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY];for(const c of e.gaps){const e=Pr(i,[n?c.startEdge[0].y:c.startEdge[0].x,n?c.startEdge[1].y:c.startEdge[1].x]);e&&(i=e);const t=Pr(i,[n?c.endEdge[0].y:c.endEdge[0].x,n?c.endEdge[1].y:c.endEdge[1].x]);t&&(i=t)}if(!Number.isFinite(i[0])||!Number.isFinite(i[1]))return null;const o=(i[0]+i[1])/2,r=3.5/t,s=2*r,a=[];for(const{startEdge:c,endEdge:u}of e.gaps)if(n){a.push(`M ${c[0].x} ${o-s} L ${c[1].x} ${o+s}`,`M ${u[0].x} ${o-s} L ${u[1].x} ${o+s}`,`M ${c[0].x} ${o} L ${u[0].x} ${o}`);const e=(c[0].x+u[0].x)/2;a.push(`M ${e} ${o-r} L ${e} ${o+r}`)}else{a.push(`M ${o-s} ${c[0].y} L ${o+s} ${c[1].y}`,`M ${o-s} ${u[0].y} L ${o+s} ${u[1].y}`,`M ${o} ${c[0].y} L ${o} ${u[0].y}`);const e=(c[0].y+u[0].y)/2;a.push(`M ${o-r} ${e} L ${o+r} ${e}`)}const l=180*e.rotation/Math.PI,d=0===e.rotation?void 0:`rotate(${l} ${e.rotationCenter.x} ${e.rotationCenter.y})`;
60
- return Ax("path",{"data-ui":"snap-gap-indicator",d:a.join(" "),transform:d,fill:"none",stroke:cv,strokeWidth:1/t,strokeLinecap:"round",strokeLinejoin:"round"})}),fv=yx(()=>{const e=Zo(),t=Qo(e.terminalBindingGuidesSignal),n=Qo(e.selectionOverlayFrameStyleSignal);return 0===t.length?null:Ax(lv,{bindingSegments:t,kind:"terminal-binding-guide",strokeWidth:n.strokeWidth})}),mv=yx(()=>Bx("svg",{width:"100%",height:"100%",style:{display:"block",width:"100%",height:"100%",overflow:"visible"},children:[
61
- Ax("style",{children:'\n [data-selection-terminal],\n [data-selection-binding-middle],\n [data-selection-custom-handle-visual="default"] {\n transition: fill 120ms ease, stroke 120ms ease;\n }\n [data-selection-terminal]:hover,\n [data-selection-binding-middle]:hover,\n [data-selection-custom-handle-visual="default"]:hover {\n fill: rgba(219, 234, 254, 0.98);\n stroke: rgba(29, 78, 216, 0.98);\n }\n [data-selection-terminal]:active,\n [data-selection-binding-middle]:active,\n [data-selection-custom-handle]:active {\n cursor: grabbing;\n }\n '}),
62
- Ax(Sv,{layer:"below-host"}),
63
- Ax(uv,{}),
64
- Ax(fv,{}),
65
- Ax(jw,{}),
66
- Ax(Qw,{}),
67
- Ax(dv,{}),
68
- Ax(Sv,{layer:"above-host"})]})),Sv=yx(({layer:e})=>{const t=fr().getCanvasOverlays(e);return 0===t.length?null:Ax(Ex,{children:t.map(({id:e,component:t})=>Ax(t,{},e))})}),yv=class{guards=[];registeredGuardIds=new Set;register(e){if(this.registeredGuardIds.has(e.id))throw new Error(`Duplicate DOM event guard id: ${e.id}.`);this.guards.push(e),this.registeredGuardIds.add(e.id)}registerCanvasRenderPlugins(e){for(const t of e)for(const e of t.domEventGuards??[])this.register(e)}getGuards(){return this.guards}handle(e){for(const t of this.guards)if("handled"===t.handle(e))return"handled";return"continue"}getCursor(e){for(const t of this.guards){const n=t.getCursor?.(e);if(void 0!==n)return n}}},bv="canvas-surface",xv=`[data-ui="${bv}"]`,Iv=[{min:-1,mid:.15,step:64},{min:.05,mid:.375,step:16},{min:.15,mid:1,step:4},{min:.7,mid:2.5,step:1}],wv=/[;{}<>\u0000-\u001f\u007f]/u,vv=/(?:url|expression)\s*\(|!\s*important|@\s*import|javascript\s*:/iu,Pv=/^((?:\d+(?:\.\d{1,3})?)|(?:\.\d{1,3}))(px|em|rem|%)?$/iu,kv="path-label",Cv="geo-label",Tv={[kv]:{selectionTarget:"owner",hoverTarget:"owner",hoverDecorationTarget:"owner",translateTarget:"owner",canSnap:!1,canReceiveTerminalBinding:!1,contributesToSelectionFrame:!0,canUseSelectionResizeHandles:!1,canUseSelectionRotateHandle:!1,canPlaceCaretWhenOwnerSelected:!0,showsCompanionFrameWhenOwnerSelected:!0},[Cv]:{selectionTarget:"owner",hoverTarget:"owner",hoverDecorationTarget:"label",translateTarget:"owner",canSnap:!1,canReceiveTerminalBinding:!1,contributesToSelectionFrame:!1,canUseSelectionResizeHandles:!0,canUseSelectionRotateHandle:!0,canPlaceCaretWhenOwnerSelected:!0,showsCompanionFrameWhenOwnerSelected:!1}},Mv="default",Ev={id:"host-default",label:"Host default",cssFamily:"inherit",source:{kind:"system"}},Av=new WeakMap,Bv=new WeakMap,Rv={bold:["bold","strong"],italic:["italic","em"],strike:["strike","s"],underline:["underline","u"]},Lv=14,$v=16,Fv=20,Uv=28,Dv=16,Ov={[Lv]:20,[$v]:24,[Fv]:28,[Uv]:36},zv=class{ownerDocument;element;constructor(e){this.ownerDocument=e,this.element=e.createElement("div"),this.element.setAttribute("aria-hidden","true"),this.element.style.position="absolute",this.element.style.left="-10000px",this.element.style.top="0",this.element.style.visibility="hidden",this.element.style.pointerEvents="none",e.body.appendChild(this.element)}measureHtml(e,t){const n=this.prepareElement(t);return n.innerHTML=e,this.measurePreparedElement(n)}measureElement(e,t,n){const i=this.prepareElement(t);return i.replaceChildren(...Array.from(e.childNodes).map(e=>e.cloneNode(!0))),aa(i,"whiteSpace",n?.whiteSpace),aa(i,"overflowWrap",n?.overflowWrap),aa(i,"lineHeight",n?.lineHeight),aa(i,"letterSpacing",n?.letterSpacing),aa(i,"textAlign",n?.textAlign),this.measurePreparedElement(i)}prepareElement(e){const t=this.element;return t.removeAttribute("contenteditable"),t.className="",t.textContent="",e?.shape&&e.fontCatalog&&((e,t,n)=>{e.className="land-text-editor__content",e.dir="auto",e.style.color=F(t.props.color),e.style.fontFamily=Zs(t.props.font,n),e.style.fontSize=`${Qs(t.props.size)}px`,e.style.lineHeight=`${Js(t.props.size)}px`,e.style.textAlign=ta(t.props.textAlign)})(t,e.shape,e.fontCatalog),t.style.position="absolute",t.style.left="-10000px",t.style.top="0",t.style.visibility="hidden",t.style.pointerEvents="none",t.style.width="number"==typeof e?.width?`${e.width}px`:"max-content",t.style.minWidth="0",t.style.height="auto",t.style.minHeight="0",t.style.maxHeight="none",t.style.maxWidth="number"==typeof e?.width?`${e.width}px`:"number"==typeof e?.maxWidth?`${e.maxWidth}px`:"none",t}measurePreparedElement(e){return e.querySelectorAll("p").forEach(e=>{e instanceof HTMLElement&&(e.style.margin="0")}),[e,...Array.from(e.querySelectorAll("*")).filter(e=>e instanceof HTMLElement)].reduce((e,t)=>{const n=t.getBoundingClientRect();return{w:Math.max(e.w,n.width,t.scrollWidth,t.offsetWidth),h:Math.max(e.h,n.height,t.scrollHeight,t.offsetHeight)}},{w:0,h:0})}},Nv=new WeakMap,_v=/[;{}<>\u0000-\u001f\u007f]/u,Wv=/(?:url|expression)\s*\(|!\s*important|@\s*import|javascript\s*:/iu,Xv=Dx.extend({inclusive:!1,renderHTML({HTMLAttributes:e}){const{href:t,target:n,rel:i,...o}=e;return["span",$x(o,{"data-rich-text-link-href":t,style:"text-decoration-line: underline;"}),0]}}),Hv=[jx.configure({bold:!1,italic:!1,link:!1,strike:!1,underline:!1}),Fx.extend({keepOnSplit:!0}),Ux.extend({keepOnSplit:!0}),Ox.extend({keepOnSplit:!0}),Yx.extend({keepOnSplit:!0}),Kx,_x,Nx,Wx,Xx,Hx,zx.configure({types:["paragraph"],alignments:["left","center","right"]}),qx.configure({className:"land-rich-text-selection"}),Xv.configure({autolink:!0,defaultProtocol:"https",openOnClick:!1,protocols:["mailto"],HTMLAttributes:{target:"_blank",rel:"noopener noreferrer",class:"land-rich-text-link"}})],Kv=Sx(null),Yv=new Set(["key_down","key_up","pointer_cancel","pointer_down","pointer_move","pointer_up"]),qv={id:"land.text.dom-events",handle({event:e,name:t}){if(!Yv.has(t))return"continue";const n=e.target;return n instanceof HTMLElement&&n.closest('[data-ui="text-editing-box"]')?"handled":"continue"},getCursor:({element:e})=>e?.closest('[data-ui="text-editing-box"]')?"text":void 0},jv="text.create",Vv=class extends uw{constructor(e){super(e,"text"),this.initial="idle",this.addChild(new Gv(e,this)),this.addChild(new Zv(e,this))}},Gv=class extends uw{constructor(e,t){super(e,"idle",t)}onEnter(){this.editor.clearSelectionTransients()}onPointerDown(e){this.transition("pointing",{originPagePoint:e.pagePoint.clone(),shapeId:null})}},Zv=class extends uw{info=null;operation=null;isHandingOffOperation=!1;constructor(e,t){super(e,"pointing",t)}onEnter(e){this.info=e,this.operation=this.editor.operations.begin({kind:jv,label:"shape.create",source:"user",history:"record"})}onPointerMove(e){this.updateFixedWidthShape(e.pagePoint)}onPointerUp(e){if(!this.info)return void this.transition("idle");const t=null!==this.info.shapeId?this.editor.getShape(this.info.shapeId):this.createTextShape(e.pagePoint);if(!fs(t))return this.cancelOperation(),void this.transition("idle");let n;we(this.editor,t.id,{source:"user"}),this.editor.isToolLocked()||(this.isHandingOffOperation=!0,this.transition("idle"),this.editor.commands.setActiveTool("select",{source:"system"}));try{n=this.editor.startEditingShape({shapeId:t.id,entryMode:"focusEnd",markId:jv,reuseActiveOperation:!0,preserveInteraction:!0},"user")}catch(i){throw this.cancelOperation(),i}finally{this.isHandingOffOperation=!1}n?this.operation=null:this.cancelOperation(),this.editor.isToolLocked()&&this.transition("idle")}onCancel(){this.cancelOperation(),this.transition("idle")}onExit(){this.isHandingOffOperation||this.cancelOperation(),this.info=null}cancelOperation(){const e=this.operation;this.operation=null,e?.isActive&&e.cancel()}updateFixedWidthShape(e){if(!this.info)return;const t=((e,t,n)=>{const i=Math.abs(t.x-e.x);return e.dist(t)<4||i<8?null:{x:Math.min(e.x,t.x),y:e.y-n.h/2,props:{...Fa(n),w:Math.max(16,i),autoSize:!1}}})(this.info.originPagePoint,e,this.getDefaultTextProps());if(t){if(!this.info.shapeId){const e=this.createTextShapeAt(t);return void(this.info.shapeId=e.id)}this.editor.commands.updateShapes([{id:this.info.shapeId,x:t.x,y:t.y,props:{w:t.props.w,h:t.props.h,autoSize:!1}}],{source:"user"})}}createTextShape(e){return this.createTextShapeAt(((e,t)=>({x:e.x,y:e.y-t.h/2,props:Fa(t)}))(e,this.getDefaultTextProps()))}createTextShapeAt({x:e,y:t,props:n}){const i=ys(this.editor,{x:e,y:t,props:n},"user");return this.editor.commands.setSelectedShapeIds([i.id],{source:"system"}),i}getDefaultTextProps(){return Ss(this.editor)}},Qv=["start","middle","end"],Jv=class extends cw{type="text";getDefaultProps(){return{richText:Yr(""),w:16,h:ea(Dv),autoSize:!0,scale:1,font:Mv,size:Dv,color:M("text-slate"),backgroundColor:E("transparent"),textAlign:"start"}}validateProps(e){const t=e&&"object"==typeof e?e:{},n=this.getDefaultProps();return{richText:jr(t.richText),w:Math.max(1,Ua(t.w,n.w)),h:Math.max(1,Ua(t.h,n.h)),autoSize:"boolean"==typeof t.autoSize?t.autoSize:n.autoSize,scale:Math.max(.01,Ua(t.scale,n.scale)),font:$s(t.font)?t.font:n.font,size:Gs(t.size,n.size),color:$(t.color,n.color),backgroundColor:$(t.backgroundColor,n.backgroundColor),textAlign:(i=t.textAlign,"string"==typeof i&&Qv.includes(i)?t.textAlign:n.textAlign)};var i}getPositionedBounds(e){return(e=>new aI(e.x,e.y,Oa(e),za(e)))(e)}getLocalBounds(e){return Na(e)}getRenderBounds(e){return Na(e)}getExportBounds(e){return Na(e)}canSnap(e,t){return!t||(n=t.editor,i=e.id,Ps(n,i)?.behavior.canSnap??null??!0);var n,i}canReceiveTerminalBinding(e,t){return!t||(n=t.editor,i=e.id,Ps(n,i)?.behavior.canReceiveTerminalBinding??null??!0);var n,i}canEdit(e){return!0}contributesToSelectionFrame(e,t){return n=t.editor,i=e.id,Ps(n,i)?.behavior.contributesToSelectionFrame??null??!0;var n,i}canUseSelectionResizeHandles(e,t){return n=t.editor,i=e.id,Ps(n,i)?.behavior.canUseSelectionResizeHandles??null??!0;var n,i}canUseSelectionRotateHandle(e,t){return n=t.editor,i=e.id,Ps(n,i)?.behavior.canUseSelectionRotateHandle??null??!0;var n,i}getSelectionTargetId(e,t){return((e,t)=>{const n=Ps(e,t);return n?"owner"===n.behavior.selectionTarget?n.ownerId:t:null})(t.editor,e.id)??e.id}getHoverTargetId(e,t){return((e,t)=>{const n=Ps(e,t);return n?"owner"===n.behavior.hoverTarget?n.ownerId:t:null})(t.editor,e.id)??e.id}getHoverDecorationTargetId(e,t){return((e,t)=>{const n=Ps(e,t);return n?"owner"===n.behavior.hoverDecorationTarget?n.ownerId:t:null})(t.editor,e.id)??e.id}getTranslateTargetId(e,t){return((e,t)=>{const n=Ps(e,t);return n?"owner"===n.behavior.translateTarget?n.ownerId:t:null})(t.editor,e.id)??e.id}resizeSelectionBounds(e,t){const n={};t.isOnlyResizeTarget&&_a(t.handleId)?(n.w=Math.max(16,t.selectionLocalBounds.w/Da(e)),n.autoSize=!1):n.scale=Math.max(.01,e.props.scale*((e,t)=>{const n=t.selectionLocalBounds.w/Math.max(1,Oa(e)),i=t.selectionLocalBounds.h/Math.max(1,za(e));switch(t.handleId){case"left":case"right":return n;case"top":case"bottom":return i;default:return Math.max(n,i)}})(e,t));const i=n.scale??Da(e),o=(n.w??e.props.w)*i,r=e.props.h*i,s=((e,t)=>0===t.selectionRotation?e.clone():sI.RotWith(e,t.selectionRotationCenter,t.selectionRotation))(Tn({handleId:t.handleId,requestedBounds:t.selectionLocalBounds,actualWidth:o,actualHeight:r,scaleX:t.scaleX,scaleY:t.scaleY,isResizingFromCenter:t.isResizingFromCenter}).center,t);return{id:e.id,x:s.x-o/2,y:s.y-r/2,rotation:t.scaleX<0!=t.scaleY<0?2*t.selectionRotation-e.rotation:e.rotation,scaleX:t.scaleX<0?-e.scaleX:e.scaleX,scaleY:t.scaleY<0?-e.scaleY:e.scaleY,props:n}}getAllowedSelectionResizeModes(e,t){return t.isOnlyResizeTarget&&_a(t.handleId)?KI:YI}onEditEnd(e){if(!(qr(e.props.richText).trim().length>0))return{deleteShapeIds:[e.id]}}},eP=class{fontCatalog;type="text";constructor(e){this.fontCatalog=e}toSvg(e,t){if(0===qr(e.props.richText).trim().length)return null;const n=bs(Cs(t.editor,e),e.props.w);return{tag:"foreignObject",attrs:{x:0,y:0,width:e.props.w*e.props.scale,height:e.props.h*e.props.scale},children:[{tag:"div",attrs:{xmlns:"http://www.w3.org/1999/xhtml",dir:"auto",style:Ha(e,t,this.fontCatalog,n)},children:Wa(e.props.richText,D(e.props.backgroundColor)?void 0:t.resolveColor(e.props.backgroundColor))}]}}},tP=".label",nP=class extends TI{type=kv;getDefaultProps(){return{labelPosition:.5}}validateProps(e){const t=this.getDefaultProps();return{labelPosition:Ya((e&&"object"==typeof e?e:{}).labelPosition,t.labelPosition)}}canBind(e,t,n){return this.canUseShapeHierarchy(t,n,e)}canUseShapeHierarchy(e,t,n){return fs(t.fromShape)&&(!n||null!==ja(n,t.toShape))}getExclusiveBindingKey(e){return e.toId}onBindingCreate(e,t){return this.syncLabelPosition(e,t)}onBindingUpdate(e,t,n){return this.syncLabelPosition(e,n)}onBindingLoad(e,t){return this.syncLabelPosition(e,t)}getGeometryDependentShapeIds(e,t,n){return"to"===n.role?[t.fromId]:[]}getTargetShapeContentCutoutLocalPolygons(e,t,n){if(!fs(n.fromShape)||!ja(e,n.toShape))return[];const i=e.computeShapeLocalToPageTransform(n.toShape).tryInvert();if(!i)return[];const o=e.computeShapeLocalBounds(n.fromShape),r=i.compose(e.computeShapeLocalToPageTransform(n.fromShape));return[[new sI(o.minX,o.minY),new sI(o.maxX,o.minY),new sI(o.maxX,o.maxY),new sI(o.minX,o.maxY)].map(e=>r.applyToPoint(e))]}onAfterShapeChange(e,t,n){return this.syncLabelPosition(e,t)}onBeforeDeleteShape(e,t,n){return"from"===n.role?{deleteBindingIds:[t.id]}:{deleteShapeIds:[t.fromId],deleteBindingIds:[t.id]}}onBeforeDeleteBinding(e,t){return{deleteBindingIds:[t.id]}}getExportShapeIds(e,t){return[t.fromId]}getShapeHierarchyRootId(e,t){return t===e.fromId?e.toId:null}getSelectionCompanionFrameGeometries(e,t,n){if(t.toId!==n.selectedShape.id)return[];if(!0!==((e,t)=>Ps(e,t)?.behavior.showsCompanionFrameWhenOwnerSelected??null)(e,t.fromId))return[];const i=e.getShape(t.fromId),o=e.getShape(t.toId);if(!fs(i)||!o||!ja(e,o))return[];const r=e.computeShapeGeometry(i),s=e.computeShapeLocalToPageTransform(i),a=Math.atan2(s.b,s.a);return[{bounds:aI.FromPoints(r.outlineVertices.map(e=>sI.RotWith(e,r.center,-a))),rotation:a,rotationCenter:r.center}]}syncLabelPosition(e,t){if(!Ka(t))return;const n=e.getShape(t.fromId),i=e.getShape(t.toId);if(!fs(n)||!i||!ja(e,i))return{deleteBindingIds:[t.id]};const o=((e,t,n,i)=>{const o=qa(e,t,n,i),r=n.parentId,s=`${n.index}${tP}`,a=!1,l="middle",d=Is(e,t,r,o);return d?t.x===d.x&&t.y===d.y&&t.rotation===d.rotation&&t.skewX===d.skewX&&t.scaleX===d.scaleX&&t.scaleY===d.scaleY&&t.parentId===r&&t.index===s&&t.props.w===o.props.w&&t.props.autoSize===a&&t.props.textAlign===l?null:{id:t.id,...d,parentId:r,index:s,props:{w:o.props.w,autoSize:a,textAlign:l}}:null})(e,n,i,t.props.labelPosition);return o?{shapes:[{...n,...o,props:{...n.props,...o.props}}]}:void 0}},iP=".label",oP=class extends TI{type=Cv;getDefaultProps(){return{normalizedAnchor:{x:.5,y:.5},ownerBaseHeight:0}}validateProps(e){const t=this.getDefaultProps(),n=e&&"object"==typeof e?e:{},i=n.normalizedAnchor&&"object"==typeof n.normalizedAnchor?n.normalizedAnchor:t.normalizedAnchor;return{normalizedAnchor:{x:Za(i.x,t.normalizedAnchor.x),y:Za(i.y,t.normalizedAnchor.y)},ownerBaseHeight:Qa(n.ownerBaseHeight,t.ownerBaseHeight)}}canBind(e,t,n){return this.canUseShapeHierarchy(t,n)}canUseShapeHierarchy(e,t){return fs(t.fromShape)&&Ga(t.toShape)}getExclusiveBindingKey(e){return e.toId}onBindingCreate(e,t){return this.syncLabelPosition(e,t)}onBindingUpdate(e,t,n){return this.syncLabelPosition(e,n,t.toId===n.toId?void 0:{role:"to"})}onBindingLoad(e,t){return this.syncLabelPosition(e,t)}getGeometryDependentShapeIds(e,t,n){return"from"===n.role?[t.toId]:[t.fromId]}onAfterShapeChange(e,t,n){return this.syncLabelPosition(e,t,n)}onBeforeDeleteShape(e,t,n){if("from"===n.role){const n=e.getShape(t.toId),i=n?el(n,t):null;return{shapes:i?[i]:void 0,deleteBindingIds:[t.id]}}return{deleteShapeIds:[t.fromId],deleteBindingIds:[t.id]}}onBeforeDeleteBinding(e,t){const n=e.getShape(t.toId),i=n?el(n,t):null;return{shapes:i?[i]:void 0,deleteBindingIds:[t.id]}}getExportShapeIds(e,t){return[t.fromId]}getShapeHierarchyRootId(e,t){return t===e.fromId?e.toId:null}syncLabelPosition(e,t,n){if(i=t,"binding"!==i?.typeName||"geo-label"!==i.type)return;var i;const o=e.getShape(t.fromId),r=e.getShape(t.toId);if(!fs(o)||!Ga(r))return{deleteBindingIds:[t.id]};const s=((e,t,n)=>{const i=Ja(t,"h")??1;return"to"===n?.role?i:e.props.ownerBaseHeight>0?e.props.ownerBaseHeight:i})(t,r,n),a=t.props.ownerBaseHeight===s?null:{...t,props:{...t.props,ownerBaseHeight:s}},l=function(e,t,n){const i=Ja(e,"h");if(!i)return null;const o=Math.max(n,(e=>Math.max(1,e.props.h*e.props.scale+32))(t));return i===o?null:{...e,props:{...e.props,h:o}}}(r,o,s),d=((e,t,n)=>{const i=tl(e,t,n),o=n.parentId,r=`${n.index}${iP}`,s=!1,a="middle",l=Is(e,t,o,i);return l?t.x===l.x&&t.y===l.y&&t.rotation===l.rotation&&t.skewX===l.skewX&&t.scaleX===l.scaleX&&t.scaleY===l.scaleY&&t.parentId===o&&t.index===r&&t.props.w===i.props.w&&t.props.autoSize===s&&t.props.textAlign===a?null:{id:t.id,...l,parentId:o,index:r,props:{w:i.props.w,autoSize:s,textAlign:a}}:null})(e,o,l??r),c=[];return l&&c.push(l),d&&c.push({...o,...d,props:{...o.props,...d.props}}),c.length>0||a?{shapes:c.length>0?c:void 0,bindings:a?[a]:void 0}:void 0}},rP="text.edit",sP="path-label.edit",aP="path-label.create",lP="path-label.drag",dP="geo-label.edit",cP="geo-label.create",uP=Go("land.plugin-setup.actions"),hP=Go("land.plugin-setup.capabilities"),pP={mainMenu:dl("land.chrome.main-menu"),commandPalette:dl("land.chrome.command-palette"),inspector:dl("land.chrome.inspector"),status:dl("land.chrome.status")},gP=Go("land.plugin-setup.chrome"),fP=Go("land.plugin-setup.context-menu"),mP=Go("land.plugin-setup.exports"),SP=Go("land.plugin-setup.imports"),yP=Go("land.plugin-setup.apis"),bP=Go("land.plugin-setup.services"),xP="editor.tool.set-active-tool",IP="editor.tool.toggle-locked",wP={toolSwitcher:hl("land.toolbar.tool-switcher"),toolOptions:hl("land.toolbar.tool-options"),selectionProperties:hl("land.toolbar.selection-properties"),selectionQuickActions:hl("land.toolbar.selection-quick-actions")},vP=Go("land.plugin-setup.toolbar"),PP=cl("plugin-text.api"),kP={token:PP,create:({editor:e})=>e.shapeUtils.has("text")?(e=>({create(t){const n=e.getDefaultShapeProps("text"),[i]=e.commands.createShapes([{type:"text",x:t.x,y:t.y,meta:t.meta?{...t.meta}:void 0,props:{...n,w:t.w??n.w,h:t.h??n.h,font:t.font??n.font,color:t.color??n.color,size:t.size??n.size,textAlign:t.textAlign??n.textAlign,richText:Yr(t.text)}}],{source:"user"});return i&&"text"===i.type?{id:i.id,type:i.type}:null}}))(e):null},CP=jo("plugin-text.font-catalog"),TP=[{value:M("text-slate"),label:"Slate",id:"slate",hexColor:"#0f172a"},{value:M("text-blue"),label:"Blue",id:"blue",hexColor:"#1d4ed8"},{value:M("text-green"),label:"Green",id:"green",hexColor:"#15803d"},{value:M("text-red"),label:"Red",id:"red",hexColor:"#dc2626"}],MP=[{id:"none",value:E("transparent"),label:"None",hexColor:"#fef08a",opacity:0},{id:"yellow",value:E("#fef08a"),label:"Yellow",hexColor:"#fef08a",opacity:1},{id:"blue",value:E("#bfdbfe"),label:"Blue",hexColor:"#bfdbfe",opacity:1},{id:"green",value:E("#bbf7d0"),label:"Green",hexColor:"#bbf7d0",opacity:1},{id:"red",value:E("#fecaca"),label:"Red",hexColor:"#fecaca",opacity:1}],EP=[{id:"s",value:14,label:"S"},{id:"m",value:16,label:"M"},{id:"l",value:20,label:"L"},{id:"xl",value:28,label:"XL"}],AP=[{value:"start",label:"Align left",icon:"align-left"},{value:"middle",label:"Align center",icon:"align-center"},{value:"end",label:"Align right",icon:"align-right"}],BP=[{format:"bold",actionId:"text.toggle-bold",label:"Bold",icon:"bold",dataUi:"selected-text-bold-button"},{format:"italic",actionId:"text.toggle-italic",label:"Italic",icon:"italic",dataUi:"selected-text-italic-button"},{format:"underline",actionId:"text.toggle-underline",label:"Underline",icon:"underline",dataUi:"selected-text-underline-button"},{format:"strike",actionId:"text.toggle-strike",label:"Strikethrough",icon:"strikethrough",dataUi:"selected-text-strike-button"}],RP="text.clear-formatting",LP="text.set-link",$P=Ml(),FP=2*Math.PI,UP=cl("plugin-arrow.api"),DP={token:UP,create:({editor:e})=>e.shapeUtils.has("arrow")?(e=>({create(t){const n=e.getDefaultShapeProps("arrow"),i=kd(e,{startPagePoint:new sI(t.start.x,t.start.y),endPagePoint:new sI(t.end.x,t.end.y),startBinding:t.startBinding?{targetShapeId:t.startBinding.targetShapeId,normalizedAnchor:t.startBinding.normalizedAnchor}:null,endBinding:t.endBinding?{targetShapeId:t.endBinding.targetShapeId,normalizedAnchor:t.endBinding.normalizedAnchor}:null,meta:t.meta?{...t.meta}:void 0,props:{...n,bend:t.bend??n.bend,stroke:t.stroke??n.stroke,strokeWidth:t.strokeWidth??n.strokeWidth,headStart:t.headStart??n.headStart,headEnd:t.headEnd??n.headEnd}});return{id:i.id,type:i.type}}}))(e):null},OP=class extends uw{constructor(e){super(e,"arrow"),this.initial="idle",this.addChild(new zP(e,this)),this.addChild(new NP(e,this))}},zP=class extends uw{constructor(e,t){super(e,"idle",t)}onEnter(){this.editor.clearSelectionTransients()}onPointerDown(e){const t=this.editor.getDefaultShapeProps("arrow"),n=((e,{terminal:t,rawPagePoint:n,ignoreTargets:i=!1})=>Fd(e,{terminal:t,rawPagePoint:n,oppositePagePoint:n.add(new sI(1,0)),ignoreTargets:i}))(this.editor,{terminal:"start",rawPagePoint:e.pagePoint,ignoreTargets:e.accelKey});this.transition("creating",{startPagePoint:n.pagePoint,currentPagePoint:n.pagePoint.clone(),shapeId:null,startBinding:n.binding,props:t})}},NP=class extends uw{info=null;operation=null;constructor(e,t){super(e,"creating",t)}onEnter(e){if(this.info=e,!this.info)return;this.operation=this.editor.operations.begin({kind:"arrow.create",label:"shape.create",source:"user",history:"record"});const t=kd(this.editor,{startPagePoint:this.info.startPagePoint,endPagePoint:this.info.startPagePoint,startBinding:this.info.startBinding,props:{stroke:this.info.props.stroke,strokeWidth:this.info.props.strokeWidth,headStart:this.info.props.headStart,headEnd:this.info.props.headEnd}},"user");this.info.shapeId=t.id,this.editor.commands.setSelectedShapeIds([t.id],{source:"system"}),this.editor.setBindingPreview(null),this.updateCreationBindingGuides(t)}onPointerMove(e){this.updateShape(e.pagePoint)}onTick(e){if(!this.info)return;const t=this.editor.inputs.state.get();if("dragging"!==t.dragPhase||!t.currentPagePoint||!t.currentScreenPoint)return;const n=Eo(t.currentScreenPoint,this.editor.viewportScreenSizeSignal.get(),e.elapsed);0===n.x&&0===n.y||(this.editor.panCamera(n),this.updateShape(this.editor.screenToPage(t.currentScreenPoint)))}onPointerUp(e){if(this.info){if(this.updateShape(e.pagePoint),!this.info.shapeId||this.info.startPagePoint.dist(this.info.currentPagePoint)<4)return this.cancelOperation(),void this.transition("idle");we(this.editor,this.info.shapeId,{source:"user"}),this.commitOperation(),this.editor.isToolLocked()?this.transition("idle"):this.editor.commands.setActiveTool("select",{source:"system"})}else this.transition("idle")}onCancel(){this.cancelOperation(),this.transition("idle")}onExit(){this.cancelOperation(),this.editor.setTerminalBindingGuides(null),this.info=null}commitOperation(){const e=this.operation;this.operation=null,e?.commit()}cancelOperation(){const e=this.operation;this.operation=null,e?.isActive&&e.cancel()}updateShape(e){if(!this.info)return;this.info.currentPagePoint=e.clone();const t=this.info.shapeId,n=t?this.editor.getShape(t):null,i=ed(n)?Ud(this.editor,{arrow:n,terminal:"end",rawPagePoint:e,ignoreTargets:this.editor.inputs.state.get().accelKey}):Fd(this.editor,{terminal:"end",rawPagePoint:e,oppositePagePoint:this.info.startPagePoint,ignoreTargets:this.editor.inputs.state.get().accelKey}),o=Cd(this.editor,t,"end",this.info.startBinding&&i.binding?.targetShapeId===this.info.startBinding.targetShapeId?{pagePoint:e,binding:null,preview:null}:i,"user")??(t?this.editor.getShape(t):null);this.updateCreationBindingGuides(ed(o)?o:null)}updateCreationBindingGuides(e){if(!e)return void this.editor.setTerminalBindingGuides(null);const t=new Map(this.editor.getBindingsFromShape(e.id).filter(td).map(e=>[e.props.terminal,e.toId])),n=od(this.editor,e).bindingSegments.map(n=>({...n,ownerShapeId:e.id,targetShapeId:t.get(n.terminal)??null}));this.editor.setTerminalBindingGuides(n)}},_P=[{value:M("stroke-blue"),label:"Blue",id:"blue",hexColor:"#1d4ed8"},{value:M("stroke-green"),label:"Green",id:"green",hexColor:"#15803d"},{value:M("stroke-red"),label:"Red",id:"red",hexColor:"#dc2626"},{value:M("stroke-slate"),label:"Slate",id:"slate",hexColor:"#334155"}],WP=[{value:"both",label:"Both ends",icon:"arrows-horizontal"},{value:"start",label:"Start",icon:"arrow-narrow-left"},{value:"end",label:"End",icon:"arrow-narrow-right"},{value:"none",label:"None",icon:"minus"}],XP={id:"arrow",provides:[UP],editor:{id:"land.arrow",shapeCapabilities:[{type:"arrow",schemaProps:["w","h","start","end","bend","stroke","strokeWidth","headStart","headEnd"],reactRenderer:"supported",toolbarEntry:"supported",notes:["Binding support lives in arrow binding records, not arrow props."]}],shapeUtils:[new class extends cw{type="arrow";getDefaultProps(){return{w:160,h:48,start:{x:8,y:24},end:{x:152,y:24},bend:0,stroke:M("stroke-slate"),strokeWidth:2,headStart:"none",headEnd:"arrow"}}validateProps(e){const t=e&&"object"==typeof e?e:{},n=this.getDefaultProps();return{w:Math.max(1,Rd(t.w,n.w)),h:Math.max(1,Rd(t.h,n.h)),start:Bd(t.start,n.start),end:Bd(t.end,n.end),bend:Rd(t.bend,n.bend),stroke:$(t.stroke,n.stroke),strokeWidth:Math.max(1,Rd(t.strokeWidth,n.strokeWidth)),headStart:"arrow"===t.headStart?"arrow":"none",headEnd:"none"===t.headEnd?"none":"arrow"}}getPositionedBounds(e){const t=Ol(e),n=Math.max(6,.5*e.props.strokeWidth+4);return t.bounds.expand(n)}getPointHitTestBounds(e,t){const n=Math.max(8,e.props.strokeWidth+4);if(!t?.editor)return Ol(e).bounds.expand(n);const i=od(t.editor,e).info,o=t.editor.computeShapePositionedToPageTransform(e).tryInvert();if(!o||0===i.points.length)return Ol(e).bounds.expand(n);const r=n*Math.sqrt(o.a*o.a+o.b*o.b+o.c*o.c+o.d*o.d);return aI.FromPoints(i.points.map(e=>o.applyToPoint(e))).expand(r)}getLocalBounds(e){return new aI(0,0,e.props.w,e.props.h)}getExportBounds(e){const t=zl(e),n=Math.max(6,.5*e.props.strokeWidth+4);return t.bounds.expand(n)}repairLoadedShape(e){return null}updateSelectionPagePoints(e,t){const n=this.getSelectionPageMiddlePoint(e);if(t.pageMiddlePoint&&n){const i=this.getSelectionPagePoints(e),o=((e,t)=>{const n=e[1].sub(e[0]),i=e[2].sub(e[0]),o=n.x*i.y-n.y*i.x;if(Math.abs(o)<1e-9)return null;const r=new lI(i.y/o,-n.y/o,-i.x/o,n.x/o,0,0),s=t[1].sub(t[0]),a=t[2].sub(t[0]),l=new lI(s.x,s.y,a.x,a.y,0,0).compose(r);return new lI(l.a,l.b,l.c,l.d,t[0].x-l.a*e[0].x-l.c*e[0].y,t[0].y-l.b*e[0].x-l.d*e[0].y)})([i[0],i[1],n],[t.pagePoints[0],t.pagePoints[1],t.pageMiddlePoint]);if(o){const t=de(o.compose(this.getLocalToPageTransform(e)),this.getLocalBounds(e),{preferredRotation:e.rotation,preferredScaleXSign:e.scaleX,preferredScaleYSign:e.scaleY});if(t)return{id:e.id,...t}}}const i=((e,t,n)=>{const i=Dl(t,n);return{...e,x:i.x,y:i.y,rotation:0,skewX:0,scaleX:1,scaleY:1,props:{...e.props,w:i.w,h:i.h,start:i.start,end:i.end,bend:e.props.bend}}})(e,t.pagePoints[0],t.pagePoints[1]);return{id:e.id,x:i.x,y:i.y,rotation:i.rotation,skewX:i.skewX,scaleX:i.scaleX,scaleY:i.scaleY,props:{w:i.props.w,h:i.props.h,start:i.props.start,end:i.props.end,bend:t.pageMiddlePoint?Nl(t.pagePoints[0],t.pagePoints[1],t.pageMiddlePoint):i.props.bend}}}isWrappedByBrush(e,t){return t.pageOutlineVertices.every(e=>t.brushBounds.containsPoint(e))}getSelectionPagePoints(e){return[Rl(e,"start"),Rl(e,"end")]}getSelectionPageMiddlePoint(e){return this.getLocalToPageTransform(e).applyToPoint(zl(e).middle)}contributesToSelectionFrame(e,t){return t.editor.getSelectedShapeIds().length>1}canUseSelectionResizeHandles(e,t){return t.editor.getSelectedShapeIds().length>1}canUseSelectionRotateHandle(e,t){return t.editor.getSelectedShapeIds().length>1}canStartTranslateFromSelectionBounds(e,t){return t.editor.getSelectedShapeIds().length>1}getSelectionHandleAnchors(e,t){if(!t.isOnlySelected)return{terminalHandleAnchors:[],middleHandleAnchors:[]};const n=od(t.editor,e).info;return{terminalHandleAnchors:[{kind:"binding_terminal",terminal:"start",point:n.start.handle},{kind:"binding_terminal",terminal:"end",point:n.end.handle}],middleHandleAnchors:n.middle?[{kind:"binding_middle",point:n.middle}]:[]}}getSelectionOverlayInfo(e,t){const n=od(t.editor,e),i=n.info,o=rd(t.editor,e),r=Td(o,e.props),s=t.editor.computeShapeLocalToPageTransform(e);return{usesSelectionPathOverlay:!0,startPagePoint:i.start.point,endPagePoint:i.end.point,middlePagePoint:i.middle,path:i.path,pathStyle:{localPath:o.path,localDecorationPaths:r.path?[r.path]:[],localBounds:aI.FromPoints([...o.points,...r.points]),localToPage:s,strokeWidth:e.props.strokeWidth},pageClipPath:wo({outputBounds:i.bounds,cutoutLocalPolygons:t.editor.getShapeContentCutoutLocalPolygonsSignal(e.id).get(),localToOutput:s}),bindingSegments:n.bindingSegments}}getLabelPathGeometry(e,t){return function(e){const t="curved"===e.type&&e.path.includes(" A "),n=t?null:(e=>{const t=[];let n=0;for(let i=1;i<e.length;i+=1){const o=e[i-1].dist(e[i]);t.push(o),n+=o}return{length:n,segmentLengths:t}})(e.points),i=t?e.arc.length:n?.length??0,o=n?_l(e.points,n,e.middle,.5):.5;return{length:i,defaultPosition:.5,getPointAt(i){const r=Xl(i);return t?Gl(e.start.point,e.end.point,e.arc,r):((e,t,n)=>{const i=e[0]??sI.Zero();if(!t||t.length<=1e-6)return i.clone();const o=t.length*n;let r=0;for(let s=0;s<t.segmentLengths.length;s+=1){const n=t.segmentLengths[s];if(o<=r+n||s===t.segmentLengths.length-1){const t=e[s],i=n<=1e-6?0:(o-r)/n;return t.add(e[s+1].sub(t).mul(Xl(i)))}r+=n}return(e[e.length-1]??i).clone()})(e.points,n,Wl(r,o))},getNearestPosition:(i,r)=>t?((e,t,n=.5)=>{const i=t.sub(e.arc.center);if(i.len2()<=1e-12)return Xl(n);const o=e.arc.center.add(i.normalize().mul(e.arc.radius)),r=Vl(e.start.point,e.end.point,e.arc);if(Math.abs(r)<=1e-6)return Xl(n);const s=Vl(e.start.point,o,e.arc);if(Math.abs(s)<=Math.abs(r)+1e-6)return Xl(s/r);const a=t.dist2(e.start.point),l=t.dist2(e.end.point);return Math.abs(a-l)<=1e-8?n<=.5?0:1:a<l?0:1})(e,i,r?.hintPosition):((e,t)=>{const n=Xl(e),i=Xl(t);return n<=i?i<=1e-6?.5:n/i*.5:1-i<=1e-6?.5:.5+(n-i)/(1-i)*.5})(_l(e.points,n,i,Wl(r?.hintPosition??.5,o)),o)}}(od(t.editor,e).info)}hitTest(e,t,n){return((e,t)=>{let n=1/0;for(let i=0;i<e.points.length-1;i++)n=Math.min(n,Ql(t,e.points[i],e.points[i+1]));return Number.isFinite(n)?n:t.dist(e.start.point)})(n?.editor?od(n.editor,e).info:Ol(e),n?.pagePoint??t)<=Math.max(8,e.props.strokeWidth+4)}hitTestLineSegment(e,t){const n=t.editor?od(t.editor,e).info:Ol(e),i=Math.max(8,e.props.strokeWidth+4,t.editor?t.pageMargin:t.positionedMargin),o=t.editor?t.pageStart:t.positionedStart,r=t.editor?t.pageEnd:t.positionedEnd;if(1===n.points.length)return Ld(n.points[0],o,r)<=i;for(let s=0;s<n.points.length-1;s+=1){const e=n.points[s],t=n.points[s+1];if(e&&t&&$d(o,r,e,t)<=i)return!0}return!1}}],shapeSvgExporters:[new class{type="arrow";toSvg(e,t){const n=t.resolveColor(e.props.stroke),i=rd(t.editor,e),o=wo({outputBounds:i.bounds,cutoutLocalPolygons:t.editor.getShapeContentCutoutLocalPolygonsSignal(e.id).get()}),r=o?t.addDef({tag:"clipPath",attrs:{clipPathUnits:"userSpaceOnUse"},children:[{tag:"path",attrs:{d:o,"clip-rule":"evenodd","fill-rule":"evenodd"}}]}):void 0,s="arrow"===e.props.headStart?`url(#${t.addDef(zd("start",n))})`:void 0,a="arrow"===e.props.headEnd?`url(#${t.addDef(zd("end",n))})`:void 0;return{tag:"path",attrs:{d:i.path,fill:"none",stroke:n,"stroke-width":e.props.strokeWidth,"stroke-linecap":"round","stroke-linejoin":"round","marker-start":s,"marker-end":a,"clip-path":r?`url(#${r})`:void 0}}}}],bindingUtils:[new class extends TI{type="arrow";getDefaultProps(){return{terminal:"start",normalizedAnchor:{x:.5,y:.5}}}validateProps(e){const t=e&&"object"==typeof e?e:{},n=this.getDefaultProps(),i=t.normalizedAnchor&&"object"==typeof t.normalizedAnchor?t.normalizedAnchor:n.normalizedAnchor;return{terminal:"end"===t.terminal?"end":n.terminal,normalizedAnchor:{x:Math.min(1,Math.max(0,vd(i.x,n.normalizedAnchor.x))),y:Math.min(1,Math.max(0,vd(i.y,n.normalizedAnchor.y)))}}}canBind(e,t,n){return ed(n.fromShape)&&Id(e,n.toShape)}getExclusiveBindingKey(e){return`${e.fromId}:${e.props.terminal}`}onBindingCreate(e,t){return Pd(this.syncArrowTerminal(e,t))}onBindingUpdate(e,t,n){return Pd(this.syncArrowTerminal(e,n))}onBindingLoad(e,t){return Pd(this.syncArrowTerminal(e,t))}getGeometryDependentShapeIds(e,t,n){return"to"===n.role?[t.fromId]:[]}onAfterShapeChange(e,t,n){return Pd(this.syncArrowTerminal(e,t))}onBeforeDeleteShape(e,t,n){if("from"===n.role)return{deleteBindingIds:[t.id]};const i=e.getShape(t.fromId);if(!ed(i))return{deleteBindingIds:[t.id]};const o=this.resolveTerminalPagePoint(e,t);return{shapes:[o?Ul(e,i,t.props.terminal,o)??i:i],deleteBindingIds:[t.id]}}onBeforeDeleteBinding(e,t){const n=e.getShape(t.fromId);if(!ed(n))return{deleteBindingIds:[t.id]};const i=this.resolveTerminalPagePoint(e,t);return{shapes:[i?Ul(e,n,t.props.terminal,i)??n:n],deleteBindingIds:[t.id]}}syncArrowTerminal(e,t){if(!td(t))return null;const n=e.getShape(t.fromId);if(!ed(n))return null;const i=this.resolveTerminalPagePoint(e,t);return i?Ll(e,n,t.props.terminal).dist(i)<1e-6?null:Ul(e,n,t.props.terminal,i):null}resolveTerminalPagePoint(e,t){if(!td(t))return null;const n=e.getShape(t.fromId),i=e.getShape(t.toId);if(!ed(n)||!i||ed(i))return null;const o=Ll(e,n,$l(t.props.terminal)),r=Bl(e,i,t.props.normalizedAnchor,o);return fd(e,{arrow:n,terminal:t.props.terminal,target:i,anchorPagePoint:Al(e,i,t.props.normalizedAnchor),fallbackBoundaryPagePoint:r}).boundaryPagePoint}}],interactionHandlers:[{id:"land.arrow.interactions",selectionHandle:{createSession:(e,{handle:t,shape:n})=>ed(n)?"binding_terminal"===t.kind?(({handle:e,shapeId:t,terminal:n})=>({shapeId:t,historyMark:"select.binding_terminal_drag",handleSnapMode:"point",handleSnapContext:{shapeId:t,handle:e},shouldClearBindingPreviewOnExit:!0,update({editor:e,pagePoint:i,accelKey:o,source:r}){const s=e.getShape(t);if(!ed(s))return{status:"stop",finalPagePoint:null};const a=Ud(e,{arrow:s,terminal:n,rawPagePoint:i,ignoreTargets:o}),l=Cd(e,s.id,n,a,r);return{status:"continue",finalPagePoint:l?Ll(e,l,n):a.pagePoint}}}))({handle:t,shapeId:n.id,terminal:t.terminal}):"binding_middle"===t.kind?(({shapeId:e})=>({shapeId:e,historyMark:"select.binding_middle_drag",update({editor:t,pagePoint:n,accelKey:i,source:o}){const r=t.getShape(e);if(!ed(r))return"stop";const s=((e,t)=>({start:id(e,t,"start").handlePagePoint,end:id(e,t,"end").handlePagePoint}))(t,r),a=Nl(s.start,s.end,n),l=t.computeShapeLocalToPageTransform(r).tryInvert();if(!l)return"stop";const d=Nl(l.applyToPoint(s.start),l.applyToPoint(s.end),l.applyToPoint(n)),c=0===(({bend:e,bypassSnap:t,zoom:n})=>t?e:Math.abs(e)*n<=6?0:e)({bend:a,bypassSnap:i,zoom:t.cameraZoomSignal.get()})?0:d;return t.commands.updateShapes([{id:r.id,props:{bend:c}}],{source:o}),"continue"}}))({shapeId:n.id}):null:null}}],setup(e){e.setTerminalBindingResolver(Fd),e.tools.register("arrow",e=>new OP(e),{shortcut:"a"})}},render:{id:"land.arrow.react",shapeRenderers:[{type:"arrow",component:function({shape:e,editor:t}){
69
- return Ax(jd,{shape:e,editor:t,idPrefix:"arrow",stroke:F(e.props.stroke),strokeWidth:e.props.strokeWidth})},hoverComponent:function({shape:e,editor:t,strokeWidth:n}){
70
- return Ax(jd,{dataUi:"arrow-hover-outline",shape:e,editor:t,idPrefix:"arrow-hover",stroke:Dw,strokeWidth:n,vectorEffect:"non-scaling-stroke"})}}]},setup:e=>{e.get(yP).add(DP),e.get(uP).add(_d("stroke"),_d("strokeWidth"),{id:"arrow.set-direction",getAvailability:e=>"arrow"!==e.selection.commonShapeType?"inapplicable":e.selection.count>0?"enabled":"disabled",getValue:e=>(e=>{let t;for(const n of e){if("arrow"!==n.type)continue;const e=n.props,i=Hd(e.headStart,e.headEnd);if(void 0===t)t=i;else if(t!==i)return null}return t??null})(e.selection.selectedShapes),run({context:e,value:t}){const n=Kd(t);if(!n)return;const i=e.selection.selectedShapes.filter(e=>"arrow"===e.type).filter(e=>!e.isLocked).map(e=>({id:e.id,props:n}));i.length>0&&e.editor.commands.updateShapes(i,{source:"user"})}},Wd("stroke"),Wd("strokeWidth"),{id:"arrow.default-direction",getAvailability:e=>"arrow"===e.tool.activeToolId?"enabled":"inapplicable",getValue(e){const t=e.editor.getDefaultShapeProps("arrow");return Hd(t.headStart,t.headEnd)},run({context:e,value:t}){const n=Kd(t);n&&e.editor.updateDefaultShapeProps("arrow",n)}}),e.get(vP).add({id:"arrow.tool-toolbar",channel:wP.toolSwitcher,order:40,actionIds:[xP],getGroups:e=>[{id:"arrow.tools",items:[{kind:"button",id:"arrow.tool.arrow",actionId:xP,value:"arrow",label:"Arrow",shortcut:e.editor.shortcuts.getToolShortcutLabel("arrow"),icon:"arrow-right",dataUi:"arrow-tool-button"}]}]},{id:"arrow.default-style.tool-toolbar",channel:wP.toolOptions,order:41,actionIds:["arrow.default-stroke","arrow.default-strokeWidth","arrow.default-direction"],when:e=>"arrow"===e.tool.activeToolId,getGroups:()=>Nd({strokeActionId:"arrow.default-stroke",strokeWidthActionId:"arrow.default-strokeWidth",directionActionId:"arrow.default-direction",dataUiPrefix:"arrow-default"})},{id:"arrow.selection-toolbar",channel:wP.selectionProperties,order:20,actionIds:["arrow.set-stroke","arrow.set-strokeWidth","arrow.set-direction"],when:e=>"arrow"===e.selection.commonShapeType,getGroups:()=>Nd({strokeActionId:"arrow.set-stroke",strokeWidthActionId:"arrow.set-strokeWidth",directionActionId:"arrow.set-direction",dataUiPrefix:"arrow"})})}},HP=cl("plugin-frame.api"),KP={token:HP,create:({editor:e})=>e.shapeUtils.has("frame")?(e=>({create(t){const n=e.getDefaultShapeProps("frame"),[i]=e.commands.createShapes([{type:"frame",x:t.x,y:t.y,meta:t.meta?{...t.meta}:void 0,props:{...n,w:t.w??n.w,h:t.h??n.h,name:t.name??n.name,fill:t.fill??n.fill,stroke:t.stroke??n.stroke,strokeWidth:t.strokeWidth??n.strokeWidth}}],{source:"user"});return i&&"frame"===i.type?{id:i.id,type:i.type}:null},moveShapesToFrame(t,n){const i=e.getShape(n);if(!i||"frame"!==i.type)return[];const o=t.filter(t=>{const n=e.getShape(t);return!!n&&!n.isLocked});return 0===o.length?[]:(e.commands.reparentShapes({ids:o,parentId:n},{source:"user"}),o)}}))(e):null},YP=class extends uw{constructor(e){super(e,"frame"),this.initial="idle",this.addChild(new qP(e,this)),this.addChild(new jP(e,this))}getDefaultProps(){return this.editor.getDefaultShapeProps("frame")}},qP=class extends uw{constructor(e,t){super(e,"idle",t)}onEnter(){this.editor.clearSelectionTransients()}onPointerDown(e){this.transition("creating",{originPagePoint:e.pagePoint.clone(),currentPagePoint:e.pagePoint.clone(),shapeId:null,shiftKey:e.shiftKey})}},jP=class extends uw{tool;info=null;operation=null;constructor(e,t){super(e,"creating",t),this.tool=t}onEnter(e){this.info=e,this.operation=this.editor.operations.begin({kind:"frame.create",label:"shape.create",source:"user",history:"record"})}onPointerMove(e){this.updateShape(e.pagePoint,e.shiftKey)}onPointerUp(e){this.info?(this.updateShape(e.pagePoint,e.shiftKey,!0),this.commitOperation(),this.editor.isToolLocked()?this.transition("idle"):this.editor.commands.setActiveTool("select",{source:"system"})):this.transition("idle")}onCancel(){this.cancelOperation(),this.transition("idle")}onExit(){this.cancelOperation(),this.info=null}commitOperation(){const e=this.operation;this.operation=null,e?.commit()}cancelOperation(){const e=this.operation;this.operation=null,e?.isActive&&e.cancel()}updateShape(e,t,n=!1){if(!this.info)return;this.info.currentPagePoint=e.clone(),this.info.shiftKey=t;const i=this.info.originPagePoint.dist(e);if(!this.info.shapeId&&i<4){if(!n)return;const t=(o=e,r=this.tool.getDefaultProps(),new aI(o.x-r.w/2,o.y-r.h/2,r.w,r.h)),i=this.createShape(t);return void(this.info.shapeId=i.id)}var o,r;const s=((e,t,n,i)=>{let o=t.x-e.x,r=t.y-e.y;if(n){const e=i.w/i.h,t=Math.abs(o),n=Math.abs(r);0===n||t/Math.max(n,1)>=e?r=t/e*(r<0?-1:1):o=n*e*(o<0?-1:1)}const s=new sI(e.x+o,e.y+r);return new aI(Math.min(e.x,s.x),Math.min(e.y,s.y),Math.max(Math.abs(s.x-e.x),1),Math.max(Math.abs(s.y-e.y),1))})(this.info.originPagePoint,e,t,this.tool.getDefaultProps());if(!this.info.shapeId){const e=this.createShape(s);return void(this.info.shapeId=e.id)}this.editor.commands.updateShapes([{id:this.info.shapeId,x:s.x,y:s.y,props:{w:s.w,h:s.h}}],{source:"user"})}createShape(e){const[t]=this.editor.commands.createShapes([{type:"frame",x:e.x,y:e.y,props:{...this.tool.getDefaultProps(),w:e.w,h:e.h}}],{source:"user",autoReparent:!1});if(!t||"frame"!==t.type)throw new Error("Failed to create frame shape");return this.editor.commands.setSelectedShapeIds([t.id],{source:"system"}),t}},VP=[{id:"none",value:E("transparent"),label:"None",hexColor:"#f8fafc",opacity:0},{value:M("fill-blue"),label:"Blue",id:"blue",hexColor:"#dbeafe"},{value:M("fill-green"),label:"Green",id:"green",hexColor:"#dcfce7"},{value:M("fill-amber"),label:"Amber",id:"amber",hexColor:"#fff7ed"}],GP=[{value:M("stroke-muted"),label:"Slate",id:"muted",hexColor:"#94a3b8"},{value:M("stroke-blue"),label:"Blue",id:"blue",hexColor:"#1d4ed8"},{value:M("stroke-green"),label:"Green",id:"green",hexColor:"#15803d"},{value:M("stroke-orange"),label:"Orange",id:"orange",hexColor:"#ea580c"}],ZP='[data-ui="frame-canvas-heading"]',QP=["Inter","ui-sans-serif","system-ui","-apple-system","BlinkMacSystemFont","'Segoe UI'","sans-serif"].join(", "),JP={id:"land.frame.name.dom-events",handle({event:e}){const t=e.target;return t instanceof Element&&t.closest(ZP)?"handled":"continue"},getCursor:({element:e})=>e?.closest(ZP)?"text":void 0},ek={id:"frame",provides:[HP],editor:{id:"land.frame",shapeCapabilities:[{type:"frame",schemaProps:["w","h","name","fill","stroke","strokeWidth"],reactRenderer:"supported",toolbarEntry:"supported",notes:["Frame renderer, SVG exporter, creation tool, selected-frame style toolbar, selected-child order badge, and minimal single-child sibling reorder controls live in the frame plugin package. ParentId-based child query, child-index ordering, containing-parent query, clipped query bounds, point-in-clip checks, host clipping, select-drag containment, export descendant traversal, and clipped child export have preflights. Richer hover/drag reorder UI remains deferred."]}],shapeUtils:[new class extends cw{type="frame";getDefaultProps(){return{w:640,h:360,name:"",fill:E("transparent"),stroke:M("stroke-muted"),strokeWidth:1}}validateProps(e){const t=e&&"object"==typeof e?e:{},n=this.getDefaultProps();return{w:Math.max(1,Zd(t.w,n.w)),h:Math.max(1,Zd(t.h,n.h)),name:"string"==typeof t.name?t.name:n.name,fill:$(t.fill,n.fill),stroke:$(t.stroke,n.stroke),strokeWidth:Math.max(0,Zd(t.strokeWidth,n.strokeWidth))}}getLocalBounds(e){return new aI(0,0,e.props.w,e.props.h)}getRenderBounds(e){return Gd(e)}getPointHitTestBounds(e){return this.getPositionedBounds(e).expand(3)}canEdit(e){return!0}canReceiveChildren(e){return!0}canSnapChildrenToSelf(e){return!0}canReceiveTerminalBinding(e){return!0}getSelectionResizeHandleIds(e,t){return XI}shouldRotateDescendants(e){return!0}getChildClipLocalBounds(e){return this.getLocalBounds(e)}canSelectByBrush(e,t){return super.isWrappedByBrush(e,t)}hitTest(e,t){return Qd(this.getPositionedBounds(e),t,6)}hitTestBindingTarget(e,t){return this.getPositionedBounds(e).containsPoint(t)}hitTestLineSegment(e,t){return((e,t,n,i)=>{const o=i/2;if(Qd(e,t,i)||Qd(e,n,i))return!0;const r=[new sI(e.minX,e.minY),new sI(e.maxX,e.minY),new sI(e.maxX,e.maxY),new sI(e.minX,e.maxY)];for(let s=0;s<r.length;s+=1){const e=r[s],i=r[(s+1)%r.length];if(e&&i&&w(t,n,e,i)<=o)return!0}return!1})(this.getPositionedBounds(e),t.positionedStart,t.positionedEnd,Math.max(6,t.positionedMargin))}}],shapeSvgExporters:[new class{type="frame";toSvg(e,t){const{fill:n,stroke:i,strokeWidth:o,w:r,h:s,name:a}=e.props,l=t.resolveColor(i),d=o/2;return{tag:"g",children:[{tag:"rect",attrs:{x:d,y:d,width:Math.max(r-o,0),height:Math.max(s-o,0),fill:t.resolveColor(n),stroke:l,"stroke-width":o,"stroke-linejoin":"round","stroke-linecap":"round"}},{tag:"text",attrs:{x:0,y:-8,fill:l,"font-family":"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif","font-size":12,"font-weight":400},children:[Vd(a)]}]}}}],setup(e){e.tools.register("frame",e=>new YP(e),{shortcut:"f"})}},render:{id:"land.frame.react",domEventGuards:[JP],shapeRenderers:[{type:"frame",component:function({editor:e,shape:t,shapeEditingSession:n}){const i=n?.shapeId===t.id;
71
- return Bx("div",{style:{height:"100%",overflow:"visible",position:"relative",width:"100%"},children:[Ax(ac,{shape:t,hideName:!0}),Ax(lc,{editor:e,shape:t,isEditing:i})]})},hoverComponent:function({shape:e,strokeWidth:t}){const{h:n,w:i}=e.props,o=Gd(e);
72
- return Ax("svg",{"data-ui":"frame-hover-outline",width:"100%",height:"100%",viewBox:`${o.x} ${o.y} ${o.w} ${o.h}`,style:{display:"block",overflow:"visible",pointerEvents:"none"},shapeRendering:"geometricPrecision",children:Ax("rect",{x:0,y:0,width:i,height:n,fill:"none",stroke:Dw,strokeWidth:t,strokeLinejoin:"round",strokeLinecap:"round",vectorEffect:"non-scaling-stroke"})})}}]},setup:e=>{e.get(yP).add(KP),e.get(uP).add(Jd("fill"),Jd("stroke"),Jd("strokeWidth"),ec("fill"),ec("stroke"),ec("strokeWidth"),{id:"frame.rename",getAvailability(e){if(1!==e.selection.count||"frame"!==e.selection.singleShapeType)return"inapplicable";const[t]=e.selection.selectedShapes;return"frame"!==t?.type||t.isLocked?"disabled":"enabled"},getValue(e){const[t]=e.selection.selectedShapes;return"frame"===t?.type?t.props.name:null},run({context:e,value:t}){const[n]=e.selection.selectedShapes;"frame"===n?.type&&"string"==typeof t&&e.editor.commands.updateShapes([{id:n.id,props:{name:t}}],{source:"user"})}},nc("backward"),nc("forward")),e.get(vP).add({id:"frame.tool-toolbar",channel:wP.toolSwitcher,order:60,actionIds:[xP],getGroups:e=>[{id:"frame.tools",items:[{kind:"button",id:"frame.tool.frame",actionId:xP,value:"frame",label:"Frame",shortcut:e.editor.shortcuts.getToolShortcutLabel("frame"),icon:"frame",dataUi:"frame-tool-button"}]}]},{id:"frame.default-style.tool-toolbar",channel:wP.toolOptions,order:61,actionIds:["frame.default-fill","frame.default-stroke","frame.default-strokeWidth"],when:e=>"frame"===e.tool.activeToolId,getGroups:()=>tc({fillActionId:"frame.default-fill",strokeActionId:"frame.default-stroke",strokeWidthActionId:"frame.default-strokeWidth",dataUiPrefix:"frame-default"})},{id:"frame.selection-toolbar",channel:wP.selectionProperties,order:20,actionIds:["frame.set-fill","frame.set-stroke","frame.set-strokeWidth","frame.rename"],when:e=>"frame"===e.selection.commonShapeType,getGroups:e=>[...1===e.selection.count?[{id:"frame.name",items:[{kind:"text-input",id:"frame.name",actionId:"frame.rename",label:"Frame name",placeholder:"Frame",dataUi:"frame-name-input"}]}]:[],...tc({fillActionId:"frame.set-fill",strokeActionId:"frame.set-stroke",strokeWidthActionId:"frame.set-strokeWidth",dataUiPrefix:"frame"})]},{id:"frame.child-order.selection-toolbar",channel:wP.selectionProperties,order:30,actionIds:["frame.child-order.backward","frame.child-order.forward"],when:e=>"frame"===sc(e),getGroups(e){const t=e.editor.getSelectionSiblingOrderState();return[{id:"frame.child-order",presentation:"overflow",items:[...t?[{kind:"badge",id:"frame.child-order-status",label:`${t.index+1} / ${t.count}`,dataUi:"frame-child-order-status"}]:[],{kind:"button",id:"frame.child-order.backward",actionId:"frame.child-order.backward",label:"Send backward",icon:"stack-backward",dataUi:"frame-child-send-backward-button"},{kind:"button",id:"frame.child-order.forward",actionId:"frame.child-order.forward",label:"Bring forward",icon:"stack-forward",dataUi:"frame-child-bring-forward-button"}]}]}}),e.get(fP).add({id:"frame.child-order.context-menu",target:"selection",order:40,actionIds:["frame.child-order.backward","frame.child-order.forward"],when:e=>"frame"===sc(e),getSections(e){const t=e.editor.getSelectionSiblingOrderState();return[{id:"frame.child-order-context-menu",title:"Frame child",items:[...t?[{kind:"badge",id:"frame.child-order-status",label:`${t.index+1} / ${t.count}`,dataUi:"context-menu-frame-child-order-status"}]:[],{kind:"command",id:"frame.child-order.forward",actionId:"frame.child-order.forward",label:"Bring forward",icon:"stack-forward",dataUi:"context-menu-frame-child-bring-forward-button"},{kind:"command",id:"frame.child-order.backward",actionId:"frame.child-order.backward",label:"Send backward",icon:"stack-backward",dataUi:"context-menu-frame-child-send-backward-button"}]}]}})}},tk=class extends uw{geo;constructor(e,t,n){super(e,t),this.geo=n,this.initial="idle",this.addChild(new nk(e,this)),this.addChild(new ik(e,this))}getDefaultProps(){return{...this.editor.getDefaultShapeProps("geo"),geo:this.geo}}onEnter(){this.editor.updateDefaultShapeProps("geo",{geo:this.geo})}},nk=class extends uw{constructor(e,t){super(e,"idle",t)}onEnter(){this.editor.clearSelectionTransients()}onPointerDown(e){this.transition("creating",{originPagePoint:e.pagePoint.clone(),currentPagePoint:e.pagePoint.clone(),shapeId:null,shiftKey:e.shiftKey})}},ik=class extends uw{tool;info=null;operation=null;constructor(e,t){super(e,"creating",t),this.tool=t}onEnter(e){this.info=e,this.operation=this.editor.operations.begin({kind:"geo.create",label:"shape.create",source:"user",history:"record"})}onPointerMove(e){this.updateShape(e.pagePoint,e.shiftKey)}onPointerUp(e){this.info?(this.updateShape(e.pagePoint,e.shiftKey,!0),this.info.shapeId&&we(this.editor,this.info.shapeId,{source:"user"}),this.commitOperation(),this.editor.isToolLocked()?this.transition("idle"):this.editor.commands.setActiveTool("select",{source:"system"})):this.transition("idle")}onCancel(){this.cancelOperation(),this.transition("idle")}onExit(){this.cancelOperation(),this.info=null}commitOperation(){const e=this.operation;this.operation=null,e?.commit()}cancelOperation(){const e=this.operation;this.operation=null,e?.isActive&&e.cancel()}updateShape(e,t,n=!1){if(!this.info)return;this.info.currentPagePoint=e.clone(),this.info.shiftKey=t;const i=this.info.originPagePoint.dist(e);if(!this.info.shapeId&&i<4){if(!n)return;const t=(o=e,r=this.tool.getDefaultProps(),new aI(o.x-r.w/2,o.y-r.h/2,r.w,r.h)),i=this.createShape(t);return void(this.info.shapeId=i.id)}var o,r;const s=((e,t,n)=>{let i=t.x-e.x,o=t.y-e.y;if(n){const e=Math.max(Math.abs(i),Math.abs(o));i=(i<0?-1:1)*e,o=(o<0?-1:1)*e}const r=new sI(e.x+i,e.y+o);return new aI(Math.min(e.x,r.x),Math.min(e.y,r.y),Math.max(Math.abs(r.x-e.x),1),Math.max(Math.abs(r.y-e.y),1))})(this.info.originPagePoint,e,t);if(!this.info.shapeId){const e=this.createShape(s);return void(this.info.shapeId=e.id)}this.editor.commands.updateShapes([{id:this.info.shapeId,x:s.x,y:s.y,props:{w:s.w,h:s.h}}],{source:"user"})}createShape(e){const[t]=this.editor.commands.createShapes([{type:"geo",x:e.x,y:e.y,props:{...this.tool.getDefaultProps(),w:e.w,h:e.h}}],{source:"user",autoReparent:!1});if(!t)throw new Error("Failed to create geo shape");return this.editor.commands.setSelectedShapeIds([t.id],{source:"system"}),t}},ok=class extends tk{constructor(e){super(e,"rectangle","rectangle")}},rk=class extends tk{constructor(e){super(e,"ellipse","ellipse")}},sk=class extends tk{constructor(e){super(e,"rhombus","rhombus")}},ak=class extends tk{constructor(e){super(e,"triangle","triangle")}},lk=class extends tk{constructor(e){super(e,"hexagon","hexagon")}},dk=class extends tk{constructor(e){super(e,"star","star")}},ck=cl("plugin-geo.api"),uk={token:ck,create:({editor:e})=>e.shapeUtils.has("geo")?(e=>({createRectangle:t=>dc(e,"rectangle",t),createEllipse:t=>dc(e,"ellipse",t),createRhombus:t=>dc(e,"rhombus",t),createTriangle:t=>dc(e,"triangle",t),createHexagon:t=>dc(e,"hexagon",t),createStar:t=>dc(e,"star",t)}))(e):null},hk=["rectangle","ellipse","rhombus","triangle","hexagon","star"],pk=["solid","dashed","dotted","none"],gk=["corner","edge_midpoint","corner","edge_midpoint","center","edge_midpoint","corner","edge_midpoint","corner"],fk=[{value:M("fill-blue"),label:"Blue",id:"blue",hexColor:"#dbeafe"},{value:M("fill-green"),label:"Green",id:"green",hexColor:"#dcfce7"},{value:M("fill-red"),label:"Red",id:"red",hexColor:"#fee2e2"},{value:M("fill-white"),label:"White",id:"white",hexColor:"#f8fafc"}],mk=[{value:M("stroke-blue"),label:"Blue",id:"blue",hexColor:"#1d4ed8"},{value:M("stroke-green"),label:"Green",id:"green",hexColor:"#15803d"},{value:M("stroke-red"),label:"Red",id:"red",hexColor:"#dc2626"},{value:M("stroke-slate"),label:"Slate",id:"slate",hexColor:"#334155"}],Sk=[{value:"solid",label:"Solid",icon:"minus"},{value:"dashed",label:"Dashed",icon:"stroke-dashed"},{value:"dotted",label:"Dotted",icon:"stroke-dotted"},{value:"none",label:"None",icon:"x"}],yk=[{value:"rectangle",label:"Rectangle",icon:"square",dataUiPrefix:"rectangle"},{value:"ellipse",label:"Ellipse",icon:"circle",dataUiPrefix:"ellipse"},{value:"rhombus",label:"Rhombus",icon:"square-rotated",dataUiPrefix:"rhombus"},{value:"triangle",label:"Triangle",icon:"triangle",dataUiPrefix:"triangle"},{value:"hexagon",label:"Hexagon",icon:"hexagon",dataUiPrefix:"hexagon"},{value:"star",label:"Star",icon:"star",dataUiPrefix:"star"}],bk={id:"geo",provides:[ck],editor:{id:"land.geo",shapeCapabilities:[{type:"geo",schemaProps:["w","h","geo","fill","stroke","strokeStyle","strokeWidth","cornerRadiusPercent"],reactRenderer:"supported",toolbarEntry:"supported",notes:["Toolbar covers built-in geo variants through geo props."]}],shapeUtils:[new class extends cw{type="geo";getDefaultProps(){return{w:160,h:108,geo:"rectangle",fill:M("fill-slate"),stroke:M("stroke-slate"),strokeStyle:"solid",strokeWidth:2,cornerRadiusPercent:12}}validateProps(e){const t=e&&"object"==typeof e?e:{},n=this.getDefaultProps();return{w:Math.max(24,Ic(t.w,n.w)),h:Math.max(24,Ic(t.h,n.h)),geo:bc(t.geo)?t.geo:n.geo,fill:$(t.fill,n.fill),stroke:$(t.stroke,n.stroke),strokeStyle:xc(t.strokeStyle)?t.strokeStyle:n.strokeStyle,strokeWidth:Math.max(1,Ic(t.strokeWidth,n.strokeWidth)),cornerRadiusPercent:uc(t.cornerRadiusPercent,n.cornerRadiusPercent)}}getLocalBounds(e){return new aI(0,0,e.props.w,e.props.h)}canReceiveTerminalBinding(e){return!0}getPositionedOutlineVertices(e){return cc(this.getPositionedBounds(e),e.props.geo,{cornerRadiusPercent:e.props.cornerRadiusPercent})}getHandleSnapGeometry(e){return{points:Mc(e),outline:Tc(e)}}hitTest(e,t){const n=this.getPositionedBounds(e);switch(e.props.geo){case"ellipse":{const e=n.w/2,i=n.h/2;if(e<=0||i<=0)return!1;const o=t.x-n.center.x,r=t.y-n.center.y;return o*o/(e*e)+r*r/(i*i)<=1}case"rhombus":case"triangle":case"hexagon":case"star":return gc(t,pc(n,e.props.geo));default:return gc(t,pc(n,"rectangle",{cornerRadiusPercent:e.props.cornerRadiusPercent}))}}hitTestLineSegment(e,t){const n=this.getPositionedBounds(e);switch(e.props.geo){case"ellipse":return((e,t,n,i)=>{const o=e.center,r=e.w/2+i,s=e.h/2+i;if(r<=0||s<=0)return!1;const a=n.sub(t),l=t.sub(o),d=a.x/r,c=a.y/s,u=l.x/r,h=l.y/s,p=d*d+c*c,g=2*(u*d+h*c),f=u*u+h*h-1;if(f<=0)return!0;const m=g*g-4*p*f;if(0===p||m<0)return!1;const S=Math.sqrt(m),y=(-g-S)/(2*p),b=(-g+S)/(2*p);return y>=0&&y<=1||b>=0&&b<=1})(n,t.positionedStart,t.positionedEnd,t.positionedMargin);case"rectangle":case"rhombus":case"triangle":case"hexagon":case"star":{const i=pc(n,e.props.geo,{cornerRadiusPercent:e.props.cornerRadiusPercent});return this.hitTest(e,t.positionedStart)||this.hitTest(e,t.positionedEnd)||((e,t,n,i)=>{if(n.length<3)return!1;for(let o=0;o<n.length;o+=1){const r=n[o],s=n[(o+1)%n.length];if(r&&s&&Pc(e,t,r,s)<=i)return!0}return!1})(t.positionedStart,t.positionedEnd,i,t.positionedMargin)}default:return super.hitTestLineSegment(e,t)}}resolveBindingPoint(e,t){const n=t.editor.computeShapePositionedToPageTransform(e),i=n.tryInvert();if(!i)return t.rawPagePoint;const o=function(e,t,n){const i=new aI(e.x,e.y,e.props.w,e.props.h);switch(e.props.geo){case"ellipse":return((e,t,n)=>{const i=e.w/2,o=e.h/2;if(i<=0||o<=0)return null;const r=t.sub(e.center),s=n.sub(t),a=s.x/i,l=s.y/o,d=r.x/i,c=r.y/o,u=a*a+l*l,h=2*(d*a+c*l),p=h*h-4*u*(d*d+c*c-1);if(0===u||p<0)return null;const g=Math.sqrt(p),f=[(-h-g)/(2*u),(-h+g)/(2*u)].filter(e=>e>1e-6&&e<=1).sort((e,t)=>e-t)[0];return void 0===f?null:t.add(s.mul(f))})(i,t,n);case"rectangle":return Cc(t,n,pc(i,e.props.geo,{cornerRadiusPercent:e.props.cornerRadiusPercent}));default:return Cc(t,n,pc(i,e.props.geo))}}(e,i.applyToPoint(t.rawPagePoint),i.applyToPoint(t.oppositePagePoint));return o?n.applyToPoint(o):t.rawPagePoint}}],shapeSvgExporters:[new class{type="geo";toSvg(e,t){const{geo:n,fill:i,stroke:o,strokeStyle:r,strokeWidth:s,w:a,h:l}=e.props,d="none"===r?0:s,c=d/2,u=Math.max(a-d,0),h=Math.max(l-d,0),p={fill:t.resolveColor(i),stroke:"none"===r?"none":t.resolveColor(o),"stroke-width":d,"stroke-dasharray":Ec(r,s),"stroke-linejoin":"round","stroke-linecap":"round"};if("ellipse"===n)return{tag:"ellipse",attrs:{...p,cx:a/2,cy:l/2,rx:u/2,ry:h/2}};if("rectangle"!==n){const e=pc(new aI(c,c,u,h),n).map(e=>`${Ac(e.x)},${Ac(e.y)}`).join(" ");return{tag:"polygon",attrs:{...p,points:e}}}const g=hc({cornerRadiusPercent:e.props.cornerRadiusPercent,w:u,h:h});return{tag:"rect",attrs:{...p,x:c,y:c,width:u,height:h,rx:g,ry:g}}}}],setup(e){e.tools.register("rectangle",e=>new ok(e),{shortcut:"r"}),e.tools.register("ellipse",e=>new rk(e),{shortcut:"o"}),e.tools.register("rhombus",e=>new sk(e),{shortcut:"d"}),e.tools.register("triangle",e=>new ak(e)),e.tools.register("hexagon",e=>new lk(e)),e.tools.register("star",e=>new dk(e))}},render:{id:"land.geo.react",shapeRenderers:[{type:"geo",component:function({shape:e}){
73
- return Ax(_c,{shape:e})},hoverComponent:function({shape:e,strokeWidth:t}){const{geo:n,h:i,w:o}=e.props,r=hc({cornerRadiusPercent:e.props.cornerRadiusPercent,w:o,h:i}),s="ellipse"===n||"rectangle"===n?null:pc(new aI(0,0,o,i),n).map(e=>`${e.x},${e.y}`).join(" "),a={fill:"none",stroke:Dw,strokeWidth:t,strokeLinejoin:"round",strokeLinecap:"round",vectorEffect:"non-scaling-stroke"};
74
- return Ax("svg",{"data-ui":"geo-hover-outline",width:"100%",height:"100%",viewBox:`0 0 ${o} ${i}`,style:{display:"block",overflow:"visible",pointerEvents:"none"},shapeRendering:"geometricPrecision",children:"ellipse"===n?Ax("ellipse",{...a,cx:o/2,cy:i/2,rx:o/2,ry:i/2}):"rectangle"!==n?Ax("polygon",{...a,points:s??""}):Ax("rect",{...a,x:0,y:0,width:o,height:i,rx:r,ry:r})})}}]},setup:e=>{e.get(yP).add(uk),e.get(uP).add({id:"geo.set-kind",getAvailability:e=>"geo"!==e.selection.commonShapeType?"inapplicable":e.selection.count>0?"enabled":"disabled",getValue:e=>$c(e.selection.selectedShapes),run({context:e,value:t}){if(!bc(t))return;const n=e.selection.selectedShapes.filter(yc).filter(e=>!e.isLocked).map(e=>({id:e.id,props:{geo:t}}));0!==n.length&&e.editor.commands.updateShapes(n,{source:"user"})}},Bc("fill"),Bc("stroke"),Bc("strokeStyle"),Bc("strokeWidth"),{id:"geo.set-cornerRadiusPercent",getAvailability:e=>"rectangle"!==$c(e.selection.selectedShapes)?"inapplicable":e.selection.selectedShapes.some(e=>yc(e)&&"rectangle"===e.props.geo&&!e.isLocked)?"enabled":"disabled",getValue(e){const t=(e=>{let t;for(const n of e){if(!yc(n)||"rectangle"!==n.props.geo)continue;const e=uc(n.props.cornerRadiusPercent);if(void 0!==t){if(t!==e)return null}else t=e}return t??null})(e.selection.selectedShapes);return null===t?null:(e=>Number(e.toFixed(2)).toString())(t)},run({context:e,value:t}){const n=Fc(t);if(null===n)return;const i=uc(n),o=e.selection.selectedShapes.filter(yc).filter(e=>"rectangle"===e.props.geo&&!e.isLocked).map(e=>({id:e.id,props:{cornerRadiusPercent:i}}));0!==o.length&&e.editor.commands.updateShapes(o,{source:"user"})}},Rc("fill"),Rc("stroke"),Rc("strokeStyle"),Rc("strokeWidth")),e.get(vP).add({id:"geo.tool-toolbar",channel:wP.toolSwitcher,order:20,actionIds:[xP],getGroups:e=>[{id:"geo.tools",items:[{kind:"segmented",id:"geo.tool-picker",actionId:xP,options:yk.map(e=>({value:e.value,label:e.label,icon:e.icon,dataUi:`${e.dataUiPrefix}-tool-option`}))}]}]},{id:"geo.default-style.tool-toolbar",channel:wP.toolOptions,order:21,actionIds:["geo.default-fill","geo.default-stroke","geo.default-strokeStyle","geo.default-strokeWidth"],when:e=>Nc(e.tool.activeToolId),getGroups:()=>Lc({fillActionId:"geo.default-fill",strokeActionId:"geo.default-stroke",strokeStyleActionId:"geo.default-strokeStyle",strokeWidthActionId:"geo.default-strokeWidth",dataUiPrefix:"geo-default"})},{id:"geo.selection-toolbar",channel:wP.selectionProperties,order:20,actionIds:["geo.set-kind","geo.set-fill","geo.set-stroke","geo.set-strokeStyle","geo.set-strokeWidth","geo.set-cornerRadiusPercent"],when:e=>"geo"===e.selection.commonShapeType,getGroups(e){const t=$c(e.selection.selectedShapes);return[{id:"geo.shape-kind",items:[{kind:"segmented",id:"geo.shape-kind",actionId:"geo.set-kind",options:yk.map(e=>({value:e.value,label:e.label,icon:e.icon,dataUi:`${e.dataUiPrefix}-shape-button`}))}]},...Lc({fillActionId:"geo.set-fill",strokeActionId:"geo.set-stroke",strokeStyleActionId:"geo.set-strokeStyle",strokeWidthActionId:"geo.set-strokeWidth",dataUiPrefix:"geo"}),..."rectangle"===t?[(n="geo.set-cornerRadiusPercent",i="geo",{id:`${i}.style-corner-radius-percent`,items:[{kind:"text-input",id:`${i}.corner-radius-percent`,actionId:n,label:"Corner radius %",icon:"border-corner-pill",placeholder:"0",suffix:"%",validate:Uc,dataUi:`${i}-corner-radius-percent-control`}]})]:[]];var n,i}})}},xk=jo("canvas-kit.tool-actions"),Ik=[{id:xP,getValue:e=>e.tool.activeToolId,run({context:e,value:t}){"string"==typeof t&&e.editor.tools.hasTool(t)&&e.editor.setActiveTool(t,"system")}},{id:IP,getValue:e=>e.tool.isToolLocked,run({context:e}){e.editor.toggleToolLocked("system")}}],wk={id:"canvas-kit.tool-actions",provides:[xk],setup(e){e.get(uP).add(...Ik),e.get(hP).provide(xk,!0)}},vk=jo("canvas-kit.import-host"),Pk=Go("land.canvas-kit.plugin-setup.lifecycle"),kk=Go("land.canvas-kit.plugin-setup.persistence"),Ck=Go("land.canvas-kit.plugin-setup.ui"),Tk=yP,Mk=Go("land.canvas-kit.plugin-setup.assets"),Ek={id:"canvas-kit.import-host",provides:[vk],setup(e){e.get(hP).provide(vk,!0),e.get(Ck).addComponents({id:"canvas-kit.import-host",order:50,component:Kc})}},Ak=jo("canvas-kit.clipboard-runtime"),Bk=ul("canvas-kit.clipboard-service"),Rk="system.clipboard.copy",Lk="system.clipboard.cut",$k="system.clipboard.paste",Fk="system.clipboard.paste-at-point",Uk={id:"canvas-kit.clipboard-runtime",provides:[Ak,Bk],setup(e){const t=e.get(bP);t.add({token:Bk,create(){let e=null;return{async write(t){e=t},read:async()=>e,getMemoryPayload:()=>e}}}),e.get(uP).add(...function(e){return[{id:Rk,getAvailability:t=>0===t.selection.count?"inapplicable":Qc(e)?"enabled":"disabled",run({context:t}){Jc({context:t,services:e})}},{id:Lk,getAvailability:t=>0===t.selection.count?"inapplicable":Qc(e)?"enabled":"disabled",run({context:t}){(async({context:e,services:t})=>{await Jc({context:e,services:t})&&e.editor.deleteSelection("user")})({context:t,services:e})}},{id:$k,getAvailability:()=>Qc(e)?.getMemoryPayload()?"enabled":"inapplicable",run({context:t}){eu({context:t,services:e})}},{id:Fk,getAvailability:t=>nu(t)&&Qc(e)?.getMemoryPayload()?"enabled":"inapplicable",run({context:t}){nu(t)&&eu({context:t,services:e,atMenuPoint:!0})}}]}(t)),e.get(hP).provide(Ak,!0)}},Dk=Sx(null),Ok=Math.min,zk=Math.max,Nk=Math.round,_k=Math.floor,Wk=e=>({x:e,y:e}),Xk={left:"right",right:"left",bottom:"top",top:"bottom"},Hk=["left","right"],Kk=["right","left"],Yk=["top","bottom"],qk=["bottom","top"],jk=new Set(["left","top"]),Vk=/transform|translate|scale|rotate|perspective|filter/,Gk=/paint|layout|strict|content/,Zk=e=>!!e&&"none"!==e,Qk=Wk(0),Jk={convertOffsetParentRelativeRectToViewportRelativeRect:e=>{let{elements:t,rect:n,offsetParent:i,strategy:o}=e;const r="fixed"===o,s=Cu(i),a=!!t&&Lu(t.floating);if(i===s||a&&r)return n;let l={scrollLeft:0,scrollTop:0},d=Wk(1);const c=Wk(0),u=Eu(i);if((u||!u&&!r)&&(("body"!==Pu(i)||Bu(s))&&(l=Ou(i)),u)){const e=qu(i);d=Ku(i),c.x=e.x+i.clientLeft,c.y=e.y+i.clientTop}const h=!s||u||r?Wk(0):Vu(s,l);return{width:n.width*d.x,height:n.height*d.y,x:n.x*d.x-l.scrollLeft*d.x+c.x+h.x,y:n.y*d.y-l.scrollTop*d.y+c.y+h.y}},getDocumentElement:Cu,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:i,strategy:o}=e;const r=[..."clippingAncestors"===n?Lu(t)?[]:Qu(t,this._c):[].concat(n),i],s=Gu(t,r[0],o);let a=s.top,l=s.right,d=s.bottom,c=s.left;for(let u=1;u<r.length;u++){const e=Gu(t,r[u],o);a=zk(e.top,a),l=Ok(e.right,l),d=Ok(e.bottom,d),c=zk(e.left,c)}return{width:l-c,height:d-a,x:c,y:a}},getOffsetParent:nh,getElementRects:async function(e){const t=this.getOffsetParent||nh,n=this.getDimensions,i=await n(e.floating);return{reference:Ju(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:i.width,height:i.height}}},getClientRects:e=>Array.from(e.getClientRects()),getDimensions:e=>{const{width:t,height:n}=Xu(e);return{width:t,height:n}},getScale:Ku,isElement:Mu,isRTL:e=>"rtl"===Du(e).direction},eC=e=>(void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var n,i;const{x:o,y:r,placement:s,middlewareData:a}=t,l=await(async(e,t)=>{const{placement:n,platform:i,elements:o}=e,r=await(null==i.isRTL?void 0:i.isRTL(o.floating)),s=hu(n),a=pu(n),l="y"===mu(n),d=jk.has(s)?-1:1,c=r&&l?-1:1,u=uu(t,e);let{mainAxis:h,crossAxis:p,alignmentAxis:g}="number"==typeof u?{mainAxis:u,crossAxis:0,alignmentAxis:null}:{mainAxis:u.mainAxis||0,crossAxis:u.crossAxis||0,alignmentAxis:u.alignmentAxis};return a&&"number"==typeof g&&(p="end"===a?-1*g:g),l?{x:p*c,y:h*d}:{x:h*d,y:p*c}})(t,e);return s===(null==(n=a.offset)?void 0:n.placement)&&null!=(i=a.arrow)&&i.alignmentOffset?{}:{x:o+l.x,y:r+l.y,data:{...l,placement:s}}}}),tC=e=>(void 0===e&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:i,placement:o,platform:r}=t,{mainAxis:s=!0,crossAxis:a=!1,limiter:l={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...d}=uu(e,t),c={x:n,y:i},u=await r.detectOverflow(t,d),h=mu(hu(o)),p=gu(h);let g=c[p],f=c[h];s&&(g=cu(g+u["y"===p?"top":"left"],g,g-u["y"===p?"bottom":"right"])),a&&(f=cu(f+u["y"===h?"top":"left"],f,f-u["y"===h?"bottom":"right"]));const m=l.fn({...t,[p]:g,[h]:f});return{...m,data:{x:m.x-n,y:m.y-i,enabled:{[p]:s,[h]:a}}}}}),nC=e=>(void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var n,i;const{placement:o,middlewareData:r,rects:s,initialPlacement:a,platform:l,elements:d}=t,{mainAxis:c=!0,crossAxis:u=!0,fallbackPlacements:h,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:g="none",flipAlignment:f=!0,...m}=uu(e,t);if(null!=(n=r.arrow)&&n.alignmentOffset)return{};const S=hu(o),y=mu(a),b=hu(a)===a,x=await(null==l.isRTL?void 0:l.isRTL(d.floating)),I=h||(b||!f?[bu(a)]:(e=>{const t=bu(e);return[yu(e),t,yu(t)]})(a)),w="none"!==g;!h&&w&&I.push(...function(e,t,n,i){const o=pu(e);let r=((e,t,n)=>{switch(e){case"top":case"bottom":return n?t?Kk:Hk:t?Hk:Kk;case"left":case"right":return t?Yk:qk;default:return[]}})(hu(e),"start"===n,i);return o&&(r=r.map(e=>e+"-"+o),t&&(r=r.concat(r.map(yu)))),r}(a,f,g,x));const v=[a,...I],P=await l.detectOverflow(t,m),k=[];let C=(null==(i=r.flip)?void 0:i.overflows)||[];if(c&&k.push(P[S]),u){const e=((e,t,n)=>{void 0===n&&(n=!1);const i=pu(e),o=Su(e),r=fu(o);let s="x"===o?i===(n?"end":"start")?"right":"left":"start"===i?"bottom":"top";return t.reference[r]>t.floating[r]&&(s=bu(s)),[s,bu(s)]})(o,s,x);k.push(P[e[0]],P[e[1]])}if(C=[...C,{placement:o,overflows:k}],!k.every(e=>e<=0)){var T,M;const e=((null==(T=r.flip)?void 0:T.index)||0)+1,t=v[e];if(t&&("alignment"!==u||y===mu(t)||C.every(e=>mu(e.placement)!==y||e.overflows[0]>0)))return{data:{index:e,overflows:C},reset:{placement:t}};let n=null==(M=C.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:M.placement;if(!n)switch(p){case"bestFit":{var E;const e=null==(E=C.filter(e=>{if(w){const t=mu(e.placement);return t===y||"y"===t}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:E[0];e&&(n=e);break}case"initialPlacement":n=a}if(o!==n)return{reset:{placement:n}}}return{}}}),iC=["bottom-start"],oC=["bottom"],rC=["bottom"],sC=[],aC=["select","hand","rectangle","ellipse","rhombus","triangle","hexagon","star","arrow","draw","path","text","frame","eraser","laser"],lC=new Set(aC),dC=aC.map(e=>`"${e}"`).join(", "),cC={audio:["src"],embed:["src"],iframe:["src"],img:["src","srcset"],input:["src"],object:["data"],script:["src"],source:["src","srcset"],track:["src"],video:["poster","src"]},uC=["href","xlink:href"],hC=new Set(["a","area"]),pC=16384,gC=67108864,fC=cl("canvas-kit.export"),mC="snapshots",SC="imageBlobs",yC=null,bC=.08,xC=new WeakMap,IC=new WeakMap,wC=new WeakMap,vC=class extends uw{constructor(e){super(e,"draw"),this.initial="idle",this.addChild(new PC(e,this)),this.addChild(new kC(e,this))}getDefaultProps(){return this.editor.getDefaultShapeProps("draw")}},PC=class extends uw{constructor(e,t){super(e,"idle",t)}onEnter(){this.editor.clearSelectionTransients()}onPointerDown(e){const t=this.parent.getDefaultProps(),n=((e,t)=>{const n=e.getCurrentPageId();let i=null,o=1/0,r=-1;const s=e.getCurrentPageShapeIds();for(let a=0;a<s.length;a+=1){const n=e.getShape(s[a]);if(!n||e.isShapeHidden(n.id))continue;const l=e.getShapeUtil(n);if(!l.canAutomaticallyReceiveChildren(n))continue;if(!e.canUseShapeParent(n.id))continue;if(!e.isPagePointInShapeClip(n.id,t))continue;const d=l.getChildClipLocalBounds(n)??l.getLocalBounds(n),c=e.computeShapeLocalToPageTransform(n).invert().applyToPoint(t);if(!d.containsPoint(c))continue;const u=e.computeShapePageBounds(n),h=u.w*u.h;(!i||h<o||h===o&&a>r)&&(i=n,o=h,r=a)}return i?.id??n})(this.editor,e.pagePoint),i=n.startsWith("shape:")?this.editor.getShape(n):null,o=i?this.editor.computeShapeLocalToPageTransform(i).invert():lI.Identity(),r=o.applyToPoint(e.pagePoint),s=tg(r,r,e.pressure,"pen"===e.pointerType);var a,l;this.transition("drawing",{originPagePoint:e.pagePoint.clone(),originParentPoint:r,pageToParent:o,parentId:n,shapeId:null,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,isClosed:t.isClosed,isPen:"pen"===e.pointerType,pointGuard:(a=t.strokeWidth,l="pen"===e.pointerType,l?{minPointDistance:Math.max(.12,.08*a),pressureDeltaThreshold:.035,softMaxPointCount:1600,hardMaxPointCount:3200,maxDistanceMultiplier:2.5}:{minPointDistance:Math.max(.3,.14*a),pressureDeltaThreshold:.08,softMaxPointCount:900,hardMaxPointCount:2200,maxDistanceMultiplier:6}),pointGuardState:{anchorPoint:ng(s),hasProvisionalPoint:!1},straightSegmentAnchorPoint:null,preserveStraightEndpointOnNextFreePoint:!1,segments:[{points:[s]}]})}},kC=class extends uw{tool;info=null;pendingUpdateFrame=null;operation=null;constructor(e,t){super(e,"drawing",t),this.tool=t}onEnter(e){this.info=e,this.editor.clearSelectionTransients(),this.editor.commands.setSelectedShapeIds([],{source:"system"}),this.operation=this.editor.operations.begin({kind:"draw.create",label:"shape.create",source:"user",history:"record"})}onPointerMove(e){this.appendPoint(e,!1)}onPointerUp(e){this.appendPoint(e,!0),this.flushShapeUpdate();const t=this.info?.shapeId??null;if(!t)return this.cancelOperation(),void this.transition("idle");this.info?.parentId.startsWith("shape:")||we(this.editor,t,{source:"user"}),this.commitOperation(),this.transition("idle")}onCancel(){this.cancelScheduledShapeUpdate(),this.cancelOperation(),this.transition("idle")}onExit(){this.cancelScheduledShapeUpdate(),this.cancelOperation(),this.info=null}commitOperation(){const e=this.operation;this.operation=null,e?.commit()}cancelOperation(){const e=this.operation;this.operation=null,e?.isActive&&e.cancel()}appendPoint(e,t){if(!this.info)return;const n=tg(this.info.pageToParent.applyToPoint(e.pagePoint),this.info.originParentPoint,e.pressure,this.info.isPen);if(e.shiftKey?this.appendStraightSegmentPoint(n):(this.exitStraightSegmentMode(),this.info.preserveStraightEndpointOnNextFreePoint?this.appendDistinctCurrentPoint(n)&&(this.info.preserveStraightEndpointOnNextFreePoint=!1):this.appendGuardedCurrentPoint(n,{force:t})),this.splitCurrentSegmentAtLimit(),!this.info.shapeId){const n=this.info.originPagePoint.dist(e.pagePoint);if(!t&&n<2)return;const i=this.createShape();return void(this.info.shapeId=i.id)}this.scheduleShapeUpdate()}scheduleShapeUpdate(){var e;null===this.pendingUpdateFrame&&(this.pendingUpdateFrame=(e=()=>{this.pendingUpdateFrame=null,this.flushShapeUpdate()},"function"==typeof requestAnimationFrame?{type:"animation",id:requestAnimationFrame(e)}:{type:"timeout",id:setTimeout(e,16)}))}cancelScheduledShapeUpdate(){var e;null!==this.pendingUpdateFrame&&("animation"!==(e=this.pendingUpdateFrame).type?clearTimeout(e.id):cancelAnimationFrame(e.id),this.pendingUpdateFrame=null)}flushShapeUpdate(){this.cancelScheduledShapeUpdate(),this.info?.shapeId&&this.editor.commands.updateShapes([{id:this.info.shapeId,props:rg(this.info.segments)}],{source:"user"})}createShape(){const e=this.tool.getDefaultProps(),t=((e,t)=>t&&e.canUseShapeParent(t)?t:e.getCurrentPageId())(this.editor,this.info?.parentId);this.info&&(this.info.parentId=t);const[n]=this.editor.commands.createShapes([{type:"draw",x:this.info?.originParentPoint.x??0,y:this.info?.originParentPoint.y??0,...t.startsWith("shape:")?{parentId:t}:{},props:{...e,stroke:this.info?.stroke??e.stroke,strokeWidth:this.info?.strokeWidth??e.strokeWidth,fill:this.info?.fill??e.fill,isClosed:this.info?.isClosed??e.isClosed,...rg(this.info?.segments??[]),isPen:this.info?.isPen??!1}}],{source:"user"});if(!n||"draw"!==n.type)throw new Error("Failed to create draw shape");return n}appendStraightSegmentPoint(e){if(!this.info)return;this.info.preserveStraightEndpointOnNextFreePoint=!1;const t=ig(this.info),n=t[t.length-1];if(!this.info.straightSegmentAnchorPoint){if(!n)return this.replaceCurrentSegmentPoints([{...e,segment:"straight"}]),void this.resetPointGuard(e);this.info.straightSegmentAnchorPoint=ng(n)}const i={...e,segment:"straight"};if("straight"===n?.segment)return this.replaceCurrentSegmentPoints([...t.slice(0,-1),i]),void this.resetPointGuard(i);this.replaceCurrentSegmentPoints([...t,i]),this.resetPointGuard(i)}exitStraightSegmentMode(){this.info?.straightSegmentAnchorPoint&&(this.info.straightSegmentAnchorPoint=null,this.info.preserveStraightEndpointOnNextFreePoint=!0)}appendDistinctCurrentPoint(e){if(!this.info)return!1;const t=ig(this.info),n=t[t.length-1];return!(n&&(i=n).x===(o=e).x&&i.y===o.y&&i.pressure===o.pressure&&i.segment===o.segment||(this.replaceCurrentSegmentPoints([...t,ng(e)]),this.resetPointGuard(e),0));var i,o}appendGuardedCurrentPoint(e,t={}){if(!this.info)return;const n=ig(this.info).map(ng);this.info.pointGuardState=function(e,t,n,i,o={}){const r=pp(t),s=e[e.length-1];if(!s)return e.push(r),{anchorPoint:pp(r),hasProvisionalPoint:!1};if(up(s,r))return o.force&&i.hasProvisionalPoint?{anchorPoint:pp(r),hasProvisionalPoint:!1}:i;if(up(i.anchorPoint,r))return i.hasProvisionalPoint&&e.pop(),{anchorPoint:pp(i.anchorPoint),hasProvisionalPoint:!1};const a=((e,t)=>{if(e<=t.softMaxPointCount)return t.minPointDistance;const n=dp((e-t.softMaxPointCount)/Math.max(t.hardMaxPointCount-t.softMaxPointCount,1),0,1);return t.minPointDistance*(1+n*t.maxDistanceMultiplier)})(e.length,n),l=r.x-i.anchorPoint.x,d=r.y-i.anchorPoint.y,c=Math.abs((r.pressure??0)-(i.anchorPoint.pressure??0)),u=!0===o.force||l*l+d*d>=a*a||c>=n.pressureDeltaThreshold;return i.hasProvisionalPoint?e[e.length-1]=r:e.push(r),u?{anchorPoint:pp(r),hasProvisionalPoint:!1}:{anchorPoint:pp(i.anchorPoint),hasProvisionalPoint:!0}}(n,e,this.info.pointGuard,this.info.pointGuardState,t),this.replaceCurrentSegmentPoints(n)}resetPointGuard(e){this.info&&(this.info.pointGuardState={anchorPoint:ng(e),hasProvisionalPoint:!1})}replaceCurrentSegmentPoints(e){if(!this.info)return;const t=og(this.info.segments);this.info.segments=[...t.slice(0,-1),{points:e.map(ng)}]}splitCurrentSegmentAtLimit(){if(!this.info)return;const e=cp(this.info.isPen);let t=og(this.info.segments),n=t[t.length-1];for(;n.points.length>e;){const i=n.points.slice(0,e).map(ng),o=i[i.length-1],r=n.points.slice(e).map(ng);if(!o||0===r.length)break;const s={points:[ng(o),...r]};t=[...t.slice(0,-1),{points:i},s],n=s}this.info.segments=t}},CC=[{id:"slate",value:M("stroke-slate"),label:"Slate",hexColor:"#334155"},{id:"blue",value:M("stroke-blue"),label:"Blue",hexColor:"#1d4ed8"},{id:"green",value:M("stroke-green"),label:"Green",hexColor:"#15803d"},{id:"red",value:M("stroke-red"),label:"Red",hexColor:"#dc2626"},{id:"orange",value:M("stroke-orange"),label:"Orange",hexColor:"#ea580c"},{id:"muted",value:M("stroke-muted"),label:"Muted",hexColor:"#94a3b8"}],TC=[{id:"none",value:E("transparent"),label:"None",hexColor:"#f8fafc",opacity:0},{value:M("fill-blue"),label:"Blue",id:"blue",hexColor:"#dbeafe"},{value:M("fill-green"),label:"Green",id:"green",hexColor:"#dcfce7"},{value:M("fill-red"),label:"Red",id:"red",hexColor:"#fee2e2"},{value:M("fill-white"),label:"White",id:"white",hexColor:"#f8fafc"}],MC=[{value:"open",label:"Open"},{value:"closed",label:"Closed"}],EC={id:"draw",editor:{id:"land.draw",shapeCapabilities:[{type:"draw",schemaProps:["segments","stroke","strokeWidth","fill","isClosed","isPen"],reactRenderer:"supported",toolbarEntry:"supported",notes:["Draw stores raw segments as document truth and derives a shared freehand stroke geometry for render, hit test, brush wrap, and SVG export."]}],shapeUtils:[new class extends cw{type="draw";getDefaultProps(){return{segments:(e=[{x:0,y:0},{x:24,y:12}],[{points:e.map(pp)}]),stroke:M("stroke-slate"),strokeWidth:4,fill:E("transparent"),isClosed:!1,isPen:!1};var e}validateProps(e){const t=e&&"object"==typeof e?e:{},n=this.getDefaultProps();return{segments:gg(t.segments,n.segments),stroke:$(t.stroke,n.stroke),strokeWidth:Math.max(4,ug(t.strokeWidth,n.strokeWidth)),fill:$(t.fill,n.fill),isClosed:"boolean"==typeof t.isClosed?t.isClosed:n.isClosed,isPen:"boolean"==typeof t.isPen?t.isPen:n.isPen}}getPositionedBounds(e){const t=Gp(e);return new aI(e.x+t.localBounds.x,e.y+t.localBounds.y,t.localBounds.w,t.localBounds.h)}getLocalBounds(e){return Gp(e).localBounds}getRenderBounds(e){return Gp(e).renderBounds}getExportBounds(e){return this.getRenderBounds(e)}canReceiveTerminalBinding(e){return!0}getSelectionResizeLocalBounds(e){return this.getLocalBounds(e)}resizeSelectionBounds(e,t){const n=function(e,t){let n=(({segments:e,strokeWidth:t,isPen:n,isClosed:i,targetSelectionStrokeBounds:o})=>{let r=vp(e);for(let s=0;s<2;s+=1){const e=qp(r,t,n,i),s=Vp(e.pointBounds,e.localBounds,o);r=Ep(r,e.pointBounds,s)}return r})({segments:Bp(Jp(e),t),strokeWidth:e.props.strokeWidth,isPen:e.props.isPen??!1,isClosed:e.props.isClosed,targetSelectionStrokeBounds:t.targetSelectionStrokeBounds});return t.scaleX<0&&(n=Lp(n,{axis:"horizontal",selectionMirrorBounds:t.targetSelectionStrokeBounds,selectionRotation:t.selectionRotation,selectionRotationCenter:t.selectionRotationCenter})),t.scaleY<0&&(n=Lp(n,{axis:"vertical",selectionMirrorBounds:t.targetSelectionStrokeBounds,selectionRotation:t.selectionRotation,selectionRotationCenter:t.selectionRotationCenter})),Zp(Rp(n,t),e.props.strokeWidth,e.props.isPen??!1,e.props.isClosed)}(e,{targetSelectionStrokeBounds:t.selectionLocalBounds,scaleX:t.scaleX,scaleY:t.scaleY,selectionRotation:t.selectionRotation,selectionRotationCenter:t.selectionRotationCenter});return{id:e.id,x:n.x,y:n.y,rotation:0,skewX:0,scaleX:1,scaleY:1,props:{segments:eg(n.segments)}}}flipSelectionBounds(e,t){const n=((e,t)=>Zp(Rp(Lp(Bp(Jp(e),t),t),t),e.props.strokeWidth,e.props.isPen??!1,e.props.isClosed))(e,{axis:t.axis,selectionMirrorBounds:t.selectionBounds,selectionRotation:t.selectionRotation,selectionRotationCenter:t.selectionRotationCenter});return{id:e.id,x:n.x,y:n.y,rotation:0,skewX:0,scaleX:1,scaleY:1,props:{segments:eg(n.segments)}}}getSelectionOverlayInfo(e){return{usesSelectionPathOverlay:!1,startPagePoint:null,endPagePoint:null,middlePagePoint:null,path:null,pathStyle:null}}isWrappedByBrush(e,t){return t.pageOutlineVertices.every(e=>t.brushBounds.containsPoint(e))}canSelectByBrush(e,t){if(this.isWrappedByBrush(e,t))return!0;if(t.isWrapping)return!1;const n=t.pageOutlineVertices;return!!n.some(e=>t.brushBounds.containsPoint(e))||(e=>{const t=new sI(e.minX,e.minY),n=new sI(e.maxX,e.minY),i=new sI(e.maxX,e.maxY),o=new sI(e.minX,e.maxY);return[[t,n],[n,i],[i,o],[o,t]]})(t.brushBounds).some(([e,t])=>{for(let i=0;i<n.length;i+=1){const o=n[i],r=n[(i+1)%n.length];if(o&&r&&I(e,t,o,r))return!0}return!1})}getPositionedOutlineVertices(e){return Qp(e).outlineVertices}hitTest(e,t){return function(e,t,n,i={}){if(i.isClosed&&void 0!==i.fill&&!D(i.fill)&&e.normalizedPoints.length>=3&&lg(n,e.normalizedPoints.map(hp)))return!0;if(i.isClosed&&((e,t)=>{if(0===t.length)return Number.POSITIVE_INFINITY;if(1===t.length)return e.dist(hp(t[0]));let n=Number.POSITIVE_INFINITY;for(let i=1;i<t.length;i+=1){const o=t[i-1],r=t[i];o&&r&&(n=Math.min(n,sg(e,hp(o),hp(r))))}return t.length>=3&&(n=Math.min(n,sg(e,hp(t[t.length-1]),hp(t[0])))),n})(n,e.normalizedPoints)<=Math.max(4,.5*t))return!0;if(0===e.outlineVertices.length)return!1;for(const o of e.outlinePolygons){if(lg(n,o))return!0;if(dg(n,o)<=Math.max(4,.5*t))return!0}return!1}(Qp(e),e.props.strokeWidth,t,{fill:e.props.fill,isClosed:e.props.isClosed})}hitTestLineSegment(e,t){return((e,t,n,i,o={})=>{const r=Math.max(4,.5*t,o.margin??0);return!!(o.isClosed&&void 0!==o.fill&&!D(o.fill)&&e.normalizedPoints.length>=3&&cg(n,i,e.normalizedPoints.map(hp),r))||0!==e.outlineVertices.length&&e.outlinePolygons.some(e=>cg(n,i,e,r))})(Qp(e),e.props.strokeWidth,t.positionedStart,t.positionedEnd,{fill:e.props.fill,isClosed:e.props.isClosed,margin:t.positionedMargin})}repairLoadedShape(e){return null}}],shapeSvgExporters:[new class{type="draw";toSvg(e,t){const n=Gp(e);if(!n.path&&!n.selectionPath)return null;const i=[];return n.fillPath&&!D(e.props.fill)&&i.push({tag:"path",attrs:{d:n.fillPath,fill:t.resolveColor(e.props.fill),stroke:"none"}}),e.props.isClosed&&n.selectionPath?i.push({tag:"path",attrs:{d:n.selectionPath,fill:"none",stroke:t.resolveColor(e.props.stroke),"stroke-width":e.props.strokeWidth,"stroke-linecap":"round","stroke-linejoin":"round"}}):n.path&&i.push({tag:"path",attrs:{d:n.path,fill:t.resolveColor(e.props.stroke),stroke:"none"}}),{tag:"g",children:i}}}],setup(e){e.tools.register("draw",e=>new vC(e),{shortcut:"p"})}},render:{id:"land.draw.react",shapeRenderers:[{type:"draw",component:function({shape:e}){
75
- return Ax(vg,{shape:e})},hoverComponent:function({shape:e,strokeWidth:t}){
76
- return Ax(Pg,{shape:e,strokeWidth:t})}}]},setup:e=>{e.get(uP).add({id:"draw.set-closed",getAvailability:e=>"draw"!==e.selection.commonShapeType?"inapplicable":e.selection.count>0?"enabled":"disabled",getValue:e=>yg(e.selection.selectedShapes),run({context:e,value:t}){const n=bg(t);if(null===n)return;const i=e.selection.selectedShapes.filter(fg).filter(e=>!e.isLocked).map(e=>({id:e.id,props:{isClosed:n}}));0!==i.length&&e.editor.commands.updateShapes(i,{source:"user"})}},mg("fill"),mg("stroke"),mg("strokeWidth"),{id:"draw.default-closed",getAvailability:e=>"draw"===e.tool.activeToolId?"enabled":"inapplicable",getValue:e=>e.editor.getDefaultShapeProps("draw").isClosed?"closed":"open",run({context:e,value:t}){const n=bg(t);null!==n&&e.editor.updateDefaultShapeProps("draw",{isClosed:n})}},Sg("fill"),Sg("stroke"),Sg("strokeWidth")),e.get(vP).add({id:"draw.tool-toolbar",channel:wP.toolSwitcher,order:45,actionIds:[xP],getGroups:e=>[{id:"draw.tools",items:[{kind:"button",id:"draw.tool.draw",actionId:xP,value:"draw",label:"Draw",shortcut:e.editor.shortcuts.getToolShortcutLabel("draw"),icon:"pencil",dataUi:"draw-tool-button"}]}]},{id:"draw.default-style.tool-toolbar",channel:wP.toolOptions,order:46,actionIds:["draw.default-stroke","draw.default-strokeWidth"],when:e=>"draw"===e.tool.activeToolId,getGroups:()=>(({strokeActionId:e,strokeWidthActionId:t,dataUiPrefix:n})=>[{id:`${n}.initial-style`,items:[{kind:"color-input",id:`${n}.stroke`,actionId:e,label:"Stroke",previewStyle:"outline",fallback:"#334155",presets:CC.map(e=>({...e,dataUi:`${n}-stroke-${e.id}-button`})),dataUi:`${n}.stroke`},{kind:"separator",id:`${n}.initial-style-separator`},{kind:"text-input",id:`${n}.stroke-width`,actionId:t,label:"Stroke width",placeholder:"4",suffix:"Px",validate:wg,dataUi:`${n}-stroke-width-control`}]}])({strokeActionId:"draw.default-stroke",strokeWidthActionId:"draw.default-strokeWidth",dataUiPrefix:"draw-default"})},{id:"draw.selection-toolbar",channel:wP.selectionProperties,order:20,actionIds:["draw.set-closed","draw.set-fill","draw.set-stroke","draw.set-strokeWidth"],when:e=>"draw"===e.selection.commonShapeType,getGroups:()=>(({closedActionId:e,fillActionId:t,strokeActionId:n,strokeWidthActionId:i,dataUiPrefix:o})=>[{id:`${o}.style-closed`,items:[{kind:"segmented",id:`${o}.closed`,actionId:e,options:MC.map(e=>({...e,dataUi:`${o}-${e.value}-button`}))}]},{id:`${o}.style-fill`,items:[{kind:"color-input",id:`${o}.fill`,actionId:t,label:"Fill",fallback:"#f8fafc",presets:TC.map(e=>({...e,dataUi:`${o}-fill-${e.id}-button`})),dataUi:`${o}.fill`}]},{id:`${o}.style-stroke`,items:[{kind:"color-input",id:`${o}.stroke`,actionId:n,label:"Stroke",previewStyle:"outline",fallback:"#334155",presets:CC.map(e=>({...e,dataUi:`${o}-stroke-${e.id}-button`})),dataUi:`${o}.stroke`}]},{id:`${o}.style-stroke-width`,items:[{kind:"text-input",id:`${o}.stroke-width`,actionId:i,label:"Stroke width",placeholder:"4",suffix:"Px",validate:wg,dataUi:`${o}-stroke-width-control`}]}])({closedActionId:"draw.set-closed",fillActionId:"draw.set-fill",strokeActionId:"draw.set-stroke",strokeWidthActionId:"draw.set-strokeWidth",dataUiPrefix:"draw"})}),e.get(fP).add({id:"draw.shape-context-menu",target:"selection",order:35,actionIds:["draw.set-closed"],when:e=>"draw"===e.selection.commonShapeType,getSections(e){const t="closed"===yg(e.selection.selectedShapes)?"open":"closed";return[{id:"draw.context-menu",title:"Draw",items:[{kind:"command",id:"draw.toggle-closed",actionId:"draw.set-closed",value:t,label:"closed"===t?"Close freehand":"Open freehand",icon:"pencil",dataUi:"context-menu-toggle-draw-closed-button"}]}]}})}},AC=d("plugin.eraser.runtime"),BC=class extends uw{constructor(e){super(e,"eraser"),this.initial="idle",this.addChild(new RC(e,this)),this.addChild(new LC(e,this)),this.addChild(new $C(e,this))}onExit(){Fg(this.editor)}},RC=class extends uw{constructor(e,t){super(e,"idle",t)}onEnter(){Fg(this.editor)}onPointerDown(e){0===e.button&&this.transition("pointing",((e,t)=>{const n={originPagePoint:t.pagePoint.clone(),previousPagePoint:t.pagePoint.clone(),protectedContainerIds:Mg(e,t.pagePoint),erasingShapeIds:new Set,trail:[t.pagePoint.clone()]};return Bg(e,n,t),$g(e,n),n})(this.editor,e))}},LC=class extends uw{info=null;constructor(e,t){super(e,"pointing",t)}onEnter(e){this.info=e}onPointerMove(e){this.info&&this.info.originPagePoint.dist2(e.pagePoint)>=9&&(Rg(this.editor,this.info,e),Lg(this.info,e.pagePoint),this.info.previousPagePoint=e.pagePoint.clone(),$g(this.editor,this.info),this.transition("erasing",this.info))}onPointerUp(e){this.info&&(Bg(this.editor,this.info,e),$g(this.editor,this.info),Ug(this.editor,this.info)),this.transition("idle")}onCancel(){Fg(this.editor),this.transition("idle")}onExit(){this.info=null}},$C=class extends uw{info=null;constructor(e,t){super(e,"erasing",t)}onEnter(e){this.info=e}onPointerMove(e){this.update(e)}onPointerUp(e){this.update(e),this.info&&Ug(this.editor,this.info),this.transition("idle")}onCancel(){Fg(this.editor),this.transition("idle")}onExit(){this.info=null}update(e){this.info&&(Rg(this.editor,this.info,e),Lg(this.info,e.pagePoint),this.info.previousPagePoint=e.pagePoint.clone(),$g(this.editor,this.info))}},FC=yx(()=>Qo(kg(Zo()).trailActiveSignal)?Ax(UC,{}):null),UC=yx(()=>{const e=Zo(),t=Qo(kg(e).trailSignal),n=Qo(e.cameraZoomSignal),i=Math.max(n,1e-4),o=(()=>{const[e,t]=Tx(()=>Dg());return Ix(()=>{if("undefined"==typeof window)return;let e=0;const n=i=>{t(i),e=window.requestAnimationFrame(n)};return e=window.requestAnimationFrame(n),()=>{window.cancelAnimationFrame(e)}},[]),e})(),r=Cx({samples:[],sourceLength:0}),s=Math.max(o,Dg());((e,t,n,i)=>{if(zg(e,i),t.length<e.sourceLength&&(e.samples=[],e.sourceLength=0),t.length===e.sourceLength)return;const o=e.sourceLength,r=t.length-o,s=e.samples[e.samples.length-1]?.time??i-HC*r;for(let a=o;a<t.length;a++){const l=t[a];Og(e,{x:l.x,y:l.y},n,Gg(s,i,(a-o+1)/r))}e.sourceLength=t.length,zg(e,i)})(r.current,t,i,s);const a=function(e,t){const n=Ng(e,t);return((e,t)=>{if(e.length<=1)return[...e];const n=.15+.85*(1-t),i=[e[0]];for(let o=1;o<e.length;o++)i.push(Vg(i[i.length-1],e[o],n));return i})(n.length>OC?n.slice(-48):n,_C)}(r.current.samples,s);if(0===a.length)return null;const l=(c=NC/i,0===(d=a).length||c<=0?null:1===d.length?Jg(Wg(d[0],c/2,XC))??"":Jg((e=>{if(0===e.length)return[];if(1===e.length)return Wg(e[0].point,Math.max(e[0].radius,.01),XC);const t=[],n=[];for(const a of e){const e=Kg(a.direction);Qg(t,qg(a.point,jg(e,a.radius))),Qg(n,Yg(a.point,jg(e,a.radius)))}const i=[];for(const a of t)Qg(i,a);const o=e[e.length-1],r=Kg(o.direction),s=(({center:e,direction:t,normal:n,radius:i})=>{if(i<=0)return[];const o=[];for(let r=1;r<WC;r++){const s=r/WC;o.push(Yg(e,Yg(jg(t,Math.sin(Math.PI*s)*i),jg(n,-Math.cos(Math.PI*s)*i))))}return o})({center:o.point,direction:o.direction,normal:r,radius:o.radius});for(const a of s)Qg(i,a);for(let a=n.length-1;a>=0;a--)Qg(i,n[a]);return i})(((e,t)=>{const n=(e=>{const t=[0];for(let n=1;n<e.length;n++)t.push(t[n-1]+Xg(e[n-1],e[n]));return t})(e),i=Math.max(t,n[n.length-1]??0);return e.map((o,r)=>{const s=n[r]??0,a=Zg(s/i,0,1);return{point:o,direction:_g(e,r),radius:t/2*a,runningLength:s}})})(d,c))));var d,c;return l?Ax("g",{"data-ui":"eraser-trail-overlay",children:Ax("path",{"data-ui":"eraser-trail-scribble",d:l,fill:DC})}):null}),DC="rgba(142, 142, 142, 0.16)",OC=48,zC=1,NC=12,_C=.32,WC=8,XC=13,HC=16,KC=8,YC=180,qC=180,jC=680,VC={id:"eraser",editor:{id:"land.eraser",setup(e){e.runtime.provide(AC,(e=>{const t=a("eraser.shapeIds",[]),n=a("eraser.trail",[]);return{erasingShapeIdsSignal:t,trailSignal:n,trailActiveSignal:l("eraser.trailActive",()=>n.get().length>1),setPreview(i,o){t.set(Array.from(new Set(i))),n.set(o.map(e=>e.clone())),e.runtime.notify()},clear(){t.set([]),n.set([]),e.runtime.notify()}}})(e)),e.tools.register("eraser",e=>new BC(e),{shortcut:"e"})}},render:{id:"land.eraser.react",canvasOverlays:[{id:"land.eraser.trail-overlay",layer:"below-host",component:FC}],shapeOpacityModifiers:[{id:"land.eraser.preview-opacity",getOpacity(e,t){const n=new Set(kg(e).erasingShapeIdsSignal.get());return e.hierarchy.isShapeOrAncestorInSet(t,n)?.32:1}}]},setup:e=>{e.get(vP).add({id:"eraser.tool-toolbar",channel:wP.toolSwitcher,order:50,actionIds:[xP],getGroups:e=>[{id:"eraser.tools",items:[{kind:"button",id:"eraser.tool.eraser",actionId:xP,value:"eraser",label:"Eraser",shortcut:e.editor.shortcuts.getToolShortcutLabel("eraser"),icon:"eraser",dataUi:"eraser-tool-button"}]}]})}},GC="group.selection.group",ZC="group.selection.ungroup",QC={id:GC,getAvailability:e=>e.editor.canGroupSelection()?"enabled":"inapplicable",run({context:e}){e.editor.groupSelection("user")}},JC={id:ZC,getAvailability:e=>e.editor.canUngroupSelection()?"enabled":"inapplicable",run({context:e}){e.editor.ungroupSelection("user")}},eT={id:"group.selection-toolbar",channel:wP.selectionProperties,order:1010,actionIds:[GC,ZC],getGroups:()=>[{id:"group.selection-actions",presentation:"primary",items:[{kind:"button",id:GC,actionId:GC,label:"Group",icon:"group",dataUi:"group-selection-button"},{kind:"button",id:ZC,actionId:ZC,label:"Ungroup",icon:"ungroup",dataUi:"ungroup-selection-button"}]}]},tT={id:"group.selection-context-menu",target:"selection",order:1020,actionIds:[GC,ZC],getSections:()=>[{id:"system.selection-edit",title:"Edit",order:10,items:[{kind:"separator",id:"group.selection-separator"},{kind:"command",id:GC,actionId:GC,label:"Group",icon:"group",dataUi:"context-menu-group-selection-button"},{kind:"command",id:ZC,actionId:ZC,label:"Ungroup",icon:"ungroup",dataUi:"context-menu-ungroup-selection-button"}]}]},nT={id:"group",editor:{id:"land.group",shapeCapabilities:[{type:"group",schemaProps:["w","h"],reactRenderer:"supported",toolbarEntry:"supported",notes:["Group is a transparent structural parent. The plugin supplies concrete record construction, bounds/hit policy, actions, and UI through ShapeUtil hooks; editor core owns generic hierarchy transactions and descendant-aware transforms."]}],shapeUtils:[new class extends cw{type="group";getGroupingShapeCreateInput({parentId:e,parentLocalBounds:t}){return{type:this.type,x:t.x,y:t.y,parentId:e,props:{w:t.w,h:t.h}}}getDefaultProps(){return{w:1,h:1}}validateProps(e){const t=e&&"object"==typeof e?e:{},n=this.getDefaultProps();return{w:of(t.w,n.w),h:of(t.h,n.h)}}getLocalBounds(e){return new aI(0,0,e.props.w,e.props.h)}hitTest(e,t){return!1}hitTestLineSegment(e,t){return!1}isSelectionTransformContainer(e){return!0}canUngroupChildren(e){return!0}shouldResizeDescendants(e){return!0}getResizeToFitDescendantsProps(e,t){return this.validateProps({...e.props,w:t.w,h:t.h})}getMinimumChildCount(e){return 2}contributesToExportBounds(e){return!1}canReceiveChildren(e){return!0}canAutomaticallyReceiveChildren(e){return!1}canBeDirectlyBrushSelected(e){return!1}}],shapeSvgExporters:[new class{type="group";toSvg(e){return{tag:"g"}}}]},render:{id:"land.group.react",shapeRenderers:[{type:"group",component:function({shape:e,isSelected:t}){
77
- return Ax(rf,{shape:e,isSelected:t})},hoverComponent:function({shape:e,strokeWidth:t}){const{h:n,w:i}=e.props;
78
- return Ax("svg",{"data-ui":"group-hover-outline",width:"100%",height:"100%",viewBox:`0 0 ${i} ${n}`,style:{display:"block",overflow:"visible",pointerEvents:"none"},shapeRendering:"geometricPrecision",children:Ax("rect",{x:0,y:0,width:i,height:n,fill:"none",stroke:Dw,strokeWidth:t,vectorEffect:"non-scaling-stroke"})})}}]},setup:e=>{e.get(uP).add(QC,JC),e.get(uP).addShortcuts({actionId:GC,shortcut:{key:"g",accelKey:!0}},{actionId:ZC,shortcut:{key:"g",accelKey:!0,shiftKey:!0}}),e.get(vP).add(eT),e.get(fP).add(tT)}},iT="image.replace",oT="image.download-original",rT="image.insert",sT="image.crop",aT="image.crop.done",lT="image.crop.zoom",dT="image.crop.aspect-ratio",cT="image.crop.reset",uT="image.corner-radius",hT=1e-4,pT=1e-4,gT="image.crop",fT="image.crop:edit:",mT=[{label:"1:1",value:"1:1",ratio:1},{label:"4:3",value:"4:3",ratio:4/3},{label:"16:9",value:"16:9",ratio:16/9}],ST={top_left:"nwse-resize",top:"ns-resize",top_right:"nesw-resize",right:"ew-resize",bottom_right:"nwse-resize",bottom:"ns-resize",bottom_left:"nesw-resize",left:"ew-resize"},yT=["top_left","top","top_right","right","bottom_right","bottom","bottom_left","left"],bT=new WeakMap,xT="image.smudge",IT="image.smudge.cancel",wT="image.smudge.confirm",vT="image.smudge.brush-size",PT="image.smudge.brush-color",kT="image.smudge:",CT=`${kT}edit:`,TT="#ffff00",MT=24,ET=TT,AT=.45,BT=class{editor;confirmHandler=null;deactivateHistoryScope=null;session=null;snapshot=null;subscribers=new Set;constructor(e){this.editor=e,qo("image.smudgeSession.lifecycle",e.shapeEditingSessionSignal,()=>{this.clearIfEditingSessionInvalid()},{fireImmediately:!1})}start(e,t){if(e.isLocked)return!1;const n=Cf(e.id),i=this.editor.getShapeEditingSession();if(i&&(i.shapeId!==e.id||i.markId!==n))return!1;if(this.session&&i?.shapeId===e.id&&Tf(e,i.markId))return this.updateSession({...this.session,brush:Mf({...this.session.brush,...t})}),!0;this.clear();const o=this.editor.startEditingShape({shapeId:e.id,markId:n,entryMode:"focusEnd"},"user");return!(!o||o.shapeId!==e.id||o.markId!==n||(this.setSession({shapeId:e.id,brush:Mf(t),strokes:[],activeStroke:null,redoStrokes:[],nextStrokeIndex:1}),this.activateHistoryScope(e.id),0))}cancel(){const e=this.session?.shapeId??null;this.clear();const t=this.editor.getShapeEditingSession();e&&t?.shapeId===e&&t.markId===Cf(e)&&this.editor.cancelEditing("user")}complete(){const e=this.session?.shapeId??null;this.clear();const t=this.editor.getShapeEditingSession();e&&t?.shapeId===e&&t.markId===Cf(e)&&this.editor.completeEditing("user")}cancelIfActive(){return!!this.getActiveSession()&&(this.cancel(),!0)}clearForShape(e){this.session?.shapeId===e&&this.clear()}updateBrush(e){if(!this.getActiveSession()||!this.session)return!1;const t=Mf({...this.session.brush,...e});return t.size===this.session.brush.size&&t.color===this.session.brush.color&&t.opacity===this.session.brush.opacity||this.updateSession({...this.session,brush:t}),!0}getSnapshot(e){const t=this.getActiveSession();return t&&t.shapeId===e?this.snapshot:null}getActiveSession(){if(!this.session)return null;const e=this.editor.getShape(this.session.shapeId),t=this.editor.getShapeEditingSession();return e&&t&&t.shapeId===this.session.shapeId&&t.markId===Cf(this.session.shapeId)?this.snapshot:(this.clear(),null)}subscribe(e){return this.subscribers.add(e),()=>{this.subscribers.delete(e)}}beginStroke(e){if(!this.session)return;const t=Pf(this.session),n={id:`${t.shapeId}:smudge:${t.nextStrokeIndex}`,points:[Ff(e)],brush:{...t.brush}};this.updateSession({...t,activeStroke:n,nextStrokeIndex:t.nextStrokeIndex+1})}appendPoint(e){if(!this.session?.activeStroke)return;const t=this.session.activeStroke.points[this.session.activeStroke.points.length-1];t&&Math.hypot(t.x-e.x,t.y-e.y)<.5||this.updateSession({...this.session,activeStroke:{...this.session.activeStroke,points:[...this.session.activeStroke.points,Ff(e)]}})}endStroke(){this.session?.activeStroke&&this.updateSession(Pf(this.session))}cancelStroke(){this.session?.activeStroke&&this.updateSession({...this.session,activeStroke:null})}undo(){if(!this.getActiveSession()||!this.session)return!1;if(this.session.activeStroke&&this.updateSession(Pf(this.session)),!this.session||0===this.session.strokes.length)return!1;const e=this.session.strokes[this.session.strokes.length-1];return!!e&&(this.updateSession({...this.session,strokes:this.session.strokes.slice(0,-1),redoStrokes:[...this.session.redoStrokes,e]}),!0)}redo(){if(!this.getActiveSession()||!this.session)return!1;if(this.session.activeStroke||0===this.session.redoStrokes.length)return!1;const e=this.session.redoStrokes[this.session.redoStrokes.length-1];return!!e&&(this.updateSession({...this.session,strokes:[...this.session.strokes,e],redoStrokes:this.session.redoStrokes.slice(0,-1)}),!0)}registerConfirmHandler(e){return this.confirmHandler=e,()=>{this.confirmHandler===e&&(this.confirmHandler=null)}}requestConfirm(e){return this.confirmHandler?this.confirmHandler(e):Promise.resolve(null)}clear(){this.session&&(this.session=null,this.snapshot=null,this.deactivateHistoryScope?.(),this.deactivateHistoryScope=null,this.notify())}clearIfEditingSessionInvalid(){if(!this.session)return;const e=this.editor.getShapeEditingSession();e?.shapeId===this.session.shapeId&&e.markId===Cf(this.session.shapeId)||this.clear()}activateHistoryScope(e){this.deactivateHistoryScope=this.editor.history.activateScope({id:`${kT}history:${e}`,getState:()=>this.getHistoryScopeState(),subscribe:e=>this.subscribe(e),undo:()=>this.undo(),redo:()=>this.redo()})}getHistoryScopeState(){const e=this.session?.activeStroke?1:0,t=this.session?.activeStroke?0:this.session?.redoStrokes.length??0;return{canUndo:(this.session?.strokes.length??0)+e>0,canRedo:t>0,undoDepth:(this.session?.strokes.length??0)+e,redoDepth:t}}setSession(e){this.session=e,this.snapshot=(e=>({shapeId:e.shapeId,brush:e.brush,strokes:e.activeStroke?[...e.strokes,e.activeStroke]:e.strokes,canUndo:e.strokes.length>0||!!e.activeStroke,canRedo:!e.activeStroke&&e.redoStrokes.length>0}))(e),this.notify()}updateSession(e){this.setSession(e)}notify(){for(const e of this.subscribers)e()}},RT=new WeakMap,LT=[{id:"smudge-yellow",label:"Yellow",hexColor:TT},{id:"smudge-orange",label:"Orange",hexColor:"#ff9900"},{id:"smudge-pink",label:"Pink",hexColor:"#ff4fd8"},{id:"smudge-green",label:"Green",hexColor:"#39ff14"},{id:"smudge-blue",label:"Blue",hexColor:"#00c8ff"},{id:"smudge-purple",label:"Purple",hexColor:"#b967ff"}],$T={id:"land.image.crop.dom-events",handle:()=>"continue",getCursor({clientPoint:e,editor:t,element:n,container:i}){const o=(e=>{const[t]=e.getSelectedShapes();if(!Df(t))return null;const n=e.getShapeEditingSession();return n&&n.shapeId===t.id&&yf(t,n.markId)?t:null})(t);if(!o)return;if(n?.closest('[data-selection-custom-handle-type="image.crop"]'))return;if(!e)return;const r=i.getBoundingClientRect(),s=new sI(e.x-r.left,e.y-r.top);return am(t,o,t.screenToPage(s))?0!==t.inputs.state.get().buttons?"grabbing":"grab":void 0}},FT={id:"land.image.smudge.dom-events",handle:()=>"continue",getCursor({clientPoint:e,container:t,editor:n}){const i=(e=>{const[t]=e.getSelectedShapes();if(!Df(t))return null;const n=e.getShapeEditingSession();return n&&n.shapeId===t.id&&Tf(t,n.markId)?t:null})(n);if(!i||!e)return;const o=t.getBoundingClientRect(),r=new sI(e.x-o.left,e.y-o.top);return am(n,i,n.screenToPage(r))?"crosshair":0!==n.inputs.state.get().buttons?"grabbing":"grab"}},UT={id:"image",editor:{id:"land.image",shapeCapabilities:[{type:"image",schemaProps:["w","h","assetId","crop","cornerRadius","altText"],reactRenderer:"supported",toolbarEntry:"supported",notes:["Image shape util, SVG exporter, and React renderer live in @land/plugin-image. Asset records store serializable metadata plus a local or remote source; File/Blob/object URL/download behavior stays in the web host."]}],shapeUtils:[new class extends cw{type="image";getDefaultProps(){return{w:240,h:180,assetId:null,crop:null,cornerRadius:0,altText:""}}validateProps(e){const t=e&&"object"==typeof e?e:{},n=this.getDefaultProps();return{w:Math.max(24,Vf(t.w,n.w)),h:Math.max(24,Vf(t.h,n.h)),assetId:(i=t.assetId,"string"==typeof i&&i.startsWith("asset:")?t.assetId:null),crop:cf(t.crop),cornerRadius:Wf(t.cornerRadius,n.cornerRadius),altText:"string"==typeof t.altText?t.altText:n.altText};var i}getLocalBounds(e){return new aI(0,0,e.props.w,e.props.h)}canReceiveTerminalBinding(e){return!0}getAllowedSelectionResizeModes(e,t){return YI}canEdit(e){return!0}onEditEnd(e,t){var n;n=e.id,kf(t.editor).clearForShape(n)}getSelectionHandleAnchors(e,t){const n={terminalHandleAnchors:[],middleHandleAnchors:[],customHandleAnchors:[]};if(!t.isOnlySelected)return n;const i=t.editor.getShapeEditingSession();return i&&i.shapeId===e.id&&yf(e,i.markId)?{terminalHandleAnchors:[],middleHandleAnchors:[],customHandleAnchors:xf({crop:e.props.crop,localToPage:t.editor.computeShapeLocalToPageTransform(e),shape:e})}:n}}],shapeSvgExporters:[new class{type="image";toSvg(e,t){const{assetId:n,altText:i,crop:o,h:r,w:s}=e.props;if(!n)return null;const a=t.resolveAssetUrl(n);if(!a)return null;const l=uf(o),d=l?{tag:"svg",attrs:{x:0,y:0,width:s,height:r,viewBox:(c=l,[wf(c.left),wf(c.top),wf(c.width),wf(c.height)].join(" ")),preserveAspectRatio:"none",overflow:"hidden"},children:[{tag:"image",attrs:{href:a,x:0,y:0,width:1,height:1,preserveAspectRatio:"none","aria-label":i||void 0}}]}:{tag:"image",attrs:{href:a,width:s,height:r,preserveAspectRatio:"none","aria-label":i||void 0}};var c;const u=Xf({cornerRadius:e.props.cornerRadius,h:r,w:s});return u<=0?d:{tag:"g",attrs:{"clip-path":`url(#${t.addDef({tag:"clipPath",attrs:{clipPathUnits:"userSpaceOnUse"},children:[{tag:"rect",attrs:{x:0,y:0,width:s,height:r,rx:u,ry:u}}]})})`},children:[d]}}}],interactionHandlers:[function(){let e=null;const t=()=>{e?.operation?.isActive&&e.operation.cancel(),e=null};return{id:"land.image.crop.interactions",editorEvent:{handleEvent(n,i){if("cancel"===i.type)return t(),"continue";if("keyboard"===i.type)return((e,t)=>{if("key_down"!==t.name)return"continue";const n=qf(e);if(!n)return"continue";if("Escape"===t.key&&!t.altKey&&!t.accelKey)return e.cancelEditing("user")&&vf(e,n.id),"handled";if("Enter"===t.key&&!t.altKey&&!t.accelKey)return e.completeEditing("user")&&vf(e,n.id),"handled";const i=(e=>{if(e.altKey||e.accelKey)return null;const t=e.shiftKey?10:1;switch(e.key){case"ArrowLeft":return new sI(t,0);case"ArrowRight":return new sI(-t,0);case"ArrowUp":return new sI(0,t);case"ArrowDown":return new sI(0,-t);default:return null}})(t);if(i){const t=(({pageDelta:e,shape:t,startCrop:n})=>{const i=cf(n);return!i||e.equals(sI.Zero())?null:If({change:e.rot(-t.rotation),crop:i,shape:t})})({pageDelta:i,shape:n,startCrop:n.props.crop});return t&&e.commands.updateShapes([t],{source:"user"}),"handled"}return"continue"})(n,i);if("pointer"!==i.type)return"continue";if("pointer_cancel"===i.name)return t(),"continue";if("pointer_down"===i.name){if(t(),0!==i.button||"select"!==n.getActiveToolId()||!n.isActiveToolInInitialState())return"continue";if(n.hitTestSelectionHandle(i.pagePoint))return"continue";const o=qf(n);return o?((e,t,n)=>{const i=e.computeShapeLocalToPageTransform(t).invert().applyToPoint(n.pagePoint);return i.x>=0&&i.y>=0&&i.x<=t.props.w&&i.y<=t.props.h})(n,o,i)?(e={pointerId:i.pointerId,shapeId:o.id,startCrop:o.props.crop,startPagePoint:i.pagePoint.clone(),startPageToLocal:n.computeShapeLocalToPageTransform(o).invert(),startShape:o,hasDragged:!1,operation:null},"handled"):n.completeEditing("user")?(vf(n,o.id),n.dispatch(i),"handled"):"continue":"continue"}return e&&i.pointerId===e.pointerId?"pointer_move"===i.name?(jf(n,i,e),"handled"):"pointer_up"===i.name?(jf(n,i,e),e.operation?.isActive&&e.operation.commit(),t(),"handled"):"continue":"continue"}},selectionHandle:Yf()}}(),function(){let e=null;const t=t=>{e=null,(e=>{kf(e).endStroke()})(t)},n=t=>{e=null,(e=>{kf(e).cancelStroke()})(t)};return{id:"land.image.smudge.interactions",editorEvent:{handleEvent(i,o){if("keyboard"===o.type)return(Zf(o)||Gf(o))&&Qf(i)&&t(i),((e,t)=>"key_down"!==t.name?"continue":Qf(e)?"Escape"!==t.key||t.altKey||t.accelKey?Gf(t)?($f(e,{replace:!0}),"handled"):Zf(t)?(t.shiftKey?e.redo():e.undo(),"handled"):"handled":(Af(e),"handled"):"continue")(i,o);if("cancel"===o.type)return Qf(i)?(n(i),Af(i),"handled"):"continue";if("pointer"!==o.type)return"continue";const r=Qf(i);if(!r)return n(i),"continue";if("pointer_down"===o.name){if(t(i),0!==o.button)return 1===o.button?"continue":"handled";const n=em(i,r,o.pagePoint),s=tm(n,r);return e={mode:s?"draw":"pan",originCamera:s?null:i.getCurrentCamera(),originScreenPoint:s?null:o.screenPoint.clone(),pointerId:o.pointerId,acceptsDrawPoints:s},s&&((e,t)=>{kf(e).beginStroke(t)})(i,{x:n.x,y:n.y,pressure:o.pressure}),"handled"}return e&&e.pointerId===o.pointerId?"pointer_move"===o.name?("draw"===e.mode&&1&o.buttons?e.acceptsDrawPoints&&(e.acceptsDrawPoints=Jf(i,r,o)):"pan"===e.mode&&e.originCamera&&e.originScreenPoint&&1&o.buttons?nm(i,o,e):t(i),"handled"):"pointer_up"===o.name?("draw"===e.mode&&e.acceptsDrawPoints?Jf(i,r,o):"pan"===e.mode&&nm(i,o,e),t(i),"handled"):"pointer_cancel"===o.name?(n(i),"handled"):"handled":"handled"}}}}()],setup:e=>(e=>{let t=null;return qo("image.cropSession.lifecycle",e.shapeEditingSessionSignal,()=>{const n=e.getShapeEditingSession(),i=n?.shapeId,o=i&&n?.markId===bf(i)?i:null;t&&t!==o&&vf(e,t),t=o})})(e)},render:{id:"land.image.react",domEventGuards:[$T,FT],selectionCustomHandleRenderers:[{type:gT,component:function({handle:e,strokeWidth:t}){const{x:n,y:i,w:o,h:r,center:s}=e.bounds,a=1.35*Math.max(o,r),l=Math.max(2.5*t,2),d={fill:"none",stroke:"rgba(37, 99, 235, 0.96)",strokeLinecap:"butt",strokeLinejoin:"miter",strokeWidth:l,pointerEvents:"none"},c=(({id:e,extension:t,outwardOffset:n,centerX:i,centerY:o})=>{switch(e){case"top_left":return{kind:"corner",points:[rm(i-n,o+t),rm(i-n,o-n),rm(i+t,o-n)].join(" ")};case"top":return{kind:"edge",x1:i-t,y1:o-n,x2:i+t,y2:o-n};case"top_right":return{kind:"corner",points:[rm(i-t,o-n),rm(i+n,o-n),rm(i+n,o+t)].join(" ")};case"right":return{kind:"edge",x1:i+n,y1:o-t,x2:i+n,y2:o+t};case"bottom_right":return{kind:"corner",points:[rm(i+n,o-t),rm(i+n,o+n),rm(i-t,o+n)].join(" ")};case"bottom":return{kind:"edge",x1:i-t,y1:o+n,x2:i+t,y2:o+n};case"bottom_left":return{kind:"corner",points:[rm(i+t,o+n),rm(i-n,o+n),rm(i-n,o-t)].join(" ")};case"left":return{kind:"edge",x1:i-n,y1:o-t,x2:i-n,y2:o+t};default:return{kind:"edge",x1:i,y1:o,x2:i,y2:o}}})({id:e.id,extension:a,outwardOffset:l/2,centerX:s.x,centerY:s.y});
79
- return Bx("g",{children:[Ax("rect",{"data-selection-custom-handle":e.id,"data-selection-custom-handle-type":e.type,"data-selection-custom-handle-id":e.id,x:n-.8*o,y:i-.8*r,width:2.6*o,height:2.6*r,fill:"transparent",style:{cursor:e.cursor??"grab",pointerEvents:"auto"}}),"corner"===c.kind?Ax("polyline",{points:c.points,...d}):Ax("line",{x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,...d})]})}}],shapeRenderers:[{type:"image",component:function({editor:e,shape:t,shapeEditingSession:n}){const{altText:i,assetId:o,crop:r,h:s,w:a}=t.props,l=o?e.resolveAssetUrl(o):null,d=Xf({cornerRadius:t.props.cornerRadius,h:s,w:a}),c=((e,t)=>Mx(t=>((e,t)=>kf(e).subscribe(t))(e,t),()=>((e,t)=>kf(e).getSnapshot(t))(e,t),()=>null))(e,t.id);if(!l)return Ax("div",{"data-ui":"image-shape-missing-asset",style:{alignItems:"center",background:"#f1f5f9",border:"1px solid #cbd5e1",borderRadius:d,boxSizing:"border-box",color:"#64748b",display:"flex",fontFamily:"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",fontSize:12,height:s,justifyContent:"center",overflow:"hidden",width:a},children:"Missing image"});const u=(({crop:e,shapeHeight:t,shapeWidth:n})=>{const i=uf(e);if(!i)return null;const o=n/i.width,r=t/i.height;return{imageX:-i.left*o,imageY:-i.top*r,imageWidth:o,imageHeight:r,rect:i}})({crop:r,shapeHeight:s,shapeWidth:a});if(u){const e=n?.shapeId===t.id&&yf(t,n.markId),o={display:"block",height:u.imageHeight,left:u.imageX,maxWidth:"none",objectFit:"fill",pointerEvents:"none",position:"absolute",top:u.imageY,userSelect:"none",width:u.imageWidth};
80
- return Bx("div",{"data-ui":"image-shape",style:{display:"block",height:s,overflow:e?"visible":"hidden",pointerEvents:"none",position:"relative",userSelect:"none",width:a},children:[e?Ax("img",{alt:"","aria-hidden":"true","data-ui":"image-crop-preview",draggable:!1,src:l,style:{...o,opacity:.1}}):null,Bx("div",{"data-ui":"image-crop-window",style:{height:s,overflow:"hidden",position:"absolute",borderRadius:d,inset:0,width:a},children:[Ax("img",{alt:i,draggable:!1,src:l,style:o}),Ax(im,{shape:t,session:c})]})]})}
81
- return Bx("div",{"data-ui":"image-shape",style:{borderRadius:d,display:"block",height:s,overflow:"hidden",pointerEvents:"none",position:"relative",userSelect:"none",width:a},children:[Ax("img",{alt:i,draggable:!1,src:l,style:{display:"block",height:s,objectFit:"fill",width:a}}),Ax(im,{shape:t,session:c})]})},hoverComponent:function({shape:e,strokeWidth:t}){
82
- return Ax("div",{"data-ui":"image-hover-outline",style:{borderRadius:Xf({cornerRadius:e.props.cornerRadius,h:e.props.h,w:e.props.w}),boxShadow:`inset 0 0 0 ${t}px ${Dw}`,inset:0,position:"absolute"}})}}]},setup:e=>{e.get(uP).add(..._f(),{id:xT,getAvailability(e){const t=Of(e);return!t||zf(e)||Nf(e)?"inapplicable":!t.isLocked&&t.props.assetId?"enabled":"disabled"},getValue:e=>Nf(e),run({context:e}){const t=Of(e);t&&!t.isLocked&&t.props.assetId&&Ef({editor:e.editor,shape:t})}},{id:vT,getAvailability:e=>Nf(e)?"enabled":"inapplicable",getValue:e=>Lf(e.editor)?.brush.size??24,run({context:e,value:t}){Rf(e.editor,{size:t})}},{id:PT,getAvailability:e=>Nf(e)?"enabled":"inapplicable",getValue(e){const t=Lf(e.editor)?.brush;return{color:t?.color??"#ffff00",opacity:t?.opacity??.45}},run({context:e,value:t}){Rf(e.editor,{color:t.color,opacity:t.opacity})}},{id:IT,getAvailability:e=>Nf(e)?"enabled":"inapplicable",run({context:e}){Af(e.editor)}},{id:wT,getAvailability:e=>Nf(e)?"enabled":"inapplicable",run({context:e}){$f(e.editor,{replace:!0})}},{id:uT,getAvailability:e=>"image"!==e.selection.commonShapeType?"inapplicable":e.selection.selectedShapes.some(e=>Df(e)&&!e.isLocked)?"enabled":"disabled",getValue:e=>(e=>{let t;for(const n of e){if(!Df(n))continue;const e=Wf(n.props.cornerRadius);if(void 0!==t){if(t!==e)return null}else t=e}return void 0===t?null:(e=>Number(e.toFixed(2)).toString())(t)})(e.selection.selectedShapes),run({context:e,value:t}){const n=(e=>{if("string"!=typeof e)return null;const t=e.trim();if(0===t.length)return null;const n=Number(t);return Number.isFinite(n)?Wf(n):null})(t);if(null===n)return;const i=e.selection.selectedShapes.filter(Df).filter(e=>!e.isLocked).map(e=>({id:e.id,props:{cornerRadius:n}}));0!==i.length&&e.editor.commands.updateShapes(i,{source:"user"})}}),e.get(vP).add({id:"image.tool-toolbar",channel:wP.toolSwitcher,order:55,actionIds:[rT],getGroups:()=>[{id:"image.tools",items:[{kind:"button",id:rT,actionId:rT,label:"Image",icon:"image-plus",dataUi:"insert-image-tool-button"}]}]},{id:"image.selection-toolbar",channel:wP.selectionProperties,order:30,actionIds:[sT,aT,lT,dT,cT,xT,PT,vT,IT,wT,uT,iT,oT],when:e=>1===e.selection.count&&"image"===e.selection.singleShapeType,getGroups(e){const t=[];return Nf(e)?[{id:"image.smudge-color",order:5,items:[{kind:"color-input",id:PT,actionId:PT,label:"Brush color",fallback:TT,opacityMode:"separate",opacityFallback:.45,presets:LT,dataUi:"image-smudge-brush-color-input"}]},{id:"image.smudge-brush",order:10,items:[{kind:"slider",id:vT,actionId:vT,label:"Brush size",min:1,max:128,step:1,dataUi:"image-smudge-brush-size-slider"}]},{id:"image.smudge-actions",order:20,items:[{kind:"button",id:IT,actionId:IT,label:"Cancel smudge",icon:"x",dataUi:"cancel-image-smudge-button"},{kind:"button",id:wT,actionId:wT,label:"Confirm smudge",icon:"check",dataUi:"confirm-image-smudge-button"}]}]:(zf(e)&&t.push({id:"image.crop-zoom",order:10,items:[{kind:"stepper",id:"image.crop.zoom-stepper",actionId:lT,label:"Zoom",options:[{value:-1,label:"-",dataUi:"image-crop-zoom-out-button"},{value:1,label:"+",dataUi:"image-crop-zoom-in-button"}]}]},{id:"image.crop-aspect",order:20,items:[{kind:"segmented",id:"image.crop.aspect-ratio-segmented",actionId:dT,options:mT.map(e=>({value:e.value,label:e.label,dataUi:`image-crop-aspect-${e.value.replace(":","-")}-button`}))}]},{id:"image.crop-actions",order:30,items:[{kind:"button",id:cT,actionId:cT,label:"Reset crop",icon:"rotate-ccw",dataUi:"reset-image-crop-button"}]}),t.push((({dataUiPrefix:e,id:t,order:n})=>({id:t,order:n,items:[Hf({dataUiPrefix:e})]}))({dataUiPrefix:"image",id:"image.style-corner-radius",order:35})),t.push({id:"image.asset",order:40,items:[{kind:"button",id:sT,actionId:sT,label:"Crop image",icon:"crop",dataUi:"crop-image-button"},{kind:"button",id:xT,actionId:xT,label:"Smudge image",icon:"pencil",dataUi:"smudge-image-button"},{kind:"button",id:aT,actionId:aT,label:"Done cropping",icon:"check",dataUi:"done-cropping-button"},{kind:"button",id:iT,actionId:iT,label:"Replace image",icon:"image-plus",dataUi:"replace-image-button"},{kind:"button",id:oT,actionId:oT,label:"Download original",icon:"download",dataUi:"download-image-original-button"}]}),t)}},{id:"image.floating-selection-toolbar",channel:wP.selectionQuickActions,order:30,actionIds:[sT,aT,lT,dT,cT,xT,PT,vT,IT,wT,uT,iT,oT],when:e=>1===e.selection.count&&"image"===e.selection.singleShapeType,getGroups:e=>Nf(e)?[{id:"image.floating-smudge-color",order:5,items:[{kind:"color-input",id:"image.floating-smudge.brush-color",actionId:PT,label:"Brush color",fallback:TT,opacityMode:"separate",opacityFallback:.45,presets:LT,dataUi:"floating-image-smudge-brush-color-input"}]},{id:"image.floating-smudge-brush",order:10,items:[{kind:"slider",id:"image.floating-smudge.brush-size",actionId:vT,label:"Brush size",min:1,max:128,step:1,dataUi:"floating-image-smudge-brush-size-slider"}]},{id:"image.floating-smudge-actions",order:20,items:[{kind:"button",id:"image.floating-smudge.cancel",actionId:IT,label:"Cancel smudge",icon:"x",dataUi:"floating-cancel-image-smudge-button"},{kind:"button",id:"image.floating-smudge.confirm",actionId:wT,label:"Confirm smudge",icon:"check",dataUi:"floating-confirm-image-smudge-button"}]}]:zf(e)?[{id:"image.floating-crop-zoom",order:10,items:[{kind:"stepper",id:"image.floating-crop.zoom-stepper",actionId:lT,label:"Zoom",options:[{value:-1,label:"-",dataUi:"floating-image-crop-zoom-out-button"},{value:1,label:"+",dataUi:"floating-image-crop-zoom-in-button"}]}]},{id:"image.floating-crop-aspect",order:20,items:[{kind:"segmented",id:"image.floating-crop.aspect-ratio-segmented",actionId:dT,options:mT.map(e=>({value:e.value,label:e.label,dataUi:`floating-image-crop-aspect-${e.value.replace(":","-")}-button`}))}]},{id:"image.floating-crop-corner-radius",order:35,items:[Hf({dataUiPrefix:"floating-image-crop"})]},{id:"image.floating-crop-actions",order:30,items:[{kind:"button",id:"image.floating-crop.done",actionId:aT,label:"Done cropping",icon:"check",dataUi:"floating-done-cropping-button"},{kind:"button",id:"image.floating-crop.reset",actionId:cT,label:"Reset crop",icon:"rotate-ccw",dataUi:"floating-reset-image-crop-button"}]}]:[{id:"image.floating-corner-radius",order:10,items:[Hf({dataUiPrefix:"floating-image"})]},{id:"image.floating-primary-actions",order:20,items:[{kind:"button",id:"image.floating.crop",actionId:sT,label:"Crop image",icon:"crop",dataUi:"floating-crop-image-button"},{kind:"button",id:"image.floating.replace",actionId:iT,label:"Replace image",icon:"image-plus",dataUi:"floating-replace-image-button"}]},{id:"image.floating-more-actions",order:30,presentation:"overflow",items:[{kind:"button",id:"image.floating.smudge",actionId:xT,label:"Smudge image",icon:"pencil",dataUi:"floating-smudge-image-button"},{kind:"button",id:"image.floating.download",actionId:oT,label:"Download original",icon:"download",dataUi:"floating-download-image-original-button"}]}]}),e.get(fP).add({id:"image.shape-context-menu",target:"selection",order:30,actionIds:[sT,xT,iT,oT],when:e=>1===e.selection.count&&"image"===e.selection.singleShapeType,getSections:()=>[{id:"image.asset-context-menu",title:"Image",items:[{kind:"command",id:sT,actionId:sT,label:"Crop image",icon:"crop",dataUi:"context-menu-crop-image-button"},{kind:"command",id:xT,actionId:xT,label:"Smudge image",icon:"pencil",dataUi:"context-menu-smudge-image-button"},{kind:"command",id:iT,actionId:iT,label:"Replace image",icon:"image-plus",dataUi:"context-menu-replace-image-button"},{kind:"command",id:oT,actionId:oT,label:"Download original",icon:"download",dataUi:"context-menu-download-image-original-button"}]}]})}},DT=d("plugin.laser.runtime"),OT=class extends uw{constructor(e){super(e,"laser"),this.initial="idle",this.addChild(new zT(e,this)),this.addChild(new NT(e,this)),this.addChild(new _T(e,this))}},zT=class extends uw{constructor(e,t){super(e,"idle",t)}onPointerDown(e){0===e.button&&this.transition("pointing",((e,t)=>{const n={sessionId:lm(e).start(),originPagePoint:t.pagePoint.clone(),trail:[t.pagePoint.clone()]};return cm(e,n),n})(this.editor,e))}},NT=class extends uw{info=null;constructor(e,t){super(e,"pointing",t)}onEnter(e){this.info=e}onPointerMove(e){this.info&&this.info.originPagePoint.dist2(e.pagePoint)>=9&&(dm(this.info,e.pagePoint),cm(this.editor,this.info),this.transition("drawing",this.info))}onPointerUp(){this.info&&lm(this.editor).finish(this.info.sessionId),this.transition("idle")}onCancel(){this.info&&lm(this.editor).finish(this.info.sessionId),this.transition("idle")}onExit(){this.info&&lm(this.editor).finish(this.info.sessionId),this.info=null}},_T=class extends uw{info=null;constructor(e,t){super(e,"drawing",t)}onEnter(e){this.info=e}onPointerMove(e){this.info&&(dm(this.info,e.pagePoint),cm(this.editor,this.info))}onPointerUp(){this.info&&lm(this.editor).finish(this.info.sessionId),this.transition("idle")}onCancel(){this.info&&lm(this.editor).finish(this.info.sessionId),this.transition("idle")}onExit(){this.info&&lm(this.editor).finish(this.info.sessionId),this.info=null}},WT=yx(()=>Qo(lm(Zo()).activeSignal)?Ax(XT,{}):null),XT=yx(()=>{const e=Zo(),t=lm(e),n=Qo(t.trailSignal),i=Qo(e.cameraZoomSignal),o=Math.max(i,1e-4),r=(()=>{const[e,t]=Tx(()=>um());return Ix(()=>{if("undefined"==typeof window)return;let e=0;const n=i=>{t(i),e=window.requestAnimationFrame(n)};return e=window.requestAnimationFrame(n),()=>{window.cancelAnimationFrame(e)}},[]),e})(),s=Cx({sessionId:0,samples:[],sourceLength:0}),a=Math.max(r,um());let l,d=[];n&&(((e,t,n,i)=>{t.sessionId!==e.sessionId&&(e.sessionId=t.sessionId,e.samples=[],e.sourceLength=0);const o=t.points;if(pm(e,i),o.length<e.sourceLength&&(e.samples=[],e.sourceLength=0),o.length===e.sourceLength)return;const r=e.sourceLength,s=o.length-r,a=e.samples[e.samples.length-1]?.time??i-JT*s;for(let l=r;l<o.length;l++){const t=o[l];hm(e,{x:t.x,y:t.y},n,Pm(a,i,(l-r+1)/s))}e.sourceLength=o.length,pm(e,i)})(s.current,n,o,a),d=function(e,t){const n=gm(e,t);return((e,t)=>{if(e.length<=1)return[...e];const n=.15+.85*(1-t),i=[e[0]];for(let o=1;o<e.length;o++)i.push(vm(i[i.length-1],e[o],n));return i})(n.length>qT?n.slice(-64):n,GT)}(s.current.samples,a),l=s.current.samples[s.current.samples.length-1]?.time);const c="ending"===n?.phase,u=0===d.length,h=c&&u?n.sessionId:null;if(Ix(()=>{null!==h&&t.clear(h)},[h,t]),!n||u)return null;const p=c&&void 0!==l?km(1-(a-l)/oM,0,1):1,g=(m=VT/o,0===(f=d).length||m<=0?null:1===f.length?Tm(mm(f[0],m/2,QT))??"":Tm((e=>{if(0===e.length)return[];if(1===e.length)return mm(e[0].point,Math.max(e[0].radius,.01),QT);const t=[],n=[];for(const a of e){const e=bm(a.direction);Cm(t,Im(a.point,wm(e,a.radius))),Cm(n,xm(a.point,wm(e,a.radius)))}const i=[];for(const a of t)Cm(i,a);const o=e[e.length-1],r=bm(o.direction),s=(({center:e,direction:t,normal:n,radius:i})=>{if(i<=0)return[];const o=[];for(let r=1;r<ZT;r++){const s=r/ZT;o.push(xm(e,xm(wm(t,Math.sin(Math.PI*s)*i),wm(n,-Math.cos(Math.PI*s)*i))))}return o})({center:o.point,direction:o.direction,normal:r,radius:o.radius});for(const a of s)Cm(i,a);for(let a=n.length-1;a>=0;a--)Cm(i,n[a]);return i})(((e,t)=>{const n=(e=>{const t=[0];for(let n=1;n<e.length;n++)t.push(t[n-1]+Sm(e[n-1],e[n]));return t})(e),i=Math.max(t,n[n.length-1]??0);return e.map((o,r)=>{const s=n[r]??0,a=km(s/i,0,1);return{point:o,direction:fm(e,r),radius:t/2*a,runningLength:s}})})(f,m))));var f,m;return g?Bx("g",{"data-ui":"laser-trail-overlay",style:{opacity:p},children:[Ax("path",{"data-ui":"laser-trail-glow",d:g,fill:KT,style:{filter:`blur(${YT/o}px)`}}),Ax("path",{"data-ui":"laser-trail-beam",d:g,fill:HT})]}):null}),HT="rgb(255, 38, 38)",KT="rgba(255, 48, 48, 0.55)",YT=4,qT=64,jT=1,VT=12,GT=.32,ZT=8,QT=13,JT=16,eM=8,tM=600,nM=300,iM=1400,oM=400,rM={id:"laser",editor:{id:"land.laser",setup(e){e.runtime.provide(DT,(()=>{const e=a("laser.trail",null);let t=1;return{trailSignal:e,activeSignal:l("laser.active",()=>null!==e.get()),start(){const n=t++;return e.set({sessionId:n,phase:"active",points:[]}),n},set(t,n){const i=e.get();i&&i.sessionId===t&&e.set({sessionId:t,phase:"active",points:n.map(e=>e.clone())})},finish(t){const n=e.get();n&&n.sessionId===t&&e.set({...n,phase:"ending"})},clear(t){e.get()?.sessionId===t&&e.set(null)}}})()),e.tools.register("laser",e=>new OT(e),{shortcut:"l"})}},render:{id:"land.laser.react",canvasOverlays:[{id:"land.laser.trail-overlay",layer:"below-host",component:WT}]},setup:e=>{e.get(vP).add({id:"laser.tool-toolbar",channel:wP.toolSwitcher,order:55,actionIds:[xP],getGroups:e=>[{id:"laser.tools",items:[{kind:"button",id:"laser.tool.laser",actionId:xP,value:"laser",label:"Laser",shortcut:e.editor.shortcuts.getToolShortcutLabel("laser"),icon:"wand",dataUi:"laser-tool-button"}]}]})}},sM="path.node",aM="path.control",lM=new WeakMap,dM=["nonzero","evenodd"],cM=["corner","smooth","symmetric"],uM=1e-6,hM=1/3,pM=Math.PI/8,gM=new WeakMap,fM=new WeakMap,mM="land.path.draftSubpathId",SM="land.path.previewNodeId",yM="var(--land-selection, #2563eb)",bM="rgba(255, 255, 255, 0.98)",xM=class{editor;deactivateHistoryScope=null;session=null;subscribers=new Set;constructor(e){this.editor=e}start(e,t,n){const i=this.editor.getShape(t);if(!Fm(i))return!1;if(this.session?.mode===e&&this.session.shapeId===t)return!0;this.clear();const o=[ZS(this.editor,i,e)];return this.session={mode:e,shapeId:t,snapshots:o,index:o.length-1,initialShapeSignature:QS(i),onApply:n?.onApply,onBoundaryUndo:n?.onBoundaryUndo},this.deactivateHistoryScope=this.editor.history.activateScope({id:`path.${e}.temporary:${t}`,getState:()=>this.getState(),subscribe:e=>this.subscribe(e),undo:()=>this.undo(),redo:()=>this.redo()}),this.notify(),!0}record(e){const t=this.session,n=this.editor.getShape(e);if(!t||t.shapeId!==e||!Fm(n))return!1;const i=ZS(this.editor,n,t.mode);return t.snapshots[t.index]?.signature===i.signature?(t.snapshots[t.index]=i,!1):(t.snapshots=[...t.snapshots.slice(0,t.index+1),i],t.index=t.snapshots.length-1,this.notify(),!0)}replaceCurrent(e){const t=this.session,n=this.editor.getShape(e);if(!t||t.shapeId!==e||!Fm(n))return!1;const i=ZS(this.editor,n,t.mode),o=t.snapshots[t.index];return t.snapshots[t.index]=i,o?.signature!==i.signature&&(this.notify(),!0)}end(e,t){return this.session?.mode===e&&this.session.shapeId===t&&(this.clear(),!0)}hasNetChanges(e,t){const n=this.session,i=this.editor.getShape(t);return!(!n||n.mode!==e||n.shapeId!==t||Fm(i)&&n.initialShapeSignature===QS(i))}undo(){const e=this.session;return!!e&&(e.index<=0?e.onBoundaryUndo?.()??!1:this.applySnapshot(e.index-1))}redo(){const e=this.session;return!(!e||e.index>=e.snapshots.length-1)&&this.applySnapshot(e.index+1)}applySnapshot(e){const t=this.session,n=t?.snapshots[e];if(!t||!n)return!1;const i=this.editor.getShape(t.shapeId);if(!Fm(i))return this.clear(),!1;t.index=e;const o=BS(this.editor);this.editor.commands.updateShapes([{id:t.shapeId,..."create"===t.mode&&n.draftMeta?{meta:_S(i.meta,n.draftMeta)}:{},props:{subpaths:Km(n.subpaths)}}],{source:"user"});const r=this.editor.getShape(t.shapeId);Fm(r)&&t.onApply?.(r);const s=n.selection??o;return s&&Fm(r)&&this.editor.getShapeEditingSession()?.shapeId===t.shapeId?FS(this.editor,r,s.nodes,s.primary):LS(this.editor),this.notify(),!0}getState(){const e=this.session?.index??0,t=(this.session?.snapshots.length??1)-1,n=this.session?.onBoundaryUndo?1:0;return{canUndo:e+n>0,canRedo:e<t,undoDepth:e+n,redoDepth:Math.max(0,t-e)}}subscribe(e){return this.subscribers.add(e),()=>{this.subscribers.delete(e)}}clear(){(this.session||this.deactivateHistoryScope)&&(this.session=null,this.deactivateHistoryScope?.(),this.deactivateHistoryScope=null,this.notify())}notify(){for(const e of this.subscribers)e()}},IM=new WeakMap,wM=new WeakMap,vM="path.edit",PM=Math.PI/4,kM=1,CM=new WeakMap,TM=new WeakMap,MM=Math.PI/4,EM=1,AM=1,BM=class extends uw{draft=null;operation=null;constructor(e){super(e,"path"),this.initial="idle",this.addChild(new RM(e,this)),this.addChild(new LM(e,this))}onEnter(){this.editor.clearSelectionTransients()}onExit(){this.draft&&(this.canFinishDraft()?this.finishDraft({switchToSelect:!1}):this.cancelDraft())}isInInitialState(){return!this.hasDraft()&&super.isInInitialState()}startOrExtend(e,t){if(!this.draft){this.operation=this.editor.operations.begin({kind:"path.create",label:"shape.create",source:"user",history:"record"});const t=this.editor.getDefaultShapeProps("path"),n=`subpath:${AM+=1}`,i=Ay(),o={id:i,x:0,y:0,kind:"corner"},[r]=this.editor.commands.createShapes([{type:"path",x:e.x,y:e.y,meta:_S({},{subpathId:n,previewNodeId:null}),props:{...t,subpaths:[{id:n,closed:!1,nodes:[o]}]}}],{source:"user",autoReparent:!1});if(!Fm(r))throw this.cancelOperation(),new Error("Failed to create path shape");return this.editor.commands.setSelectedShapeIds([r.id],{source:"system"}),this.draft={shapeId:r.id,subpathId:n,lastNodeId:i,createdShape:!0,previewNodeId:null},ey(this.editor,"create",r.id,{onBoundaryUndo:()=>this.draft?.shapeId===r.id&&(this.cancelDraft(),this.editor.commands.setActiveTool("select",{source:"system"}),!0),onApply:e=>{const t=this.draft;if(!t||t.shapeId!==e.id)return;const n=uS(e.props.subpaths,t.subpathId);this.draft={...t,lastNodeId:n?.nodes.at(-1)?.id??t.lastNodeId,previewNodeId:null}}}),{shapeId:r.id,subpathId:n,nodeId:i,originPagePoint:e.clone(),startNode:Xm(o),finishOnPointerUp:!1}}const n=this.editor.getShape(this.draft.shapeId);if(!Fm(n))return this.cancelDraft(),null;const i=t.shiftKey?Ry(this.editor,n,this.draft.subpathId,this.draft.previewNodeId)??e:e,o=t.shiftKey?Ly(i,e):e;if(function(e,t,n,i,o){const r=((e,t,n)=>{const i=uS(t.props.subpaths,n)?.nodes[0];return i?e.computeShapeLocalToPageTransform(t).applyToPoint(new sI(i.x,i.y)):null})(e,t,n),s=uS(t.props.subpaths,n),a=s?.nodes.filter(e=>e.id!==i).length??0;return!(!r||!s||a<3)&&r.dist(o)<=10/e.getCurrentCamera().z}(this.editor,n,this.draft.subpathId,this.draft.previewNodeId,e)){const t=this.draft,i=uS(n.props.subpaths,t.subpathId)?.nodes.find(e=>e.id!==t.previewNodeId);return i?(this.editor.commands.updateShapes([{id:n.id,meta:_S(n.meta,{subpathId:t.subpathId,previewNodeId:null}),props:{subpaths:$y(n.props.subpaths,t).map(e=>e.id===t.subpathId?{...e,closed:!0}:e)}}],{source:"user"}),this.draft={...t,previewNodeId:null},{shapeId:n.id,subpathId:t.subpathId,nodeId:i.id,originPagePoint:e.clone(),startNode:Xm(i),finishOnPointerUp:!0}):null}const r=By(this.editor,n,o),s=this.draft.previewNodeId??Ay(),a=n.props.subpaths.map(e=>e.id===this.draft?.subpathId?this.draft.previewNodeId?{...e,nodes:e.nodes.map(e=>e.id===this.draft?.previewNodeId?{id:s,x:r.x,y:r.y,kind:"corner"}:e)}:{...e,nodes:[...e.nodes,{id:s,x:r.x,y:r.y,kind:"corner"}]}:e);return this.editor.commands.updateShapes([{id:n.id,meta:_S(n.meta,{subpathId:this.draft.subpathId,previewNodeId:null}),props:{subpaths:a}}],{source:"user"}),this.draft={...this.draft,lastNodeId:s,previewNodeId:null},{shapeId:n.id,subpathId:this.draft.subpathId,nodeId:s,originPagePoint:e.clone(),startNode:{id:s,x:r.x,y:r.y,kind:"corner"},finishOnPointerUp:!1}}updateNodeDrag(e,t,n){const i=this.editor.getShape(e.shapeId);if(!Fm(i))return;const o=n.shiftKey?Ly(e.originPagePoint,t):t,r=By(this.editor,i,e.originPagePoint),s=By(this.editor,i,o),a=e.originPagePoint.dist(o)*this.editor.getCurrentCamera().z>=3,l=pS(i.props.subpaths,e.subpathId,e.nodeId,()=>a?((e,t,n)=>({...e,kind:n.altKey?"smooth":"symmetric",in:{dx:-t.x,dy:-t.y},out:{dx:t.x,dy:t.y}}))(e.startNode,s.sub(r),n):Xm(e.startNode));this.editor.commands.updateShapes([{id:i.id,meta:_S(i.meta,{subpathId:e.subpathId,previewNodeId:this.draft?.previewNodeId??null}),props:{subpaths:l}}],{source:"user"})}updatePreview(e,t){if(!this.draft)return;const n=this.editor.getShape(this.draft.shapeId);if(!Fm(n)||Fy(n,this.draft)<1)return;const i=t.shiftKey?Ry(this.editor,n,this.draft.subpathId,this.draft.previewNodeId):null,o=i?Ly(i,e):e,r=By(this.editor,n,o),s=this.draft.previewNodeId??Ay(),a=n.props.subpaths.map(e=>e.id!==this.draft?.subpathId?e:this.draft.previewNodeId?{...e,nodes:e.nodes.map(e=>e.id===this.draft?.previewNodeId?{id:s,x:r.x,y:r.y,kind:"corner"}:e)}:{...e,nodes:[...e.nodes,{id:s,x:r.x,y:r.y,kind:"corner"}]});this.editor.commands.updateShapes([{id:n.id,meta:_S(n.meta,{subpathId:this.draft.subpathId,previewNodeId:s}),props:{subpaths:a}}],{source:"user"}),this.draft={...this.draft,previewNodeId:s}}canFinishDraft(){if(!this.draft)return!1;const e=this.editor.getShape(this.draft.shapeId);return!!Fm(e)&&Fy(e,this.draft)>=2}finishDraft(e={}){if(!this.draft)return;const t=e.switchToSelect??!0,n=this.editor.getShape(this.draft.shapeId);if(Fm(n)){const e=$y(n.props.subpaths,this.draft),t=rS(sS({...n,props:{...n.props,subpaths:e}},this.editor.computeShapeLocalToPageTransform(n)),n.props);this.editor.commands.updateShapes([{id:n.id,x:t.x,y:t.y,rotation:0,skewX:0,scaleX:1,scaleY:1,meta:WS(n.meta),props:{subpaths:t.subpaths}}],{source:"user"}),this.draft.createdShape&&we(this.editor,n.id,{source:"user"})}ny(this.editor,"create",this.draft.shapeId),this.commitOperation(),this.draft=null,t&&!this.editor.isToolLocked()&&this.editor.commands.setActiveTool("select",{source:"system"})}finishDraftAndEdit(){const e=this.draft?.shapeId;if(e){if(!this.canFinishDraft())return this.cancelDraft(),void(this.editor.isToolLocked()||this.editor.commands.setActiveTool("select",{source:"system"}));this.finishDraft({switchToSelect:!1}),Fm(this.editor.getShape(e))&&(this.editor.commands.setActiveTool("select",{source:"system"}),this.editor.startEditingShape({shapeId:e,markId:"path.edit",entryMode:"focusEnd"},"user"))}}cancelDraft(){this.draft&&(ny(this.editor,"create",this.draft.shapeId),this.cancelOperation(),this.draft=null)}hasDraft(){return null!==this.draft}commitOperation(){const e=this.operation;this.operation=null,e?.commit()}cancelOperation(){const e=this.operation;this.operation=null,e?.isActive&&e.cancel()}},RM=class extends uw{tool;constructor(e,t){super(e,"idle",t),this.tool=t}onPointerDown(e){if(0!==e.button)return;const t=this.tool.startOrExtend(e.pagePoint,{altKey:e.altKey,shiftKey:e.shiftKey});t&&this.transition("dragging_node",t)}onPointerMove(e){this.tool.updatePreview(e.pagePoint,{shiftKey:e.shiftKey})}onKeyDown(e){("Enter"===e.key&&this.tool.hasDraft()||"Escape"===e.key&&this.tool.hasDraft())&&this.tool.finishDraftAndEdit()}onCancel(e){"escape"===e.reason&&this.tool.hasDraft()&&this.tool.finishDraftAndEdit()}},LM=class extends uw{tool;info=null;constructor(e,t){super(e,"dragging_node",t),this.tool=t}onEnter(e){this.info=e}onPointerMove(e){this.info&&this.tool.updateNodeDrag(this.info,e.pagePoint,{altKey:e.altKey,shiftKey:e.shiftKey})}onPointerUp(e){const t=this.info;t&&(this.tool.updateNodeDrag(t,e.pagePoint,{altKey:e.altKey,shiftKey:e.shiftKey}),ty(this.editor,t.shapeId)),this.transition("idle"),t?.finishOnPointerUp&&this.tool.finishDraft()}onCancel(){this.tool.cancelDraft(),this.transition("idle")}onExit(){this.info=null}},$M=Zx((e,t)=>{var n,i;n=e,i=function(){function e(e,t){return e>t?1:e<t?-1:0}function t(e,t,n){for(var i=new c(null,null),o=i,r=i;;){var s=n(e,t.key);if(s<0){if(null===t.left)break;if(n(e,t.left.key)<0&&(t.left=(a=t.left).right,a.right=t,null===(t=a).left))break;r.left=t,r=t,t=t.left}else{if(!(s>0))break;if(null===t.right)break;var a;if(n(e,t.right.key)>0&&(t.right=(a=t.right).left,a.left=t,null===(t=a).right))break;o.right=t,o=t,t=t.right}}return o.right=t.left,r.left=t.right,t.left=i.right,t.right=i.left,t}function n(e,n,i,o){var r=new c(e,n);if(null===i)return r.left=r.right=null,r;var s=o(e,(i=t(e,i,o)).key);return s<0?(r.left=i.left,r.right=i,i.left=null):s>=0&&(r.right=i.right,r.left=i,i.right=null),r}function i(e,n,i){var o=null,r=null;if(n){var s=i((n=t(e,n,i)).key,e);0===s?(o=n.left,r=n.right):s<0?(r=n.right,n.right=null,o=n):(o=n.left,n.left=null,r=n)}return{left:o,right:r}}function o(e,t,n,i,r){if(e){i(t+(n?"└── ":"├── ")+r(e)+"\n");var s=t+(n?" ":"│ ");e.left&&o(e.left,s,!1,i,r),e.right&&o(e.right,s,!0,i,r)}}function r(e,t,n,i){var o=i-n;if(o>0){var s=n+Math.floor(o/2),a=new c(e[s],t[s]);return a.left=r(e,t,n,s),a.right=r(e,t,s+1,i),a}return null}function s(e,t,n){var i=n-t;if(i>0){var o=t+Math.floor(i/2),r=s(e,t,o),a=e.head;return a.left=r,e.head=e.head.next,a.right=s(e,o+1,n),a}return null}function a(e,t,n,i,o){if(!(n>=i)){for(var r=e[n+i>>1],s=n-1,l=i+1;;){do{s++}while(o(e[s],r)<0);do{l--}while(o(e[l],r)>0);if(s>=l)break;var d=e[s];e[s]=e[l],e[l]=d,d=t[s],t[s]=t[l],t[l]=d}a(e,t,n,l,o),a(e,t,l+1,i,o)}}function l(e,t,n,i,o){let r,s,a,l,d=t[0],c=i[0],u=0,h=0;c>d==c>-d?(r=d,d=t[++u]):(r=c,c=i[++h]);let p=0;if(u<e&&h<n)for(c>d==c>-d?(s=d+r,a=r-(s-d),d=t[++u]):(s=c+r,a=r-(s-c),c=i[++h]),r=s,0!==a&&(o[p++]=a);u<e&&h<n;)c>d==c>-d?(s=r+d,l=s-r,a=r-(s-l)+(d-l),d=t[++u]):(s=r+c,l=s-r,a=r-(s-l)+(c-l),c=i[++h]),r=s,0!==a&&(o[p++]=a);for(;u<e;)s=r+d,l=s-r,a=r-(s-l)+(d-l),d=t[++u],r=s,0!==a&&(o[p++]=a);for(;h<n;)s=r+c,l=s-r,a=r-(s-l)+(c-l),c=i[++h],r=s,0!==a&&(o[p++]=a);return 0===r&&0!==p||(o[p++]=r),p}function d(e){return new Float64Array(e)}var c=function(e,t){this.next=null,this.key=e,this.data=t,this.left=null,this.right=null},u=function(){function l(t){void 0===t&&(t=e),this._root=null,this._size=0,this._comparator=t}return l.prototype.insert=function(e,t){return this._size++,this._root=n(e,t,this._root,this._comparator)},l.prototype.add=function(e,n){var i=new c(e,n);null===this._root&&(i.left=i.right=null,this._size++,this._root=i);var o=this._comparator,r=t(e,this._root,o),s=o(e,r.key);return 0===s?this._root=r:(s<0?(i.left=r.left,i.right=r,r.left=null):s>0&&(i.right=r.right,i.left=r,r.right=null),this._size++,this._root=i),this._root},l.prototype.remove=function(e){this._root=this._remove(e,this._root,this._comparator)},l.prototype._remove=function(e,n,i){var o;return null===n?null:0===i(e,(n=t(e,n,i)).key)?(null===n.left?o=n.right:(o=t(e,n.left,i)).right=n.right,this._size--,o):n},l.prototype.pop=function(){var e=this._root;if(e){for(;e.left;)e=e.left;return this._root=t(e.key,this._root,this._comparator),this._root=this._remove(e.key,this._root,this._comparator),{key:e.key,data:e.data}}return null},l.prototype.findStatic=function(e){for(var t=this._root,n=this._comparator;t;){var i=n(e,t.key);if(0===i)return t;t=i<0?t.left:t.right}return null},l.prototype.find=function(e){return this._root&&(this._root=t(e,this._root,this._comparator),0!==this._comparator(e,this._root.key))?null:this._root},l.prototype.contains=function(e){for(var t=this._root,n=this._comparator;t;){var i=n(e,t.key);if(0===i)return!0;t=i<0?t.left:t.right}return!1},l.prototype.forEach=function(e,t){for(var n=this._root,i=[],o=!1;!o;)null!==n?(i.push(n),n=n.left):0!==i.length?(n=i.pop(),e.call(t,n),n=n.right):o=!0;return this},l.prototype.range=function(e,t,n,i){for(var o=[],r=this._comparator,s=this._root;0!==o.length||s;)if(s)o.push(s),s=s.left;else{if(r((s=o.pop()).key,t)>0)break;if(r(s.key,e)>=0&&n.call(i,s))return this;s=s.right}return this},l.prototype.keys=function(){var e=[];return this.forEach(t=>e.push(t.key)),e},l.prototype.values=function(){var e=[];return this.forEach(t=>e.push(t.data)),e},l.prototype.min=function(){return this._root?this.minNode(this._root).key:null},l.prototype.max=function(){return this._root?this.maxNode(this._root).key:null},l.prototype.minNode=function(e){if(void 0===e&&(e=this._root),e)for(;e.left;)e=e.left;return e},l.prototype.maxNode=function(e){if(void 0===e&&(e=this._root),e)for(;e.right;)e=e.right;return e},l.prototype.at=function(e){for(var t=this._root,n=!1,i=0,o=[];!n;)if(t)o.push(t),t=t.left;else if(o.length>0){if(t=o.pop(),i===e)return t;i++,t=t.right}else n=!0;return null},l.prototype.next=function(e){var t=this._root,n=null;if(e.right){for(n=e.right;n.left;)n=n.left;return n}for(var i=this._comparator;t;){var o=i(e.key,t.key);if(0===o)break;o<0?(n=t,t=t.left):t=t.right}return n},l.prototype.prev=function(e){var t=this._root,n=null;if(null!==e.left){for(n=e.left;n.right;)n=n.right;return n}for(var i=this._comparator;t;){var o=i(e.key,t.key);if(0===o)break;o<0?t=t.left:(n=t,t=t.right)}return n},l.prototype.clear=function(){return this._root=null,this._size=0,this},l.prototype.toList=function(){return(()=>{for(var e=this._root,t=[],n=!1,i=new c(null,null),o=i;!n;)e?(t.push(e),e=e.left):t.length>0?e=(e=o=o.next=t.pop()).right:n=!0;return o.next=null,i.next})()},l.prototype.load=function(e,t,n){void 0===t&&(t=[]),void 0===n&&(n=!1);var i=e.length,o=this._comparator;if(n&&a(e,t,0,i-1,o),null===this._root)this._root=r(e,t,0,i),this._size=i;else{var l=((e,t,n)=>{for(var i=new c(null,null),o=i,r=e,s=t;null!==r&&null!==s;)n(r.key,s.key)<0?(o.next=r,r=r.next):(o.next=s,s=s.next),o=o.next;return null!==r?o.next=r:null!==s&&(o.next=s),i.next})(this.toList(),((e,t)=>{for(var n=new c(null,null),i=n,o=0;o<e.length;o++)i=i.next=new c(e[o],t[o]);return i.next=null,n.next})(e,t),o);this._root=s({head:l},0,i=this._size+i)}return this},l.prototype.isEmpty=function(){return null===this._root},Object.defineProperty(l.prototype,"size",{get:function(){return this._size},enumerable:!0,configurable:!0}),Object.defineProperty(l.prototype,"root",{get:function(){return this._root},enumerable:!0,configurable:!0}),l.prototype.toString=function(e){void 0===e&&(e=e=>String(e.key));var t=[];return o(this._root,"",!0,e=>t.push(e),e),t.join("")},l.prototype.update=function(e,o,r){var s=this._comparator,a=i(e,this._root,s),l=a.left,d=a.right;s(e,o)<0?d=n(o,r,d,s):l=n(o,r,l,s),this._root=((e,n,i)=>null===n?e:(null===e||((n=t(e.key,n,i)).left=e),n))(l,d,s)},l.prototype.split=function(e){return i(e,this._root,this._comparator)},l.prototype[Symbol.iterator]=function(){var e,t,n;return function(e,t){function n(n){return s=>(n=>{if(i)throw new TypeError("Generator is already executing.");for(;a;)try{if(i=1,o&&(r=2&n[0]?o.return:n[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,n[1])).done)return r;switch(o=0,r&&(n=[2&n[0],r.value]),n[0]){case 0:case 1:r=n;break;case 4:return a.label++,{value:n[1],done:!1};case 5:a.label++,o=n[1],n=[0];continue;case 7:n=a.ops.pop(),a.trys.pop();continue;default:if(!((r=(r=a.trys).length>0&&r[r.length-1])||6!==n[0]&&2!==n[0])){a=0;continue}if(3===n[0]&&(!r||n[1]>r[0]&&n[1]<r[3])){a.label=n[1];break}if(6===n[0]&&a.label<r[1]){a.label=r[1],r=n;break}if(r&&a.label<r[2]){a.label=r[2],a.ops.push(n);break}r[2]&&a.ops.pop(),a.trys.pop();continue}n=t.call(e,a)}catch(s){n=[6,s],o=0}finally{i=r=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}})([n,s])}var i,o,r,s,a={label:0,sent:()=>{if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return s={next:n(0),throw:n(1),return:n(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s}(this,function(i){switch(i.label){case 0:e=this._root,t=[],n=!1,i.label=1;case 1:return n?[3,6]:null===e?[3,2]:(t.push(e),e=e.left,[3,5]);case 2:return 0===t.length?[3,4]:[4,e=t.pop()];case 3:return i.sent(),e=e.right,[3,5];case 4:n=!0,i.label=5;case 5:return[3,1];case 6:return[2]}})},l}();const h=(e,t)=>e.ll.x<=t.x&&t.x<=e.ur.x&&e.ll.y<=t.y&&t.y<=e.ur.y,p=(e,t)=>t.ur.x<e.ll.x||e.ur.x<t.ll.x||t.ur.y<e.ll.y||e.ur.y<t.ll.y?null:{ll:{x:e.ll.x<t.ll.x?t.ll.x:e.ll.x,y:e.ll.y<t.ll.y?t.ll.y:e.ll.y},ur:{x:e.ur.x<t.ur.x?e.ur.x:t.ur.x,y:e.ur.y<t.ur.y?e.ur.y:t.ur.y}};let g=Number.EPSILON;void 0===g&&(g=Math.pow(2,-52));const f=g*g,m=(e,t)=>{if(-g<e&&e<g&&-g<t&&t<g)return 0;const n=e-t;return n*n<f*e*t?0:e<t?-1:1};class S{constructor(){this.tree=new u,this.round(0)}round(e){const t=this.tree.add(e),n=this.tree.prev(t);if(null!==n&&0===m(t.key,n.key))return this.tree.remove(e),n.key;const i=this.tree.next(t);return null!==i&&0===m(t.key,i.key)?(this.tree.remove(e),i.key):e}}const y=new class{constructor(){this.reset()}reset(){this.xRounder=new S,this.yRounder=new S}round(e,t){return{x:this.xRounder.round(e),y:this.yRounder.round(t)}}},b=134217729,x=d(4),I=d(8),w=d(12),v=d(16),P=d(4),k=(e,t)=>e.x*t.y-e.y*t.x,C=(e,t)=>e.x*t.x+e.y*t.y,T=(e,t,n)=>{const i=function(e,t,n,i,o,r){const s=(t-r)*(n-o),a=(e-o)*(i-r),d=s-a,c=Math.abs(s+a);return Math.abs(d)>=33306690738754716e-32*c?d:-((e,t,n,i,o,r,s)=>{let a,d,c,u,h,p,g,f,m,S,y,k,C,T,M,E,A,B;const R=e-o,L=n-o,$=t-r,F=i-r;T=R*F,p=b*R,g=p-(p-R),f=R-g,p=b*F,m=p-(p-F),S=F-m,M=f*S-(T-g*m-f*m-g*S),E=$*L,p=b*$,g=p-(p-$),f=$-g,p=b*L,m=p-(p-L),S=L-m,A=f*S-(E-g*m-f*m-g*S),y=M-A,h=M-y,x[0]=M-(y+h)+(h-A),k=T+y,h=k-T,C=T-(k-h)+(y-h),y=C-E,h=C-y,x[1]=C-(y+h)+(h-E),B=k+y,h=B-k,x[2]=k-(B-h)+(y-h),x[3]=B;let U=((e,t)=>{let n=t[0];for(let i=1;i<4;i++)n+=t[i];return n})(0,x),D=22204460492503146e-32*s;if(U>=D||-U>=D)return U;if(h=e-R,a=e-(R+h)+(h-o),h=n-L,c=n-(L+h)+(h-o),h=t-$,d=t-($+h)+(h-r),h=i-F,u=i-(F+h)+(h-r),0===a&&0===d&&0===c&&0===u)return U;if(D=11093356479670487e-47*s+33306690738754706e-32*Math.abs(U),U+=R*u+F*a-($*c+L*d),U>=D||-U>=D)return U;T=a*F,p=b*a,g=p-(p-a),f=a-g,p=b*F,m=p-(p-F),S=F-m,M=f*S-(T-g*m-f*m-g*S),E=d*L,p=b*d,g=p-(p-d),f=d-g,p=b*L,m=p-(p-L),S=L-m,A=f*S-(E-g*m-f*m-g*S),y=M-A,h=M-y,P[0]=M-(y+h)+(h-A),k=T+y,h=k-T,C=T-(k-h)+(y-h),y=C-E,h=C-y,P[1]=C-(y+h)+(h-E),B=k+y,h=B-k,P[2]=k-(B-h)+(y-h),P[3]=B;const O=l(4,x,4,P,I);T=R*u,p=b*R,g=p-(p-R),f=R-g,p=b*u,m=p-(p-u),S=u-m,M=f*S-(T-g*m-f*m-g*S),E=$*c,p=b*$,g=p-(p-$),f=$-g,p=b*c,m=p-(p-c),S=c-m,A=f*S-(E-g*m-f*m-g*S),y=M-A,h=M-y,P[0]=M-(y+h)+(h-A),k=T+y,h=k-T,C=T-(k-h)+(y-h),y=C-E,h=C-y,P[1]=C-(y+h)+(h-E),B=k+y,h=B-k,P[2]=k-(B-h)+(y-h),P[3]=B;const z=l(O,I,4,P,w);return T=a*u,p=b*a,g=p-(p-a),f=a-g,p=b*u,m=p-(p-u),S=u-m,M=f*S-(T-g*m-f*m-g*S),E=d*c,p=b*d,g=p-(p-d),f=d-g,p=b*c,m=p-(p-c),S=c-m,A=f*S-(E-g*m-f*m-g*S),y=M-A,h=M-y,P[0]=M-(y+h)+(h-A),k=T+y,h=k-T,C=T-(k-h)+(y-h),y=C-E,h=C-y,P[1]=C-(y+h)+(h-E),B=k+y,h=B-k,P[2]=k-(B-h)+(y-h),P[3]=B,v[l(z,w,4,P,v)-1]})(e,t,n,i,o,r,c)}(e.x,e.y,t.x,t.y,n.x,n.y);return i>0?-1:i<0?1:0},M=e=>Math.sqrt(C(e,e)),E=(e,t,n)=>{const i={x:t.x-e.x,y:t.y-e.y},o={x:n.x-e.x,y:n.y-e.y};return k(o,i)/M(o)/M(i)},A=(e,t,n)=>{const i={x:t.x-e.x,y:t.y-e.y},o={x:n.x-e.x,y:n.y-e.y};return C(o,i)/M(o)/M(i)},B=(e,t,n)=>0===t.y?null:{x:e.x+t.x/t.y*(n-e.y),y:n},R=(e,t,n)=>0===t.x?null:{x:n,y:e.y+t.y/t.x*(n-e.x)};class L{static compare(e,t){const n=L.comparePoints(e.point,t.point);return 0!==n?n:(e.point!==t.point&&e.link(t),e.isLeft!==t.isLeft?e.isLeft?1:-1:F.compare(e.segment,t.segment))}static comparePoints(e,t){return e.x<t.x?-1:e.x>t.x?1:e.y<t.y?-1:e.y>t.y?1:0}constructor(e,t){void 0===e.events?e.events=[this]:e.events.push(this),this.point=e,this.isLeft=t}link(e){if(e.point===this.point)throw new Error("Tried to link already linked events");const t=e.point.events;for(let n=0,i=t.length;n<i;n++){const e=t[n];this.point.events.push(e),e.point=this.point}this.checkForConsuming()}checkForConsuming(){const e=this.point.events.length;for(let t=0;t<e;t++){const n=this.point.events[t];if(void 0===n.segment.consumedBy)for(let i=t+1;i<e;i++){const e=this.point.events[i];void 0===e.consumedBy&&n.otherSE.point.events===e.otherSE.point.events&&n.segment.consume(e.segment)}}}getAvailableLinkedEvents(){const e=[];for(let t=0,n=this.point.events.length;t<n;t++){const n=this.point.events[t];n!==this&&!n.segment.ringOut&&n.segment.isInResult()&&e.push(n)}return e}getLeftmostComparator(e){const t=new Map,n=n=>{const i=n.otherSE;t.set(n,{sine:E(this.point,e.point,i.point),cosine:A(this.point,e.point,i.point)})};return(e,i)=>{t.has(e)||n(e),t.has(i)||n(i);const{sine:o,cosine:r}=t.get(e),{sine:s,cosine:a}=t.get(i);return o>=0&&s>=0?r<a?1:r>a?-1:0:o<0&&s<0?r<a?-1:r>a?1:0:s<o?-1:s>o?1:0}}}let $=0;class F{static compare(e,t){const n=e.leftSE.point.x,i=t.leftSE.point.x,o=e.rightSE.point.x,r=t.rightSE.point.x;if(r<n)return 1;if(o<i)return-1;const s=e.leftSE.point.y,a=t.leftSE.point.y,l=e.rightSE.point.y,d=t.rightSE.point.y;if(n<i){if(a<s&&a<l)return 1;if(a>s&&a>l)return-1;const n=e.comparePoint(t.leftSE.point);if(n<0)return 1;if(n>0)return-1;const i=t.comparePoint(e.rightSE.point);return 0!==i?i:-1}if(n>i){if(s<a&&s<d)return-1;if(s>a&&s>d)return 1;const n=t.comparePoint(e.leftSE.point);if(0!==n)return n;const i=e.comparePoint(t.rightSE.point);return i<0?1:i>0?-1:1}if(s<a)return-1;if(s>a)return 1;if(o<r){const n=t.comparePoint(e.rightSE.point);if(0!==n)return n}if(o>r){const n=e.comparePoint(t.rightSE.point);if(n<0)return 1;if(n>0)return-1}if(o!==r){const e=l-s,t=o-n,c=d-a,u=r-i;if(e>t&&c<u)return 1;if(e<t&&c>u)return-1}return o>r?1:o<r||l<d?-1:l>d?1:e.id<t.id?-1:e.id>t.id?1:0}constructor(e,t,n,i){this.id=++$,this.leftSE=e,e.segment=this,e.otherSE=t,this.rightSE=t,t.segment=this,t.otherSE=e,this.rings=n,this.windings=i}static fromRing(e,t,n){let i,o,r;const s=L.comparePoints(e,t);if(s<0)i=e,o=t,r=1;else{if(!(s>0))throw new Error(`Tried to create degenerate segment at [${e.x}, ${e.y}]`);i=t,o=e,r=-1}return new F(new L(i,!0),new L(o,!1),[n],[r])}replaceRightSE(e){this.rightSE=e,this.rightSE.segment=this,this.rightSE.otherSE=this.leftSE,this.leftSE.otherSE=this.rightSE}bbox(){const e=this.leftSE.point.y,t=this.rightSE.point.y;return{ll:{x:this.leftSE.point.x,y:e<t?e:t},ur:{x:this.rightSE.point.x,y:e>t?e:t}}}vector(){return{x:this.rightSE.point.x-this.leftSE.point.x,y:this.rightSE.point.y-this.leftSE.point.y}}isAnEndpoint(e){return e.x===this.leftSE.point.x&&e.y===this.leftSE.point.y||e.x===this.rightSE.point.x&&e.y===this.rightSE.point.y}comparePoint(e){if(this.isAnEndpoint(e))return 0;const t=this.leftSE.point,n=this.rightSE.point,i=this.vector();if(t.x===n.x)return e.x===t.x?0:e.x<t.x?1:-1;if(e.x===t.x+(e.y-t.y)/i.y*i.x)return 0;const o=t.y+(e.x-t.x)/i.x*i.y;return e.y===o?0:e.y<o?-1:1}getIntersection(e){const t=this.bbox(),n=e.bbox(),i=p(t,n);if(null===i)return null;const o=this.leftSE.point,r=this.rightSE.point,s=e.leftSE.point,a=e.rightSE.point,l=h(t,s)&&0===this.comparePoint(s),d=h(n,o)&&0===e.comparePoint(o),c=h(t,a)&&0===this.comparePoint(a),u=h(n,r)&&0===e.comparePoint(r);if(d&&l)return u&&!c?r:!u&&c?a:null;if(d)return c&&o.x===a.x&&o.y===a.y?null:o;if(l)return u&&r.x===s.x&&r.y===s.y?null:s;if(u&&c)return null;if(u)return r;if(c)return a;const g=((e,t,n,i)=>{if(0===t.x)return R(n,i,e.x);if(0===i.x)return R(e,t,n.x);if(0===t.y)return B(n,i,e.y);if(0===i.y)return B(e,t,n.y);const o=k(t,i);if(0==o)return null;const r={x:n.x-e.x,y:n.y-e.y},s=k(r,t)/o,a=k(r,i)/o;return{x:(e.x+a*t.x+(n.x+s*i.x))/2,y:(e.y+a*t.y+(n.y+s*i.y))/2}})(o,this.vector(),s,e.vector());return null===g?null:h(i,g)?y.round(g.x,g.y):null}split(e){const t=[],n=void 0!==e.events,i=new L(e,!0),o=new L(e,!1),r=this.rightSE;this.replaceRightSE(o),t.push(o),t.push(i);const s=new F(i,r,this.rings.slice(),this.windings.slice());return L.comparePoints(s.leftSE.point,s.rightSE.point)>0&&s.swapEvents(),L.comparePoints(this.leftSE.point,this.rightSE.point)>0&&this.swapEvents(),n&&(i.checkForConsuming(),o.checkForConsuming()),t}swapEvents(){const e=this.rightSE;this.rightSE=this.leftSE,this.leftSE=e,this.leftSE.isLeft=!0,this.rightSE.isLeft=!1;for(let t=0,n=this.windings.length;t<n;t++)this.windings[t]*=-1}consume(e){let t=this,n=e;for(;t.consumedBy;)t=t.consumedBy;for(;n.consumedBy;)n=n.consumedBy;const i=F.compare(t,n);if(0!==i){if(i>0){const e=t;t=n,n=e}if(t.prev===n){const e=t;t=n,n=e}for(let e=0,i=n.rings.length;e<i;e++){const i=n.rings[e],o=n.windings[e],r=t.rings.indexOf(i);-1===r?(t.rings.push(i),t.windings.push(o)):t.windings[r]+=o}n.rings=null,n.windings=null,n.consumedBy=t,n.leftSE.consumedBy=t.leftSE,n.rightSE.consumedBy=t.rightSE}}prevInResult(){return void 0!==this._prevInResult||(this._prevInResult=this.prev?this.prev.isInResult()?this.prev:this.prev.prevInResult():null),this._prevInResult}beforeState(){return void 0!==this._beforeState||(this._beforeState=this.prev?(this.prev.consumedBy||this.prev).afterState():{rings:[],windings:[],multiPolys:[]}),this._beforeState}afterState(){if(void 0!==this._afterState)return this._afterState;const e=this.beforeState();this._afterState={rings:e.rings.slice(0),windings:e.windings.slice(0),multiPolys:[]};const t=this._afterState.rings,n=this._afterState.windings,i=this._afterState.multiPolys;for(let s=0,a=this.rings.length;s<a;s++){const e=this.rings[s],i=this.windings[s],o=t.indexOf(e);-1===o?(t.push(e),n.push(i)):n[o]+=i}const o=[],r=[];for(let s=0,a=t.length;s<a;s++){if(0===n[s])continue;const e=t[s],i=e.poly;if(-1===r.indexOf(i))if(e.isExterior)o.push(i);else{-1===r.indexOf(i)&&r.push(i);const t=o.indexOf(e.poly);-1!==t&&o.splice(t,1)}}for(let s=0,a=o.length;s<a;s++){const e=o[s].multiPoly;-1===i.indexOf(e)&&i.push(e)}return this._afterState}isInResult(){if(this.consumedBy)return!1;if(void 0!==this._isInResult)return this._isInResult;const e=this.beforeState().multiPolys,t=this.afterState().multiPolys;switch(K.type){case"union":this._isInResult=0===e.length!=(0===t.length);break;case"intersection":{let n,i;e.length<t.length?(n=e.length,i=t.length):(n=t.length,i=e.length),this._isInResult=i===K.numMultiPolys&&n<i;break}case"xor":{const n=Math.abs(e.length-t.length);this._isInResult=n%2==1;break}case"difference":{const n=e=>1===e.length&&e[0].isSubject;this._isInResult=n(e)!==n(t);break}default:throw new Error(`Unrecognized operation type found ${K.type}`)}return this._isInResult}}class U{constructor(e,t,n){if(!Array.isArray(e)||0===e.length)throw new Error("Input geometry is not a valid Polygon or MultiPolygon");if(this.poly=t,this.isExterior=n,this.segments=[],"number"!=typeof e[0][0]||"number"!=typeof e[0][1])throw new Error("Input geometry is not a valid Polygon or MultiPolygon");const i=y.round(e[0][0],e[0][1]);this.bbox={ll:{x:i.x,y:i.y},ur:{x:i.x,y:i.y}};let o=i;for(let r=1,s=e.length;r<s;r++){if("number"!=typeof e[r][0]||"number"!=typeof e[r][1])throw new Error("Input geometry is not a valid Polygon or MultiPolygon");let t=y.round(e[r][0],e[r][1]);t.x===o.x&&t.y===o.y||(this.segments.push(F.fromRing(o,t,this)),t.x<this.bbox.ll.x&&(this.bbox.ll.x=t.x),t.y<this.bbox.ll.y&&(this.bbox.ll.y=t.y),t.x>this.bbox.ur.x&&(this.bbox.ur.x=t.x),t.y>this.bbox.ur.y&&(this.bbox.ur.y=t.y),o=t)}i.x===o.x&&i.y===o.y||this.segments.push(F.fromRing(o,i,this))}getSweepEvents(){const e=[];for(let t=0,n=this.segments.length;t<n;t++){const n=this.segments[t];e.push(n.leftSE),e.push(n.rightSE)}return e}}class D{constructor(e,t){if(!Array.isArray(e))throw new Error("Input geometry is not a valid Polygon or MultiPolygon");this.exteriorRing=new U(e[0],this,!0),this.bbox={ll:{x:this.exteriorRing.bbox.ll.x,y:this.exteriorRing.bbox.ll.y},ur:{x:this.exteriorRing.bbox.ur.x,y:this.exteriorRing.bbox.ur.y}},this.interiorRings=[];for(let n=1,i=e.length;n<i;n++){const t=new U(e[n],this,!1);t.bbox.ll.x<this.bbox.ll.x&&(this.bbox.ll.x=t.bbox.ll.x),t.bbox.ll.y<this.bbox.ll.y&&(this.bbox.ll.y=t.bbox.ll.y),t.bbox.ur.x>this.bbox.ur.x&&(this.bbox.ur.x=t.bbox.ur.x),t.bbox.ur.y>this.bbox.ur.y&&(this.bbox.ur.y=t.bbox.ur.y),this.interiorRings.push(t)}this.multiPoly=t}getSweepEvents(){const e=this.exteriorRing.getSweepEvents();for(let t=0,n=this.interiorRings.length;t<n;t++){const n=this.interiorRings[t].getSweepEvents();for(let t=0,i=n.length;t<i;t++)e.push(n[t])}return e}}class O{constructor(e,t){if(!Array.isArray(e))throw new Error("Input geometry is not a valid Polygon or MultiPolygon");try{"number"==typeof e[0][0][0]&&(e=[e])}catch(n){}this.polys=[],this.bbox={ll:{x:Number.POSITIVE_INFINITY,y:Number.POSITIVE_INFINITY},ur:{x:Number.NEGATIVE_INFINITY,y:Number.NEGATIVE_INFINITY}};for(let i=0,o=e.length;i<o;i++){const t=new D(e[i],this);t.bbox.ll.x<this.bbox.ll.x&&(this.bbox.ll.x=t.bbox.ll.x),t.bbox.ll.y<this.bbox.ll.y&&(this.bbox.ll.y=t.bbox.ll.y),t.bbox.ur.x>this.bbox.ur.x&&(this.bbox.ur.x=t.bbox.ur.x),t.bbox.ur.y>this.bbox.ur.y&&(this.bbox.ur.y=t.bbox.ur.y),this.polys.push(t)}this.isSubject=t}getSweepEvents(){const e=[];for(let t=0,n=this.polys.length;t<n;t++){const n=this.polys[t].getSweepEvents();for(let t=0,i=n.length;t<i;t++)e.push(n[t])}return e}}class z{static factory(e){const t=[];for(let n=0,i=e.length;n<i;n++){const i=e[n];if(!i.isInResult()||i.ringOut)continue;let o=null,r=i.leftSE,s=i.rightSE;const a=[r],l=r.point,d=[];for(;o=r,r=s,a.push(r),r.point!==l;)for(;;){const e=r.getAvailableLinkedEvents();if(0===e.length){const e=a[0].point,t=a[a.length-1].point;throw new Error(`Unable to complete output ring starting at [${e.x}, ${e.y}]. Last matching segment found ends at [${t.x}, ${t.y}].`)}if(1===e.length){s=e[0].otherSE;break}let n=null;for(let t=0,o=d.length;t<o;t++)if(d[t].point===r.point){n=t;break}if(null!==n){const e=d.splice(n)[0],i=a.splice(e.index);i.unshift(i[0].otherSE),t.push(new z(i.reverse()));continue}d.push({index:a.length,point:r.point});const i=r.getLeftmostComparator(o);s=e.sort(i)[0].otherSE;break}t.push(new z(a))}return t}constructor(e){this.events=e;for(let t=0,n=e.length;t<n;t++)e[t].segment.ringOut=this;this.poly=null}getGeom(){let e=this.events[0].point;const t=[e];for(let s=1,a=this.events.length-1;s<a;s++){const n=this.events[s].point;0!==T(n,e,this.events[s+1].point)&&(t.push(n),e=n)}if(1===t.length)return null;0===T(t[0],e,t[1])&&t.shift(),t.push(t[0]);const n=this.isExteriorRing()?1:-1,i=this.isExteriorRing()?0:t.length-1,o=this.isExteriorRing()?t.length:-1,r=[];for(let s=i;s!=o;s+=n)r.push([t[s].x,t[s].y]);return r}isExteriorRing(){if(void 0===this._isExteriorRing){const e=this.enclosingRing();this._isExteriorRing=!e||!e.isExteriorRing()}return this._isExteriorRing}enclosingRing(){return void 0===this._enclosingRing&&(this._enclosingRing=this._calcEnclosingRing()),this._enclosingRing}_calcEnclosingRing(){let e=this.events[0];for(let i=1,o=this.events.length;i<o;i++){const t=this.events[i];L.compare(e,t)>0&&(e=t)}let t=e.segment.prevInResult(),n=t?t.prevInResult():null;for(;;){if(!t)return null;if(!n)return t.ringOut;if(n.ringOut!==t.ringOut)return n.ringOut.enclosingRing()!==t.ringOut?t.ringOut:t.ringOut.enclosingRing();t=n.prevInResult(),n=t?t.prevInResult():null}}}class N{constructor(e){this.exteriorRing=e,e.poly=this,this.interiorRings=[]}addInterior(e){this.interiorRings.push(e),e.poly=this}getGeom(){const e=[this.exteriorRing.getGeom()];if(null===e[0])return null;for(let t=0,n=this.interiorRings.length;t<n;t++){const n=this.interiorRings[t].getGeom();null!==n&&e.push(n)}return e}}class _{constructor(e){this.rings=e,this.polys=this._composePolys(e)}getGeom(){const e=[];for(let t=0,n=this.polys.length;t<n;t++){const n=this.polys[t].getGeom();null!==n&&e.push(n)}return e}_composePolys(e){const t=[];for(let n=0,i=e.length;n<i;n++){const i=e[n];if(!i.poly)if(i.isExteriorRing())t.push(new N(i));else{const e=i.enclosingRing();e.poly||t.push(new N(e)),e.poly.addInterior(i)}}return t}}class W{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:F.compare;this.queue=e,this.tree=new u(t),this.segments=[]}process(e){const t=e.segment,n=[];if(e.consumedBy)return e.isLeft?this.queue.remove(e.otherSE):this.tree.remove(t),n;const i=e.isLeft?this.tree.add(t):this.tree.find(t);if(!i)throw new Error(`Unable to find segment #${t.id} [${t.leftSE.point.x}, ${t.leftSE.point.y}] -> [${t.rightSE.point.x}, ${t.rightSE.point.y}] in SweepLine tree.`);let o,r,s=i,a=i;for(;void 0===o;)s=this.tree.prev(s),null===s?o=null:void 0===s.key.consumedBy&&(o=s.key);for(;void 0===r;)a=this.tree.next(a),null===a?r=null:void 0===a.key.consumedBy&&(r=a.key);if(e.isLeft){let i=null;if(o){const e=o.getIntersection(t);if(null!==e&&(t.isAnEndpoint(e)||(i=e),!o.isAnEndpoint(e))){const t=this._splitSafely(o,e);for(let e=0,i=t.length;e<i;e++)n.push(t[e])}}let s=null;if(r){const e=r.getIntersection(t);if(null!==e&&(t.isAnEndpoint(e)||(s=e),!r.isAnEndpoint(e))){const t=this._splitSafely(r,e);for(let e=0,i=t.length;e<i;e++)n.push(t[e])}}if(null!==i||null!==s){let e=null;e=null===i?s:null===s||L.comparePoints(i,s)<=0?i:s,this.queue.remove(t.rightSE),n.push(t.rightSE);const o=t.split(e);for(let t=0,i=o.length;t<i;t++)n.push(o[t])}n.length>0?(this.tree.remove(t),n.push(e)):(this.segments.push(t),t.prev=o)}else{if(o&&r){const e=o.getIntersection(r);if(null!==e){if(!o.isAnEndpoint(e)){const t=this._splitSafely(o,e);for(let e=0,i=t.length;e<i;e++)n.push(t[e])}if(!r.isAnEndpoint(e)){const t=this._splitSafely(r,e);for(let e=0,i=t.length;e<i;e++)n.push(t[e])}}}this.tree.remove(t)}return n}_splitSafely(e,t){this.tree.remove(e);const n=e.rightSE;this.queue.remove(n);const i=e.split(t);return i.push(n),void 0===e.consumedBy&&this.tree.add(e),i}}const X="undefined"!=typeof process&&process.env.POLYGON_CLIPPING_MAX_QUEUE_SIZE||1e6,H="undefined"!=typeof process&&process.env.POLYGON_CLIPPING_MAX_SWEEPLINE_SEGMENTS||1e6,K=new class{run(e,t,n){K.type=e,y.reset();const i=[new O(t,!0)];for(let l=0,d=n.length;l<d;l++)i.push(new O(n[l],!1));if(K.numMultiPolys=i.length,"difference"===K.type){const e=i[0];let t=1;for(;t<i.length;)null!==p(i[t].bbox,e.bbox)?t++:i.splice(t,1)}if("intersection"===K.type)for(let l=0,d=i.length;l<d;l++){const e=i[l];for(let t=l+1,n=i.length;t<n;t++)if(null===p(e.bbox,i[t].bbox))return[]}const o=new u(L.compare);for(let l=0,d=i.length;l<d;l++){const e=i[l].getSweepEvents();for(let t=0,n=e.length;t<n;t++)if(o.insert(e[t]),o.size>X)throw new Error("Infinite loop when putting segment endpoints in a priority queue (queue size too big).")}const r=new W(o);let s=o.size,a=o.pop();for(;a;){const e=a.key;if(o.size===s){const t=e.segment;throw new Error(`Unable to pop() ${e.isLeft?"left":"right"} SweepEvent [${e.point.x}, ${e.point.y}] from segment #${t.id} [${t.leftSE.point.x}, ${t.leftSE.point.y}] -> [${t.rightSE.point.x}, ${t.rightSE.point.y}] from queue.`)}if(o.size>X)throw new Error("Infinite loop when passing sweep line over endpoints (queue size too big).");if(r.segments.length>H)throw new Error("Infinite loop when passing sweep line over endpoints (too many sweep line segments).");const t=r.process(e);for(let n=0,i=t.length;n<i;n++){const e=t[n];void 0===e.consumedBy&&o.insert(e)}s=o.size,a=o.pop()}return y.reset(),new _(z.factory(r.segments)).getGeom()}};return{union:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return K.run("union",e,n)},intersection:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return K.run("intersection",e,n)},xor:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return K.run("xor",e,n)},difference:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return K.run("difference",e,n)}}},"object"==typeof e&&void 0!==t?t.exports=i():"function"==typeof define&&define.amd?define(i):(n="undefined"!=typeof globalThis?globalThis:n||self).polygonClipping=i()})(),FM=1,UM=1,DM="path.edit",OM="path.edit.done",zM="path.edit.snap-nodes",NM="path.boolean.union",_M="path.boolean.subtract",WM="path.boolean.intersect",XM="path.boolean.xor",HM="path.node.delete",KM="path.node.make-curve",YM="path.node.remove-handles",qM="path.node.merge",jM="path.node.join",VM="path.node.separate",GM=[{id:"none",value:E("transparent"),label:"None",hexColor:"#f8fafc",opacity:0},{value:M("fill-blue"),label:"Blue",id:"blue",hexColor:"#dbeafe"},{value:M("fill-green"),label:"Green",id:"green",hexColor:"#dcfce7"},{value:M("fill-red"),label:"Red",id:"red",hexColor:"#fee2e2"},{value:M("fill-white"),label:"White",id:"white",hexColor:"#f8fafc"}],ZM=[{value:M("stroke-blue"),label:"Blue",id:"blue",hexColor:"#1d4ed8"},{value:M("stroke-green"),label:"Green",id:"green",hexColor:"#15803d"},{value:M("stroke-red"),label:"Red",id:"red",hexColor:"#dc2626"},{value:M("stroke-slate"),label:"Slate",id:"slate",hexColor:"#334155"}],QM={id:"path",editor:{id:"land.path",shapeCapabilities:[{type:"path",schemaProps:["subpaths","fill","stroke","strokeWidth","fillRule"],reactRenderer:"supported",toolbarEntry:"supported",notes:["Path owns editable Bezier node geometry, multi-subpath fill rules, SVG export, and destructive polygon-clipping boolean materialization."]}],shapeUtils:[new class extends cw{type="path";getDefaultProps(){return{subpaths:[{id:"subpath:default",closed:!1,nodes:[{id:"node:0",x:0,y:0,kind:"corner"},{id:"node:1",x:96,y:0,kind:"corner"}]}],fill:E("transparent"),stroke:M("stroke-slate"),strokeWidth:3,fillRule:"nonzero"}}validateProps(e){const t=e&&"object"==typeof e?e:{},n=this.getDefaultProps();return{subpaths:(o=ky(t.subpaths,n.subpaths),o.map(e=>({...e,nodes:e.nodes.filter(e=>_m(e.x)&&_m(e.y))})).filter(e=>e.nodes.length>0).map(Hm)),fill:$(t.fill,n.fill),stroke:$(t.stroke,n.stroke),strokeWidth:Math.max(1,vy(t.strokeWidth,n.strokeWidth)),fillRule:(i=t.fillRule,"string"==typeof i&&dM.includes(i)?t.fillRule:n.fillRule)};var i,o}getPositionedBounds(e){const t=nS(e).localBounds;return new aI(e.x+t.x,e.y+t.y,t.w,t.h)}getLocalBounds(e){return nS(e).localBounds}getRenderBounds(e){return nS(e).renderBounds}getExportBounds(e){return this.getRenderBounds(e)}getSelectionResizeLocalBounds(e){return nS(e).pointBounds}resizeSelectionBounds(e,t){const n=sS(e,this.getLocalToPageTransform(e)).map(e=>({...e,nodes:e.nodes.map(e=>Ey(e,e=>((e,t)=>0===t.selectionRotation?e:sI.RotWith(e,t.selectionRotationCenter,-t.selectionRotation))(e,t)))})),i=rS(((e,t)=>{const n=nS(e).pointBounds,i=0===n.w?1:t.w/Math.max(n.w,1e-6),o=0===n.h?1:t.h/Math.max(n.h,1e-6);return oS(e.props.subpaths,e=>new sI(0===n.w?t.center.x:t.x+(e.x-n.x)*i,0===n.h?t.center.y:t.y+(e.y-n.y)*o))})({...e,x:0,y:0,rotation:0,skewX:0,scaleX:1,scaleY:1,props:{...e.props,subpaths:n}},t.selectionLocalBounds).map(e=>({...e,nodes:e.nodes.map(e=>Ey(e,e=>((e,t)=>0===t.selectionRotation?e:sI.RotWith(e,t.selectionRotationCenter,t.selectionRotation))(e,t)))})),e.props);return{id:e.id,x:i.x,y:i.y,rotation:0,skewX:0,scaleX:1,scaleY:1,props:{subpaths:i.subpaths}}}getPositionedOutlineVertices(e){return nS(e).outlineVertices.map(t=>new sI(e.x+t.x,e.y+t.y))}getTerminalBindingOutlines(e){return nS(e).flattenedSubpaths.filter(e=>e.points.length>0).map(t=>({points:t.points.map(t=>new sI(e.x+t.x,e.y+t.y)),closed:t.closed}))}resolveBindingPoint(e,t){const n=t.editor.computeShapePositionedToPageTransform(e),i=n.tryInvert();if(!i)return t.rawPagePoint;const o=i.applyToPoint(t.rawPagePoint),r=i.applyToPoint(t.oppositePagePoint),s=r.sub(o);let a=Number.POSITIVE_INFINITY;for(const l of this.getTerminalBindingOutlines(e)){const e=l.closed?l.points.length:Math.max(0,l.points.length-1);for(let t=0;t<e;t+=1){const e=l.points[t],n=l.points[(t+1)%l.points.length];if(!e||!n)continue;const i=My(o,r,e,n);null!==i&&i>1e-6&&i<a&&(a=i)}}return Number.isFinite(a)?n.applyToPoint(o.add(s.mul(a))):t.rawPagePoint}getHandleSnapGeometry(e){return{points:e.props.subpaths.flatMap(e=>e.nodes.flatMap(e=>[{point:Ym(e),kind:"custom"},...e.in?[{point:qm(e),kind:"custom"}]:[],...e.out?[{point:jm(e),kind:"custom"}]:[]])),outline:nS(e).outlineVertices}}canReceiveTerminalBinding(e){return!0}canEdit(e){return!0}canUseSelectionResizeHandles(e,t){return t.editor.getShapeEditingSession()?.shapeId!==e.id}canUseSelectionRotateHandle(e,t){return t.editor.getShapeEditingSession()?.shapeId!==e.id}getSelectionHandleAnchors(e,t){const n={terminalHandleAnchors:[],middleHandleAnchors:[],customHandleAnchors:[]};if(!t.isOnlySelected)return n;const i=t.editor.getShapeEditingSession();if(!i||i.shapeId!==e.id)return n;const o=t.editor.computeShapeLocalToPageTransform(e);return{terminalHandleAnchors:[],middleHandleAnchors:[],customHandleAnchors:e.props.subpaths.flatMap(e=>e.nodes.flatMap(t=>{const n=[{kind:"custom",type:sM,id:(i=e.id,r=t.id,["node",i,r].map(encodeURIComponent).join("|")),point:o.applyToPoint(Ym(t)),cursor:"grab"}];var i,r;return t.in&&n.push({kind:"custom",type:aM,id:Bm(e.id,t.id,"in"),point:o.applyToPoint(qm(t)),cursor:"grab"}),t.out&&n.push({kind:"custom",type:aM,id:Bm(e.id,t.id,"out"),point:o.applyToPoint(jm(t)),cursor:"grab"}),n}))}}getSelectionOverlayInfo(e,t){const n=t.editor.getShapeEditingSession();return n&&n.shapeId===e.id?{usesSelectionPathOverlay:!0,startPagePoint:null,endPagePoint:null,middlePagePoint:null,path:aS(e,t.editor.computeShapeLocalToPageTransform(e)),pathStyle:null,bindingSegments:[]}:{usesSelectionPathOverlay:!1,startPagePoint:null,endPagePoint:null,middlePagePoint:null,path:null,pathStyle:null,bindingSegments:[]}}hitTest(e,t,n){const i=new sI(t.x-e.x,t.y-e.y),o=nS(e);return!D(e.props.fill)&&((e,t,n)=>{let i=0,o=0;for(const r of e)if(r.closed&&!(r.points.length<3))for(let e=0;e<r.points.length;e+=1){const n=r.points[e],s=r.points[(e+1)%r.points.length];n&&s&&(n.y<=t.y&&s.y>t.y||n.y>t.y&&s.y<=t.y)&&n.x+(t.y-n.y)/(s.y-n.y)*(s.x-n.x)>t.x&&(o+=1,i+=s.y>n.y?1:-1)}return"evenodd"===n?o%2==1:0!==i})(o.flattenedSubpaths,i,e.props.fillRule)||((e,t,n)=>{const i=n*n;for(const o of e)for(let e=1;e<o.points.length;e+=1){const n=o.points[e-1],r=o.points[e];if(n&&r&&dS(t,n,r)<=i)return!0}return!1})(o.flattenedSubpaths,i,e.props.strokeWidth/2+6)}hitTestLineSegment(e,t){const n=new sI(t.positionedStart.x-e.x,t.positionedStart.y-e.y),i=new sI(t.positionedEnd.x-e.x,t.positionedEnd.y-e.y),o=t.positionedMargin+e.props.strokeWidth/2;return nS(e).flattenedSubpaths.some(e=>((e,t,n,i)=>{const o=i*i;for(let r=1;r<n.length;r+=1){const i=n[r-1],s=n[r];if(i&&s&&(Ty(i,e,t)<=o||Ty(s,e,t)<=o||Ty(e,i,s)<=o||Ty(t,i,s)<=o))return!0}return!1})(n,i,e.points,o))}isWrappedByBrush(e,t){const n=t.pageOutlineVertices;return 0===n.length?!!t.pageBounds&&t.brushBounds.containsBox(t.pageBounds):n.every(e=>t.brushBounds.containsPoint(e))}canSelectByBrush(e,t){return t.isWrapping?this.isWrappedByBrush(e,t):t.pageBounds?.intersects(t.brushBounds)??!1}onEditEnd(e){if(e.props.subpaths.every(e=>e.nodes.length<2))return{deleteShapeIds:[e.id]}}}],shapeSvgExporters:[new class{type="path";toSvg(e,t){const n=nS(e);return n.path?{tag:"path",attrs:{d:n.path,fill:D(e.props.fill)?"none":t.resolveColor(e.props.fill),"fill-rule":e.props.fillRule,"clip-rule":e.props.fillRule,stroke:t.resolveColor(e.props.stroke),"stroke-width":e.props.strokeWidth,"stroke-linecap":"round","stroke-linejoin":"round"}}:null}}],interactionHandlers:[{id:"land.path.interactions",editorEvent:{handleEvent(e,t){if("pointer"===t.type&&"pointer_move"===t.name&&CM.get(e)?.pointerId===t.pointerId)return ly(e),hy(e,t),"handled";if("pointer"===t.type&&"pointer_up"===t.name&&(TM.delete(e),ly(e),CM.get(e)?.pointerId===t.pointerId))return((e,t)=>{const n=CM.get(e);n&&(n.isActive?hy(e,t):cy(t)||LS(e),CM.delete(e),e.setBrushBox(null))})(e,t),"handled";if("pointer"===t.type&&"pointer_cancel"===t.name&&(TM.delete(e),ly(e),CM.get(e)?.pointerId===t.pointerId))return py(e),"handled";if("click"===t.type&&"double_click"===t.name&&"up"===t.phase&&!t.shiftKey&&!t.altKey&&!t.accelKey){dy(e);const n=e.hitTestShape(t.pagePoint);if(Fm(n))return ry(e),e.startEditingShape({shapeId:n.id,markId:vM,entryMode:"focusEnd"},"user"),"handled"}if("cancel"===t.type)return TM.delete(e),CM.has(e)?(py(e),"handled"):"escape"===t.reason&&e.isActiveToolInInitialState()&&sy(e)&&e.completeEditing("user")?"handled":(dy(e),"continue");if("keyboard"===t.type&&"key_down"===t.name)return by(e,t)?"handled":"continue";if("pointer"===t.type&&"pointer_move"===t.name)return"mouse"!==t.pointerType||0!==t.buttons||t.altKey?ly(e):((e,t)=>{const n=sy(e);if(!n||"select"!==e.getActiveToolId()||!e.isActiveToolInInitialState())return void ly(e);if("custom"===e.hitTestSelectionHandle(t.pagePoint)?.kind)return void ly(e);const i=ay(e,n,t.pagePoint),o=cS(n.props.subpaths,i,7/e.getCurrentCamera().z);if(!o)return void ly(e);const r=e.computeShapeLocalToPageTransform(n);Lm(e,{shapeId:n.id,subpathId:o.subpathId,startNodeId:o.startNodeId,endNodeId:o.endNodeId,t:o.t,pagePoint:r.applyToPoint(o.point)})})(e,t),"continue";if("pointer"===t.type&&"pointer_down"===t.name&&0===t.button&&t.altKey){ly(e);const n=sy(e);if(!n)return"continue";const i=e.hitTestSelectionHandle(t.pagePoint);if("custom"===i?.kind&&"path.node"===i.type){const t=Rm(i.type,i.id);if("path.node"===t?.type){const i=RS(e);return Sy(e,n,i?.selection.shapeId===n.id&&US(i.selection,t.subpathId,t.nodeId)?i.selection.nodes:[{subpathId:t.subpathId,nodeId:t.nodeId}]),"handled"}}}if("pointer"===t.type&&"pointer_down"===t.name&&0===t.button&&!t.altKey){ly(e);const n=sy(e);if(!n)return"continue";const i=e.hitTestSelectionHandle(t.pagePoint);if("custom"===i?.kind)return Rm(i.type,i.id)||LS(e),"continue";const o=ay(e,n,t.pagePoint),r=cS(n.props.subpaths,o,7/e.getCurrentCamera().z);if(!r)return((e,t,n)=>{const i=RS(e);CM.set(e,{shapeId:t.id,pointerId:n.pointerId,originPagePoint:n.pagePoint.clone(),originScreenPoint:n.screenPoint.clone(),previousEntries:i?.selection.shapeId===t.id?i.selection.nodes.map(e=>({...e})):[],previousPrimary:i?.selection.shapeId===t.id?{...i.selection.primary}:null,isActive:!1})})(e,n,t),"handled";const s=`insert-node:${kM+=1}`;return e.operations.run({kind:"path.insert-node",label:"shape.edit",source:"user",history:"record"},()=>{const t=((e,t,n)=>e.map(e=>{if(e.id!==t.subpathId)return Hm(e);const i=e.nodes.findIndex(e=>e.id===t.startNodeId);if(i<0)return Hm(e);const o=(i+1)%e.nodes.length,r=e.nodes[i],s=e.nodes[o];if(!r||!s||s.id!==t.endNodeId)return Hm(e);const a=((e,t,n,i)=>{if(!Qm(e,t)){const o=Gm(Ym(e),Ym(t),n);return{start:Xm(e),node:{id:i,x:o.x,y:o.y,kind:"corner"},end:Xm(t)}}const[o,r,s,a]=Zm(e,t),l=Gm(o,r,n),d=Gm(r,s,n),c=Gm(s,a,n),u=Gm(l,d,n),h=Gm(d,c,n),p=Gm(u,h,n);return{start:{...Xm(e),out:AS(l.sub(o))},node:{id:i,x:p.x,y:p.y,kind:"smooth",in:AS(u.sub(p)),out:AS(h.sub(p))},end:{...Xm(t),in:AS(c.sub(a))}}})(r,s,t.t,n),l=e.nodes.map(Xm);return l[i]=a.start,l[o]=a.end,l.splice(i+1,0,a.node),{...e,nodes:l}}))(n.props.subpaths,r,s);e.commands.updateShapes([{id:n.id,props:{subpaths:t}}],{source:"user"});const i=e.getShape(n.id);Fm(i)&&$S(e,i,r.subpathId,s)}),ty(e,n.id),TM.set(e,{shapeId:n.id,nodeId:s}),"continue"}return"continue"}},selectionHandle:{createSession(e,{handle:t,shape:n,originPagePoint:i}){if(!Fm(n)||"custom"!==t.kind)return null;const o=Rm(t.type,t.id);if(!o)return null;if(e.getShapeEditingSession()?.shapeId!==n.id)return null;const r=TM.get(e),s="path.node"===o.type&&r?.shapeId===n.id&&r.nodeId===o.nodeId;s&&TM.delete(e);const a=n,l=hS(a.props.subpaths,o.subpathId,o.nodeId),d=ay(e,a,i),c=RS(e),u=c?.selection.shapeId===n.id?c.selection.nodes.map(e=>({...e})):[],h=c?.selection.shapeId===n.id?{...c.selection.primary}:null,p={subpathId:o.subpathId,nodeId:o.nodeId},g=!!c&&c.selection.shapeId===n.id&&US(c.selection,o.subpathId,o.nodeId),f="path.node"===o.type&&g,m="path.node"===o.type&&e.inputs.state.get().shiftKey,S=m&&!f?[...c?.selection.shapeId===n.id?c.selection.nodes:[],p]:null;S?FS(e,n,S,p):e.inputs.state.get().shiftKey||g||$S(e,n,o.subpathId,o.nodeId);const y="path.node"===o.type&&(S||f)?S??c.selection.nodes:[p],b=e.computeShapeLocalToPageTransform(a),x=l?b.applyToPoint(Ym(l)):i,I=t.point.sub(i),w="path.node"===o.type?y.flatMap(e=>{const t=hS(a.props.subpaths,e.subpathId,e.nodeId);return t?[b.applyToPoint(Ym(t))]:[]}):[t.point],v=(w.length>0?w:[t.point]).map(e=>e.sub(i)),P=((e,t,n)=>{const i=new Set(n.map(uy)),o=e.computeShapeLocalToPageTransform(t);return{points:t.props.subpaths.flatMap(e=>e.nodes.flatMap(n=>i.has(uy({subpathId:e.id,nodeId:n.id}))?[]:[{id:`${t.id}:${e.id}:${n.id}`,nodeId:t.id,point:o.applyToPoint(Ym(n)),kind:"custom"}])),outlines:[]}})(e,a,"path.node"===o.type?y:[]);return{shapeId:n.id,historyMark:"path.handle",onClick:m&&f?({editor:e})=>{const t=e.getShape(n.id);Fm(t)&&((e,t,n,i)=>{const o=BS(e);if(!o||o.shapeId!==t.id)return void $S(e,t,n,i);const r={subpathId:n,nodeId:i},s=US(o,n,i),a=s?o.nodes.filter(e=>!zS(e,r)):[...o.nodes,r];FS(e,t,a,s?a.at(-1)??null:r)})(e,t,o.subpathId,o.nodeId)}:void 0,onCancel({editor:e,reason:t}){if("pointer_cancel"!==t&&"escape"!==t)return;const i=e.getShape(n.id);Fm(i)&&e.getShapeEditingSession()?.shapeId===n.id&&(0!==u.length?FS(e,i,u,h):LS(e))},onComplete({editor:e}){s?((e,t)=>{JS(e).replaceCurrent(t)})(e,n.id):ty(e,n.id)},update({editor:e,pagePoint:t,accelKey:r,source:s}){if(!Fm(e.getShape(n.id)))return"stop";const c=e.inputs.state.get(),u=c.shiftKey?"path.node"===o.type?Iy(i,t):Iy(x,t.add(I)).sub(I):t,h=iy(e)&&!r&&!c.shiftKey&&P.points.length>0,p=h?e.snaps.snapHandle({mode:"align",pagePoint:u,sourcePointOffsets:v,snapshot:P,threshold:10/e.getCurrentCamera().z}):null;h||e.snaps.clearIndicators();const g=p?.snappedPagePoint??u,f=ay(e,a,"path.node"===o.type?g:g.add(I)),m="path.node"===o.type?l?gS(a.props.subpaths,y,e=>wy(e,f.sub(d))):Km(a.props.subpaths):pS(a.props.subpaths,o.subpathId,o.nodeId,e=>((e,t,n,i)=>{const o=Ym(e),r=i.altKey?{...e,kind:"corner"}:{...e},s=n.sub(o);return"in"===t?(r.in={dx:s.x,dy:s.y},i.altKey||"corner"===e.kind||(r.out=xy(s,e.out?jm(e).sub(o):null,"symmetric"===e.kind))):(r.out={dx:s.x,dy:s.y},i.altKey||"corner"===e.kind||(r.in=xy(s,e.in?qm(e).sub(o):null,"symmetric"===e.kind))),r})(e,o.handle,f,{altKey:c.altKey}));if(e.commands.updateShapes([{id:n.id,props:{subpaths:m}}],{source:s}),"path.node"===o.type){const t=e.getShape(n.id);Fm(t)&&FS(e,t,y,{subpathId:o.subpathId,nodeId:o.nodeId})}return"continue"}}}}}],setup(e){const t=function(e){let t=null;const n=qo("path.editSnap.lifecycle",e.shapeEditingSessionSignal,()=>{const n=e.getShapeEditingSession(),i=n?e.getShape(n.shapeId):null,o=Fm(i)?i.id:null;if(o!==t){if(t){const n=((e,t,n)=>JS(e).hasNetChanges("edit",n))(e,0,t);ny(e,"edit",t),n||e.editing.cancelOperation()}t=o,LS(e),ry(e),o&&ey(e,"edit",o,{onBoundaryUndo:()=>{if(e.getShapeEditingSession()?.shapeId!==o)return!1;const t=e.completeEditing("user");return t&&"select"!==e.getActiveToolId()&&e.commands.setActiveTool("select",{source:"system"}),t}})}});return()=>{n(),t&&ny(e,"edit",t),LS(e),ry(e)}}(e);return e.tools.register("path",e=>new BM(e),{shortcut:"b"}),t}},render:{id:"land.path.react",canvasOverlays:[{id:"land.path.draft-overlay",component:function(){const e=Zo(),t=Qo(e.toolStateSignal),n=Qo(e.inputs.state),i=Qo(e.selectedShapesSignal),o=Qo(e.currentCameraSignal);if("path"!==t.activeToolId)return null;const r=1===i.length?i[0]:null,s=Fm(r)?r:null,a=8/o.z,l=1.5/o.z,d=6/o.z,c=1/o.z,u=n.currentPagePoint;if(!s)return u?Ax(KS,{point:u,size:a,strokeWidth:l,variant:"candidate"}):null;const h=((e,t)=>{const n=NS(t);if(!n.subpathId)return null;const i=uS(sS(t,e.computeShapeLocalToPageTransform(t)),n.subpathId);if(!i)return null;const o=n.previewNodeId?i.nodes.findIndex(e=>e.id===n.previewNodeId):-1,r=o>=0?i.nodes[o]??null:null,s=o>0?i.nodes[o-1]??null:null,a=s&&r?zm({id:`${i.id}:preview`,closed:!1,nodes:[s,r]}):null;return{closed:i.closed,committedNodes:i.nodes.filter(e=>e.id!==n.previewNodeId),previewNode:r,previewPath:a}})(e,s);if(!h)return u?Ax(KS,{point:u,size:a,strokeWidth:l,variant:"candidate"}):null;const p=h.previewNode?Ym(h.previewNode):n.isPointing?null:u,g=p&&!h.committedNodes.some(e=>Ym(e).dist2(p)<=.25/(o.z*o.z));
83
- return Bx("g",{"data-ui":"path-draft-overlay",pointerEvents:"none",children:[h.previewPath?Ax("path",{"data-ui":"path-draft-preview-segment",d:h.previewPath,fill:"none",stroke:yM,strokeWidth:Math.max(l,1/o.z),strokeDasharray:`${6/o.z} ${4/o.z}`,strokeLinecap:"round",strokeLinejoin:"round"}):null,g?Ax(KS,{point:p,size:a,strokeWidth:l,variant:"candidate"}):null,h.committedNodes.map((e,t)=>Ax(XS,{node:e,showIn:h.closed||t>0,size:d,strokeWidth:c},e.id)),h.committedNodes.map(e=>Ax(KS,{point:Ym(e),size:a,strokeWidth:l,variant:"committed"},e.id))]})},layer:"above-host",order:20},{id:"land.path.edit-insert-preview-overlay",component:function(){const e=Zo(),t=Qo(e.toolStateSignal),n=Qo(e.shapeEditingSessionSignal),i=Qo(e.selectedShapesSignal),o=Qo(e.currentCameraSignal);if(Qo(e.inputs.state),"select"!==t.activeToolId||!n)return null;const r=1===i.length?i[0]:null;if(!Fm(r)||r.id!==n.shapeId)return null;const s=(e=>{const t=lM.get(e);return t?$m(t):null})(e);if(!s||s.shapeId!==r.id)return null;const a=8/o.z,l=a/2;
84
- return Ax("g",{"data-ui":"path-edit-insert-preview",pointerEvents:"none",children:Ax("rect",{"data-ui":"path-edit-insert-preview-control-point",x:s.pagePoint.x-l,y:s.pagePoint.y-l,width:a,height:a,rx:2,ry:2,fill:"rgba(219, 234, 254, 0.72)",stroke:"var(--land-selection, #2563eb)",strokeDasharray:`${3/o.z} ${2/o.z}`,strokeWidth:1.5/o.z})})},layer:"above-host",order:21}],shapeRenderers:[{type:"path",component:function({shape:e,shapeEditingSession:t}){
85
- return Ax(YS,{shape:e,shapeEditingSession:t})},hoverComponent:function({shape:e,strokeWidth:t}){
86
- return Ax(qS,{shape:e,strokeWidth:t})}}],selectionCustomHandleRenderers:[{type:sM,component:function({handle:e,strokeWidth:t}){const n=GS(e.type,e.id);
87
- return Ax("rect",{"data-selection-custom-handle":e.id,"data-selection-custom-handle-type":e.type,"data-selection-custom-handle-id":e.id,x:e.bounds.x,y:e.bounds.y,width:e.bounds.w,height:e.bounds.h,rx:2,ry:2,fill:n?"rgba(219, 234, 254, 0.98)":"rgba(255,255,255,0.98)",stroke:n?"rgba(29, 78, 216, 1)":"rgba(37, 99, 235, 0.94)",strokeWidth:n?1.5*t:t,style:{cursor:e.cursor??"grab",pointerEvents:"auto"}})}},{type:aM,component:function({handle:e,strokeWidth:t}){const n=GS(e.type,e.id);
88
- return Ax("circle",{"data-selection-custom-handle":e.id,"data-selection-custom-handle-type":e.type,"data-selection-custom-handle-id":e.id,cx:e.point.x,cy:e.point.y,r:Math.max(e.bounds.w,e.bounds.h)/2,fill:n?"rgba(29, 78, 216, 1)":"rgba(37, 99, 235, 0.92)",stroke:"rgba(255,255,255,0.96)",strokeWidth:n?1.5*t:t,style:{cursor:e.cursor??"grab",pointerEvents:"auto"}})}}]},setup:e=>{e.get(uP).add(Wy("fill"),Wy("stroke"),Wy("strokeWidth"),Xy("fill"),Xy("stroke"),Xy("strokeWidth"),{id:DM,getAvailability(e){if(1!==e.selection.count||"path"!==e.selection.singleShapeType)return"inapplicable";const[t]=e.selection.selectedShapes;return Fm(t)&&!t.isLocked?"enabled":"disabled"},run({context:e}){const[t]=e.selection.selectedShapes;Fm(t)&&(LS(e.editor),ry(e.editor),e.editor.startEditingShape({shapeId:t.id,markId:"path.edit",entryMode:"focusEnd"},"user"))}},{id:OM,getAvailability:e=>(e=>{const t=e.editor.getShapeEditingSession();return!!t&&Fm(e.editor.getShape(t.shapeId))})(e)?"enabled":"inapplicable",run({context:e}){e.editor.completeEditing("user")}},{id:zM,getAvailability(e){const t=e.editor.getShapeEditingSession(),n=t?e.editor.getShape(t.shapeId):null;return Fm(n)?n.isLocked?"disabled":"enabled":"inapplicable"},getValue:e=>iy(e.editor),run({context:e}){oy(e.editor)}},{id:HM,getAvailability(e){const t=RS(e.editor);return t?t.shape.isLocked?"disabled":"enabled":"inapplicable"},run({context:e}){const t=RS(e.editor);t&&!t.shape.isLocked&&Sy(e.editor,t.shape,t.selection.nodes)}},{id:KM,getAvailability(e){const t=RS(e.editor);return t?!t.shape.isLocked&&t.entries.some(({node:e})=>!e.in&&!e.out)?"enabled":"disabled":"inapplicable"},run({context:e}){const t=RS(e.editor);if(!t||t.shape.isLocked)return;const n=t.entries.flatMap(({ref:e,node:t})=>t.in||t.out?[]:[e]).reduce((e,t)=>fS(e,t.subpathId,t.nodeId),t.shape.props.subpaths);e.editor.commands.updateShapes([{id:t.shape.id,props:{subpaths:n}}],{source:"user"});const i=e.editor.getShape(t.shape.id);Fm(i)&&FS(e.editor,i,t.selection.nodes,t.selection.primary),ty(e.editor,t.shape.id)}},{id:YM,getAvailability(e){const t=RS(e.editor);return t?!t.shape.isLocked&&t.entries.some(({node:e})=>!!e.in||!!e.out)?"enabled":"disabled":"inapplicable"},run({context:e}){const t=RS(e.editor);if(!t||t.shape.isLocked)return;const n=t.selection.nodes.reduce((e,t)=>mS(e,t.subpathId,t.nodeId),t.shape.props.subpaths);e.editor.commands.updateShapes([{id:t.shape.id,props:{subpaths:n}}],{source:"user"});const i=e.editor.getShape(t.shape.id);Fm(i)&&FS(e.editor,i,t.selection.nodes,t.selection.primary),ty(e.editor,t.shape.id)}},Hy(qM,"merge"),Hy(jM,"join"),Hy(VM,"separate"),Ky("union"),Ky("subtract"),Ky("intersect"),Ky("xor")),e.get(vP).add({id:"path.tool-toolbar",channel:wP.toolSwitcher,order:47,actionIds:[xP],getGroups:e=>[{id:"path.tools",items:[{kind:"button",id:"path.tool.path",actionId:xP,value:"path",label:"Path",shortcut:e.editor.shortcuts.getToolShortcutLabel("path"),icon:"pen-tool",dataUi:"path-tool-button"}]}]},{id:"path.default-style.tool-toolbar",channel:wP.toolOptions,order:48,actionIds:["path.default-fill","path.default-stroke","path.default-strokeWidth"],when:e=>"path"===e.tool.activeToolId,getGroups:()=>_y({fillActionId:"path.default-fill",strokeActionId:"path.default-stroke",strokeWidthActionId:"path.default-strokeWidth",dataUiPrefix:"path-default"})},{id:"path.selection-toolbar",channel:wP.selectionProperties,order:22,actionIds:[DM,"path.set-fill","path.set-stroke","path.set-strokeWidth",NM,_M,WM,XM],when:e=>"path"===e.selection.commonShapeType,getGroups(e){const t=[{id:"path.edit",items:[{kind:"button",id:"path.edit",actionId:DM,label:"Edit",icon:"square-pen",dataUi:"path-edit-button"}]},..._y({fillActionId:"path.set-fill",strokeActionId:"path.set-stroke",strokeWidthActionId:"path.set-strokeWidth",dataUiPrefix:"path"})];return Yy(e).length>=2&&t.push({id:"path.boolean",items:[{kind:"button",id:"path.boolean.union",actionId:NM,label:"Union",icon:"group",dataUi:"path-boolean-union-button"},{kind:"button",id:"path.boolean.subtract",actionId:_M,label:"Subtract",icon:"minus",dataUi:"path-boolean-subtract-button"},{kind:"button",id:"path.boolean.intersect",actionId:WM,label:"Intersect",icon:"crop",dataUi:"path-boolean-intersect-button"},{kind:"button",id:"path.boolean.xor",actionId:XM,label:"Exclude",icon:"ungroup",dataUi:"path-boolean-xor-button"}]}),t}},{id:"path.floating-selection-toolbar",channel:wP.selectionQuickActions,order:22,actionIds:[DM,OM,zM,HM,KM,YM,qM,jM,VM,"path.set-fill","path.set-stroke","path.set-strokeWidth",NM,_M,WM,XM],when(e){const t=e.editor.getShapeEditingSession(),n=t?e.editor.getShape(t.shapeId):null;return"path"===e.selection.commonShapeType&&(!t||Fm(n))},getGroups(e){const t=e.editor.getShapeEditingSession(),n=Fm(t?e.editor.getShape(t.shapeId):null);if(RS(e.editor))return[{id:"path.floating-node-edit",presentation:"overflow",items:[{kind:"button",id:"path.floating-node.delete",actionId:HM,label:"Delete node",shortcut:"⌫",icon:"remove-node",dataUi:"floating-path-node-delete-button"}]},{id:"path.floating-node-topology",items:[{kind:"button",id:"path.floating-node.merge",actionId:qM,label:"Merge nodes",shortcut:"Mod+J",icon:"merge-nodes",dataUi:"floating-path-node-merge-button"},{kind:"button",id:"path.floating-node.join",actionId:jM,label:"Join nodes",shortcut:"J",icon:"join-nodes",dataUi:"floating-path-node-join-button"},{kind:"button",id:"path.floating-node.separate",actionId:VM,label:"Separate segment",shortcut:"K",icon:"separate-nodes",dataUi:"floating-path-node-separate-button"}]},{id:"path.floating-node-convert",items:[{kind:"button",id:"path.floating-node.remove-handles",actionId:YM,label:"Corner point",shortcut:"X",icon:"to-corner",dataUi:"floating-path-node-remove-handles-button"},{kind:"button",id:"path.floating-node.make-curve",actionId:KM,label:"Curve point",shortcut:"C",icon:"to-curve",dataUi:"floating-path-node-make-curve-button"}]},zy(),Ny()];if(n)return[zy(),Ny()];const i=[{id:"path.floating-edit",items:[{kind:"button",id:"path.floating-edit",actionId:DM,label:"Edit",icon:"square-pen",dataUi:"floating-path-edit-button"}]},..._y({fillActionId:"path.set-fill",strokeActionId:"path.set-stroke",strokeWidthActionId:"path.set-strokeWidth",dataUiPrefix:"floating-path"})];return Yy(e).length>=2&&i.push({id:"path.floating-boolean",presentation:"overflow",items:[{kind:"button",id:"path.floating-boolean.union",actionId:NM,label:"Union",icon:"group",dataUi:"floating-path-boolean-union-button"},{kind:"button",id:"path.floating-boolean.subtract",actionId:_M,label:"Subtract",icon:"minus",dataUi:"floating-path-boolean-subtract-button"},{kind:"button",id:"path.floating-boolean.intersect",actionId:WM,label:"Intersect",icon:"crop",dataUi:"floating-path-boolean-intersect-button"},{kind:"button",id:"path.floating-boolean.xor",actionId:XM,label:"Exclude",icon:"ungroup",dataUi:"floating-path-boolean-xor-button"}]}),i}}),e.get(fP).add({id:"path.context-menu",target:"selection",order:38,actionIds:[DM,NM,_M,WM,XM],when:e=>"path"===e.selection.commonShapeType,getSections(e){const t=[{kind:"command",id:"path.edit",actionId:DM,label:"Edit path",icon:"square-pen",dataUi:"path-context-edit"}];return Yy(e).length>=2&&t.push({kind:"command",id:"path.boolean.union",actionId:NM,label:"Union paths",icon:"group",dataUi:"path-context-boolean-union"},{kind:"command",id:"path.boolean.subtract",actionId:_M,label:"Subtract paths",icon:"minus",dataUi:"path-context-boolean-subtract"},{kind:"command",id:"path.boolean.intersect",actionId:WM,label:"Intersect paths",icon:"crop",dataUi:"path-context-boolean-intersect"},{kind:"command",id:"path.boolean.xor",actionId:XM,label:"Exclude paths",icon:"ungroup",dataUi:"path-context-boolean-xor"}),[{id:"path.context",title:"Path",items:t}]}})}},JM=yx(({actionRegistry:e,editor:t,executeCommand:n})=>((({actionRegistry:e,editor:t,executeCommand:n})=>{Ix(()=>{const i=i=>{if(t.getShapeEditingSession()||Tr(i.target))return;const o=t.shortcuts.getActionIdForEvent({key:i.key,shiftKey:i.shiftKey,altKey:i.altKey,ctrlKey:i.ctrlKey,metaKey:i.metaKey,accelKey:i.metaKey||i.ctrlKey});if(!o)return;const r=Uh({editor:t,selectionState:t.selectionStateSignal.get(),toolState:t.toolStateSignal.get()}),s=e.getAction(o);s&&"enabled"===ll(s,r)&&(i.preventDefault(),i.stopPropagation(),n({commandId:o,context:r,run(){s.run({context:r,value:s.getValue?.(r)??null})}}))};return window.addEventListener("keydown",i,!0),()=>{window.removeEventListener("keydown",i,!0)}},[e,t,n])})({actionRegistry:e,editor:t,executeCommand:n}),null)),eE={id:"canvas-kit.keyboard-shortcut-host",setup(e){e.get(Ck).addComponents({id:"canvas-kit.keyboard-shortcut-host",order:0,component:JM})}},tE="image-blob:",nE=1,iE=yx(({editor:e,hostBridge:t,imageAssetService:n,imports:i,flushSnapshot:o})=>{const r=Cx(null),s=Cx(null),a=bx(t=>gb({editor:e,file:t,imageObjectUrls:n.objectUrls,flushSnapshot:o}),[e,o,n]);return Ix(()=>{if(t)return t.register({openInsertFilePicker(){r.current?.click()},openReplaceFilePicker(){s.current?.click()}})},[t]),Bx(Ex,{children:[Ax("input",{ref:r,type:"file",accept:"image/*",hidden:!0,"data-ui":"insert-image-file-input",onChange:t=>{const n=t.currentTarget.files?.[0]??null;t.currentTarget.value="",n&&i.import({source:"file-picker",files:[n]},{editor:e}).catch(wb)}}),Ax("input",{ref:s,type:"file",accept:"image/*",hidden:!0,"data-ui":"replace-image-file-input",onChange:e=>{const t=e.currentTarget.files?.[0]??null;e.currentTarget.value="",t&&a(t).catch(wb)}})]})}),oE=ul("plugin-image.asset-service"),rE=new WeakSet,sE=cl("plugin-image.product-controller"),aE=class{handlers=null;register(e){return this.handlers=e,()=>{this.handlers===e&&(this.handlers=null)}}openInsertFilePicker(){this.handlers?.openInsertFilePicker()}openReplaceFilePicker(){this.handlers?.openReplaceFilePicker()}},lE=ul("plugin-image.toolbar-host-bridge"),dE={id:"canvas-kit.image",provides:[oE,lE,sE],requires:[UT],setup(e){const t=e.get(kk),n=t?async()=>t.flush():void 0,i=e.get(bP),o=i.add(vb({flushSnapshot:n})),r=i.add({token:lE,create:()=>new aE});e.get(uP).add(...(({hostBridge:e,imageObjectUrls:t})=>[{id:rT,run(){e.openInsertFilePicker()}},{id:iT,getAvailability(e){if(1!==e.selection.count||"image"!==e.selection.singleShapeType)return"inapplicable";const[t]=e.selection.selectedShapes;return Df(t)&&!t.isLocked?"enabled":"disabled"},run(){e.openReplaceFilePicker()}},{id:oT,getAvailability(e){if(1!==e.selection.count||"image"!==e.selection.singleShapeType)return"inapplicable";const[t]=e.selection.selectedShapes;if(!Df(t)||!t.props.assetId)return"disabled";const n=e.editor.getAsset(t.props.assetId);return Uf(n)&&("remote"===n.props.source.kind||Qy(e.editor,t.props.assetId))?"enabled":"disabled"},run({context:e}){fb({editor:e.editor,imageObjectUrls:t})}}])({hostBridge:r,imageObjectUrls:o.objectUrls})),e.get(SP).add({id:"canvas-kit.image-import",order:100,acceptsPreview:e=>e.fileTypes.some(e=>e.startsWith("image/"))||e.dataTypes.some(e=>{const t=e.toLowerCase();return"files"===t||"text/uri-list"===t}),accepts:e=>null!==rb(e.files)||(e.urls?.some(Ub)??!1),async import(e,{editor:t}){const i=rb(e.files),r=e.urls?.find(Ub);return await cb({editor:t,imageObjectUrls:o.objectUrls,source:i?{type:"file",file:i}:{type:"url",url:r},pagePoint:e.pagePoint,flushSnapshot:n})?"handled":"ignored"}}),e.get(Pk).beforeCommand(({commandId:e,context:t,editor:n})=>{var i;"history.undo"===e||"history.redo"===e||t&&("image.smudge"===(i=e)||"image.smudge.cancel"===i||"image.smudge.confirm"===i||"image.smudge.brush-size"===i||"image.smudge.brush-color"===i)||(e=>{kf(e).cancelIfActive()})(t?.editor??n)}),e.get(Mk).addResolver(oE),e.get(Tk).add({token:sE,create:({editor:e,services:t})=>Ab({editor:e,flushSnapshot:n,services:t})}),e.get(Ck).allowPropertiesDuringEditing(e=>zf(e)||Nf(e)),e.get(Mk).addSvgInliners((e=>({async prepare({editor:t,requestedShapeIds:n}){const i=Bb(t,t.getShapeExportTraversalIds(n).flatMap(e=>{const n=t.getShape(e);return n?[n]:[]})),o=new Set;for(const r of i.values()){if("local"!==r.props.source.kind)continue;const{storageKey:t}=r.props.source;if(!o.has(t)&&(o.add(t),0===t.length||!(await e.objectUrls.preload(t))))throw new Error(`Could not load image asset "${r.id}".`)}},async inline({editor:t,exportedShapes:n,svg:i}){let o=i;const r=Bb(t,n),s=new Set;for(const a of r.values()){const t=Lb(a,e);if(!t)throw new Error(`Could not resolve image asset "${a.id}".`);if(s.has(t))continue;const n=await Rb(a,t);if(n.href===n.dataUrl){s.add(t);continue}const i=`href="${$b(n.href)}"`;if(!o.includes(i))throw new Error(`Could not find image asset "${a.id}" in the generated SVG.`);o=o.split(i).join(`href="${n.dataUrl}"`),s.add(t)}return o}}))(o)),e.get(Ck).addComponents({id:"canvas-kit.image-import",order:100,component:e=>Ax(Fb,{...e,flushSnapshot:n})})}},cE=[{id:"system.clipboard-main-menu",channel:pP.mainMenu,order:900,actionIds:[Rk,Lk,$k],getSections:e=>[{id:"system.edit",title:"Edit",order:10,items:[{kind:"command",id:Rk,actionId:Rk,label:"Copy",icon:"copy",shortcut:e.editor.shortcuts.getActionShortcutLabel(Rk),dataUi:"copy-selection-menu-button"},{kind:"command",id:Lk,actionId:Lk,label:"Cut",icon:"scissors",shortcut:e.editor.shortcuts.getActionShortcutLabel(Lk),dataUi:"cut-selection-menu-button"},{kind:"command",id:$k,actionId:$k,label:"Paste",icon:"clipboard-paste",shortcut:e.editor.shortcuts.getActionShortcutLabel($k),dataUi:"paste-menu-button"}]}]}],uE=[{id:"system.selection-clipboard-context-menu",target:"selection",order:1e3,actionIds:[Rk,Lk],getSections:e=>[{id:"system.selection-edit",title:"Edit",order:10,items:[{kind:"command",id:Rk,actionId:Rk,label:"Copy",icon:"copy",shortcut:e.editor.shortcuts.getActionShortcutLabel(Rk),dataUi:"context-menu-copy-selection-button"},{kind:"command",id:Lk,actionId:Lk,label:"Cut",icon:"scissors",shortcut:e.editor.shortcuts.getActionShortcutLabel(Lk),dataUi:"context-menu-cut-selection-button"}]}]},{id:"system.canvas-clipboard-context-menu",target:"canvas",order:1e3,actionIds:[Fk],getSections:e=>[{id:"system.canvas-edit",title:"Edit",order:5,items:[{kind:"command",id:Fk,actionId:Fk,label:"Paste here",icon:"clipboard-paste",shortcut:e.editor.shortcuts.getActionShortcutLabel($k),dataUi:"context-menu-paste-here-button"}]}]}],hE=[{actionId:Rk,shortcut:{key:"c",accelKey:!0}},{actionId:Lk,shortcut:{key:"x",accelKey:!0}},{actionId:$k,shortcut:{key:"v",accelKey:!0}}],pE={id:"canvas-kit.standard.clipboard",requires:[Ak],setup(e){e.get(uP).addShortcuts(...hE),e.get(gP).add(...cE),e.get(fP).add(...uE)}},gE="system.selection.delete",fE="system.selection.duplicate",mE="system.selection.select-all",SE="system.selection.reset-rotation",yE="system.selection.flip-horizontal",bE="system.selection.flip-vertical",xE="system.selection.send-to-back",IE="system.selection.send-backward",wE="system.selection.bring-forward",vE="system.selection.bring-to-front",PE="system.selection.set-opacity",kE="system.selection.align",CE="system.selection.distribute",TE=["left","horizontal-center","right","top","vertical-center","bottom"],ME=["horizontal","vertical"],EE=[{actionId:fE,shortcut:{key:"d",accelKey:!0}},{actionId:mE,shortcut:{key:"a",accelKey:!0}}],AE=[{id:fE,getAvailability:e=>e.selection.count>0?"enabled":"inapplicable",run({context:e}){e.editor.duplicateSelection({source:"user"})}},{id:mE,getAvailability:e=>e.editor.getCurrentPageShapeIds().length>0?"enabled":"disabled",run({context:e}){e.editor.selectAllCurrentPage("user")}},{id:SE,getAvailability:e=>e.selection.canResetRotation?"enabled":"inapplicable",run({context:e}){e.editor.resetSelectionRotation("user")}},{id:yE,getAvailability:e=>0===e.selection.count?"inapplicable":e.selection.canFlip?"enabled":"disabled",run({context:e}){e.editor.flipSelection("horizontal","user")}},{id:bE,getAvailability:e=>0===e.selection.count?"inapplicable":e.selection.canFlip?"enabled":"disabled",run({context:e}){e.editor.flipSelection("vertical","user")}},{id:xE,getAvailability:e=>0===e.selection.count||qb(e)?"inapplicable":e.editor.canMoveSelectionInParentOrder("backward")?"enabled":"disabled",run({context:e}){e.editor.moveSelectionToParentOrderEdge("back","user")}},{id:IE,getAvailability:e=>0===e.selection.count||qb(e)?"inapplicable":e.editor.canMoveSelectionInParentOrder("backward")?"enabled":"disabled",run({context:e}){e.editor.moveSelectionInParentOrder("backward","user")}},{id:wE,getAvailability:e=>0===e.selection.count||qb(e)?"inapplicable":e.editor.canMoveSelectionInParentOrder("forward")?"enabled":"disabled",run({context:e}){e.editor.moveSelectionInParentOrder("forward","user")}},{id:vE,getAvailability:e=>0===e.selection.count||qb(e)?"inapplicable":e.editor.canMoveSelectionInParentOrder("forward")?"enabled":"disabled",run({context:e}){e.editor.moveSelectionToParentOrderEdge("front","user")}},{id:PE,getAvailability:e=>e.selection.count>0?"enabled":"inapplicable",getValue:e=>(e=>{const[t]=e.selection.selectedShapes;if(!t)return 1;const n=jb(t.opacity);return e.selection.selectedShapes.every(e=>jb(e.opacity)===n)?n:null})(e),run({context:e,value:t}){if("number"!=typeof t||!Number.isFinite(t))return;const n=jb(t),i=e.selection.selectedShapes.filter(e=>e.opacity!==n).map(e=>({id:e.id,opacity:n}));0!==i.length&&e.editor.commands.updateShapes(i,{source:"user"})}},{id:kE,getAvailability:e=>e.selection.count<=1?"inapplicable":e.editor.canAlignSelection()?"enabled":"disabled",run({context:e,value:t}){"string"==typeof t&&(e=>TE.includes(e))(t)&&e.editor.canAlignSelection()&&e.editor.alignSelection(t,"user")}},{id:CE,getAvailability:e=>e.selection.count<=2?"inapplicable":e.editor.canDistributeSelection()?"enabled":"disabled",run({context:e,value:t}){"string"==typeof t&&(e=>ME.includes(e))(t)&&e.editor.canDistributeSelection()&&e.editor.distributeSelection(t,"user")}},{id:gE,getAvailability:e=>e.selection.count>0?"enabled":"disabled",run({context:e}){e.editor.deleteSelection("user")}}],BE=[{id:"system.selection-main-menu",channel:pP.mainMenu,order:1e3,actionIds:[fE,mE,gE],getSections:e=>[{id:"system.edit",title:"Edit",order:10,items:[{kind:"command",id:fE,actionId:fE,label:"Duplicate",icon:"copy-plus",shortcut:e.editor.shortcuts.getActionShortcutLabel(fE),dataUi:"duplicate-selection-menu-button"},{kind:"command",id:mE,actionId:mE,label:"Select all",icon:"scan",shortcut:e.editor.shortcuts.getActionShortcutLabel(mE),dataUi:"select-all-menu-button"},{kind:"command",id:gE,actionId:gE,label:"Delete selection",icon:"trash-2",tone:"destructive",dataUi:"delete-selection-menu-button"}]}]}],RE=[{id:"system.selection-context-menu",target:"selection",order:1010,actionIds:[fE,SE,yE,bE,vE,wE,IE,xE],getSections(e){const t=e.selection.count>0&&!qb(e),n=[{id:"system.selection-edit",title:"Edit",order:10,items:[{kind:"command",id:fE,actionId:fE,label:"Duplicate",icon:"copy-plus",shortcut:e.editor.shortcuts.getActionShortcutLabel(fE),dataUi:"context-menu-duplicate-selection-button"}]}];return(e.selection.canResetRotation||e.selection.count>0)&&n.push({id:"system.selection-transform",title:"Transform",order:20,items:[{kind:"command",id:SE,actionId:SE,label:"Reset rotation",icon:"rotate-ccw",dataUi:"context-menu-reset-rotation-button"},{kind:"command",id:yE,actionId:yE,label:"Flip horizontal",icon:"flip-horizontal-2",dataUi:"context-menu-flip-horizontal-button"},{kind:"command",id:bE,actionId:bE,label:"Flip vertical",icon:"flip-vertical-2",dataUi:"context-menu-flip-vertical-button"}]}),t&&n.push({id:"system.selection-arrange",title:"Arrange",order:30,items:[{kind:"command",id:vE,actionId:vE,label:"Bring to front",icon:"stack-front",dataUi:"context-menu-bring-to-front-button"},{kind:"command",id:wE,actionId:wE,label:"Bring forward",icon:"stack-forward",dataUi:"context-menu-bring-forward-button"},{kind:"command",id:IE,actionId:IE,label:"Send backward",icon:"stack-backward",dataUi:"context-menu-send-backward-button"},{kind:"command",id:xE,actionId:xE,label:"Send to back",icon:"stack-back",dataUi:"context-menu-send-to-back-button"}]}),n}},{id:"system.selection-delete-context-menu",target:"selection",order:1030,actionIds:[gE],getSections:()=>[{id:"system.selection-edit",title:"Edit",order:10,items:[{kind:"separator",id:"system.selection.delete-leading-separator"},{kind:"command",id:gE,actionId:gE,label:"Delete selection",icon:"trash-2",tone:"destructive",dataUi:"context-menu-delete-selection-button"}]}]},{id:"system.canvas-selection-context-menu",target:"canvas",order:1005,actionIds:[mE],getSections:e=>[{id:"system.canvas-edit",title:"Edit",order:5,items:[{kind:"command",id:mE,actionId:mE,label:"Select all",icon:"scan",shortcut:e.editor.shortcuts.getActionShortcutLabel(mE),dataUi:"context-menu-select-all-button"}]}]}],LE=[{id:"system.selection-toolbar",channel:wP.selectionProperties,order:1e3,actionIds:[kE,CE,SE,yE,bE,xE,IE,wE,vE,PE],getGroups(e){const t=e.selection.count>0&&!qb(e);return[{id:"system.selection-layout",presentation:"primary",items:[{kind:"segmented",id:"system.selection-align",actionId:kE,label:"Align",icon:"layout-align-left",options:[{value:"left",label:"Align left",icon:"layout-align-left",dataUi:"align-selection-left-button"},{value:"horizontal-center",label:"Align horizontal center",icon:"layout-align-center",dataUi:"align-selection-horizontal-center-button"},{value:"right",label:"Align right",icon:"layout-align-right",dataUi:"align-selection-right-button"},{value:"top",label:"Align top",icon:"layout-align-top",dataUi:"align-selection-top-button"},{value:"vertical-center",label:"Align vertical center",icon:"layout-align-middle",dataUi:"align-selection-vertical-center-button"},{value:"bottom",label:"Align bottom",icon:"layout-align-bottom",dataUi:"align-selection-bottom-button"}]},{kind:"segmented",id:"system.selection-distribute",actionId:CE,label:"Distribute",icon:"distribute-horizontal",options:[{value:"horizontal",label:"Distribute horizontally",icon:"distribute-horizontal",dataUi:"distribute-selection-horizontal-button"},{value:"vertical",label:"Distribute vertically",icon:"distribute-vertical",dataUi:"distribute-selection-vertical-button"}]}]},{id:"system.selection-opacity",presentation:"overflow",items:[{kind:"slider",id:"system.selection-opacity",actionId:PE,label:"Opacity",min:0,max:1,step:.01,dataUi:"selection-opacity-slider"}]},{id:"system.selection-actions",presentation:"overflow",items:[...e.selection.canResetRotation?[{kind:"button",id:SE,actionId:SE,label:e.selection.isMixedFrameAndPointHandleSelection?"Reset shape rotation":"Reset rotation",icon:"rotate-ccw",dataUi:"reset-selection-rotation-button"},{kind:"separator",id:"system.selection.reset-delete-separator"}]:[],{kind:"button",id:yE,actionId:yE,label:"Flip horizontal",icon:"flip-horizontal-2",dataUi:"flip-selection-horizontal-button"},{kind:"button",id:bE,actionId:bE,label:"Flip vertical",icon:"flip-vertical-2",dataUi:"flip-selection-vertical-button"},...t?[{kind:"separator",id:"system.selection.flip-order-separator"},{kind:"button",id:xE,actionId:xE,label:"Send to back",icon:"stack-back",dataUi:"send-selection-to-back-button"},{kind:"button",id:IE,actionId:IE,label:"Send backward",icon:"stack-backward",dataUi:"send-selection-backward-button"},{kind:"button",id:wE,actionId:wE,label:"Bring forward",icon:"stack-forward",dataUi:"bring-selection-forward-button"},{kind:"button",id:vE,actionId:vE,label:"Bring to front",icon:"stack-front",dataUi:"bring-selection-to-front-button"}]:[]]}]}},{id:"system.selection-delete-toolbar",channel:wP.selectionProperties,order:1020,actionIds:[gE],getGroups:()=>[{id:"system.selection-delete",presentation:"overflow",items:[{kind:"separator",id:"system.selection.delete-leading-separator"},{kind:"button",id:gE,actionId:gE,label:"Delete selection",icon:"trash-2",dataUi:"delete-selection-toolbar-button"}]}]}],$E={id:"canvas-kit.standard.selection",setup(e){const t=e.get(uP);t.add(...AE),t.addShortcuts(...EE),e.get(gP).add(...BE),e.get(vP).add(...LE),e.get(fP).add(...RE)}},FE=[{id:"system.canvas-tool-context-menu",target:"canvas",order:1020,actionIds:[xP],getSections:e=>[{id:"system.canvas-tools",title:"Tools",order:20,items:[{kind:"command",id:"system.canvas.select-tool",actionId:xP,value:"select",label:"Select tool",icon:"mouse-pointer-2",shortcut:e.editor.shortcuts.getToolShortcutLabel("select"),dataUi:"context-menu-select-tool-button"},{kind:"command",id:"system.canvas.hand-tool",actionId:xP,value:"hand",label:"Hand tool",icon:"hand",shortcut:e.editor.shortcuts.getToolShortcutLabel("hand"),dataUi:"context-menu-hand-tool-button"}]}]}],UE=[{id:"system.select-tool-toolbar",channel:wP.toolSwitcher,order:0,actionIds:[xP],getGroups:e=>[{id:"system.select-tool",items:[{kind:"button",id:"system.select-tool",actionId:xP,value:"select",label:"Select",shortcut:e.editor.shortcuts.getToolShortcutLabel("select"),icon:"mouse-pointer-2",dataUi:"select-tool-button"},{kind:"button",id:"system.hand-tool",actionId:xP,value:"hand",label:"Hand",shortcut:e.editor.shortcuts.getToolShortcutLabel("hand"),icon:"hand",dataUi:"hand-tool-button"}]}]},{id:"system.tool-lock-toolbar",channel:wP.toolSwitcher,order:1e3,actionIds:[IP],getGroups:e=>[{id:"system.tool-lock",items:[{kind:"separator",id:"system.tool-lock-separator"},{kind:"button",id:"system.tool-lock",actionId:IP,value:!0,label:e.tool.isToolLocked?"Unlock tool":"Lock tool",icon:"lock",dataUi:"tool-lock-button"}]}]}],DE={id:"canvas-kit.standard.tool-ui",requires:[xk],setup(e){e.get(vP).add(...UE),e.get(fP).add(...FE)}},OE="system.view.zoom-in",zE="system.view.zoom-out",NE="system.view.reset-zoom",_E=[{id:OE,run({context:e}){e.editor.zoomAtViewportCenter(-120,"system")}},{id:zE,run({context:e}){e.editor.zoomAtViewportCenter(120,"system")}},{id:NE,run({context:e}){e.editor.resetZoom("user")}}],WE=[{id:"system.view-main-menu",channel:pP.mainMenu,order:2e3,actionIds:[OE,zE,NE],getSections:()=>[{id:"system.view",title:"View",order:20,items:[{kind:"command",id:OE,actionId:OE,label:"Zoom in",icon:"plus",dataUi:"zoom-in-menu-button"},{kind:"command",id:zE,actionId:zE,label:"Zoom out",icon:"minus",dataUi:"zoom-out-menu-button"},{kind:"command",id:NE,actionId:NE,label:"Reset zoom",icon:"rotate-ccw",dataUi:"reset-zoom-menu-button"}]}]}],XE=[{id:"system.canvas-view-context-menu",target:"canvas",order:1010,actionIds:[OE,zE,NE],getSections:()=>[{id:"system.canvas-view",title:"View",order:10,items:[{kind:"command",id:OE,actionId:OE,label:"Zoom in",icon:"plus",dataUi:"context-menu-zoom-in-button"},{kind:"command",id:zE,actionId:zE,label:"Zoom out",icon:"minus",dataUi:"context-menu-zoom-out-button"},{kind:"command",id:NE,actionId:NE,label:"Reset zoom",icon:"rotate-ccw",dataUi:"context-menu-reset-zoom-button"}]}]}],HE={id:"canvas-kit.standard.view",setup(e){e.get(uP).add(..._E),e.get(gP).add(...WE),e.get(fP).add(...XE)}},KE=[["geo",bk],["draw",EC],["arrow",XP],["eraser",VC],["laser",rM],["path",QM],["image",UT],["text",$P],["frame",ek],["group",nT]],YE=class{actions=new Map;registerAction(e){if(this.actions.has(e.id))throw new Error(`Duplicate canvas action id: ${e.id}.`);this.actions.set(e.id,e)}getAction(e){return this.actions.get(e)??null}},qE=class{contributions;channels=new Map;contributionsByChannel=new Map;stateRevision=0;constructor(e=[]){Qb(e.map(({id:e})=>e),"chrome contribution"),this.contributions=[...e];const t=new Map(e.map(({id:e},t)=>[e,t]));for(const n of e){this.channels.set(n.channel.id,n.channel);const e=this.contributionsByChannel.get(n.channel.id)??[];e.push(n),e.sort((e,n)=>(e.order??0)-(n.order??0)||(t.get(e.id)??0)-(t.get(n.id)??0)),this.contributionsByChannel.set(n.channel.id,e)}}getChannels(){return[...this.channels.values()]}getStateRevision(){return this.stateRevision}subscribeToState(e,t){const n=()=>{this.stateRevision+=1,t()},i=this.contributions.flatMap(t=>t.subscribe?[t.subscribe(e,n)]:[]);return this.stateRevision+=1,()=>{for(const e of i)e()}}getSections(e,t){return((e,t)=>{const n=[],i=new Map;for(const o of e){const e=i.get(o.id);if(void 0===e){i.set(o.id,n.length),n.push({...o,items:[...o.items]});continue}const t=n[e];n[e]={...t,title:t.title??o.title,items:[...t.items,...o.items]}}for(const o of n)Qb(o.items.map(({id:e})=>e),`chrome item in merged section "${o.id}" of channel "${t}"`);return n.map((e,t)=>({index:t,section:e})).sort((e,t)=>(e.section.order??0)-(t.section.order??0)||e.index-t.index).map(({section:e})=>e)})((this.contributionsByChannel.get(e.id)??[]).filter(e=>e.when?.(t)??!0).flatMap(e=>{const n=[...e.getSections(t)].sort((e,t)=>(e.order??0)-(t.order??0));return((e,t)=>{Qb(t.map(({id:e})=>e),`chrome section in contribution "${e.id}"`);const n=new Set(e.actionIds);for(const i of t){Qb(i.items.map(({id:e})=>e),`chrome item in section "${i.id}"`);for(const t of i.items)if("command"===t.kind&&!n.has(t.actionId))throw new Error(`Chrome contribution "${e.id}" returned undeclared action "${t.actionId}".`)}})(e,n),n}),e.id)}},jE=class{contributions=new Map;contributionsByTarget=new Map;contributionIndexes=new Map;nextContributionIndex=0;registerContribution(e){if(this.contributions.has(e.id))throw new Error(`Duplicate context-menu contribution id: ${e.id}.`);this.contributions.set(e.id,e),this.contributionIndexes.has(e.id)||(this.contributionIndexes.set(e.id,this.nextContributionIndex),this.nextContributionIndex+=1),((e,t,n)=>{e.push(t),e.sort((e,t)=>ex(e,t,n))})(((e,t)=>{const n=e.get(t);if(n)return n;const i=[];return e.set(t,i),i})(this.contributionsByTarget,e.target),e,this.contributionIndexes)}getSections(e,t){return(e=>{const t=[],n=new Map;for(const i of e){const e=n.get(i.id);if(void 0===e){n.set(i.id,t.length),t.push({...i,items:[...i.items]});continue}const o=t[e];t[e]={...o,title:o.title??i.title,items:[...o.items,...i.items]}}return t})((({anyContributions:e,contributionIndexes:t,target:n,targetContributions:i})=>"any"===n||0===i.length?e:0===e.length?i:[...i,...e].sort((e,n)=>ex(e,n,t)))({anyContributions:this.contributionsByTarget.get("any")??[],contributionIndexes:this.contributionIndexes,target:e,targetContributions:this.contributionsByTarget.get(e)??[]}).filter(e=>e.when?.(t)??!0).flatMap(e=>[...e.getSections(t)].sort((e,t)=>(e.order??0)-(t.order??0))))}},VE=class{contributionsByFormat=new Map;constructor(e=[]){const t=new Set;for(const n of e){if(t.has(n.id))throw new Error(`Duplicate canvas export contribution id: ${n.id}.`);if(t.add(n.id),this.contributionsByFormat.has(n.format))throw new Error(`Duplicate canvas export format: ${n.format}.`);this.contributionsByFormat.set(n.format,n)}}getFormats(){return[...this.contributionsByFormat.values()].map(({format:e,label:t,mimeType:n,fileExtension:i})=>({format:e,label:t,mimeType:n,fileExtension:i}))}hasFormat(e){return this.contributionsByFormat.has(e)}async export(e,t){const n=this.contributionsByFormat.get(e);if(!n)throw new Error(`Canvas export format is unavailable: ${e}.`);const i=await n.export(t);return{format:n.format,label:n.label,mimeType:n.mimeType,fileExtension:n.fileExtension,...i}}},GE=class{contributions;constructor(e=[]){(e=>{const t=new Set;for(const n of e){if(t.has(n))throw new Error(`Duplicate canvas import contribution id: ${n}.`);t.add(n)}})(e.map(({id:e})=>e)),this.contributions=e.map((e,t)=>({contribution:e,index:t})).sort((e,t)=>(e.contribution.order??0)-(t.contribution.order??0)||e.index-t.index).map(({contribution:e})=>e)}getContributions(){return this.contributions}canImport(e){return this.contributions.some(t=>t.accepts(e))}canImportPreview(e){return this.contributions.some(t=>t.acceptsPreview?.(e)??!1)}async import(e,t){for(const n of this.contributions){if(!n.accepts(e))continue;const i=await n.import(e,t);if("handled"===i)return i}return"ignored"}},ZE=class{contributions=new Map;channels=new Map;contributionsByChannel=new Map;contributionIndexes=new Map;nextContributionIndex=0;stateRevision=0;registerContribution(e){if(this.contributions.has(e.id))throw new Error(`Duplicate toolbar contribution id: ${e.id}.`);const t=this.channels.get(e.channel.id);this.contributions.set(e.id,e),this.contributionIndexes.has(e.id)||(this.contributionIndexes.set(e.id,this.nextContributionIndex),this.nextContributionIndex+=1),t||this.channels.set(e.channel.id,e.channel),((e,t,n)=>{e.push(t),e.sort((e,t)=>{const i=(e.order??0)-(t.order??0);return 0!==i?i:(n.get(e.id)??0)-(n.get(t.id)??0)})})(((e,t)=>{const n=e.get(t);if(n)return n;const i=[];return e.set(t,i),i})(this.contributionsByChannel,e.channel.id),e,this.contributionIndexes)}getStateRevision(){return this.stateRevision}subscribeToState(e,t){const n=()=>{this.stateRevision+=1,t()},i=[...this.contributions.values()].flatMap(t=>t.subscribe?[t.subscribe(e,n)]:[]);return this.stateRevision+=1,()=>{for(const e of i)e()}}getGroups(e,t){const n=(this.contributionsByChannel.get(e.id)??[]).filter(e=>e.when?.(t)??!0).flatMap(e=>{const n=[...e.getGroups(t)].sort((e,t)=>(e.order??0)-(t.order??0));return((e,t)=>{const n=new Set(e.actionIds);ox(t.map(({id:e})=>e),`toolbar group in contribution "${e.id}"`);for(const i of t){ox(i.items.map(({id:e})=>e),`toolbar item in group "${i.id}"`);for(const t of i.items)if("actionId"in t&&!n.has(t.actionId))throw new Error(`Toolbar contribution "${e.id}" returned undeclared action "${t.actionId}".`)}})(e,n),n});return ox(n.map(({id:e})=>e),`toolbar group in channel "${e.id}"`),n}getChannels(){return[...this.channels.values()]}},QE=[500,1e3,2e3,5e3],JE=class{editor;adapter;unsubscribeDocument=null;unsubscribeSession=null;documentTimer=null;sessionTimer=null;pendingDocument=null;pendingSession=null;documentVersion=0;sessionVersion=0;documentRetryCount=0;sessionRetryCount=0;writeChain=Promise.resolve();isRunning=!1;constructor(e,t){this.editor=e,this.adapter=t}start(){this.isRunning||(this.isRunning=!0,this.adapter.saveDocument&&(this.unsubscribeDocument=this.editor.operations.subscribe(e=>{var t;this.documentVersion+=1,this.documentRetryCount=0,this.pendingDocument={snapshot:(t=e.snapshot,JSON.parse(JSON.stringify(t))),version:this.documentVersion},this.scheduleDocumentSave(200)})),this.adapter.saveSession&&(this.unsubscribeSession=this.editor.listen(e=>{var t,n;((t=e.diff).added.some(e=>"session"===e.scope)||t.updated.some(e=>"session"===e.before.scope||"session"===e.after.scope)||t.removed.some(e=>"session"===e.scope))&&(this.sessionVersion+=1,this.sessionRetryCount=0,this.pendingSession={snapshot:(n=this.editor.getSessionSnapshot(),JSON.parse(JSON.stringify(n))),version:this.sessionVersion},this.scheduleSessionSave(200))})),"undefined"!=typeof document&&document.addEventListener("visibilitychange",this.flushWhenHidden),"undefined"!=typeof window&&(window.addEventListener("pagehide",this.flushWhenPageIsLeaving),window.addEventListener("beforeunload",this.flushWhenPageIsLeaving)))}stop(){this.isRunning&&(this.isRunning=!1,this.flush().catch(e=>{console.warn("Could not persist canvas snapshot.",e)}),this.unsubscribeDocument?.(),this.unsubscribeSession?.(),this.unsubscribeDocument=null,this.unsubscribeSession=null,"undefined"!=typeof document&&document.removeEventListener("visibilitychange",this.flushWhenHidden),"undefined"!=typeof window&&(window.removeEventListener("pagehide",this.flushWhenPageIsLeaving),window.removeEventListener("beforeunload",this.flushWhenPageIsLeaving)))}flush(){this.cancelDocumentTimer(),this.cancelSessionTimer();const e=this.savePendingDocument(),t=this.savePendingSession();return Promise.all([e,t]).then(()=>{})}savePendingDocument(){const e=this.pendingDocument;return e&&this.adapter.saveDocument?(this.pendingDocument=null,this.queueWrite(()=>this.adapter.saveDocument(e.snapshot)).then(()=>{this.documentVersion===e.version&&(this.documentRetryCount=0)}).catch(t=>{throw this.documentVersion===e.version&&null===this.pendingDocument&&(this.pendingDocument=e,this.scheduleDocumentRetry()),t})):this.writeChain}savePendingSession(){const e=this.pendingSession;return e&&this.adapter.saveSession?(this.pendingSession=null,this.queueWrite(()=>this.adapter.saveSession(e.snapshot)).then(()=>{this.sessionVersion===e.version&&(this.sessionRetryCount=0)}).catch(t=>{throw this.sessionVersion===e.version&&null===this.pendingSession&&(this.pendingSession=e,this.scheduleSessionRetry()),t})):this.writeChain}queueWrite(e){const t=this.writeChain.then(e);return this.writeChain=t.catch(()=>{}),t}scheduleDocumentSave(e){this.cancelDocumentTimer(),this.documentTimer=setTimeout(()=>{this.documentTimer=null,this.savePendingDocument().catch(e=>{console.warn("Could not persist canvas document.",e)})},e)}scheduleSessionSave(e){this.cancelSessionTimer(),this.sessionTimer=setTimeout(()=>{this.sessionTimer=null,this.savePendingSession().catch(e=>{console.warn("Could not persist canvas session.",e)})},e)}scheduleDocumentRetry(){if(!this.isRunning||null!==this.documentTimer)return;const e=QE[this.documentRetryCount];void 0!==e&&(this.documentRetryCount+=1,this.scheduleDocumentSave(e))}scheduleSessionRetry(){if(!this.isRunning||null!==this.sessionTimer)return;const e=QE[this.sessionRetryCount];void 0!==e&&(this.sessionRetryCount+=1,this.scheduleSessionSave(e))}cancelDocumentTimer(){null!==this.documentTimer&&(clearTimeout(this.documentTimer),this.documentTimer=null)}cancelSessionTimer(){null!==this.sessionTimer&&(clearTimeout(this.sessionTimer),this.sessionTimer=null)}flushWhenHidden=()=>{"hidden"===document.visibilityState&&this.flush().catch(e=>{console.warn("Could not persist canvas snapshot.",e)})};flushWhenPageIsLeaving=()=>{this.flush().catch(e=>{console.warn("Could not persist canvas snapshot.",e)})}},eA=new WeakMap,tA={status:"starting"};export{aC as CANVAS_KIT_TOOL_IDS,au as CanvasKitFloatingToolbarLayer,px as CanvasKitRoot,Mv as DEFAULT_TEXT_FONT,sh as FloatingSelectionToolbarPageSpace,Ev as HOST_TEXT_FONT,Rk as SYSTEM_CLIPBOARD_COPY_ACTION_ID,Lk as SYSTEM_CLIPBOARD_CUT_ACTION_ID,$k as SYSTEM_CLIPBOARD_PASTE_ACTION_ID,Fk as SYSTEM_CLIPBOARD_PASTE_AT_POINT_ACTION_ID,UP as arrowApiToken,uP as canvasActionsExtension,yP as canvasApisExtension,hP as canvasCapabilitiesExtension,gP as canvasChromeExtension,Ak as canvasClipboardRuntimeCapability,Bk as canvasClipboardServiceToken,fP as canvasContextMenuExtension,fC as canvasExportApiToken,mP as canvasExportsExtension,vk as canvasImportHostCapability,SP as canvasImportsExtension,Tk as canvasKitApisExtension,Mk as canvasKitAssetsExtension,Pk as canvasKitLifecycleExtension,kk as canvasKitPersistenceExtension,Ck as canvasKitUiExtension,bP as canvasServicesExtension,xk as canvasToolActionsCapability,vP as canvasToolbarExtension,pP as chromeChannels,$h as createCanvasKitController,Fh as createCanvasKitControllerWithTools,lx as createCanvasKitRuntime,jo as createCanvasPluginValueToken,dl as createChromeChannel,E as createCustomShapeColor,Rs as createDefaultTextFontCatalog,Bs as createDefaultTextPluginOptions,cl as createProductApiToken,ul as createProductServiceToken,Vb as createStandardCanvasKitPlugins,uh as createTextHostPlugin,hh as createTextLinkHoverPopoverPresenter,M as createThemeShapeColor,hl as createToolbarChannel,Hc as defineCanvasPlugin,HP as frameApiToken,ck as geoApiToken,qr as getPlainTextFromRichText,L as getThemeColorTokenName,sE as imageProductControllerToken,B as isCustomShapeColorRef,A as isThemeShapeColorRef,Wc as mergeToolbarGroups,U as resolveShapeColor,F as shapeColorToCssColor,PP as textApiToken,wP as toolbarChannels,fh as useCanvasKitLayerTree,mx as useCanvasKitRuntime,du as useCanvasKitWheelCapture};
1
+ function e(){return new Cd}function t(e){return 0===e.added.length&&0===e.updated.length&&0===e.removed.length}function n(e){return e instanceof Map?new Map(e):new Map(Array.from(e,e=>[e.id,e]))}function i(e){return{added:[...e.removed],updated:e.updated.map(e=>({before:e.after,after:e.before})),removed:[...e.added]}}function s(e,t){const n=new Map,i=new Map,s=new Map;for(const r of e.added)n.set(r.id,r);for(const r of e.updated)i.set(r.after.id,r);for(const r of e.removed)s.set(r.id,r);for(const r of t.added){const e=s.get(r.id);if(e){s.delete(r.id),i.set(r.id,{before:e,after:r});continue}const t=i.get(r.id);t?i.set(r.id,{before:t.before,after:r}):n.set(r.id,r)}for(const r of t.updated){if(n.get(r.after.id)){n.set(r.after.id,r.after);continue}const e=s.get(r.after.id);if(e){s.delete(r.after.id),i.set(r.after.id,{before:e,after:r.after});continue}const t=i.get(r.after.id);i.set(r.after.id,t?{before:t.before,after:r.after}:{before:r.before,after:r.after})}for(const r of t.removed){if(n.get(r.id)){n.delete(r.id);continue}const e=i.get(r.id);e?(i.delete(r.id),s.set(r.id,e.before)):s.set(r.id,r)}const o={added:[],updated:[],removed:[]};for(const r of n.values())o.added.push(r);for(const r of i.values())r.before!==r.after&&o.updated.push(r);for(const r of s.values())o.removed.push(r);return o}function o(e){const t={added:[],updated:[],removed:[]};for(const{before:n,after:i}of e.values())n!==i&&(!n&&i?t.added.push(i):n&&!i?t.removed.push(n):n&&i&&t.updated.push({before:n,after:i}));return t}function r(e,t){for(const[n,i]of t)i.after?(i.moveToEnd&&e.delete(n),e.set(n,i.after)):e.delete(n)}function a(e={}){return{id:Ed,typeName:"document",scope:"document",meta:{...e}}}function d(){return{id:kd,typeName:"page",scope:"document",name:"Page 1",index:"0001",meta:{}}}function c(e=kd){return{id:Bd,typeName:"session",scope:"session",currentPageId:e,activeToolId:"select",isToolLocked:!1,editingShapeId:null,shapeEditingSession:null,pageCameraById:{[e]:{...Ad}},pageSelectedShapeIdsById:{[e]:[]},meta:{}}}function l(e){return!!e&&"page"===e.typeName}function h(e){return!!e&&"document"===e.typeName}function u(e){return!!e&&"shape"===e.typeName}function p(e){return!!e&&"session"===e.typeName}function g(e){return!!e&&"binding"===e.typeName}function f(e){return!!e&&"asset"===e.typeName}function m(e){return"document"===e.scope}function y(e){return e[Rd]}function S(e,t,n){return I([e],t,n).get(e)??e}function I(e,t,n){const i=[...t].sort((e,t)=>e.id.localeCompare(t.id)),s=new Map;for(const r of i){const e=r.fromId===r.toId?[r.fromId]:[r.fromId,r.toId];for(const t of e){if(s.has(t))continue;const e=n(r).getShapeCompanionRootId?.(r,t);e&&e!==t&&s.set(t,e)}}const o=new Map;for(const r of e){if(o.has(r))continue;const e=new Set([r]);let t=r;for(;;){const n=s.get(t);if(!n){o.set(r,t);break}if(e.has(n)){o.set(r,r);break}e.add(n),t=n}}return o}function v({before:e,after:t}){return e.parentId!==t.parentId||e.x!==t.x||e.y!==t.y||e.rotation!==t.rotation||e.scaleX!==t.scaleX||e.scaleY!==t.scaleY||e.props!==t.props}function w(e){const t=e();if(("object"==typeof(n=t)&&null!==n||"function"==typeof n)&&"function"==typeof n.then)throw new Error("Binding reaction scope callbacks must be synchronous");var n;return t}function b({editor:e,exporters:t,shapeIds:n}){const i=Array.from(n),s=e.layers.getExportTraversalIds(i),o=[];for(const h of s){const n=e.shapes.get(h);n?(P(e.shapes.computeExportPageBounds(n))||o.push({kind:"missing-bounds",id:n.id,canRepair:!1}),t.get(n.type)||o.push({kind:"missing-exporter",id:n.id,canRepair:!1})):o.push({kind:"missing-shape",id:h,canRepair:!1})}const r=new Set(s),a=new Set,d=y(e).getAll().filter(g).sort((e,t)=>e.id.localeCompare(t.id));for(const h of d){if(!r.has(h.fromId)&&!r.has(h.toId))continue;const t=e.shapes.get(h.fromId),n=e.shapes.get(h.toId);t&&n?e.bindings.canBind(h)?(e.bindings.getConflicting(h).some(e=>a.has(e.id))&&o.push({kind:"duplicate-exclusive-binding",id:h.id,canRepair:!0}),a.add(h.id)):o.push({kind:"invalid-binding",id:h.id,canRepair:!0}):o.push({kind:"missing-binding-endpoint",id:h.id,canRepair:!0})}const c=o.filter(e=>e.canRepair).length,l=o.length-c;return{requestedShapeIds:i,issues:o,repairableIssueCount:c,fatalIssueCount:l,canExport:0===l}}function P(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.w)&&Number.isFinite(e.h)&&e.w>=0&&e.h>=0}function x(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.w)&&Number.isFinite(e.h)&&e.w>=0&&e.h>=0}function C(e,t,n){return e.dist(((e,t,n)=>{const i=t.sub(e),s=n.sub(e),o=i.x*i.x+i.y*i.y;if(0===o)return e;const r=Math.max(0,Math.min(1,(s.x*i.x+s.y*i.y)/o));return new Ld(e.x+i.x*r,e.y+i.y*r)})(t,n,e))}function T(e,t,n,i){return((e,t,n,i)=>{const s=t.sub(e),o=i.sub(n),r=s.x*o.y-s.y*o.x;if(Math.abs(r)<1e-8)return!1;const a=n.sub(e),d=(a.x*o.y-a.y*o.x)/r,c=(a.x*s.y-a.y*s.x)/r;return d>=0&&d<=1&&c>=0&&c<=1})(e,t,n,i)?0:Math.min(C(e,n,i),C(t,n,i),C(n,e,t),C(i,e,t))}function M(e){return e.length>=3&&e.every(e=>Number.isFinite(e.x)&&Number.isFinite(e.y))}function E(e){const t=e.filter(M).flatMap(e=>e);return t.length>0?Yd.FromPoints(t):null}function k(e,t){if(!M(t))return!1;let n=!1;for(let i=0;i<t.length;i+=1){const s=t[i],o=t[(i+t.length-1)%t.length];if(C(e,o,s)<=1e-8)return!0;s.y>e.y!=o.y>e.y&&e.x<(o.x-s.x)*(e.y-s.y)/(o.y-s.y)+s.x&&(n=!n)}return n}function B(e,t){return t.some(t=>k(e,t))}function A(e,t,n,i=0){if(!M(n))return!1;if(k(e,n)||k(t,n))return!0;for(let s=0;s<n.length;s+=1)if(T(e,t,n[s],n[(s+1)%n.length])<=Math.max(0,i))return!0;return!1}function R(e){return{kind:"theme",slot:e}}function F(e){return{kind:"custom",value:e}}function K(e){return!!e&&"object"==typeof e&&"theme"===e.kind&&Xd.includes(e.slot)}function D(e){return!!e&&"object"==typeof e&&"custom"===e.kind&&"string"==typeof e.value}function L(e){return Od[e]}function Y(e){return"custom"===e.kind?e.value:`var(${L(e.slot)}, ${zd[e.slot]})`}function X(e,t){if("custom"===e.kind)return e.value;const n=L(e.slot),i=zd[e.slot];return t?.(n,i)??i}function O(e,t,n){const i=new Set;let s=n.parentId;for(;s.startsWith("shape:");){const n=s;if(n===t)return!0;if(i.has(n))return!1;i.add(n);const o=e.shapes.get(n);if(!o)return!1;s=o.parentId}return!1}function z(e,t,n){let i=e.shapes.computeExportPageBounds(t);if(!x(i))return i;for(const s of((e,t,n)=>{const i=[];for(const s of N(e,t,n)){const t=_(e,s);t&&x(t)&&i.push(t)}return i})(e,t,n)){const e=U(i,s);if(!e)return null;i=e}return i}function N(e,t,n){const i=[],s=new Set;let o=t.parentId;for(;o.startsWith("shape:");){const t=o;if(s.has(t))break;s.add(t);const r=e.shapes.get(t);if(!r)break;n.has(r.id)&&i.push(r),o=r.parentId}return i.reverse()}function $(e,t,n,i){if(n.has(t.id))return n.get(t.id)??null;const s=e.shapes.getUtil(t),o=s.getChildExportClipLocalPolygons(t);if(!o||!E(o))return n.set(t.id,null),null;const r=e.shapes.computeExportToPageTransform(t).toSvgString(),a=s.getChildExportClipLocalBounds(t),[d]=o,c=1===o.length&&d&&a&&((e,t)=>{const n=[new Ld(t.minX,t.minY),new Ld(t.maxX,t.minY),new Ld(t.maxX,t.maxY),new Ld(t.minX,t.maxY)];return e.length===n.length&&e.every((e,t)=>e.equals(n[t]))})(d,a)?[{tag:"rect",attrs:{x:a.x,y:a.y,width:a.w,height:a.h,transform:r}}]:o.map(e=>({tag:"path",attrs:{d:H(e),transform:r}})),l=i.addDef({tag:"clipPath",attrs:{clipPathUnits:"userSpaceOnUse"},children:c});return n.set(t.id,l),l}function _(e,t){const n=e.shapes.getUtil(t).getChildExportClipLocalPolygons(t);if(!n||!E(n))return null;const i=e.shapes.computeExportToPageTransform(t);return E(n.map(e=>e.map(e=>i.applyToPoint(e))))}function H(e){return e.map((e,t)=>`${0===t?"M":"L"} ${e.x} ${e.y}`).concat("Z").join(" ")}function U(e,t){const n=Math.max(e.minX,t.minX),i=Math.max(e.minY,t.minY),s=Math.min(e.maxX,t.maxX),o=Math.min(e.maxY,t.maxY);return s<n||o<i?null:new Yd(n,i,s-n,o-i)}function W(e){if("string"==typeof e)return e.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;");const t=(e=>{const t=[];for(const[n,i]of Object.entries(e))null!=i&&!1!==i&&t.push(`${n}="${q("number"==typeof i?V(i):String(i))}"`);return 0===t.length?"":` ${t.join(" ")}`})(e.attrs??{}),n=e.children?.map(W).join("")??"";return n?`<${e.tag}${t}>${n}</${e.tag}>`:`<${e.tag}${t}/>`}function q(e){return e.replaceAll("&","&amp;").replaceAll('"',"&quot;").replaceAll("<","&lt;").replaceAll(">","&gt;")}function V(e){return Number.isFinite(e)?Number(e.toFixed(4)).toString():"0"}function G(e,t,n=Object.is){if(e===t)return!0;if(e.length!==t.length)return!1;for(let i=0;i<e.length;i+=1)if(!n(e[i],t[i]))return!1;return!0}function j(e,t){if(e===t)return!0;if(e.size!==t.size)return!1;for(const n of e)if(!t.has(n))return!1;return!0}function Q(e,t){return e===t||(e&&t?e.x===t.x&&e.y===t.y:e===t)}function Z(e,t){return G(e,t,Q)}function J(e,t){return G(e,t,Z)}function ee(e,t){return e===t||(e&&t?e.x===t.x&&e.y===t.y&&e.w===t.w&&e.h===t.h:e===t)}function te(e,t){if(Object.is(e,t))return!0;if(typeof e!=typeof t)return!1;if(!e||!t||"object"!=typeof e||"object"!=typeof t)return!1;if(Array.isArray(e)||Array.isArray(t))return!(!Array.isArray(e)||!Array.isArray(t))&&G(e,t,te);const n=e,i=t,s=Object.keys(n),o=Object.keys(i);return s.length===o.length&&s.every(e=>Object.prototype.hasOwnProperty.call(i,e)&&te(n[e],i[e]))}function ne(e){const t=Wd.get(e);if(!t)throw new Error("Editor record factory is not initialized");return t}function ie(e){const t=Number(e.split(":")[1]??0);return Number.isFinite(t)?t:0}function se(e,t,n){const i=new Set([e.id]);let s=e.parentId;for(;s.startsWith("shape:");){const e=s;if(i.has(e))return null;i.add(e);const n=t.get(e);if(!n)return null;s=n.parentId}return n.has(s)?s:null}function oe(e){const t=e.props.assetId;return"string"==typeof t&&t.startsWith("asset:")?t:null}function re(e,t){const n=[],i=new Set;for(const s of t)for(const t of ae(s)){if(i.has(t))continue;const s=e.assets.get(t);s&&(i.add(t),n.push(ue(s)))}return n}function ae(e){const t=[],n=new Set,i=oe(e);return i&&(n.add(i),t.push(i)),de(e.props,n,t),t}function de(e,t,n){if(pe(e))t.has(e)||(t.add(e),n.push(e));else if(Array.isArray(e))for(const i of e)de(i,t,n);else if(e&&"object"==typeof e)for(const i of Object.values(e))de(i,t,n)}function ce(e,t){return le(e,t)}function le(e,t){if(pe(e))return t.get(e)??e;if(Array.isArray(e))return e.map(e=>le(e,t));if(!e||"object"!=typeof e)return e;const n={};for(const[i,s]of Object.entries(e))n[i]=le(s,t);return n}function he(e){return ue(e)}function ue(e){if(Array.isArray(e))return e.map(ue);if(!e||"object"!=typeof e)return e;const t={};for(const[n,i]of Object.entries(e))t[n]=ue(i);return t}function pe(e){return"string"==typeof e&&e.startsWith("asset:")}function ge(e){return void 0!==e&&e<0?-1:1}function fe(e,t){if(void 0===t)return e;const n=2*Math.PI;return e+Math.round((t-e)/n)*n}function me(e,t){const n=2*Math.PI,i=((e-t+Math.PI)%n+n)%n-Math.PI;return Math.abs(i)}function ye(e,t,n={}){if(!(e=>[e.a,e.b,e.c,e.d,e.e,e.f].every(Number.isFinite))(e)||![t.x,t.y,t.w,t.h].every(Number.isFinite))return null;const i=Number.isFinite(n.epsilon)?Math.max(0,n.epsilon??0):1e-8,s=Math.hypot(e.a,e.b),o=Math.hypot(e.c,e.d),r=e.determinant(),a=({rotation:n,scaleX:i,scaleY:s})=>{const o=t.center,r=e.applyToPoint(o),a={x:r.x-o.x,y:r.y-o.y,rotation:n,scaleX:i,scaleY:s};return Object.values(a).every(Number.isFinite)?a:null},d=i*Math.max(1,s,o),c=s<=d,l=o<=d;if(c||l){if(c&&l)return a({rotation:n.preferredRotation??0,scaleX:0,scaleY:0});if(c){const t=o*ge(n.preferredScaleYSign);return a({rotation:fe(Math.atan2(-e.c/t,e.d/t),n.preferredRotation),scaleX:0,scaleY:t})}const t=s*ge(n.preferredScaleXSign);return a({rotation:fe(Math.atan2(e.b/t,e.a/t),n.preferredRotation),scaleX:t,scaleY:0})}if(Math.abs(e.a*e.c+e.b*e.d)/(s*o)>i)return null;if(Math.abs(r)<=i*s*o)return null;const h=Math.atan2(e.b,e.a),u=s,p=o*(r<0?-1:1),g=[{rotation:fe(h,n.preferredRotation),scaleX:u,scaleY:p},{rotation:fe(h+Math.PI,n.preferredRotation),scaleX:-u,scaleY:-p}],f=ge(n.preferredScaleXSign),m=ge(n.preferredScaleYSign),y=e=>{let t=0;return void 0!==n.preferredScaleXSign&&ge(e.scaleX)===f&&(t+=1),void 0!==n.preferredScaleYSign&&ge(e.scaleY)===m&&(t+=1),{signMatches:t,rotationDistance:void 0===n.preferredRotation?0:me(e.rotation,n.preferredRotation)}},S=y(g[0]),I=y(g[1]),v=I.signMatches>S.signMatches||I.signMatches===S.signMatches&&I.rotationDistance<S.rotationDistance?g[1]:g[0];return a({rotation:v.rotation,scaleX:v.scaleX,scaleY:v.scaleY})}function Se(e,t,n){return n.compose(t.getLocalTransform(e))}function Ie(e,t,n){return n.compose(t.getPositionedTransform(e))}function ve(e,t,n){return Se(e,t,n)}function we(e,t,n){return Se(e,t,n).applyToPoint(t.getLocalBounds(e).center)}function be(e,t,n,i){const s=Ie(e,n,i).tryInvert();if(s)return s.applyToPoint(t);const o=n.getLocalBounds(e).center,r=new Ld(e.x+o.x,e.y+o.y),a=i.tryInvert();if(!a)return r;const d=a.applyToPoint(t).sub(r).rot(-e.rotation);return r.add(new Ld(0===e.scaleX?0:d.x/e.scaleX,0===e.scaleY?0:d.y/e.scaleY))}function Pe(e,t,n){const i=Ie(e,t,n);return((e,t)=>t.getPositionedOutlineVertices(e))(e,t).map(e=>i.applyToPoint(e))}function xe(e,t,n){const i=Pe(e,t,n),s=((e,t,n)=>{const i=t.getLocalBounds(e),s=Se(e,t,n);return[new Ld(i.minX,i.minY),new Ld(i.maxX,i.minY),new Ld(i.maxX,i.maxY),new Ld(i.minX,i.maxY)].map(e=>s.applyToPoint(e))})(e,t,n);return{bounds:Yd.FromPoints(i),center:we(e,t,n),corners:s,outlineVertices:i}}function Ce(e){const t=(e=>{const t=new Set(e.selection.getIds());return 0===t.size?[]:e.state.currentPageShapeIds.get().filter(e=>t.has(e)).filter(n=>!((e,t,n)=>{const i=new Set([t]);let s=e.shapes.get(t);for(;s?.parentId.startsWith("shape:");){const t=s.parentId;if(n.has(t))return!0;if(i.has(t))return!1;i.add(t),s=e.shapes.get(t)}return!1})(e,n,t))})(e);if(0===t.length)return null;const n=((e,t)=>{const n=((e,t)=>{const n=e.layers.includeDescendants(t),i=new Set(n);for(let s=0;s<n.length;s+=1){const t=n[s];if(t)for(const s of e.bindings.getForShape(t)){const t=e.bindings.getUtil(s).getExportShapeIds?.(e,s);for(const s of t??[])for(const t of e.layers.includeDescendants([s]))i.has(t)||(i.add(t),n.push(t))}}return n})(e,t),i=new Set(n);return e.state.currentPageShapeIds.get().filter(e=>i.has(e))})(e,t),i=new Set(n),s=new Set;for(const c of n){const t=e.shapes.get(c);if(!(!t||t.parentId.startsWith("shape:")&&i.has(t.parentId)||Me(e,t,i))){s.add(t.id);for(const n of e.layers.getDescendantIds(t.id))s.add(n)}}const o=n.filter(e=>!s.has(e)),r=new Set(o),a=o.map(t=>e.shapes.get(t)).filter(e=>!!e).flatMap(t=>{const n=Me(e,t,r);return n?[n]:[]});if(0===a.length)return null;const d=t.filter(e=>r.has(e));return 0===d.length?null:{type:"land/clipboard",version:2,source:{app:"land"},rootShapeIds:d,records:{shapes:a,bindings:Ee(e,a,r),assets:re(e,a)},bounds:ke(e,o)}}function Te(e,t){const{payload:n}=t;if(!(e=>{if(!e||"object"!=typeof e)return!1;const t=e;return"land/clipboard"===t.type&&2===t.version&&!!t.records&&Array.isArray(t.rootShapeIds)&&Array.isArray(t.records.shapes)&&Array.isArray(t.records.bindings)&&Array.isArray(t.records.assets)})(n)||0===n.records.shapes.length)return[];const i=t.source??"user",s=e.pages.getCurrentId(),o=(e=>{const t=e.payload.bounds;return e.pagePoint?e.pagePoint.sub(new Ld(t.x+t.w/2,t.y+t.h/2)):e.offset??Vd})(t),r=new Map,a=new Map,d=[],c=new Set(n.records.shapes.map(e=>e.id)),l=new Set(n.records.shapes.filter(e=>!e.parentId.startsWith("shape:")||!c.has(e.parentId)).map(e=>e.id));y(e).atomic(()=>{const t=n.records.assets.map(t=>{const n=ne(e).createAsset({type:t.type,props:he(t.props),meta:he(t.meta)});return r.set(t.id,n.id),n});t.length>0&&e.commands.createAssetsFromRecords(t,{source:i});const d=n.records.shapes.map(t=>{const n=ce(t.props,r),i=l.has(t.id),d=ne(e).createShape({type:t.type,x:t.x+(i?o.x:0),y:t.y+(i?o.y:0),props:n,parentId:s,rotation:t.rotation,scaleX:t.scaleX,scaleY:t.scaleY,opacity:t.opacity,isHidden:t.isHidden,isLocked:t.isLocked,meta:he(t.meta)});return a.set(t.id,d.id),{original:t,draft:d}}).map(({original:e,draft:t})=>({...t,parentId:Be(e.parentId,a,s)}));d.length>0&&e.commands.createShapesFromRecords(d,{source:i});for(const s of n.records.bindings){const t=a.get(s.fromId),n=a.get(s.toId);t&&n&&e.commands.createBinding({type:s.type,fromId:t,toId:n,props:he(s.props),meta:he(s.meta)},{source:i})}},i);for(const h of n.rootShapeIds){const e=a.get(h);e&&d.push(e)}return d.length>0&&e.commands.setSelectedShapeIds(d,{source:i}),d}function Me(e,t,n){if(!e.shapes.getUtil(t).canCopyToClipboard(t,{editor:e,copiedShapeIds:n}))return null;const i=ue(t);if(t.parentId.startsWith("shape:")&&n.has(t.parentId))return i;const s=e.shapes.computeLocalBounds(t),o=ye(e.shapes.computeLocalToPageTransform(t),s,{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY});return o?{...i,parentId:e.layers.getPageId(t.id)??i.parentId,...o}:null}function Ee(e,t,n){const i=[],s=new Set;for(const o of t)for(const t of e.bindings.getForShape(o.id))s.has(t.id)||n.has(t.fromId)&&n.has(t.toId)&&(s.add(t.id),i.push(ue(t)));return i}function ke(e,t){const n=(e=>{if(0===e.length)return null;let t=1/0,n=1/0,i=-1/0,s=-1/0;for(const o of e)t=Math.min(t,o.minX),n=Math.min(n,o.minY),i=Math.max(i,o.maxX),s=Math.max(s,o.maxY);return new Yd(t,n,i-t,s-n)})(t.map(t=>e.shapes.getPageBounds(t)).filter(e=>!!e))??new Yd(0,0,0,0);return{x:n.x,y:n.y,w:n.w,h:n.h}}function Be(e,t,n){return e.startsWith("shape:")?t.get(e)??n:n}function Ae(e,t,n){for(const i of t){const t=e.shapes.get(i);t?.parentId.startsWith("shape:")&&n.add(t.parentId)}}function Re(e,t,n){const i=n?.pageId??e.pages.getCurrentId(),s=n?.source??"user",o=((e,t)=>{const n=new Set(t);return t.filter(t=>{const i=e.shapes.get(t);if(!i)return!1;let s=i.parentId;const o=new Set([t]);for(;s.startsWith("shape:");){const t=s;if(o.has(t))return!0;if(n.has(t))return!1;o.add(t);const i=e.shapes.get(t);if(!i)return!0;s=i.parentId}return!0})})(e,Array.from(new Set(t.filter(t=>e.layers.getPageId(t)===i&&!e.shapes.isHidden(t))))),r=e.session.get(),a=r.pageSelectedShapeIdsById[i]??[];e.state.shapeEditingSession.get()&&!e.editing.complete(s)||G(a,o)||(e.interaction.setBindingPreview(null),e.interaction.setSnapIndicators(null),e.session.update({pageSelectedShapeIdsById:{...r.pageSelectedShapeIdsById,[i]:o}},s))}function Fe(e,t,n="system"){y(e).put([{...e.session.get(),...t}],n)}function Ke(e){return e.map((e,t)=>({...e,index:String(t+1).padStart(4,"0")}))}function De(e,t,n){return Math.abs(e-t)<=n*Math.max(1,Math.abs(e),Math.abs(t))}function Le(e,t,n=1e-8){if(!t.canReceiveChildren(e))return null;const i=t.getChildTransformPolicy(e),s=Math.abs(e.scaleX),o=Math.abs(e.scaleY);return Number.isFinite(s)&&Number.isFinite(o)&&("isometry"===i?De(s,1,n)&&De(o,1,n):s>n&&o>n&&De(s,o,n))?null:{shapeId:e.id,shapeType:e.type,policy:i,scaleX:e.scaleX,scaleY:e.scaleY}}function Ye(e){return`Container shape ${e.shapeId} (${e.shapeType}) violates ${e.policy} child transform policy with scale (${e.scaleX}, ${e.scaleY})`}function Xe(e,t,n){const i=n.startsWith("shape:")?e.shapes.get(n):null,s=(i?e.shapes.computeLocalToPageTransform(i):$d.Identity()).tryInvert();if(!s)return null;const o=e.shapes.computeLocalToPageTransform(t);return ye(s.compose(o),e.shapes.computeLocalBounds(t),{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY})}function Oe(e,t,n){const i=Array.from(new Set(t)).filter(t=>e.shapes.get(t));return 0===i.length?[]:(e.bindings.cleanupForDeletedShapes(i,n.source),y(e).remove(i,n.source),n.afterRemove?.(i),e.selection.remove(i,n.source),e.editing.removeShapeIds(i,n.source),i)}function ze(e,t,n,i=new Set){const s=[...t].sort((t,n)=>Ne(e,n)-Ne(e,t));for(const o of s){if(i.has(o))continue;const t=e.shapes.get(o);if(!t)continue;const s=e.shapes.getUtil(t);if(!s.shouldResizeDescendants(t))continue;const r=$e(e,t.id);if(0===r.length)continue;const a=r.flatMap(t=>{const n=e.shapes.getUtil(t),i=n.getPositionedTransform(t);return n.getPositionedOutlineVertices(t).map(e=>i.applyToPoint(e))});if(0===a.length)continue;const d=Yd.FromPoints(a),c=s.getResizeToFitDescendantsProps(t,d);if(!c)continue;const l=s.validateProps(c),h={...t,props:l},u=ye(s.getLocalTransform(t).compose($d.Translate(d.x,d.y)),s.getLocalBounds(h),{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY});if(!u)continue;const p=[...r.map(e=>({before:e,after:{...e,x:e.x-d.x,y:e.y-d.y}})),{before:t,after:{...t,...u,props:l}}].filter(({before:e,after:t})=>{return!((n=e).x===(i=t).x&&n.y===i.y&&n.rotation===i.rotation&&n.scaleX===i.scaleX&&n.scaleY===i.scaleY&&((e,t)=>{if(e===t)return!0;const n=Object.entries(e),i=Object.entries(t);return n.length===i.length&&n.every(([e,n])=>Object.is(n,t[e]))})(n.props,i.props));var n,i});0!==p.length&&(y(e).put(p.map(e=>e.after),n),e.bindings.handleShapeChanges(p,n))}}function Ne(e,t){let n=0,i=e.shapes.get(t);const s=new Set;for(;i?.parentId.startsWith("shape:");){const t=i.parentId;if(s.has(t))break;s.add(t),n+=1,i=e.shapes.get(t)}return n}function $e(e,t){return y(e).getAll().filter(u).filter(e=>e.parentId===t).sort((e,t)=>e.index.localeCompare(t.index))}function _e(e,t,n){const i=new Set([t.id]);let s=t.parentId;for(;s.startsWith("shape:");){const t=e.shapes.get(s);if(!t||i.has(t.id))return;i.add(t.id),e.shapes.getUtil(t).shouldResizeDescendants(t)&&n.add(t.id),s=t.parentId}}function He(e,t){const n=new Set;for(const i of t){const t=e.shapes.get(i);t&&_e(e,t,n)}return n}function Ue(e,t,n,i){const s=[],o=[...t].sort((t,n)=>e.layers.getDescendantIds(n).length-e.layers.getDescendantIds(t).length);for(let r=0;r<o.length;r+=1){const t=o[r];if(!t||n.has(t))continue;const a=e.shapes.get(t);if(!a)continue;const d=e.shapes.getUtil(a).getMinimumChildCount(a);if(d<=0)continue;const c=$e(e,a.id).filter(e=>!n.has(e.id)),l=new Set(c.map(e=>e.id));if(new Set(c.map(t=>{const n=e.bindings.getShapeCompanionRootId(t.id);return l.has(n)?n:t.id})).size>=d)continue;const h=$e(e,a.parentId).filter(e=>!n.has(e.id)).flatMap(e=>e.id===a.id?c.map(e=>e.id):[e.id]),u=new Map(h.map((t,n)=>[t,ne(e).createShapeIndex(n+1)])),p=[];let g=!0;for(const n of c){if(!e.layers.canReceiveChild(a.parentId,n.id)){g=!1;break}const t=Xe(e,n,a.parentId);if(!t){g=!1;break}p.push({before:n,after:{...n,...t,parentId:a.parentId,index:u.get(n.id)??a.index}})}if(!g)continue;const f=new Set;_e(e,a,f);for(const e of f)o.push(e);const m=new Set(p.map(e=>e.after.id)),S=h.flatMap(t=>{if(m.has(t))return[];const n=e.shapes.get(t),i=u.get(t);return n&&i&&n.index!==i?[{before:n,after:{...n,index:i}}]:[]}),I=[...p,...S];I.length>0&&(y(e).put(I.map(e=>e.after),i),e.bindings.handleShapeChanges(I,i));const v=e.selection.getIds();if(v.includes(a.id)){const t=Array.from(new Set(p.map(t=>{const n=e.bindings.getShapeCompanionRootId(t.after.id);return m.has(n)?n:t.after.id})));e.commands.setSelectedShapeIds(v.flatMap(e=>e===a.id?t:[e]),{source:i})}const w=Oe(e,[a.id],{source:i});for(const e of w)n.add(e),s.push(e)}return s}function We(e,t,n){const i=n?.source??"user";e.bindings.runWithSuppressedReactions(n?.suppressBindingIds??[],()=>((e,t,n)=>{y(e).atomic(()=>{const i=((e,t)=>{const n=[],i=[];for(const s of t){const t=e.shapes.get(s.id);if(!t)continue;const o=s.x??t.x,r=s.y??t.y,a=s.rotation??t.rotation,d=s.scaleX??t.scaleX,c=s.scaleY??t.scaleY,l=void 0===s.opacity?t.opacity:je(s.opacity,t.opacity),h=s.isHidden??t.isHidden,u=s.isLocked??t.isLocked,p=s.parentId??t.parentId,g=s.index??t.index,f=void 0===s.meta?t.meta:{...s.meta};if(!s.props&&void 0===s.meta&&o===t.x&&r===t.y&&a===t.rotation&&d===t.scaleX&&c===t.scaleY&&l===t.opacity&&h===t.isHidden&&u===t.isLocked&&p===t.parentId&&g===t.index)continue;const m=e.shapeUtils.get(t.type),y={...t,x:o,y:r,rotation:a,scaleX:d,scaleY:c,opacity:l,isHidden:h,isLocked:u,parentId:p,index:g,props:s.props?m.validateProps({...t.props,...s.props}):t.props,meta:f};n.push(y),i.push({before:t,after:y})}return n.length>0&&qe(e,n),{records:n,changes:i}})(e,t);0!==i.records.length&&((e,t,n)=>{y(e).put(t.records,n),t.changes.some(({before:e,after:t})=>e.parentId!==t.parentId)&&Ve(e,n),e.bindings.handleShapeChanges(t.changes,n),((e,t,n)=>{const i=new Set,s=new Set;for(const r of t)_e(e,r.before,i),_e(e,r.after,i),r.before.parentId!==r.after.parentId&&r.before.parentId.startsWith("shape:")&&s.add(r.before.parentId),e.shapes.getUtil(r.after).shouldResizeDescendants(r.after)&&i.add(r.after.id);const o=new Set;Ue(e,s,o,n),ze(e,i,n,o)})(e,t.changes,n)})(e,i,n)},n)})(e,t,i))}function qe(e,t){const n=new Set;for(const o of t){if(n.has(o.id))throw new Error(`Duplicate shape id ${o.id}`);n.add(o.id)}const i=new Map(y(e).getAll().filter(u).map(e=>[e.id,e]));for(const o of t)i.set(o.id,o);for(const o of i.values()){const t=Le(o,e.shapes.getUtil(o));if(t)throw new Error(Ye(t))}const s=new Map(t.map(e=>[e.id,e]));for(const o of i.values())o.parentId.startsWith("shape:")&&n.has(o.parentId)&&s.set(o.id,o);for(const o of s.values()){const t=new Set([o.id]);let n=o;for(;n.parentId.startsWith("shape:");){const s=n.parentId;if(t.has(s))throw new Error(`Shape parent cycle includes ${o.id}`);t.add(s);const r=i.get(s);if(!r)throw new Error(`Missing parent ${s} for shape ${n.id}`);if(!e.shapes.getUtil(r).canReceiveChild(r,n))throw new Error(`Shape ${s} cannot receive shape ${n.id}`);n=r}if(!e.pages.get(n.parentId))throw new Error(`Missing page parent ${n.parentId} for shape ${n.id}`)}}function Ve(e,t){const n=e.session.get();let i=!1;const s={};for(const[o,r]of Object.entries(n.pageSelectedShapeIdsById)){const t=o,n=r??[],a=Array.from(new Set(n)).filter(n=>Ge(e,n)===t&&!e.shapes.isHidden(n)),d=new Set(a),c=a.filter(t=>{let n=e.shapes.get(t);const i=new Set([t]);for(;n?.parentId.startsWith("shape:");){const t=n.parentId;if(i.has(t))return!0;if(d.has(t))return!1;i.add(t),n=e.shapes.get(t)}return!0});s[t]=c,c.length!==n.length&&(i=!0)}i&&e.session.update({pageSelectedShapeIdsById:s},t)}function Ge(e,t){let n=e.shapes.get(t);const i=new Set;for(;n?.parentId.startsWith("shape:");){const t=n.parentId;if(i.has(t))return null;i.add(t),n=e.shapes.get(t)}return n&&e.pages.get(n.parentId)?n.parentId:null}function je(e,t){return"number"==typeof e&&Number.isFinite(e)?Math.min(1,Math.max(0,e)):t}function Qe(e,t,n){const i=((e,t)=>{const n=Array.from(new Set(t.ids)).map(t=>e.shapes.get(t)).filter(e=>!!e&&e.parentId!==t.parentId);if(0===n.length)return[];const i=$e(e,t.parentId).reduce((e,t)=>{const n=Number.parseInt(t.index,10);return Number.isFinite(n)?Math.max(e,n):e},0),s=t.parentId.startsWith("shape:")?e.shapes.get(t.parentId):null,o=new Map;for(const r of n){if(!e.layers.canReceiveChild(t.parentId,r.id))return null;const n=Xe(e,r,t.parentId);if(!n)return null;o.set(r.id,n)}return n.map((n,r)=>{const a=s?e.shapes.getUtil(s).getChildPlacementMeta(s,n,{editor:e,reason:"reparent"}):n.meta;return{id:n.id,parentId:t.parentId,index:ne(e).createShapeIndex(i+r+1),...o.get(n.id),meta:a===n.meta?void 0:a}})})(e,t);return!!i&&(0===i.length||We(e,i,n),!0)}function Ze(e){const t=t=>(e.assertDocumentWriteAllowed(),t()),n=((e,t)=>({createBinding(n,i){const s=i?.source??"user",o=ne(e).createBinding(n);if(!e.bindings.canBind(o))throw new Error(`Invalid binding endpoints for ${o.type} binding`);const r=new Set;return Ae(e,[o.fromId,o.toId],r),y(e).atomic(()=>{const n=e.bindings.getConflicting(o).map(e=>e.id);n.length>0&&e.bindings.cleanup(n,s),y(e).put([o],s),e.bindings.syncCreated(o,s),Ae(e,[o.fromId,o.toId],r),t(r,new Set,s)},s),o},updateBinding(n,i){const s=i?.source??"user",o=e.bindings.get(n.id);if(!o)return null;const r=e.bindings.getUtil(o),a={...o,fromId:n.fromId??o.fromId,toId:n.toId??o.toId,props:n.props?r.validateProps({...o.props,...n.props}):o.props,meta:n.meta??o.meta};if(!e.bindings.canBind(a))throw new Error(`Invalid binding endpoints for ${a.type} binding`);const d=new Set;return Ae(e,[o.fromId,o.toId,a.fromId,a.toId],d),y(e).atomic(()=>{const n=e.bindings.getConflicting(a).map(e=>e.id);n.length>0&&e.bindings.cleanup(n,s),y(e).put([a],s),e.bindings.syncUpdated(o,a,s),Ae(e,[o.fromId,o.toId,a.fromId,a.toId],d),t(d,new Set,s)},s),a},deleteBinding(t,n){const i=n?.source??"user",s=e.bindings.get(t);return!!s&&(y(e).atomic(()=>{e.bindings.cleanup([s.id],i),y(e).remove([s.id],i)},i),!0)}}))(e,(t,n,i)=>{Ue(e,t,n,i)});return{createPage:(n,i)=>t(()=>function(e,t,n){const i=n?.source??"user",s=ne(e).createPage(t);let o=s;return y(e).atomic(()=>{const t=Ke([...e.pages.getAll(),s]);o=t.find(e=>e.id===s.id)??s,y(e).put(t,i),((e,t,n="system")=>{const i=e.state.session.get(),s=i.pageCameraById[t]??{...Ad},o=i.pageSelectedShapeIdsById[t]??[];Fe(e,{pageCameraById:{...i.pageCameraById,[t]:s},pageSelectedShapeIdsById:{...i.pageSelectedShapeIdsById,[t]:o}},n)})(e,o.id,i)},i),o}(e,n,i)),deletePage:(n,i)=>t(()=>function(e,t,n){const i=n?.source??"user",s=e.pages.getAll();if(s.length<=1)return!1;const o=s.findIndex(e=>e.id===t);if(o<0)return!1;const r=e.shapes.getForPage(t).map(e=>e.id),a=Ke(s.filter(e=>e.id!==t)),d=s[o+1]?.id??s[o-1]?.id??s[0]?.id,c=e.pages.getCurrentId()===t&&d?d:e.pages.getCurrentId();return y(e).atomic(()=>{r.length>0&&e.commands.deleteShapes(r,n),y(e).remove([t],i),((e,t,n,i="system")=>{const s=e.state.session.get(),o={...s.pageCameraById},r={...s.pageSelectedShapeIdsById};delete o[t],delete r[t],Fe(e,{currentPageId:n,pageCameraById:o,pageSelectedShapeIdsById:r},i)})(e,t,c,i),y(e).put(a,i)},i),!0}(e,n,i)),renamePage(n,i){t(()=>((e,t,n)=>{const i=n?.source??"user",s=e.pages.get(t.id);if(!s)return;const o=t.name.trim();o&&o!==s.name&&y(e).atomic(()=>{y(e).put([{...s,name:o}],i)},i)})(e,n,i))},updateDocumentMeta:(n,i)=>t(()=>((e,t,n)=>{const i=n?.source??"user",{document:s}=e,o=s.getMetadata()??a(),r={...o,meta:{...o.meta,...t.patch}};return y(e).atomic(()=>{y(e).put([r],i)},i),r})(e,n,i)),updatePageMeta:(n,i)=>t(()=>((e,t,n)=>{const i=n?.source??"user",s=e.pages.get(t.id);if(!s)return null;const o={...s,meta:{...s.meta,...t.patch}};return y(e).atomic(()=>{y(e).put([o],i)},i),o})(e,n,i)),movePage(n,i){t(()=>((e,t,n)=>{const i=n?.source??"user",s=e.pages.getAll(),o=s.findIndex(e=>e.id===t.id);if(o<0)return;const r=Math.max(0,Math.min(t.toIndex,s.length-1));if(o===r)return;const a=[...s],[d]=a.splice(o,1);d&&(a.splice(r,0,d),y(e).atomic(()=>{y(e).put(Ke(a),i)},i))})(e,n,i))},createShapes:(n,i)=>t(()=>function(e,t,n){const i=[],s=n?.source??"user";return y(e).atomic(()=>{const o=t.map(t=>ne(e).createShape(t)),r=new Map(o.map(e=>[e.id,e])),a=o.map(t=>{if(!t.parentId.startsWith("shape:"))return t;const n=r.get(t.parentId)??e.shapes.get(t.parentId);if(!n)return t;const i=e.shapes.getUtil(n).getChildPlacementMeta(n,t,{editor:e,reason:"create"});return i===t.meta?t:{...t,meta:i}});if(qe(e,a),y(e).put(a,s),"user"===s&&!1!==n?.autoReparent){const i=new Map;for(let n=0;n<a.length;n+=1){const s=a[n],o=t[n];if(!s||!o||o.parentId)continue;const r=e.layers.getContainingParentIdForShape(s);r&&r!==s.parentId&&i.set(s.id,r)}((e,t)=>{const n=new Set;for(const i of e.keys()){const s=[],o=new Map;let r=i;for(;r;){const i=o.get(r);if(void 0!==i){for(const e of s.slice(i))n.add(e);break}o.set(r,s.length),s.push(r);const a=e.get(r);r=a?.startsWith("shape:")&&t.has(a)?a:null}}for(const i of n)e.delete(i)})(i,new Set(a.map(e=>e.id)));const s=new Map;for(const e of a){const t=i.get(e.id);if(!t)continue;const n=s.get(t)??[];n.push(e.id),s.set(t,n)}for(const[t,o]of s)Qe(e,{ids:o,parentId:t},n)}const d=He(e,a.map(e=>e.id)),c=new Set;if(!n?.deferMinimumChildRepair){const t=new Set;for(const n of a){const i=e.shapes.get(n.id);i&&e.shapes.getUtil(i).getMinimumChildCount(i)>0&&t.add(i.id)}Ue(e,t,c,s)}ze(e,d,s,c),i.push(...a.map(t=>e.shapes.get(t.id)).filter(e=>!!e))},s),i}(e,n,i)),createShapesFromRecords:(n,i)=>t(()=>((e,t,n)=>{const i=n?.source??"user";if(0===t.length)return[];for(const s of t)if(e.shapes.get(s.id))throw new Error(`Shape ${s.id} already exists`);return qe(e,t),y(e).atomic(()=>{y(e).put(t,i),Ve(e,i);const n=He(e,t.map(e=>e.id));for(const i of t){const t=e.shapes.get(i.id);t&&e.shapes.getUtil(t).getMinimumChildCount(t)>0&&n.add(t.id)}const s=new Set;Ue(e,n,s,i),ze(e,n,i,s)},i),t.map(t=>e.shapes.get(t.id)).filter(e=>!!e)})(e,n,i)),updateShapes(n,i){t(()=>We(e,n,i))},reparentShapes:(n,i)=>t(()=>Qe(e,n,i)),deleteShapes(n,i){t(()=>function(e,t,n){const i=n?.source??"user",s=e.layers.includeDescendants(t),o=He(e,s),r=new Set(s),a=((e,t)=>{if(0===t.length)return[];const n=new Set(t),i=new Set,s=new Set;for(const o of y(e).getAll().filter(u)){const e=oe(o);e&&(n.has(o.id)?i.add(e):s.add(e))}return e.assets.getAll().map(e=>e.id).filter(e=>i.has(e)&&!s.has(e))})(e,s);e.editing.prepareForShapeRemoval(s,i),y(e).atomic(()=>{Oe(e,s,{source:i,afterRemove:()=>{a.length>0&&y(e).remove(a,i),Ue(e,o,r,i),ze(e,o,i,r)}})},i)}(e,n,i))},createAsset:(n,i)=>t(()=>((e,t,n)=>{const i=n?.source??"user",s=ne(e).createAsset(t);return y(e).atomic(()=>{y(e).put([s],i)},i),s})(e,n,i)),createAssetsFromRecords:(n,i)=>t(()=>((e,t,n)=>{const i=n?.source??"user";return 0===t.length?[]:(y(e).atomic(()=>{y(e).put(t,i)},i),t)})(e,n,i)),updateAsset:(n,i)=>t(()=>((e,t,n)=>{const i=n?.source??"user",s=e.assets.get(t.id);if(!s)return null;const o={...s,props:t.props?{...s.props,...t.props}:s.props,meta:t.meta??s.meta};return y(e).atomic(()=>{y(e).put([o],i)},i),o})(e,n,i)),deleteAsset:(n,i)=>t(()=>((e,t,n)=>{const i=n?.source??"user";return!!e.assets.get(t)&&(y(e).atomic(()=>{y(e).remove([t],i)},i),!0)})(e,n,i)),createBinding:(e,i)=>t(()=>n.createBinding(e,i)),updateBinding:(e,i)=>t(()=>n.updateBinding(e,i)),deleteBinding:(e,i)=>t(()=>n.deleteBinding(e,i)),setCurrentPageId(t,n){((e,t,n)=>{const i=n?.source??"system";if(!e.pages.get(t))return;t!==e.pages.getCurrentId()&&(e.viewport.stopCameraAnimation(),e.interaction.cancel("page_switch"),e.editing.complete(i));const s=e.state.session.get();Fe(e,{currentPageId:t,pageCameraById:{...s.pageCameraById,[t]:s.pageCameraById[t]??{...Ad}},pageSelectedShapeIdsById:{...s.pageSelectedShapeIdsById,[t]:s.pageSelectedShapeIdsById[t]??[]}},i)})(e,t,n)},setCamera(t,n){((e,t,n)=>{e.viewport.setCamera(t.camera,{pageId:t.pageId,source:n?.source??"system"})})(e,t,n)},setSelectedShapeIds(t,n){((e,t,n)=>{Re(e,t,{source:n?.source??"user"})})(e,t,n)},setActiveTool(t,n){((e,t,n)=>{const i=n?.source??"system";e.tools.syncActiveTool(t),e.editing.complete(i),Fe(e,{activeToolId:t},i)})(e,t,n)},setToolLocked(t,n){((e,t,n)=>{const i=n?.source??"system";e.tools.syncLockedState(t),Fe(e,{isToolLocked:t},i)})(e,t,n)}}}function Je(e,t,n){const i=e.bindings.getShapeCompanionMemberIds(t),s=Array.from(new Set(i.filter(t=>{const i=e.shapes.get(t);return!!i&&i[n.flag]!==n.value})));if(0===s.length)return[];e.interaction.cancelForCommand();const o=s.map("isHidden"===n.flag?e=>({id:e,isHidden:n.value}):e=>({id:e,isLocked:n.value}));if(e.commands.updateShapes(o,{source:n.source}),n.value){const t=e.layers.includeDescendants(s);e.selection.remove(t,n.source),e.editing.removeShapeIds(t,n.source)}return s}function et(e,t){return{originScreenPoint:t.clone(),originCamera:e.state.camera.get()}}function tt(e,t,n){const i=n.sub(t.originScreenPoint),s=t.originCamera.z;e.viewport.setCamera({x:t.originCamera.x-i.x/s,y:t.originCamera.y-i.y/s},{source:"user"})}function nt(e,t){return e?t?e.propagation===t.propagation&&e.clickSequence===t.clickSequence?e:{propagation:"stop"===e.propagation||"stop"===t.propagation?"stop":void 0,clickSequence:"break"===e.clickSequence||"break"===t.clickSequence?"break":void 0}:e:t||void 0}function it(e){return{timestamp:e.timestamp,screenPoint:e.screenPoint.clone(),pointerId:e.pointerId,button:e.button,pointerType:e.pointerType}}function st(e,t){return e.pointerId===t.pointerId&&e.button===t.button&&e.pointerType===t.pointerType}function ot(e){return{claimed:"stop"===e?.propagation}}function rt(){return Ld.Zero()}function at(e,t,n){if(n<=0)return rt();const i=t.x-e.x,s=t.y-e.y;return 0===i&&0===s?rt():new Ld(i/n,s/n)}function dt(e,t){return e.shiftKey===t.shiftKey&&e.altKey===t.altKey&&e.ctrlKey===t.ctrlKey&&e.metaKey===t.metaKey&&e.accelKey===t.accelKey}function ct(e,t){return e.canUndo===t.canUndo&&e.canRedo===t.canRedo}function lt(e){return{added:[...e.added],updated:e.updated.filter(({before:e,after:t})=>!ht(e,t)),removed:[...e.removed]}}function ht(e,t){if(Object.is(e,t))return!0;if(typeof e!=typeof t||null===e||null===t)return!1;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((e,n)=>ht(e,t[n]));if("object"!=typeof e||"object"!=typeof t)return!1;const n=e,i=t,s=Object.keys(n),o=Object.keys(i);return s.length===o.length&&s.every(e=>Object.prototype.hasOwnProperty.call(i,e)&&ht(n[e],i[e]))}function ut(e){return JSON.parse(JSON.stringify(e))}function pt(e){return JSON.parse(JSON.stringify(e))}function gt(e,t,n){const i=e.get(t);i?i.push(n):e.set(t,[n])}function ft(e,t,n){const i=e.get(t);if(!i)return!1;const s=i.indexOf(n);if(s<0)return!1;if(1===i.length)return e.delete(t),!0;const o=i.slice();return o.splice(s,1),e.set(t,o),!0}function mt(e,t){return e.fromId===t.fromId?e.id.localeCompare(t.id):e.fromId.localeCompare(t.fromId)}function yt(e,t,n){return"to"===e?t.toId===n.toId?t.fromId===n.fromId?t.id.localeCompare(n.id):t.fromId.localeCompare(n.fromId):t.toId.localeCompare(n.toId):mt(t,n)}function St(e,t,n,i,s){const o=e.get(t);if(!o)return e.set(t,[n.id]),!0;if(o.includes(n.id))return!1;const r=o.slice();return r.splice(((e,t,n,i)=>{for(let s=0;s<e.length;s+=1){const o=i(e[s]);if(o&&yt(n,t,o)<0)return s}return e.length})(o,n,i,s),0,n.id),e.set(t,r),!0}function It(e){return g(e.before)&&g(e.after)}function vt(e,t){ft(e.bindingIdsByFromShape,t.fromId,t.id),ft(e.bindingIdsByToShape,t.toId,t.id),ft(e.relatedBindingIdsByShape,t.fromId,t.id),ft(e.relatedBindingIdsByShape,t.toId,t.id)}function wt(e,t){const n=t=>e.bindingById.get(t);St(e.bindingIdsByFromShape,t.fromId,t,"from",n),St(e.bindingIdsByToShape,t.toId,t,"to",n),St(e.relatedBindingIdsByShape,t.fromId,t,"related",n),St(e.relatedBindingIdsByShape,t.toId,t,"related",n)}function bt(){return{changesByShape:new Map,cacheByShape:new Map}}function Pt(e,t,n){for(const i of oc)for(const s of xt(i,t)){const o=e.relations[i];let r=o.changesByShape.get(s);r||(r=new Map,o.changesByShape.set(s,r)),r.set(t.id,n)}}function xt(e,t){switch(e){case"from":return[t.fromId];case"to":return[t.toId];case"related":return t.fromId===t.toId?[t.fromId]:[t.fromId,t.toId]}}function Ct(e,t){return e===t||(e&&t?e.a===t.a&&e.b===t.b&&e.c===t.c&&e.d===t.d&&e.e===t.e&&e.f===t.f:e===t)}function Tt(e,t){return e===t||(e&&t?ee(e.bounds,t.bounds)&&Q(e.center,t.center)&&Z(e.corners,t.corners)&&Z(e.outlineVertices,t.outlineVertices):e===t)}function Mt(e){return e?e.clone():e}function Et(e){return e?.map(e=>e.clone())}function kt(e){return e?new $d(e.a,e.b,e.c,e.d,e.e,e.f):void 0}function Bt(e,t,n){const i=[],s=new Set;let o=t;for(;o;){if(s.has(o.id))return;if(s.add(o.id),i.push(o),o.parentId.startsWith("page:")){if(!e.pages.get(o.parentId))return;break}if(o=n(o.parentId),!o)return}let r=$d.Identity();for(let a=i.length-1;a>=0;a-=1){const t=i[a];t&&(r=Se(t,e.shapes.getUtil(t),r))}return r}function At(e,t,n){if(t.startsWith("page:"))return e.pages.get(t)?$d.Identity():void 0;const i=n(t);return i?Bt(e,i,n):void 0}function Rt(e,t,n){const i=[],s=new Set;let o=t.parentId;for(;o.startsWith("shape:");){const t=o;if(s.has(t))break;s.add(t);const r=n(t);if(!r)break;const a=e.shapes.getUtil(r).getChildClipLocalPolygons(r);a&&E(a)&&i.push(r),o=r.parentId}return i.reverse()}function Ft(e,t){return Yd.FromPoints([new Ld(e.minX,e.minY),new Ld(e.maxX,e.minY),new Ld(e.maxX,e.maxY),new Ld(e.minX,e.maxY)].map(e=>t.applyToPoint(e)))}function Kt(e,t){const n=Math.max(e.minX,t.minX),i=Math.max(e.minY,t.minY),s=Math.min(e.maxX,t.maxX),o=Math.min(e.maxY,t.maxY);return s<n||o<i?null:new Yd(n,i,s-n,o-i)}function Dt(e,t,n){const i=e.get(t);i?i.push(n):e.set(t,[n])}function Lt(e,t,n){const i=e.get(t);if(!i)return!1;const s=i.indexOf(n);if(s<0)return!1;if(1===i.length)return e.delete(t),!0;const o=i.slice();return o.splice(s,1),e.set(t,o),!0}function Yt(e,t,n,i){const s=e.get(t);if(!s)return void e.set(t,[n.id]);if(s.includes(n.id))return;let o=s.length;for(let a=0;a<s.length;a+=1){const e=i(s[a]);if(void 0!==e&&e.localeCompare(n.index)>0){o=a;break}}const r=s.slice();r.splice(o,0,n.id),e.set(t,r)}function Xt(e){return u(e.before)&&u(e.after)}function Ot(e,t){return e.length===t.length&&e.every((e,n)=>{const i=t[n];return!!i&&e.id===i.id&&e.parentId===i.parentId&&e.type===i.type})}function zt(e,t,n,i){const s=t.sub(e),o=i.sub(n),r=s.x*o.y-s.y*o.x;if(Math.abs(r)<1e-8)return null;const a=n.sub(e),d=(a.x*o.y-a.y*o.x)/r,c=(a.x*s.y-a.y*s.x)/r;return d>=0&&d<=1&&c>=0&&c<=1?d:null}function Nt(e,t,n){if(n.containsPoint(e)||n.containsPoint(t))return!0;const i=[new Ld(n.minX,n.minY),new Ld(n.maxX,n.minY),new Ld(n.maxX,n.maxY),new Ld(n.minX,n.maxY)];for(let s=0;s<i.length;s+=1){const n=i[s],o=i[(s+1)%i.length];if(n&&o&&null!==zt(e,t,n,o))return!0}return!1}function $t(e,t){return Yd.FromPoints([new Ld(e.minX,e.minY),new Ld(e.maxX,e.minY),new Ld(e.maxX,e.maxY),new Ld(e.minX,e.maxY)].map(e=>t.applyToPoint(e)))}function _t(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function Ht(e,t){return"string"==typeof e?e:t}function Ut(e,t){return"number"==typeof e&&Number.isFinite(e)?e:t}function Wt(e,t){return"boolean"==typeof e?e:t}function qt(e){return _t(e)?e:{}}function Vt(e){return _t(e)?{x:Ut(e.x,Ad.x),y:Ut(e.y,Ad.y),z:Math.min(8,Math.max(.1,Ut(e.z,Ad.z)))}:null}function Gt(e){return Array.from(new Set((e=>Array.isArray(e)?e.filter(e=>"string"==typeof e):[])(e).filter(e=>e.startsWith("shape:"))))}function jt(e,t){if(!_t(e))throw new hc(`Invalid ${t} snapshot: expected object`);const n=e.schemaVersion,i=Ut(n,NaN),s="document"===t?3:1;if(i!==s)throw new hc(`Unsupported ${t} snapshot schema version: expected ${s}, received ${String(n)}`);if(!Array.isArray(e.records))throw new hc(`Invalid ${t} snapshot: records must be an array`);return{schemaVersion:i,records:e.records}}function Qt(e,t,n){const i=e.find(h)??a(),s=e.filter(e=>"page"===e.typeName),o=e.filter(e=>"shape"===e.typeName),r=e.filter(g),c=e.filter(f),l=(s.length>0?[...s].sort((e,t)=>e.index.localeCompare(t.index)):[d()]).map((e,t)=>({...e,index:String(t+1).padStart(4,"0")})),u=l[0]?.id??"page:default",p=new Set(l.map(e=>e.id)),m=[...o].sort((e,t)=>e.index.localeCompare(t.index)||e.id.localeCompare(t.id)),y=new Map(m.map(e=>[e.id,e])),I=new Map,v=new Set,w=m.map((e,n)=>{const i=(e=>{const n=I.get(e.id);if(n)return n;const i=[{stage:"enter",shape:e}];for(;i.length>0;){const e=i[i.length-1];if("waiting-for-parent"===e.stage){I.set(e.shape.id,e.parent.id),v.delete(e.shape.id),i.pop();continue}const n=e.shape;if(I.has(n.id)){i.pop();continue}if(v.add(n.id),n.parentId.startsWith("page:")){I.set(n.id,p.has(n.parentId)?n.parentId:u),v.delete(n.id),i.pop();continue}const s=y.get(n.parentId);s&&!v.has(s.id)&&t.get(s.type).canReceiveChild(s,n)?(i[i.length-1]={stage:"waiting-for-parent",shape:n,parent:s},I.has(s.id)||i.push({stage:"enter",shape:s})):(I.set(n.id,u),v.delete(n.id),i.pop())}return I.get(e.id)??u})(e);return{...e,parentId:i,index:e.index||String(n+1).padStart(6,"0")}});for(const a of w){const e=Le(a,t.get(a.type));if(e)throw new hc(Ye(e))}const b=((e,t,n,i)=>{const s=new Map(e.map(e=>[e.id,e])),o=t.filter(e=>{const t=s.get(e.fromId),n=s.get(e.toId);if(!t||!n)return!1;const o=i.get(e.type);return!!o.getShapeCompanionRootId&&(o.canUseShapeCompanion?.(e,{fromShape:t,toShape:n})??!1)});let r=!0;for(;r;){r=!1;for(const e of[...s.values()]){const t=n.get(e.type),a=t.getMinimumChildCount(e);if(a<=0)continue;const d=[...s.values()].filter(t=>t.parentId===e.id).sort((e,t)=>e.index.localeCompare(t.index)||e.id.localeCompare(t.id)),c=new Set(d.map(e=>e.id));if(new Set(d.map(e=>{const t=S(e.id,o,e=>i.get(e.type));return c.has(t)?t:e.id})).size>=a)continue;if(0===d.length){s.delete(e.id),r=!0;break}const l=[...s.values()].filter(t=>t.parentId===e.parentId).sort((e,t)=>e.index.localeCompare(t.index)||e.id.localeCompare(t.id)).flatMap(t=>t.id===e.id?d.map(e=>e.id):[t.id]),h=new Map(l.map((e,t)=>[e,String(t+1).padStart(6,"0")])),u=t.getLocalTransform(e),p=[];for(const i of d){if(e.parentId.startsWith("shape:")&&!Zt(s,n,e.parentId,i)){p.length=0;break}const t=n.get(i.type),o=ye(u.compose(t.getLocalTransform(i)),t.getLocalBounds(i),{preferredRotation:i.rotation,preferredScaleXSign:i.scaleX,preferredScaleYSign:i.scaleY});if(!o){p.length=0;break}p.push({...i,...o,parentId:e.parentId,index:h.get(i.id)??e.index})}if(p.length===d.length){for(const e of p)s.set(e.id,e);for(const e of l){const t=s.get(e),n=h.get(e);t&&n&&t.index!==n&&s.set(t.id,{...t,index:n})}s.delete(e.id),r=!0;break}}}return e.flatMap(e=>{const t=s.get(e.id);return t?[t]:[]})})(w,r,t,n),P=new Set(b.map(e=>e.id)),x=r.filter(e=>P.has(e.fromId)&&P.has(e.toId));return[i,...l,...c,...b,...x]}function Zt(e,t,n,i){const s=e.get(n);return!!s&&t.get(s.type).canReceiveChild(s,i)}function Jt(e,t,n){const i=n?.source??"system",s=function(e){const t=jt(e,"session").records[0];if(!_t(t))return{schemaVersion:1,records:[c()]};const n=c(),i="string"==typeof t.currentPageId&&t.currentPageId.startsWith("page:")?t.currentPageId:n.currentPageId,s=(e=>{if(!_t(e))return{};const t=Object.entries(e).filter(([e])=>e.startsWith("page:")).map(([e,t])=>[e,Vt(t)]).filter(e=>null!==e[1]);return Object.fromEntries(t)})(t.pageCameraById),o=(e=>{if(!_t(e))return{};const t=Object.entries(e).filter(([e])=>e.startsWith("page:")).map(([e,t])=>[e,Gt(t)]);return Object.fromEntries(t)})(t.pageSelectedShapeIdsById);return{schemaVersion:1,records:[{...n,id:n.id,typeName:"session",scope:"session",currentPageId:i,activeToolId:Ht(t.activeToolId,n.activeToolId),isToolLocked:"boolean"==typeof t.isToolLocked?t.isToolLocked:n.isToolLocked,editingShapeId:null,shapeEditingSession:null,pageCameraById:Object.keys(s).length>0?s:n.pageCameraById,pageSelectedShapeIdsById:Object.keys(o).length>0?o:n.pageSelectedShapeIdsById,meta:qt(t.meta)}]}}(t).records[0]??c(),o=y(e).getAll().filter(m);e.interaction.cancel("restore"),e.editing.end({runEditEnd:!1,source:i}),e.editing.cancelOperation(),tn(e,[...o,s],i),nn(e),((e,t)=>{const{activeToolId:n,isToolLocked:i}=e.state.session.get();e.tools.hasTool(n)?e.tools.syncActiveTool(n,"restore"):(e.tools.syncActiveTool("select","restore"),Fe(e,{activeToolId:"select"},t)),e.tools.syncLockedState(i)})(e,i)}function en(e){nn(e),ne(e).syncCounters()}function tn(e,t,i){const s=y(e);s.applyDiff(((e,t)=>{const i=n(e),s=n(t),o={added:[],updated:[],removed:[]};for(const[n,r]of i){const e=s.get(n);e?e!==r&&o.updated.push({before:r,after:e}):o.removed.push(r)}for(const[n,r]of s)i.has(n)||o.added.push(r);return o})(s.getAll(),t),i)}function nn(e){const t=y(e),n=t.getAll(),i=n.filter(l).sort((e,t)=>e.index.localeCompare(t.index)),s=i[0]?.id??"page:default",o=new Set(i.map(e=>e.id)),r=n.filter(u),a=new Set(r.map(e=>e.id)),d=new Map(r.map(e=>[e.id,e])),h=new Map;for(const c of r)h.set(c.id,se(c,d,o)??s);const g=n.find(e=>e.id===Bd),f=p(g)?g:c(s),m={...f,currentPageId:o.has(f.currentPageId)?f.currentPageId:s,pageCameraById:sn(f.pageCameraById,o),pageSelectedShapeIdsById:on(f.pageSelectedShapeIdsById,o,a,h)};t.put([m],"system")}function sn(e,t){const n={};for(const i of t){const t=e[i]??Ad;n[i]={x:Number.isFinite(t.x)?t.x:Ad.x,y:Number.isFinite(t.y)?t.y:Ad.y,z:Math.min(8,Math.max(.1,Number.isFinite(t.z)?t.z:Ad.z))}}return n}function on(e,t,n,i){const s={};for(const o of t)s[o]=Array.from(new Set((e[o]??[]).filter(e=>n.has(e)&&i.get(e)===o)));return s}function rn(e,t){const n=ye(e.shapes.computeLocalToPageTransform(t),e.shapes.computeLocalBounds(t),{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY});return n?{...t,...n}:null}function an(e,t,n,i){const s=e.shapes.getUtil(t),o={...n,x:i.x??n.x,y:i.y??n.y,rotation:i.rotation??n.rotation,scaleX:i.scaleX??n.scaleX,scaleY:i.scaleY??n.scaleY,props:i.props?s.validateProps({...n.props,...i.props}):n.props},r=t.parentId.startsWith("shape:")?e.shapes.get(t.parentId):null,a=(r?e.shapes.computeLocalToPageTransform(r):$d.Identity()).tryInvert();if(!a)return null;const d=ye(a.compose(s.getLocalTransform(o)),s.getLocalBounds(o),{preferredRotation:t.rotation,preferredScaleXSign:t.scaleX,preferredScaleYSign:t.scaleY});return d?{id:t.id,...d,props:i.props}:null}function dn(e,t){return Z(e.outlineVertices,t.outlineVertices)&&ee(e.pageBounds,t.pageBounds)&&ee(e.frameBounds,t.frameBounds)&&e.rotation===t.rotation&&Q(e.rotationCenter,t.rotationCenter)&&Q(e.selectionAnchorPagePoint,t.selectionAnchorPagePoint)&&e.hasRotation===t.hasRotation&&e.hasCompatibleRotation===t.hasCompatibleRotation}function cn(e){let t=(e=>{let t=e;for(;t<=-Math.PI;)t+=2*Math.PI;for(;t>Math.PI;)t-=2*Math.PI;return t})(e);for(;t<=-Math.PI/2;)t+=Math.PI;for(;t>Math.PI/2;)t-=Math.PI;return Math.abs(t)<uc?0:t}function ln(e,t){const n=e.shapes.computeLocalToPageTransform(t);return Math.atan2(n.b,n.a)}function hn(e,t,n){const i=t.get();if(0===i.length)return{outlineVertices:[],pageBounds:null,frameBounds:null,rotation:0,rotationCenter:null,selectionAnchorPagePoint:null,hasRotation:!1,hasCompatibleRotation:!0};const s=[],o=[],r=[];let a=1/0,d=1/0,c=-1/0,l=-1/0;for(const S of i){const t=e.shapes.getSignal(S).get();if(!t)continue;const i=e.shapes.getUtil(t),h=rn(e,t),u=h?i.getSelectionPagePoints(h):null;if(u&&o.push(...u),!i.contributesToSelectionFrame(t,{editor:e}))continue;r.push(t);const p=n(S);if(!p)continue;const g=i.getSelectionFramePositionedOutlineVertices(t,{editor:e}),f=g?(()=>{const n=e.shapes.computePositionedToPageTransform(t);return g.map(e=>n.applyToPoint(e))})():p.outlineVertices;s.push(...f);for(const e of f)a=Math.min(a,e.x),d=Math.min(d,e.y),c=Math.max(c,e.x),l=Math.max(l,e.y)}const h=Number.isFinite(a)&&Number.isFinite(d)&&Number.isFinite(c)&&Number.isFinite(l)?new Yd(a,d,c-a,l-d):null,u=!(r.length>0)||function(e,t){if(0===t.length)return!0;const n=t[0],i=cn(n?ln(e,n):0);return t.every(t=>((e,t)=>{const n=cn(e)-cn(t),i=Math.PI/2;return Math.abs(n-Math.round(n/i)*i)<uc})(ln(e,t),i))}(e,r),p=((e,t,n)=>{if(0===t.length||!n)return 0;const i=t[0];return cn(i?ln(e,i):0)})(e,r,u),g=((e,t)=>t.some(t=>Math.abs(cn(ln(e,t)))>uc))(e,r),f=h?.center??null,m=0===s.length?null:Math.abs(p)<uc||!f?Yd.FromPoints(s):Yd.FromPoints(s.map(e=>Ld.RotWith(e,f,-p))),y=o.length>0?Yd.FromPoints(o):null;return{outlineVertices:s,pageBounds:h,frameBounds:m,rotation:p,rotationCenter:f,selectionAnchorPagePoint:m&&f?Math.abs(p)<uc?new Ld(m.center.x,m.minY):Ld.RotWith(new Ld(m.center.x,m.minY),f,p):y?new Ld(y.center.x,y.minY):null,hasRotation:g,hasCompatibleRotation:u}}function un(e,t){const n=[],i=new Set;for(const s of t)if(!i.has(s)){i.add(s),n.push(s);for(const t of e.layers.getDescendantIds(s))i.has(t)||(i.add(t),n.push(t))}return n}function pn(e,t){let n=1/0,i=1/0,s=-1/0,o=-1/0;for(const r of t){const t=e.shapes.getPageBounds(r);t&&(n=Math.min(n,t.minX),i=Math.min(i,t.minY),s=Math.max(s,t.maxX),o=Math.max(o,t.maxY))}return Number.isFinite(n)?new Yd(n,i,s-n,o-i):null}function gn(e,t,n){let i=e.shapes.get(t);const s=new Set;for(;i?.parentId.startsWith("shape:");){const t=i.parentId;if(n.has(t))return!0;if(s.has(t))return!1;s.add(t),i=e.shapes.get(t)}return!1}function fn(e,t){return In(e,t)}function mn(e,t){return In(e,t)}function yn(e,t=e.selection.getIds()){const n=Sn(e,t),i=1===n.length;return n.length>0&&n.every(t=>e.shapes.getUtil(t).canParticipateInSelectionFlip(t,{editor:e,isOnlyAffectedShape:i}))}function Sn(e,t=e.selection.getIds()){return un(e,In(e,t)).map(t=>e.shapes.getSignal(t).get()).filter(e=>!!e)}function In(e,t){const n=Array.from(new Set(t)),i=new Set(n);return n.filter(t=>{const n=e.shapes.get(t);return!(!n||e.layers.isOrAncestorLocked(n.id)||e.layers.hasLockedDescendant(n.id)||gn(e,n.id,i))})}function vn(e){return Math.min(8,Math.max(.1,e))}function wn(e,t=e.pages.getCurrentId()){return Pn(e,e.shapes.getForPage(t).map(({id:e})=>e))}function bn(e,t,n){const i=e.state.viewportScreenSize.get();if(i.w<=0||i.h<=0||!x(t))return!1;if(t.w<=0&&t.h<=0)return!1;const s=n?.padding??64,o=Math.max(1,i.w-2*s),r=Math.max(1,i.h-2*s),a=vn(Math.min(t.w>0?o/t.w:1/0,t.h>0?r/t.h:1/0,n?.maxZoom??1)),d=t.center;return e.viewport.setCamera({x:d.x-i.w/2/a,y:d.y-i.h/2/a,z:a},{source:n?.source??"user"}),!0}function Pn(e,t){const n=[];for(const s of t){const t=e.shapes.getPageBounds(s);t&&x(t)&&n.push(new Ld(t.minX,t.minY),new Ld(t.maxX,t.maxY))}if(0===n.length)return null;const i=Yd.FromPoints(n);return x(i)?i:null}function xn(e,t){const n=Cn(e);return n.length>=t&&null!==Tn(e,n[0].shape.parentId)}function Cn(e){const t=e.selection.getIds().map(t=>e.shapes.get(t)).filter(t=>!!t&&!e.layers.isOrAncestorLocked(t.id)),n=t[0]?.parentId;if(!n||t.some(e=>e.parentId!==n))return[];const i=[];for(const s of t){const t=e.shapes.getPageBounds(s.id);t&&x(t)&&i.push({shape:s,bounds:t})}return i}function Tn(e,t){const n=t.startsWith("shape:")?e.shapes.get(t):null;return n?e.shapes.computeLocalToPageTransform(n).tryInvert():$d.Identity()}function Mn(e,t){const n=e.applyToPoint(Ld.Zero());return e.applyToPoint(t).sub(n)}function En(e){return{...e,anchorPagePoint:e.anchorPagePoint.clone(),boundaryPagePoint:e.boundaryPagePoint.clone()}}function kn(e,t){return e.terminal===t.terminal&&Q(e.anchorPagePoint,t.anchorPagePoint)&&Q(e.boundaryPagePoint,t.boundaryPagePoint)&&(e.guidePath??null)===(t.guidePath??null)}function Bn(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],s=t[n];if(!i||!s||!kn(i,s))return!1}return!0}function An(e,t){return kn(e,t)&&e.ownerShapeId===t.ownerShapeId&&(e.targetShapeId??null)===(t.targetShapeId??null)}function Rn(e,t){return 0===t.rotation?e.clone():Ld.RotWith(e,t.rotationCenter,-t.rotation)}function Fn(e,t){return 0===t.rotation?e.clone():Ld.RotWith(e,t.rotationCenter,t.rotation)}function Kn(e,t){return Fn(e,t)}function Dn(e,t,n,i,s){return 0===n?i:i+(e-t)/n*s}function Ln({point:e,fromBounds:t,toBounds:n}){return new Ld(Dn(e.x,t.minX,t.w,n.minX,n.w),Dn(e.y,t.minY,t.h,n.minY,n.h))}function Yn({axis:e,bounds:t,selectionBounds:n}){return"horizontal"===e?new Yd(n.minX+n.maxX-t.maxX,t.minY,t.w,t.h):new Yd(t.minX,n.minY+n.maxY-t.maxY,t.w,t.h)}function Xn(e,t){if(!Number.isFinite(e)||!Number.isFinite(t))return null;const n=Math.PI/2,i=Math.round((e-t)/n);return Math.abs(e-t-i*n)>=.001?null:Math.abs(i)%2==0?"parallel":"perpendicular"}function On(e,t,n){return t.every(t=>{const i=e.shapes.computeLocalToPageTransform(t);return null!==Xn(Math.atan2(i.b,i.a),n)})}function zn(e,t,n,i){const s=1===t.length,o=(r=t.map(t=>e.shapes.getUtil(t).getAllowedSelectionResizeModes(t,{editor:e,handleId:n,isOnlyResizeTarget:s})),gc.filter(e=>r.every(t=>t.includes(e))));var r;return i?o:o.filter(e=>"free"!==e)}function Nn(e,t){return e===t||(e&&t?e.localPath===t.localPath&&((e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]))(e.localDecorationPaths,t.localDecorationPaths)&&ee(e.localBounds,t.localBounds)&&((e,t)=>e.a===t.a&&e.b===t.b&&e.c===t.c&&e.d===t.d&&e.e===t.e&&e.f===t.f)(e.localToPage,t.localToPage)&&e.strokeWidth===t.strokeWidth&&e.strokeDasharray===t.strokeDasharray:e===t)}function $n(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],s=t[n];if(!i||!s)return!1;if(!(i.id===s.id&&i.usesSelectionPathOverlay===s.usesSelectionPathOverlay&&Q(i.startPagePoint,s.startPagePoint)&&Q(i.endPagePoint,s.endPagePoint)&&Q(i.middlePagePoint,s.middlePagePoint)&&Nn(i.pathStyle,s.pathStyle)&&Bn(i.bindingSegments,s.bindingSegments)&&i.path===s.path&&i.pageClipPath===s.pageClipPath))return!1}return!0}function _n(e,t){return e===t||(e&&t?ee(e.bounds,t.bounds)&&e.rotation===t.rotation&&Q(e.rotationCenter,t.rotationCenter):e===t)}function Hn(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(!_n(e[n]??null,t[n]??null))return!1;return!0}function Un(e,t){return e.strokeWidth===t.strokeWidth&&e.cornerRadius===t.cornerRadius}function Wn(e,t){return e.id===t.id&&Q(e.point,t.point)&&ee(e.bounds,t.bounds)}function qn(e,t){return e.id===t.id&&Q(e.point,t.point)&&ee(e.bounds,t.bounds)}function Vn(e,t){return e.terminal===t.terminal&&Q(e.point,t.point)&&ee(e.bounds,t.bounds)}function Gn(e,t){return Q(e.point,t.point)&&ee(e.bounds,t.bounds)}function jn(e,t){return e.type===t.type&&e.id===t.id&&e.cursor===t.cursor&&Q(e.point,t.point)&&ee(e.bounds,t.bounds)}function Qn(e,t){return e.id===t.id&&Q(e.point,t.point)}function Zn(e,t){return e.id===t.id&&Q(e.point,t.point)}function Jn(e,t){return e.terminal===t.terminal&&Q(e.point,t.point)}function ei(e,t){return Q(e.point,t.point)}function ti(e,t){return e.type===t.type&&e.id===t.id&&e.cursor===t.cursor&&Q(e.point,t.point)}function ni(e,t){return e===t||(e&&t?e.strokeWidth===t.strokeWidth&&G(e.resizeHandles,t.resizeHandles,Wn)&&G(e.rotateHandles,t.rotateHandles,qn)&&G(e.terminalHandles,t.terminalHandles,Vn)&&G(e.middleHandles,t.middleHandles,Gn)&&G(e.customHandles,t.customHandles,jn):e===t)}function ii(e,t){return e===t||(e&&t?G(e.resizeHandleAnchors,t.resizeHandleAnchors,Qn)&&G(e.rotateHandleAnchors,t.rotateHandleAnchors,Zn)&&G(e.terminalHandleAnchors,t.terminalHandleAnchors,Jn)&&G(e.middleHandleAnchors,t.middleHandleAnchors,ei)&&G(e.customHandleAnchors,t.customHandleAnchors,ti):e===t)}function si({bounds:e,rotateOffset:t,referenceRotation:n,frameRotation:i}){return((e,t)=>{const n=Math.round((e-t)/Math.PI);return 1===Math.abs(n%2)})(n,i)?new Ld(e.maxX+t,e.minY-t):new Ld(e.minX-t,e.maxY+t)}function oi(e){return 1===e.length&&!!e[0]?.usesSelectionPathOverlay}function ri(e,t,n,i){const s=e.shapes.get(n);if(!s)return null;const o=t.getCachedShapeGeometry(n),r=t.getCachedShapeGeometry(i);if(!o||!r)return null;const a=e.shapes.getUtil(s).getLocalBounds(s),d=t.getShapeLocalToPageTransformSignal(n).get()?.tryInvert();return d&&r.outlineVertices.length>0&&r.outlineVertices.every(e=>a.containsPoint(d.applyToPoint(e)))?"inside":o.bounds.intersects(r.bounds)?"intersecting":"outside"}function ai({editor:e,shapeTree:t,geometry:n,shapeIds:i,point:s}){const o=Array.from(new Set(i));if(0===o.length)return null;const r=o.map(t=>e.shapes.get(t)).filter(e=>!!e);if(r.length!==o.length)return null;const a=t.getPageIdForShape(r[0].id);if(!a)return null;if(r.some(e=>t.getPageIdForShape(e.id)!==a))return null;const d=new Set;for(const p of r){d.add(p.id);for(const e of t.getDescendantShapeIds(p.id))d.add(e)}let c=null,l=1/0,h=-1;const u=t.getShapeIdsForPage(a);for(let p=0;p<u.length;p+=1){const t=u[p];if(d.has(t))continue;const i=e.shapes.get(t);if(!i||e.shapes.isHidden(i.id)||e.layers.isOrAncestorLocked(i.id))continue;const o=e.shapes.getUtil(i);if(!ci(i,o))continue;if(!r.every(t=>e.layers.canReceiveChild(i.id,t.id)))continue;if(s){if(!e.shapes.isPagePointInClip(i.id,s))continue;const t=o.getLocalBounds(i),r=n.getShapeLocalToPageTransformSignal(i.id).get()?.tryInvert();if(!r||!t.containsPoint(r.applyToPoint(s)))continue}else if(!r.every(t=>"inside"===ri(e,n,i.id,t.id)))continue;const a=n.getShapePageBounds(i.id);a&&di(a,p,c,l,h)&&(c=i,l=a.w*a.h,h=p)}return c?.id??a}function di(e,t,n,i,s){const o=e.w*e.h;return!n||o<i||o===i&&t>s}function ci(e,t){return t.canAutomaticallyReceiveChildren(e)}function li(e,t,n=new Set([t.id])){if(!t.parentId.startsWith("shape:"))return $d.Identity();const i=e.shapes.get(t.parentId);if(!i||n.has(i.id))return $d.Identity();const s=new Set(n);return s.add(i.id),Se(i,e.shapes.getUtil(i),li(e,i,s))}function hi(e,t){return xe(t,e.shapes.getUtil(t),li(e,t))}function ui(e){const t=e.selection.getFrameBounds(),n=e.selection.getRotationCenter();return t&&n?{bounds:t,rotation:e.selection.getRotation(),rotationCenter:n,hasCompatibleRotation:e.selection.hasCompatibleRotation()}:null}function pi(e,t){const n=ui(e);return n?Rn(t,n):null}function gi(e){return fi(e,e.selection.getIds())}function fi(e,t){const n=Array.from(new Set(t.map(t=>e.bindings.getShapeCompanionRootId(t)))),i=n.map(t=>e.shapes.get(t)).filter(e=>!!e);if(i.length!==n.length)return null;const s=new Set(n),o=i.filter(t=>!gn(e,t.id,s));if(o.length<2)return null;if(o.some(t=>e.layers.isOrAncestorLocked(t.id)||e.layers.hasLockedDescendant(t.id)||e.shapes.isHidden(t.id)))return null;const r=o[0]?.parentId;if(!r)return null;if(o.some(e=>e.parentId!==r))return null;const a=e.layers.getChildren(r),d=new Set(o.map(e=>e.id)),c=a.filter(e=>d.has(e.id)).map(e=>e.id);if(c.length!==o.length)return null;const l=r.startsWith("shape:")?e.shapes.get(r):null,h=l?e.shapes.computeLocalToPageTransform(l).tryInvert():null;if(l&&!h)return null;const u=c.flatMap(t=>e.shapes.getPageOutlineVertices(t).map(e=>h?h.applyToPoint(e):e)),p=u.length>0?Yd.FromPoints(u):null;if(!p||!x(p))return null;const g={parentId:r,shapeIds:c,parentLocalBounds:p};return mi(e,g)?g:null}function mi(e,t){let n=null;for(const i of e.shapeUtils.values()){const e=i.getGroupingShapeCreateInput({parentId:t.parentId,parentLocalBounds:t.parentLocalBounds});if(e){if(e.type!==i.type)throw new Error(`Shape util "${i.type}" created grouping type "${e.type}" instead of its registered type`);if(e.parentId!==t.parentId)throw new Error(`Shape util "${i.type}" must preserve the requested grouping parent`);if(n)throw new Error(`Multiple shape utils define grouping creation: "${n.shapeUtilType}" and "${i.type}"`);n={shapeInput:e,shapeUtilType:i.type}}}return n?.shapeInput??null}function yi(e,t,n="user"){const i=fi(e,t);return i?((e,t,n)=>{const i=mi(e,t);if(!i)return null;const s=e.layers.getChildren(t.parentId),o=new Set(t.shapeIds);let r;for(const c of s)o.has(c.id)&&(r=c);if(!r)return null;e.interaction.cancelForCommand();let a=null;try{y(e).atomic(()=>{const[d]=e.commands.createShapes([i],{source:n,deferMinimumChildRepair:!0});if(!d)throw new yc;if(a=d.id,!e.commands.reparentShapes({ids:t.shapeIds,parentId:d.id},{source:n}))throw new yc;const c=[];for(const e of s)o.has(e.id)?e.id===r.id&&c.push(d.id):c.push(e.id);e.commands.updateShapes([...c.map((t,n)=>({id:t,index:ne(e).createShapeIndex(n+1)})),...t.shapeIds.map((t,n)=>({id:t,index:ne(e).createShapeIndex(n+1)}))],{source:n})},n)}catch(d){if(d instanceof yc)return null;throw d}return a?e.shapes.get(a)??null:null})(e,i,n):null}function Si(e){return Ii(e,e.selection.getIds())}function Ii(e,t){return t.map(t=>e.shapes.get(t)).filter(e=>!!e).filter(t=>e.shapes.getUtil(t).canUngroupChildren(t)).filter(t=>!e.layers.isOrAncestorLocked(t.id)&&!e.layers.hasLockedDescendant(t.id)&&!e.shapes.isHidden(t.id)&&e.layers.getChildIds(t.id).length>0&&e.layers.getChildren(t.id).every(n=>e.layers.canReceiveChild(t.parentId,n.id)&&!!Xe(e,n,t.parentId))).map(e=>e.id)}function vi(e,t,n="user"){const i=Array.from(new Set(t)),s=new Set(((e,t)=>{const n=Ii(e,t),i=new Set(n);return n.filter(t=>!gn(e,t,i))})(e,i));if(0===s.size)return[];const o=i.map(t=>e.shapes.get(t)).filter(e=>!!e),r=o.filter(e=>s.has(e.id)).map(t=>({group:t,children:e.layers.getChildren(t.id)}));if(r.some(t=>t.children.some(n=>!Xe(e,n,t.group.parentId))))return[];const a=new Map(r.map(e=>[e.group.id,e])),d=new Set(r.map(e=>e.group.parentId)),c=new Map;for(const p of d){const t=[];for(const n of e.layers.getChildren(p)){const e=a.get(n.id);e?t.push(...e.children.map(e=>e.id)):t.push(n.id)}c.set(p,t)}e.interaction.cancelForCommand();const l=[],h=new Set;try{y(e).atomic(()=>{const t=[];for(const i of o){if(!s.has(i.id)){h.has(i.id)||(h.add(i.id),l.push(i.id));continue}const t=a.get(i.id);if(!t)continue;if(!e.commands.reparentShapes({ids:t.children.map(e=>e.id),parentId:t.group.parentId},{source:n}))throw new yc;const o=new Set(t.children.map(e=>e.id));for(const n of t.children){const t=e.bindings.getShapeCompanionRootId(n.id),i=o.has(t)?t:n.id;h.has(i)||(h.add(i),l.push(i))}}for(const n of c.values())t.push(...n.map((t,n)=>({id:t,index:ne(e).createShapeIndex(n+1)})));t.length>0&&e.commands.updateShapes(t,{source:n}),((e,t,n)=>{if(0===t.length)return;const i=Array.from(new Set(t)).filter(t=>e.shapes.get(t));0!==i.length&&Oe(e,i,{source:n})})(e,r.map(e=>e.group.id),n)},n)}catch(u){if(u instanceof yc)return[];throw u}return l.length>0&&e.commands.setSelectedShapeIds(l,{source:n}),l}function wi(e){const t=e.state.selectedShapes.get();if(0===t.length)return null;if(t.some(e=>e.isLocked))return null;const n=t[0]?.parentId;if(!n)return null;if(t.some(e=>e.parentId!==n))return null;const i=e.layers.getChildren(n),s=new Set(t.map(e=>e.id)),o=i.map((e,t)=>s.has(e.id)?t:-1).filter(e=>e>=0);return o.length!==t.length?null:{parentId:n,selectedCount:t.length,count:i.length,canMoveBackward:o.some(e=>e>0&&!s.has(i[e-1].id)),canMoveForward:o.some(e=>e<i.length-1&&!s.has(i[e+1].id))}}function bi(e){const t=e.state.selectedShapes.get();if(1!==t.length)return null;const[n]=t;if(!n||n.isLocked)return null;const i=e.layers.getChildren(n.parentId),s=i.findIndex(e=>e.id===n.id);return s<0?null:{parentId:n.parentId,index:s,count:i.length,canMoveBackward:s>0,canMoveForward:s<i.length-1}}function Pi(e,t){const n=t.map(t=>e.shapes.get(t)).filter(e=>!!e);if(0===n.length)return null;if(n.some(t=>t.isLocked||e.shapes.isHidden(t.id)))return null;const i=n[0]?.parentId;if(!i)return null;if(n.some(e=>e.parentId!==i))return null;const s=e.layers.getChildren(i),o=new Set(n.map(e=>e.id)),r=s.map((e,t)=>o.has(e.id)?t:-1).filter(e=>e>=0);return r.length!==n.length?null:{parentId:i,selectedCount:n.length,count:s.length,canMoveBackward:r.some(e=>e>0&&!o.has(s[e-1].id)),canMoveForward:r.some(e=>e<s.length-1&&!o.has(s[e+1].id))}}function xi(e,t,n,i="user"){const s=Pi(e,t);if(!s)return!1;const o=e.layers.getChildren(s.parentId),r=new Set(t),a=[...o];let d=!1;if("backward"===n)for(let c=1;c<a.length;c+=1){const e=a[c],t=a[c-1];e&&t&&r.has(e.id)&&!r.has(t.id)&&(a[c-1]=e,a[c]=t,d=!0)}else for(let c=a.length-2;c>=0;c-=1){const e=a[c],t=a[c+1];e&&t&&r.has(e.id)&&!r.has(t.id)&&(a[c]=t,a[c+1]=e,d=!0)}return!!d&&(e.interaction.cancelForCommand(),e.commands.updateShapes(a.map((t,n)=>({id:t.id,index:ne(e).createShapeIndex(n+1)})),{source:i}),!0)}function Ci(e,t,n,i="user"){const s=Pi(e,t);if(!s)return!1;const o=e.layers.getChildren(s.parentId),r=new Set(t),a=[],d=[];for(const l of o)r.has(l.id)?a.push(l):d.push(l);if(a.length!==r.size)return!1;if(!("back"===n?s.canMoveBackward:s.canMoveForward))return!1;const c="back"===n?[...a,...d]:[...d,...a];return e.interaction.cancelForCommand(),e.commands.updateShapes(c.map((t,n)=>({id:t.id,index:ne(e).createShapeIndex(n+1)})),{source:i}),!0}function Ti(e,t,n){const i=new Set([t]);let s=n(t);if(!s)return null;for(;s;){if(s.isHidden)return!1;if(!s.parentId.startsWith("shape:"))return!0;const t=s.parentId;if(i.has(t))return!0;i.add(t);const o=n(t);if(!o)return!0;if(!e.shapes.getUtil(o).isChildVisible(o,s,{editor:e}))return!1;s=o}return!0}function Mi(e){return"top_left"===e||"left"===e||"bottom_left"===e}function Ei(e){return"top_right"===e||"right"===e||"bottom_right"===e}function ki(e){return"top_left"===e||"top"===e||"top_right"===e}function Bi(e){return"bottom_left"===e||"bottom"===e||"bottom_right"===e}function Ai({handleId:e,scaleX:t,scaleY:n}){const i=Mi(e)?t<0?"right":"left":Ei(e)?t<0?"left":"right":null,s=ki(e)?n<0?"bottom":"top":Bi(e)?n<0?"top":"bottom":null;return"top"===s&&"left"===i?"top_left":"top"===s&&"right"===i?"top_right":"bottom"===s&&"right"===i?"bottom_right":"bottom"===s&&"left"===i?"bottom_left":s||i||e}function Ri({axis:e,startBounds:t,bounds:n,handleId:i,scale:s,isResizingFromCenter:o}){const r=Math.sign(s??1)||1;return o?r:"x"===e?Mi(i)?n.minX>=t.maxX?-1:1:Ei(i)?n.maxX<=t.minX?-1:1:r:ki(i)?n.minY>=t.maxY?-1:1:Bi(i)?n.maxY<=t.minY?-1:1:r}function Fi({bounds:e,startBounds:t,handleId:n,aspectRatio:i,isResizingFromCenter:s,scaleX:o,scaleY:r}){if(i<=0)return{bounds:e,scaleX:o??e.w/Math.max(1,t.w),scaleY:r??e.h/Math.max(1,t.h)};let a=e.w,d=e.h;const c=Math.sign(o??1)||1,l=Math.sign(r??1)||1;switch(n){case"left":case"right":d=a/i;break;case"top":case"bottom":a=d*i;break;default:{const e=a/Math.max(1,t.w),n=d/Math.max(1,t.h);Math.abs(e)>Math.abs(n)?d=a/i:a=d*i;break}}if(s){const e=t.center;return{bounds:new Yd(e.x-a/2,e.y-d/2,a,d),scaleX:c*(a/Math.max(1,t.w)),scaleY:l*(d/Math.max(1,t.h))}}let h;switch(n){case"top_left":h=new Yd(c<0?e.minX:e.maxX-a,l<0?e.minY:e.maxY-d,a,d);break;case"top_right":h=new Yd(c<0?e.maxX-a:e.minX,l<0?e.minY:e.maxY-d,a,d);break;case"bottom_right":h=new Yd(c<0?e.maxX-a:e.minX,l<0?e.maxY-d:e.minY,a,d);break;case"bottom_left":h=new Yd(c<0?e.minX:e.maxX-a,l<0?e.maxY-d:e.minY,a,d);break;case"top":h=new Yd(t.center.x-a/2,l<0?t.maxY:t.maxY-d,a,d);break;case"right":h=new Yd(c<0?t.minX-a:t.minX,t.center.y-d/2,a,d);break;case"bottom":h=new Yd(t.center.x-a/2,l<0?t.minY-d:t.minY,a,d);break;case"left":h=new Yd(c<0?t.maxX:t.maxX-a,t.center.y-d/2,a,d)}return{bounds:h,scaleX:c*(a/Math.max(1,t.w)),scaleY:l*(d/Math.max(1,t.h))}}function Ki(e){return[new Ld(e.minX,e.minY),new Ld(e.center.x,e.minY),new Ld(e.maxX,e.minY),new Ld(e.minX,e.center.y),e.center,new Ld(e.maxX,e.center.y),new Ld(e.minX,e.maxY),new Ld(e.center.x,e.maxY),new Ld(e.maxX,e.maxY)]}function Di(e,t){return"x"===t?e.x:e.y}function Li(e,t){return"x"===t?e.minX:e.minY}function Yi(e,t){return"x"===t?e.maxX:e.maxY}function Xi(e,t){return"x"===t?[e.minY,e.maxY]:[e.minX,e.maxX]}function Oi(e,t){const n=Math.max(e[0],t[0]),i=Math.min(e[1],t[1]);return n<=i?[n,i]:null}function zi(e,t){return null!==Oi(e,t)}function Ni(e,t){return new Yd(e.x+t.x,e.y+t.y,e.w,e.h)}function $i(e,t,n){return Ni(e,((e,t)=>"x"===e?new Ld(t,0):new Ld(0,t))(t,n))}function _i(e){return[new Ld(e.minX,e.minY),new Ld(e.maxX,e.minY),new Ld(e.maxX,e.maxY),new Ld(e.minX,e.maxY)]}function Hi(e,t,n){const i=n.sub(t),s=i.len2();if(s<=1e-8)return e.dist2(t);const o=Math.max(0,Math.min(1,((e.x-t.x)*i.x+(e.y-t.y)*i.y)/s));return e.dist2(new Ld(t.x+i.x*o,t.y+i.y*o))}function Ui(e,t,n){const i=n.sub(t),s=i.len2();if(s<=1e-8)return t.clone();const o=Math.max(0,Math.min(1,((e.x-t.x)*i.x+(e.y-t.y)*i.y)/s));return new Ld(t.x+i.x*o,t.y+i.y*o)}function Wi(e,t){if(0===t.length)return null;if(1===t.length){const n=t[0].clone();return{point:n,distanceSquared:e.dist2(n)}}let n=null,i=Number.POSITIVE_INFINITY;const s=2===t.length?1:t.length;for(let o=0;o<s;o+=1){const s=t[o],r=t[(o+1)%t.length];if(!s||!r)continue;const a=Hi(e,s,r);a>=i||(i=a,n=Ui(e,s,r))}return n?{point:n,distanceSquared:i}:null}function qi(e){const t=[],n=new Set;for(const i of e){const e=`${i.x.toFixed(8)}:${i.y.toFixed(8)}`;n.has(e)||(n.add(e),t.push(i))}return t}function Vi(e,t){const n="x"===t?"horizontal":"vertical",i=[...e].sort((e,n)=>Li(e.bounds,t)-Li(n.bounds,t)),s=[];for(let o=0;o<i.length;o+=1){const e=i[o];if(!e)continue;let r=Number.POSITIVE_INFINITY;for(let a=o+1;a<i.length;a+=1){const o=i[a];if(!o)continue;const d=Yi(e.bounds,t),c=Li(o.bounds,t);if(c>r+1e-8)break;if(d>=c)continue;const l=Oi(Xi(e.bounds,t),Xi(o.bounds,t));l&&(r=c,s.push({direction:n,startNode:e,endNode:o,length:c-d,breadthIntersection:l}))}}return s}function Gi(e,t,n,i){const s=Oi(Xi(t.bounds,i),Xi(n.bounds,i));return s?{direction:e,startNode:t,endNode:n,length:Li(n.bounds,i)-Yi(t.bounds,i),breadthIntersection:s}:null}function ji(e,t){return[e,t.direction,t.startNode.id,t.endNode.id,t.length.toFixed(8)].join(":")}function Qi(e,t,n,i,s={}){const o=Xi(t,e),r=((e,t)=>"x"===t?e.w:e.h)(t,e),a=s.releaseThreshold??i,d=s.switchDistance??0;let c=i+1,l=null,h=null;const u=(e,t,n)=>{const o=Math.abs(e);0!==t.length&&(o<=i&&o<c-1e-8&&(c=o,l={type:"gaps",id:n,nudge:e,distance:o,gaps:t}),s.previousSnapId===n&&o<=a&&(!h||o<h.distance-1e-8)&&(h={type:"gaps",id:n,nudge:e,distance:o,gaps:t}))},p=n=>({id:"selection",bounds:$i(t,e,n)});for(const g of n){if(r<=g.length&&zi(o,g.breadthIntersection)){const n=Yi(g.startNode.bounds,e)+(g.length-r)/2-Li(t,e),i=p(n);u(n,[Gi(g.direction,g.startNode,i,e),Gi(g.direction,i,g.endNode,e)].filter(e=>null!==e),`${ji(e,g)}:center`)}const n=Yi(g.endNode.bounds,e)+g.length-Li(t,e),i=p(n);if(zi(Xi(i.bounds,e),g.breadthIntersection)){const t=Gi(g.direction,g.endNode,i,e);u(n,t?[g,t]:[],`${ji(e,g)}:after`)}const s=Li(g.startNode.bounds,e)-g.length-Yi(t,e),a=p(s);if(zi(Xi(a.bounds,e),g.breadthIntersection)){const t=Gi(g.direction,a,g.startNode,e);u(s,t?[t,g]:[],`${ji(e,g)}:before`)}}return h&&(!l||l.distance+d>=h.distance)?h:l}function Zi(e){const t=e.map(e=>({value:e.point.x,point:e})),n=e.map(e=>({value:e.point.y,point:e}));return t.sort(Ji),n.sort(Ji),{x:t,y:n}}function Ji(e,t){return e.value-t.value||e.point.id.localeCompare(t.point.id)}function es(e,t,n,i){const s=((e,t)=>"x"===t?e.x:e.y)(e,t),o=[];for(let r=((e,t)=>{let n=0,i=e.length;for(;n<i;){const s=Math.floor((n+i)/2),o=e[s];o&&o.value<t?n=s+1:i=s}return n})(s,n);r<s.length;r+=1){const e=s[r];if(!e||e.value>i)break;o.push(e.point)}return o}function ts(e){return e.weight??(e.kind?vc[e.kind]:0)}function ns(e,t){return`points:${e}:${[...t].sort().join("|")}`}function is(e,t,n){if(!t)return!0;const i=(e=>Math.min(.2*e,1.5))(n);return e.distance<t.distance-1e-8?!(t.weight>e.weight+1e-8&&t.distance-e.distance<=i):e.distance<=t.distance+i&&e.weight>t.weight+1e-8}function ss(e,t,n,i,s={}){const o=s.releaseThreshold??i,r=Math.max(i,o),a=s.switchDistance??0;let d=null,c=null;for(const g of t){const t=Di(g,e),a=es(n,e,t-r,t+r);s.stats&&(s.stats.candidatePointCount+=a.length);for(const n of a){const r=Di(n.point,e)-t,a=Math.abs(r),l={offset:r,distance:a,weight:ts(n),fromPrevious:!1};if(a<=i&&is(l,d,i)&&(d=l),s.previousCandidatePointIds?.has(n.id)&&a<=o){const e={...l,fromPrevious:!0};is(e,c,o)&&(c=e)}}}const l=c&&(!d||d.distance+a>=c.distance)?c:d;if(!l)return null;const h=l.fromPrevious&&l.distance>i?o:i,u=[];for(const[g,f]of t.entries()){const t=Di(f,e),i=es(n,e,t-h,t+h);for(const n of i){const i=Di(n.point,e)-t;Math.abs(i)>h||Math.abs(i-l.offset)>1e-8||u.push({selectionPoint:f,selectionPointKind:s.selectionPointKinds?.[g],candidatePoint:n.point,candidatePointKind:n.kind,candidatePointId:n.id,candidateNodeId:n.nodeId})}}s.stats&&(s.stats.matchedPointCount+=u.length);const p=Array.from(new Set(u.map(e=>e.candidatePointId)));return u.length>0?{type:"points",id:ns(e,p),nudge:l.offset,distance:l.distance,weight:l.weight,candidatePointIds:p,pairs:u}:null}function os(e,t){const n=[];switch(e){case"top":case"left":case"top_left":case"any":n.push(new Ld(t.minX,t.minY))}switch(e){case"top":case"right":case"top_right":case"any":n.push(new Ld(t.maxX,t.minY))}switch(e){case"bottom":case"right":case"bottom_right":case"any":n.push(new Ld(t.maxX,t.maxY))}switch(e){case"bottom":case"left":case"bottom_left":case"any":n.push(new Ld(t.minX,t.maxY))}return n}function rs(e,t,n={}){if(!e)return t;if(!t)return e;const i=n.switchDistance??0;return"points"===n.previousSnap?.type&&n.previousSnap.id===e.id?Math.abs(t.nudge)+i<Math.abs(e.nudge)?t:e:"gaps"===n.previousSnap?.type&&n.previousSnap.id===t.id?Math.abs(e.nudge)+i<Math.abs(t.nudge)?e:t:Math.abs(e.nudge)<=Math.abs(t.nudge)?e:t}function as(e,t){return e===t||e.length===t.length&&e.every((e,n)=>{const i=t[n];return!(!i||e.type!==i.type)&&("points"===e.type&&"points"===i.type?((e,t)=>e.id===t.id&&e.axis===t.axis&&e.rotation===t.rotation&&Q(e.rotationCenter,t.rotationCenter)&&Q(e.line[0],t.line[0])&&Q(e.line[1],t.line[1])&&e.points.length===t.points.length&&e.points.every((e,n)=>{const i=t.points[n];return!!i&&Q(e,i)}))(e,i):"gaps"===e.type&&"gaps"===i.type&&function(e,t){return e.id===t.id&&e.direction===t.direction&&e.rotation===t.rotation&&Q(e.rotationCenter,t.rotationCenter)&&e.gaps.length===t.gaps.length&&e.gaps.every((e,n)=>{const i=t.gaps[n];return!!i&&((e,t)=>Q(e.startEdge[0],t.startEdge[0])&&Q(e.startEdge[1],t.startEdge[1])&&Q(e.endEdge[0],t.endEdge[0])&&Q(e.endEdge[1],t.endEdge[1]))(e,i)})}(e,i))})}function ds(e){return"horizontal"===e.direction?{startEdge:[new Ld(e.startNode.bounds.maxX,e.startNode.bounds.minY),new Ld(e.startNode.bounds.maxX,e.startNode.bounds.maxY)],endEdge:[new Ld(e.endNode.bounds.minX,e.endNode.bounds.minY),new Ld(e.endNode.bounds.minX,e.endNode.bounds.maxY)]}:{startEdge:[new Ld(e.startNode.bounds.minX,e.startNode.bounds.maxY),new Ld(e.startNode.bounds.maxX,e.startNode.bounds.maxY)],endEdge:[new Ld(e.endNode.bounds.minX,e.endNode.bounds.minY),new Ld(e.endNode.bounds.maxX,e.endNode.bounds.minY)]}}function cs(e,t,n,i){const s=t.pairs.some(({candidatePointKind:e,selectionPointKind:t})=>"center"===e&&"center"===t),o=qi([...t.pairs.map(({selectionPoint:e})=>e.add(n)),...t.pairs.map(({candidatePoint:e})=>e.clone())]),r=qi([...t.pairs.filter(({selectionPointKind:e})=>"center"===e).map(({selectionPoint:e})=>e.add(n)),...t.pairs.filter(({candidatePointKind:e})=>"center"===e).map(({candidatePoint:e})=>e.clone())]),a=s?r:o,d=s?r:qi([...t.pairs.filter(({selectionPointKind:e})=>"center"!==e&&"edge_midpoint"!==e).map(({selectionPoint:e})=>e.add(n)),...t.pairs.filter(({candidatePointKind:e})=>"center"!==e&&"edge_midpoint"!==e).map(({candidatePoint:e})=>e.clone())]),c=ps(e,a);return{id:gs(e,c,d),type:"points",axis:e,line:c,points:d,rotation:i.rotation,rotationCenter:i.rotationCenter.clone()}}function ls(e,t,n,i){return hs(e,t,n).map(t=>cs(e,t,n,i))}function hs(e,t,n){const i=new Map;for(const s of t.pairs){const t=Di(s.selectionPoint.add(n),e).toFixed(8),o=i.get(t);o?o.push(s):i.set(t,[s])}return Array.from(i.values()).map(e=>({type:"points",id:t.id,nudge:t.nudge,distance:t.distance,weight:t.weight,candidatePointIds:Array.from(new Set(e.map(e=>e.candidatePointId))),pairs:e}))}function us(e,t,n){return"x"===e?[new Ld(t,n.minY),new Ld(t,n.maxY)]:[new Ld(n.minX,t),new Ld(n.maxX,t)]}function ps(e,t){if(0===t.length)return[Ld.Zero(),Ld.Zero()];let n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,s=Number.POSITIVE_INFINITY,o=Number.NEGATIVE_INFINITY;for(const r of t)n=Math.min(n,r.x),i=Math.max(i,r.x),s=Math.min(s,r.y),o=Math.max(o,r.y);return"x"===e?[new Ld(n,s),new Ld(n,o)]:[new Ld(n,s),new Ld(i,s)]}function gs(e,t,n){return`points:${e}:line:${t.map(e=>`${e.x.toFixed(4)},${e.y.toFixed(4)}`).join("|")}:points:${n.map(e=>`${e.x.toFixed(4)},${e.y.toFixed(4)}`).join("|")}`}function fs(e,t,n,i,s,o){return hs(e,t,n).map(t=>((e,t,n,i,s,o)=>{const r=cs(e,t,n,i),a=t.pairs[0],d=Di(a?.selectionPoint.add(n)??s.center,e),c=new Map(o.map(e=>[e.id,e.bounds])),l=[],h=new Set;for(const g of t.pairs){if(h.has(g.candidateNodeId))continue;h.add(g.candidateNodeId);const t=c.get(g.candidateNodeId);t&&l.push(...us(e,d,t))}const u=qi([...r.points,...us(e,d,s),...l]),p=ps(e,qi([...us(e,d,s),...l]));return{...r,id:gs(e,p,u),line:p,points:u}})(e,t,n,i,s,o))}function ms(e,t,n){const i="x"===e?new Ld(n.x,t.y):new Ld(t.x,n.y),s=qi([n.clone(),i]),o=ps(e,s);return{id:gs(e,o,s),type:"points",axis:e,line:o,points:s,rotation:0,rotationCenter:Ld.Zero()}}function ys(e,t,n){const i="horizontal"===e.gaps[0]?.direction?new Ld(0,n.y):new Ld(n.x,0),s=e.gaps.map(e=>({...e,startNode:"selection"===e.startNode.id?{...e.startNode,bounds:Ni(e.startNode.bounds,i)}:e.startNode,endNode:"selection"===e.endNode.id?{...e.endNode,bounds:Ni(e.endNode.bounds,i)}:e.endNode}));return{id:`gaps:${s.map(e=>`${e.startNode.id}:${e.endNode.id}:${e.length.toFixed(4)}`).join("|")}`,type:"gaps",direction:s[0]?.direction??"horizontal",gaps:s.map(ds),rotation:t.rotation,rotationCenter:t.rotationCenter.clone()}}function Ss(e){return"points"===e.type?{...e,line:[e.line[0].clone(),e.line[1].clone()],points:e.points.map(e=>e.clone()),rotationCenter:e.rotationCenter.clone()}:{...e,gaps:e.gaps.map(e=>({startEdge:[e.startEdge[0].clone(),e.startEdge[1].clone()],endEdge:[e.endEdge[0].clone(),e.endEdge[1].clone()]})),rotationCenter:e.rotationCenter.clone()}}function Is(e){return{point:e.point,kind:e.kind??"custom",weight:e.weight}}function vs(e){const t=e.sourcePointOffsets;return t&&t.length>0?t.map(t=>e.pagePoint.add(t)):[e.pagePoint]}function ws(e,t){return e.count===t.count&&e.singleShapeType===t.singleShapeType&&e.commonShapeType===t.commonShapeType&&e.canFlipSelection===t.canFlipSelection&&e.hasPointHandleSelection===t.hasPointHandleSelection&&e.hasFrameSelection===t.hasFrameSelection&&e.isMixedFrameAndPointHandleSelection===t.isMixedFrameAndPointHandleSelection&&e.canDragPointHandles===t.canDragPointHandles&&e.hasSelectionRotation===t.hasSelectionRotation&&e.hasMixedSelectionRotation===t.hasMixedSelectionRotation&&e.canResetSelectionRotation===t.canResetSelectionRotation}function bs(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],s=t[n];if(!i||!s||i.id!==s.id||i.shape!==s.shape||i.isSelected!==s.isSelected||i.bounds.x!==s.bounds.x||i.bounds.y!==s.bounds.y||i.bounds.w!==s.bounds.w||i.bounds.h!==s.bounds.h)return!1}return!0}function Ps(e,t,n){return e+(t-e)*n}function xs(e,t,n){return Math.min(n,Math.max(t,e))}function Cs(e,t=0){if(0===e.length)return[];const n=[...e].sort((e,t)=>e.start-t.start),i=[];for(const s of n){const e=i[i.length-1];!e||s.start>e.end+t?i.push({...s}):e.end=Math.max(e.end,s.end)}return i}function Ts(e,t){if(!Number.isFinite(e))return t;const n=Math.max(0,Math.floor((e-3)/2));return Math.min(t,n)}function Ms(e){return e.reduce((e,t)=>e+(t.end-t.start),0)}function Es(e,t){const n=[];for(const i of t)n.push(...e.slice(i.start,i.end));return n}function ks(e,t,n){return{viewportReady:n?.viewportReady??!0,ranges:t.map(e=>({...e})),shapeIds:Es(e,t)}}function Bs(e){return{shapeUtils:e.flatMap(e=>e.shapeUtils??[]),shapeSvgExporters:e.flatMap(e=>e.shapeSvgExporters??[]),bindingUtils:e.flatMap(e=>e.bindingUtils??[])}}function As(e){let t=null;for(const i of e.splice(0).reverse())try{i()}catch(n){t??=n}return t}function Rs(e){return e.toLowerCase()}function Fs(e){return Math.min(1,Math.max(0,(96-e)/96))}function Ks(e,t,n){const i=e.inputs.state.get();if("dragging"!==i.dragPhase||!i.currentPagePoint)return null;let s=i.currentPagePoint;if(!i.currentScreenPoint)return"apply_after_scroll"===n?null:{pagePoint:s,shiftKey:i.shiftKey,altKey:i.altKey,accelKey:i.accelKey,ctrlKey:i.ctrlKey};const o=((e,t,n)=>{if(t.w<=0||t.h<=0||n<=0)return Ld.Zero();const i=Math.min(n,32),s=Fs(e.x),o=Fs(t.w-e.x),r=Fs(e.y),a=1.25*(o-s)*i,d=1.25*(Fs(t.h-e.y)-r)*i;return 0===a&&0===d?Ld.Zero():new Ld(a,d)})(i.currentScreenPoint,e.state.viewportScreenSize.get(),t.elapsed),r=0!==o.x||0!==o.y;return r||"always_apply"===n?(r&&(e.viewport.pan(o),s=e.viewport.screenToPage(i.currentScreenPoint)),{pagePoint:s,shiftKey:i.shiftKey,altKey:i.altKey,accelKey:i.accelKey,ctrlKey:i.ctrlKey}):null}function Ds(e,t){const n=(e=>{const t=e.inputs.state.get();return"dragging"===t.dragPhase&&t.currentPagePoint?{pagePoint:t.currentPagePoint,shiftKey:t.shiftKey,altKey:t.altKey,accelKey:t.accelKey,ctrlKey:t.ctrlKey}:null})(e);n&&t(n)}function Ls(e,t,n){const i=new Set(n);if(i.has(t))return t;const s=Ys(e,t);for(const r of s)if(i.has(r.ancestorId))return r.childId;const o=s[0]?.ancestorId;return o&&n.some(t=>((e,t)=>Ys(e,t)[0]?.ancestorId??null)(e,t)===o)?t:s[s.length-1]?.ancestorId??t}function Ys(e,t){const n=[];let i=e.shapes.get(t),s=t;const o=new Set([t]);for(;i?.parentId.startsWith("shape:");){const t=i.parentId;if(o.has(t))return n;o.add(t);const r=e.shapes.get(t);if(!r)return n;e.shapes.getUtil(r).isSelectionTransformContainer(r)&&n.push({ancestorId:r.id,childId:s}),s=r.id,i=r}return n}function Xs({shiftKey:e,accelKey:t}){return e||t}function Os({ctrlKey:e}){return e}function zs(e){let t=e;for(;t<=-Math.PI;)t+=2*Math.PI;for(;t>Math.PI;)t-=2*Math.PI;return t}function Ns(e,t){return Math.round(e/t)*t}function $s(e,t,n,i,s,o,r,a,d,c,l,h){const u=_s(c,l),p=Us({point:t.localBounds.center,startBounds:n,scaleX:s,scaleY:o,handleId:r,isResizingFromCenter:d}),g=(({bounds:e,fromBounds:t,toBounds:n})=>{const i=Ln({point:new Ld(e.minX,e.minY),fromBounds:t,toBounds:n}),s=Ln({point:new Ld(e.maxX,e.maxY),fromBounds:t,toBounds:n});return new Yd(Math.min(i.x,s.x),Math.min(i.y,s.y),Math.abs(s.x-i.x),Math.abs(s.y-i.y))})({bounds:t.localBounds,fromBounds:n,toBounds:i}),f=new Yd(p.x-g.w/2,p.y-g.h/2,g.w,g.h),m=Fn(p,u),y=e.shapes.getUtil(t.pageShape),S=Xn(t.pageShape.rotation,l),I=null!==S,v="perpendicular"===S?new Yd(f.center.x-f.h/2,f.center.y-f.w/2,f.h,f.w):f,w=I?v:(()=>{const e=y.getSelectionResizeLocalBounds(t.pageShape),n=(({localWidth:e,localHeight:t,scaleX:n,scaleY:i})=>({width:Math.abs(n)*e,height:Math.abs(i)*t}))({localWidth:e.w,localHeight:e.h,scaleX:t.pageShape.scaleX,scaleY:t.pageShape.scaleY}),i=n.width*Math.abs(s),r=n.height*Math.abs(o);return new Yd(m.x-i/2,m.y-r/2,i,r)})(),b=y.resizeSelectionBounds(t.pageShape,{handleId:r,isOnlyResizeTarget:a,pageCenter:m,selectionLocalBounds:w,scaleX:s,scaleY:o,isResizingFromCenter:d,selectionRotation:I?l:t.pageShape.rotation,selectionRotationCenter:I?c:m}),P=an(e,t.shape,t.pageShape,b);P&&Object.assign(h,P)}function _s(e,t){return{rotation:t,rotationCenter:e}}function Hs(e,t,n,i,s,o,r,a,d,c,l){const h=_s(d,c),u=Fn(Us({point:t.startLocalPagePoint,startBounds:n,scaleX:s,scaleY:o,handleId:r,isResizingFromCenter:a}),h),p=Fn(Us({point:t.endLocalPagePoint,startBounds:n,scaleX:s,scaleY:o,handleId:r,isResizingFromCenter:a}),h),g=t.middleLocalPagePoint?Fn(Us({point:t.middleLocalPagePoint,startBounds:n,scaleX:s,scaleY:o,handleId:r,isResizingFromCenter:a}),h):void 0,f=e.shapes.getUtil(t.pageShape).updateSelectionPagePoints(t.pageShape,{pagePoints:[u,p],pageMiddlePoint:g}),m=an(e,t.shape,t.pageShape,f);m&&Object.assign(l,m)}function Us({point:e,startBounds:t,scaleX:n,scaleY:i,handleId:s,isResizingFromCenter:o}){const r=(({startBounds:e,handleId:t,isResizingFromCenter:n})=>n?e.center.x:Mi(t)?e.maxX:Ei(t)?e.minX:e.center.x)({startBounds:t,handleId:s,isResizingFromCenter:o}),a=(({startBounds:e,handleId:t,isResizingFromCenter:n})=>n?e.center.y:ki(t)?e.maxY:Bi(t)?e.minY:e.center.y)({startBounds:t,handleId:s,isResizingFromCenter:o});return new Ld(r+(e.x-r)*n,a+(e.y-a)*i)}function Ws(e,t,n,i,s){const o=t.localBounds.center,r=Kn(new Ld(t.pageShape.x+o.x,t.pageShape.y+o.y),{rotation:i,rotationCenter:n}),a=an(e,t.shape,t.pageShape,{id:t.shape.id,x:r.x-o.x,y:r.y-o.y,rotation:t.rotation+i});a&&Object.assign(s,a)}function qs(e,t,n,i,s){const o=e.shapes.getUtil(t.pageShape).updateSelectionPagePoints(t.pageShape,{pagePoints:[Kn(t.startPagePoint,{rotation:i,rotationCenter:n}),Kn(t.endPagePoint,{rotation:i,rotationCenter:n})],pageMiddlePoint:t.middlePagePoint?Kn(t.middlePagePoint,{rotation:i,rotationCenter:n}):void 0}),r=an(e,t.shape,t.pageShape,o);r&&Object.assign(s,r)}function Vs(e,t){let n=null;for(const i of t){const t=e.shapes.get(i);if(!t)return null;if(n){if(t.parentId!==n)return null}else n=t.parentId}return n}function Gs(e,t,n){const i=n?e.layers.getContainingParentIdAtPoint(t,n):e.layers.getContainingParentId(t);if(!i)return null;const s=Vs(e,t);if(!s||!s.startsWith("shape:")||i===s)return i;const o=e.shapes.get(s);return o&&e.shapes.getUtil(o).canReceiveChildren(o)?e.shapes.getUtil(o).canAutomaticallyReceiveChildren(o)?n?i:t.every(t=>{const n=e.layers.getContainment(o.id,t);return"inside"===n||"intersecting"===n})?s:i:s:i}function js(e,t,n){const i=Gs(e,t,n);i&&t.some(t=>e.shapes.get(t)?.parentId!==i)&&e.commands.reparentShapes({ids:[...t],parentId:i})}function Qs(e,t,n,i={}){let s=!0;return t.graph.effect(e,()=>{t.get(),s&&!1===i.fireImmediately?s=!1:(s=!1,n())})}function Zs(e){return e}function Js(e){return Object.freeze({id:e,kind:"api"})}function eo(e,t){return e.require(t)}function to(){const e=ad(Gc);if(!e)throw new Error("useEditor must be used within EditorContext.Provider");return e}function no({children:e,className:t,dataUi:n}){const i=to(),s=ud(null);return ld(()=>Qs("PageSpace.transform",i.state.pageTransform,()=>{const e=s.current;e&&(e.style.transform=i.state.pageTransform.get().toCssString())}),[i]),md("div",{ref:s,"data-ui":n,className:t,style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",transformOrigin:"0 0"},children:e})}function io(e){const t=new Set,n=new Map,i=[],s=new Set,o=new Map,r=new Map,a=[],d=new Set,c=[],l=new Set;for(const f of e){oo(t,f.id,"canvas render plugin id");for(const e of f.shapeRenderers??[])so(n,e.type,e,"shape renderer type");for(const e of f.shapeOpacityModifiers??[])oo(s,e.id,"shape opacity modifier id"),i.push(e);for(const e of f.canvasOverlays??[])so(o,e.id,e,"canvas overlay id");for(const e of f.selectionCustomHandleRenderers??[])so(r,e.type,e,"selection handle renderer type");for(const e of f.domEventGuards??[])oo(d,e.id,"DOM event guard id"),a.push(e);for(const e of f.canvasComponents??[])oo(l,e.id,"canvas component id"),c.push(e)}const h=Object.freeze([...o.values()].sort(ro)),u=Object.freeze({getShapeRenderer:e=>n.get(e)??null,getShapeOpacityValue(e,t){const n=i.map(n=>n.getOpacityValue(e,t));return Object.freeze({graph:e.signals,get:()=>n.reduce((e,t)=>e*t.get(),1)})}}),p=Object.freeze({getCanvasOverlays:()=>h,getSelectionCustomHandleRenderer:e=>r.get(e)??null}),g=Object.freeze({handle(e){for(const t of a)if("handled"===t.handle(e))return"handled";return"continue"},getCursor(e){for(const t of a){const n=t.getCursor?.(e);if(void 0!==n)return n}}});return Object.freeze({canvasComponents:Object.freeze(c),renderers:u,overlays:p,domEventGuards:g})}function so(e,t,n,i){if(e.has(t))throw new Error(`Duplicate ${i}: ${t}.`);e.set(t,n)}function oo(e,t,n){if(e.has(t))throw new Error(`Duplicate ${n}: ${t}.`);e.add(t)}function ro(e,t){return(e.order??0)-(t.order??0)}function ao(){return ad(jc)}function co(){return ao().renderers}function lo(){return ao().overlays}function ho(e){const t=rd(t=>Qs("useValue",e,t,{fireImmediately:!1}),[e]),n=rd(()=>e.get(),[e]);return gd(t,n,n)}function uo({children:e,clipAncestorIds:t,shapeElementToPage:n}){return 0===t.length?md(fd,{children:e}):t.reduceRight((e,t)=>md(po,{ancestorId:t,shapeElementToPage:n,children:e},t),e)}function po({ancestorId:e,children:t,shapeElementToPage:n}){const i=to(),s=ho(i.shapes.getSignal(e));if(!s)return md(fd,{children:t});const o=((e,t,n)=>{const i=e.shapes.getUtil(t).getChildClipLocalPolygons(t);if(!i)return null;const s=e.shapes.computeRenderToPageTransform(t),o=n.tryInvert();if(!o)return null;const r=i.filter(e=>e.length>=3).map(e=>e.map(e=>o.applyToPoint(s.applyToPoint(e)))).filter(e=>e.every(e=>Number.isFinite(e.x)&&Number.isFinite(e.y)));return 0===r.length?null:1===r.length?`polygon(${r[0].map(fo).join(", ")})`:`path("${r.map(go).join(" ")}")`})(i,s,n);return o?md("div",{"data-ui":"shape-clip-boundary","data-clip-ancestor-id":e,style:{position:"absolute",inset:0,width:"100%",height:"100%",clipPath:o,WebkitClipPath:o,overflow:"visible"},children:t}):md(fd,{children:t})}function go(e){return e.map((e,t)=>`${0===t?"M":"L"} ${mo(e.x)} ${mo(e.y)}`).concat("Z").join(" ")}function fo(e){return`${mo(e.x)}px ${mo(e.y)}px`}function mo(e){return Number.isFinite(e)?Number(e.toFixed(3)).toString():"0"}function yo({Component:e,editor:t,shape:n}){
2
+ return md("div",{"aria-hidden":"true","data-ui":"shape-hover-decoration",style:{position:"absolute",inset:0,pointerEvents:"none"},children:md(e,{shape:n,editor:t,strokeWidth:2/ho(t.state.cameraZoom)})})}function So(e,t,n){const i=e.shapes.computeRenderBounds(t),s=n.compose($d.Translate(i.x,i.y));return{left:0,top:0,width:i.w,height:i.h,transform:s.toCssString(),transformOrigin:"0 0",elementToPage:s}}function Io(){
3
+ return md("div",{"data-ui":"transform-descendant-ancestor-boundary",style:{position:"absolute",inset:0,border:"1px dashed #64748b",pointerEvents:"none"}})}function vo(){
4
+ return md("div",{"data-ui":"shape-drop-target-label",style:{position:"absolute",left:10,top:10,display:"flex",alignItems:"center",height:24,padding:"0 10px",borderRadius:999,background:"#2563eb",color:"white",fontFamily:"Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",fontSize:12,fontWeight:700,lineHeight:"24px",boxShadow:"0 10px 24px rgba(37, 99, 235, 0.24)",whiteSpace:"nowrap",pointerEvents:"none"},children:"Drop into container"})}function wo(e,t,n){const i=new Set;let s=t.parentId;for(;s.startsWith("shape:");){const t=s;if(t===e)return!0;if(i.has(t))return!1;i.add(t);const o=n.get(t);if(!o)return!1;s=o.parentId}return!1}function bo(){
5
+ return md("div",{"data-ui":"shape-layer",className:"land-canvas__shape-layer",style:{position:"absolute",left:0,top:0,width:"100%",height:"100%"},children:md(no,{dataUi:"shape-page-space",className:"land-canvas__shape-page-space",children:md(el,{})})})}function Po(e,t){return"binding-preview"===e?{underlay:{"data-binding-preview-segment-underlay":t},segment:{"data-binding-preview-segment":t}}:"terminal-binding-guide"===e?{underlay:{"data-terminal-binding-guide-underlay":t},segment:{"data-terminal-binding-guide":t}}:{underlay:{"data-selection-binding-segment-underlay":t},segment:{"data-selection-binding-segment":t}}}function xo({start:e,end:t,startInset:n,endInset:i,strokeWidth:s,dashSize:o,gapSize:r,kind:a,terminal:d}){const c=(({start:e,end:t,startInset:n,endInset:i})=>{const s=t.x-e.x,o=t.y-e.y,r=Math.hypot(s,o);if(r<1e-6)return null;const a=Math.max(0,r/2-.001),d=Math.min(n,a),c=Math.min(i,a),l=s/r,h=o/r;return{start:{x:e.x+l*d,y:e.y+h*d},end:{x:t.x-l*c,y:t.y-h*c}}})({start:e,end:t,startInset:n,endInset:i});if(!c)return null;const l=Po(a,d);
6
+ return yd("g",{style:{pointerEvents:"none"},children:[md("line",{...l.underlay,x1:c.start.x,y1:c.start.y,x2:c.end.x,y2:c.end.y,fill:"none",stroke:nl,strokeLinecap:"round",strokeWidth:2.2*s}),md("line",{...l.segment,x1:c.start.x,y1:c.start.y,x2:c.end.x,y2:c.end.y,fill:"none",stroke:tl,strokeDasharray:`${o} ${r}`,strokeLinecap:"round",strokeWidth:s})]})}function Co({path:e,strokeWidth:t,dashSize:n,gapSize:i,kind:s,terminal:o}){const r=Po(s,o);
7
+ return yd("g",{style:{pointerEvents:"none"},children:[md("path",{...r.underlay,d:e,fill:"none",stroke:nl,strokeLinecap:"round",strokeWidth:2.2*t}),md("path",{...r.segment,d:e,fill:"none",stroke:tl,strokeDasharray:`${n} ${i}`,strokeLinecap:"round",strokeWidth:t})]})}function To({editor:e,shape:t,stroke:n,fill:i,strokeWidth:s}){const o=e.shapes.getPageOutlineVertices(t.id);return 0===o.length?null:md("polygon",{points:o.map(e=>`${e.x},${e.y}`).join(" "),fill:i,stroke:n,strokeWidth:s,strokeLinejoin:"round",strokeLinecap:"round"})}function Mo({frame:e,handleId:t,zoom:n}){const i=((e,t)=>{const{bounds:n}=e;switch(t){case"top":return{x1:n.minX,y1:n.minY,x2:n.maxX,y2:n.minY};case"right":return{x1:n.maxX,y1:n.minY,x2:n.maxX,y2:n.maxY};case"bottom":return{x1:n.minX,y1:n.maxY,x2:n.maxX,y2:n.maxY};case"left":return{x1:n.minX,y1:n.minY,x2:n.minX,y2:n.maxY};default:return null}})(e,t);return i?md("line",{"data-selection-resize-border":t,x1:i.x1,y1:i.y1,x2:i.x2,y2:i.y2,fill:"none",stroke:"transparent",strokeWidth:12/n,strokeLinecap:"butt",style:{cursor:Eo(t,e.rotation),pointerEvents:"stroke"}}):null}function Eo(e,t){const n=(((e=>{switch(e){case"top_left":case"bottom_right":return Math.PI/4;case"top":case"bottom":return Math.PI/2;case"top_right":case"bottom_left":return 3*Math.PI/4;case"right":case"left":return 0}})(e)+t)%Math.PI+Math.PI)%Math.PI/(Math.PI/4);return gl[Math.round(n)%gl.length]??"default"}function ko({handle:e,strokeWidth:t}){
8
+ return md("rect",{"data-selection-custom-handle":e.id,"data-selection-custom-handle-type":e.type,"data-selection-custom-handle-id":e.id,"data-selection-custom-handle-visual":"default",x:e.bounds.x,y:e.bounds.y,width:e.bounds.w,height:e.bounds.h,rx:3,ry:3,fill:"rgba(255,255,255,0.98)",stroke:"rgba(37, 99, 235, 0.92)",strokeWidth:t,style:{cursor:e.cursor??"grab",pointerEvents:"auto"}})}function Bo({dataPrefix:e,pathStyle:t,stroke:n,strokeWidth:i}){
9
+ return yd(fd,{children:[md("path",{"data-selection-overlay":e,d:t.localPath,fill:"none",stroke:n,strokeWidth:i,strokeDasharray:t.strokeDasharray,strokeLinecap:"round",strokeLinejoin:"round",pointerEvents:"none"}),t.localDecorationPaths.map((t,s)=>md("path",{"data-selection-overlay":`${e}-decoration`,d:t,fill:"none",stroke:n,strokeWidth:i,strokeLinecap:"round",strokeLinejoin:"round",pointerEvents:"none"},`${s}:${t}`))]})}function Ao(e,t){const n=Math.max(e[0],t[0]),i=Math.min(e[1],t[1]);return n<=i?[n,i]:null}function Ro(){
10
+ return md("div",{"data-ui":"overlay-layer",className:"land-canvas__overlay-layer",style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none"},children:md(no,{dataUi:"overlay-page-space",className:"land-canvas__overlay-page-space",children:md(Cl,{})})})}function Fo(e,t){return(e%t+t)%t}function Ko(){const e=ho(to().state.camera);
11
+ return yd("svg",{"data-ui":"canvas-grid","aria-hidden":"true",className:"land-canvas__grid",xmlns:"http://www.w3.org/2000/svg",style:{position:"absolute",inset:0,width:"100%",height:"100%",pointerEvents:"none"},children:[md("defs",{children:Ml.map(({min:t,mid:n,step:i})=>{const s=15*i*e.z,o=((e,t)=>({x:Fo(.5-e.x*e.z,t),y:Fo(.5-e.y*e.z,t)}))(e,s),r=e.z<n?(a=((e,[t,n],[i,s])=>i+(e-t)/(n-t)*(s-i))(e.z,[t,n],[0,1]),Math.max(0,Math.min(1,a))):1;var a;
12
+ return md("pattern",{id:`land-canvas-grid-${i}`,width:s,height:s,patternUnits:"userSpaceOnUse",children:md("circle",{cx:o.x,cy:o.y,r:1,fill:"var(--land-canvas-grid-minor, var(--canvas-dot))",opacity:r})},i)})}),Ml.map(({step:e})=>md("rect",{width:"100%",height:"100%",fill:`url(#land-canvas-grid-${e})`},e))]})}function Do(e){const t=(e=>e instanceof HTMLElement?e:null)(e);return!!t&&(!!t.isContentEditable||!!t.closest('[contenteditable="true"]')||t instanceof HTMLInputElement||t instanceof HTMLTextAreaElement||t instanceof HTMLSelectElement)}function Lo(e){return(e??("undefined"==typeof document?null:document))?.querySelector(kl)??null}function Yo(e,t=Lo()){if(!t)return new Ld(e.clientX,e.clientY);const n=t.getBoundingClientRect();return new Ld(e.clientX-n.left,e.clientY-n.top)}function Xo(e,t){return{type:"keyboard",name:e,...zo(t),code:t.code}}function Oo(e,t,n){return e.state.shapeEditingSession.get(),n?null:e.handleEvent(Xo("key_up",t))}function zo(e){return{key:e.key,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.metaKey||e.ctrlKey}}function No(e){return"Space"===e.code}function $o(e,t){const n=t.ownerDocument;return e===n||e===n.body||e===n.documentElement||e instanceof Node&&t.contains(e)}function _o(e,t,n,i){return{type:"pointer",name:e,timestamp:t.timeStamp,pointerId:t.pointerId,button:t.button,buttons:t.buttons,pointerType:(s=t.pointerType,"touch"===s||"pen"===s?s:"mouse"),screenPoint:n,pagePoint:i,pressure:t.pressure,shiftKey:t.shiftKey,altKey:t.altKey,ctrlKey:t.ctrlKey,metaKey:t.metaKey,accelKey:t.metaKey||t.ctrlKey};var s}function Ho(e,t){return new Ld(e.clientX-t.left,e.clientY-t.top)}function Uo(e,t){return e instanceof Node&&t.contains(e)}function Wo(e,t,n,i){return n||"hand"===e&&t?"grabbing":i||"hand"===e?"grab":"select"===e?void 0:"crosshair"}function qo({onContextMenuRequest:e,renderBindings:t,showGrid:n=!1}){const i=to(),{canvasComponents:s,domEventGuards:o}=t,r=ho(i.state.tool).activeToolId,a=ho(i.state.shapeEditing).session,d=ho(i.inputs.isSpacePressed)&&null===a,{containerRef:c,handlers:l,isPointerActive:h,isCameraPanning:u,surfaceCursor:p}=function({activeDomEventGuards:e,activeToolId:t,editor:n,onContextMenuRequest:i,shapeEditingSession:s}){const o=ud(null),r=ud(null),a=ud(null),d=ud(null),c=ud(null),l=ud(null),h=ud(null),[u,p]=pd(!1),[g,f]=pd(!1),[m,y]=pd(void 0),S=null!==s;dd(()=>{("select"!==t||S)&&n.interaction.setHoveredShapeId(null)},[t,n,S]);const I=rd(()=>{null!==c.current&&(cancelAnimationFrame(c.current),c.current=null),l.current=null},[]),v=rd(e=>{if(null===a.current)return void I();const t=l.current??e;l.current=e,n.handleEvent({type:"tick",timestamp:e,elapsed:e-t}),c.current=requestAnimationFrame(v)},[n,I]),w=rd(()=>{null===c.current&&(l.current=null,c.current=requestAnimationFrame(v))},[v]);return dd(()=>{const i=o.current;if(!i)return;let s=null;const c=()=>{const e=i.getBoundingClientRect(),t={left:e.left,top:e.top};return r.current=t,t},l=()=>r.current??c(),u=()=>{null!==s&&(window.cancelAnimationFrame(s),s=null)},g=({clientPoint:e,target:s})=>{if(u(),!e||null!==a.current||"select"!==t||S)return void n.interaction.setHoveredShapeId(null);const o=i.getBoundingClientRect();if(!Uo(s,i)||e.x<o.left||e.x>o.right||e.y<o.top||e.y>o.bottom)return void n.interaction.setHoveredShapeId(null);const r=l(),d=new Ld(e.x-r.left,e.y-r.top),c=n.shapes.hitTest(n.viewport.screenToPage(d));if(!c)return void n.interaction.setHoveredShapeId(null);const h=n.shapes.getUtil(c).getHoverTargetId(c,{editor:n});n.interaction.setHoveredShapeId(n.layers.getOutermostSelectableId(h))},m=()=>{const e=h.current;g({clientPoint:e,target:e?document.elementFromPoint(e.x,e.y):null})},v=()=>{null===s&&(s=window.requestAnimationFrame(()=>{s=null,m()}))},w=(t,s)=>"handled"===e.handle({name:t,event:s,editor:n,container:i}),b=()=>{if(!S)return void y(void 0);const t=h.current;y(t?e.getCursor({clientPoint:t,element:document.elementFromPoint(t.x,t.y),editor:n,container:i}):void 0)},P=(e,t)=>{if(!o.current)return;const i=Ho(t,l());n.handleEvent(_o(e,t,i,n.viewport.screenToPage(i)))},x=()=>{n.viewport.setScreenSize({w:i.clientWidth,h:i.clientHeight})};c(),x();const C=e=>{if(!w("key_down",e)){if(n.state.shapeEditingSession.get()){if(Do(e.target))return;return n.handleEvent(Xo("key_down",e)).claimed?(e.preventDefault(),void e.stopPropagation()):void("Enter"===e.key&&(e.metaKey||e.ctrlKey)&&n.editing.complete("user"))}Do(e.target)||No(e)&&!$o(e.target,i)||n.handleEvent(Xo("key_down",e)).claimed&&e.preventDefault()}},T=e=>{if(No(e)&&n.inputs.pressedKeyCodes.get().has(e.code)&&!n.state.shapeEditingSession.get())return e.preventDefault(),void Oo(n,e,!1);w("key_up",e)||No(e)&&!$o(e.target,i)||Oo(n,e,Do(e.target))?.claimed&&e.preventDefault()},M=()=>{a.current=null,d.current=null,p(!1),f(!1),n.interaction.setHoveredShapeId(null),I(),n.handleEvent({type:"cancel",reason:"blur"})},E=e=>{if(w("wheel",e))return;e.preventDefault();const t={x:e.clientX,y:e.clientY};h.current=t;const i=Ho(e,l()),s=n.viewport.screenToPage(i);n.handleEvent(((e,t,n)=>({type:"wheel",screenPoint:t,pagePoint:n,delta:new Ld(e.deltaX,e.deltaY),shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.metaKey||e.ctrlKey}))(e,i,s)),g({clientPoint:t,target:document.elementFromPoint(t.x,t.y)})},k=e=>{if(h.current={x:e.clientX,y:e.clientY},g({clientPoint:h.current,target:e.target}),b(),e.pointerId!==a.current){const t=Ho(e,l());if(n.inputs.setCurrentPointerPoint({timestamp:e.timeStamp,screenPoint:t,pagePoint:n.viewport.screenToPage(t),shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.metaKey||e.ctrlKey}),w("pointer_move",e))return;if(!((e,t)=>{const n=t.getBoundingClientRect();return e.clientX>=n.left&&e.clientX<=n.right&&e.clientY>=n.top&&e.clientY<=n.bottom})(e,i)||!Uo(e.target,i)||Do(e.target))return;return void P("pointer_move",e)}const t={clientX:e.clientX,clientY:e.clientY,buttons:e.buttons,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey};var s,o;o=t,(s=d.current)&&s.clientX===o.clientX&&s.clientY===o.clientY&&s.buttons===o.buttons&&s.shiftKey===o.shiftKey&&s.altKey===o.altKey&&s.ctrlKey===o.ctrlKey&&s.metaKey===o.metaKey||(d.current=t,P("pointer_move",e))},B=(e,t)=>{t.pointerId===a.current&&(a.current=null,d.current=null,p(!1),f(!1),I(),i.hasPointerCapture(t.pointerId)&&i.releasePointerCapture(t.pointerId),P(e,t),"pointer_up"===e?m():n.interaction.setHoveredShapeId(null))},A=()=>{h.current=null,n.interaction.setHoveredShapeId(null),b()},R=e=>{h.current={x:e.clientX,y:e.clientY},window.setTimeout(b,0),e.pointerId===a.current?B("pointer_up",e):w("pointer_up",e)},F=e=>{h.current={x:e.clientX,y:e.clientY},b(),e.pointerId===a.current?B("pointer_cancel",e):w("pointer_cancel",e)},K=new ResizeObserver(()=>{c(),x(),v()}),D=()=>{c(),v()},L=n.listen(v);window.addEventListener("keydown",C),window.addEventListener("keyup",T),window.addEventListener("blur",M),window.addEventListener("scroll",D,{passive:!0,capture:!0}),window.addEventListener("pointermove",k,{passive:!0}),window.addEventListener("pointerup",R),window.addEventListener("pointercancel",F),i.addEventListener("pointerleave",A),i.addEventListener("wheel",E,{passive:!1}),K.observe(i);const Y=window.requestAnimationFrame(b);return v(),()=>{I(),u(),L(),p(!1),f(!1),n.interaction.setHoveredShapeId(null),window.cancelAnimationFrame(Y),window.removeEventListener("keydown",C),window.removeEventListener("keyup",T),window.removeEventListener("blur",M),window.removeEventListener("scroll",D,!0),window.removeEventListener("pointermove",k),window.removeEventListener("pointerup",R),window.removeEventListener("pointercancel",F),i.removeEventListener("pointerleave",A),i.removeEventListener("wheel",E),K.disconnect()}},[e,t,n,S,I]),{containerRef:o,handlers:{onPointerDown:rd(t=>{const i=o.current;if(!i)return;if(h.current={x:t.clientX,y:t.clientY},2===t.button)return void i.focus();if("handled"===e.handle({name:"pointer_down",event:t.nativeEvent,editor:n,container:i}))return;if(Do(t.target))return;t.preventDefault(),i.focus(),i.setPointerCapture(t.pointerId);const s=i.getBoundingClientRect();r.current={left:s.left,top:s.top},a.current=t.pointerId,p(!0),f(1===t.button||0===t.button&&n.inputs.isSpacePressed.get()&&!n.state.shapeEditingSession.get()),d.current=null,w();const c=Ho(t,r.current);n.interaction.setHoveredShapeId(null),n.handleEvent(_o("pointer_down",t,c,n.viewport.screenToPage(c)))},[e,n,w]),onAuxClick:rd(e=>{1!==e.button||Do(e.target)||(e.preventDefault(),e.stopPropagation())},[]),onContextMenu:rd(e=>{const t=o.current;if(!t||!i||Do(e.target))return;e.preventDefault(),e.stopPropagation();const s=t.getBoundingClientRect();if(r.current={left:s.left,top:s.top},null!==a.current){const i=a.current;t.hasPointerCapture(i)&&t.releasePointerCapture(i),a.current=null,d.current=null,p(!1),f(!1),I();const s=Ho(e,r.current);n.handleEvent({type:"pointer",name:"pointer_cancel",timestamp:e.timeStamp,pointerId:i,button:e.button,buttons:0,pointerType:n.inputs.state.get().pointerType??"mouse",screenPoint:s,pagePoint:n.viewport.screenToPage(s),pressure:0,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.metaKey||e.ctrlKey})}if(n.state.shapeEditingSession.get())return;t.focus();const c=Ho(e,r.current),l=n.viewport.screenToPage(c),h=n.shapes.hitTest(l);let u;if(h){const e=n.selection.getIds(),t=e.find(e=>e===h.id||n.layers.getDescendantIds(e).includes(h.id))??n.layers.getOutermostSelectableId(h.id),i=e.includes(t);i||n.commands.setSelectedShapeIds([t],{source:"user"}),u={anchor:{screenPoint:c,pagePoint:l},target:{type:"selection",selectedShapeIds:i?e:[t]}}}else u={anchor:{screenPoint:c,pagePoint:l},target:{type:"canvas"}};i(u)},[n,i,I])},isPointerActive:u,isCameraPanning:g,surfaceCursor:m}}({activeDomEventGuards:o,activeToolId:r,editor:i,onContextMenuRequest:e,shapeEditingSession:a});
13
+ return yd("div",{ref:c,"data-ui":El,className:"land-canvas__surface",tabIndex:0,style:{position:"relative",width:"100%",height:"100%",overflow:"hidden",touchAction:"none",userSelect:"none",backgroundColor:"var(--land-canvas-bg, var(--canvas-background))",cursor:p??Wo(r,h,u,d)},...l,children:[n?md(Ko,{}):null,yd(jc.Provider,{value:t,children:[
14
+ md(bo,{}),s.map(({id:e,component:t})=>md(t,{},e)),
15
+ md(Ro,{})]})]})}function Vo(e){dd(()=>{const t=e.current;if(!t)return;const n=t.closest("[data-canvas-kit]"),i=e=>{!e.ctrlKey&&((e,t)=>{let n=e instanceof Element?e:e instanceof Node?e.parentElement:null;for(;n&&t.contains(n);){if(n instanceof HTMLElement&&Go(n))return!0;if(n===t)break;n=n.parentElement}return!1})(e.target,t)||function(e,t,n){const i=n?Lo(n):(e=>{const t=e?.getRootNode();return t instanceof Document||t instanceof ShadowRoot?Lo(t):Lo()})(t);return!!i&&(i.dispatchEvent(new WheelEvent("wheel",{altKey:e.altKey,bubbles:!0,cancelable:!0,clientX:e.clientX,clientY:e.clientY,composed:!0,ctrlKey:e.ctrlKey,deltaMode:e.deltaMode,deltaX:e.deltaX,deltaY:e.deltaY,deltaZ:e.deltaZ,metaKey:e.metaKey,screenX:e.screenX,screenY:e.screenY,shiftKey:e.shiftKey,view:window})),!0)}(e,t,n??void 0)&&(e.preventDefault(),e.stopPropagation())};return t.addEventListener("wheel",i,{passive:!1}),()=>{t.removeEventListener("wheel",i)}},[e])}function Go(e){const{overflowY:t}=window.getComputedStyle(e);return e.scrollHeight>e.clientHeight&&("auto"===t||"scroll"===t||"overlay"===t)}function jo({children:e}){const[t,n]=pd(null),i=rd(e=>{n(e)},[]),s=hd(()=>({registerTarget:i,target:t}),[i,t]);
16
+ return md(Bl.Provider,{value:s,children:e})}function Qo(){const{registerTarget:e}=er(),t=ud(null);return Vo(t),md("div",{ref:rd(n=>{t.current=n,e(n)},[e]),className:"land-canvas__floating-portal-host","data-ui":"canvas-kit-floating-portal-host"})}function Zo(){return er().target}function Jo(){return ad(Bl)?.target??void 0}function er(){const e=ad(Bl);if(!e)throw new Error("CanvasKit floating content must be rendered inside CanvasKitRoot.");return e}function tr({canvas:e,children:t}){
17
+ return md(Al.Provider,{value:e,children:t})}function nr(){const e=ad(Al);if(!e)throw new Error("useCanvasKit must be used inside CanvasKitProvider.");return e}function ir(e){return gd(e.subscribe,e.getSnapshot,e.getSnapshot)}function sr({contributions:e,getHostElement:t,isEditing:n,onError:i,screenToPage:s}){return dd(()=>{const o=s=>{if(!lr(t(),s)||n()||Do(s.target))return;const o=cr({source:"clipboard",dataTransfer:s.clipboardData});or(e,o)&&(s.preventDefault(),ar(e,o).catch(e=>{i(new Error("Canvas clipboard import failed.",{cause:e}))}))},r=i=>{!lr(t(),i)||n()||Do(i.target)||rr(e,dr(i.dataTransfer))&&(i.preventDefault(),i.dataTransfer&&(i.dataTransfer.dropEffect="copy"))},a=o=>{const r=lr(t(),o);if(!r||n()||Do(o.target))return;const a=rr(e,dr(o.dataTransfer)),d=cr({source:"drop",dataTransfer:o.dataTransfer,pagePoint:s(Yo(o,r))});or(e,d)?(o.preventDefault(),ar(e,d).catch(e=>{i(new Error("Canvas drop import failed.",{cause:e}))})):a&&(o.preventDefault(),o.dataTransfer&&(o.dataTransfer.dropEffect="none"))};return window.addEventListener("paste",o),window.addEventListener("dragover",r),window.addEventListener("drop",a),()=>{window.removeEventListener("paste",o),window.removeEventListener("dragover",r),window.removeEventListener("drop",a)}},[e,t,n,i,s]),null}function or(e,t){return e.some(e=>e.accepts(t))}function rr(e,t){return e.some(e=>e.acceptsPreview?.(t)??!1)}async function ar(e,t){for(const n of e)if(n.accepts(t)&&"handled"===await n.import(t))return"handled";return"ignored"}function dr(e){return e?{source:"drop",dataTypes:Array.from(e.types),fileTypes:Array.from(e.items).filter(e=>"file"===e.kind).map(e=>e.type).filter(Boolean)}:{source:"drop",dataTypes:[],fileTypes:[]}}function cr({dataTransfer:e,pagePoint:t,source:n}){const i=e?.getData("text/plain")||void 0,s=e?.getData("text/html")||void 0,o=[...(e?.getData("text/uri-list")||void 0)?.split(/\r?\n/).filter(e=>e&&!e.startsWith("#"))??[],...i&&ur(i.trim())?[i.trim()]:[]];return{source:n,files:hr(e),text:i,html:s,...o.length>0?{urls:o}:{},pagePoint:t}}function lr(e,t){if(!e)return null;const n=(t.target instanceof Element?t.target:document.activeElement)?.closest(kl);return n instanceof HTMLElement&&e.contains(n)?n:null}function hr(e){if(!e)return[];const t=Array.from(e.files);return t.length>0?t:Array.from(e.items).flatMap(e=>{if("file"!==e.kind)return[];const t=e.getAsFile();return t?[t]:[]})}function ur(e){try{const t=new URL(e);return"http:"===t.protocol||"https:"===t.protocol}catch{return e.startsWith("data:image/")}}function pr({bindings:e,getHostElement:t,onError:n}){const i=nr(),s=ir(i.viewport.grid.state),{editor:o,importContributions:r,renderBindings:a,setContextMenu:d}=e,c=rd(()=>i.tools.state.getSnapshot().isEditing,[i]),l=rd(e=>o.viewport.screenToPage(e),[o]);
18
+ return yd(fd,{children:[md(Gc.Provider,{value:o,children:md(qo,{onContextMenuRequest:d,renderBindings:a,showGrid:s})}),md(sr,{contributions:r,getHostElement:t,isEditing:c,onError:n,screenToPage:l})]})}function gr(e){return void 0===e?[]:Array.isArray(e)?e:[e]}function fr(e,t){if(!t||0===Object.keys(t).length)return e;const n=new Set(Object.keys(t)),i=e.map(e=>{if(!Object.prototype.hasOwnProperty.call(t,e.id))return e;n.delete(e.id);const i=t[e.id];return{...e,shortcut:i??void 0}});if(n.size>0)throw new Error(`Unknown CanvasAction shortcut override ids: ${[...n].join(", ")}.`);return i}function mr({actions:e,canvas:t,isEditing:n,onError:i}){dd(()=>{(e=>{const t=new Set;for(const n of e){if(t.has(n.id))throw new Error(`Duplicate CanvasAction id "${n.id}".`);t.add(n.id)}})(e);const s=s=>{if(n()||Do(s.target))return;const o={key:s.key,shiftKey:s.shiftKey,altKey:s.altKey,ctrlKey:s.ctrlKey,metaKey:s.metaKey,accelKey:s.metaKey||s.ctrlKey},r=e.find(e=>void 0!==e.shortcut&&gr(e.shortcut).some(e=>function(e,t){return((e,t)=>!(Rs(t.key)!==e.key||t.altKey!==e.altKey||t.shiftKey!==e.shiftKey||void 0!==e.accelKey&&t.accelKey!==e.accelKey||void 0!==e.ctrlKey&&t.ctrlKey!==e.ctrlKey||void 0!==e.metaKey&&t.metaKey!==e.metaKey||void 0===e.accelKey&&void 0===e.ctrlKey&&void 0===e.metaKey&&t.accelKey))((e=>{const t="string"==typeof e?{key:e}:e;return{key:Rs(t.key),altKey:t.altKey??!1,ctrlKey:t.ctrlKey,metaKey:t.metaKey,shiftKey:t.shiftKey??!1,accelKey:t.accelKey}})(e),t)}(e,o)));if(!r)return;if(s.preventDefault(),s.stopPropagation(),!r.isEnabled(t))return;let a;try{a=r.run(t)}catch(d){return void i(new Error(`Canvas action "${r.id}" failed.`,{cause:d}))}a instanceof Promise&&a.catch(e=>{i(new Error(`Canvas action "${r.id}" failed.`,{cause:e}))})};return window.addEventListener("keydown",s,!0),()=>window.removeEventListener("keydown",s,!0)},[e,t,n,i])}function yr(e,t){if(e.api&&!t?.api)throw new Error(`Canvas plugin "${e.id}" declares API "${e.api.id}" but setup returned no API value.`);if(!e.api&&t?.api)throw new Error(`Canvas plugin "${e.id}" returned an API value without declaring an API token.`)}function Sr(e,t){return new Set((e.requires??[]).flatMap(e=>{const n=t.get(e.id);return n?.api?[n.api.id]:[]}))}function Ir(e,t){const n=new Set;for(const i of e){if(n.has(i))throw new Error(`Duplicate ${t} id: ${i}.`);n.add(i)}}function vr(e){return"provider"===e.kind}function wr(e){return"svg-inliner"===e.kind}function br(e,t){const n=new Set;for(const i of e){if(n.has(i))throw new Error(`Duplicate ${t}: ${i}.`);n.add(i)}}function Pr(){if("undefined"!=typeof window&&"function"==typeof window.requestAnimationFrame&&"function"==typeof window.cancelAnimationFrame)return{requestFrame:e=>window.requestAnimationFrame(e),cancelFrame:e=>window.cancelAnimationFrame(e),prefersReducedMotion:()=>"function"==typeof window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}}function xr(e){return{id:e.id,name:e.name,index:e.index,meta:{...e.meta}}}function Cr(e){return{id:e?.id??"document:main",meta:{...e?.meta??{}}}}function Tr(e,t){return{id:e.id,type:e.type,parentId:e.parentId,pageId:t,index:e.index,x:e.x,y:e.y,rotation:e.rotation,scaleX:e.scaleX,scaleY:e.scaleY,opacity:e.opacity,isHidden:e.isHidden,isLocked:e.isLocked,props:{...e.props},meta:{...e.meta}}}function Mr(e){const{editor:t}=e,n=t.state.session.get(),i=n.activeToolId;e.assertToolId(i);const s=t.pages.getAll().map(e=>({pageId:e.id,selectedShapeIds:[...t.selection.getIds(e.id)],camera:{...t.viewport.getCamera(e.id)}}));return{currentPageId:n.currentPageId,activeToolId:i,isToolLocked:n.isToolLocked,meta:{...n.meta},pages:s}}function Er(e){return{id:e.id,x:e.x,y:e.y,rotation:e.rotation,scaleX:e.scaleX,scaleY:e.scaleY,opacity:e.opacity,isHidden:e.isHidden,isLocked:e.isLocked,parentId:e.parentId,index:e.index,props:e.props?{...e.props}:void 0,meta:void 0===e.meta?void 0:{...e.meta}}}function kr({childIds:e,companionIds:t,context:n,depth:i,editor:s,index:o,pageId:r,shape:a}){return{id:a.id,parentId:a.parentId,pageId:r,type:a.type,companionIds:t,childIds:e,siblingIndex:o,depth:i,canReceiveChildren:s.layers.canReceiveChildren(a.id),isHidden:a.isHidden,isLocked:a.isLocked,isEffectivelyHidden:Fr(s,n,a.id),isEffectivelyLocked:Kr(n,a.id)}}function Br({bindings:e,editor:t,shapes:n}){const i=new Map(n.map(e=>[e.id,e])),s=t.bindings.getShapeCompanionRootIds(n.map(({id:e})=>e),e),o=new Map,r=new Map,a=new Map;for(const d of n){const e=s.get(d.id)??d.id,t=i.has(e)?e:d.id;if(o.set(d.id,t),t===d.id){const e=a.get(d.parentId);e?e.push(d):a.set(d.parentId,[d])}else{const e=r.get(t);e?e.push(d.id):r.set(t,[d.id])}}return{childShapesByParentId:a,companionIdsByRootId:r,rootIdByShapeId:o,shapeById:i}}function Ar(e,t){return e.childShapesByParentId.get(t)??[]}function Rr(e,t){let n=0,i=e.shapeById.get(t);const s=new Set([t]);for(;i?.parentId.startsWith("shape:");){const t=i.parentId;if(s.has(t))break;s.add(t),i=e.shapeById.get(t),n+=1}return n}function Fr(e,t,n){const i=new Set;let s=t.shapeById.get(n);for(;s;){if(s.isHidden)return!0;if(!s.parentId.startsWith("shape:"))return!1;const n=s.parentId;if(i.has(n))return!1;i.add(n);const o=t.shapeById.get(n);if(!o)return!1;if(!e.shapes.getUtil(o).isChildVisible(o,s,{editor:e}))return!0;s=o}return!1}function Kr(e,t){const n=new Set;let i=e.shapeById.get(t);for(;i;){if(i.isLocked)return!0;if(!i.parentId.startsWith("shape:"))return!1;const t=i.parentId;if(n.has(t))return!1;n.add(t),i=e.shapeById.get(t)}return!1}function Dr(e){let t=e;const n=new Set;return{readable:{getSnapshot:()=>t,subscribe:e=>(n.add(e),()=>n.delete(e))},set(e){if(!Object.is(t,e)){t=e;for(const e of[...n])e()}}}}function Lr({getDependencies:e,getSnapshot:t,name:n,signals:i}){let s,o=[],r=!1;const a=()=>{const n=e();return r&&((e,t)=>{if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(!Object.is(e[n],t[n]))return!1;return!0})(o,n)||(o=n,s=t(n),r=!0),s};return{getSnapshot:a,subscribe(t){let s=a();return Qs(n,{get:e,graph:i},()=>{const e=a();Object.is(s,e)||(s=e,t())},{fireImmediately:!1})}}}function Yr({apis:e,editor:t,exports:n,productId:i,startup:s}){const o=e=>(e?e.map(e=>t.shapes.get(e)).filter(e=>!!e):t.pages.getAll().flatMap(e=>t.shapes.getForPage(e.id))).map(e=>Tr(e,t.layers.getPageId(e.id))),r=e=>{const[n,...i]=e;return(({bindings:e,editor:t,pageId:n,shapes:i})=>{const s=[],o=Br({bindings:e,editor:t,shapes:i}),r=(e,i)=>{Ar(o,e).forEach((e,a)=>{const d=Ar(o,e.id).map(e=>e.id);s.push(kr({childIds:d,companionIds:o.companionIdsByRootId.get(e.id)??[],context:o,depth:i,editor:t,index:a,pageId:n,shape:e})),r(e.id,i+1)})};return r(n,0),s})({bindings:i.filter(g),editor:t,pageId:n,shapes:i.filter(u)})},a=e=>{if(!t.tools.hasTool(e))throw new Error(`Unknown canvas kit tool "${e}".`)},d={assertToolId:a,editor:t,productId:i},{readable:c,set:l}=Dr(!1),{readable:h,set:p}=Dr(null),f=Lr({signals:t.signals,name:"CanvasKit.document",getDependencies:()=>[t.document.getMetadata()],getSnapshot:([e])=>Cr(e)}),m=Lr({signals:t.signals,name:"CanvasKit.document.readonlyState",getDependencies:()=>[t.state.readonly.get()],getSnapshot:([e])=>e}),y=Lr({signals:t.signals,name:"CanvasKit.session",getDependencies:()=>[t.state.session.get().meta],getSnapshot:([e])=>({meta:{...e}})}),S=Lr({signals:t.signals,name:"CanvasKit.selection",getDependencies:()=>[t.state.selectedShapeIds.get(),t.state.selectedShapes.get(),t.state.selectionMetadata.get(),t.state.selectionPageBounds.get(),t.state.selectionAnchorPagePoint.get(),t.render.interaction.selectionTranslationActive.get(),t.state.currentPageId.get()],getSnapshot:([e,t,n,i,s,o,r])=>({...n,ids:[...e],shapes:t.map(e=>Tr(e,r)),pageBounds:i?{x:i.minX,y:i.minY,width:i.w,height:i.h}:null,anchorPagePoint:s?{x:s.x,y:s.y}:null,isTranslating:o})}),I=Lr({signals:t.signals,name:"CanvasKit.pages",getDependencies:()=>[t.state.pages.get(),t.state.currentPageId.get(),t.state.currentPageShapeIds.get()],getSnapshot:([e,t,n])=>{const i=e.map(xr),s=i.find(e=>e.id===t)??null;return{pages:i,currentPage:s,currentPageId:t,currentPageShapeIds:[...n],canDeleteCurrentPage:i.length>1&&null!==s}}}),v=Lr({signals:t.signals,name:"CanvasKit.history",getDependencies:()=>[t.state.history.get()],getSnapshot:([e])=>({...e})}),w=Lr({signals:t.signals,name:"CanvasKit.viewport",getDependencies:()=>[t.state.camera.get(),t.state.pageTransform.get()],getSnapshot:([e,t])=>({camera:{...e},zoom:e.z,pageTransform:t.toCssString()})}),b=Lr({signals:t.signals,name:"CanvasKit.tools",getDependencies:()=>[t.state.tool.get(),t.state.shapeEditing.get()],getSnapshot:([e,t])=>(a(e.activeToolId),{currentToolId:e.activeToolId,isLocked:e.isToolLocked,isEditing:null!==t.session})}),P=Lr({signals:t.signals,name:"CanvasKit.layers",getDependencies:()=>Xr(t,t.pages.getCurrentId()),getSnapshot:r});return{canvas:{startup:s,api:t=>e.get(t)??void 0,document:{state:f,readonlyState:m,getSnapshot:()=>(e=>{const{editor:t}=e,n=t.state.tool.get().activeToolId;return e.assertToolId(n),{productId:e.productId,document:Cr(t.document.getMetadata()),pageId:t.pages.getCurrentId(),activeToolId:n,selectedShapeIds:[...t.selection.getIds()],shapeCount:t.state.currentPageShapeIds.get().length,session:Mr(e)}})(d),updateMeta:e=>(t.document.updateMetadata({...e},"user"),Cr(t.document.getMetadata()))},session:{state:y,updateMeta(e){const n=t.session.get();return t.session.update({meta:{...n.meta,...e}},"user"),{meta:{...t.state.session.get().meta}}}},selection:{state:S,select:e=>t.commands.setSelectedShapeIds([...e],{source:"user"}),selectAll:()=>t.selection.selectAll("user"),clear:()=>t.commands.setSelectedShapeIds([],{source:"user"}),delete:()=>t.selection.delete("user"),duplicate:()=>t.selection.duplicate({source:"user"}),resetRotation:()=>t.selection.resetRotation("user"),flip:e=>t.selection.flip(e,"user"),setOpacity:e=>((e,t)=>{if(!Number.isFinite(t))return;const n=Math.min(1,Math.max(0,t)),i=e.state.selectedShapes.get().filter(e=>e.opacity!==n).map(e=>({id:e.id,opacity:n}));i.length>0&&e.commands.updateShapes(i,{source:"user"})})(t,e),align:e=>t.selection.align(e,"user"),distribute:e=>t.selection.distribute(e,"user")},pages:{state:I,create:e=>xr(t.pages.createAndSelect(e?{name:e.name,meta:e.meta?{...e.meta}:void 0}:void 0,"user")),rename:(e,n)=>t.pages.rename(e,n,"user"),updateMeta:(e,n)=>t.pages.updateMetadata(e,{...n},"user")?.id??null,delete:e=>t.pages.delete(e,"user"),deleteCurrent:()=>t.pages.delete(t.pages.getCurrentId(),"user"),setCurrent:e=>t.pages.select(e,"user")},history:{state:v,clear:()=>t.history.clear(),undo:()=>t.history.undo(),redo:()=>t.history.redo()},viewport:{state:w,grid:{state:c,setVisible:l,toggle:()=>l(!c.getSnapshot())},setCamera:(e,n)=>t.commands.setCamera({pageId:n,camera:e},{source:"user"}),zoomIn:()=>t.viewport.zoomAtCenter(-120,"system"),zoomOut:()=>t.viewport.zoomAtCenter(120,"system"),resetZoom:()=>t.viewport.resetZoom("user"),reset:()=>t.commands.setCamera({camera:{x:0,y:0,z:1}},{source:"user"})},tools:{state:b,setCurrent:e=>{if(!t.tools.hasTool(e))throw new Error(`Unknown product tool "${e}".`);t.tools.select(e,"user")},setLocked:e=>t.tools.setLocked(e,"user"),toggleLocked:()=>t.tools.toggleLocked("user")},shapes:{get:e=>{const n=t.shapes.get(e);return n?Tr(n,t.layers.getPageId(n.id)):null},getMany:e=>o(e),getAll:()=>o(),update:e=>function(e,t){const n=t.filter(t=>{const n=e.shapes.get(t.id);return!!n&&((e,t)=>{return!(!t.props&&void 0===t.meta)||(t.x??e.x)!==e.x||(t.y??e.y)!==e.y||(t.rotation??e.rotation)!==e.rotation||(t.scaleX??e.scaleX)!==e.scaleX||(t.scaleY??e.scaleY)!==e.scaleY||(void 0===t.opacity?e.opacity:(i=e.opacity,"number"==typeof(n=t.opacity)&&Number.isFinite(n)?Math.min(1,Math.max(0,n)):i))!==e.opacity||(t.isHidden??e.isHidden)!==e.isHidden||(t.isLocked??e.isLocked)!==e.isLocked||(t.parentId??e.parentId)!==e.parentId||(t.index??e.index)!==e.index;var n,i})(n,t)}).map(Er);return 0===n.length?[]:(e.commands.updateShapes(n,{source:"user"}),n.map(e=>e.id))}(t,e),updateMeta:(e,n)=>{const i=t.shapes.get(e);return i?(t.commands.updateShapes([{id:e,meta:{...i.meta,...n}}],{source:"user"}),e):null},delete:e=>t.shapes.delete([...e],"user")},assets:{get:e=>{const n=t.assets.get(e);return n?(e=>({id:e.id,type:e.type,props:{...e.props},meta:{...e.meta}}))(n):null},resolveUrl:e=>t.assets.resolveUrl(e)},layers:{state:P,getTree:e=>r(Xr(t,e??t.pages.getCurrentId())),getNode:e=>(({editor:e,id:t})=>{const n=e.shapes.get(t),i=n?e.layers.getPageId(n.id):null;if(!n||!i)return null;const s=e.shapes.getForPage(i),o=Br({bindings:s.flatMap(t=>e.bindings.getForShape(t.id)),editor:e,shapes:s}),r=o.rootIdByShapeId.get(n.id)??n.id,a=o.shapeById.get(r);if(!a)return null;const d=Ar(o,a.parentId);return kr({childIds:Ar(o,a.id).map(e=>e.id),companionIds:o.companionIdsByRootId.get(a.id)??[],context:o,depth:Rr(o,a.id),editor:e,index:d.findIndex(e=>e.id===a.id),pageId:i,shape:a})})({editor:t,id:e}),getActionState:e=>({canGroup:t.layers.canGroup(e),canUngroup:t.layers.canUngroup(e),canMoveBackward:t.layers.canMove(e,"backward"),canMoveForward:t.layers.canMove(e,"forward")}),centerOn:(e,n)=>t.viewport.centerOnShape(e,{...n,source:"user"}),setHidden:(e,n)=>t.shapes.setHidden([...e],n,"user"),setLocked:(e,n)=>t.shapes.setLocked([...e],n,"user"),group:e=>t.layers.group([...e],"user")?.id??null,ungroup:e=>t.layers.ungroup([...e],"user"),move:(e,n)=>t.layers.move([...e],n,"user"),moveToEdge:(e,n)=>t.layers.moveToEdge([...e],n,"user"),moveToPlacement:(e,n)=>{const i=t.layers.moveToPlacement({ids:[...e],parentId:n.parentId,beforeId:n.beforeId??void 0},"user");return i.ok?{ok:!0,ids:i.movedIds}:{ok:!1,reason:"locked"===i.reason?"locked":"cycle"===i.reason?"cycle":"invalidBeforeId"===i.reason?"invalid-before":"unsupportedTransform"===i.reason?"mixed-parent":"notFound"===i.reason&&0===e.length?"empty-selection":"invalid-parent"}}},contextMenu:{state:h,dismiss:()=>p(null)},exports:{state:{getSnapshot:()=>n.getStatus(),subscribe:e=>n.subscribe(e)},getFormats:()=>n.getFormats(),getStatus:()=>n.getStatus(),export:(e,t)=>n.export(e,t)}},host:{setContextMenu:p}}}function Xr(e,t){const n=e.shapes.getForPage(t),i=new Map;for(const s of n)for(const t of e.bindings.getForShape(s.id))i.set(t.id,t);return[t,...n,...i.values()]}function Or(){const e=new Map;let t=!1;return{register({token:n,api:i,pluginId:s}){if(t)throw new Error("Canvas API registry is disposed.");if(e.has(n.id))throw new Error(`Duplicate canvas API token: ${n.id}.`);e.set(n.id,{token:n,api:i,pluginId:s})},view:t=>(({allowedTokenIds:t,ownerLabel:n})=>{const i=i=>{if(t&&!t.has(i.id))throw new Error(`${n} attempted to read undeclared canvas API "${i.id}".`);const s=e.get(i.id);return s?s.api:null};return{get:i,require(e){const t=i(e);if(null===t)throw new Error(`${n} requires unavailable canvas API "${e.id}".`);return t}}})(t),clear(){t||(t=!0,e.clear())}}}async function zr(e,t={}){(e=>{if(!e||!Array.isArray(e.plugins))throw new Error("CanvasKit requires an explicit plugins array.");if(!("persistence"in e))throw new Error("CanvasKit requires an explicit persistence option.")})(e),t.signal?.throwIfAborted();const{canvasPlugins:n,editorPlugins:i,renderPlugins:s}=function(e){const t=(e=>e.flat(1/0))(e);br(t.map(({id:e})=>e),"canvas plugin id");const n=(e=>{const t=new Map(e.map(e=>[e.id,e])),n=[],i=new Set,s=new Set,o=e=>{if(!s.has(e.id)){if(i.has(e.id))throw new Error(`Circular canvas plugin dependency detected at "${e.id}".`);i.add(e.id);for(const n of e.requires??[]){const i=t.get(n.id);if(!i)throw new Error(`Canvas plugin "${e.id}" requires missing plugin "${n.id}".`);o(i)}i.delete(e.id),s.add(e.id),n.push(e)}};for(const r of e)o(r);return n})(t),i=n.flatMap(e=>e.editor?[e.editor]:[]),s=n.flatMap(e=>e.render?[e.render]:[]);return br(i.map(({id:e})=>e),"editor plugin id"),br(n.flatMap(e=>e.api?[e.api.id]:[]),"canvas API token"),{canvasPlugins:n,editorPlugins:i,renderPlugins:s}}(e.plugins),o=io(s),r=new Fl,a=t.signal?AbortSignal.any([r.signal,t.signal]):r.signal;try{const s=e.id??"canvas-kit",d=e.persistence;d&&r.own(d,e=>e.dispose?.());let c=[];const l=r.own((e=>{const t=function(e={}){const{plugins:t=[],...n}=e,i=new Tc({...n,...Bs(t)});try{return i.runtime.onDispose(((e,t)=>{const n=[];try{for(const i of t){for(const n of i.interactionHandlers??[])e.interactions.register(n);const t=i.setup?.(e);t&&n.push(t)}}catch(i){throw As(n),i}return()=>{const e=As(n);if(null!==e)throw e}})(i,t)),i}catch(s){try{i.dispose()}catch{}throw s}}({cameraAnimationScheduler:Pr(),documentMeta:e.documentMeta,onUnhandledError:e.onUnhandledError,plugins:e.editorPlugins,resolveAssetUrl:e.resolveAssetUrl});return t.tools.register("select",e=>new Vc(e)),t.tools.register("hand",e=>new Ec(e)),t.tools.syncLockedState(t.state.tool.get().isToolLocked),t.commands.setActiveTool("select",{source:"system"}),t.history.clear(),t})({documentMeta:e.documentMeta?{...e.documentMeta}:void 0,onUnhandledError:e.onError,editorPlugins:i,resolveAssetUrl(e){for(const t of c){const n=t.resolve(e);if(n)return n}return null}}),e=>e.dispose()),h=d?r.own(new Dl(l,d,{flushEvents:t.persistenceFlushEvents,onError:e.onError}),{shutdown:e=>e.shutdown(),rollback:e=>e.rollback()}):null,{apis:u,contributions:{assetResolvers:p,exports:g,imports:f}}=function({apis:e,canvasPlugins:t,editor:n,owner:i,productId:s}){const o=new Map(t.map(e=>[e.id,e])),r=[];for(const d of t){i.signal.throwIfAborted();const t=d.setup?.({editor:n,productId:s,apis:e.view({allowedTokenIds:Sr(d,o),ownerLabel:`Canvas plugin "${d.id}" setup`}),tasks:i.tasks});t&&(i.own(t,e=>e.dispose?.()),r.push({plugin:d,instance:t})),yr(d,t),d.api&&t?.api&&e.register({token:d.api,api:t.api,pluginId:d.id})}const a=(e=>{const t=e.flatMap(({instance:e})=>e.imports??[]),n=e.flatMap(({instance:e})=>e.exports??[]),i=e.flatMap(({instance:e})=>e.assetResolvers??[]);return Ir(t.map(({id:e})=>e),"import contribution"),Ir(n.map(({id:e})=>e),"export contribution"),Ir(n.flatMap(e=>"provider"===e.kind?[e.format]:[]),"export format"),Ir(i.map(({id:e})=>e),"asset resolver contribution"),Object.freeze({imports:Object.freeze((s=t,s.map((e,t)=>({value:e,index:t})).sort((e,t)=>(e.value.order??0)-(t.value.order??0)||e.index-t.index).map(({value:e})=>e))),exports:Object.freeze([...n]),assetResolvers:Object.freeze([...i])});var s})(r);return{apis:e.view({ownerLabel:"CanvasKit"}),contributions:a}}({apis:r.own(Or(),e=>e.clear()),canvasPlugins:n,editor:l,owner:r,productId:s});c=p;const m=await(async({assetResolvers:e,editor:t,initialDocumentSnapshot:n,persistenceAdapter:i,persistenceCoordinator:s,signal:o})=>{const r=t.snapshots.getSession(),a=[],d=i?.load?await i.load({signal:o}):{documentSnapshot:null,sessionSnapshot:null};let c;o.throwIfAborted(),null!==d.documentSnapshot?(t.snapshots.loadDocument(d.documentSnapshot,{source:"system"}),c="restored"):void 0!==n?(t.snapshots.loadDocument(n,{source:"system"}),c="initial"):c="empty",o.throwIfAborted();let l=!1;if("restored"===c&&null!==d.sessionSnapshot)try{t.snapshots.loadSession(d.sessionSnapshot,{source:"system"}),l=!0}catch(h){o.throwIfAborted(),a.push(h),t.snapshots.loadSession(r,{source:"system"})}t.history.clear();for(const u of e){o.throwIfAborted();try{await(u.preload?.({editor:t,signal:o})),"restored"===c&&await(u.cleanupAfterRestore?.({editor:t,signal:o}))}catch(h){o.throwIfAborted(),a.push(h)}}return o.throwIfAborted(),s?.start(),{documentSource:c,sessionRestored:l,warnings:[...a]}})({assetResolvers:c,editor:l,initialDocumentSnapshot:e.initialDocumentSnapshot,persistenceAdapter:d,persistenceCoordinator:h,signal:a});!0===e.readonly&&l.document.setReadonly(!0),r.signal.throwIfAborted();const y=r.own(function({editor:e,contributions:t,tasks:n}){const i=t.filter(vr),s=t.filter(wr),o=new Map;for(const l of i){if(o.has(l.format))throw new Error(`Duplicate canvas export format: ${l.format}.`);o.set(l.format,l)}let r=Rl,a=!1;const d=new Set,c=e=>{if(!Object.is(r,e)){r=e;for(const e of[...d])e()}};return{getFormats:()=>i.map(({format:e,label:t,mimeType:n,fileExtension:i})=>({format:e,label:t,mimeType:n,fileExtension:i})),getStatus:()=>r,subscribe:e=>(d.add(e),()=>d.delete(e)),export:async(t,i)=>n.run(async n=>{if(a)throw new Error("Canvas export controller is disposed.");if("exporting"===r.state)throw new Error("An export is already in progress.");const d=o.get(t);if(!d)throw new Error(`Canvas export format is unavailable: ${t}.`);c({state:"exporting",format:t});try{const t=((e,t)=>{if("selection"===t.scope)return e.selection.getIds();if("page"===t.scope)return e.state.currentPageShapeIds.get();if(!t.shapeIds)throw new Error("Canvas export requires a scope or shapeIds.");return t.shapeIds})(e,i);for(const i of s)n.throwIfAborted(),await(i.prepare?.({editor:e,requestedShapeIds:t,signal:n}));n.throwIfAborted();const o=await d.export({editor:e,shapeIds:t,options:i.options},{signal:n,async inlineSvg(e){let t=e.svg;for(const i of s)n.throwIfAborted(),t=await i.inline({editor:e.editor,exportedShapes:e.exportedShapes,exportedShapeIds:e.exportedShapeIds,svg:t,signal:n});return n.throwIfAborted(),t}});return n.throwIfAborted(),{format:d.format,label:d.label,mimeType:d.mimeType,fileExtension:d.fileExtension,...o}}finally{c(Rl)}}),dispose(){a||(a=!0,c(Rl),d.clear())}}}({editor:l,contributions:g,tasks:r.tasks}),e=>e.dispose());r.signal.throwIfAborted();const{canvas:S,host:I}=Yr({apis:u,editor:l,exports:y,productId:s,startup:m});return{canvas:S,dispose:r.publish({beforeShutdown:()=>l.closeWrites()}),productId:s,render:{editor:l,importContributions:f,onError:e.onError,renderBindings:o,setContextMenu:I.setContextMenu}}}catch(d){return r.rollback(d)}}function Nr(e){try{const t=globalThis.reportError;if("function"==typeof t)return void t(e)}catch(t){console.error(t)}console.error(e)}function $r({actions:e=Yl,chromeRenderer:t,onCanvasChange:n,options:i}){const s=(e=>{const[t,n]=pd(null);return dd(()=>{let t=!0,i=null;const s=new AbortController,o=e.onError??Nr;return n({options:e,state:Ll}),zr(e,{persistenceFlushEvents:{subscribe(e){const t=()=>{"hidden"===document.visibilityState&&e()},n=()=>e();return document.addEventListener("visibilitychange",t),window.addEventListener("pagehide",n),window.addEventListener("beforeunload",n),()=>{document.removeEventListener("visibilitychange",t),window.removeEventListener("pagehide",n),window.removeEventListener("beforeunload",n)}}},signal:s.signal}).then(s=>{i=s,t?n({options:e,state:{status:"ready",runtime:s}}):s.dispose().catch(o)},i=>{t&&n({options:e,state:{status:"error",error:i}})}),()=>{t=!1,s.abort(new DOMException("CanvasKitRoot was cleaned up.","AbortError")),i?.dispose().catch(o)}},[e]),t?.options===e?t.state:Ll})(i);if("error"===s.status)throw s.error;return"ready"!==s.status?null:md(_r,{actions:e,chromeRenderer:t,onCanvasChange:n,runtime:s.runtime})}function _r({actions:e=Yl,chromeRenderer:t,onCanvasChange:n,runtime:i}){const s=ud(n),o=ud(null),r=rd(()=>o.current,[]),{canvas:a,productId:d,render:c}=i,l=c.onError??Nr,h=rd(()=>a.tools.state.getSnapshot().isEditing,[a]);return s.current=n,dd(()=>(s.current?.(a),()=>s.current?.(null)),[a]),mr({actions:e,canvas:a,isEditing:h,onError:l}),md(tr,{canvas:a,children:md(jo,{children:md("div",{ref:o,"data-ui":"app-shell","data-canvas-kit":d,className:"land-canvas-kit__shell",children:yd("main",{"data-ui":"workspace-viewport",className:"land-canvas-kit__viewport",children:[
19
+ md(pr,{bindings:c,getHostElement:r,onError:l}),t?.(a)??null,
20
+ md(Qo,{})]})})})})}function Hr(){return"undefined"==typeof indexedDB?Promise.resolve(null):(Ol||(Ol=new Promise((e,t)=>{const n=indexedDB.open("canvas-kit.persistence",2);n.addEventListener("upgradeneeded",()=>{var e;(e=n.result).objectStoreNames.contains("snapshots")||e.createObjectStore(Xl)}),n.addEventListener("success",()=>{const t=n.result;t.addEventListener("versionchange",()=>{t.close(),Ol=null}),e(t)}),n.addEventListener("error",()=>{Ol=null,t(n.error)})})),Ol)}function Ur(e={}){return{async load({signal:t}){t.throwIfAborted();const n=await qr(e);return t.throwIfAborted(),n},saveDocument:t=>Wr({documentSnapshot:JSON.stringify(t),sessionSnapshot:null},e),saveSession:t=>Wr({documentSnapshot:null,sessionSnapshot:JSON.stringify(t)},e)}}async function Wr(e,t){const n=[];null!==e.documentSnapshot&&n.push([jr(t),e.documentSnapshot]),null!==e.sessionSnapshot&&n.push([Qr(t),e.sessionSnapshot]),0!==n.length&&await(async(e,t)=>{if(0===t.length)return;const n=await Hr();n&&await new Promise((i,s)=>{const o=n.transaction(e,"readwrite"),r=o.objectStore(e);o.addEventListener("complete",()=>i()),o.addEventListener("abort",()=>s(o.error)),o.addEventListener("error",()=>s(o.error));for(const[e,n]of t)r.put(n,e)})})(Xl,n)}async function qr(e={}){const[t,n]=await Jr([jr(e),Qr(e)]);return{documentSnapshot:t,sessionSnapshot:n}}async function Vr(){return Zr(zl)}async function Gr(){return Zr(Nl)}function jr(e){return e.storageNamespace?`${e.storageNamespace}.document`:zl}function Qr(e){return e.storageNamespace?`${e.storageNamespace}.session`:Nl}async function Zr(e){const[t]=await Jr([e]);return t??null}async function Jr(e){return(await(async(e,t)=>{if(0===t.length)return[];const n=await Hr();return n?new Promise((i,s)=>{const o=n.transaction(e,"readonly"),r=o.objectStore(e),a=new Array(t.length).fill(null);o.addEventListener("complete",()=>i(a)),o.addEventListener("abort",()=>s(o.error)),o.addEventListener("error",()=>s(o.error)),t.forEach((e,t)=>{const n=r.get(e);n.addEventListener("success",()=>{a[t]=n.result??null}),n.addEventListener("error",()=>s(n.error))})}):null})("snapshots",e)??e.map(()=>null)).map(ea)}function ea(e){if(null==e)return null;if("string"!=typeof e)throw new Error("Persisted canvas snapshot is not a JSON string.");try{return JSON.parse(e)}catch(t){throw new Error("Persisted canvas snapshot contains invalid JSON.",{cause:t})}}function ta({children:e,className:t,dataUi:n="canvas-kit-floating-toolbar-layer"}){const i=Zo();return i?Sd(md("div",{"data-ui":n,className:na("land-canvas__floating-toolbar-layer",t),children:e}),i):null}function na(...e){return e.filter(Boolean).join(" ")}function ia(e,t,n){return _l(e,$l(t,n))}function sa(e,t){return"function"==typeof e?e(t):e}function oa(e){return e.split("-")[0]}function ra(e){return e.split("-")[1]}function aa(e){return"x"===e?"y":"x"}function da(e){return"y"===e?"height":"width"}function ca(e){const t=e[0];return"t"===t||"b"===t?"y":"x"}function la(e){return aa(ca(e))}function ha(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}function ua(e){const t=oa(e);return ql[t]+e.slice(t.length)}function pa(e){const{x:t,y:n,width:i,height:s}=e;return{width:i,height:s,top:n,left:t,right:t+i,bottom:n+s,x:t,y:n}}function ga(e,t,n){let{reference:i,floating:s}=e;const o=ca(t),r=la(t),a=da(r),d=oa(t),c="y"===o,l=i.x+i.width/2-s.width/2,h=i.y+i.height/2-s.height/2,u=i[a]/2-s[a]/2;let p;switch(d){case"top":p={x:l,y:i.y-s.height};break;case"bottom":p={x:l,y:i.y+i.height};break;case"right":p={x:i.x+i.width,y:h};break;case"left":p={x:i.x-s.width,y:h};break;default:p={x:i.x,y:i.y}}switch(ra(t)){case"start":p[r]-=u*(n&&c?-1:1);break;case"end":p[r]+=u*(n&&c?-1:1)}return p}async function fa(e,t){var n;void 0===t&&(t={});const{x:i,y:s,platform:o,rects:r,elements:a,strategy:d}=e,{boundary:c="clippingAncestors",rootBoundary:l="viewport",elementContext:h="floating",altBoundary:u=!1,padding:p=0}=sa(t,e),g=(e=>"number"!=typeof e?(e=>({top:0,right:0,bottom:0,left:0,...e}))(e):{top:e,right:e,bottom:e,left:e})(p),f=a[u?"floating"===h?"reference":"floating":h],m=pa(await o.getClippingRect({element:null==(n=await(null==o.isElement?void 0:o.isElement(f)))||n?f:f.contextElement||await(null==o.getDocumentElement?void 0:o.getDocumentElement(a.floating)),boundary:c,rootBoundary:l,strategy:d})),y="floating"===h?{x:i,y:s,width:r.floating.width,height:r.floating.height}:r.reference,S=await(null==o.getOffsetParent?void 0:o.getOffsetParent(a.floating)),I=await(null==o.isElement?void 0:o.isElement(S))&&await(null==o.getScale?void 0:o.getScale(S))||{x:1,y:1},v=pa(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:a,rect:y,offsetParent:S,strategy:d}):y);return{top:(m.top-v.top+g.top)/I.y,bottom:(v.bottom-m.bottom+g.bottom)/I.y,left:(m.left-v.left+g.left)/I.x,right:(v.right-m.right+g.right)/I.x}}function ma(){return"undefined"!=typeof window}function ya(e){return va(e)?(e.nodeName||"").toLowerCase():"#document"}function Sa(e){var t;return(null==e||null==(t=e.ownerDocument)?void 0:t.defaultView)||window}function Ia(e){var t;return null==(t=(va(e)?e.ownerDocument:e.document)||window.document)?void 0:t.documentElement}function va(e){return!!ma()&&(e instanceof Node||e instanceof Sa(e).Node)}function wa(e){return!!ma()&&(e instanceof Element||e instanceof Sa(e).Element)}function ba(e){return!!ma()&&(e instanceof HTMLElement||e instanceof Sa(e).HTMLElement)}function Pa(e){return!(!ma()||"undefined"==typeof ShadowRoot)&&(e instanceof ShadowRoot||e instanceof Sa(e).ShadowRoot)}function xa(e){const{overflow:t,overflowX:n,overflowY:i,display:s}=Ba(e);return/auto|scroll|overlay|hidden|clip/.test(t+i+n)&&"inline"!==s&&"contents"!==s}function Ca(e){return/^(table|td|th)$/.test(ya(e))}function Ta(e){try{if(e.matches(":popover-open"))return!0}catch(t){}try{return e.matches(":modal")}catch(t){return!1}}function Ma(e){const t=wa(e)?Ba(e):e;return th(t.transform)||th(t.translate)||th(t.scale)||th(t.rotate)||th(t.perspective)||!Ea()&&(th(t.backdropFilter)||th(t.filter))||Jl.test(t.willChange||"")||eh.test(t.contain||"")}function Ea(){return null==Id&&(Id="undefined"!=typeof CSS&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),Id}function ka(e){return/^(html|body|#document)$/.test(ya(e))}function Ba(e){return Sa(e).getComputedStyle(e)}function Aa(e){return wa(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ra(e){if("html"===ya(e))return e;const t=e.assignedSlot||e.parentNode||Pa(e)&&e.host||Ia(e);return Pa(t)?t.host:t}function Fa(e){const t=Ra(e);return ka(t)?e.ownerDocument?e.ownerDocument.body:e.body:ba(t)&&xa(t)?t:Fa(t)}function Ka(e,t,n){var i;void 0===t&&(t=[]),void 0===n&&(n=!0);const s=Fa(e),o=s===(null==(i=e.ownerDocument)?void 0:i.body),r=Sa(s);if(o){const e=Da(r);return t.concat(r,r.visualViewport||[],xa(s)?s:[],e&&n?Ka(e):[])}return t.concat(s,Ka(s,[],n))}function Da(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function La(e){const t=Ba(e);let n=parseFloat(t.width)||0,i=parseFloat(t.height)||0;const s=ba(e),o=s?e.offsetWidth:n,r=s?e.offsetHeight:i,a=Hl(n)!==o||Hl(i)!==r;return a&&(n=o,i=r),{width:n,height:i,$:a}}function Ya(e){return wa(e)?e:e.contextElement}function Xa(e){const t=Ya(e);if(!ba(t))return Wl(1);const n=t.getBoundingClientRect(),{width:i,height:s,$:o}=La(t);let r=(o?Hl(n.width):n.width)/i,a=(o?Hl(n.height):n.height)/s;return r&&Number.isFinite(r)||(r=1),a&&Number.isFinite(a)||(a=1),{x:r,y:a}}function Oa(e){const t=Sa(e);return Ea()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:nh}function za(e,t,n,i){void 0===t&&(t=!1),void 0===n&&(n=!1);const s=e.getBoundingClientRect(),o=Ya(e);let r=Wl(1);t&&(i?wa(i)&&(r=Xa(i)):r=Xa(e));const a=((e,t,n)=>(void 0===t&&(t=!1),!(!n||t&&n!==Sa(e))&&t))(o,n,i)?Oa(o):Wl(0);let d=(s.left+a.x)/r.x,c=(s.top+a.y)/r.y,l=s.width/r.x,h=s.height/r.y;if(o){const e=Sa(o),t=i&&wa(i)?Sa(i):i;let n=e,s=Da(n);for(;s&&i&&t!==n;){const e=Xa(s),t=s.getBoundingClientRect(),i=Ba(s),o=t.left+(s.clientLeft+parseFloat(i.paddingLeft))*e.x,r=t.top+(s.clientTop+parseFloat(i.paddingTop))*e.y;d*=e.x,c*=e.y,l*=e.x,h*=e.y,d+=o,c+=r,n=Sa(s),s=Da(n)}}return pa({width:l,height:h,x:d,y:c})}function Na(e,t){const n=Aa(e).scrollLeft;return t?t.left+n:za(Ia(e)).left+n}function $a(e,t){const n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-Na(e,n),y:n.top+t.scrollTop}}function _a(e,t,n){let i;if("viewport"===t)i=((e,t)=>{const n=Sa(e),i=Ia(e),s=n.visualViewport;let o=i.clientWidth,r=i.clientHeight,a=0,d=0;if(s){o=s.width,r=s.height;const e=Ea();(!e||e&&"fixed"===t)&&(a=s.offsetLeft,d=s.offsetTop)}const c=Na(i);if(c<=0){const e=i.ownerDocument,t=e.body,n=getComputedStyle(t),s="CSS1Compat"===e.compatMode&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,r=Math.abs(i.clientWidth-t.clientWidth-s);r<=25&&(o-=r)}else c<=25&&(o+=c);return{width:o,height:r,x:a,y:d}})(e,n);else if("document"===t)i=(e=>{const t=Ia(e),n=Aa(e),i=e.ownerDocument.body,s=_l(t.scrollWidth,t.clientWidth,i.scrollWidth,i.clientWidth),o=_l(t.scrollHeight,t.clientHeight,i.scrollHeight,i.clientHeight);let r=-n.scrollLeft+Na(e);const a=-n.scrollTop;return"rtl"===Ba(i).direction&&(r+=_l(t.clientWidth,i.clientWidth)-s),{width:s,height:o,x:r,y:a}})(Ia(e));else if(wa(t))i=((e,t)=>{const n=za(e,!0,"fixed"===t),i=n.top+e.clientTop,s=n.left+e.clientLeft,o=ba(e)?Xa(e):Wl(1);return{width:e.clientWidth*o.x,height:e.clientHeight*o.y,x:s*o.x,y:i*o.y}})(t,n);else{const n=Oa(e);i={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return pa(i)}function Ha(e,t){const n=Ra(e);return!(n===t||!wa(n)||ka(n))&&("fixed"===Ba(n).position||Ha(n,t))}function Ua(e,t){const n=t.get(e);if(n)return n;let i=Ka(e,[],!1).filter(e=>wa(e)&&"body"!==ya(e)),s=null;const o="fixed"===Ba(e).position;let r=o?Ra(e):e;for(;wa(r)&&!ka(r);){const t=Ba(r),n=Ma(r);n||"fixed"!==t.position||(s=null),(o?!n&&!s:!n&&"static"===t.position&&s&&("absolute"===s.position||"fixed"===s.position)||xa(r)&&!n&&Ha(e,r))?i=i.filter(e=>e!==r):s=t,r=Ra(r)}return t.set(e,i),i}function Wa(e,t,n){function i(){c.x=Na(o)}const s=ba(t),o=Ia(t),r="fixed"===n,a=za(e,!0,r,t);let d={scrollLeft:0,scrollTop:0};const c=Wl(0);if(s||!s&&!r)if(("body"!==ya(t)||xa(o))&&(d=Aa(t)),s){const e=za(t,!0,r,t);c.x=e.x+t.clientLeft,c.y=e.y+t.clientTop}else o&&i();r&&!s&&o&&i();const l=!o||s||r?Wl(0):$a(o,d);return{x:a.left+d.scrollLeft-c.x-l.x,y:a.top+d.scrollTop-c.y-l.y,width:a.width,height:a.height}}function qa(e){return"static"===Ba(e).position}function Va(e,t){if(!ba(e)||"fixed"===Ba(e).position)return null;if(t)return t(e);let n=e.offsetParent;return Ia(e)===n&&(n=n.ownerDocument.body),n}function Ga(e,t){const n=Sa(e);if(Ta(e))return n;if(!ba(e)){let t=Ra(e);for(;t&&!ka(t);){if(wa(t)&&!qa(t))return t;t=Ra(t)}return n}let i=Va(e,t);for(;i&&Ca(i)&&qa(i);)i=Va(i,t);return i&&ka(i)&&qa(i)&&!Ma(i)?n:i||(e=>{let t=Ra(e);for(;ba(t)&&!ka(t);){if(Ma(t))return t;if(Ta(t))return null;t=Ra(t)}return null})(e)||n}function ja(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function Qa({viewport:e,fallbackPlacements:t,floatingRef:n,getReferenceElement:i,onPlacementChange:s,offset:o,placement:r,visible:a=!0}){dd(()=>{const d=i(),c=n.current;if(!d||!c)return;let l=!1,h=0;c.style.visibility="hidden";const u=()=>{const e=++h,n=Za("--toolbar-floating-shift-padding",8),i=o??Za("--toolbar-floating-offset",38),u={top:Za("--toolbar-floating-safe-top",64),right:n,bottom:n,left:n};((e,t,n)=>{const i={platform:ih,...n},s={...i.platform,_c:new Map};return(async(e,t,n)=>{const{placement:i="bottom",strategy:s="absolute",middleware:o=[],platform:r}=n,a=r.detectOverflow?r:{...r,detectOverflow:fa},d=await(null==r.isRTL?void 0:r.isRTL(t));let c=await r.getElementRects({reference:e,floating:t,strategy:s}),{x:l,y:h}=ga(c,i,d),u=i,p=0;const g={};for(let f=0;f<o.length;f++){const n=o[f];if(!n)continue;const{name:m,fn:y}=n,{x:S,y:I,data:v,reset:w}=await y({x:l,y:h,initialPlacement:i,placement:u,strategy:s,middlewareData:g,rects:c,platform:a,elements:{reference:e,floating:t}});l=null!=S?S:l,h=null!=I?I:h,g[m]={...g[m],...v},w&&p<50&&(p++,"object"==typeof w&&(w.placement&&(u=w.placement),w.rects&&(c=!0===w.rects?await r.getElementRects({reference:e,floating:t,strategy:s}):w.rects),({x:l,y:h}=ga(c,u,d))),f=-1)}return{x:l,y:h,placement:u,strategy:s,middlewareData:g}})(e,t,{...i,platform:s})})(d,c,{strategy:"fixed",placement:r,middleware:[sh(i),rh({fallbackPlacements:[...t],padding:u}),oh({padding:u})]}).then(({placement:t,x:n,y:i})=>{l||e!==h||(c.dataset.placement=t,s?.(t),c.style.transform=`translate3d(${Math.round(n)}px, ${Math.round(i)}px, 0)`,c.style.visibility=a?"visible":"hidden")})},p=function(e,t,n,i){void 0===i&&(i={});const{ancestorScroll:s=!0,ancestorResize:o=!0,elementResize:r="function"==typeof ResizeObserver,layoutShift:a="function"==typeof IntersectionObserver,animationFrame:d=!1}=i,c=Ya(e),l=s||o?[...c?Ka(c):[],...t?Ka(t):[]]:[];l.forEach(e=>{s&&e.addEventListener("scroll",n,{passive:!0}),o&&e.addEventListener("resize",n)});const h=c&&a?((e,t)=>{function n(){var e;clearTimeout(i),null==(e=s)||e.disconnect(),s=null}let i,s=null;const o=Ia(e);return function r(a,d){function c(t){const n=t[0].intersectionRatio;if(n!==d){if(!m)return r();n?r(!1,n):i=setTimeout(()=>{r(!1,1e-7)},1e3)}1!==n||ja(l,e.getBoundingClientRect())||r(),m=!1}void 0===a&&(a=!1),void 0===d&&(d=1),n();const l=e.getBoundingClientRect(),{left:h,top:u,width:p,height:g}=l;if(a||t(),!p||!g)return;const f={rootMargin:-Ul(u)+"px "+-Ul(o.clientWidth-(h+p))+"px "+-Ul(o.clientHeight-(u+g))+"px "+-Ul(h)+"px",threshold:_l(0,$l(1,d))||1};let m=!0;try{s=new IntersectionObserver(c,{...f,root:o.ownerDocument})}catch(y){s=new IntersectionObserver(c,f)}s.observe(e)}(!0),n})(c,n):null;let u,p=-1,g=null;r&&(g=new ResizeObserver(e=>{let[i]=e;i&&i.target===c&&g&&t&&(g.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var e;null==(e=g)||e.observe(t)})),n()}),c&&!d&&g.observe(c),t&&g.observe(t));let f=d?za(e):null;return d&&function t(){const i=za(e);f&&!ja(f,i)&&n(),f=i,u=requestAnimationFrame(t)}(),n(),()=>{var e;l.forEach(e=>{s&&e.removeEventListener("scroll",n),o&&e.removeEventListener("resize",n)}),h?.(),null==(e=g)||e.disconnect(),g=null,d&&cancelAnimationFrame(u)}}(d,c,u,{ancestorResize:!0,ancestorScroll:!0,elementResize:!0,layoutShift:!0}),g=e.subscribe(u);return u(),()=>{l=!0,c.style.visibility="hidden",p(),g()}},[e,t,n,i,s,o,r,a])}function Za(e,t){if("undefined"==typeof document)return t;const n=getComputedStyle(document.documentElement).getPropertyValue(e).trim();if(!n)return t;const i=Number.parseFloat(n);return Number.isFinite(i)?n.endsWith("rem")?16*i:i:t}function Ja(e){const t=Zo();return t?Sd(md(ed,{...e}),t):null}function ed({fallbackPlacements:e=ah,offset:t=8,placement:n="top",referenceElement:i,...s}){const o=nr(),r=ud(null),a=rd(()=>i,[i]);return Vo(r),Qa({viewport:o.viewport.state,fallbackPlacements:e,floatingRef:r,getReferenceElement:a,offset:t,placement:n}),md("div",{...s,ref:r})}function td(){return ad(lh)}function nd({children:e,className:t,dataUi:n="floating-selection-toolbar-slot",horizontalAlign:i="start",offset:s,visible:o=!0}){const r=nr(),a=ir(r.selection.state),d=ir(r.viewport.state),c=ud(null),l=ud(null),[h,u]=pd("center"===i?"top":"top-start"),p=a.pageBounds??(a.anchorPagePoint?{x:a.anchorPagePoint.x,y:a.anchorPagePoint.y,width:0,height:0}:null),g=o&&null!==p,f=g&&!a.isTranslating,m=rd(()=>c.current,[p?.height,p?.width,p?.x,p?.y]),y=rd(()=>c.current?.getBoundingClientRect()??null,[]),S=hd(()=>({placement:h,getContentBounds:y}),[p?.height,p?.width,p?.x,p?.y,y,h,d.pageTransform]);return Vo(l),Qa({viewport:r.viewport.state,fallbackPlacements:"center"===i?ch:dh,floatingRef:l,getReferenceElement:m,onPlacementChange:u,offset:s,placement:"center"===i?"top":"top-start",visible:f}),g&&p?yd(fd,{children:[md("div",{"data-ui":`${n}-page-space`,className:"land-canvas__floating-selection-page-space",style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",transform:d.pageTransform,transformOrigin:"0 0"},children:md("div",{ref:c,"aria-hidden":"true",style:{position:"absolute",left:p.x,top:p.y,width:p.width,height:p.height,pointerEvents:"none"}})}),md("div",{ref:l,"data-ui":n,className:id("land-canvas__floating-selection-anchor",t),style:{position:"fixed",left:0,top:0,visibility:"hidden",willChange:"transform"},children:md(lh.Provider,{value:S,children:e})})]}):null}function id(...e){return e.filter(Boolean).join(" ")}import{createContext as sd,memo as od,useCallback as rd,useContext as ad,useEffect as dd,useId as cd,useLayoutEffect as ld,useMemo as hd,useRef as ud,useState as pd,useSyncExternalStore as gd}from"react";import{Fragment as fd,jsx as md,jsxs as yd}from"react/jsx-runtime";import{createPortal as Sd}from"react-dom";var Id,vd=class{graph;name;current;isEqual;lastChangedEpoch;consumers=new Set;constructor(e,t,n,i){this.graph=e,this.name=t,this.current=n,this.isEqual=i,this.lastChangedEpoch=e.getEpoch()}get(){return this.graph.trackDependency(this),this.current}peek(){return this.current}__unsafe__isEqual(e,t){return this.isEqual?this.isEqual(e,t):Object.is(e,t)}__unsafe__restore(e,t){this.current=e,this.lastChangedEpoch=t}set(e){const t=this.current;return this.__unsafe__isEqual(t,e)?t:(this.graph.noteInitialValue(this,t,this.lastChangedEpoch),this.graph.advanceEpoch(),this.lastChangedEpoch=this.graph.getEpoch(),this.current=e,this.graph.atomDidChange(this),e)}update(e){return this.set(e(this.current))}},wd=Symbol("UNINITIALIZED"),bd=class{graph;name;derive;isEqual;isComputed=!0;lastChangedEpoch;lastCheckedEpoch=-1;consumers=new Set;state=wd;dependencies=[];dependencyEpochs=[];consumerNodeValue=null;constructor(e,t,n,i){this.graph=e,this.name=t,this.derive=n,this.isEqual=i,this.lastChangedEpoch=e.getEpoch()}get(){return this.graph.trackDependency(this),this.peek()}peek(){if(this.lastCheckedEpoch===this.graph.getEpoch())return this.state;if(this.state!==wd&&!this.haveDependenciesChanged())return this.lastCheckedEpoch=this.graph.getEpoch(),this.state;let e,t;this.graph.startCapture(this.consumerNode);try{e=this.derive(this.state)}finally{t=this.graph.stopCapture()}for(const n of this.dependencies)t.has(n)||n.consumers.delete(this.consumerNode);this.dependencies=[...t],this.dependencyEpochs=this.dependencies.map(e=>e.lastChangedEpoch);for(const n of this.dependencies)n.consumers.add(this.consumerNode);return this.state!==wd&&(this.isEqual?this.isEqual(this.state,e):Object.is(this.state,e))||(this.state=e,this.graph.advanceEpoch(),this.lastChangedEpoch=this.graph.getEpoch()),this.lastCheckedEpoch=this.graph.getEpoch(),this.state}get consumerNode(){return this.consumerNodeValue||(this.consumerNodeValue={type:"computed",signal:this}),this.consumerNodeValue}haveDependenciesChanged(){for(let e=0;e<this.dependencies.length;e++){const t=this.dependencies[e];if(t.peek(),t.lastChangedEpoch!==this.dependencyEpochs[e])return!0}return!1}},Pd=class{graph;name;fn;options;dependencies=[];dependencyEpochs=[];lastReactedEpoch=-1;isActive=!1;consumerNode={type:"effect",notify:()=>this.maybeSchedule()};constructor(e,t,n,i){this.graph=e,this.name=t,this.fn=n,this.options=i}attach(){this.isActive=!0,this.execute()}detach(){this.isActive=!1;for(const e of this.dependencies)e.consumers.delete(this.consumerNode);this.dependencies=[],this.dependencyEpochs=[]}maybeSchedule(){this.isActive&&this.lastReactedEpoch!==this.graph.getEpoch()&&(this.haveDependenciesChanged()?this.options?.scheduleEffect?this.options.scheduleEffect(()=>this.execute()):this.execute():this.lastReactedEpoch=this.graph.getEpoch())}execute(){if(this.isActive){for(const e of this.dependencies)e.consumers.delete(this.consumerNode);this.graph.startCapture(this.consumerNode);try{this.fn()}finally{const e=this.graph.stopCapture();this.dependencies=[...e],this.dependencyEpochs=this.dependencies.map(e=>e.lastChangedEpoch);for(const t of this.dependencies)t.consumers.add(this.consumerNode);this.lastReactedEpoch=this.graph.getEpoch()}}}haveDependenciesChanged(){for(let e=0;e<this.dependencies.length;e++){const t=this.dependencies[e];if(t.peek(),t.lastChangedEpoch!==this.dependencyEpochs[e])return!0}return!1}},xd=null,Cd=class{epoch=0;currentTransaction=null;captureStack=null;atom=(e,t,n)=>((e,t,n,i)=>new vd(e,t,n,i?.isEqual))(this,e,t,n);computed=(e,t,n)=>((e,t,n,i)=>new bd(e,t,n,i?.isEqual))(this,e,t,n);effect=(e,t,n)=>((e,t,n,i)=>{const s=new Pd(e,t,n,i);return s.attach(),()=>s.detach()})(this,e,t,n);transact=e=>{if(this.currentTransaction)return void e();const t={initialAtomSnapshots:new Map};this.currentTransaction=t;try{e()}catch(s){throw this.restoreInitialAtomSnapshots(t),this.currentTransaction=null,s}const n=[];let i=!1;for(const[o,r]of t.initialAtomSnapshots){const e=o.peek();o.__unsafe__isEqual(r.value,e)?(o.__unsafe__restore(r.value,r.lastChangedEpoch),i=!0):n.push(o)}i&&this.advanceEpoch(),this.currentTransaction=null,this.flushChanges(n)};getEpoch(){return this.epoch}isComputingSignal(){return"computed"===this.captureStack?.consumer.type}advanceEpoch(){return++this.epoch}noteInitialValue(e,t,n){this.currentTransaction&&!this.currentTransaction.initialAtomSnapshots.has(e)&&this.currentTransaction.initialAtomSnapshots.set(e,{value:t,lastChangedEpoch:n})}startCapture(e){this.captureStack={consumer:e,dependencies:new Set,previous:this.captureStack},xd={graph:this,previous:xd}}stopCapture(){if(!this.captureStack)throw new Error("Cannot stop dependency capture because no capture is active.");if(xd?.graph!==this)throw new Error("SignalGraph dependency capture stack is out of order.");const e=this.captureStack;return this.captureStack=e.previous,xd=xd.previous,e.dependencies}trackDependency(e){if(xd&&xd.graph!==this)throw new Error("Cannot read signals across different SignalGraph instances while capturing dependencies.");this.captureStack&&(this.captureStack.dependencies.add(e),e.consumers.add(this.captureStack.consumer))}atomDidChange(e){this.currentTransaction||this.flushChanges([e])}restoreInitialAtomSnapshots(e){if(0!==e.initialAtomSnapshots.size){for(const[t,n]of e.initialAtomSnapshots)t.__unsafe__restore(n.value,n.lastChangedEpoch);this.advanceEpoch()}}flushChanges(e){const t=new Set,n=new Set,i=e=>{for(const s of e)n.has(s)||(n.add(s),"effect"===s.type?t.add(s):i(s.signal.consumers))};for(const a of e)i(a.consumers);let s,o=!1;for(const a of t)try{a.notify()}catch(r){o||(s=r,o=!0)}if(o)throw s}},Td=class{undoStack=[];redoStack=[];get canUndo(){return this.undoStack.length>0}get canRedo(){return this.redoStack.length>0}clear(){this.undoStack.length=0,this.redoStack.length=0}append(e,n="change"){t(e)||(this.undoStack.push(((e,t)=>({forward:t,inverse:i(t),label:e}))(n,e)),this.redoStack.length=0)}undo(){const e=this.undoStack.pop()??null;return e?(this.redoStack.push(e),e):null}redo(){const e=this.redoStack.pop()??null;return e?(this.undoStack.push(e),e):null}rollbackUndo(e){if(this.redoStack.at(-1)!==e)throw new Error("Cannot roll back an outdated history undo.");this.redoStack.pop(),this.undoStack.push(e)}rollbackRedo(e){if(this.undoStack.at(-1)!==e)throw new Error("Cannot roll back an outdated history redo.");this.undoStack.pop(),this.redoStack.push(e)}getEntries(){return this.undoStack}},Md=class{signals;records;activeTransaction=null;recordAtoms=new Map;revisionAtom;draftRevisionAtom;listeners=new Set;writeGuard;constructor(t,n={}){this.signals=n.signals??e(),this.revisionAtom=this.signals.atom("store.revision",0),this.draftRevisionAtom=this.signals.atom("store.draftRevision",0),this.records=new Map(t.map(e=>[e.id,e])),this.writeGuard=n.writeGuard}get(e){const t=this.activeTransaction?.journal.get(e);return t?t.after:this.records.get(e)}getRevision(){return this.revisionAtom.get()}getActiveTransactionRevision(){const e=this.activeTransaction;return e?(this.draftRevisionAtom.get(),e.revision):null}getActiveTransactionDiff(){const e=this.activeTransaction;if(!e)throw new Error("Store.getActiveTransactionDiff() requires an active transaction.");return o(e.journal)}getRecordSignal(e){let t=this.recordAtoms.get(e);if(t)return t;const n=this.records.get(e);t=this.signals.atom(`store.record.${e}`,n),this.recordAtoms.set(e,t);const i=this.get(e);return i!==n&&t.set(i),t}getAll(){if(this.signals.isComputingSignal())throw new Error("Store.getAll() cannot run while deriving a computed signal. Read a keyed record or indexed query signal instead.");return Array.from(this.getReadableRecords().values())}getByScope(e){return this.getAll().filter(t=>"scope"in t&&t.scope===e)}listen(e){return this.listeners.add(e),()=>this.listeners.delete(e)}atomic(e,n="system"){if(this.activeTransaction)return void e();let i,s=[],a=!1;try{this.signals.transact(()=>{const i=this.draftRevisionAtom.peek(),a={revision:i,initialDraftRevision:i,journal:new Map};this.activeTransaction=a,this.bumpDraftRevision(a);let d=!1;try{e();const i=o(a.journal);if(t(i))return;const c={source:n,diff:i};this.writeGuard?.(c),r(this.records,a.journal),d=!0,this.revisionAtom.set(this.revisionAtom.peek()+1),this.activeTransaction=null,s=this.notifyListeners(c)}catch(c){throw d||this.restoreTransactionSignals(a),c}finally{this.activeTransaction=null}})}catch(d){i=d,a=!0}if(s.length>0)throw s[0];if(a)throw i}put(e,t="system"){this.atomic(()=>{for(const t of e)this.stageRecord(t.id,t)},t)}remove(e,t="system"){this.atomic(()=>{for(const t of e)this.stageRecord(t,void 0)},t)}applyDiff(e,t="system"){this.atomic(()=>{for(const t of e.added)this.stageRecord(t.id,t);for(const t of e.updated)this.stageRecord(t.after.id,t.after);for(const t of e.removed)this.stageRecord(t.id,void 0)},t)}stageRecord(e,t){const n=this.requireActiveTransaction(),i=this.get(e);if(i===t)return;const s=n.journal.get(e)??{before:this.records.get(e),after:t,moveToEnd:!1};s.after=t,void 0===i&&void 0!==t&&(s.moveToEnd=!0,n.journal.delete(e)),n.journal.set(e,s),this.bumpDraftRevision(n),this.recordAtoms.get(e)?.set(t)}getReadableRecords(){const e=this.activeTransaction;if(!e)return this.records;const t=new Map(this.records);return r(t,e.journal),t}requireActiveTransaction(){if(!this.activeTransaction)throw new Error("Store mutations must run inside store.atomic");return this.activeTransaction}bumpDraftRevision(e){const t=this.draftRevisionAtom.peek()+1;e.revision=t,this.draftRevisionAtom.set(t)}restoreTransactionSignals(e){for(const[t]of e.journal)this.recordAtoms.get(t)?.set(this.records.get(t));this.draftRevisionAtom.set(e.initialDraftRevision)}notifyListeners(e){const t=[];for(const i of this.listeners)try{i(e)}catch(n){t.push(n)}return t}},Ed="document:main",kd="page:default",Bd="session:main",Ad={x:0,y:0,z:1},Rd=Symbol("editorStore"),Fd=new Set,Kd=class{editor;suppressedReactionIds=Fd;constructor(e){this.editor=e}getSuppressedReactionIds(){return this.suppressedReactionIds}runWithSuppressedReactions(e,t,...n){const i=this.suppressedReactionIds,s=new Set(i);for(const o of e)s.add(o);if(s.size===i.size)return w(t);this.suppressedReactionIds=s;try{return w(t)}finally{this.suppressedReactionIds=i}}getConflictingBindings(e){const t=this.getExclusiveBindingKey(e);return t?this.getAllBindings().filter(n=>n.id!==e.id&&n.type===e.type&&this.getExclusiveBindingKey(n)===t):[]}canBind(e){const t=this.editor.shapes.get(e.fromId),n=this.editor.shapes.get(e.toId);return!(!t||!n)&&(this.editor.bindings.getUtil(e).canBind?.(this.editor,e,{fromShape:t,toShape:n})??!0)}syncCreatedBinding(e,t){const n=this.editor.bindings.getUtil(e).onBindingCreate?.(this.editor,e);this.applyEffect(n,t,e.id),this.syncShapeCompanionState([e.fromId,e.toId],t,e.id)}syncUpdatedBinding(e,t,n){const i=this.editor.bindings.getUtil(t).onBindingUpdate?.(this.editor,e,t);this.applyEffect(i,n,t.id),this.syncShapeCompanionState([t.fromId,t.toId],n,t.id)}repairLoadedBindings(e){y(this.editor).atomic(()=>{const t=new Set,n=new Set;for(const i of this.getAllBindings()){const s=this.editor.shapes.get(i.fromId),o=this.editor.shapes.get(i.toId);if(!s||!o){this.applyEffect(this.editor.bindings.getUtil(i).onInvalidBindingLoad?.(this.editor,i),e,i.id),y(this.editor).remove([i.id],e);continue}if(!this.canBind(i)){this.applyEffect(this.editor.bindings.getUtil(i).onInvalidBindingLoad?.(this.editor,i),e,i.id),y(this.editor).remove([i.id],e);continue}const r=this.getExclusiveBindingKey(i);if(r){if(t.has(r)){y(this.editor).remove([i.id],e);continue}t.add(r)}const a=this.editor.bindings.getUtil(i).onBindingLoad?.(this.editor,i);this.applyEffect(a,e,i.id),n.add(i.fromId),n.add(i.toId)}this.syncShapeCompanionState(Array.from(n),e)},e)}handleShapeChanges(e,t){if(0===e.length)return;const n=this.suppressedReactionIds,i=new Set(e.map(e=>e.after.id)),s=new Set,o=new Set,r=(e,i,r,a)=>{for(const d of this.editor.bindings.getForShape(e.id)){if(n.has(d.id))continue;if("ancestry"===a&&o.has(d.id))continue;const c=`${d.id}:${e.id}:${a}`;if(s.has(c))continue;s.add(c),"self"===a&&o.add(d.id);const l=d.fromId===e.id?"from":"to",h=this.editor.bindings.getUtil(d).onAfterShapeChange?.(this.editor,d,{before:i,after:r,role:l,reason:a});this.applyEffect(h,t,d.id)}};for(const a of e)r(a.after,a.before,a.after,"self");for(const a of e)if(v(a))for(const e of this.editor.layers.getDescendantIds(a.after.id)){if(i.has(e))continue;const t=this.editor.shapes.get(e);t&&r(t,t,t,"ancestry")}this.syncShapeCompanionState(e.filter(({before:e,after:t})=>e.isHidden!==t.isHidden||e.isLocked!==t.isLocked).map(({after:e})=>e.id),t)}getShapeCompanionRootId(e){return this.getShapeCompanionRootIds([e]).get(e)??e}getShapeCompanionRootIds(e,t=this.getAllBindings()){const n=I(e,t,e=>this.editor.bindings.getUtil(e)),i=new Map;for(const s of e){const e=n.get(s)??s;i.set(s,this.editor.shapes.get(e)?e:s)}return i}getShapeCompanionMemberIds(e){const t=this.getShapeCompanionContext(),n=[],i=new Set;for(const s of e){const e=t.rootIdByShapeId.get(s)??s;if(t.shapeById.has(e))for(const s of[e,...t.memberIdsByRootId.get(e)??[]])i.has(s)||(i.add(s),n.push(s))}return n}cleanupBindingsForDeletedShapes(e,t){if(0===e.length)return;const n=new Set(e),i=new Set;for(const s of e){const e=this.editor.shapes.get(s);if(e)for(const o of this.editor.bindings.getForShape(s)){if(i.has(o.id))continue;i.add(o.id);const r=o.fromId===s?"from":"to";if("to"===r&&n.has(o.fromId)){y(this.editor).remove([o.id],t);continue}const a=this.editor.bindings.getUtil(o).onBeforeDeleteShape?.(this.editor,o,{shape:e,role:r});this.applyEffect(a,t,o.id)}}}cleanupBindings(e,t){for(const n of e){const e=this.editor.bindings.get(n);if(!e)continue;const i=this.editor.bindings.getUtil(e).onBeforeDeleteBinding?.(this.editor,e);this.applyEffect(i,t,e.id)}}applyEffect(e,t,n){if(!e)return;const i=new Set(e.suppressBindingIds??[]);n&&i.add(n),this.runWithSuppressedReactions(i,()=>{e.deleteBindingIds&&e.deleteBindingIds.length>0&&y(this.editor).remove(Array.from(new Set(e.deleteBindingIds)),t),e.bindings&&e.bindings.length>0&&y(this.editor).put(e.bindings,t),e.shapes&&e.shapes.length>0&&this.editor.commands.updateShapes(e.shapes.map(e=>({id:e.id,x:e.x,y:e.y,rotation:e.rotation,scaleX:e.scaleX,scaleY:e.scaleY,opacity:e.opacity,isHidden:e.isHidden,isLocked:e.isLocked,parentId:e.parentId,index:e.index,props:e.props,meta:e.meta})),{source:t}),e.deleteShapeIds&&e.deleteShapeIds.length>0&&this.editor.commands.deleteShapes(Array.from(new Set(e.deleteShapeIds)),{source:t})})}syncShapeCompanionState(e,t,n){if(0===e.length)return;const i=this.getShapeCompanionContext(),s=new Set,o=[];for(const r of e){const e=i.rootIdByShapeId.get(r)??r;if(s.has(e))continue;s.add(e);const t=i.shapeById.get(e);if(t)for(const n of i.memberIdsByRootId.get(e)??[]){const e=i.shapeById.get(n);!e||e.isHidden===t.isHidden&&e.isLocked===t.isLocked||o.push({...e,isHidden:t.isHidden,isLocked:t.isLocked})}}o.length>0&&this.applyEffect({shapes:o},t,n)}getShapeCompanionContext(){const e=y(this.editor).getAll(),t=e.filter(u).sort((e,t)=>e.parentId===t.parentId?e.index.localeCompare(t.index)||e.id.localeCompare(t.id):e.parentId.localeCompare(t.parentId)),n=new Map(t.map(e=>[e.id,e])),i=new Map(I(t.map(e=>e.id),e.filter(g),e=>this.editor.bindings.getUtil(e))),s=new Map;for(const o of t){const e=i.get(o.id)??o.id,t=n.has(e)?e:o.id;if(i.set(o.id,t),t===o.id)continue;const r=s.get(t);r?r.push(o.id):s.set(t,[o.id])}return{memberIdsByRootId:s,rootIdByShapeId:i,shapeById:n}}getAllBindings(){return y(this.editor).getAll().filter(g).sort((e,t)=>e.id.localeCompare(t.id))}getExclusiveBindingKey(e){const t=this.editor.bindings.getUtil(e).getExclusiveBindingKey?.(e);return t?`${e.type}:${t}`:null}},Dd=class{registry=new Map;register(e){this.registry.set(e.type,e)}values(){return this.registry.values()}get(e){const t=this.registry.get(e);if(!t)throw new Error(`Missing binding util for type "${e}"`);return t}},Ld=class e{x;y;constructor(e,t){this.x=e,this.y=t}add(t){return new e(this.x+t.x,this.y+t.y)}sub(t){return new e(this.x-t.x,this.y-t.y)}mul(t){return new e(this.x*t,this.y*t)}div(t){return new e(this.x/t,this.y/t)}len2(){return this.x*this.x+this.y*this.y}len(){return Math.sqrt(this.len2())}dist2(e){const t=this.x-e.x,n=this.y-e.y;return t*t+n*n}dist(e){return Math.sqrt(this.dist2(e))}rot(t){const n=Math.cos(t),i=Math.sin(t);return new e(this.x*n-this.y*i,this.x*i+this.y*n)}per(){return new e(-this.y,this.x)}normalize(){const t=this.len();return 0===t?new e(0,0):this.div(t)}equals(e){return this.x===e.x&&this.y===e.y}clone(){return new e(this.x,this.y)}static From(t,n){return new e(t,n)}static Zero(){return new e(0,0)}static Med(t,n){return new e((t.x+n.x)/2,(t.y+n.y)/2)}static Lrp(t,n,i){return new e(t.x+(n.x-t.x)*i,t.y+(n.y-t.y)*i)}static Dist(e,t){return e.dist(t)}static Dist2(e,t){return e.dist2(t)}static Angle(e,t){return Math.atan2(t.y-e.y,t.x-e.x)}static Nudge(e,t,n){const i=t.sub(e),s=i.len();return 0===s?e.clone():e.add(i.mul(n/s))}static RotWith(t,n,i){const s=t.x-n.x,o=t.y-n.y,r=Math.cos(i),a=Math.sin(i);return new e(n.x+s*r-o*a,n.y+s*a+o*r)}static IsNaN(e){return isNaN(e.x)||isNaN(e.y)}},Yd=class e{x;y;w;h;constructor(e,t,n,i){this.x=e,this.y=t,this.w=n,this.h=i}get minX(){return this.x}get minY(){return this.y}get maxX(){return this.x+this.w}get maxY(){return this.y+this.h}get center(){return new Ld(this.x+this.w/2,this.y+this.h/2)}containsPoint(e){return e.x>=this.minX&&e.x<=this.maxX&&e.y>=this.minY&&e.y<=this.maxY}containsBox(e){return e.minX>=this.minX&&e.maxX<=this.maxX&&e.minY>=this.minY&&e.maxY<=this.maxY}intersects(e){return this.minX<e.maxX&&this.maxX>e.minX&&this.minY<e.maxY&&this.maxY>e.minY}expand(t){return new e(this.x-t,this.y-t,this.w+2*t,this.h+2*t)}clone(){return new e(this.x,this.y,this.w,this.h)}static FromPoints(t){let n=1/0,i=1/0,s=-1/0,o=-1/0;for(const e of t)n=Math.min(n,e.x),i=Math.min(i,e.y),s=Math.max(s,e.x),o=Math.max(o,e.y);return new e(n,i,s-n,o-i)}},Xd=["fill-blue","fill-green","fill-red","fill-amber","fill-white","fill-slate","stroke-blue","stroke-green","stroke-red","stroke-orange","stroke-slate","stroke-muted","text-slate","text-blue","text-green","text-red"],Od=Object.fromEntries(Xd.map(e=>[e,`--land-shape-${e}`])),zd={"fill-blue":"#dbeafe","fill-green":"#dcfce7","fill-red":"#fee2e2","fill-amber":"#fff7ed","fill-white":"#f8fafc","fill-slate":"#e2e8f0","stroke-blue":"#1d4ed8","stroke-green":"#15803d","stroke-red":"#dc2626","stroke-orange":"#ea580c","stroke-slate":"#334155","stroke-muted":"#94a3b8","text-slate":"#0f172a","text-blue":"#1d4ed8","text-green":"#15803d","text-red":"#dc2626"},Nd=class{registry=new Map;register(e){this.registry.set(e.type,e)}get(e){return this.registry.get(e)??null}has(e){return this.registry.has(e)}unregister(e){return this.registry.delete(e)}values(){return this.registry.values()}},$d=class e{a;b;c;d;e;f;constructor(e,t,n,i,s,o){this.a=e,this.b=t,this.c=n,this.d=i,this.e=s,this.f=o}static Identity(){return new e(1,0,0,1,0,0)}static Translate(t,n){return new e(1,0,0,1,t,n)}static Rotate(t){const n=Math.cos(t),i=Math.sin(t);return new e(n,i,-i,n,0,0)}static Scale(t,n){return new e(t,0,0,n,0,0)}compose(t){return new e(this.a*t.a+this.c*t.b,this.b*t.a+this.d*t.b,this.a*t.c+this.c*t.d,this.b*t.c+this.d*t.d,this.a*t.e+this.c*t.f+this.e,this.b*t.e+this.d*t.f+this.f)}applyToPoint(e){return new Ld(this.a*e.x+this.c*e.y+this.e,this.b*e.x+this.d*e.y+this.f)}determinant(){return this.a*this.d-this.b*this.c}getMaximumLinearScale(){const e=this.a*this.a+this.b*this.b+this.c*this.c+this.d*this.d,t=this.determinant(),n=Math.max(0,e*e-4*t*t);return Math.sqrt((e+Math.sqrt(n))/2)}tryInvert(t=0){const n=this.determinant(),i=Number.isFinite(t)?Math.max(0,t):0;if(!Number.isFinite(n)||Math.abs(n)<=i)return null;const s=1/n;return new e(this.d*s,-this.b*s,-this.c*s,this.a*s,(this.c*this.f-this.d*this.e)*s,(this.b*this.e-this.a*this.f)*s)}invert(){return this.tryInvert()??e.Identity()}toCssString(){return`matrix(${this.a},${this.b},${this.c},${this.d},${this.e},${this.f})`}toSvgString(){return`matrix(${this.a} ${this.b} ${this.c} ${this.d} ${this.e} ${this.f})`}static ForShape(t,n,i,s=1,o=1){const r=e.Translate(t,n),a=0===i?e.Identity():e.Rotate(i),d=1===s&&1===o?e.Identity():e.Scale(s,o);return r.compose(a).compose(d)}},_d=class{values=new Map;disposers=[];isDisposed=!1;provide(e,t,n){if(this.isDisposed)throw new Error("Cannot provide an editor runtime after disposal.");if(this.values.has(e.id))throw new Error(`Editor runtime already provided: ${e.id}`);return this.values.set(e.id,t),n&&this.disposers.push(()=>n(t)),t}get(e){return this.values.get(e.id)??null}require(e){const t=this.get(e);if(null===t)throw new Error(`Missing editor runtime: ${e.id}`);return t}onDispose(e){this.isDisposed?e():this.disposers.push(e)}dispose(){if(this.isDisposed)return;this.isDisposed=!0;let e=null;try{for(const n of this.disposers.splice(0).reverse())try{n()}catch(t){e??=t}}finally{this.values.clear()}if(null!==e)throw e}},Hd=class{registry=new Map;register(e){this.registry.set(e.type,e)}has(e){return this.registry.has(e)}values(){return this.registry.values()}get(e){const t=this.registry.get(e);if(!t)throw new Error(`Missing shape util for type "${e}"`);return t}},Ud=class{editor;activeToolId;isToolLocked;registry=new Map;activeTool=null;constructor(e){this.editor=e,this.activeToolId=e.signals.atom("tools.activeToolId","select"),this.isToolLocked=e.signals.atom("tools.isToolLocked",!1)}register(e,t){this.registry.set(e,t)}hasTool(e){return this.registry.has(e)}select(e,t="system"){this.editor.commands.setActiveTool(e,{source:t})}setLocked(e,t="system"){this.editor.commands.setToolLocked(e,{source:t})}toggleLocked(e="system"){this.setLocked(!this.editor.state.tool.get().isToolLocked,e)}syncActiveTool(e,t="tool_switch"){const n=this.registry.get(e);if(!n)throw new Error(`Unknown tool "${e}"`);this.activeTool&&this.activeToolId.get()===e||(this.activeTool&&(this.editor.interaction.cancel(t),this.activeTool.exit({reason:t})),this.activeToolId.set(e),this.activeTool=n(this.editor),this.activeTool.enter())}dispatch(e,t){return this.activeTool?.dispatch(e,t)}syncLockedState(e){this.isToolLocked.set(e)}isInInitialState(){return this.activeTool?.isInInitialState()??!0}},Wd=new WeakMap,qd=class{editor;nextShapeNumber=1;nextPageNumber=1;nextBindingNumber=1;nextAssetNumber=1;constructor(e){this.editor=e,this.syncCounters()}createPage(e){const t=this.nextPageNumber;return this.nextPageNumber+=1,{id:`page:${t}`,typeName:"page",scope:"document",name:e?.name??`Page ${t}`,index:e?.index??String(t).padStart(4,"0"),meta:e?.meta??{}}}createShape(e){const t=e.parentId??this.editor.state.session.get().currentPageId;if(!this.editor.layers.canReceiveChildren(t))throw new Error("Invalid parent id for shape");const n=this.nextShapeNumber;this.nextShapeNumber+=1;const i=this.editor.shapeUtils.get(e.type).validateProps({...this.editor.shapes.getDefaultProps(e.type),...e.props});return{id:`shape:${n}`,typeName:"shape",scope:"document",type:e.type,parentId:t,index:e.index??this.createShapeIndex(n),x:e.x,y:e.y,rotation:e.rotation??0,scaleX:e.scaleX??1,scaleY:e.scaleY??1,opacity:e.opacity??1,isHidden:e.isHidden??!1,isLocked:e.isLocked??!1,props:i,meta:e.meta??{}}}createBinding(e){const t=e.id??`binding:${this.nextBindingNumber}`;e.id||(this.nextBindingNumber+=1);const n=this.editor.bindingUtils.get(e.type),i=n.validateProps({...n.getDefaultProps(),...e.props});return{id:t,typeName:"binding",scope:"document",type:e.type,fromId:e.fromId,toId:e.toId,props:i,meta:e.meta??{}}}createAsset(e){const t=e.id??`asset:${this.nextAssetNumber}`;return e.id||(this.nextAssetNumber+=1),{id:t,typeName:"asset",scope:"document",type:e.type,props:e.props??{},meta:e.meta??{}}}createShapeIndex(e){return String(e).padStart(6,"0")}syncCounters(){let e=0,t=0,n=0,i=0;for(const s of y(this.editor).getAll())if(u(s))e=Math.max(e,ie(s.id));else if(l(s)){const e=s.id.split(":")[1]??"",n=Number("default"===e?1:e);Number.isFinite(n)&&(t=Math.max(t,n))}else g(s)?n=Math.max(n,ie(s.id)):f(s)&&(i=Math.max(i,ie(s.id)));this.nextShapeNumber=e+1,this.nextPageNumber=t+1,this.nextBindingNumber=n+1,this.nextAssetNumber=i+1}},Vd=new Ld(24,24),Gd={propagation:"stop"},jd={propagation:"stop",clickSequence:"break"},Qd=class{lastPointerDown=null;lastPointerUp=null;currentClickCount=1;createContext(e,t){return"pointer"!==e.type?{origin:t,pointer:null}:("pointer_down"===e.name&&(this.currentClickCount=this.isContinuation(e)?2:1,this.lastPointerDown=it(e)),{origin:t,pointer:{clickCount:this.matchesCurrentPointer(e)?this.currentClickCount:1}})}complete(e,t,n){return"break"===n?.clickSequence?(this.reset(),null):"pointer"!==e.type||"pointer_up"!==e.name?null:this.matchesCurrentPointer(e)?(this.lastPointerUp=it(e),(t.pointer?.clickCount??1)<2||"stop"===n?.propagation?null:{type:"double_click",timestamp:e.timestamp,pointerId:e.pointerId,button:e.button,buttons:e.buttons,pointerType:e.pointerType,screenPoint:e.screenPoint.clone(),pagePoint:e.pagePoint.clone(),pressure:e.pressure,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey}):(this.reset(),null)}isContinuation(e){const t=this.lastPointerDown,n=this.lastPointerUp;return!!(t&&n&&n.timestamp>=t.timestamp&&e.timestamp-n.timestamp<=250&&n.screenPoint.dist2(e.screenPoint)<=1600&&st(t,e)&&st(n,e))}matchesCurrentPointer(e){return!this.lastPointerDown||st(this.lastPointerDown,e)}reset(){this.lastPointerDown=null,this.lastPointerUp=null,this.currentClickCount=1}},Zd={propagation:"stop",clickSequence:"break"},Jd=class{editor;clickRecognizer=new Qd;activeRoutes=new WeakMap;constructor(e){this.editor=e}handle(e){const t=this.activeRoutes.get(e);return t?(t.effect=nt(t.effect,this.routeAfterInputs(e,t.context)),ot(t.effect)):ot(this.routeNewEvent(e,"external"))}cancelInteraction(e,t={}){this.routeNewEvent({type:"cancel",reason:e},"derived",t)}routeNewEvent(e,t,n){const i=this.clickRecognizer.createContext(e,t),s={context:i};this.activeRoutes.set(e,s);try{this.editor.inputs.handleEvent(e),s.effect=nt(s.effect,"cancel"===e.type?this.routeCancellation(e,i,n):this.routeAfterInputs(e,i));const t=this.clickRecognizer.complete(e,i,s.effect);return t&&(s.effect=nt(s.effect,this.routeNewEvent(t,"derived"))),s.effect}finally{this.activeRoutes.delete(e)}}routeAfterInputs(e,t){if("cancel"===e.type)return this.routeCancellation(e,t);if("pointer"===e.type&&"pointer_cancel"===e.name){const n=this.editor.interactions.broadcastEvent(this.editor,e,t),i=this.editor.tools.dispatch(e,t);return this.editor.interaction.clearSelection(),nt(nt(n,i),Zd)}if((e=>"keyboard"===e.type&&"key_down"===e.name&&"Escape"===e.key&&!e.shiftKey&&!e.altKey&&!e.accelKey)(e))return this.routeEscape();const n=!!this.editor.state.shapeEditingSession.get(),i=this.editor.interactions.handleEvent(this.editor,e,t);return"stop"===i?.propagation||"double_click"===e.type||n&&"keyboard"===e.type?i:nt(i,this.editor.tools.dispatch(e,t))}routeCancellation(e,t,n={}){const i=!1===n.notifyInteractionHandlers?void 0:this.editor.interactions.broadcastEvent(this.editor,e,t),s=this.editor.tools.dispatch(e,t);return this.editor.interaction.clearSelection(),nt(nt(i,s),Zd)}routeEscape(){const e=!this.editor.tools.isInInitialState(),t=!!this.editor.state.shapeEditingSession.get(),n=this.routeNewEvent({type:"cancel",reason:"escape"},"derived");return t&&this.editor.state.shapeEditingSession.get()&&this.editor.editing.cancel("user"),e||"select"===this.editor.state.tool.get().activeToolId||this.editor.commands.setActiveTool("select",{source:"system"}),nt(n,Zd)}},ec=class{pressedKeyCodes;isSpacePressed;state;constructor(e){this.pressedKeyCodes=e.atom("inputs.pressedKeyCodes",new Set),this.isSpacePressed=e.computed("inputs.isSpacePressed",()=>this.pressedKeyCodes.get().has("Space")),this.state=e.atom("inputs.state",{originPagePoint:null,currentPagePoint:null,previousPagePoint:null,originScreenPoint:null,currentScreenPoint:null,previousScreenPoint:null,currentTimestamp:null,previousTimestamp:null,pageVelocity:rt(),screenVelocity:rt(),pointerId:null,pointerType:null,buttons:0,isPointing:!1,isDragging:!1,dragPhase:"idle",shiftKey:!1,altKey:!1,ctrlKey:!1,metaKey:!1,accelKey:!1})}setCurrentPointerPoint(e){this.state.update(t=>{if(t.currentPagePoint?.equals(e.pagePoint)&&t.currentScreenPoint?.equals(e.screenPoint)&&t.currentTimestamp===e.timestamp&&t.shiftKey===e.shiftKey&&t.altKey===e.altKey&&t.ctrlKey===e.ctrlKey&&t.metaKey===e.metaKey&&t.accelKey===e.accelKey)return t;const n=t.currentPagePoint??e.pagePoint,i=t.currentScreenPoint??e.screenPoint,s=t.currentTimestamp??e.timestamp,o=e.timestamp-s;return{...t,previousPagePoint:n,previousScreenPoint:i,currentPagePoint:e.pagePoint,currentScreenPoint:e.screenPoint,previousTimestamp:s,currentTimestamp:e.timestamp,pageVelocity:at(n,e.pagePoint,o),screenVelocity:at(i,e.screenPoint,o),shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey}})}handleEvent(e){switch(e.type){case"pointer":return void this.handlePointerEvent(e);case"keyboard":return void this.handleKeyboardEvent(e);case"wheel":return void this.handleWheelEvent(e);case"cancel":return this.resetPointer(),void("blur"!==e.reason&&"dispose"!==e.reason||this.resetKeyboard())}}resetPointer(){this.state.update(e=>({...e,originPagePoint:null,currentPagePoint:null,previousPagePoint:null,originScreenPoint:null,currentScreenPoint:null,previousScreenPoint:null,currentTimestamp:null,previousTimestamp:null,pageVelocity:rt(),screenVelocity:rt(),pointerId:null,pointerType:null,buttons:0,isPointing:!1,isDragging:!1,dragPhase:"idle"}))}handlePointerEvent(e){this.state.update(t=>{switch(e.name){case"pointer_down":return{...t,originPagePoint:e.pagePoint,currentPagePoint:e.pagePoint,previousPagePoint:e.pagePoint,originScreenPoint:e.screenPoint,currentScreenPoint:e.screenPoint,previousScreenPoint:e.screenPoint,currentTimestamp:e.timestamp,previousTimestamp:e.timestamp,pageVelocity:rt(),screenVelocity:rt(),pointerId:e.pointerId,pointerType:e.pointerType,buttons:e.buttons,isPointing:!0,isDragging:!1,dragPhase:"pointing",shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey};case"pointer_move":{if(t.currentPagePoint?.equals(e.pagePoint)&&t.currentScreenPoint?.equals(e.screenPoint)&&t.currentTimestamp===e.timestamp&&t.buttons===e.buttons&&dt(t,e))return t;const n=t.currentPagePoint??e.pagePoint,i=t.currentScreenPoint??e.screenPoint,s=t.isPointing&&(t.isDragging||(t.originScreenPoint??e.screenPoint).dist2(e.screenPoint)>=9),o=t.currentTimestamp??e.timestamp,r=e.timestamp-o;return{...t,previousPagePoint:n,previousScreenPoint:i,currentPagePoint:e.pagePoint,currentScreenPoint:e.screenPoint,previousTimestamp:o,currentTimestamp:e.timestamp,pageVelocity:at(n,e.pagePoint,r),screenVelocity:at(i,e.screenPoint,r),buttons:e.buttons,isDragging:s,dragPhase:t.isPointing?s?"dragging":"pointing":"idle",shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey}}case"pointer_up":case"pointer_cancel":return{...t,previousPagePoint:t.currentPagePoint,previousScreenPoint:t.currentScreenPoint,currentPagePoint:e.pagePoint,currentScreenPoint:e.screenPoint,previousTimestamp:t.currentTimestamp,currentTimestamp:e.timestamp,pageVelocity:rt(),screenVelocity:rt(),buttons:e.buttons,isPointing:!1,isDragging:!1,dragPhase:"idle",shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey}}})}handleKeyboardEvent(e){this.pressedKeyCodes.update(t=>{const n="key_down"===e.name;if(t.has(e.code)===n)return t;const i=new Set(t);return n?i.add(e.code):i.delete(e.code),i}),this.state.update(t=>dt(t,e)?t:{...t,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey})}resetKeyboard(){this.pressedKeyCodes.get().size>0&&this.pressedKeyCodes.set(new Set),this.state.update(e=>e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||e.accelKey?{...e,shiftKey:!1,altKey:!1,ctrlKey:!1,metaKey:!1,accelKey:!1}:e)}handleWheelEvent(e){this.state.update(t=>dt(t,e)?t:{...t,shiftKey:e.shiftKey,altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,accelKey:e.accelKey})}},tc=class{handlers=[];registeredIds=new Set;register(e){this.registeredIds.has(e.id)||(this.handlers.push(e),this.registeredIds.add(e.id))}getHandlers(){return this.handlers}handleEvent(e,t,n){let i;for(const s of this.handlers)if((!e.state.readonly.get()||!0===s.enabledInReadonly)&&(i=nt(i,s.editorEvent?.handleEvent(e,t,n)),"stop"===i?.propagation))return i;return i}broadcastEvent(e,t,n){let i;for(const s of this.handlers)i=nt(i,s.editorEvent?.handleEvent(e,t,n));return i}createSelectionHandleSession(e,t){if(e.state.readonly.get())return null;for(const n of this.handlers){const i=n.selectionHandle?.createSession(e,t);if(i)return i}return null}createShapePointerSession(e,t){if(e.state.readonly.get())return null;for(const n of this.handlers){const i=n.shapePointer?.createSession(e,t);if(i)return i}return null}},nc=class{editor;buffer;activeScopes=[];stateAtom;unsubscribeOperations;isDisposed=!1;state;constructor(e){this.editor=e,this.buffer=new Td,this.stateAtom=e.signals.atom("editor.history.state",{canUndo:!1,canRedo:!1},{isEqual:ct}),this.state=this.stateAtom,this.unsubscribeOperations=this.editor.operations.subscribe(e=>{this.handleCommit(e)})}clear(){this.buffer.clear(),this.publishEffectiveState()}activateScope(e){if(this.isDisposed)throw new Error("Cannot activate a history scope after disposal.");const t={scope:e,unsubscribe:()=>{}};return t.unsubscribe=e.subscribe(()=>{this.activeScopes.includes(t)&&this.publishEffectiveState()}),this.activeScopes.push(t),this.publishEffectiveState(),()=>{this.deactivateScope(t)}}dispose(){if(this.isDisposed)return;this.isDisposed=!0,this.unsubscribeOperations();let e=null;for(const n of this.activeScopes.splice(0).reverse())try{n.unsubscribe()}catch(t){e??=t}if(null!==e)throw e}undo(){return this.step("undo")}redo(){return this.step("redo")}getEntries(){return this.buffer.getEntries()}handleCommit(e){"record"===e.history&&"user"===e.source&&(this.buffer.append(e.diff,e.label),this.publishEffectiveState())}deactivateScope(e){const t=this.activeScopes.indexOf(e);if(!(t<0)){this.activeScopes.splice(t,1);try{e.unsubscribe()}finally{this.isDisposed||this.publishEffectiveState()}}}step(e){this.editor.assertDocumentWriteAllowed();const t=this.activeScopes.at(-1)?.scope;if(t){const n="undo"===e?t.undo():t.redo();return this.publishEffectiveState(),n}this.editor.interaction.cancelForCommand();const n="undo"===e?this.buffer.undo():this.buffer.redo();return!!n&&(this.replay(e,n),this.publishEffectiveState(),!0)}replay(e,t){try{this.editor.operations.run({kind:`history.${e}`,label:t.label,source:"history",history:"ignore"},()=>{const n="undo"===e?t.inverse:t.forward;y(this.editor).applyDiff(n,"history"),this.editor.snapshots.syncAfterDocumentRestore()})}catch(n){throw"undo"===e?this.buffer.rollbackUndo(t):this.buffer.rollbackRedo(t),this.publishEffectiveState(),n}}publishEffectiveState(){const e=this.activeScopes.at(-1)?.scope;var t;this.stateAtom.set({canUndo:(t=e?.getState()??{canUndo:this.buffer.canUndo,canRedo:this.buffer.canRedo}).canUndo,canRedo:t.canRedo})}},ic=class{manager;state;constructor(e,t){this.manager=e,this.state=t}get id(){return this.state.id}get kind(){return this.state.kind}get source(){return this.state.source}get isActive(){return"active"===this.state.status}commit(){return this.manager.commit(this.state)}cancel(){this.manager.cancel(this.state)}},sc=class{editor;onUnhandledError;stack=[];commitListeners=new Set;commitQueue=[];nextOperationId=1;revision=0;isDrainingCommitQueue=!1;constructor(e,t=()=>{}){this.editor=e,this.onUnhandledError=t,y(e).listen(e=>this.handleStoreChange(e))}begin(e){const t=e.source??"user",n=this.getActiveState(),i={id:"operation:"+this.nextOperationId++,kind:e.kind,label:e.label??e.kind,source:t,history:e.history??("user"===t?"record":"ignore"),parent:n,diff:{added:[],updated:[],removed:[]},status:"active"};return this.stack.push(i),new ic(this,i)}run(e,t){const n=this.begin(e);try{const e=t();return n.commit(),e}catch(i){throw n.isActive&&n.cancel(),i}}getActive(){const e=this.getActiveState();return e?new ic(this,e):null}subscribe(e){return this.commitListeners.add(e),()=>{this.commitListeners.delete(e)}}commit(e){this.assertTopActive(e);const n=lt(e.diff);if(this.stack.pop(),e.status="committed",e.parent)return e.parent.diff=s(e.parent.diff,n),null;if(t(n))return null;const i={id:e.id,revision:++this.revision,kind:e.kind,label:e.label,source:e.source,history:e.history,diff:n,snapshot:ut(this.editor.snapshots.getDocument()),sessionSnapshot:pt(this.editor.snapshots.getSession())};return this.enqueueCommit(i),i}cancel(e){this.assertTopActive(e);const n=lt(e.diff);if(!t(n))try{y(this.editor).applyDiff(i(n),e.source),this.editor.snapshots.syncAfterDocumentRestore()}catch(s){if(!t(lt(e.diff)))throw s;return this.stack.pop(),e.status="cancelled",void this.reportUnhandledError(s)}this.stack.pop(),e.status="cancelled"}handleStoreChange(e){const n=((e,t)=>({added:e.added.filter(t),updated:e.updated.filter(e=>t(e.before)&&t(e.after)),removed:e.removed.filter(t)}))(e.diff,m);if(t(n))return;const i=this.getActiveState();if(i)return void(i.diff=s(i.diff,n));const o=lt(n);t(o)||this.enqueueCommit({id:"operation:"+this.nextOperationId++,revision:++this.revision,kind:"editor.change",label:"change",source:e.source,history:"user"===e.source?"record":"ignore",diff:o,snapshot:ut(this.editor.snapshots.getDocument()),sessionSnapshot:pt(this.editor.snapshots.getSession())})}getActiveState(){return this.stack.at(-1)??null}assertTopActive(e){if("active"!==e.status)throw new Error(`Editor operation "${e.kind}" is no longer active.`);if(this.getActiveState()!==e)throw new Error(`Editor operation "${e.kind}" must be completed in LIFO order.`)}enqueueCommit(e){if(this.commitQueue.push(e),!this.isDrainingCommitQueue){this.isDrainingCommitQueue=!0;try{for(;this.commitQueue.length>0;){const e=this.commitQueue.shift();for(const n of this.commitListeners)try{n(e)}catch(t){this.reportUnhandledError(t)}}}finally{this.isDrainingCommitQueue=!1}}}reportUnhandledError(e){try{this.onUnhandledError(e)}catch{}}},oc=["from","to","related"],rc=class{editor;state;bindingsFromShapeSignals=new Map;bindingsToShapeSignals=new Map;bindingsForShapeSignals=new Map;draftBindingIndex=null;unsubscribeFromStore;constructor(e){this.editor=e;const t=y(e);this.state=(e=>{const t=e.filter(g).sort(mt),n={bindingById:new Map,bindingIdsByFromShape:new Map,bindingIdsByToShape:new Map,relatedBindingIdsByShape:new Map};for(const i of t)n.bindingById.set(i.id,i),gt(n.bindingIdsByFromShape,i.fromId,i.id),gt(n.bindingIdsByToShape,i.toId,i.id),gt(n.relatedBindingIdsByShape,i.fromId,i.id),gt(n.relatedBindingIdsByShape,i.toId,i.id);return n})(t.getAll()),this.unsubscribeFromStore=t.listen(e=>{this.handleStoreChange(e)})}dispose(){this.unsubscribeFromStore(),this.bindingsFromShapeSignals.clear(),this.bindingsToShapeSignals.clear(),this.bindingsForShapeSignals.clear(),this.draftBindingIndex=null}getBindingsFromShape(e){const t=this.getDraftBindingIndex();return t?[...this.getDraftBindingsForRelation("from",e,t)]:[...this.getBindingsFromShapeSignal(e).get()]}getBindingsFromShapeSignal(e){let t=this.bindingsFromShapeSignals.get(e);return t||(t=this.editor.signals.atom(`editor.query.bindingsFromShape.${e}`,this.getBindingsFromState(this.state,e),{isEqual:G}),this.bindingsFromShapeSignals.set(e,t)),t}getBindingsToShape(e){const t=this.getDraftBindingIndex();return t?[...this.getDraftBindingsForRelation("to",e,t)]:[...this.getBindingsToShapeSignal(e).get()]}getBindingsToShapeSignal(e){let t=this.bindingsToShapeSignals.get(e);return t||(t=this.editor.signals.atom(`editor.query.bindingsToShape.${e}`,this.getBindingsToState(this.state,e),{isEqual:G}),this.bindingsToShapeSignals.set(e,t)),t}getBindingsForShape(e){const t=this.getDraftBindingIndex();return t?[...this.getDraftBindingsForRelation("related",e,t)]:[...this.getBindingsForShapeSignal(e).get()]}getBindingsForShapeSignal(e){let t=this.bindingsForShapeSignals.get(e);return t||(t=this.editor.signals.atom(`editor.query.bindingsForShape.${e}`,this.getBindingsForState(this.state,e),{isEqual:G}),this.bindingsForShapeSignals.set(e,t)),t}handleStoreChange(e){const t=this.state,n=((e,t)=>{const n=t.diff.added.filter(g),i=t.diff.updated.filter(It),s=t.diff.removed.filter(g);if(0===n.length&&0===i.length&&0===s.length)return e;const o={bindingById:new Map(e.bindingById),bindingIdsByFromShape:new Map(e.bindingIdsByFromShape),bindingIdsByToShape:new Map(e.bindingIdsByToShape),relatedBindingIdsByShape:new Map(e.relatedBindingIdsByShape)};for(const r of s)o.bindingById.delete(r.id),vt(o,r);for(const{before:r,after:a}of i)r.fromId===a.fromId&&r.toId===a.toId||vt(o,r);for(const r of n)o.bindingById.set(r.id,r);for(const{after:r}of i)o.bindingById.set(r.id,r);for(const r of n)wt(o,r);for(const{before:r,after:a}of i)r.fromId===a.fromId&&r.toId===a.toId||wt(o,a);return o})(t,e);n!==t&&(this.state=n,this.updateCachedSignals(e,n))}updateCachedSignals(e,t){const n=new Set,i=new Set,s=new Set,o=e=>{g(e)&&(n.add(e.fromId),i.add(e.toId),s.add(e.fromId),s.add(e.toId))};for(const r of e.diff.added)o(r);for(const r of e.diff.removed)o(r);for(const r of e.diff.updated)o(r.before),o(r.after);for(const r of n)this.bindingsFromShapeSignals.get(r)?.set(this.getBindingsFromState(t,r));for(const r of i)this.bindingsToShapeSignals.get(r)?.set(this.getBindingsToState(t,r));for(const r of s)this.bindingsForShapeSignals.get(r)?.set(this.getBindingsForState(t,r))}getBindingsFromState(e,t){return this.getBindingsForIds(e,e.bindingIdsByFromShape.get(t))}getBindingsToState(e,t){return this.getBindingsForIds(e,e.bindingIdsByToShape.get(t))}getBindingsForState(e,t){return this.getBindingsForIds(e,e.relatedBindingIdsByShape.get(t))}getBindingsForIds(e,t){return t&&0!==t.length?t.map(t=>e.bindingById.get(t)).filter(e=>!!e):[]}getDraftBindingIndex(){const e=y(this.editor),t=e.getActiveTransactionRevision();return null===t?null:(this.draftBindingIndex?.revision===t||(this.draftBindingIndex=((e,t)=>{const n={revision:e,relations:{from:bt(),to:bt(),related:bt()}};for(const i of t.removed)g(i)&&Pt(n,i,void 0);for(const i of t.updated)g(i.before)&&Pt(n,i.before,void 0),g(i.after)&&Pt(n,i.after,i.after);for(const i of t.added)g(i)&&Pt(n,i,i);return n})(t,e.getActiveTransactionDiff())),this.draftBindingIndex)}getDraftBindingsForRelation(e,t,n){return(({committed:e,draftIndex:t,relation:n,shapeId:i})=>{const s=t.relations[n],o=s.cacheByShape.get(i);if(o)return o;const r=s.changesByShape.get(i);if(!r)return s.cacheByShape.set(i,e),e;const a=new Map(e.map(e=>[e.id,e]));for(const[c,l]of r)l?a.set(c,l):a.delete(c);const d=Array.from(a.values()).sort(mt);return s.cacheByShape.set(i,d),d})({committed:"from"===e?this.getBindingsFromState(this.state,t):"to"===e?this.getBindingsToState(this.state,t):this.getBindingsForState(this.state,t),draftIndex:n,relation:e,shapeId:t})}},ac=class{editor;signalsByShapeId=new Map;unsubscribeFromStore;constructor(e){this.editor=e,this.unsubscribeFromStore=e.listen(({diff:e})=>{for(const t of e.removed)u(t)&&this.signalsByShapeId.delete(t.id)})}dispose(){this.unsubscribeFromStore(),this.signalsByShapeId.clear()}getCachedShapeGeometry(e){return this.getOrCreateSignals(e).pageGeometry.get()}getShapePageBoundsSignal(e){return this.getOrCreateSignals(e).pageBounds}getShapeLocalToPageTransformSignal(e){return this.getOrCreateSignals(e).localToPageTransform}getShapeGeometry(e){return(e=>{if(e)return{bounds:e.bounds.clone(),center:e.center.clone(),corners:e.corners.map(e=>e.clone()),outlineVertices:e.outlineVertices.map(e=>e.clone())}})(this.getCachedShapeGeometry(e))}getShapeLocalToPageTransform(e){return kt(this.getShapeLocalToPageTransformSignal(e).get())}getShapeParentToPageTransform(e){return e.startsWith("page:")?this.editor.pages.get(e)?$d.Identity():void 0:kt(this.getOrCreateSignals(e).localToPageTransform.get())}getShapePositionedToPageTransform(e){return kt(this.getOrCreateSignals(e).positionedToPageTransform.get())}getShapePageBounds(e){return Mt(this.getShapePageBoundsSignal(e).get())??void 0}getShapePositionedBounds(e){return Mt(this.getOrCreateSignals(e).positionedBounds.get())??void 0}getShapePageCenter(e){return t=this.getCachedShapeGeometry(e)?.center,(t?t.clone():t)??void 0;var t}getShapePageCorners(e){return Et(this.getCachedShapeGeometry(e)?.corners)}getShapePageOutlineVertices(e){return Et(this.getCachedShapeGeometry(e)?.outlineVertices)}getShapeClipAncestorIds(e){return[...this.getShapeClipAncestorIdsSignal(e).get()]}getShapeClipAncestorIdsSignal(e){return this.getOrCreateSignals(e).clipAncestorIds}isPagePointInShapeClip(e,t){const n=this.editor.shapes.get(e);if(!n)return!1;for(const i of Rt(this.editor,n,e=>this.editor.shapes.get(e))){const e=this.editor.shapes.getUtil(i).getChildClipLocalPolygons(i);if(!e||!E(e))continue;const n=this.getOrCreateSignals(i.id).localToPageTransform.get()?.tryInvert();if(!n||!B(n.applyToPoint(t),e))return!1}return!0}getShapeClippedPageBounds(e){const t=this.editor.shapes.get(e);let n=this.getShapePageBounds(e);if(!t||!n)return null;for(const i of Rt(this.editor,t,e=>this.editor.shapes.get(e))){const e=this.editor.shapes.getUtil(i).getChildClipLocalPolygons(i),t=e?E(e):null,s=this.getOrCreateSignals(i.id).localToPageTransform.get();if(!t||!s)continue;const o=Kt(n,Ft(t,s));if(!o)return null;n=o}return n}getOrCreateSignals(e){let t=this.signalsByShapeId.get(e);if(!t){const n=e=>this.editor.shapes.getSignal(e).get(),i=this.editor.signals.computed(`editor.query.shapePositionedBounds.${e}`,()=>{const t=n(e);return t?this.editor.shapes.getUtil(t).getPositionedBounds(t):void 0},{isEqual:ee}),s=this.editor.signals.computed(`editor.query.shapeLocalToPageTransform.${e}`,()=>{const t=n(e);return t?Bt(this.editor,t,n):void 0},{isEqual:Ct}),o=this.editor.signals.computed(`editor.query.shapeGeometry.${e}`,()=>{const t=n(e);if(!t)return;const i=At(this.editor,t.parentId,n);return i?xe(t,this.editor.shapes.getUtil(t),i):void 0},{isEqual:Tt});t={positionedBounds:i,pageGeometry:o,localToPageTransform:s,positionedToPageTransform:this.editor.signals.computed(`editor.query.shapePositionedToPageTransform.${e}`,()=>{const t=n(e);if(!t)return;const i=At(this.editor,t.parentId,n);return i?Ie(t,this.editor.shapes.getUtil(t),i):void 0},{isEqual:Ct}),pageBounds:this.editor.signals.computed(`editor.query.shapePageBounds.${e}`,()=>o.get()?.bounds,{isEqual:ee}),clipAncestorIds:this.editor.signals.computed(`editor.query.shapeClipAncestorIds.${e}`,()=>{const t=n(e);return t?Rt(this.editor,t,n).map(e=>e.id):[]},{isEqual:G})},this.signalsByShapeId.set(e,t)}return t}},dc=class{editor;pagesSignal;currentPageShapeIdsSignal;currentPageShapesSignal;currentPageShapeTreeSignal;stateAtom;pagesAtom;pageShapeIdsSignals=new Map;unsubscribeFromStore;constructor(e,t){this.editor=e;const{atom:n,computed:i}=e.signals,s=y(e),o=s.getAll();this.stateAtom=n("editor.query.shapeTree",(e=>{const t=e.filter(l).sort((e,t)=>e.index.localeCompare(t.index)),n=e.filter(u).sort((e,t)=>e.parentId===t.parentId?((e,t)=>e.index.localeCompare(t.index))(e,t):e.parentId.localeCompare(t.parentId)),i=new Map,s=new Map,o=new Map,r=new Map(n.map(e=>[e.id,e]));for(const d of n)Dt(s,d.parentId,d.id);const a=(e,t)=>{for(const n of s.get(t)??[]){const t=r.get(n);t&&(Dt(i,e,t.id),o.set(t.id,e),a(e,t.id))}};for(const d of t)a(d.id,d.id);return{pageShapeIdsByPage:i,childShapeIdsByParent:s,pageIdByShape:o}})(o)),this.pagesAtom=n("editor.query.pages",o.filter(l).sort((e,t)=>e.index.localeCompare(t.index)),{isEqual:G}),this.pagesSignal=this.pagesAtom,this.unsubscribeFromStore=s.listen(e=>{this.handleStoreChange(e)}),this.currentPageShapeIdsSignal=i("editor.query.currentPageShapeIds",()=>this.getShapeIdsForPageSnapshot(t.get()),{isEqual:G}),this.currentPageShapesSignal=i("editor.query.currentPageShapes",()=>this.currentPageShapeIdsSignal.get().map(e=>this.editor.shapes.getSignal(e).get()).filter(e=>!!e)),this.currentPageShapeTreeSignal=i("editor.query.currentPageShapeTree",()=>this.currentPageShapeIdsSignal.get().map(e=>this.editor.shapes.getSignal(e).get()).filter(e=>!!e).map(e=>({id:e.id,parentId:e.parentId,type:e.type})),{isEqual:Ot})}dispose(){this.unsubscribeFromStore(),this.pageShapeIdsSignals.clear()}getShapeIdsForPageSignal(e){let t=this.pageShapeIdsSignals.get(e);return t||(t=this.editor.signals.computed(`editor.query.pageShapeIds.${e}`,()=>this.getShapeIdsForPageSnapshot(e),{isEqual:G}),this.pageShapeIdsSignals.set(e,t)),t}getShapeIdsForPage(e){return[...this.getShapeIdsForPageSnapshot(e)]}getShapesForPage(e){return this.getShapeIdsForPageSnapshot(e).map(e=>this.editor.shapes.get(e)).filter(e=>!!e)}getChildShapeIds(e){return[...this.getChildShapeIdsSnapshot(e)]}getChildShapes(e){return this.getChildShapeIdsSnapshot(e).map(e=>this.editor.shapes.get(e)).filter(e=>!!e)}getDescendantShapeIds(e){const t=[],n=new Set,i=e=>{for(const s of this.getChildShapeIdsSnapshot(e))n.has(s)||(n.add(s),t.push(s),i(s))};return i(e),t}getPageIdForShape(e){return this.stateAtom.get().pageIdByShape.get(e)??null}getShapeIdsForPageSnapshot(e){return this.stateAtom.get().pageShapeIdsByPage.get(e)??[]}getChildShapeIdsSnapshot(e){return this.stateAtom.get().childShapeIdsByParent.get(e)??[]}handleStoreChange(e){const t=y(this.editor),n=this.stateAtom.peek(),i=((e,t,n)=>{const i=t.diff.added.filter(u),s=t.diff.updated.filter(Xt),o=t.diff.removed.filter(u);if(!(i.length>0||o.length>0||s.some(({before:e,after:t})=>e.parentId!==t.parentId||e.index!==t.index)))return e;const r={pageShapeIdsByPage:new Map(e.pageShapeIdsByPage),childShapeIdsByParent:new Map(e.childShapeIdsByParent),pageIdByShape:new Map(e.pageIdByShape)},a=e=>{const t=n(e);return u(t)?t.index:void 0},d=new Set,c=e=>{let t=e;const i=new Set;for(;t&&!i.has(t);){i.add(t);const e=n(t);if(!e)return null;if(l(e))return e.id;if(!u(e))return null;t=e.parentId}return null};for(const l of o){Lt(r.childShapeIdsByParent,l.parentId,l.id);const t=e.pageIdByShape.get(l.id);t&&d.add(t)}for(const{before:l,after:h}of s){if(l.parentId===h.parentId&&l.index===h.index)continue;Lt(r.childShapeIdsByParent,l.parentId,l.id),Yt(r.childShapeIdsByParent,h.parentId,h,a);const t=e.pageIdByShape.get(l.id);t&&d.add(t);const n=c(h.parentId);n&&d.add(n)}for(const l of i)Yt(r.childShapeIdsByParent,l.parentId,l,a);for(const l of i){const e=c(l.parentId);e&&d.add(e)}if(d.size>0){const t=new Map(e.pageShapeIdsByPage),i=new Map(e.pageIdByShape);for(const[n,o]of e.pageIdByShape)d.has(o)&&i.delete(n);const s=(e,t)=>{const o=[];for(const a of r.childShapeIdsByParent.get(t)??[])n(a)&&(o.push(a),i.set(a,e),o.push(...s(e,a)));return o};for(const e of d){const n=s(e,e);n.length>0?t.set(e,n):t.delete(e)}r.pageShapeIdsByPage=t,r.pageIdByShape=i}return r})(n,e,e=>t.get(e));i!==n&&this.stateAtom.set(i);const s=this.pagesAtom.peek(),o=((e,t)=>{if(!(t.diff.added.some(l)||t.diff.removed.some(l)||t.diff.updated.some(({before:e,after:t})=>l(e)||l(t))))return e;const n=new Map(e.map(e=>[e.id,e]));for(const i of t.diff.removed)l(i)&&n.delete(i.id);for(const i of t.diff.updated)l(i.before)&&n.delete(i.before.id),l(i.after)&&n.set(i.after.id,i.after);for(const i of t.diff.added)l(i)&&n.set(i.id,i);return Array.from(n.values()).sort((e,t)=>e.index.localeCompare(t.index))})(s,e);o!==s&&this.pagesAtom.set([...o])}},cc=class{entries;cellSize;cells=new Map;order=new Map;constructor(e){this.entries=e,this.cellSize=(e=>{if(0===e.length)return 256;let t=0;for(const n of e)t+=Math.max(n.queryBounds.w,n.queryBounds.h);return Math.max(16,Math.round(t/e.length)||256)})(e);for(let t=0;t<e.length;t+=1){const n=e[t];n&&(this.order.set(n,t),this.insert(n))}}cellKey(e,t){return`${e}:${t}`}insert(e){const t=Math.floor(e.queryBounds.minX/this.cellSize),n=Math.floor(e.queryBounds.minY/this.cellSize),i=Math.floor(e.queryBounds.maxX/this.cellSize),s=Math.floor(e.queryBounds.maxY/this.cellSize);for(let o=n;o<=s;o+=1)for(let n=t;n<=i;n+=1){const t=this.cellKey(n,o),i=this.cells.get(t);i?i.push(e):this.cells.set(t,[e])}}search(e){const t=Math.floor(e.minX/this.cellSize),n=Math.floor(e.minY/this.cellSize),i=Math.floor(e.maxX/this.cellSize),s=Math.floor(e.maxY/this.cellSize);if((i-t+1)*(s-n+1)>this.entries.length)return this.entries.filter(t=>t.queryBounds.intersects(e));const o=new Set,r=[];for(let a=n;a<=s;a+=1)for(let n=t;n<=i;n+=1){const t=this.cells.get(this.cellKey(n,a));if(t)for(const n of t)o.has(n)||(o.add(n),n.queryBounds.intersects(e)&&r.push(n))}return r.length>1&&r.sort((e,t)=>(this.order.get(e)??0)-(this.order.get(t)??0)),r}},lc=class{editor;shapeTree;geometry;pageIndexSignals=new Map;constructor(e,t,n){this.editor=e,this.shapeTree=t,this.geometry=n}getShapesInBounds(e,t){return this.getShapeIdsInBounds(e,t).map(e=>this.editor.shapes.get(e)).filter(e=>!!e)}getShapeIdsInBounds(e,t){return this.getPageIndex(t?.pageId).search(e).filter(t=>t.shapeBounds.intersects(e)).map(e=>e.shapeId)}getShapesInViewport(e,t){return this.getShapesInBounds(e,t)}getShapeIdsInViewport(e,t){return this.getShapeIdsInBounds(e,t)}getShapeAtPoint(e,t){return this.getShapesAtPoint(e,t)[0]??null}getShapesAtPoint(e,t){const n=this.getPageIndex(t?.pageId).search((e=>new Yd(e.x-.5,e.y-.5,1,1))(e)),i=[];for(let s=n.length-1;s>=0;s-=1){const o=n[s];if(!o?.pointHitTestBounds.containsPoint(e))continue;const r=this.editor.shapes.get(o.shapeId);if(!r)continue;if(t?.filter&&!t.filter(r))continue;const a=this.editor.shapes.getUtil(r),d=this.geometry.getShapeParentToPageTransform(r.parentId);if(!d)continue;const c=be(r,e,a,d),l={editor:this.editor,pagePoint:e,positionedPoint:c};("bindingTarget"===t?.hitTest?a.hitTestBindingTarget(r,c,l):a.hitTest(r,c,l))&&i.push(r)}return i}getShapesHitByLineSegment(e,t,n){const i=n?.margin??0,s=((e,t,n)=>Yd.FromPoints([e,t]).expand(Math.max(.5,n)))(e,t,i),o=this.getPageIndex(n?.pageId).search(s),r=[];for(let a=o.length-1;a>=0;a-=1){const s=o[a];if(!s)continue;const d=this.geometry.getShapeClippedPageBounds(s.shapeId);if(!d||!Nt(e,t,d.expand(i)))continue;if(!this.doesLineSegmentIntersectShapeClip(s.shapeId,e,t,i))continue;const c=this.editor.shapes.get(s.shapeId);if(!c)continue;if(n?.filter&&!n.filter(c))continue;const l=this.editor.shapes.getUtil(c),h=this.geometry.getShapeParentToPageTransform(c.parentId);if(!h)continue;const u=be(c,e,l,h),p=be(c,t,l,h),g=this.geometry.getShapePositionedToPageTransform(c.id)?.tryInvert(),f=g?i*g.getMaximumLinearScale():i;l.hitTestLineSegment(c,{editor:this.editor,pageStart:e,pageEnd:t,pageMargin:i,positionedStart:u,positionedEnd:p,positionedMargin:f})&&r.push(c)}return r}doesLineSegmentIntersectShapeClip(e,t,n,i){for(const s of this.geometry.getShapeClipAncestorIds(e)){const e=this.editor.shapes.get(s);if(!e)return!1;const o=this.editor.shapes.getUtil(e).getChildClipLocalPolygons(e);if(!o)continue;const r=this.editor.shapes.computeLocalToPageTransform(e).tryInvert();if(!r)return!1;const a=i*Math.sqrt(r.a*r.a+r.b*r.b+r.c*r.c+r.d*r.d),d=r.applyToPoint(t),c=r.applyToPoint(n);if(!o.some(e=>A(d,c,e,a)))return!1}return!0}getPageIndexSignal(e){let t=this.pageIndexSignals.get(e);return t||(t=this.editor.signals.computed(`editor.spatialIndex.page.${e}`,()=>{const t=this.shapeTree.getShapeIdsForPageSignal(e).get(),n=[];for(const e of t){const t=this.editor.shapes.getSignal(e).get();if(!t)continue;const i=this.editor.shapes.getUtil(t),s=this.geometry.getShapePageBoundsSignal(e).get();if(!s)continue;const o=this.geometry.getShapePositionedToPageTransform(e);if(!o)continue;const r=$t(i.getPointHitTestBounds(t,{editor:this.editor}),o),a=Yd.FromPoints([new Ld(s.minX,s.minY),new Ld(s.maxX,s.maxY),new Ld(r.minX,r.minY),new Ld(r.maxX,r.maxY)]);n.push({shapeId:e,shapeBounds:s,queryBounds:a,pointHitTestBounds:r})}return new cc(n)}),this.pageIndexSignals.set(e,t)),t}getPageIndex(e=this.editor.pages.getCurrentId()){return this.getPageIndexSignal(e).get()}},hc=class extends Error{constructor(e){super(e),this.name="SnapshotParseError"}},uc=.001,pc=["top_left","top","top_right","right","bottom_right","bottom","bottom_left","left"],gc=["free","aspect_ratio_locked"],fc=class{editor;signals;selectedShapeItemsSignal;frameGeometrySignal;companionFrameGeometriesSignal;pathSignal;pageClipPathSignal;bindingSegmentsSignal;frameStyleSignal;handleAnchorsSignal;handlesSignal;constructor(e,t){this.editor=e,this.signals=t;const{computed:n}=e.signals;this.selectedShapeItemsSignal=n("editor.selectedShapeOverlayItems",()=>"select"!==t.tool.get().activeToolId?[]:t.selectedShapeIds.get().map(t=>e.shapes.getSignal(t).get()).filter(e=>!!e).map(t=>{const n=e.shapes.getUtil(t).getSelectionOverlayInfo(t,{editor:e});return{id:t.id,usesSelectionPathOverlay:n.usesSelectionPathOverlay,startPagePoint:n.startPagePoint,endPagePoint:n.endPagePoint,middlePagePoint:n.middlePagePoint,path:n.path,pathStyle:n.pathStyle,pageClipPath:n.pageClipPath??null,bindingSegments:n.bindingSegments??[]}}),{isEqual:$n}),this.frameGeometrySignal=n("editor.selectionOverlayFrameGeometry",()=>{const t=this.selectedShapeItemsSignal.get();if(0===t.length)return null;if(oi(t))return null;const n=e.selection.getFrame();return n?{bounds:n.bounds,rotation:n.rotation,rotationCenter:n.rotationCenter}:null},{isEqual:_n}),this.companionFrameGeometriesSignal=n("editor.selectionOverlayCompanionFrameGeometries",()=>{if("select"!==t.tool.get().activeToolId)return[];const n=[];for(const i of t.selectedShapes.get())for(const t of e.bindings.getForShape(i.id))n.push(...e.bindings.getUtil(t).getSelectionCompanionFrameGeometries?.(e,t,{selectedShape:i})??[]);return n},{isEqual:Hn}),this.pathSignal=n("editor.selectionOverlayPath",()=>{const e=this.selectedShapeItemsSignal.get();return oi(e)?e[0]?.path??null:null}),this.pageClipPathSignal=n("editor.selectionOverlayPageClipPath",()=>{const e=this.selectedShapeItemsSignal.get();return oi(e)?e[0]?.pageClipPath??null:null}),this.bindingSegmentsSignal=n("editor.selectionOverlayBindingSegments",()=>{const e=this.selectedShapeItemsSignal.get();return oi(e)?[...e[0]?.bindingSegments??[]]:[]},{isEqual:Bn}),this.frameStyleSignal=n("editor.selectionOverlayFrameStyle",()=>{const e=t.cameraZoom.get();return{strokeWidth:2/e,cornerRadius:3/e}},{isEqual:Un}),this.handleAnchorsSignal=n("editor.selectionOverlayHandleAnchors",()=>{if("select"!==t.tool.get().activeToolId)return null;const n=t.selectedShapes.get();if(0===n.length)return null;const i=e.selection.getFrame(),s=t.cameraZoom.get(),o=1===n.length,r=e.selection.canResize(),a=e.selection.canRotate();return((t,n,i,s,d,c,l)=>{const h=t.map(t=>(t=>e.shapes.getUtil(t).getSelectionHandleAnchors(t,{isOnlySelected:o,editor:e}))(t)),u=t.every(t=>(t=>r&&e.shapes.getUtil(t).canUseSelectionResizeHandles(t,{editor:e}))(t)),p=t.every(t=>(t=>a&&e.shapes.getUtil(t).canUseSelectionRotateHandle(t,{editor:e}))(t)),g=new Set(l),f=h.flatMap(e=>e.terminalHandleAnchors),m=h.flatMap(e=>e.middleHandleAnchors),y=h.flatMap(e=>e.customHandleAnchors??[]),S=f.length>0||m.length>0||y.length>0;if(!n)return{resizeHandleAnchors:[],rotateHandleAnchors:[],terminalHandleAnchors:f,middleHandleAnchors:m,customHandleAnchors:y};const{bounds:I,rotation:v,rotationCenter:w,hasCompatibleRotation:b}=n,P=t[0]?.rotation??v,x=8/i,C=14/i,T=I.w<2*x,M=I.h<2*x,E=e=>0===v?e:Ld.RotWith(e,w,v),k=new Ld(I.minX,I.minY),B=new Ld(I.center.x,I.minY),A=new Ld(I.maxX,I.minY),R=new Ld(I.maxX,I.center.y),F=new Ld(I.maxX,I.maxY),K=new Ld(I.center.x,I.maxY),D=new Ld(I.minX,I.maxY),L=new Ld(I.minX,I.center.y);return{resizeHandleAnchors:!u||S?[]:[{kind:"resize",id:"top_left",point:E(k)},...T?[]:[{kind:"resize",id:"top",point:E(B)}],...T&&M?[]:[{kind:"resize",id:"top_right",point:E(A)}],...M?[]:[{kind:"resize",id:"right",point:E(R)}],...T||M?[]:[{kind:"resize",id:"bottom_right",point:E(F)}],...T?[]:[{kind:"resize",id:"bottom",point:E(K)}],...T||M?[]:[{kind:"resize",id:"bottom_left",point:E(D)}],...M?[]:[{kind:"resize",id:"left",point:E(L)}]].filter(e=>g.has(e.id)),rotateHandleAnchors:!p||S||!b||T||M?[]:[{kind:"rotate",id:"bottom_left_rotate",point:E(si({bounds:I,rotateOffset:C,referenceRotation:P,frameRotation:v}))}],terminalHandleAnchors:f,middleHandleAnchors:m,customHandleAnchors:y}})(n,i,s,0,0,0,((e,t,n)=>{if(0===t.length)return[];const i=1===t.length,s=t.map(t=>e.shapes.getUtil(t).getSelectionResizeHandleIds(t,{editor:e,isOnlyResizeTarget:i})),o=On(e,t,n);return pc.filter(n=>s.every(e=>e.includes(n))&&zn(e,t,n,o).length>0)})(e,e.selection.getResizeTargets(),i?.rotation??0))},{isEqual:ii}),this.handlesSignal=n("editor.selectionOverlayHandles",()=>{const e=this.handleAnchorsSignal.get();if(!e)return null;const n=t.cameraZoom.get(),{resizeHandles:i,rotateHandles:s,terminalHandles:o,middleHandles:r,customHandles:a}=((e,t)=>{const n=8/t,i=n/2,s=e=>new Yd(e.x-i,e.y-i,n,n);return{resizeHandles:e.resizeHandleAnchors.map(e=>({...e,bounds:s(e.point)})),rotateHandles:e.rotateHandleAnchors.map(e=>({...e,bounds:s(e.point)})),terminalHandles:e.terminalHandleAnchors.map(e=>({...e,bounds:s(e.point)})),middleHandles:e.middleHandleAnchors.map(e=>({...e,bounds:s(e.point)})),customHandles:e.customHandleAnchors.map(e=>({...e,bounds:s(e.point)}))}})(e,n);return{resizeHandles:i,rotateHandles:s,terminalHandles:o,middleHandles:r,customHandles:a,strokeWidth:2/n}},{isEqual:ni})}hitTestHandle(e){const t=this.handlesSignal.get();return t?function({point:e,selectionFrame:t,handles:n,hitDistance:i}){const{middleHandles:s,terminalHandles:o,customHandles:r,resizeHandles:a,rotateHandles:d}=n;for(const c of s)if(c.bounds.expand(i).containsPoint(e))return c;for(const c of o)if(c.bounds.expand(i).containsPoint(e))return c;for(const c of r)if(c.bounds.expand(i).containsPoint(e))return c;for(const c of a)if(c.bounds.containsPoint(e))return c;if(t){const n=((e,t,n,i)=>{const s=new Set(n.map(e=>e.id)),o=Rn(e,t),{bounds:r}=t,a=[];o.x>=r.minX&&o.x<=r.maxX&&(s.has("top")&&a.push({id:"top",distance:Math.abs(o.y-r.minY)}),s.has("bottom")&&a.push({id:"bottom",distance:Math.abs(o.y-r.maxY)})),o.y>=r.minY&&o.y<=r.maxY&&(s.has("right")&&a.push({id:"right",distance:Math.abs(o.x-r.maxX)}),s.has("left")&&a.push({id:"left",distance:Math.abs(o.x-r.minX)}));const d=a.filter(e=>e.distance<=i).sort((e,t)=>e.distance-t.distance)[0];return d?{kind:"resize",id:d.id,point:e.clone(),bounds:new Yd(e.x-i,e.y-i,2*i,2*i)}:null})(e,t,a,i);if(n)return n}for(const c of d)if(c.bounds.expand(i).containsPoint(e))return c;return null}({point:e,selectionFrame:this.editor.selection.getFrame(),handles:t,hitDistance:6/this.signals.cameraZoom.get()}):null}},mc=class{editor;entryRequestAtom;entryRequestSignal;nextEntryRequestId=1;operation=null;constructor(e){this.editor=e,this.entryRequestAtom=e.signals.atom("editor.shapeEditingEntryRequest",null),this.entryRequestSignal=this.entryRequestAtom}canEditShape(e){const t="string"==typeof e?this.editor.shapes.get(e):e;return!!t&&!t.isLocked&&this.editor.shapes.getUtil(t).canEdit(t)}start(e,t="user"){let n=this.editor.shapes.get(e.shapeId);if(!n||!this.canEditShape(n))return null;const i=this.editor.state.shapeEditingSession.get();if(i?.shapeId===n.id){const s={...i,entryMode:e.entryMode??i.entryMode,caretPagePoint:e.caretPagePoint?{...e.caretPagePoint}:i.caretPagePoint};return this.editor.session.update({editingShapeId:n.id,shapeEditingSession:s},t),this.publishEntryRequest({shapeId:n.id,entryMode:s.entryMode,caretPagePoint:s.caretPagePoint}),s}if(e.preserveInteraction||this.editor.interaction.cancelForCommand(),this.editor.state.shapeEditingSession.get()&&!this.complete(t))return null;if(n=this.editor.shapes.get(e.shapeId),!n||!this.canEditShape(n))return null;const s=e.operationKind??`editing:${n.id}`;if(e.reuseActiveOperation){const e=this.editor.operations.getActive();if(!e||e.source!==t)throw new Error("Shape editing can only reuse an active operation with the same source.");this.operation=e}else this.operation=this.editor.operations.begin({kind:s,label:"shape.edit",source:"user",history:"record"});const o={shapeId:n.id,operationKind:s,entryMode:e.entryMode??"focusEnd",caretPagePoint:e.caretPagePoint?{...e.caretPagePoint}:void 0,isComposing:!1};return this.editor.commands.setSelectedShapeIds([n.id],{source:t}),this.editor.session.update({editingShapeId:n.id,shapeEditingSession:o},t),this.publishEntryRequest({shapeId:n.id,entryMode:o.entryMode,caretPagePoint:o.caretPagePoint}),o}complete(e="user"){const t=this.editor.state.shapeEditingSession.get();return!!t&&!t.isComposing&&(this.end({runEditEnd:!0,source:e}),this.commitOperation(),!0)}cancel(e="user"){const t=this.editor.state.shapeEditingSession.get();return!!t&&!t.isComposing&&(this.editor.session.update({editingShapeId:null,shapeEditingSession:null},e),this.cancelOperation(),!0)}setComposition(e,t="system"){const n=this.editor.state.shapeEditingSession.get();n&&n.isComposing!==e&&this.editor.session.update({shapeEditingSession:{...n,isComposing:e}},t)}consumeEntryRequest(e){const t=this.entryRequestAtom.get();t&&t.id===e&&this.entryRequestAtom.set(null)}removeShapeIds(e,t="system"){const n=this.editor.state.shapeEditingSession.get();n&&e.includes(n.shapeId)&&(this.end({runEditEnd:!1,source:t}),this.commitOperation())}prepareForShapeRemoval(e,t="system"){const n=this.editor.state.shapeEditingSession.get();if(!n||!e.includes(n.shapeId))return;this.editor.tools.isInInitialState()||this.editor.interaction.cancelForCommand();const i=this.editor.state.shapeEditingSession.get();i&&e.includes(i.shapeId)&&(this.end({runEditEnd:!1,source:t}),this.commitOperation())}end(e){const t=this.editor.state.shapeEditingSession.get();if(!t)return;this.entryRequestAtom.set(null);const n=this.editor.shapes.get(t.shapeId);if(this.editor.session.update({editingShapeId:null,shapeEditingSession:null},e.source),!e.runEditEnd||!n)return;const i=this.editor.shapes.getUtil(n).onEditEnd(n,{editor:this.editor});i?.deleteShapeIds&&i.deleteShapeIds.length>0&&this.editor.commands.deleteShapes(i.deleteShapeIds,{source:e.source})}cancelOperation(){const e=this.operation;this.operation=null,e?.isActive&&e.cancel()}commitOperation(){const e=this.operation;this.operation=null,e?.isActive&&e.commit()}publishEntryRequest(e){this.entryRequestAtom.set({id:this.nextEntryRequestId++,shapeId:e.shapeId,entryMode:e.entryMode,caretPagePoint:e.caretPagePoint?{...e.caretPagePoint}:void 0})}},yc=class extends Error{},Sc=class{editor;unsubscribeFromStore;shapeSignals=new Map;contentCutoutLocalPolygonSignals=new Map;selectedSignals=new Map;renderOrderSignals=new Map;renderVisibleSignals=new Map;documentVisibleSignals=new Map;effectiveOpacitySignals=new Map;editingSessionSignals=new Map;dropTargetSignals=new Map;hoveredSignals=new Map;selectedDescendantTransformAncestorSignals=new Map;constructor(e){this.editor=e,this.unsubscribeFromStore=e.listen(({diff:e})=>{for(const t of e.removed)u(t)&&this.evict(t.id)})}dispose(){this.unsubscribeFromStore(),this.shapeSignals.clear(),this.contentCutoutLocalPolygonSignals.clear(),this.selectedSignals.clear(),this.renderOrderSignals.clear(),this.renderVisibleSignals.clear(),this.documentVisibleSignals.clear(),this.effectiveOpacitySignals.clear(),this.editingSessionSignals.clear(),this.dropTargetSignals.clear(),this.hoveredSignals.clear(),this.selectedDescendantTransformAncestorSignals.clear()}isDocumentHidden(e){return!1===Ti(this.editor,e,e=>this.editor.shapes.get(e))}getShapeSignal(e){let t=this.shapeSignals.get(e);return t||(t=this.editor.signals.computed(`editor.shape.${e}`,()=>{const t=this.editor.store.getRecordSignal(e).get();return u(t)?t:void 0}),this.shapeSignals.set(e,t)),t}getContentCutoutLocalPolygonsSignal(e){let t=this.contentCutoutLocalPolygonSignals.get(e);return t||(t=this.editor.signals.computed(`editor.shapeContentCutouts.${e}`,()=>{const t=this.getShapeSignal(e).get();return t?this.editor.bindings.getToShapeSignal(e).get().flatMap(e=>{const n=this.getShapeSignal(e.fromId).get();return n?this.editor.bindings.getUtil(e).getTargetShapeContentCutoutLocalPolygons?.(this.editor,e,{fromShape:n,toShape:t})??[]:[]}):[]},{isEqual:J}),this.contentCutoutLocalPolygonSignals.set(e,t)),t}getSelectedSignal(e){let t=this.selectedSignals.get(e);return t||(t=this.editor.signals.computed(`editor.shapeSelected.${e}`,()=>this.editor.state.selectedShapeIdSet.get().has(e)),this.selectedSignals.set(e,t)),t}getRenderOrderSignal(e){let t=this.renderOrderSignals.get(e);return t||(t=this.editor.signals.computed(`editor.shapeRenderOrder.${e}`,()=>this.editor.render.viewport.shapeOrderById.get().get(e)??-1),this.renderOrderSignals.set(e,t)),t}getRenderVisibleSignal(e){let t=this.renderVisibleSignals.get(e);return t||(t=this.editor.signals.computed(`editor.shapeRenderVisible.${e}`,()=>{const t=this.editor.shapes.getClipAncestorIdsSignal(e).get().length>0;return this.editor.render.viewport.visibleShapeIdSet.get().has(e)&&this.getDocumentVisibleSignal(e).get()&&(!t||null!==this.editor.shapes.getClippedPageBounds(e))}),this.renderVisibleSignals.set(e,t)),t}getDocumentVisibleSignal(e){let t=this.documentVisibleSignals.get(e);return t||(t=this.editor.signals.computed(`editor.shapeDocumentVisible.${e}`,()=>Ti(this.editor,e,e=>this.getShapeSignal(e).get())??!1),this.documentVisibleSignals.set(e,t)),t}getEffectiveOpacitySignal(e){let t=this.effectiveOpacitySignals.get(e);return t||(t=this.editor.signals.computed(`editor.shapeEffectiveOpacity.${e}`,()=>{const t=new Set([e]);let n=1,i=this.getShapeSignal(e).get();for(;i&&(n*=i.opacity,i.parentId.startsWith("shape:"));){const e=i.parentId;if(t.has(e))break;t.add(e),i=this.getShapeSignal(e).get()}return n}),this.effectiveOpacitySignals.set(e,t)),t}getEditingSessionSignal(e){let t=this.editingSessionSignals.get(e);return t||(t=this.editor.signals.computed(`editor.shapeEditingSessionForShape.${e}`,()=>{const t=this.editor.state.shapeEditingSession.get();return t?.shapeId===e?t:null}),this.editingSessionSignals.set(e,t)),t}getDropTargetSignal(e){let t=this.dropTargetSignals.get(e);return t||(t=this.editor.signals.computed(`editor.shapeDropTarget.${e}`,()=>this.editor.render.interaction.dropTargetShapeId.get()===e),this.dropTargetSignals.set(e,t)),t}getHoveredSignal(e){let t=this.hoveredSignals.get(e);return t||(t=this.editor.signals.computed(`editor.shapeHovered.${e}`,()=>{const t=this.editor.render.interaction.hoveredShapeId.get();if(!t)return!1;const n=this.getShapeSignal(e).get();return!!n&&this.editor.shapes.getUtil(n).getHoverDecorationTargetId(n,{editor:this.editor})===t}),this.hoveredSignals.set(e,t)),t}getSelectedDescendantTransformAncestorSignal(e){let t=this.selectedDescendantTransformAncestorSignals.get(e);return t||(t=this.editor.signals.computed(`editor.shapeSelectedDescendantTransformAncestor.${e}`,()=>{if(this.getSelectedSignal(e).get())return!1;const t=this.getShapeSignal(e).get();return!(!t||!this.editor.shapes.getUtil(t).isSelectionTransformContainer(t))&&this.editor.state.selectedShapeIds.get().some(t=>((e,t,n)=>{let i=e.shapes.get(t);const s=new Set;for(;i?.parentId.startsWith("shape:");){const t=i.parentId;if(t===n)return!0;if(s.has(t))return!1;s.add(t),i=e.shapes.get(t)}return!1})(this.editor,t,e))}),this.selectedDescendantTransformAncestorSignals.set(e,t)),t}evict(e){this.shapeSignals.delete(e),this.contentCutoutLocalPolygonSignals.delete(e),this.selectedSignals.delete(e),this.renderOrderSignals.delete(e),this.renderVisibleSignals.delete(e),this.documentVisibleSignals.delete(e),this.effectiveOpacitySignals.delete(e),this.editingSessionSignals.delete(e),this.dropTargetSignals.delete(e),this.hoveredSignals.delete(e),this.selectedDescendantTransformAncestorSignals.delete(e)}},Ic=["corner","edge_midpoint","corner","edge_midpoint","center","edge_midpoint","corner","edge_midpoint","corner"],vc={corner:0,edge_midpoint:1,center:2,custom:3},wc=class{editor;constructor(e){this.editor=e}createTranslateSnapshot({movingShapeIds:e,coordinateSpace:t}){return this.createBoundsSnapSnapshot({movingShapeIds:e,coordinateSpace:t})}createResizeSnapshot({resizingShapeIds:e,coordinateSpace:t}){return this.createBoundsSnapSnapshot({movingShapeIds:e,coordinateSpace:t})}createHandleSnapshot({context:e,currentPagePoint:t,allowSelfSnap:n=!1,excludedShapeIds:i=[]}){const s=this.editor.shapes.get(e.shapeId),o=new Set(this.editor.layers.includeDescendants([e.shapeId]));this.collectBindingDrivenExcludedShapeIds([e.shapeId],o);for(const l of i)o.add(l);const r=[],a=[],d=this.getSnapScopeParentId([e.shapeId]),c=this.getCandidateShapeIds({excludedShapeIds:o,scopeParentId:d});s&&n&&this.collectSelfHandleSnapGeometry({shape:s,context:e,currentPagePoint:t,points:r,outlines:a});for(const l of c){const e=this.editor.shapes.get(l);e&&this.collectHandleSnapGeometry({shape:e,points:r,outlines:a})}return{points:r,outlines:a,scopeParentId:d,candidateShapeIds:c}}collectHandleSnapGeometry({shape:e,points:t,outlines:n}){const i=this.editor.shapes.getUtil(e);if(!i.canSnap(e,{editor:this.editor}))return;const s=this.editor.shapes.getClippedPageBounds(e.id);if(!s)return;const o=this.editor.shapes.computeLocalToPageTransform(e),r=i.getHandleSnapGeometry(e);for(const l of r.points??[]){const n=Is(l),i=o.applyToPoint(n.point);this.editor.shapes.isPagePointInClip(e.id,i)&&t.push({id:`${e.id}:point:${t.length}`,nodeId:e.id,point:i,kind:n.kind,weight:n.weight})}const a=r.outline;if(null===a)return;const d=this.editor.shapes.getClipAncestorIds(e.id).length>0?_i(s):(a??(c=i.getLocalBounds(e),[new Ld(c.minX,c.minY),new Ld(c.maxX,c.minY),new Ld(c.maxX,c.maxY),new Ld(c.minX,c.maxY)])).map(e=>o.applyToPoint(e));var c;d.length>0&&n.push({id:e.id,points:d})}collectSelfHandleSnapGeometry({shape:e,context:t,currentPagePoint:n,points:i,outlines:s}){const o=this.editor.shapes.getUtil(e);if(!o.canSnap(e,{editor:this.editor}))return;const r=this.editor.shapes.getClippedPageBounds(e.id);if(!r)return;const a=o.getHandleSnapGeometry(e),d=this.editor.shapes.computeLocalToPageTransform(e),c={...t,currentPagePoint:n.clone()};for(const u of a.getSelfSnapPoints?.(c)??[]){const t=Is(u),n=d.applyToPoint(t.point);this.editor.shapes.isPagePointInClip(e.id,n)&&i.push({id:`${e.id}:self-point:${i.length}`,nodeId:e.id,point:n,kind:t.kind,weight:t.weight})}const l=a.getSelfSnapOutline?.(c)??null;if(!l)return;const h=this.editor.shapes.getClipAncestorIds(e.id).length>0?_i(r):l.map(e=>d.applyToPoint(e));h.length>0&&s.push({id:e.id,points:h})}createBoundsSnapSnapshot({movingShapeIds:e,coordinateSpace:t}){const n=Array.from(e),i=new Set(this.editor.layers.includeDescendants(n));this.collectBindingDrivenExcludedShapeIds(n,i);const s=[],o=[],r={rotation:t.rotation,rotationCenter:t.rotationCenter},a=this.getSnapScopeParentId(n),d=this.getCandidateShapeIds({excludedShapeIds:i,scopeParentId:a});for(const c of d){const e=this.editor.shapes.get(c);if(!e)continue;const n=this.editor.shapes.getUtil(e);if(!n.canSnap(e,{editor:this.editor}))continue;const i=this.editor.shapes.getClippedPageBounds(e.id);if(!i)continue;const a=(this.editor.shapes.getClipAncestorIds(e.id).length>0?_i(i):this.editor.shapes.getPageOutlineVertices(e.id)).map(e=>0===t.rotation?e.clone():Rn(e,r));if(0===a.length)continue;const d=Yd.FromPoints(a);o.push({id:e.id,bounds:d});const l=n.getBoundsSnapGeometry(e).points,h=[];if(void 0===l)Ki(d).forEach((e,t)=>{h.push({point:e,kind:Ic[t]??"custom"})});else{const n=this.editor.shapes.computeLocalToPageTransform(e);for(const i of l){const s=Is(i),o=n.applyToPoint(s.point);this.editor.shapes.isPagePointInClip(e.id,o)&&h.push({point:0===t.rotation?o:Rn(o,r),kind:s.kind,weight:s.weight})}}h.forEach((t,n)=>{s.push({id:`${e.id}:${n}`,nodeId:e.id,point:t.point,kind:t.kind,weight:t.weight})})}return{points:s,pointIndex:Zi(s),nodes:o,coordinateSpace:{rotation:t.rotation,rotationCenter:t.rotationCenter.clone()},scopeParentId:a,candidateShapeIds:d}}collectBindingDrivenExcludedShapeIds(e,t){const n=new Set,i=[...e];for(;i.length>0;){const e=i.pop();if(!e||n.has(e))continue;n.add(e);const s=this.editor.shapes.get(e);if(s)for(const n of this.editor.bindings.getForShape(e)){const o=n.fromId===e?"from":n.toId===e?"to":null;if(!o)continue;const r=this.editor.bindings.getUtil(n).getGeometryDependentShapeIds?.(this.editor,n,{shape:s,role:o})??[];for(const e of r)for(const n of this.editor.layers.includeDescendants([e]))t.has(n)||(t.add(n),i.push(n))}}}getSnapScopeParentId(e){let t=null;for(const n of e){const e=this.editor.shapes.get(n);if(e)if(t){if(e.parentId!==t)return this.editor.pages.getCurrentId()}else t=e.parentId}return t??this.editor.pages.getCurrentId()}getCandidateShapeIds({excludedShapeIds:e,scopeParentId:t}){const n=this.editor.pages.getCurrentId(),i=this.editor.render.viewport.pageBounds.get(),s=new Set;if(t?.startsWith("shape:")){const e=this.editor.shapes.get(t);e&&this.editor.shapes.getUtil(e).canSnapChildrenToSelf(e)&&s.add(e.id)}const o=t??n;for(const r of this.editor.layers.getChildIds(o))s.add(r);return(null===i?Array.from(s):this.editor.shapes.getIdsInBounds(i,{pageId:n}).filter(e=>s.has(e))).filter(n=>{if(e.has(n))return!1;const s=this.editor.shapes.get(n);if(!s||s.parentId!==o)return n===t;const r=this.editor.shapes.getClippedPageBounds(n);return!!r&&(!i||r.intersects(i))})}},bc=class{diagnostics;gapCache=new WeakMap;_indicatorsSignal;indicatorsSignal;activeSignal;snapshots;axisSnapMemory={x:null,y:null};constructor(e,t={}){this.diagnostics=t,this._indicatorsSignal=e.signals.atom("editor.snapIndicators",[]),this.indicatorsSignal=this._indicatorsSignal,this.activeSignal=e.signals.computed("editor.snapIndicatorsActive",()=>this._indicatorsSignal.get().length>0),this.snapshots=new wc(e)}setIndicators(e){const t=e.map(Ss);as(this._indicatorsSignal.get(),t)||this._indicatorsSignal.set(t)}clearIndicators(){this._indicatorsSignal.get().length>0&&this._indicatorsSignal.set([]),this.clearAxisSnapMemory()}clearAxisSnapMemory(){this.axisSnapMemory.x=null,this.axisSnapMemory.y=null}getSwitchDistance(e){return Math.min(.25*e,2)}getReleaseThreshold(e){return 1.5*e}updateAxisSnapMemory(e,t){this.axisSnapMemory[e]=t?{type:t.type,id:t.id,candidatePointIds:"points"===t.type?t.candidatePointIds:void 0}:null}reportDiagnostics(e){this.diagnostics.onEvaluation?.(e)}getNow(){return this.diagnostics.now?.()??Date.now()}createTranslateSnapshot({movingShapeIds:e,coordinateSpace:t}){const n=this.snapshots.createTranslateSnapshot({movingShapeIds:e,coordinateSpace:t});return this.gapCache.set(n,{x:Vi(n.nodes,"x"),y:Vi(n.nodes,"y")}),n}createResizeSnapshot({resizingShapeIds:e,coordinateSpace:t}){return this.snapshots.createResizeSnapshot({resizingShapeIds:e,coordinateSpace:t})}createHandleSnapshot(e){return this.snapshots.createHandleSnapshot(e)}snapTranslate(e){const t=this.getNow(),n=Ni(e.initialSelectionBounds,e.dragDelta),i=(s=Ki(e.initialSelectionBounds),o=e.dragDelta,s.map(e=>e.add(o)));var s,o;const r=this.gapCache.get(e.snapshot)??{x:Vi(e.snapshot.nodes,"x"),y:Vi(e.snapshot.nodes,"y")},a=this.getReleaseThreshold(e.threshold),d=this.getSwitchDistance(e.threshold),c=this.axisSnapMemory.x,l=this.axisSnapMemory.y,h={candidatePointCount:0,matchedPointCount:0},u="y"===e.lockedAxis?null:rs(ss("x",i,e.snapshot.pointIndex,e.threshold,{previousCandidatePointIds:"points"===c?.type?new Set(c.candidatePointIds??[]):void 0,releaseThreshold:a,selectionPointKinds:Ic,switchDistance:d,stats:h}),Qi("x",n,r.x,e.threshold,{previousSnapId:"gaps"===c?.type?c.id:null,releaseThreshold:a,switchDistance:d}),{previousSnap:c,switchDistance:d}),p="x"===e.lockedAxis?null:rs(ss("y",i,e.snapshot.pointIndex,e.threshold,{previousCandidatePointIds:"points"===l?.type?new Set(l.candidatePointIds??[]):void 0,releaseThreshold:a,selectionPointKinds:Ic,switchDistance:d,stats:h}),Qi("y",n,r.y,e.threshold,{previousSnapId:"gaps"===l?.type?l.id:null,releaseThreshold:a,switchDistance:d}),{previousSnap:l,switchDistance:d}),g=new Ld(u?.nudge??0,p?.nudge??0),f=[];return"points"===u?.type?f.push(...ls("x",u,g,e.snapshot.coordinateSpace)):"gaps"===u?.type&&f.push(ys(u,e.snapshot.coordinateSpace,g)),"points"===p?.type?f.push(...ls("y",p,g,e.snapshot.coordinateSpace)):"gaps"===p?.type&&f.push(ys(p,e.snapshot.coordinateSpace,g)),this.setIndicators(f),this.updateAxisSnapMemory("x",u),this.updateAxisSnapMemory("y",p),this.reportDiagnostics({operation:"translate",durationMs:this.getNow()-t,pointCount:e.snapshot.points.length,nodeCount:e.snapshot.nodes.length,candidatePointCount:h.candidatePointCount,candidateGapCount:("y"===e.lockedAxis?0:r.x.length)+("x"===e.lockedAxis?0:r.y.length),matchedPointCount:h.matchedPointCount,xSnapId:u?.id??null,ySnapId:p?.id??null,indicatorCount:f.length}),{nudge:g,indicators:f}}snapResize(e){const t=this.getNow(),n=Ai({handleId:e.handleId,scaleX:e.scaleX,scaleY:e.scaleY}),i=os(n,e.resizedSelectionBounds),s="top"===n||"bottom"===n,o="left"===n||"right"===n,r=this.getReleaseThreshold(e.threshold),a=this.getSwitchDistance(e.threshold),d=this.axisSnapMemory.x,c=this.axisSnapMemory.y,l={candidatePointCount:0,matchedPointCount:0},h=s?null:ss("x",i,e.snapshot.pointIndex,e.threshold,{previousCandidatePointIds:"points"===d?.type?new Set(d.candidatePointIds??[]):void 0,releaseThreshold:r,switchDistance:a,stats:l}),u=o?null:ss("y",i,e.snapshot.pointIndex,e.threshold,{previousCandidatePointIds:"points"===c?.type?new Set(c.candidatePointIds??[]):void 0,releaseThreshold:r,switchDistance:a,stats:l}),p={x:null!==h,y:null!==u},g=new Ld(h?.nudge??0,u?.nudge??0);if(e.isAspectRatioLocked&&Mi(f=n)!==Ei(f)&&ki(f)!==Bi(f)&&(0!==g.x||0!==g.y)){const t=h&&u?Math.abs(g.x)<Math.abs(g.y)?"x":"y":h?"x":"y",i=0===e.initialSelectionBounds.h?1:e.initialSelectionBounds.w/e.initialSelectionBounds.h;"x"===t?(p.y=!1,g.y=g.x/i,"bottom_left"!==n&&"top_right"!==n||(g.y=-g.y)):(p.x=!1,g.x=g.y*i,"bottom_left"!==n&&"top_right"!==n||(g.x=-g.x))}var f;const m=function(e,t){const n=Ai({handleId:e.handleId,scaleX:e.scaleX,scaleY:e.scaleY});let i=e.resizedSelectionBounds.minX,s=e.resizedSelectionBounds.maxX,o=e.resizedSelectionBounds.minY,r=e.resizedSelectionBounds.maxY;e.isResizingFromCenter?(Mi(n)?(i+=t.x,s-=t.x):Ei(n)&&(i-=t.x,s+=t.x),ki(n)?(o+=t.y,r-=t.y):Bi(n)&&(o-=t.y,r+=t.y)):(Mi(n)?i+=t.x:Ei(n)&&(s+=t.x),ki(n)?o+=t.y:Bi(n)&&(r+=t.y));const a=(({minX:e,minY:t,maxX:n,maxY:i})=>{const s=Math.min(e,n),o=Math.min(t,i),r=Math.max(e,n),a=Math.max(t,i);return new Yd(s,o,Math.max(1,r-s),Math.max(1,a-o))})({minX:i,minY:o,maxX:s,maxY:r});if(!e.isAspectRatioLocked){const t=(({startBounds:e,bounds:t,handleId:n,scaleX:i,scaleY:s,isResizingFromCenter:o=!1})=>{const r=Ri({axis:"x",startBounds:e,bounds:t,handleId:n,scale:i,isResizingFromCenter:o}),a=Ri({axis:"y",startBounds:e,bounds:t,handleId:n,scale:s,isResizingFromCenter:o});return{scaleX:Mi(n)||Ei(n)?r*(t.w/Math.max(1,e.w)):i??1,scaleY:ki(n)||Bi(n)?a*(t.h/Math.max(1,e.h)):s??1}})({startBounds:e.initialSelectionBounds,bounds:a,handleId:e.handleId,scaleX:e.scaleX,scaleY:e.scaleY,isResizingFromCenter:e.isResizingFromCenter});return{bounds:a,scaleX:t.scaleX,scaleY:t.scaleY}}return Fi({startBounds:e.initialSelectionBounds,bounds:a,handleId:e.handleId,aspectRatio:0===e.initialSelectionBounds.h?1:e.initialSelectionBounds.w/e.initialSelectionBounds.h,isResizingFromCenter:e.isResizingFromCenter,scaleX:e.scaleX,scaleY:e.scaleY})}(e,g),{bounds:y}=m,S=os("any",y),I=[];if(p.x){const t=ss("x",S,e.snapshot.pointIndex,1e-8,{stats:l});t&&I.push(...fs("x",t,Ld.Zero(),e.snapshot.coordinateSpace,y,e.snapshot.nodes))}if(p.y){const t=ss("y",S,e.snapshot.pointIndex,1e-8,{stats:l});t&&I.push(...fs("y",t,Ld.Zero(),e.snapshot.coordinateSpace,y,e.snapshot.nodes))}return this.setIndicators(I),this.updateAxisSnapMemory("x",p.x?h:null),this.updateAxisSnapMemory("y",p.y?u:null),this.reportDiagnostics({operation:"resize",durationMs:this.getNow()-t,pointCount:e.snapshot.points.length,nodeCount:e.snapshot.nodes.length,candidatePointCount:l.candidatePointCount,candidateGapCount:0,matchedPointCount:l.matchedPointCount,xSnapId:p.x?h?.id??null:null,ySnapId:p.y?u?.id??null:null,indicatorCount:I.length}),{nudge:g,bounds:y,scaleX:m.scaleX,scaleY:m.scaleY,indicators:I}}snapHandle(e){const t=this.getNow();if("none"===e.mode)return this.clearIndicators(),this.reportDiagnostics({operation:"handle",durationMs:this.getNow()-t,pointCount:e.snapshot.points.length,nodeCount:0,outlineCount:e.snapshot.outlines.length,candidatePointCount:e.snapshot.points.length,candidateGapCount:0,matchedPointCount:0,indicatorCount:0}),null;const n="point"===e.mode?this.snapHandlePoint(e):this.snapHandleAlign(e);return n?(this.setIndicators(n.indicators),this.reportDiagnostics({operation:"handle",durationMs:this.getNow()-t,pointCount:e.snapshot.points.length,nodeCount:0,outlineCount:e.snapshot.outlines.length,candidatePointCount:e.snapshot.points.length,candidateGapCount:0,matchedPointCount:n.indicators.length,indicatorCount:n.indicators.length}),n):(this.clearIndicators(),this.reportDiagnostics({operation:"handle",durationMs:this.getNow()-t,pointCount:e.snapshot.points.length,nodeCount:0,outlineCount:e.snapshot.outlines.length,candidatePointCount:e.snapshot.points.length,candidateGapCount:0,matchedPointCount:0,indicatorCount:0}),null)}snapHandlePoint(e){const t=vs(e);let n=null,i=null,s=e.threshold*e.threshold;for(const a of t)for(const t of e.snapshot.points){const e=a.dist2(t.point);e>s||(s=e,n=t.point,i=a)}if(!n)for(const a of t)for(const t of e.snapshot.outlines){const e=Wi(a,t.points);!e||e.distanceSquared>s||(s=e.distanceSquared,n=e.point,i=a)}if(!n||!i)return null;const o=n.sub(i);return{snappedPagePoint:e.pagePoint.add(o),nudge:o,indicators:[(r=n,{id:gs("x",[r,r],[r]),type:"points",axis:"x",line:[r.clone(),r.clone()],points:[r.clone()],rotation:0,rotationCenter:r.clone()})]};var r}snapHandleAlign(e){const t=vs(e);let n=null,i=null,s=null,o=null,r=e.threshold,a=e.threshold;for(const h of t)for(const t of e.snapshot.points){const e=Math.abs(t.point.x-h.x);e<=r&&(r=e,n=t.point,s=h);const d=Math.abs(t.point.y-h.y);d<=a&&(a=d,i=t.point,o=h)}if(!n&&!i)return null;const d=new Ld(n&&s?n.x-s.x:0,i&&o?i.y-o.y:0),c=e.pagePoint.add(d),l=[];return n&&s&&l.push(ms("x",s.add(d),n)),i&&o&&l.push(ms("y",o.add(d),i)),{snappedPagePoint:c,nudge:d,indicators:l}}},Pc=class{editor;_brushBoxSignal;brushBoxSignal;brushBoxActiveSignal;_bindingPreviewSignal;bindingPreviewSignal;bindingPreviewActiveSignal;_terminalBindingGuidesSignal;terminalBindingGuidesSignal;_dropTargetShapeIdSignal;dropTargetShapeIdSignal;_hoveredShapeIdSignal;hoveredShapeIdSignal;_selectionTranslationActiveSignal;selectionTranslationActiveSignal;terminalBindingResolver=(e,t)=>(({rawPagePoint:e})=>({pagePoint:e.clone(),binding:null,preview:null}))(t);constructor(e){this.editor=e;const{atom:t,computed:n}=e.signals;this._brushBoxSignal=t("editor.brushBox",null),this.brushBoxSignal=this._brushBoxSignal,this.brushBoxActiveSignal=n("editor.brushBoxActive",()=>null!==this._brushBoxSignal.get()),this._bindingPreviewSignal=t("editor.bindingPreview",null),this.bindingPreviewSignal=this._bindingPreviewSignal,this.bindingPreviewActiveSignal=n("editor.bindingPreviewActive",()=>null!==this._bindingPreviewSignal.get()),this._terminalBindingGuidesSignal=t("editor.terminalBindingGuides",[]),this.terminalBindingGuidesSignal=this._terminalBindingGuidesSignal,this._dropTargetShapeIdSignal=t("editor.dropTargetShapeId",null),this.dropTargetShapeIdSignal=this._dropTargetShapeIdSignal,this._hoveredShapeIdSignal=t("editor.hoveredShapeId",null),this.hoveredShapeIdSignal=this._hoveredShapeIdSignal,this._selectionTranslationActiveSignal=t("editor.selectionTranslationActive",!1),this.selectionTranslationActiveSignal=this._selectionTranslationActiveSignal}setBrushBox(e){ee(this._brushBoxSignal.get(),e)||this._brushBoxSignal.set(e?e.clone():null)}setBindingPreview(e){var t,n;(t=this._bindingPreviewSignal.get())===(n=e)||(t&&n?t.terminal===n.terminal&&t.targetShapeId===n.targetShapeId&&Q(t.rawPagePoint,n.rawPagePoint)&&Q(t.resolvedPagePoint,n.resolvedPagePoint)&&(t.guidePath??null)===(n.guidePath??null):t===n)||this._bindingPreviewSignal.set(e?{...e,rawPagePoint:e.rawPagePoint.clone(),resolvedPagePoint:e.resolvedPagePoint.clone()}:null)}setTerminalBindingGuides(e){const t=e??[];((e,t)=>{if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){const i=e[n],s=t[n];if(!i||!s||!An(i,s))return!1}return!0})(this._terminalBindingGuidesSignal.get(),t)||this._terminalBindingGuidesSignal.set(t.map(En))}setDropTargetShapeId(e){this._dropTargetShapeIdSignal.get()!==e&&this._dropTargetShapeIdSignal.set(e)}setHoveredShapeId(e){this._hoveredShapeIdSignal.get()!==e&&this._hoveredShapeIdSignal.set(e)}setSelectionTranslationActive(e){this._selectionTranslationActiveSignal.get()!==e&&this._selectionTranslationActiveSignal.set(e)}setSnapIndicators(e){e?this.editor.snaps.setIndicators(e):this.editor.snaps.clearIndicators()}setTerminalBindingResolver(e){this.terminalBindingResolver=e}resolveTerminalBinding(e){return this.terminalBindingResolver(this.editor,e)}clearSelectionTransients(){this.setBrushBox(null),this.setBindingPreview(null),this.setTerminalBindingGuides(null),this.setDropTargetShapeId(null),this.setHoveredShapeId(null),this.setSelectionTranslationActive(!1),this.setSnapIndicators(null)}},xc=class{editor;animationScheduler;_viewportScreenSizeSignal;viewportScreenSizeSignal;animationFrame=null;animationGeneration=0;constructor(e,t){this.editor=e,this.animationScheduler=t,this._viewportScreenSizeSignal=e.signals.atom("editor.viewportScreenSize",{w:0,h:0}),this.viewportScreenSizeSignal=this._viewportScreenSizeSignal}getCurrentCamera(){return this.editor.state.camera.get()}getCamera(e=this.editor.pages.getCurrentId()){return this.editor.state.session.get().pageCameraById[e]??Ad}pageToScreen(e,t=this.editor.pages.getCurrentId()){const n=this.getCamera(t);return new e.constructor((e.x-n.x)*n.z,(e.y-n.y)*n.z)}screenToPage(e,t=this.editor.pages.getCurrentId()){const n=this.getCamera(t);return new e.constructor(e.x/n.z+n.x,e.y/n.z+n.y)}setCamera(e,t){this.cancelAnimation(),this.writeCamera(e,t)}animateCameraTo(e,t){this.cancelAnimation();const n=this.animationScheduler,i=t.pageId??this.editor.pages.getCurrentId(),s=t.source??"system",o=this.getCamera(i),r=Number.isFinite(t.durationMs)&&t.durationMs>0?t.durationMs:0;if(!n||!0===n.prefersReducedMotion?.()||0===r||(a=o).x===(d=e).x&&a.y===d.y&&a.z===d.z)return void this.writeCamera(e,{pageId:i,source:s});var a,d;const c=this.animationGeneration;let l=null;const h=t=>{if(c!==this.animationGeneration)return;l??=t;const a=Math.min(1,Math.max(0,(t-l)/r)),d=(e=>1-(1-e)**3)(a);this.writeCamera({x:Ps(o.x,e.x,d),y:Ps(o.y,e.y,d),z:Ps(o.z,e.z,d)},{pageId:i,source:s}),c===this.animationGeneration&&(this.animationFrame=a>=1?null:{handle:n.requestFrame(h)})};this.animationFrame={handle:n.requestFrame(h)}}cancelAnimation(){this.animationGeneration+=1,this.animationFrame&&(this.animationScheduler?.cancelFrame(this.animationFrame.handle),this.animationFrame=null)}dispose(){this.cancelAnimation()}writeCamera(e,t){const n=t?.source??"system",i=t?.pageId??this.editor.pages.getCurrentId(),s=this.getCamera(i),o={x:"number"==typeof e.x?e.x:s.x,y:"number"==typeof e.y?e.y:s.y,z:vn("number"==typeof e.z?e.z:s.z)};o.x===s.x&&o.y===s.y&&o.z===s.z||this.editor.session.update({pageCameraById:{...this.editor.state.session.get().pageCameraById,[i]:o}},n)}panCamera(e,t="system"){const n=this.getCurrentCamera();this.setCamera({x:n.x+e.x/n.z,y:n.y+e.y/n.z},{source:t})}zoomCameraAtScreenPoint(e,t,n="system"){const i=vn(this.getCurrentCamera().z*Math.exp(.0015*-t));this.zoomCameraToScreenPoint(e,i,n)}zoomCameraToScreenPoint(e,t,n="system"){const i=vn(t),s=this.screenToPage(e);this.setCamera({x:s.x-e.x/i,y:s.y-e.y/i,z:i},{source:n})}zoomAtViewportCenter(e,t="system"){const n=this.viewportScreenSizeSignal.get(),i=new Ld(n.w/2,n.h/2);this.zoomCameraAtScreenPoint(i,e,t)}resetZoom(e="user"){const t=this.viewportScreenSizeSignal.get(),n=new Ld(t.w/2,t.h/2),i=this.screenToPage(n);this.editor.commands.setCamera({camera:{x:i.x-n.x,y:i.y-n.y,z:1}},{source:e})}setViewportScreenSize(e){const t={w:Math.max(0,e.w),h:Math.max(0,e.h)},n=this._viewportScreenSizeSignal.get();n.w===t.w&&n.h===t.h||this._viewportScreenSizeSignal.set(t)}},Cc=class{shapeRenderOrderByIdSignal;culledShapeIdsSignal;culledShapeIdSetSignal;selectedShapeIdsOutsideCulledSignal;selectedShapeIdsOutsideCulledSetSignal;renderVisibleShapeIdsSignal;retainedShapeIdsSignal;renderVisibleShapeIdSetSignal;renderItemsSignal;retainedBaseShapeWindowSnapshotSignal;retainedShapeWindowSnapshotSignal;constructor(e,t){const{computed:n}=e.signals;this.shapeRenderOrderByIdSignal=n("editor.shapeRenderOrderById",()=>{const e=new Map;for(const[n,i]of t.currentPageShapeIds.get().entries())e.set(i,n);return e}),this.culledShapeIdsSignal=n("editor.culledShapeIds",()=>{const n=t.currentPageId.get(),i=t.renderViewportPageBounds.get();return i?e.shapes.getIdsInViewport(i,{pageId:n}):t.currentPageShapeIds.get()},{isEqual:G}),this.retainedBaseShapeWindowSnapshotSignal=n("editor.retainedBaseShapeWindowSnapshot",e=>{const n=t.currentPageShapeIds.get(),i=null!==t.viewportPageBounds.get(),s=((e,t,n=0)=>Cs(e.map(e=>t.get(e)).filter(e=>void 0!==e).map(e=>({start:e,end:e+1})),n))(this.culledShapeIdsSignal.get(),this.getPageIndexById(n));if(e!==wd&&e&&e.viewportReady&&s.length>0){const t=((e,t)=>{if(e.length!==t.length||0===t.length)return null;const n=t.map((n,i)=>{const s=e[i];if(!s)return null;if(s.end+2<n.start||s.start>n.end+2)return null;const o=i>0?t[i-1]:null,r=i<t.length-1?t[i+1]:null,a=r?r.start-3:1/0,d={start:Math.min(n.start,Math.max(o?o.end+3:-1/0,s.start)),end:Math.max(n.end,Math.min(a,s.end))};return d.end-d.start>n.end-n.start+4?null:d});if(n.some(e=>null===e))return null;const i=n;if(Cs(i).length!==t.length)return null;const s=Ms(t);return Ms(i)>s+12?null:i})(Cs(e.ranges.map(e=>({...e}))),s);if(t)return ks(n,t,{viewportReady:i})}return ks(n,s,{viewportReady:i})},{isEqual:(e,t)=>G(e.shapeIds,t.shapeIds)}),this.culledShapeIdSetSignal=n("editor.culledShapeIdSet",()=>new Set(this.culledShapeIdsSignal.get()),{isEqual:j}),this.selectedShapeIdsOutsideCulledSignal=n("editor.selectedShapeIdsOutsideCulled",()=>{const e=t.selectedShapeIds.get();if(0===e.length)return[];const n=this.culledShapeIdSetSignal.get();return e.filter(e=>!n.has(e))},{isEqual:G}),this.selectedShapeIdsOutsideCulledSetSignal=n("editor.selectedShapeIdsOutsideCulledSet",()=>new Set(this.selectedShapeIdsOutsideCulledSignal.get()),{isEqual:j}),this.renderVisibleShapeIdsSignal=n("editor.renderVisibleShapeIds",()=>{if(0===this.selectedShapeIdsOutsideCulledSignal.get().length)return this.culledShapeIdsSignal.get();const e=this.culledShapeIdSetSignal.get(),n=this.selectedShapeIdsOutsideCulledSetSignal.get();return t.currentPageShapeIds.get().filter(t=>e.has(t)||n.has(t))},{isEqual:G}),this.retainedShapeWindowSnapshotSignal=n("editor.retainedShapeWindowSnapshot",e=>{const n=t.currentPageShapeIds.get(),i=null!==t.viewportPageBounds.get(),s=this.retainedBaseShapeWindowSnapshotSignal.get().shapeIds,o=(r=s.length)<=0?0:xs(Math.ceil(.5*r),12,96);var r;const a=((e,t,n,i)=>{if(0===e.length)return[];const s=new Map;for(const[a,d]of e.entries())s.set(d,a);const o=Cs(t.map(e=>s.get(e)).filter(e=>void 0!==e).sort((e,t)=>e-t).map(e=>({start:e,end:e+1})),2),r=[];if(o.length>0){const t=xs(Math.ceil(i/(2*o.length)),8,32);for(const[n,i]of o.entries()){const s=n>0?o[n-1]:null,a=n<o.length-1?o[n+1]:null,d=a?a.start-i.end:1/0,c=Ts(s?i.start-s.end:1/0,t),l=Ts(d,t+4);r.push({start:Math.max(0,i.start-c),end:Math.min(e.length,i.end+l)})}}for(const a of n){const e=s.get(a);void 0!==e&&r.push({start:e,end:e+1})}return 0===r.length?[]:Cs(r,2)})(n,s,this.selectedShapeIdsOutsideCulledSetSignal.get(),o);if(i&&e!==wd&&e&&e.viewportReady&&e.ranges.length>0&&a.length>0){const t=Cs(e.ranges.map(e=>({...e})));if(((e,t)=>{if(0===t.length)return!0;if(0===e.length)return!1;let n=0;for(const i of t){for(;n<e.length;){const t=e[n];if(t&&i.start>=t.start&&i.end<=t.end)break;if(!(t&&i.end>t.end))return!1;n+=1}if(n>=e.length)return!1}return!0})(t,a))return ks(n,t,{viewportReady:i});const s=((e,t,n)=>{const i=t.map((n,i)=>{const s={...n};for(const t of e)t.end+6<n.start||t.start>n.end+6||(s.start=Math.min(s.start,t.start),s.end=Math.max(s.end,t.end));const o=i>0?t[i-1]:null,r=i<t.length-1?t[i+1]:null,a=r?r.start-3:1/0;return{start:Math.min(n.start,Math.max(o?o.end+3:-1/0,s.start)),end:Math.max(n.end,Math.min(a,s.end))}});if(Cs(i).length!==t.length)return null;const s=Ms(t);return Ms(i)>s+n?null:i})(t,a,o);if(s)return ks(n,s,{viewportReady:i})}return ks(n,a,{viewportReady:i})},{isEqual:(e,t)=>G(e.shapeIds,t.shapeIds)}),this.retainedShapeIdsSignal=n("editor.retainedShapeIds",()=>this.retainedShapeWindowSnapshotSignal.get().shapeIds,{isEqual:G}),this.renderVisibleShapeIdSetSignal=n("editor.renderVisibleShapeIdSet",()=>new Set(this.renderVisibleShapeIdsSignal.get()),{isEqual:j}),this.renderItemsSignal=n("editor.renderItems",()=>{const n=t.selectedShapeIdSet.get(),i=[];for(const t of this.renderVisibleShapeIdsSignal.get()){const s=e.shapes.getSignal(t).get(),o=e.shapes.getPageBoundsSignal(t).get();s&&!s.isHidden&&o&&i.push({id:s.id,shape:s,bounds:o,isSelected:n.has(s.id)})}return i},{isEqual:bs})}getPageIndexById(e){const t=new Map;for(const[n,i]of e.entries())t.set(i,n);return t}},Tc=class{signals=e();store;[Rd];inputs;tools;cameraManager;editing;shapeUtils=new Hd;shapeSvgExporters=new Nd;bindingUtils=new Dd;interactions=new tc;runtime=new _d;bindingQueries;shapeGeometryQueries;shapeTreeIndex;selectionGeometry;bindingManager;spatialIndex;snaps;renderWindowManager;shapeSignals;selectionOverlay;interactionManager;eventRouter;history;operations;commands;state;render;_shapeDefaultPropsByTypeSignal;assetUrlResolver=()=>null;_readonlySignal;writesClosed=!1;document={getMetadata:()=>{const e=this.store.get(Ed);return h(e)?e:void 0},updateMetadata:(e,t="user")=>this.commands.updateDocumentMeta({patch:e},{source:t}),setReadonly:e=>{if(!this.writesClosed&&this._readonlySignal.get()!==e){if(e){this.interaction.cancelForCommand(),this.state.shapeEditingSession.get()?.isComposing&&this.editing.setComposition(!1,"system"),this.editing.cancel("system");const e=this.state.tool.get().activeToolId;"select"!==e&&"hand"!==e&&this.tools.select("select","system")}this._readonlySignal.set(e)}}};session={get:()=>{const e=this.store.get(Bd);if(!p(e))throw new Error("Missing session record");return e},update:(e,t="system")=>{Fe(this,e,t)}};pages={getAll:()=>this.state.pages.get(),get:e=>{const t=this.store.get(e);return l(t)?t:void 0},getCurrentId:()=>this.state.currentPageId.get(),createAndSelect:(e,t="user")=>{const n=this.commands.createPage(e,{source:t});return this.commands.setCurrentPageId(n.id,{source:t}),n},select:(e,t="user")=>{this.commands.setCurrentPageId(e,{source:t})},rename:(e,t,n="user")=>{this.commands.renamePage({id:e,name:t},{source:n})},updateMetadata:(e,t,n="user")=>this.commands.updatePageMeta({id:e,patch:t},{source:n}),delete:(e,t="user")=>(this.interaction.cancelForCommand(),this.commands.deletePage(e,{source:t}))};selection={getIds:(e=this.pages.getCurrentId())=>this.session.get().pageSelectedShapeIdsById[e]??[],set:(e,t)=>{Re(this,e,t)},remove:(e,t="system")=>{((e,t,n="system")=>{if(0===t.length)return;const i=new Set(t),s=e.session.get(),o={};for(const r of e.pages.getAll())o[r.id]=(s.pageSelectedShapeIdsById[r.id]??[]).filter(e=>!i.has(e));e.session.update({pageSelectedShapeIdsById:o},n)})(this,e,t)},delete:(e="user")=>{this.shapes.delete(this.selection.getIds(),e)},createClipboardPayload:()=>Ce(this),pasteClipboardPayload:e=>(this.interaction.cancelForCommand(),Te(this,e)),duplicate:(e={})=>(this.interaction.cancelForCommand(),((e,t={})=>{const n=Ce(e);return n?Te(e,{payload:n,offset:t.offset??Vd,source:t.source}):[]})(this,e)),selectAll:(e="user")=>{this.interaction.cancelForCommand(),((e,t="user")=>{const n=e.pages.getCurrentId(),i=e.state.currentPageShapeIds.get().map(t=>e.shapes.get(t)).filter(t=>!!t&&t.parentId===n&&!e.shapes.isHidden(t.id)).map(e=>e.id);e.commands.setSelectedShapeIds(i,{source:t})})(this,e)},resetRotation:(e="user")=>{((e,t="user")=>{if(!e.selection.canRotate())return;const n=e.state.selectedShapes.get().filter(t=>e.shapes.getUtil(t).contributesToSelectionFrame(t,{editor:e}));if(0===n.length)return;const i=n.flatMap(t=>{const n=rn(e,t);if(!n)return[];const i=an(e,t,n,{id:t.id,rotation:0});return i?[i]:[]});i.length>0&&e.commands.updateShapes(i,{source:t})})(this,e)},flip:(e,t="user")=>{const n=function(e,t){if(!e.selection.canFlip())return[];const n=e.selection.getTransformTargets(),i=e.selection.getFrame()??((e,t)=>{const n=t.flatMap(t=>{const n=rn(e,t);return n?e.shapes.getUtil(t).getSelectionPagePoints(n)??[]:[]});if(0===n.length)return null;const i=Yd.FromPoints(n);return{bounds:i,rotation:0,rotationCenter:i.center,hasCompatibleRotation:!0}})(e,n);return i&&0!==n.length?n.map(n=>((e,t,n,i)=>{const s=e.shapes.getUtil(t),o=rn(e,t);if(!o)return null;const r=s.getSelectionPagePoints(o);if(!r&&!s.contributesToSelectionFrame(t,{editor:e}))return null;const a=(({points:e,transform:t})=>0===e.length?null:Yd.FromPoints(e.map(e=>Rn(e,t))))({points:r?[...r]:s.getPositionedOutlineVertices(t).map(n=>e.shapes.computePositionedToPageTransform(t).applyToPoint(n)),transform:n});return a?an(e,t,o,s.flipSelectionBounds(o,{axis:i,selectionBounds:n.bounds,selectionLocalBounds:Yn({axis:i,bounds:a,selectionBounds:n.bounds}),selectionRotation:n.rotation,selectionRotationCenter:n.rotationCenter})):null})(e,n,i,t)).filter(e=>null!==e):[]}(this,e);0!==n.length&&(this.interaction.cancelForCommand(),this.commands.updateShapes(n,{source:t}))},canAlign:()=>xn(this,2),align:(e,t="user")=>(this.interaction.cancelForCommand(),((e,t,n="user")=>{const i=Cn(e);if(i.length<2)return!1;const s=Tn(e,i[0].shape.parentId);if(!s)return!1;const o=Yd.FromPoints(i.flatMap(e=>[new Ld(e.bounds.minX,e.bounds.minY),new Ld(e.bounds.maxX,e.bounds.maxY)])),r=i.map(({shape:e,bounds:n})=>{let i=0,r=0;switch(t){case"left":i=o.minX-n.minX;break;case"right":i=o.maxX-n.maxX;break;case"horizontal-center":i=o.center.x-n.center.x;break;case"top":r=o.minY-n.minY;break;case"bottom":r=o.maxY-n.maxY;break;case"vertical-center":r=o.center.y-n.center.y}const a=Mn(s,new Ld(i,r));return{id:e.id,x:e.x+a.x,y:e.y+a.y}});return e.commands.updateShapes(r,{source:n}),!0})(this,e,t)),canDistribute:()=>xn(this,3),distribute:(e,t="user")=>(this.interaction.cancelForCommand(),((e,t,n="user")=>{const i=Cn(e);if(i.length<3)return!1;const s=Tn(e,i[0].shape.parentId);if(!s)return!1;const o="horizontal"===t,r=e=>o?e.w:e.h,a=e=>o?e.minX:e.minY,d=o?"x":"y",c=[...i].sort((e,t)=>e.bounds.center[d]-t.bounds.center[d]),l=c[0].bounds,h=c[c.length-1].bounds,u=((o?h.maxX:h.maxY)-a(l)-c.reduce((e,t)=>e+r(t.bounds),0))/(c.length-1);let p=a(l);const g=c.map(({shape:e,bounds:t},n)=>{const i=0===n||n===c.length-1?a(t):p,d=i-a(t);p=i+r(t)+u;const l=Mn(s,o?new Ld(d,0):new Ld(0,d));return{id:e.id,x:e.x+l.x,y:e.y+l.y}});return e.commands.updateShapes(g,{source:n}),!0})(this,e,t)),canResize:()=>(e=>{const t=Sn(e),n=1===t.length;return t.length>0&&t.every(t=>e.shapes.getUtil(t).canParticipateInSelectionResize(t,{editor:e,isOnlyAffectedShape:n}))})(this),canFlip:()=>yn(this),canRotate:()=>(e=>{const t=Sn(e),n=1===t.length;return t.length>0&&t.every(t=>e.shapes.getUtil(t).canParticipateInSelectionRotation(t,{editor:e,isOnlyAffectedShape:n}))})(this),getTransformTargets:()=>{return fn(e=this,e.selection.getIds()).map(t=>e.shapes.get(t)).filter(e=>!!e);var e},getResizeTargets:()=>(e=>{const t=[],n=new Set,i=s=>{if(!n.has(s.id))if(n.add(s.id),e.shapes.getUtil(s).shouldResizeDescendants(s))for(const t of e.layers.getChildren(s.id))i(t);else t.push(s)};for(const s of In(e,e.selection.getIds())){const t=e.shapes.get(s);t&&i(t)}return t})(this),getRotationTargets:()=>{return mn(e=this,e.selection.getIds()).map(t=>e.shapes.get(t)).filter(e=>!!e);var e},getPageBounds:()=>this.selectionGeometry.pageBounds.get()?.clone()??null,getFrame:()=>ui(this),containsPoint:e=>((e,t)=>{const n=ui(e);if(!n)return!1;const i=pi(e,t);return!!i&&n.bounds.containsPoint(i)})(this,e),toFramePoint:e=>pi(this,e),getPageOutlineVertices:()=>this.selectionGeometry.pageOutlineVertices.get().map(e=>e.clone()),getAnchorPagePoint:()=>this.selectionGeometry.selectionAnchorPagePoint.get()?.clone()??null,getFrameBounds:()=>this.selectionGeometry.frameBounds.get()?.clone()??null,getRotationCenter:()=>this.selectionGeometry.rotationCenter.get()?.clone()??null,getRotation:()=>this.selectionGeometry.rotation.get(),hasCompatibleRotation:()=>this.selectionGeometry.hasCompatibleRotation.get(),hitTestHandle:e=>this.selectionOverlay.hitTestHandle(e)};shapes={get:e=>{const t=this.store.get(e);return u(t)?t:void 0},getForPage:e=>this.shapeTreeIndex.getShapesForPage(e),getSignal:e=>this.shapeSignals.getShapeSignal(e),getContentCutoutLocalPolygonsSignal:e=>this.shapeSignals.getContentCutoutLocalPolygonsSignal(e),getLocalToPageTransformSignal:e=>this.shapeGeometryQueries.getShapeLocalToPageTransformSignal(e),getLocalToPageTransform:e=>this.shapeGeometryQueries.getShapeLocalToPageTransform(e)??null,getPageBoundsSignal:e=>this.shapeGeometryQueries.getShapePageBoundsSignal(e),getSelectedSignal:e=>this.shapeSignals.getSelectedSignal(e),getRenderOrderSignal:e=>this.shapeSignals.getRenderOrderSignal(e),getRenderVisibleSignal:e=>this.shapeSignals.getRenderVisibleSignal(e),getDocumentVisibleSignal:e=>this.shapeSignals.getDocumentVisibleSignal(e),getEffectiveOpacitySignal:e=>this.shapeSignals.getEffectiveOpacitySignal(e),getEditingSessionSignal:e=>this.shapeSignals.getEditingSessionSignal(e),getDropTargetSignal:e=>this.shapeSignals.getDropTargetSignal(e),getHoveredSignal:e=>this.shapeSignals.getHoveredSignal(e),getSelectedDescendantTransformAncestorSignal:e=>this.shapeSignals.getSelectedDescendantTransformAncestorSignal(e),isHidden:e=>this.shapeSignals.isDocumentHidden(e),getDefaultProps:e=>{const t=this.shapeUtils.get(e),n=this._shapeDefaultPropsByTypeSignal.get().get(e)??{};return t.validateProps({...t.getDefaultProps(),...n})},updateDefaultProps:(e,t)=>{const n=this.shapeUtils.get(e),i=this._shapeDefaultPropsByTypeSignal.get().get(e)??{},s=n.validateProps({...n.getDefaultProps(),...i,...t}),o=n.validateProps(n.getDefaultProps()),r={};for(const[d,c]of Object.entries(s))o[d]!==c&&(r[d]=c);if(((e,t)=>{if(e===t)return!0;const n=Object.entries(e),i=Object.entries(t);if(n.length!==i.length)return!1;for(const[s,o]of n)if(!te(o,t[s]))return!1;return!0})(i,r))return;const a=new Map(this._shapeDefaultPropsByTypeSignal.get());0===Object.keys(r).length?a.delete(e):a.set(e,r),this._shapeDefaultPropsByTypeSignal.set(a)},delete:(e,t="user")=>{const n=Array.from(new Set(e));0!==n.length&&(this.interaction.cancelForCommand(),this.commands.deleteShapes(n,{source:t}))},setHidden:(e,t,n="user")=>Je(this,e,{flag:"isHidden",value:t,source:n}),setLocked:(e,t,n="user")=>Je(this,e,{flag:"isLocked",value:t,source:n}),getUtil:e=>this.shapeUtils.get(e.type),computePositionedBounds:e=>((e,t)=>e.shapes.getUtil(t).getPositionedBounds(t))(this,e),computeLocalBounds:e=>((e,t)=>e.shapes.getUtil(t).getLocalBounds(t))(this,e),computeRenderBounds:e=>((e,t)=>e.shapes.getUtil(t).getRenderBounds(t))(this,e),computeExportBounds:e=>((e,t)=>e.shapes.getUtil(t).getExportBounds(t))(this,e),computeLocalToPageTransform:e=>((e,t)=>Se(t,e.shapes.getUtil(t),li(e,t)))(this,e),computeRenderToPageTransform:e=>function(e,t){return((e,t,n)=>Se(e,t,n))(t,e.shapes.getUtil(t),li(e,t))}(this,e),computeExportToPageTransform:e=>((e,t)=>ve(t,e.shapes.getUtil(t),li(e,t)))(this,e),computePageBounds:e=>function(e,t){return((e,t,n)=>Yd.FromPoints(Pe(e,t,n)))(t,e.shapes.getUtil(t),li(e,t))}(this,e),computeExportPageBounds:e=>function(e,t){return((e,t,n)=>{const i=t.getExportBounds(e),s=ve(e,t,n);return Yd.FromPoints([new Ld(i.minX,i.minY),new Ld(i.maxX,i.minY),new Ld(i.maxX,i.maxY),new Ld(i.minX,i.maxY)].map(e=>s.applyToPoint(e)))})(t,e.shapes.getUtil(t),li(e,t))}(this,e),computeGeometry:e=>hi(this,e),computePositionedToPageTransform:e=>((e,t)=>Ie(t,e.shapes.getUtil(t),li(e,t)))(this,e),computePageCenter:e=>hi(this,e).center,computePageCorners:e=>hi(this,e).corners,computePageOutlineVertices:e=>hi(this,e).outlineVertices,getPositionedBounds:e=>this.shapeGeometryQueries.getShapePositionedBounds(e)??null,getPageBounds:e=>this.shapeGeometryQueries.getShapePageBounds(e)??null,getGeometry:e=>this.shapeGeometryQueries.getShapeGeometry(e)??null,getPositionedToPageTransform:e=>this.shapeGeometryQueries.getShapePositionedToPageTransform(e)??null,getPageCenter:e=>this.shapeGeometryQueries.getShapePageCenter(e)??null,getPageCorners:e=>this.shapeGeometryQueries.getShapePageCorners(e)??null,getPageOutlineVertices:e=>this.shapeGeometryQueries.getShapePageOutlineVertices(e)??[],getClipAncestorIds:e=>this.shapeGeometryQueries.getShapeClipAncestorIds(e),getClipAncestorIdsSignal:e=>this.shapeGeometryQueries.getShapeClipAncestorIdsSignal(e),isPagePointInClip:(e,t)=>this.shapeGeometryQueries.isPagePointInShapeClip(e,t),getClippedPageBounds:e=>this.shapeGeometryQueries.getShapeClippedPageBounds(e),hitTest:e=>this.shapes.hitTestPoint(e)[0]??null,hitTestPoint:(e,t)=>this.spatialIndex.getShapesAtPoint(e,{...t,filter:n=>!this.shapes.isHidden(n.id)&&this.shapes.isPagePointInClip(n.id,e)&&(t?.filter?.(n)??!0)}),hitTestLineSegment:(e,t,n)=>this.spatialIndex.getShapesHitByLineSegment(e,t,{...n,filter:e=>!this.shapes.isHidden(e.id)&&(n?.filter?.(e)??!0)}),getIdsInBounds:(e,t)=>this.spatialIndex.getShapeIdsInBounds(e,t).filter(e=>!this.shapes.isHidden(e)),getInBounds:(e,t)=>this.spatialIndex.getShapesInBounds(e,t).filter(e=>!this.shapes.isHidden(e.id)),getInViewport:(e,t)=>this.spatialIndex.getShapesInViewport(e,t).filter(e=>!this.shapes.isHidden(e.id)),getIdsInViewport:(e,t)=>this.spatialIndex.getShapeIdsInViewport(e,t)};layers={getSelectionParentOrderState:()=>wi(this),getSelectionGroupState:()=>gi(this),canGroupSelection:()=>null!==gi(this),canGroup:e=>((e,t)=>null!==fi(e,t))(this,e),group:(e,t="user")=>yi(this,e,t),groupSelection:(e="user")=>((e,t="user")=>{const n=yi(e,e.selection.getIds(),t);return n&&e.commands.setSelectedShapeIds([n.id],{source:t}),n})(this,e),getUngroupableSelectionIds:()=>Si(this),getUngroupableIds:e=>Ii(this,e),canUngroupSelection:()=>Si(this).length>0,canUngroup:e=>((e,t)=>Ii(e,t).length>0)(this,e),ungroup:(e,t="user")=>vi(this,e,t),ungroupSelection:(e="user")=>((e,t="user")=>vi(e,e.selection.getIds(),t))(this,e),getSelectionSiblingOrderState:()=>bi(this),canMoveSelectionWithinParent:e=>((e,t)=>{const n=bi(e);return"backward"===t?n?.canMoveBackward??!1:n?.canMoveForward??!1})(this,e),canMoveSelection:e=>((e,t)=>{const n=wi(e);return"backward"===t?n?.canMoveBackward??!1:n?.canMoveForward??!1})(this,e),canMove:(e,t)=>((e,t,n)=>{const i=Pi(e,t);return"backward"===n?i?.canMoveBackward??!1:i?.canMoveForward??!1})(this,e,t),move:(e,t,n="user")=>xi(this,e,t,n),moveToEdge:(e,t,n="user")=>Ci(this,e,t,n),moveSelectionWithinParent:(e,t="user")=>((e,t,n="user")=>{const i=e.state.selectedShapes.get();if(1!==i.length)return!1;const[s]=i;if(!s||s.isLocked)return!1;const o=bi(e);if(!o)return!1;const r=e.layers.getChildren(o.parentId),a=o.index;if(r[a]?.id!==s.id)return!1;const d="backward"===t?a-1:a+1;if(d<0||d>=r.length)return!1;const c=[...r],[l]=c.splice(a,1);return!!l&&(c.splice(d,0,l),e.interaction.cancelForCommand(),e.commands.updateShapes(c.map((t,n)=>({id:t.id,index:ne(e).createShapeIndex(n+1)})),{source:n}),!0)})(this,e,t),moveToPlacement:(e,t="user")=>function(e,t,n="user"){const i=Array.from(new Set(t.ids));if(0===i.length)return{ok:!1,reason:"notFound"};const s=i.map(t=>e.shapes.get(t)).filter(e=>!!e);if(s.length!==i.length)return{ok:!1,reason:"notFound"};for(const r of s){if(r.isLocked)return{ok:!1,reason:"locked"};if(e.shapes.isHidden(r.id))return{ok:!1,reason:"hidden"}}for(const r of i){const n=t.parentId;if(n.startsWith("page:")){if(!e.pages.get(n))return{ok:!1,reason:"invalidParent"}}else{const t=e.shapes.get(n);if(!t)return{ok:!1,reason:"invalidParent"};if(t.id===r||e.layers.getDescendantIds(r).includes(t.id))return{ok:!1,reason:"cycle"};if(!e.layers.canReceiveChild(t.id,r))return{ok:!1,reason:"invalidParent"}}}const o=((e,t,n,i,s)=>{const o=((e,t,n,i)=>{const s=new Set(n),o=t.parentId.startsWith("shape:")?e.shapes.get(t.parentId):null,r=y(e).getAll().filter(e=>u(e)&&e.parentId===t.parentId).filter(e=>!s.has(e.id));r.sort((e,t)=>e.index.localeCompare(t.index)||e.id.localeCompare(t.id));let a=r.length;if(t.beforeId){const e=r.findIndex(e=>e.id===t.beforeId);if(-1===e)return{ok:!1,reason:"invalidBeforeId"};a=e}r.splice(a,0,...i);const d=new Map;for(const c of i){if(c.parentId===t.parentId)continue;const n=Xe(e,c,t.parentId);if(!n)return{ok:!1,reason:"unsupportedTransform"};d.set(c.id,n)}return{ok:!0,updates:r.map((n,i)=>{const s=n.parentId!==t.parentId&&o?e.shapes.getUtil(o).getChildPlacementMeta(o,n,{editor:e,reason:"reparent"}):n.meta;return{id:n.id,parentId:t.parentId,index:ne(e).createShapeIndex(i+1),...d.get(n.id),meta:s===n.meta?void 0:s}})}})(e,t,n,i);return o.ok?(e.interaction.cancelForCommand(),e.commands.updateShapes(o.updates,{source:s}),o):o})(e,t,i,s,n);return o.ok?{ok:!0,movedIds:i}:{ok:!1,reason:o.reason}}(this,e,t),moveSelection:(e,t="user")=>((e,t,n="user")=>xi(e,e.selection.getIds(),t,n))(this,e,t),moveSelectionToEdge:(e,t="user")=>((e,t,n="user")=>Ci(e,e.selection.getIds(),t,n))(this,e,t),getChildIds:e=>this.shapeTreeIndex.getChildShapeIds(e),getChildren:e=>this.shapeTreeIndex.getChildShapes(e),getDescendantIds:e=>this.shapeTreeIndex.getDescendantShapeIds(e),getDescendantPageBounds:e=>((e,t)=>pn(e,e.layers.getDescendantIds(t)))(this,e),getSubtreePageBounds:e=>((e,t)=>pn(e,[t,...e.layers.getDescendantIds(t)]))(this,e),getPageId:e=>this.shapeTreeIndex.getPageIdForShape(e),isOrAncestorLocked:e=>((e,t)=>{const n=new Set;let i=e.shapes.get(t);for(;i;){if(i.isLocked)return!0;if(!i.parentId.startsWith("shape:"))return!1;const t=i.parentId;if(n.has(t))return!1;n.add(t),i=e.shapes.get(t)}return!1})(this,e),isOrAncestorInSet:(e,t)=>((e,t,n)=>{let i=e.shapes.get(t);const s=new Set;for(;i;){if(n.has(i.id))return!0;if(!i.parentId.startsWith("shape:"))return!1;const t=i.parentId;if(s.has(t))return!1;s.add(t),i=e.shapes.get(t)}return!1})(this,e,t),hasLockedDescendant:e=>((e,t)=>e.layers.getDescendantIds(t).some(t=>e.shapes.get(t)?.isLocked??!1))(this,e),getOutermostSelectableId:e=>((e,t)=>{let n=t,i=e.shapes.get(t);const s=new Set([t]);for(;i?.parentId.startsWith("shape:");){const t=i.parentId;if(s.has(t))break;s.add(t);const o=e.shapes.get(t);if(!o)break;e.shapes.getUtil(o).isSelectionTransformContainer(o)&&(n=o.id),i=o}return n})(this,e),includeDescendants:e=>un(this,e),getSelectionTransformIds:e=>fn(this,e),getSelectionRotationIds:e=>mn(this,e),getExportTraversalIds:e=>((e,t)=>{const n=un(e,t).filter(t=>!e.shapes.isHidden(t)),i=new Set(n);for(const s of n)for(const t of e.bindings.getForShape(s)){const s=e.bindings.getUtil(t).getExportShapeIds?.(e,t);for(const t of s??[])for(const s of un(e,[t]))i.has(s)||e.shapes.isHidden(s)||(i.add(s),n.push(s))}return n})(this,e),getContainment:(e,t)=>ri(this,this.shapeGeometryQueries,e,t),getContainingParentId:e=>((e,t,n,i)=>ai({editor:e,shapeTree:t,geometry:n,shapeIds:i}))(this,this.shapeTreeIndex,this.shapeGeometryQueries,e),getContainingParentIdAtPoint:(e,t)=>((e,t,n,i,s)=>ai({editor:e,shapeTree:t,geometry:n,shapeIds:i,point:s}))(this,this.shapeTreeIndex,this.shapeGeometryQueries,e,t),getContainingParentIdForShape:e=>((e,t,n)=>{const i=(t=>{const n=new Set;let i=t;for(;i.startsWith("shape:");){const t=i;if(n.has(t))return null;n.add(t);const s=e.shapes.get(t);if(!s)return null;i=s.parentId}return e.pages.get(i)?i:null})(n.parentId);if(!i)return null;const s=At(e,n.parentId,t=>e.shapes.get(t));if(!s)return null;const o=xe(n,e.shapes.getUtil(n),s),r=new Map;for(const g of y(e).getAll().filter(u)){const e=r.get(g.parentId)??[];e.push(g),r.set(g.parentId,e)}for(const u of r.values())u.sort((e,t)=>e.index.localeCompare(t.index)||e.id.localeCompare(t.id));const a=[],d=new Set,c=e=>{for(const t of r.get(e)??[])d.has(t.id)||(d.add(t.id),a.push(t),c(t.id))};c(i);let l=null,h=1/0,p=-1;for(let u=0;u<a.length;u+=1){const t=a[u];if(!t||t.id===n.id||e.shapes.isHidden(t.id)||e.layers.isOrAncestorLocked(t.id))continue;const i=e.shapes.getUtil(t);if(!ci(t,i))continue;if(!e.layers.canReceiveChild(t.id,n.id))continue;const s=e.shapes.computePageBounds(t),r=i.getLocalBounds(t),d=e.shapes.computeLocalToPageTransform(t).tryInvert();d&&o.outlineVertices.length>0&&o.outlineVertices.every(e=>r.containsPoint(d.applyToPoint(e)))&&di(s,u,l,h,p)&&(l=t,h=s.w*s.h,p=u)}return l?.id??i})(this,0,e),getIdsInContainerBounds:(e,t={})=>((e,t,n={})=>{const i=e.layers.getPageId(t),s=e.shapes.getPageBounds(t);return i&&s?e.shapes.getIdsInBounds(s,{pageId:i}).filter(i=>{if(i===t)return!1;const s=e.layers.getContainment(t,i);return"inside"===s||n.includeIntersecting&&"intersecting"===s}):[]})(this,e,t),canReceiveChildren:e=>((e,t)=>{if(t.startsWith("page:"))return!!e.pages.get(t);const n=e.shapes.get(t);return!!n&&!Le(n,e.shapes.getUtil(n))&&e.shapes.getUtil(n).canReceiveChildren(n)})(this,e),canReceiveChild:(e,t)=>((e,t,n)=>{if(t.startsWith("page:"))return!!e.pages.get(t);const i=e.shapes.get(t);if(!i)return!1;if(Le(i,e.shapes.getUtil(i)))return!1;const s=e.shapes.get(n);return!!s&&i.id!==n&&!e.layers.getDescendantIds(n).includes(i.id)&&e.shapes.getUtil(i).canReceiveChild(i,s)})(this,e,t)};assets={get:e=>{const t=this.store.get(e);return f(t)?t:void 0},getAll:()=>this.store.getAll().filter(f).sort((e,t)=>e.id.localeCompare(t.id)),resolveUrl:e=>this.assetUrlResolver(e)};bindings={get:e=>{const t=this.store.get(e);return g(t)?t:void 0},getFromShape:e=>this.bindingQueries.getBindingsFromShape(e),getFromShapeSignal:e=>this.bindingQueries.getBindingsFromShapeSignal(e),getToShape:e=>this.bindingQueries.getBindingsToShape(e),getToShapeSignal:e=>this.bindingQueries.getBindingsToShapeSignal(e),getForShape:e=>this.bindingQueries.getBindingsForShape(e),getForShapeSignal:e=>this.bindingQueries.getBindingsForShapeSignal(e),getUtil:e=>this.bindingUtils.get(e.type),getSuppressedReactionIds:()=>this.bindingManager.getSuppressedReactionIds(),runWithSuppressedReactions:(e,t)=>this.bindingManager.runWithSuppressedReactions(e,t),getConflicting:e=>this.bindingManager.getConflictingBindings(e),canBind:e=>this.bindingManager.canBind(e),syncCreated:(e,t)=>this.bindingManager.syncCreatedBinding(e,t),syncUpdated:(e,t,n)=>this.bindingManager.syncUpdatedBinding(e,t,n),repairLoaded:e=>this.bindingManager.repairLoadedBindings(e),handleShapeChanges:(e,t)=>this.bindingManager.handleShapeChanges(e,t),getShapeCompanionRootId:e=>this.bindingManager.getShapeCompanionRootId(e),getShapeCompanionRootIds:(e,t)=>this.bindingManager.getShapeCompanionRootIds(e,t),getShapeCompanionMemberIds:e=>this.bindingManager.getShapeCompanionMemberIds(e),cleanupForDeletedShapes:(e,t)=>this.bindingManager.cleanupBindingsForDeletedShapes([...e],t),cleanup:(e,t)=>this.bindingManager.cleanupBindings(Array.from(e),t),setTerminalResolver:e=>this.interactionManager.setTerminalBindingResolver(e),resolveTerminal:e=>this.interactionManager.resolveTerminalBinding(e)};viewport={getCamera:(e=this.pages.getCurrentId())=>this.cameraManager.getCamera(e),pageToScreen:(e,t=this.pages.getCurrentId())=>this.cameraManager.pageToScreen(e,t),screenToPage:(e,t=this.pages.getCurrentId())=>this.cameraManager.screenToPage(e,t),setCamera:(e,t)=>this.cameraManager.setCamera(e,t),pan:(e,t="system")=>this.cameraManager.panCamera(e,t),zoomAtScreenPoint:(e,t,n="system")=>this.cameraManager.zoomCameraAtScreenPoint(e,t,n),zoomToScreenPoint:(e,t,n="system")=>this.cameraManager.zoomCameraToScreenPoint(e,t,n),zoomAtCenter:(e,t="system")=>this.cameraManager.zoomAtViewportCenter(e,t),resetZoom:(e="user")=>this.cameraManager.resetZoom(e),setScreenSize:e=>this.cameraManager.setViewportScreenSize(e),stopCameraAnimation:()=>this.cameraManager.cancelAnimation(),getCurrentPageBounds:(e=this.pages.getCurrentId())=>wn(this,e),centerOnShape:(e,t={})=>{const n=t.source??"user",i=this.layers.getPageId(e);if(!i)return!1;const s=this.layers.getSubtreePageBounds(e);if(!s)return!1;const o=this.state.viewportScreenSize.get();if(o.w<=0||o.h<=0)return!1;const r=this.viewport.getCamera(i),a=i===this.pages.getCurrentId();a||this.commands.setCurrentPageId(i,{source:n});const d={x:s.center.x-o.w/(2*r.z),y:s.center.y-o.h/(2*r.z),z:r.z};return a&&t.animation?this.cameraManager.animateCameraTo(d,{durationMs:t.animation.durationMs,pageId:i,source:n}):this.commands.setCamera({pageId:i,camera:d},{source:n}),!0},zoomToBounds:(e,t)=>bn(this,e,t),zoomToFit:e=>((e,t)=>{const n=wn(e);return!!n&&bn(e,n,t)})(this,e),zoomToSelection:e=>((e,t)=>{const n=Pn(e,e.selection.getIds());return!!n&&bn(e,n,t)})(this,e)};interaction={setBrushBox:e=>this.interactionManager.setBrushBox(e),setBindingPreview:e=>this.interactionManager.setBindingPreview(e),setTerminalBindingGuides:e=>this.interactionManager.setTerminalBindingGuides(e),setDropTargetShapeId:e=>this.interactionManager.setDropTargetShapeId(e),setHoveredShapeId:e=>this.interactionManager.setHoveredShapeId(e),setSelectionTranslationActive:e=>this.interactionManager.setSelectionTranslationActive(e),setSnapIndicators:e=>this.interactionManager.setSnapIndicators(e),clearSelection:()=>this.interactionManager.clearSelectionTransients(),cancelForCommand:()=>this.eventRouter.cancelInteraction("command"),cancel:(e,t={})=>this.eventRouter.cancelInteraction(e,t)};snapshots={getDocument:()=>(e=>{const t=e.store.getAll();return{schemaVersion:3,records:[t.find(h)??a(),...e.pages.getAll(),...t.filter(f).sort((e,t)=>e.id.localeCompare(t.id)),...t.filter(u).sort((e,t)=>e.parentId===t.parentId?e.index.localeCompare(t.index):e.parentId.localeCompare(t.parentId)),...t.filter(g).sort((e,t)=>e.id.localeCompare(t.id))]}})(this),getSession:()=>({schemaVersion:1,records:[this.state.session.get()]}),loadDocument:(e,t)=>((e,t,n)=>{e.assertDocumentWriteAllowed();const i=n?.source??"system",s=function(e,t,n){const i=jt(e,"document"),s=new Set,o=[];return i.records.forEach((e,i)=>{if(!_t(e))throw new hc("Invalid document record: expected object");if("string"!=typeof e.id)throw new hc("Invalid document record id");if(s.has(e.id))throw new hc(`Duplicate document record id: ${e.id}`);if(s.add(e.id),"document"!==e.typeName)if("page"!==e.typeName)if("shape"!==e.typeName)if("binding"!==e.typeName){if("asset"!==e.typeName)throw new hc(`Unsupported document record type: ${String(e.typeName)}`);o.push((e=>{if("string"!=typeof e.id||!e.id.startsWith("asset:"))throw new hc("Invalid asset record id");if("string"!=typeof e.type)throw new hc("Invalid asset record type");return{id:e.id,typeName:"asset",scope:"document",type:e.type,props:_t(e.props)?e.props:{},meta:qt(e.meta)}})(e))}else o.push(((e,t)=>{if("string"!=typeof e.id||!e.id.startsWith("binding:"))throw new hc("Invalid binding record id");if("string"!=typeof e.type)throw new hc("Invalid binding record type");if("string"!=typeof e.fromId||!e.fromId.startsWith("shape:"))throw new hc(`Invalid from id for binding ${e.id}`);if("string"!=typeof e.toId||!e.toId.startsWith("shape:"))throw new hc(`Invalid to id for binding ${e.id}`);const n=e.type,i=t.get(n);return{id:e.id,typeName:"binding",scope:"document",type:n,fromId:e.fromId,toId:e.toId,props:i.validateProps(e.props),meta:qt(e.meta)}})(e,n));else o.push(((e,t,n)=>{if("string"!=typeof e.id||!e.id.startsWith("shape:"))throw new hc("Invalid shape record id");if("string"!=typeof e.type)throw new hc("Invalid shape record type");if("string"!=typeof e.parentId||!e.parentId.startsWith("page:")&&!e.parentId.startsWith("shape:"))throw new hc(`Invalid parent id for shape ${e.id}`);return{id:e.id,typeName:"shape",scope:"document",parentId:e.parentId,index:Ht(e.index,String(n+1).padStart(6,"0")),x:Ut(e.x,0),y:Ut(e.y,0),rotation:Ut(e.rotation,0),scaleX:Ut(e.scaleX,1),scaleY:Ut(e.scaleY,1),opacity:Math.min(1,Math.max(0,Ut(e.opacity,1))),isHidden:Wt(e.isHidden,!1),isLocked:Wt(e.isLocked,!1),meta:qt(e.meta),type:e.type,props:t.get(e.type).validateProps(e.props)}})(e,t,i));else o.push(((e,t)=>{if("string"!=typeof e.id||!e.id.startsWith("page:"))throw new hc("Invalid page record id");return{id:e.id,typeName:"page",scope:"document",name:Ht(e.name,`Page ${t+1}`),index:Ht(e.index,String(t+1).padStart(4,"0")),meta:qt(e.meta)}})(e,i));else o.push((e=>{if("document:main"!==e.id)throw new hc("Invalid document metadata record id");return{id:Ed,typeName:"document",scope:"document",meta:qt(e.meta)}})(e))}),{schemaVersion:3,records:Qt(o,t,n)}}(t,e.shapeUtils,e.bindingUtils);e.interaction.cancel("restore"),e.editing.end({runEditEnd:!1,source:i}),e.editing.cancelOperation();const o=e.state.session.get();tn(e,[...s.records,o],i),en(e),e.history.clear(),e.bindings.repairLoaded(i)})(this,e,t),loadSession:(e,t)=>Jt(this,e,t),syncAfterDocumentRestore:()=>en(this)};exports={getSvgString:(e=this.selection.getIds(),t)=>function(e,t,n,i={}){const s=Array.from(t),o=e.layers.getExportTraversalIds(s),r=new Set(o),a=[],d=[];for(const b of o){const t=e.shapes.get(b);t?d.push(t):a.push({id:b,reason:"missing-shape"})}if(0===d.length)return null;const c=[];for(const b of d){if(!e.shapes.getUtil(b).contributesToExportBounds(b))continue;const t=z(e,b,r);t&&(x(t)?c.push(t):a.push({id:b.id,reason:"missing-bounds"}))}if(0===c.length)return null;const l=(e=>{let t=1/0,n=1/0,i=-1/0,s=-1/0;for(const o of e)t=Math.min(t,o.minX),n=Math.min(n,o.minY),i=Math.max(i,o.maxX),s=Math.max(s,o.maxY);return new Yd(t,n,i-t,s-n)})(c).expand(i.padding??16),h=[],u={editor:e,bounds:l,addDef(e){const t=`land-svg-def-${h.length+1}`;return h.push({...e,attrs:{...e.attrs,id:t}}),t},resolveAssetUrl:t=>e.assets.resolveUrl(t),resolveColor:e=>X(e,i.resolveThemeColor)},p=[],g=[],f=new Map,m=[],y=(t,n)=>{const i=e.shapes.computeExportToPageTransform(t),s=((e,t)=>{let n=t.opacity,i=t.parentId;const s=new Set([t.id]);for(;i.startsWith("shape:");){const t=i;if(s.has(t))break;s.add(t);const o=e.shapes.get(t);if(!o)break;n*=o.opacity,i=o.parentId}return n})(e,t),o=((e,t,n,i,s)=>{const o=[];for(const r of N(e,t,n)){const t=$(e,r,i,s);t&&o.push(t)}return o})(e,t,r,f,u);let a={tag:"g",attrs:{transform:i.toSvgString(),opacity:1===s?void 0:s},children:[n]};for(let e=o.length-1;e>=0;e-=1)a={tag:"g",attrs:{"clip-path":`url(#${o[e]})`},children:[a]};g.push(a)},S=e=>{const t=n.get(e.type)?.toSvgForeground?.(e,u);t&&y(e,t)};for(const b of d){for(;m.length>0&&!O(e,m[m.length-1].id,b);)S(m.pop());const t=n.get(b.type);if(!t){a.push({id:b.id,reason:"missing-exporter"});continue}const i=t.toSvg(b,u);i?x(e.shapes.computeExportBounds(b))?(p.push(b.id),y(b,i),t.toSvgForeground&&m.push(b)):a.push({id:b.id,reason:"missing-bounds"}):a.push({id:b.id,reason:"empty-output"})}for(;m.length>0;)S(m.pop());if(0===p.length)return null;const I=Math.max(1,l.w),v=Math.max(1,l.h),w=[];return h.length>0&&w.push({tag:"defs",children:h}),i.background&&w.push({tag:"rect",attrs:{x:l.x,y:l.y,width:l.w,height:l.h,fill:i.background}}),w.push(...g),{svg:W({tag:"svg",attrs:{xmlns:"http://www.w3.org/2000/svg",width:I,height:v,viewBox:`${V(l.x)} ${V(l.y)} ${V(I)} ${V(v)}`},children:w}),bounds:l,width:I,height:v,requestedShapeIds:s,exportedShapeIds:p,skippedShapes:a}}(this,e,this.shapeSvgExporters,t),getIntegrityReport:(e=this.selection.getIds())=>b({editor:this,exporters:this.shapeSvgExporters,shapeIds:e}),repairIntegrity:(e=this.selection.getIds())=>(({editor:e,exporters:t,shapeIds:n})=>{const i=Array.from(n),s=b({editor:e,exporters:t,shapeIds:i});s.repairableIssueCount>0&&e.bindings.repairLoaded("system");const o=b({editor:e,exporters:t,shapeIds:i});return{before:s,after:o,repaired:s.issues.length!==o.issues.length}})({editor:this,exporters:this.shapeSvgExporters,shapeIds:e})};constructor(e={}){const{computed:t}=this.signals;this.inputs=new ec(this.signals),this._shapeDefaultPropsByTypeSignal=this.signals.atom("editor.shapeDefaultPropsByType",new Map),this._readonlySignal=this.signals.atom("editor.readonly",!1),e.resolveAssetUrl&&(this.assetUrlResolver=e.resolveAssetUrl);for(const a of e.shapeUtils??[])this.shapeUtils.register(a);for(const a of e.shapeSvgExporters??[])this.shapeSvgExporters.register(a);for(const a of e.bindingUtils??[])this.bindingUtils.register(a);const n=new Md(((e={})=>[a(e),d(),c()])(e.documentMeta??{}),{signals:this.signals,writeGuard:e=>this.assertStoreChangeAllowed(e)});((e,t)=>{e[Rd]=t})(this,n),this.store=n,this.tools=new Ud(this),this.cameraManager=new xc(this,e.cameraAnimationScheduler),this.editing=new mc(this),this.interactionManager=new Pc(this);const i=t("editor.session",()=>{const e=n.getRecordSignal(Bd).get();if(!p(e))throw new Error("Missing session record");return e}),s=t("editor.currentPageId",()=>i.get().currentPageId),o=t("editor.toolState",()=>{const e=i.get();return{activeToolId:e.activeToolId,isToolLocked:e.isToolLocked}}),r=t("editor.editingShapeId",()=>i.get().editingShapeId),l=t("editor.shapeEditingSession",()=>i.get().shapeEditingSession),h=t("editor.shapeEditingState",()=>({editingShapeId:r.get(),session:l.get()})),u=t("editor.currentCamera",()=>i.get().pageCameraById[s.get()]??Ad),g=t("editor.selectedShapeIds",()=>{const e=i.get();return e.pageSelectedShapeIdsById[e.currentPageId]??[]},{isEqual:G}),f=t("editor.selectionCount",()=>g.get().length),m=t("editor.selectedShapeIdSet",()=>new Set(g.get()),{isEqual:j}),y=t("editor.pageTransform",()=>{const e=u.get();return $d.Scale(e.z,e.z).compose($d.Translate(-e.x,-e.y))}),S=t("editor.cameraZoom",()=>u.get().z),I=t("editor.viewportPageBounds",()=>{const{w:e,h:t}=this.cameraManager.viewportScreenSizeSignal.get();if(e<=0||t<=0)return null;const n=u.get();return new Yd(n.x,n.y,e/n.z,t/n.z)});(e=>{const t=new qd(e);Wd.set(e,t)})(this),this.shapeSignals=new Sc(this),this.shapeGeometryQueries=new ac(this),this.shapeTreeIndex=new dc(this,s),this.bindingQueries=new rc(this),this.bindingManager=new Kd(this),this.spatialIndex=new lc(this,this.shapeTreeIndex,this.shapeGeometryQueries),this.snaps=new bc(this,e.snapDiagnostics),this.selectionGeometry=((e,t,n)=>{const i=e.signals.computed("editor.query.selectionGeometry",()=>hn(e,t,n),{isEqual:dn}),s=e.signals.computed("editor.query.selectionPageOutlineVertices",()=>i.get().outlineVertices,{isEqual:Z}),o=e.signals.computed("editor.query.selectionPageBounds",()=>i.get().pageBounds,{isEqual:ee}),r=e.signals.computed("editor.query.selectionFrameBounds",()=>i.get().frameBounds,{isEqual:ee}),a=e.signals.computed("editor.query.selectionRotation",()=>i.get().rotation);return{geometry:i,pageOutlineVertices:s,pageBounds:o,frameBounds:r,hasRotation:e.signals.computed("editor.query.selectionHasRotation",()=>i.get().hasRotation),rotation:a,rotationCenter:e.signals.computed("editor.query.selectionRotationCenter",()=>i.get().rotationCenter,{isEqual:Q}),hasCompatibleRotation:e.signals.computed("editor.query.selectionHasCompatibleRotation",()=>i.get().hasCompatibleRotation),selectionAnchorPagePoint:e.signals.computed("editor.query.selectionAnchorPagePoint",()=>i.get().selectionAnchorPagePoint,{isEqual:Q})}})(this,g,e=>this.shapeGeometryQueries.getCachedShapeGeometry(e));const v=t("editor.selectedShapes",()=>g.get().map(e=>this.shapes.getSignal(e).get()).filter(e=>!!e)),w=t("editor.selectionCanFlip",()=>yn(this,g.get())),b=t("editor.selectionState",()=>{const e=g.get(),t=1===e.length?this.shapes.getSignal(e[0]).get()??null:null,n=v.get(),i=(e=>{let t=null;for(const n of e)if(null===t)t=n.type;else if(t!==n.type)return null;return t})(n),s=1===n.length,o=n.map(e=>this.shapes.getUtil(e).getSelectionHandleAnchors(e,{isOnlySelected:s,editor:this})).some(e=>e.terminalHandleAnchors.length>0||e.middleHandleAnchors.length>0||(e.customHandleAnchors?.length??0)>0),r=n.some(e=>this.shapes.getUtil(e).contributesToSelectionFrame(e,{editor:this})),a=o&&r,d=t?this.shapes.getUtil(t).getSelectionHandleAnchors(t,{isOnlySelected:s,editor:this}):null,c=1===e.length&&!!d&&(d.terminalHandleAnchors.length>0||(d.customHandleAnchors?.length??0)>0),l=this.selectionGeometry.hasRotation.get();return{count:e.length,singleShapeType:t?.type??null,commonShapeType:i,canFlipSelection:w.get(),hasPointHandleSelection:o,hasFrameSelection:r,isMixedFrameAndPointHandleSelection:a,canDragPointHandles:c,hasSelectionRotation:l,hasMixedSelectionRotation:!this.selectionGeometry.hasCompatibleRotation.get(),canResetSelectionRotation:l&&r,frameBounds:this.selectionGeometry.frameBounds.get(),frameRotation:this.selectionGeometry.rotation.get(),frameRotationCenter:this.selectionGeometry.rotationCenter.get(),selectionAnchorPagePoint:this.selectionGeometry.selectionAnchorPagePoint.get()}}),P=t("editor.selectionMetadata",()=>{const e=b.get();return{count:e.count,singleShapeType:e.singleShapeType,commonShapeType:e.commonShapeType,canFlipSelection:e.canFlipSelection,hasPointHandleSelection:e.hasPointHandleSelection,hasFrameSelection:e.hasFrameSelection,isMixedFrameAndPointHandleSelection:e.isMixedFrameAndPointHandleSelection,canDragPointHandles:e.canDragPointHandles,hasSelectionRotation:e.hasSelectionRotation,hasMixedSelectionRotation:e.hasMixedSelectionRotation,canResetSelectionRotation:e.canResetSelectionRotation}},{isEqual:ws}),x=t("editor.renderViewportPageBounds",e=>{const t=I.get();return t?e!==wd&&e&&(i=t).minX>=(n=e).minX&&i.maxX<=n.maxX&&i.minY>=n.minY&&i.maxY<=n.maxY?e:t.expand(160/S.get()):null;var n,i},{isEqual:ee});this.renderWindowManager=new Cc(this,{currentPageId:s,currentPageShapeIds:this.shapeTreeIndex.currentPageShapeIdsSignal,selectedShapeIds:g,selectedShapeIdSet:m,viewportPageBounds:I,renderViewportPageBounds:x}),this.selectionOverlay=new fc(this,{tool:o,selectedShapeIds:g,selectedShapes:v,cameraZoom:S}),this.operations=new sc(this,e.onUnhandledError),this.history=new nc(this),this.state=Object.freeze({readonly:this._readonlySignal,session:i,pages:this.shapeTreeIndex.pagesSignal,currentPageId:s,currentPageShapeIds:this.shapeTreeIndex.currentPageShapeIdsSignal,currentPageShapes:this.shapeTreeIndex.currentPageShapesSignal,currentPageShapeTree:this.shapeTreeIndex.currentPageShapeTreeSignal,tool:o,editingShapeId:r,shapeEditingSession:l,shapeEditing:h,shapeEditingEntryRequest:this.editing.entryRequestSignal,selectedShapeIds:g,selectedShapeIdSet:m,selectedShapes:v,selectionCount:f,selection:b,selectionMetadata:P,selectionPageBounds:this.selectionGeometry.pageBounds,selectionFrameBounds:this.selectionGeometry.frameBounds,selectionAnchorPagePoint:this.selectionGeometry.selectionAnchorPagePoint,camera:u,cameraZoom:S,pageTransform:y,viewportScreenSize:this.cameraManager.viewportScreenSizeSignal,viewportPageBounds:I,history:this.history.state}),this.render=Object.freeze({viewport:Object.freeze({pageBounds:x,items:this.renderWindowManager.renderItemsSignal,shapeOrderById:this.renderWindowManager.shapeRenderOrderByIdSignal,culledShapeIds:this.renderWindowManager.culledShapeIdsSignal,culledShapeIdSet:this.renderWindowManager.culledShapeIdSetSignal,selectedShapeIdsOutsideCulled:this.renderWindowManager.selectedShapeIdsOutsideCulledSignal,selectedShapeIdsOutsideCulledSet:this.renderWindowManager.selectedShapeIdsOutsideCulledSetSignal,visibleShapeIds:this.renderWindowManager.renderVisibleShapeIdsSignal,visibleShapeIdSet:this.renderWindowManager.renderVisibleShapeIdSetSignal,retainedShapeIds:this.renderWindowManager.retainedShapeIdsSignal}),overlay:Object.freeze({selectedShapeItems:this.selectionOverlay.selectedShapeItemsSignal,frameGeometry:this.selectionOverlay.frameGeometrySignal,companionFrameGeometries:this.selectionOverlay.companionFrameGeometriesSignal,path:this.selectionOverlay.pathSignal,pageClipPath:this.selectionOverlay.pageClipPathSignal,bindingSegments:this.selectionOverlay.bindingSegmentsSignal,frameStyle:this.selectionOverlay.frameStyleSignal,handleAnchors:this.selectionOverlay.handleAnchorsSignal,handles:this.selectionOverlay.handlesSignal}),interaction:Object.freeze({brushBox:this.interactionManager.brushBoxSignal,brushBoxActive:this.interactionManager.brushBoxActiveSignal,bindingPreview:this.interactionManager.bindingPreviewSignal,bindingPreviewActive:this.interactionManager.bindingPreviewActiveSignal,terminalBindingGuides:this.interactionManager.terminalBindingGuidesSignal,dropTargetShapeId:this.interactionManager.dropTargetShapeIdSignal,hoveredShapeId:this.interactionManager.hoveredShapeIdSignal,selectionTranslationActive:this.interactionManager.selectionTranslationActiveSignal,snapIndicators:this.snaps.indicatorsSignal,snapIndicatorsActive:this.snaps.activeSignal})}),this.commands=Ze(this),this.eventRouter=new Jd(this),this.bindings.repairLoaded("system"),this.registerBuiltInInteractions()}closeWrites(){this.writesClosed=!0}assertDocumentWriteAllowed(){if(this.writesClosed)throw new Error("Disposed editor rejected store write.");if(this._readonlySignal.get())throw new Error("Readonly canvas rejected document write.")}assertStoreChangeAllowed(e){if(this.writesClosed)throw new Error("Disposed editor rejected store write.");(e.diff.added.some(m)||e.diff.removed.some(m)||e.diff.updated.some(({before:e,after:t})=>m(e)||m(t)))&&this.assertDocumentWriteAllowed()}registerBuiltInInteractions(){this.interactions.register(function(){let e=!1,t=null;const n=()=>{t=null};return{id:"land.camera.canvas-navigation",enabledInReadonly:!0,editorEvent:{handleEvent(i,s){if("cancel"===s.type)return"blur"!==s.reason&&"dispose"!==s.reason||(e=!1),void n();if("wheel"===s.type)return((e,t)=>{if(t.ctrlKey){const n=e.state.camera.get(),i=t.delta.y,s=(Math.abs(i)>10?10*Math.sign(i):i)/100;return void e.viewport.zoomToScreenPoint(t.screenPoint,n.z-1*s*n.z)}e.viewport.pan(t.delta)})(i,s),Gd;if("keyboard"===s.type&&(e=>"Space"===e.code)(s)){if("key_up"===s.name){const t=e;return e=!1,t?Gd:void 0}if(i.state.shapeEditingSession.get())return;return e=!0,Gd}if("tick"===s.type&&t){const e=i.inputs.state.get();return e.pointerId===t.pointerId&&e.currentScreenPoint&&tt(i,t.camera,e.currentScreenPoint),Gd}if("pointer"===s.type&&"mouse"===s.pointerType){if("pointer_down"===s.name){n();const o=((e,{allowLeftButton:t})=>1===e.button?4:t&&0===e.button?1:null)(s,{allowLeftButton:i.inputs.isSpacePressed.get()&&!i.state.shapeEditingSession.get()});if(null===o)return;return 0===s.button&&(e=!0),t={pointerId:s.pointerId,buttons:o,camera:et(i,s.screenPoint)},jd}if(t&&s.pointerId===t.pointerId)return"pointer_move"===s.name?(0===(s.buttons&t.buttons)&&n(),Gd):"pointer_up"===s.name?(tt(i,t.camera,s.screenPoint),n(),Gd):"pointer_cancel"===s.name?(n(),Gd):void 0}}}}}())}handleEvent(e){return this.eventRouter.handle(e)}listen(e){return this.store.listen(t=>e(t))}dispose(){this.closeWrites();let e=null;for(const n of[()=>this.cameraManager.dispose(),()=>this.bindingQueries.dispose(),()=>this.shapeTreeIndex.dispose(),()=>this.shapeGeometryQueries.dispose(),()=>this.shapeSignals.dispose(),()=>this.runtime.dispose(),()=>this.history.dispose()])try{n()}catch(t){e??=t}if(null!==e)throw e}},Mc=class{editor;id;parent;children=new Map;currentChild=null;initial=null;constructor(e,t,n){this.editor=e,this.id=t,this.parent=n}addChild(e){this.children.set(e.id,e)}enter(e){if(this.onEnter(e),!this.initial)return;const t=this.children.get(this.initial);if(!t)throw new Error(`Missing child state "${this.initial}" on "${this.id}"`);this.currentChild=t,t.enter(e)}exit(e){this.currentChild&&(this.currentChild.exit(e),this.currentChild=null),this.onExit(e)}transition(e,t){if(!this.parent){const n=this.children.get(e);if(!n)throw new Error(`Missing root child state "${e}" on tool "${this.id}"`);if(this.currentChild===n)return;return this.currentChild?.exit(t),this.currentChild=n,void n.enter(t)}this.parent.transition(e,t)}isInInitialState(){return!this.currentChild||!!this.initial&&this.currentChild.id===this.initial&&this.currentChild.isInInitialState()}dispatch(e,t){if(this.currentChild)return this.currentChild.dispatch(e,t);switch(e.type){case"pointer":return this.handlePointerEvent(e,t);case"keyboard":return this.handleKeyboardEvent(e,t);case"wheel":return this.onWheel(e,t);case"tick":return this.onTick(e,t);case"cancel":return this.onCancel(e,t)}}onEnter(e){}onExit(e){}onPointerDown(e,t){}onPointerMove(e,t){}onPointerUp(e,t){}onCancel(e,t){}onKeyDown(e,t){}onKeyUp(e,t){}onWheel(e,t){}onTick(e,t){}handlePointerEvent(e,t){switch(e.name){case"pointer_down":return this.onPointerDown(e,t);case"pointer_move":return this.onPointerMove(e,t);case"pointer_up":return this.onPointerUp(e,t);case"pointer_cancel":return this.onCancel({type:"cancel",reason:"pointer_cancel"},t)}}handleKeyboardEvent(e,t){return"key_down"===e.name?this.onKeyDown(e,t):this.onKeyUp(e,t)}},Ec=class extends Mc{constructor(e){super(e,"hand"),this.initial="idle",this.addChild(new kc(e,this)),this.addChild(new Bc(e,this))}},kc=class extends Mc{constructor(e,t){super(e,"idle",t)}onPointerDown(e){0===e.button&&this.transition("panning",et(this.editor,e.screenPoint))}},Bc=class extends Mc{info=null;constructor(e,t){super(e,"panning",t)}onEnter(e){this.info=e}onTick(e){if(!this.info)return;const t=this.editor.inputs.state.get().currentScreenPoint;t&&tt(this.editor,this.info,t)}onPointerUp(e){this.info&&tt(this.editor,this.info,e.screenPoint),this.transition("idle")}onCancel(){this.transition("idle")}onExit(){this.info=null}},Ac=Math.PI/180*15,Rc=Math.PI/2,Fc=Math.PI/180*5,Kc=class extends Mc{info=null;onEnter(e){this.info=e,this.onInfoEnter()}onExit(){this.onInfoExit(),this.info=null}onInfoEnter(){}onInfoExit(){}},Dc=class extends Kc{onPointerMove(e){if(!this.info)return;const t=this.editor.inputs.state.get().originScreenPoint;t&&((e,t)=>e.dist2(t)>=9)(t,e.screenPoint)&&this.onDragThresholdExceeded(e)}},Lc=class extends Kc{operation=null;onInfoEnter(){if(this.info){const e=this.getOperationKind(this.info);this.operation=this.editor.operations.begin({kind:e,label:e,source:"user",history:"record"})}this.onDragStart()}onDragStart(){}onTick(e){if(!this.info)return;const t=Ks(this.editor,e,"always_apply");t&&this.apply(t)}onKeyDown(){this.applyFromInputs()}onKeyUp(){this.applyFromInputs()}applyFromInputs(){Ds(this.editor,e=>this.apply(e))}commitOperation(){const e=this.operation;this.operation=null,e?.commit()}cancelOperation(){const e=this.operation;this.operation=null,e?.cancel()}},Yc=class extends Kc{constructor(e,t){super(e,"brushing",t)}onInfoEnter(){if(!this.info)return;const e=this.editor.inputs.state.get();this.updateBrush(this.info.originPagePoint,this.info.additiveSelection,Os(e))}onPointerMove(e){this.info&&this.updateBrush(e.pagePoint,Xs(e),Os(e))}onTick(e){if(!this.info)return;const t=Ks(this.editor,e,"apply_after_scroll_or_without_screen_point");t&&this.updateBrush(t.pagePoint,Xs(t),Os(t))}onKeyDown(){this.updateBrushFromInputs()}onKeyUp(){this.updateBrushFromInputs()}onPointerUp(e){this.info&&this.updateBrush(e.pagePoint,Xs(e),Os(e)),this.complete()}onCancel(){this.info&&this.editor.commands.setSelectedShapeIds(this.info.previousSelection,{source:"system"}),this.cancel()}updateBrush(e,t,n){if(!this.info)return;const i=((e,t)=>{const n=Math.min(e.x,t.x),i=Math.min(e.y,t.y),s=Math.max(e.x,t.x),o=Math.max(e.y,t.y);return new Yd(n,i,s-n,o-i)})(this.info.originPagePoint,e),s=((e,t)=>{const n=[],i=new Set;for(const s of t){const t=e.shapes.get(s);if(!t)continue;const o=e.shapes.getUtil(t).getSelectionTargetId(t,{editor:e}),r=e.layers.getOutermostSelectableId(o);i.has(r)||(i.add(r),n.push(r))}return n})(this.editor,this.editor.shapes.getIdsInBounds(i).filter(e=>((e,t,n,i)=>{const s=e.shapes.get(n);return!(!s||!((e,t)=>{const n=e.shapes.get(t);return!!n&&e.shapes.getUtil(n).canBeDirectlyBrushSelected(n)})(e,s.id))&&e.shapes.getUtil(s).canSelectByBrush(s,{editor:e,brushBounds:t,isWrapping:i,pageOutlineVertices:e.shapes.getPageOutlineVertices(s.id),pageBounds:e.shapes.getPageBounds(s.id)})})(this.editor,i,e,n))),o=t?((e,t)=>{const n=new Set(e);for(const i of t)n.has(i)?n.delete(i):n.add(i);return Array.from(n)})(this.info.previousSelection,s):s;this.editor.interaction.setBrushBox(i),this.editor.commands.setSelectedShapeIds(o,{source:"system"})}updateBrushFromInputs(){Ds(this.editor,e=>this.updateBrush(e.pagePoint,Xs(e),Os(e)))}complete(){this.transition("idle")}cancel(){this.transition("idle")}},Xc=class extends Lc{constructor(e,t){super(e,"dragging_plugin_interaction",t)}getOperationKind(e){return e.session.operationKind}onDragStart(){this.info?.session.onDragStart?.({editor:this.editor})}onPointerUp(e){this.apply(e),this.complete()}onCancel(e){const t=this.info?.previousSelection;this.editor.signals.transact(()=>{t&&!G(t,this.editor.selection.getIds())&&this.editor.commands.setSelectedShapeIds(t,{source:"system"}),this.info&&(this.editor.interaction.clearSelection(),this.cancelOperation())}),this.info?.session.onCancel?.({editor:this.editor,reason:e.reason}),this.transition("idle")}onInfoExit(){this.info?.session.shouldClearBindingPreviewOnExit&&this.editor.interaction.setBindingPreview(null),this.editor.interaction.setSnapIndicators(null)}apply({pagePoint:e,shiftKey:t,altKey:n,accelKey:i}){if(!this.info)return;if(e.x===this.info.lastPagePointX&&e.y===this.info.lastPagePointY&&t===this.info.lastShiftKey&&n===this.info.lastAltKey&&i===this.info.lastAccelKey)return;this.info.lastPagePointX=e.x,this.info.lastPagePointY=e.y,this.info.lastShiftKey=t,this.info.lastAltKey=n,this.info.lastAccelKey=i;const s=this.info.snapMode,o=this.info.snapSnapshot,r=!i&&"none"!==s&&null!==o,a=r&&o?this.editor.snaps.snapHandle({mode:s,pagePoint:e,snapshot:o,threshold:8/this.editor.state.camera.get().z}):null;r||this.editor.snaps.clearIndicators();const d=a?.snappedPagePoint??e,c=this.info.session.update({editor:this.editor,pagePoint:d,accelKey:i,source:"user"}),l="string"==typeof c?c:c.status,h="string"==typeof c?d:c.finalPagePoint;!a||!h||h.dist2(a.snappedPagePoint)<=1e-6||this.editor.snaps.clearIndicators(),"stop"===l&&this.complete()}complete(){const e=this.info;e&&(this.editor.interaction.setSnapIndicators(null),e.session.onComplete?.({editor:this.editor}),this.commitOperation(),this.transition("idle"))}},Oc=class extends Mc{constructor(e,t){super(e,"idle",t)}onEnter(){this.editor.interaction.clearSelection()}onPointerDown(e){const t=this.editor.selection.getIds(),n=this.editor.state.readonly.get()?null:this.editor.selection.hitTestHandle(e.pagePoint);if("rotate"===n?.kind)return void this.transition("pointing_rotate_handle",{originPagePoint:e.pagePoint.clone(),previousSelection:t});if("resize"===n?.kind)return void this.transition("pointing_resize_handle",{handleId:n.id,originPagePoint:e.pagePoint.clone(),cursorHandleOffset:e.pagePoint.sub(n.point),previousSelection:t});let i=null;if(n){const s=this.editor.state.selectedShapes.get()[0]??null;if(s){const o=this.editor.interactions.createSelectionHandleSession(this.editor,{handle:n,shape:s,originPagePoint:e.pagePoint.clone()});if(o){const s=o.handleSnapMode??"none";i={originPagePoint:e.pagePoint.clone(),previousSelection:t,session:o,snapSnapshot:"none"===s?null:this.editor.snaps.createHandleSnapshot({context:o.handleSnapContext??{shapeId:o.shapeId,handle:n},currentPagePoint:e.pagePoint,allowSelfSnap:o.allowSelfSnap??!1,excludedShapeIds:o.excludedSnapShapeIds})}}}}const s=this.editor.shapes.hitTest(e.pagePoint);let o=null;if(s){const n=this.editor.shapes.getUtil(s).getSelectionTargetId(s,{editor:this.editor}),i=this.editor.shapes.getUtil(s).getTranslateTargetId(s,{editor:this.editor}),r=Xs(e),a=Ls(this.editor,n,t),d=r?null:((e,t,n)=>{const i=new Set(n);for(const s of Ys(e,t))if(i.has(s.ancestorId))return s.ancestorId;return null})(this.editor,n,t),c=r?null:d?a:null,l=Ls(this.editor,i,t),h=null===c?l:d??l,u=this.editor.state.readonly.get()?null:this.editor.interactions.createShapePointerSession(this.editor,{shape:s,selectionTargetId:a,originPagePoint:e.pagePoint.clone(),event:e});o={shapeId:a,translateTargetId:h,originPagePoint:e.pagePoint.clone(),originTimestamp:e.timestamp,previousSelection:t,additiveSelection:r,wasSelected:t.includes(a),fromSelectionBounds:!1,quickClickSelectionTargetId:c,dragSession:u}}if(!i||"binding_middle"!==n?.kind&&"custom"!==n?.kind)if(o?.dragSession)this.transition("pointing_shape",o);else if(i)this.transition("pointing_selection_handle_interaction",i);else if(o)this.transition("pointing_shape",o);else{if(!this.editor.state.readonly.get()&&!Xs(e)&&t.length>0){const n=this.editor.state.selectedShapes.get()[0];if(n&&this.editor.shapes.getUtil(n).canStartTranslateFromSelectionBounds(n,{editor:this.editor})&&this.editor.selection.containsPoint(e.pagePoint))return void this.transition("pointing_shape",{shapeId:n.id,translateTargetId:n.id,originPagePoint:e.pagePoint.clone(),originTimestamp:e.timestamp,previousSelection:t,additiveSelection:!1,wasSelected:!0,fromSelectionBounds:!0,quickClickSelectionTargetId:null,dragSession:null})}this.transition("pointing_canvas",{originPagePoint:e.pagePoint.clone(),previousSelection:t,additiveSelection:Xs(e)})}else this.transition("pointing_selection_handle_interaction",i)}},zc=class extends Dc{constructor(e,t){super(e,"pointing_canvas",t)}onDragThresholdExceeded(e){this.info&&this.transition("brushing",{...this.info,additiveSelection:Xs(e)})}onPointerUp(e){Xs(e)||this.editor.commands.setSelectedShapeIds([],{source:"system"}),this.transition("idle")}onCancel(){this.info&&this.editor.commands.setSelectedShapeIds(this.info.previousSelection,{source:"system"}),this.transition("idle")}},Nc=class extends Dc{constructor(e,t){super(e,"pointing_resize_handle",t)}onDragThresholdExceeded(){if(!this.info)return;const e=this.editor.selection.getFrame();if(!e)return void this.transition("idle");if(!this.editor.selection.canResize())return void this.transition("idle");const t=this.editor.selection.getResizeTargets(),n=new Map(t.flatMap(e=>{const t=rn(this.editor,e);return t?[[e.id,t]]:[]})),i=t.filter(e=>n.has(e.id));if(0===i.length)return void this.transition("idle");const s=((e,t,n,i)=>0===t.length?[]:zn(e,t,n,On(e,t,i)))(this.editor,i,this.info.handleId,e.rotation);if(0===s.length)return void this.transition("idle");const o=(({shapes:e,selectionFrame:t,getShapeSelectionResizePageOutlineVertices:n,getShapeSelectionPagePoints:i,getShapeSelectionPageMiddlePoint:s,getShapePageRecord:o})=>{const r={rotation:t.rotation,rotationCenter:t.rotationCenter},a=[],d=[];for(const c of e){const e=o(c),t=i(e);t?d.push({shape:c,pageShape:e,startLocalPagePoint:Rn(t[0],r),endLocalPagePoint:Rn(t[1],r),middleLocalPagePoint:(()=>{const t=s(e);return t?Rn(t,r):null})()}):a.push({shape:c,pageShape:e,localBounds:Yd.FromPoints(n(c).map(e=>Rn(e,r))),rotation:e.rotation})}return{startBounds:t.bounds.clone(),rotation:t.rotation,rotationCenter:t.rotationCenter.clone(),aspectRatio:0===t.bounds.h?1:t.bounds.w/t.bounds.h,shapes:a,pointShapes:d}})({shapes:i,selectionFrame:e,getShapeSelectionResizePageOutlineVertices:e=>function(e,t){const n=e.shapes.getUtil(t).getSelectionResizeLocalBounds(t),i=e.shapes.computeLocalToPageTransform(t);return(e=>[new Ld(e.minX,e.minY),new Ld(e.maxX,e.minY),new Ld(e.maxX,e.maxY),new Ld(e.minX,e.maxY)])(n).map(e=>i.applyToPoint(e))}(this.editor,e),getShapeSelectionPagePoints:e=>this.editor.shapes.getUtil(e).getSelectionPagePoints(e),getShapeSelectionPageMiddlePoint:e=>this.editor.shapes.getUtil(e).getSelectionPageMiddlePoint(e),getShapePageRecord:e=>n.get(e.id)});var r,a;this.transition("resizing",{...this.info,startBounds:o.startBounds,rotation:o.rotation,rotationCenter:o.rotationCenter,aspectRatio:o.aspectRatio,snapSnapshot:this.editor.snaps.createResizeSnapshot({resizingShapeIds:this.editor.layers.getSelectionTransformIds(this.editor.selection.getIds()),coordinateSpace:{rotation:o.rotation,rotationCenter:o.rotationCenter}}),shapes:o.shapes,pointShapes:o.pointShapes,updates:(r=o.shapes,a=o.pointShapes,[...r.map(e=>({id:e.shape.id,x:e.shape.x,y:e.shape.y,rotation:e.shape.rotation,scaleX:e.shape.scaleX,scaleY:e.shape.scaleY})),...a.map(e=>({id:e.shape.id,x:e.shape.x,y:e.shape.y,rotation:e.shape.rotation,scaleX:e.shape.scaleX,scaleY:e.shape.scaleY}))]),allowedResizeModes:s,lastPagePointX:NaN,lastPagePointY:NaN,lastShiftKey:!1,lastAltKey:!1,lastAccelKey:!1})}onPointerUp(){this.transition("idle")}onCancel(){this.transition("idle")}},$c=class extends Dc{constructor(e,t){super(e,"pointing_rotate_handle",t)}onDragThresholdExceeded(){if(!this.info)return;const e=this.editor.selection.getFrame();if(!e)return void this.transition("idle");if(!this.editor.selection.canRotate())return void this.transition("idle");const t=new Map(this.editor.selection.getRotationTargets().flatMap(e=>{const t=rn(this.editor,e);return t?[[e.id,t]]:[]})),n=this.editor.selection.getRotationTargets().filter(e=>t.has(e.id));if(0===n.length)return void this.transition("idle");const i=(({shapes:e,selectionFrame:t,getShapeLocalBounds:n,getShapeSelectionPagePoints:i,getShapeSelectionPageMiddlePoint:s,getShapePageRecord:o})=>{const r=[],a=[];for(const d of e){const e=o(d),t=i(e);t?a.push({shape:d,pageShape:e,startPagePoint:t[0],endPagePoint:t[1],middlePagePoint:s(e)}):r.push({shape:d,pageShape:e,localBounds:n(d),rotation:e.rotation})}return{center:t.rotationCenter.clone(),initialSelectionRotation:t.rotation,shapes:r,pointShapes:a}})({shapes:n,selectionFrame:e,getShapeLocalBounds:e=>this.editor.shapes.computeLocalBounds(e),getShapeSelectionPagePoints:e=>this.editor.shapes.getUtil(e).getSelectionPagePoints(e),getShapeSelectionPageMiddlePoint:e=>this.editor.shapes.getUtil(e).getSelectionPageMiddlePoint(e),getShapePageRecord:e=>t.get(e.id)});var s,o;this.transition("rotating",{...this.info,center:i.center,startAngle:Ld.Angle(i.center,this.info.originPagePoint),initialSelectionRotation:i.initialSelectionRotation,shapes:i.shapes,pointShapes:i.pointShapes,updates:(s=i.shapes,o=i.pointShapes,[...s.map(e=>({id:e.shape.id,x:e.shape.x,y:e.shape.y,rotation:e.shape.rotation,scaleX:e.shape.scaleX,scaleY:e.shape.scaleY})),...o.map(e=>({id:e.shape.id,x:e.shape.x,y:e.shape.y,rotation:e.shape.rotation,scaleX:e.shape.scaleX,scaleY:e.shape.scaleY}))]),lastPointerX:NaN,lastPointerY:NaN,lastShiftKey:!1,lastAccelKey:!1})}onPointerUp(){this.transition("idle")}onCancel(){this.transition("idle")}},_c=class extends Dc{constructor(e,t){super(e,"pointing_selection_handle_interaction",t)}onDragThresholdExceeded(){this.info&&this.transition("dragging_plugin_interaction",{...this.info,snapMode:this.info.session.handleSnapMode??"none",lastPagePointX:NaN,lastPagePointY:NaN,lastShiftKey:!1,lastAltKey:!1,lastAccelKey:!1})}onPointerUp(e,t){if(this.info){const e={editor:this.editor,source:"user"};(t.pointer?.clickCount??1)>=2&&this.info.session.onDoubleClick?this.info.session.onDoubleClick(e):this.info.session.onClick?.(e)}this.transition("idle")}onCancel(e){this.info?.session.onCancel?.({editor:this.editor,reason:e.reason}),this.transition("idle")}},Hc=class extends Dc{constructor(e,t){super(e,"pointing_shape",t)}onInfoEnter(){this.info&&(this.info.quickClickSelectionTargetId||(this.info.additiveSelection?this.info.wasSelected||this.editor.commands.setSelectedShapeIds([...this.info.previousSelection,this.info.shapeId],{source:"system"}):this.info.wasSelected||this.editor.commands.setSelectedShapeIds([this.info.shapeId],{source:"system"})))}onDragThresholdExceeded(e){if(!this.info||this.editor.state.readonly.get())return;if(this.info.dragSession)return void this.transition("dragging_plugin_interaction",{originPagePoint:this.info.originPagePoint,previousSelection:this.info.previousSelection,session:this.info.dragSession,snapMode:"none",snapSnapshot:null,lastPagePointX:NaN,lastPagePointY:NaN,lastShiftKey:!1,lastAltKey:!1,lastAccelKey:!1});const t=this.editor.state.selectedShapes.get(),n=this.info.wasSelected?t.map(e=>e.id):[this.info.translateTargetId];this.info.wasSelected||1!==n.length||n[0]===this.info.shapeId||this.editor.commands.setSelectedShapeIds(n,{source:"system"});const i=this.editor.selection.getFrame(),s=((e,t)=>t.filter(t=>{const n=e.shapes.get(t);return!!n&&e.shapes.getUtil(n).canParticipateInSelectionTranslation(n,{editor:e})&&!e.layers.isOrAncestorLocked(n.id)&&!e.layers.hasLockedDescendant(n.id)}).map(t=>e.shapes.get(t)).filter(e=>!!e).flatMap(t=>(t.parentId.startsWith("shape:")?e.shapes.computeLocalToPageTransform(e.shapes.get(t.parentId)):$d.Identity()).tryInvert()?[{id:t.id,x:t.x,y:t.y,startLocalToPage:e.shapes.computeLocalToPageTransform(t)}]:[]))(this.editor,n);if(0===s.length)return void this.transition("brushing",{originPagePoint:this.info.originPagePoint,previousSelection:this.info.previousSelection,additiveSelection:Xs(e)});const o=s.map(e=>e.id),r=i?.hasCompatibleRotation?i.rotation:0,a=i?.rotationCenter.clone()??Ld.Zero(),d=i?.hasCompatibleRotation?i.bounds.clone():this.editor.selection.getPageBounds();var c;this.transition("translating",{originPagePoint:this.info.originPagePoint,previousSelection:this.info.previousSelection,movingShapeIds:o,startBounds:d,snapSnapshot:this.editor.snaps.createTranslateSnapshot({movingShapeIds:o,coordinateSpace:{rotation:r,rotationCenter:a}}),snapRotation:r,selectedShapes:s,updates:(c=s,c.map(e=>({id:e.id,x:e.x,y:e.y}))),lockedAxis:null,lastDeltaX:NaN,lastDeltaY:NaN})}onPointerUp(e,t){let n;if(this.info?.quickClickSelectionTargetId){const i=((e,t)=>t.timestamp-e.originTimestamp<=250)(this.info,e);i&&this.editor.commands.setSelectedShapeIds([this.info.quickClickSelectionTargetId],{source:"system"}),i&&(t.pointer?.clickCount??1)>=2||(n={clickSequence:"break"})}else Xs(e)&&this.info?.wasSelected?this.editor.commands.setSelectedShapeIds(this.info.previousSelection.filter(e=>e!==this.info?.shapeId),{source:"system"}):this.info&&!this.info.additiveSelection&&this.info.wasSelected&&!this.info.fromSelectionBounds&&this.info.previousSelection.length>1&&this.editor.commands.setSelectedShapeIds([this.info.shapeId],{source:"system"});return this.transition("idle"),n}onCancel(){this.info&&this.editor.commands.setSelectedShapeIds(this.info.previousSelection,{source:"system"}),this.transition("idle")}},Uc=class extends Lc{constructor(e,t){super(e,"resizing",t)}getOperationKind(){return"select.resize"}onDragStart(){this.editor.interaction.setSnapIndicators(null)}onPointerUp(e){this.apply(e),this.complete()}onCancel(){this.info&&this.editor.commands.setSelectedShapeIds(this.info.previousSelection,{source:"system"}),this.cancel()}onInfoExit(){this.editor.interaction.setSnapIndicators(null)}apply({pagePoint:e,shiftKey:t,altKey:n,accelKey:i}){if(!this.info)return;if(e.x===this.info.lastPagePointX&&e.y===this.info.lastPagePointY&&t===this.info.lastShiftKey&&n===this.info.lastAltKey&&i===this.info.lastAccelKey)return;this.info.lastPagePointX=e.x,this.info.lastPagePointY=e.y,this.info.lastShiftKey=t,this.info.lastAltKey=n,this.info.lastAccelKey=i;const s=_s(this.info.rotationCenter,this.info.rotation),o=Rn(e.sub(this.info.cursorHandleOffset),s),r=((e,t)=>{const n=e.includes("free"),i=e.includes("aspect_ratio_locked");return n||i?n?i&&t?"aspect_ratio_locked":"free":"aspect_ratio_locked":null})(this.info.allowedResizeModes,t);if(!r)return;const a="aspect_ratio_locked"===r,d=function({startBounds:e,handleId:t,pagePoint:n,isAspectRatioLocked:i,isResizingFromCenter:s,aspectRatio:o}){const r=s?(({startBounds:e,handleId:t,pagePoint:n})=>{const i=e.center,s=n.x-i.x,o=n.y-i.y,r=Math.max(Math.abs(s),.5),a=Math.max(Math.abs(o),.5),d=Mi(t)||Ei(t)?s*(Mi(t)?-2:2)/Math.max(1,e.w):1,c=ki(t)||Bi(t)?o*(ki(t)?-2:2)/Math.max(1,e.h):1;switch(t){case"top":case"bottom":return{bounds:new Yd(e.minX,i.y-a,e.w,2*a),scaleX:d,scaleY:c};case"left":case"right":return{bounds:new Yd(i.x-r,e.minY,2*r,e.h),scaleX:d,scaleY:c};default:return{bounds:new Yd(i.x-r,i.y-a,2*r,2*a),scaleX:d,scaleY:c}}})({startBounds:e,handleId:t,pagePoint:n}):(({startBounds:e,handleId:t,pagePoint:n})=>{const i=e.minX,s=e.maxX,o=e.minY,r=e.maxY;let a=Mi(t)?i:s,d=Mi(t)?s:i,c=ki(t)?o:r,l=ki(t)?r:o;Mi(t)||Ei(t)?a=n.x:(a=s,d=i),ki(t)||Bi(t)?c=n.y:(c=r,l=o);const h=a-d,u=c-l,p=Mi(t)?d-a:h,g=ki(t)?l-c:u,f=Mi(t)||Ei(t)?p/Math.max(1,e.w):1,m=ki(t)||Bi(t)?g/Math.max(1,e.h):1;return{bounds:new Yd(Math.min(a,d),Math.min(c,l),Math.max(1,Math.abs(h)),Math.max(1,Math.abs(u))),scaleX:f,scaleY:m}})({startBounds:e,handleId:t,pagePoint:n});return i?Fi({bounds:r.bounds,startBounds:e,handleId:t,aspectRatio:o,isResizingFromCenter:s,scaleX:r.scaleX,scaleY:r.scaleY}):r}({startBounds:this.info.startBounds,handleId:this.info.handleId,pagePoint:o,isAspectRatioLocked:a,isResizingFromCenter:n,aspectRatio:this.info.aspectRatio}),c=!i&&this.info.snapSnapshot.points.length>0,l=c?this.editor.snaps.snapResize({handleId:this.info.handleId,initialSelectionBounds:this.info.startBounds,resizedSelectionBounds:d.bounds,scaleX:d.scaleX,scaleY:d.scaleY,snapshot:this.info.snapSnapshot,threshold:8/this.editor.state.camera.get().z,isAspectRatioLocked:a,isResizingFromCenter:n}):d;c||this.editor.snaps.clearIndicators();const h=this.info.shapes.length+this.info.pointShapes.length===1;for(let u=0;u<this.info.shapes.length;u+=1){const e=this.info.shapes[u],t=this.info.updates[u];e&&t&&$s(this.editor,e,this.info.startBounds,l.bounds,l.scaleX,l.scaleY,this.info.handleId,h,n,this.info.rotationCenter,this.info.rotation,t)}for(let u=0;u<this.info.pointShapes.length;u+=1){const e=this.info.pointShapes[u],t=this.info.updates[this.info.shapes.length+u];e&&t&&Hs(this.editor,e,this.info.startBounds,0,l.scaleX,l.scaleY,this.info.handleId,n,this.info.rotationCenter,this.info.rotation,t)}this.editor.commands.updateShapes(this.info.updates)}complete(){this.editor.interaction.setSnapIndicators(null),this.commitOperation(),this.transition("idle")}cancel(){this.editor.interaction.setSnapIndicators(null),this.cancelOperation(),this.transition("idle")}},Wc=class extends Lc{constructor(e,t){super(e,"rotating",t)}getOperationKind(){return"select.rotate"}onPointerUp(e){this.apply(e),this.complete()}onCancel(){this.info&&this.editor.commands.setSelectedShapeIds(this.info.previousSelection,{source:"system"}),this.cancel()}apply({pagePoint:e,shiftKey:t,accelKey:n}){if(!this.info)return;if(e.x===this.info.lastPointerX&&e.y===this.info.lastPointerY&&t===this.info.lastShiftKey&&n===this.info.lastAccelKey)return;this.info.lastPointerX=e.x,this.info.lastPointerY=e.y,this.info.lastShiftKey=t,this.info.lastAccelKey=n;let i=zs(Ld.Angle(this.info.center,e)-this.info.startAngle);if(t)i=Ns(i,Ac);else if(!n&&this.editor.inputs.state.get().screenVelocity.len()<.5){const e=this.info.initialSelectionRotation+i,t=Ns(e,Rc),n=zs(t-e);Math.abs(n)<=Fc&&(i=zs(t-this.info.initialSelectionRotation))}for(let s=0;s<this.info.shapes.length;s+=1){const e=this.info.shapes[s],t=this.info.updates[s];e&&t&&Ws(this.editor,e,this.info.center,i,t)}for(let s=0;s<this.info.pointShapes.length;s+=1){const e=this.info.pointShapes[s],t=this.info.updates[this.info.shapes.length+s];e&&t&&qs(this.editor,e,this.info.center,i,t)}this.editor.commands.updateShapes(this.info.updates)}complete(){this.commitOperation(),this.transition("idle")}cancel(){this.cancelOperation(),this.transition("idle")}},qc=class extends Lc{constructor(e,t){super(e,"translating",t)}getOperationKind(){return"select.translate"}onDragStart(){this.editor.interaction.setSelectionTranslationActive(!0),this.editor.interaction.setSnapIndicators(null)}onPointerUp(e){this.apply(e),this.complete(e.pagePoint)}onCancel(){this.info&&this.editor.commands.setSelectedShapeIds(this.info.previousSelection,{source:"system"}),this.cancel()}onInfoExit(){this.editor.interaction.setSelectionTranslationActive(!1),this.editor.interaction.setSnapIndicators(null)}apply({pagePoint:e,shiftKey:t,accelKey:n}){if(!this.info)return;const i=e.x-this.info.originPagePoint.x,s=e.y-this.info.originPagePoint.y;t?this.info.lockedAxis||0===i&&0===s||(this.info.lockedAxis=Math.abs(i)>=Math.abs(s)?"x":"y"):this.info.lockedAxis=null;let o=i,r=s;"x"===this.info.lockedAxis?r=0:"y"===this.info.lockedAxis&&(o=0);const a=this.info.startBounds;if(!n&&a&&(this.info.snapSnapshot.points.length>0||this.info.snapSnapshot.nodes.length>0)&&this.editor.inputs.state.get().screenVelocity.len()<.5&&a){const e=this.info.snapRotation,t=8/this.editor.state.camera.get().z,n=0===e?new Ld(o,r):new Ld(o,r).rot(-e),{nudge:i}=this.editor.snaps.snapTranslate({lockedAxis:this.info.lockedAxis,initialSelectionBounds:a,dragDelta:n,snapshot:this.info.snapSnapshot,threshold:t}),s=0===e?i:i.rot(e);o+="y"===this.info.lockedAxis?0:s.x,r+="x"===this.info.lockedAxis?0:s.y}else this.editor.snaps.clearIndicators();if(o!==this.info.lastDeltaX||r!==this.info.lastDeltaY){this.info.lastDeltaX=o,this.info.lastDeltaY=r;for(let e=0;e<this.info.selectedShapes.length;e+=1){const t=this.info.selectedShapes[e],n=this.info.updates[e];if(!t||!n)continue;const i=this.editor.shapes.get(t.id);if(!i)continue;const s=i.parentId.startsWith("shape:")?this.editor.shapes.get(i.parentId):null,a=(s?this.editor.shapes.computeLocalToPageTransform(s):$d.Identity()).tryInvert();if(!a)continue;const d=ye(a.compose($d.Translate(o,r).compose(t.startLocalToPage)),this.editor.shapes.computeLocalBounds(i),{preferredRotation:i.rotation,preferredScaleXSign:i.scaleX,preferredScaleYSign:i.scaleY});d&&Object.assign(n,d)}this.editor.commands.updateShapes(this.info.updates)}js(this.editor,this.info.movingShapeIds,e),((e,t,n)=>{const i=Gs(e,t,n);if(i===Vs(e,t))return void e.interaction.setDropTargetShapeId(null);const s=i?e.shapes.get(i):null;e.interaction.setDropTargetShapeId(s?.id??null)})(this.editor,this.info.movingShapeIds,e)}complete(e){this.info&&js(this.editor,this.info.movingShapeIds,e),this.editor.interaction.setDropTargetShapeId(null),this.editor.interaction.setSnapIndicators(null),this.commitOperation(),this.transition("idle")}cancel(){this.editor.interaction.setDropTargetShapeId(null),this.editor.interaction.setSnapIndicators(null),this.cancelOperation(),this.transition("idle")}},Vc=class extends Mc{constructor(e){super(e,"select"),this.initial="idle",this.addChild(new Oc(e,this)),this.addChild(new zc(e,this)),this.addChild(new Yc(e,this)),this.addChild(new Hc(e,this)),this.addChild(new qc(e,this)),this.addChild(new Nc(e,this)),this.addChild(new Uc(e,this)),this.addChild(new $c(e,this)),this.addChild(new Wc(e,this)),this.addChild(new _c(e,this)),this.addChild(new Xc(e,this))}},Gc=sd(null),jc=sd(io([])),Qc=od(e=>{const{Component:t,editor:n,isSelected:i,shape:s,shapeEditingSession:o}=e;
21
+ return md(t,{editor:n,isSelected:i,shape:s,shapeEditingSession:o})}),Zc=od(({shapeId:e,stackingOrder:t})=>{const n=to(),i=ho(n.shapes.getSignal(e)),s=ho(n.shapes.getLocalToPageTransformSignal(e)),o=ho(n.shapes.getRenderVisibleSignal(e)),r=ho(n.shapes.getSelectedSignal(e)),a=ho(n.shapes.getEditingSessionSignal(e)),d=ho(n.shapes.getEffectiveOpacitySignal(e)),c=ho(n.shapes.getClipAncestorIdsSignal(e)),l=co(),h=ho(hd(()=>l.getShapeOpacityValue(n,e),[n,l,e]));if(!i||!s)return null;const u=l.getShapeRenderer(i.type)?.foregroundComponent;if(!u)return null;const p=So(n,i,s),g=d*h;
22
+ return md("div",{"data-ui":"shape-foreground","data-owner-shape-id":i.id,"data-owner-shape-type":i.type,style:{position:"absolute",display:o?void 0:"none",left:p.left,top:p.top,width:p.width,height:p.height,opacity:1===g?void 0:g,transform:p.transform,transformOrigin:p.transformOrigin,pointerEvents:"none",zIndex:t+1},children:o?md(uo,{clipAncestorIds:c,shapeElementToPage:p.elementToPage,children:md(Qc,{Component:u,shape:i,editor:n,isSelected:r,shapeEditingSession:a})}):null})}),Jc=od(({shapeId:e,stackingOrder:t})=>{const n=to(),i=ho(n.shapes.getSignal(e)),s=ho(n.shapes.getLocalToPageTransformSignal(e)),o=ho(n.shapes.getHoveredSignal(e)),r=ho(n.state.selectionCount),a=ho(n.render.interaction.brushBoxActive),d=ho(n.shapes.getRenderVisibleSignal(e)),c=ho(n.state.tool).activeToolId,l=ho(n.shapes.getSelectedSignal(e)),h="select"===c&&l,u=ho(n.shapes.getEditingSessionSignal(e)),p=ho(n.shapes.getRenderOrderSignal(e)),g=ho(n.shapes.getDropTargetSignal(e)),f=ho(n.shapes.getEffectiveOpacitySignal(e)),m=ho(n.shapes.getSelectedDescendantTransformAncestorSignal(e)),y=ho(n.shapes.getClipAncestorIdsSignal(e)),S=co(),I=ho(hd(()=>S.getShapeOpacityValue(n,e),[n,S,e]));if(!i||!s)return null;const v=S.getShapeRenderer(i.type);if(!v)return null;const w=v.component,b=v.hoverComponent,P=o&&!(1===r&&h)&&!a,x=So(n,i,s),C=f*I;
23
+ return yd("div",{"data-ui":"shape-instance","data-shape-id":i.id,"data-shape-type":i.type,"data-selected":h?"true":"false","data-hovered":P?"true":"false","data-drop-target":g?"true":"false","data-visible":d?"true":"false","data-render-order":p>=0?String(p):void 0,"data-clip-ancestor-count":y.length,style:{position:"absolute",display:d?void 0:"none",left:x.left,top:x.top,width:x.width,height:x.height,opacity:1===C?void 0:C,transform:x.transform,transformOrigin:x.transformOrigin,pointerEvents:"none",outline:g?"2px solid #2563eb":void 0,outlineOffset:g?4:void 0,boxShadow:g?"0 0 0 6px rgba(37, 99, 235, 0.16)":void 0,zIndex:t+1},children:[d?yd(uo,{clipAncestorIds:y,shapeElementToPage:x.elementToPage,children:[md(Qc,{Component:w,shape:i,editor:n,isSelected:h,shapeEditingSession:u}),P&&b?md(yo,{Component:b,editor:n,shape:i}):null]}):null,d&&g?md(vo,{}):null,d&&m?md(Io,{}):null]})}),el=od(()=>{const e=to();return((e,t,n)=>{const i=[],s=[],o=new Map(t.map(e=>[e.id,e]));for(const r of e){const e=o.get(r);if(e){for(;s.length>0&&!wo(s[s.length-1],e,o);)i.push({layer:"foreground",shapeId:s.pop()});i.push({layer:"shape",shapeId:r}),n.getShapeRenderer(e.type)?.foregroundComponent&&s.push(r)}}for(;s.length>0;)i.push({layer:"foreground",shapeId:s.pop()});return i})(ho(e.render.viewport.retainedShapeIds),ho(e.state.currentPageShapeTree),co()).map((e,t)=>"shape"===e.layer?md(Jc,{shapeId:e.shapeId,stackingOrder:t},e.shapeId):md(Zc,{shapeId:e.shapeId,stackingOrder:t},`${e.shapeId}:foreground`))}),tl="rgba(100, 116, 139, 0.82)",nl="rgba(255, 255, 255, 0.84)",il=od(()=>ho(to().render.interaction.bindingPreviewActive)?md(sl,{}):null),sl=od(()=>{const e=to(),t=ho(e.render.interaction.bindingPreview),n=ho(e.render.interaction.terminalBindingGuides);if(!t)return null;const i=n.some(e=>e.terminal===t.terminal&&e.targetShapeId===t.targetShapeId);
24
+ return yd(fd,{children:[md(ol,{targetShapeId:t.targetShapeId}),md(rl,{bindingPreview:t,showGuide:!i})]})}),ol=od(({targetShapeId:e})=>{const t=to(),n=ho(t.state.cameraZoom),i=ho(t.shapes.getSignal(e));return i?md(To,{editor:t,shape:i,stroke:"rgba(14, 165, 233, 0.78)",fill:"rgba(14, 165, 233, 0.08)",strokeWidth:2/n}):null}),rl=od(({bindingPreview:e,showGuide:t})=>{const n=ho(to().state.cameraZoom),i=2/n,s=6/n,o=4/n;
25
+ return yd(fd,{children:[t?e.guidePath?md(Co,{path:e.guidePath,strokeWidth:i,dashSize:s,gapSize:o,kind:"binding-preview",terminal:e.terminal}):md(xo,{start:e.rawPagePoint,end:e.resolvedPagePoint,startInset:8/n,endInset:6/n,strokeWidth:i,dashSize:s,gapSize:o,kind:"binding-preview",terminal:e.terminal}):null,
26
+ md("circle",{"data-binding-preview-point":"raw",cx:e.rawPagePoint.x,cy:e.rawPagePoint.y,r:6,fill:"rgba(255,255,255,0.96)",stroke:"rgba(14, 165, 233, 0.8)",strokeWidth:2}),
27
+ md("circle",{"data-binding-preview-point":"resolved",cx:e.resolvedPagePoint.x,cy:e.resolvedPagePoint.y,r:7,fill:"rgba(14, 165, 233, 0.18)",stroke:"rgba(2, 132, 199, 0.9)",strokeWidth:2})]})}),al=od(()=>ho(to().render.interaction.brushBoxActive)?md(dl,{}):null),dl=od(()=>{const e=ho(to().render.interaction.brushBox);return e?md("rect",{"data-ui":"brush-box-overlay",x:e.x,y:e.y,width:e.w,height:e.h,fill:"rgba(59, 130, 246, 0.14)",stroke:"rgba(37, 99, 235, 0.92)",strokeDasharray:"4 3",strokeWidth:1}):null}),cl=od(()=>{const e=to(),t=ho(e.render.overlay.frameGeometry),n=ho(e.render.overlay.companionFrameGeometries);return t||0!==n.length?yd(fd,{children:[t?md(ll,{frameGeometry:t}):null,n.map((e,t)=>md(ll,{frameGeometry:e},`companion-${t}`))]}):null}),ll=od(({frameGeometry:e})=>{const t=ho(to().render.overlay.frameStyle),{bounds:n,rotation:i,rotationCenter:s}=e,{cornerRadius:o,strokeWidth:r}=t,a=r/2,d=180*i/Math.PI;
28
+ return md("g",{transform:0===i?void 0:`rotate(${d} ${s.x} ${s.y})`,children:md("rect",{"data-selection-overlay":"bounds",x:n.x-a,y:n.y-a,width:n.w+r,height:n.h+r,rx:o+a,ry:o+a,fill:"none",stroke:"rgba(37, 99, 235, 0.88)",strokeWidth:r})})}),hl=new Set(["top_left","top_right","bottom_right","bottom_left"]),ul=od(()=>{const e=to(),t=ho(e.state.readonly),n=ho(e.render.overlay.handleAnchors);return t||!n?null:md(pl,{anchors:n})}),pl=od(({})=>{const e=to(),t=ho(e.render.overlay.handles),n=ho(e.render.overlay.frameGeometry),i=lo(),s=ho(e.state.cameraZoom);if(!t)return null;const{resizeHandles:o,rotateHandles:r,strokeWidth:a,terminalHandles:d,middleHandles:c,customHandles:l}=t,h=o.filter(e=>hl.has(e.id)),u=o.filter(e=>!hl.has(e.id)),p=n?.rotation??0,g=180*p/Math.PI;
29
+ return yd(fd,{children:[n?md("g",{transform:n&&0!==p?`rotate(${g} ${n.rotationCenter.x} ${n.rotationCenter.y})`:void 0,children:u.map(e=>md(Mo,{frame:n,handleId:e.id,zoom:s},e.id))}):null,h.map(e=>md("rect",{"data-selection-resize-handle":e.id,x:e.bounds.x,y:e.bounds.y,width:e.bounds.w,height:e.bounds.h,rx:2/s,ry:2/s,fill:"rgba(255,255,255,0.98)",stroke:"rgba(37, 99, 235, 0.92)",strokeWidth:a,style:{cursor:Eo(e.id,p),pointerEvents:"auto"}},e.id)),r.map(e=>yd("g",{"data-selection-rotate-handle":e.id,transform:`translate(${e.bounds.center.x-6/s} ${e.bounds.center.y-6/s}) scale(${.6/s})`,fill:"none",stroke:"rgba(37, 99, 235, 0.96)",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[md("path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"}),md("path",{d:"M21 3v5h-5"})]},e.id)),d.map(e=>md("circle",{"data-selection-terminal":e.terminal,cx:e.bounds.center.x,cy:e.bounds.center.y,r:Math.min(e.bounds.w,e.bounds.h)/2,fill:"rgba(255,255,255,0.98)",stroke:"rgba(37, 99, 235, 0.92)",strokeWidth:a,style:{cursor:"grab",pointerEvents:"auto"}},e.terminal)),c.map(e=>md("rect",{"data-selection-binding-middle":"true",x:e.bounds.x,y:e.bounds.y,width:e.bounds.w,height:e.bounds.h,rx:2,ry:2,fill:"rgba(255,255,255,0.98)",stroke:"rgba(37, 99, 235, 0.92)",strokeWidth:a,transform:`rotate(45 ${e.bounds.center.x} ${e.bounds.center.y})`,style:{cursor:"grab",pointerEvents:"auto"}},"middle")),l.map(e=>{const t=i.getSelectionCustomHandleRenderer(e.type);
30
+ return md(t?t.component:ko,{handle:e,strokeWidth:a},`${e.type}:${e.id}`)})]})}),gl=["ew-resize","nwse-resize","ns-resize","nesw-resize"],fl=1e-6,ml=od(()=>{const e=to(),t=ho(e.render.overlay.path),n=ho(e.render.overlay.pageClipPath),i=ho(e.render.overlay.bindingSegments),s=ho(e.render.overlay.selectedShapeItems),o=ho(e.render.overlay.frameStyle),r=cd().replace(/[^a-zA-Z0-9_-]/g,"-"),a=`selection-content-clip-${r}`,d=`selection-path-halo-${r}`,c=1===s.length?s[0]?.pathStyle??null:null,l=c?((e,t)=>{const n=e.localToPage.getMaximumLinearScale(),i=n>fl?Math.abs(e.localToPage.determinant())/n:0;return e.strokeWidth+2*t/(i>fl?i:n>fl?n:1)})(c,o.strokeWidth):null,h=c&&null!==l?c.localBounds.expand(l):null;return t?yd(fd,{children:[
31
+ md(yl,{bindingSegments:i,strokeWidth:o.strokeWidth}),n||c&&h?yd("defs",{children:[n?md("clipPath",{id:a,clipPathUnits:"userSpaceOnUse",children:md("path",{d:n,clipRule:"evenodd",fillRule:"evenodd"})}):null,c&&null!==l&&h?yd("mask",{id:d,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse",x:h.x,y:h.y,width:h.w,height:h.h,children:[md(Bo,{dataPrefix:"path-halo-mask-outer",pathStyle:c,stroke:"white",strokeWidth:l}),md(Bo,{dataPrefix:"path-halo-mask-center",pathStyle:c,stroke:"black",strokeWidth:c.strokeWidth})]}):null]}):null,
32
+ md("g",{"data-selection-overlay":"lines",clipPath:n?`url(#${a})`:void 0,children:c&&null!==l?md("g",{"data-selection-overlay":"path-halo-transform",transform:c.localToPage.toSvgString(),children:md("g",{mask:`url(#${d})`,children:md(Bo,{dataPrefix:"path-halo",pathStyle:c,stroke:"rgba(37, 99, 235, 0.45)",strokeWidth:l})})}):yd(fd,{children:[md("path",{"data-selection-overlay":"path-underlay",d:t,fill:"none",stroke:"rgba(255,255,255,0.92)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2*o.strokeWidth}),md("path",{"data-selection-overlay":"path",d:t,fill:"none",stroke:"rgba(37, 99, 235, 0.88)",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:o.strokeWidth})]})})]}):null}),yl=od(({bindingSegments:e,kind:t="selection-binding",strokeWidth:n})=>{if(0===e.length)return null;const i=3*n,s=2*n,o=4*n,r=3*n;
33
+ return md(fd,{children:e.map(e=>e.guidePath?md(Co,{path:e.guidePath,strokeWidth:n,dashSize:i,gapSize:s,kind:t,terminal:e.terminal},e.terminal):md(xo,{start:e.anchorPagePoint,end:e.boundaryPagePoint,startInset:o,endInset:r,strokeWidth:n,dashSize:i,gapSize:s,kind:t,terminal:e.terminal},e.terminal))})}),Sl=od(()=>ho(to().render.interaction.selectionTranslationActive)?null:yd(fd,{children:[
34
+ md(ml,{}),
35
+ md(cl,{}),
36
+ md(ul,{})]})),Il="rgba(37, 99, 235, 0.9)",vl=od(()=>{const e=to(),t=ho(e.state.readonly),n=ho(e.render.interaction.snapIndicators);return t||0===n.length?null:md(wl,{indicators:n})}),wl=od(({indicators:e})=>{const t=ho(to().state.cameraZoom);
37
+ return md(fd,{children:e.map(e=>md("points"===e.type?bl:Pl,{indicator:e,zoom:t},e.id))})}),bl=od(({indicator:e,zoom:t})=>{const n=2.5/t,i=1/t,[s,o]=e.line,r=180*e.rotation/Math.PI;
38
+ return yd("g",{"data-ui":"snap-indicator",transform:0===e.rotation?void 0:`rotate(${r} ${e.rotationCenter.x} ${e.rotationCenter.y})`,children:[md("path",{"data-ui":"snap-indicator-line",d:`M ${s.x} ${s.y} L ${o.x} ${o.y}`,fill:"none",stroke:Il,strokeWidth:i,strokeLinecap:"round"}),e.points.map((t,s)=>md("path",{"data-ui":"snap-indicator-cross",d:`M ${t.x-n} ${t.y-n} L ${t.x+n} ${t.y+n} M ${t.x-n} ${t.y+n} L ${t.x+n} ${t.y-n}`,fill:"none",stroke:Il,strokeWidth:i,strokeLinecap:"round"},`${e.id}:${s}`))]})}),Pl=od(({indicator:e,zoom:t})=>{if(0===e.gaps.length)return null;const n="horizontal"===e.direction;let i=[Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY];for(const l of e.gaps){const e=Ao(i,[n?l.startEdge[0].y:l.startEdge[0].x,n?l.startEdge[1].y:l.startEdge[1].x]);e&&(i=e);const t=Ao(i,[n?l.endEdge[0].y:l.endEdge[0].x,n?l.endEdge[1].y:l.endEdge[1].x]);t&&(i=t)}if(!Number.isFinite(i[0])||!Number.isFinite(i[1]))return null;const s=(i[0]+i[1])/2,o=3.5/t,r=2*o,a=[];for(const{startEdge:l,endEdge:h}of e.gaps)if(n){a.push(`M ${l[0].x} ${s-r} L ${l[1].x} ${s+r}`,`M ${h[0].x} ${s-r} L ${h[1].x} ${s+r}`,`M ${l[0].x} ${s} L ${h[0].x} ${s}`);const e=(l[0].x+h[0].x)/2;a.push(`M ${e} ${s-o} L ${e} ${s+o}`)}else{a.push(`M ${s-r} ${l[0].y} L ${s+r} ${l[1].y}`,`M ${s-r} ${h[0].y} L ${s+r} ${h[1].y}`,`M ${s} ${l[0].y} L ${s} ${h[0].y}`);const e=(l[0].y+h[0].y)/2;a.push(`M ${s-o} ${e} L ${s+o} ${e}`)}const d=180*e.rotation/Math.PI,c=0===e.rotation?void 0:`rotate(${d} ${e.rotationCenter.x} ${e.rotationCenter.y})`;
39
+ return md("path",{"data-ui":"snap-gap-indicator",d:a.join(" "),transform:c,fill:"none",stroke:Il,strokeWidth:1/t,strokeLinecap:"round",strokeLinejoin:"round"})}),xl=od(()=>{const e=to(),t=ho(e.render.interaction.terminalBindingGuides),n=ho(e.render.overlay.frameStyle);return 0===t.length?null:md(yl,{bindingSegments:t,kind:"terminal-binding-guide",strokeWidth:n.strokeWidth})}),Cl=od(()=>yd("svg",{width:"100%",height:"100%",style:{display:"block",width:"100%",height:"100%",overflow:"visible"},children:[
40
+ md("style",{children:'\n [data-selection-terminal],\n [data-selection-binding-middle],\n [data-selection-custom-handle-visual="default"] {\n transition: fill 120ms ease, stroke 120ms ease;\n }\n [data-selection-terminal]:hover,\n [data-selection-binding-middle]:hover,\n [data-selection-custom-handle-visual="default"]:hover {\n fill: rgba(219, 234, 254, 0.98);\n stroke: rgba(29, 78, 216, 0.98);\n }\n [data-selection-terminal]:active,\n [data-selection-binding-middle]:active,\n [data-selection-custom-handle]:active {\n cursor: grabbing;\n }\n '}),
41
+ md(vl,{}),
42
+ md(xl,{}),
43
+ md(il,{}),
44
+ md(al,{}),
45
+ md(Sl,{}),
46
+ md(Tl,{})]})),Tl=od(()=>{const e=lo().getCanvasOverlays();return 0===e.length?null:md(fd,{children:e.map(({id:e,component:t})=>md(t,{},e))})}),Ml=[{min:-1,mid:.15,step:64},{min:.05,mid:.375,step:16},{min:.15,mid:1,step:4},{min:.7,mid:2.5,step:1}],El="canvas-surface",kl=`[data-ui="${El}"]`,Bl=sd(null),Al=sd(null),Rl={state:"idle"},Fl=class{abortController=new AbortController;activeTasks=new Set;disposers=[];phase="starting";close=null;signal=this.abortController.signal;tasks={run:e=>this.runTask(e)};own(e,t){if("starting"!==this.phase)throw new Error("Cannot register a resource after the Canvas Runtime is published or disposal starts.");return this.disposers.push(n=>"function"==typeof t?t(e):"rollback"===n&&t.rollback?t.rollback(e):t.shutdown(e)),e}publish({beforeShutdown:e}={}){if("starting"!==this.phase)throw new Error(`Only a starting Canvas Runtime can be published; received runtime in "${this.phase}" phase.`);return this.phase="ready",()=>null!==this.close?"shutdown"===this.close.mode?this.close.result:Promise.reject(new Error("Cannot shut down a Canvas Runtime during rollback.")):this.beginClose({mode:"shutdown",beforeShutdown:e})}rollback(e){return null!==this.close?"rollback"===this.close.mode?this.close.result:Promise.reject(new Error("Cannot roll back a Canvas Runtime during shutdown.")):"starting"!==this.phase?Promise.reject(new Error(`Only a starting Canvas Runtime can roll back; received runtime in "${this.phase}" phase.`)):this.beginClose({mode:"rollback",cause:e})}beginClose(e){const t=[],n=Promise.resolve().then(async()=>{const n=[...t,...await this.disposeResources(e.mode)];if(this.phase="disposed","rollback"===e.mode){if(n.length>0)throw new AggregateError([e.cause,...n],"CanvasKit Runtime initialization failed and cleanup reported errors.",{cause:e.cause});throw e.cause}if(n.length>0)throw new AggregateError(n,"Failed to dispose one or more CanvasKit Runtime resources.")});if(this.close={mode:e.mode,result:n},"shutdown"===e.mode)try{e.beforeShutdown?.()}catch(i){t.push(i)}return this.phase="disposing",this.abortController.abort("rollback"===e.mode?e.cause:new DOMException("Canvas runtime is disposing.","AbortError")),n}runTask(e){if("ready"!==this.phase)throw new Error(`Canvas tasks require a ready runtime; received runtime in "${this.phase}" phase.`);this.signal.throwIfAborted();const t=Promise.resolve().then(()=>e(this.signal));return this.activeTasks.add(t),t.finally(()=>this.activeTasks.delete(t)).catch(()=>{}),t}async disposeResources(e){await Promise.allSettled([...this.activeTasks]);const t=[];for(;this.disposers.length>0;){const i=this.disposers.pop();try{await i(e)}catch(n){t.push(n)}}return t}},Kl=[500,1e3,2e3,5e3],Dl=class{editor;adapter;options;unsubscribeDocument=null;unsubscribeSession=null;unsubscribeFlushEvents=null;documentTimer=null;sessionTimer=null;pendingDocument=null;pendingSession=null;documentVersion=0;sessionVersion=0;documentRetryCount=0;sessionRetryCount=0;writeChain=Promise.resolve();flushChain=Promise.resolve();isRunning=!1;disposeMode=null;disposePromise=null;constructor(e,t,n={}){this.editor=e,this.adapter=t,this.options=n}start(){if(null!==this.disposeMode)throw new Error("Cannot start disposed canvas persistence.");this.isRunning||(this.isRunning=!0,this.adapter.saveDocument&&(this.unsubscribeDocument=this.editor.operations.subscribe(e=>{var t;this.documentVersion+=1,this.documentRetryCount=0,this.pendingDocument={snapshot:(t=e.snapshot,JSON.parse(JSON.stringify(t))),version:this.documentVersion},this.scheduleDocumentSave(200)})),this.adapter.saveSession&&(this.unsubscribeSession=this.editor.listen(e=>{var t,n;((t=e.diff).added.some(e=>"session"===e.scope)||t.updated.some(e=>"session"===e.before.scope||"session"===e.after.scope)||t.removed.some(e=>"session"===e.scope))&&(this.sessionVersion+=1,this.sessionRetryCount=0,this.pendingSession={snapshot:(n=this.editor.snapshots.getSession(),JSON.parse(JSON.stringify(n))),version:this.sessionVersion},this.scheduleSessionSave(200))})),this.unsubscribeFlushEvents=this.options.flushEvents?.subscribe(this.flushForHostLifecycle)??null)}flush(){if(null!==this.disposeMode)return Promise.reject(new Error("Cannot flush disposed canvas persistence."));const e=this.flushChain.then(()=>this.flushNow());return this.flushChain=e.catch(()=>{}),e}shutdown(){return this.dispose("shutdown")}rollback(){return this.dispose("rollback")}dispose(e){return null!==this.disposeMode?this.disposeMode!==e?Promise.reject(new Error(`Canvas persistence disposal already started in "${this.disposeMode}" mode.`)):this.disposePromise:(this.disposeMode=e,this.disposePromise=Promise.resolve().then(()=>"shutdown"===e?this.finishShutdown():this.finishRollback()),this.disposePromise)}async finishShutdown(){this.stopIntake(),await this.flushChain,await this.flushNow()}async finishRollback(){this.stopIntake(),this.discardPendingSnapshots(),await this.flushChain,await this.writeChain,this.discardPendingSnapshots()}stopIntake(){this.isRunning=!1,this.cancelDocumentTimer(),this.cancelSessionTimer(),this.unsubscribeDocument?.(),this.unsubscribeSession?.(),this.unsubscribeFlushEvents?.(),this.unsubscribeDocument=null,this.unsubscribeSession=null,this.unsubscribeFlushEvents=null}async flushNow(){const e=await this.flushPendingSnapshots();try{await(this.adapter.flush?.())}catch(t){e.push(t)}if(e.length>0)throw new AggregateError(e,"Failed to flush canvas persistence.")}async flushPendingSnapshots(){this.cancelDocumentTimer(),this.cancelSessionTimer();const e=this.savePendingDocument(),t=this.savePendingSession();return(await Promise.allSettled([e,t])).flatMap(e=>"rejected"===e.status?[e.reason]:[])}discardPendingSnapshots(){this.cancelDocumentTimer(),this.cancelSessionTimer(),this.pendingDocument=null,this.pendingSession=null}savePendingDocument(){const e=this.pendingDocument;if(!e||!this.adapter.saveDocument)return this.writeChain;this.pendingDocument=null;const t=this.queueWrite(()=>Promise.resolve(this.adapter.saveDocument(e.snapshot))).then(()=>{this.documentVersion===e.version&&(this.documentRetryCount=0)}).catch(t=>{throw this.documentVersion===e.version&&null===this.pendingDocument&&(this.pendingDocument=e,this.scheduleDocumentRetry()),t});return this.writeChain=t.catch(()=>{}),t}savePendingSession(){const e=this.pendingSession;if(!e||!this.adapter.saveSession)return this.writeChain;this.pendingSession=null;const t=this.queueWrite(()=>Promise.resolve(this.adapter.saveSession(e.snapshot))).then(()=>{this.sessionVersion===e.version&&(this.sessionRetryCount=0)}).catch(t=>{throw this.sessionVersion===e.version&&null===this.pendingSession&&(this.pendingSession=e,this.scheduleSessionRetry()),t});return this.writeChain=t.catch(()=>{}),t}queueWrite(e){return this.writeChain.then(e)}scheduleDocumentSave(e){this.cancelDocumentTimer(),this.documentTimer=setTimeout(()=>{this.documentTimer=null,this.savePendingDocument().catch(e=>{this.reportError("Could not persist canvas document.",e)})},e)}scheduleSessionSave(e){this.cancelSessionTimer(),this.sessionTimer=setTimeout(()=>{this.sessionTimer=null,this.savePendingSession().catch(e=>{this.reportError("Could not persist canvas session.",e)})},e)}scheduleDocumentRetry(){if(!this.isRunning||null!==this.documentTimer)return;const e=Kl[this.documentRetryCount];void 0!==e&&(this.documentRetryCount+=1,this.scheduleDocumentSave(e))}scheduleSessionRetry(){if(!this.isRunning||null!==this.sessionTimer)return;const e=Kl[this.sessionRetryCount];void 0!==e&&(this.sessionRetryCount+=1,this.scheduleSessionSave(e))}cancelDocumentTimer(){null!==this.documentTimer&&(clearTimeout(this.documentTimer),this.documentTimer=null)}cancelSessionTimer(){null!==this.sessionTimer&&(clearTimeout(this.sessionTimer),this.sessionTimer=null)}flushForHostLifecycle=()=>{this.flush().catch(e=>{this.reportError("Could not persist canvas snapshot.",e)})};reportError(e,t){try{this.options.onError?.(new Error(e,{cause:t}))}catch{}}},Ll={status:"starting"},Yl=[],Xl="snapshots",Ol=null,zl="canvas-kit.document",Nl="canvas-kit.session",$l=Math.min,_l=Math.max,Hl=Math.round,Ul=Math.floor,Wl=e=>({x:e,y:e}),ql={left:"right",right:"left",bottom:"top",top:"bottom"},Vl=["left","right"],Gl=["right","left"],jl=["top","bottom"],Ql=["bottom","top"],Zl=new Set(["left","top"]),Jl=/transform|translate|scale|rotate|perspective|filter/,eh=/paint|layout|strict|content/,th=e=>!!e&&"none"!==e,nh=Wl(0),ih={convertOffsetParentRelativeRectToViewportRelativeRect:e=>{let{elements:t,rect:n,offsetParent:i,strategy:s}=e;const o="fixed"===s,r=Ia(i),a=!!t&&Ta(t.floating);if(i===r||a&&o)return n;let d={scrollLeft:0,scrollTop:0},c=Wl(1);const l=Wl(0),h=ba(i);if((h||!h&&!o)&&(("body"!==ya(i)||xa(r))&&(d=Aa(i)),h)){const e=za(i);c=Xa(i),l.x=e.x+i.clientLeft,l.y=e.y+i.clientTop}const u=!r||h||o?Wl(0):$a(r,d);return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-d.scrollLeft*c.x+l.x+u.x,y:n.y*c.y-d.scrollTop*c.y+l.y+u.y}},getDocumentElement:Ia,getClippingRect:function(e){let{element:t,boundary:n,rootBoundary:i,strategy:s}=e;const o=[..."clippingAncestors"===n?Ta(t)?[]:Ua(t,this._c):[].concat(n),i],r=_a(t,o[0],s);let a=r.top,d=r.right,c=r.bottom,l=r.left;for(let h=1;h<o.length;h++){const e=_a(t,o[h],s);a=_l(e.top,a),d=$l(e.right,d),c=$l(e.bottom,c),l=_l(e.left,l)}return{width:d-l,height:c-a,x:l,y:a}},getOffsetParent:Ga,getElementRects:async function(e){const t=this.getOffsetParent||Ga,n=this.getDimensions,i=await n(e.floating);return{reference:Wa(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:i.width,height:i.height}}},getClientRects:e=>Array.from(e.getClientRects()),getDimensions:e=>{const{width:t,height:n}=La(e);return{width:t,height:n}},getScale:Xa,isElement:wa,isRTL:e=>"rtl"===Ba(e).direction},sh=e=>(void 0===e&&(e=0),{name:"offset",options:e,async fn(t){var n,i;const{x:s,y:o,placement:r,middlewareData:a}=t,d=await(async(e,t)=>{const{placement:n,platform:i,elements:s}=e,o=await(null==i.isRTL?void 0:i.isRTL(s.floating)),r=oa(n),a=ra(n),d="y"===ca(n),c=Zl.has(r)?-1:1,l=o&&d?-1:1,h=sa(t,e);let{mainAxis:u,crossAxis:p,alignmentAxis:g}="number"==typeof h?{mainAxis:h,crossAxis:0,alignmentAxis:null}:{mainAxis:h.mainAxis||0,crossAxis:h.crossAxis||0,alignmentAxis:h.alignmentAxis};return a&&"number"==typeof g&&(p="end"===a?-1*g:g),d?{x:p*l,y:u*c}:{x:u*c,y:p*l}})(t,e);return r===(null==(n=a.offset)?void 0:n.placement)&&null!=(i=a.arrow)&&i.alignmentOffset?{}:{x:s+d.x,y:o+d.y,data:{...d,placement:r}}}}),oh=e=>(void 0===e&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:i,placement:s,platform:o}=t,{mainAxis:r=!0,crossAxis:a=!1,limiter:d={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...c}=sa(e,t),l={x:n,y:i},h=await o.detectOverflow(t,c),u=ca(oa(s)),p=aa(u);let g=l[p],f=l[u];r&&(g=ia(g+h["y"===p?"top":"left"],g,g-h["y"===p?"bottom":"right"])),a&&(f=ia(f+h["y"===u?"top":"left"],f,f-h["y"===u?"bottom":"right"]));const m=d.fn({...t,[p]:g,[u]:f});return{...m,data:{x:m.x-n,y:m.y-i,enabled:{[p]:r,[u]:a}}}}}),rh=e=>(void 0===e&&(e={}),{name:"flip",options:e,async fn(t){var n,i;const{placement:s,middlewareData:o,rects:r,initialPlacement:a,platform:d,elements:c}=t,{mainAxis:l=!0,crossAxis:h=!0,fallbackPlacements:u,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:g="none",flipAlignment:f=!0,...m}=sa(e,t);if(null!=(n=o.arrow)&&n.alignmentOffset)return{};const y=oa(s),S=ca(a),I=oa(a)===a,v=await(null==d.isRTL?void 0:d.isRTL(c.floating)),w=u||(I||!f?[ua(a)]:(e=>{const t=ua(e);return[ha(e),t,ha(t)]})(a)),b="none"!==g;!u&&b&&w.push(...function(e,t,n,i){const s=ra(e);let o=((e,t,n)=>{switch(e){case"top":case"bottom":return n?t?Gl:Vl:t?Vl:Gl;case"left":case"right":return t?jl:Ql;default:return[]}})(oa(e),"start"===n,i);return s&&(o=o.map(e=>e+"-"+s),t&&(o=o.concat(o.map(ha)))),o}(a,f,g,v));const P=[a,...w],x=await d.detectOverflow(t,m),C=[];let T=(null==(i=o.flip)?void 0:i.overflows)||[];if(l&&C.push(x[y]),h){const e=((e,t,n)=>{void 0===n&&(n=!1);const i=ra(e),s=la(e),o=da(s);let r="x"===s?i===(n?"end":"start")?"right":"left":"start"===i?"bottom":"top";return t.reference[o]>t.floating[o]&&(r=ua(r)),[r,ua(r)]})(s,r,v);C.push(x[e[0]],x[e[1]])}if(T=[...T,{placement:s,overflows:C}],!C.every(e=>e<=0)){var M,E;const e=((null==(M=o.flip)?void 0:M.index)||0)+1,t=P[e];if(t&&("alignment"!==h||S===ca(t)||T.every(e=>ca(e.placement)!==S||e.overflows[0]>0)))return{data:{index:e,overflows:T},reset:{placement:t}};let n=null==(E=T.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:E.placement;if(!n)switch(p){case"bestFit":{var k;const e=null==(k=T.filter(e=>{if(b){const t=ca(e.placement);return t===S||"y"===t}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:k[0];e&&(n=e);break}case"initialPlacement":n=a}if(s!==n)return{reset:{placement:n}}}return{}}}),ah=["bottom"],dh=["bottom-start"],ch=["bottom"],lh=sd(null);export{Ja as CanvasKitFloatingContent,ta as CanvasKitFloatingToolbarLayer,tr as CanvasKitProvider,$r as CanvasKitRoot,nd as FloatingSelectionToolbarPageSpace,fr as applyCanvasActionShortcutOverrides,Js as createCanvasApiToken,F as createCustomShapeColor,Ur as createLocalSnapshotPersistence,R as createThemeShapeColor,Zs as defineCanvasPlugin,gr as getCanvasActionShortcuts,L as getThemeColorTokenName,D as isCustomShapeColorRef,K as isThemeShapeColorRef,Vr as readPersistedDocumentSnapshot,qr as readPersistedEditorSnapshots,Gr as readPersistedSessionSnapshot,eo as requireApi,X as resolveShapeColor,Y as shapeColorToCssColor,nr as useCanvasKit,Jo as useCanvasKitFloatingPortalContainer,Vo as useCanvasKitWheelCapture,ir as useCanvasValue,td as useFloatingSelectionToolbarPosition};